@jmruthers/pace-core 0.6.7 → 0.6.8

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 (100) hide show
  1. package/audit-tool/00-dependencies.cjs +215 -9
  2. package/audit-tool/audits/02-project-structure.cjs +3 -18
  3. package/audit-tool/audits/03-architecture.cjs +34 -6
  4. package/audit-tool/audits/06-security-rbac.cjs +10 -0
  5. package/audit-tool/audits/07-api-tech-stack.cjs +55 -1
  6. package/audit-tool/index.cjs +23 -19
  7. package/audit-tool/utils/report-utils.cjs +141 -2
  8. package/dist/{DataTable-7PMH7XN7.js → DataTable-6RMSCQJ6.js} +5 -5
  9. package/dist/{PublicPageProvider-DlsCaR5v.d.ts → PublicPageProvider-CIGSujI2.d.ts} +14 -8
  10. package/dist/{UnifiedAuthProvider-ZT6TIGM7.js → UnifiedAuthProvider-7SNDOWYD.js} +2 -2
  11. package/dist/{api-Y4MQWOFW.js → api-7P7DI652.js} +1 -1
  12. package/dist/{chunk-L4XMVJKY.js → chunk-4DDCYDQ3.js} +8 -7
  13. package/dist/{chunk-ZKAWKYT4.js → chunk-5W2A3DRC.js} +2 -1
  14. package/dist/{chunk-VBCS3DUA.js → chunk-EF2UGZWY.js} +3 -3
  15. package/dist/{chunk-JGWDVX64.js → chunk-EURB7QFZ.js} +123 -53
  16. package/dist/{chunk-BM4CQ5P3.js → chunk-GS5672WG.js} +6 -6
  17. package/dist/{chunk-ZFYPMX46.js → chunk-LX6U42O3.js} +1 -1
  18. package/dist/{chunk-5X4QLXRG.js → chunk-MPBLMWVR.js} +5 -3
  19. package/dist/{chunk-Q7Q7V5NV.js → chunk-NKHKXPI4.js} +7 -7
  20. package/dist/{chunk-6F3IILHI.js → chunk-S6ZQKDY6.js} +1 -1
  21. package/dist/{chunk-FTCRZOG2.js → chunk-T5CVK4R3.js} +5 -5
  22. package/dist/{chunk-GHYHJTYV.js → chunk-Z2FNRKF3.js} +13 -13
  23. package/dist/components.d.ts +1 -1
  24. package/dist/components.js +12 -12
  25. package/dist/eslint-rules/rules/04-code-quality.cjs +66 -10
  26. package/dist/eslint-rules/rules/06-security-rbac.cjs +8 -3
  27. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +190 -68
  28. package/dist/{functions-DHebl8-F.d.ts → functions-lBy5L2ry.d.ts} +1 -1
  29. package/dist/hooks.js +7 -7
  30. package/dist/index.d.ts +2 -2
  31. package/dist/index.js +15 -15
  32. package/dist/providers.js +2 -2
  33. package/dist/rbac/index.d.ts +1 -1
  34. package/dist/rbac/index.js +6 -6
  35. package/dist/theming/runtime.d.ts +48 -1
  36. package/dist/theming/runtime.js +1 -1
  37. package/dist/types.d.ts +2 -2
  38. package/dist/utils.js +1 -1
  39. package/docs/api/modules.md +63 -14
  40. package/docs/getting-started/dependencies.md +23 -0
  41. package/docs/implementation-guides/app-layout.md +1 -1
  42. package/docs/implementation-guides/data-tables.md +1 -1
  43. package/docs/standards/1-pace-core-compliance-standards.md +38 -1
  44. package/eslint-config-pace-core.cjs +30 -11
  45. package/package.json +45 -15
  46. package/scripts/eslint-audit.cjs +123 -0
  47. package/scripts/install-eslint-config.cjs +67 -2
  48. package/scripts/validate-dependencies.cjs +248 -0
  49. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +20 -8
  50. package/src/__tests__/templates/accessibility.test.template.tsx +1 -0
  51. package/src/components/AddressField/AddressField.tsx +26 -1
  52. package/src/components/Alert/Alert.test.tsx +86 -22
  53. package/src/components/Alert/Alert.tsx +19 -11
  54. package/src/components/Badge/Badge.tsx +1 -1
  55. package/src/components/Checkbox/Checkbox.test.tsx +2 -1
  56. package/src/components/ContextSelector/ContextSelector.tsx +39 -41
  57. package/src/components/DataTable/DataTable.tsx +1 -19
  58. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +6 -10
  59. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +18 -9
  60. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +3 -2
  61. package/src/components/DataTable/components/EmptyState.tsx +1 -1
  62. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +1 -1
  63. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +3 -3
  64. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +33 -29
  65. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -2
  66. package/src/components/FileUpload/FileUpload.test.tsx +22 -31
  67. package/src/components/FileUpload/FileUpload.tsx +29 -0
  68. package/src/components/NavigationMenu/NavigationMenu.test.tsx +48 -12
  69. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +9 -9
  70. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +30 -30
  71. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +4 -4
  72. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +7 -1
  73. package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +8 -5
  74. package/src/hooks/__tests__/useFileUrl.unit.test.ts +4 -0
  75. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +3 -3
  76. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +45 -8
  77. package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +22 -2
  78. package/src/hooks/public/usePublicRouteParams.ts +8 -4
  79. package/src/hooks/useAddressAutocomplete.test.ts +18 -18
  80. package/src/hooks/useEventTheme.ts +5 -1
  81. package/src/hooks/useFileUrl.ts +52 -8
  82. package/src/hooks/useOrganisationSecurity.test.ts +2 -1
  83. package/src/providers/__tests__/ProviderLifecycle.test.tsx +1 -1
  84. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +15 -6
  85. package/src/rbac/__tests__/rbac-functions.test.ts +3 -3
  86. package/src/rbac/api.test.ts +104 -0
  87. package/src/rbac/engine.ts +1 -1
  88. package/src/rbac/hooks/useCan.test.ts +2 -2
  89. package/src/rbac/secureClient.ts +1 -1
  90. package/src/rbac/types/functions.ts +1 -1
  91. package/src/theming/__tests__/parseEventColours.test.ts +117 -8
  92. package/src/theming/parseEventColours.ts +56 -2
  93. package/src/types/supabase.ts +2 -3
  94. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +9 -9
  95. package/src/utils/file-reference/__tests__/file-reference.test.ts +4 -0
  96. package/src/utils/formatting/formatDate.test.ts +3 -2
  97. package/src/utils/formatting/formatDateTime.test.ts +2 -2
  98. package/src/utils/google-places/googlePlacesUtils.test.ts +36 -24
  99. package/src/utils/storage/__tests__/helpers.unit.test.ts +19 -12
  100. package/src/utils/storage/helpers.test.ts +69 -3
@@ -1,12 +1,12 @@
1
- import { AccessDenied } from './chunk-6F3IILHI.js';
2
- import { Input, Dialog, DialogContent, DialogHeader, DialogBody, DialogFooter, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Alert, AlertDescription, Label, SelectLabel, SelectSeparator, DialogTitle, deriveFormKey, useSessionDraft, filterSensitiveFields, isSensitiveField, SelectGroup, AlertTitle, Progress } from './chunk-Q7Q7V5NV.js';
3
- import { Button, useRBAC, useResolvedScope, usePermissions, useEvents, useCan } from './chunk-BM4CQ5P3.js';
4
- import { useAddressAutocomplete, createFileReferenceService, uploadFileWithReference, usePublicFileDisplay, useFileDisplay, getPublicUrl, getSignedUrl, generateFileUrlsBatch, useEventTheme, usePreventTabReload } from './chunk-5X4QLXRG.js';
5
- import { clearPalette } from './chunk-ZKAWKYT4.js';
1
+ import { AccessDenied } from './chunk-S6ZQKDY6.js';
2
+ import { Input, Dialog, DialogContent, DialogHeader, DialogBody, DialogFooter, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Alert, AlertDescription, Label, SelectLabel, SelectSeparator, DialogTitle, deriveFormKey, useSessionDraft, filterSensitiveFields, isSensitiveField, SelectGroup, AlertTitle, Progress } from './chunk-NKHKXPI4.js';
3
+ import { Button, useRBAC, useResolvedScope, usePermissions, useEvents, useCan } from './chunk-GS5672WG.js';
4
+ import { useAddressAutocomplete, createFileReferenceService, uploadFileWithReference, usePublicFileDisplay, useFileDisplay, getPublicUrl, getSignedUrl, generateFileUrlsBatch, useEventTheme, usePreventTabReload } from './chunk-MPBLMWVR.js';
5
+ import { clearPalette } from './chunk-5W2A3DRC.js';
6
6
  import { useToast } from './chunk-S7DKJPLT.js';
7
- import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, useIsPublicPage, PublicPageContext, useAppConfig, ErrorBoundary } from './chunk-VBCS3DUA.js';
8
- import { useUnifiedAuth, useOrganisations, UnifiedAuthContext, EventServiceContext, useSessionRestoration } from './chunk-FTCRZOG2.js';
9
- import { EventContextRequiredError, OrganisationContextRequiredError, isSuperAdmin } from './chunk-ZFYPMX46.js';
7
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, useIsPublicPage, PublicPageContext, useAppConfig, ErrorBoundary } from './chunk-EF2UGZWY.js';
8
+ import { useUnifiedAuth, useOrganisations, UnifiedAuthContext, EventServiceContext, useSessionRestoration } from './chunk-T5CVK4R3.js';
9
+ import { EventContextRequiredError, OrganisationContextRequiredError, isSuperAdmin } from './chunk-LX6U42O3.js';
10
10
  import { assertAppId } from './chunk-4SXLQIZO.js';
11
11
  import { getAppId } from './chunk-FEJLJNWA.js';
12
12
  import { LoadingSpinner } from './chunk-A3W6LW53.js';
@@ -16,7 +16,7 @@ import { createLogger, logger } from './chunk-TTRFSOKR.js';
16
16
  import * as React6 from 'react';
17
17
  import React6__default, { useState, useRef, useMemo, useCallback, useEffect, useContext } from 'react';
18
18
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
19
- import { FileText, ExternalLink, X, ChevronDown, KeyRound, LogOut, AlertCircle, RefreshCw, Calendar as Calendar$1, Building2, File, Check } from 'lucide-react';
19
+ import { FileText, ExternalLink, X, ChevronDown, KeyRound, LogOut, Calendar as Calendar$1, Building2, AlertCircle, RefreshCw, File, Check } from 'lucide-react';
20
20
  import * as SwitchPrimitive from '@radix-ui/react-switch';
21
21
  import * as TabsPrimitive from '@radix-ui/react-tabs';
22
22
  import { useDayPicker, DayPicker } from 'react-day-picker';
@@ -53,6 +53,7 @@ var AddressField = React6.forwardRef(
53
53
  const inputRef = React6.useRef(null);
54
54
  const suggestionsRef = React6.useRef(null);
55
55
  const containerRef = React6.useRef(null);
56
+ const blurTimeoutRef = React6.useRef(null);
56
57
  const value = controlledValue !== void 0 ? controlledValue : internalValue;
57
58
  const { suggestions, isLoading, error: autocompleteError, selectAddress, clearSuggestions } = useAddressAutocomplete(apiKey, value, {
58
59
  autocompleteOptions,
@@ -145,16 +146,33 @@ var AddressField = React6.forwardRef(
145
146
  }, [suggestions, value]);
146
147
  const handleBlur = React6.useCallback(
147
148
  (e) => {
148
- setTimeout(() => {
149
+ if (blurTimeoutRef.current) {
150
+ clearTimeout(blurTimeoutRef.current);
151
+ blurTimeoutRef.current = null;
152
+ }
153
+ blurTimeoutRef.current = setTimeout(() => {
154
+ if (typeof window === "undefined" || typeof document === "undefined") {
155
+ blurTimeoutRef.current = null;
156
+ return;
157
+ }
149
158
  if (!containerRef.current?.contains(document.activeElement)) {
150
159
  setInputFocused(false);
151
160
  setIsOpen(false);
152
161
  setSelectedIndex(-1);
153
162
  }
163
+ blurTimeoutRef.current = null;
154
164
  }, 200);
155
165
  },
156
166
  []
157
167
  );
168
+ React6.useEffect(() => {
169
+ return () => {
170
+ if (blurTimeoutRef.current) {
171
+ clearTimeout(blurTimeoutRef.current);
172
+ blurTimeoutRef.current = null;
173
+ }
174
+ };
175
+ }, []);
158
176
  React6.useEffect(() => {
159
177
  const handleClickOutside = (event) => {
160
178
  if (containerRef.current && !containerRef.current.contains(event.target)) {
@@ -282,20 +300,28 @@ function useFileUrl(fileReference, options) {
282
300
  const [isLoading, setIsLoading] = useState(false);
283
301
  const [error, setError] = useState(null);
284
302
  const fileReferenceIdRef = useRef(null);
303
+ const isLoadingRef = useRef(false);
304
+ const urlRef = useRef(null);
305
+ useEffect(() => {
306
+ isLoadingRef.current = isLoading;
307
+ urlRef.current = url;
308
+ }, [isLoading, url]);
285
309
  const loadUrl = useCallback(async () => {
286
310
  if (!fileReference) {
287
311
  setUrl(null);
288
312
  setIsLoading(false);
289
313
  setError(null);
314
+ fileReferenceIdRef.current = null;
290
315
  return;
291
316
  }
292
317
  if (!supabase) {
293
318
  setUrl(null);
294
319
  setIsLoading(false);
295
320
  setError(new Error("Supabase client is required for URL generation"));
321
+ fileReferenceIdRef.current = null;
296
322
  return;
297
323
  }
298
- if (isLoading || url && fileReferenceIdRef.current === fileReference.id) {
324
+ if (isLoadingRef.current || urlRef.current && fileReferenceIdRef.current === fileReference.id) {
299
325
  return;
300
326
  }
301
327
  setIsLoading(true);
@@ -323,24 +349,49 @@ function useFileUrl(fileReference, options) {
323
349
  } finally {
324
350
  setIsLoading(false);
325
351
  }
326
- }, [fileReference, supabase, organisation_id, isLoading, url]);
352
+ }, [fileReference, supabase, organisation_id]);
327
353
  const clear = useCallback(() => {
328
354
  setUrl(null);
329
355
  setError(null);
330
356
  setIsLoading(false);
331
357
  fileReferenceIdRef.current = null;
358
+ urlRef.current = null;
332
359
  }, []);
333
360
  useEffect(() => {
334
- if (autoLoad) {
335
- if (fileReferenceIdRef.current !== fileReference?.id) {
361
+ if (!autoLoad) {
362
+ return;
363
+ }
364
+ const currentFileId = fileReference?.id ?? null;
365
+ const previousFileId = fileReferenceIdRef.current;
366
+ if (!fileReference) {
367
+ if (previousFileId !== null) {
336
368
  setUrl(null);
337
369
  setError(null);
370
+ fileReferenceIdRef.current = null;
371
+ urlRef.current = null;
338
372
  }
339
- if (fileReference && !url && !isLoading) {
373
+ return;
374
+ }
375
+ if (previousFileId !== null && previousFileId !== currentFileId) {
376
+ setUrl(null);
377
+ setError(null);
378
+ fileReferenceIdRef.current = null;
379
+ urlRef.current = null;
380
+ loadUrl();
381
+ return;
382
+ }
383
+ if (previousFileId === null && currentFileId !== null) {
384
+ fileReferenceIdRef.current = currentFileId;
385
+ if (!isLoading && !url) {
340
386
  loadUrl();
341
387
  }
388
+ } else if (previousFileId === currentFileId && !url && !isLoading) {
389
+ if (fileReferenceIdRef.current !== currentFileId) {
390
+ fileReferenceIdRef.current = currentFileId;
391
+ }
392
+ loadUrl();
342
393
  }
343
- }, [fileReference?.id, autoLoad, loadUrl, url, isLoading]);
394
+ }, [fileReference, autoLoad, loadUrl, url, isLoading]);
344
395
  return {
345
396
  url,
346
397
  isLoading,
@@ -2604,7 +2655,6 @@ function ContextSelector({
2604
2655
  error: eventError,
2605
2656
  refreshEvents
2606
2657
  } = useEvents();
2607
- const { isSuperAdmin: isSuperAdmin2 } = useRBAC();
2608
2658
  const isLoading = showOrganisations && orgLoading || showEvents && eventLoading;
2609
2659
  const hasError = showOrganisations && orgError || showEvents && eventError;
2610
2660
  const hasItems = showOrganisations && (organisations?.length || 0) > 0 || showEvents && (events?.length || 0) > 0;
@@ -2617,6 +2667,36 @@ function ContextSelector({
2617
2667
  }
2618
2668
  return "";
2619
2669
  }, [showOrganisations, showEvents, selectedOrganisation?.id, selectedEvent]);
2670
+ const displayValue = useMemo(() => {
2671
+ if (showEvents && selectedEvent) {
2672
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2673
+ /* @__PURE__ */ jsx(Calendar$1, { className: "inline-block size-4 mr-2" }),
2674
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: selectedEvent.event_name })
2675
+ ] });
2676
+ }
2677
+ if (showOrganisations && selectedOrganisation) {
2678
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2679
+ /* @__PURE__ */ jsx(Building2, { className: "inline-block size-4 mr-2" }),
2680
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: selectedOrganisation.display_name })
2681
+ ] });
2682
+ }
2683
+ return null;
2684
+ }, [showOrganisations, showEvents, selectedOrganisation, selectedEvent]);
2685
+ const effectivePlaceholder = useMemo(() => {
2686
+ if (placeholder !== "Select organisation or event") {
2687
+ return placeholder;
2688
+ }
2689
+ if (showOrganisations && showEvents) {
2690
+ return "Select organisation or event";
2691
+ }
2692
+ if (showOrganisations) {
2693
+ return "Select organisation";
2694
+ }
2695
+ if (showEvents) {
2696
+ return "Select event";
2697
+ }
2698
+ return placeholder;
2699
+ }, [placeholder, showOrganisations, showEvents]);
2620
2700
  const handleValueChange = (value) => {
2621
2701
  if (disabled || isLoading) return;
2622
2702
  if (value.startsWith("org:") && showOrganisations) {
@@ -2704,36 +2784,6 @@ function ContextSelector({
2704
2784
  }
2705
2785
  return null;
2706
2786
  }
2707
- const displayValue = useMemo(() => {
2708
- if (showEvents && selectedEvent) {
2709
- return /* @__PURE__ */ jsxs(Fragment, { children: [
2710
- /* @__PURE__ */ jsx(Calendar$1, { className: "inline-block size-4 mr-2" }),
2711
- /* @__PURE__ */ jsx("span", { className: "truncate", children: selectedEvent.event_name })
2712
- ] });
2713
- }
2714
- if (showOrganisations && selectedOrganisation) {
2715
- return /* @__PURE__ */ jsxs(Fragment, { children: [
2716
- /* @__PURE__ */ jsx(Building2, { className: "inline-block size-4 mr-2" }),
2717
- /* @__PURE__ */ jsx("span", { className: "truncate", children: selectedOrganisation.display_name })
2718
- ] });
2719
- }
2720
- return null;
2721
- }, [showOrganisations, showEvents, selectedOrganisation, selectedEvent]);
2722
- const effectivePlaceholder = useMemo(() => {
2723
- if (placeholder !== "Select organisation or event") {
2724
- return placeholder;
2725
- }
2726
- if (showOrganisations && showEvents) {
2727
- return "Select organisation or event";
2728
- }
2729
- if (showOrganisations) {
2730
- return "Select organisation";
2731
- }
2732
- if (showEvents) {
2733
- return "Select event";
2734
- }
2735
- return placeholder;
2736
- }, [placeholder, showOrganisations, showEvents]);
2737
2787
  return /* @__PURE__ */ jsxs(
2738
2788
  Select,
2739
2789
  {
@@ -2994,7 +3044,7 @@ function useNavigationFiltering({
2994
3044
  }
2995
3045
  const userId2 = authContext.user.id;
2996
3046
  const appName = authContext.appName;
2997
- import('./api-Y4MQWOFW.js').then(({ resolveAppContext }) => {
3047
+ import('./api-7P7DI652.js').then(({ resolveAppContext }) => {
2998
3048
  resolveAppContext({
2999
3049
  userId: userId2,
3000
3050
  appName
@@ -3783,7 +3833,7 @@ function PaceAppLayout({
3783
3833
  return;
3784
3834
  }
3785
3835
  try {
3786
- const { isSuperAdmin: checkSuperAdminDynamic } = await import('./api-Y4MQWOFW.js');
3836
+ const { isSuperAdmin: checkSuperAdminDynamic } = await import('./api-7P7DI652.js');
3787
3837
  const isSuper = await checkSuperAdminDynamic(user.id);
3788
3838
  if (isSuper) {
3789
3839
  if (isMounted) {
@@ -3797,7 +3847,7 @@ function PaceAppLayout({
3797
3847
  }
3798
3848
  }
3799
3849
  try {
3800
- const { getPermissionMap } = await import('./api-Y4MQWOFW.js');
3850
+ const { getPermissionMap } = await import('./api-7P7DI652.js');
3801
3851
  const permissionScope = {
3802
3852
  organisationId: currentScope.organisationId,
3803
3853
  eventId: currentScope.eventId,
@@ -3808,7 +3858,7 @@ function PaceAppLayout({
3808
3858
  userId: user.id,
3809
3859
  scope: permissionScope
3810
3860
  });
3811
- const { getPageScopeType } = await import('./api-Y4MQWOFW.js');
3861
+ const { getPageScopeType } = await import('./api-7P7DI652.js');
3812
3862
  const effectiveAppId = currentScope.appId || resolvedAppId;
3813
3863
  const effectiveAppName = appName;
3814
3864
  const hasEventContext = !!currentScope.eventId;
@@ -3917,7 +3967,7 @@ function PaceAppLayout({
3917
3967
  let hasAccess = true;
3918
3968
  if (currentRoute.pageId && currentRoute.permissions && currentRoute.permissions.length > 0) {
3919
3969
  try {
3920
- const { isPermittedCached } = await import('./api-Y4MQWOFW.js');
3970
+ const { isPermittedCached } = await import('./api-7P7DI652.js');
3921
3971
  const hasPagePermission = await isPermittedCached({
3922
3972
  userId: user?.id || "",
3923
3973
  scope,
@@ -3933,7 +3983,7 @@ function PaceAppLayout({
3933
3983
  }
3934
3984
  }
3935
3985
  if (hasAccess && currentRoute.roles && currentRoute.roles.length > 0 && user?.id) {
3936
- const { useUnifiedAuth: useUnifiedAuth2 } = await import('./UnifiedAuthProvider-ZT6TIGM7.js');
3986
+ const { useUnifiedAuth: useUnifiedAuth2 } = await import('./UnifiedAuthProvider-7SNDOWYD.js');
3937
3987
  hasAccess = true;
3938
3988
  }
3939
3989
  if (!isMounted) return;
@@ -4424,7 +4474,16 @@ function FileUpload({
4424
4474
  const [isResolvingAppId, setIsResolvingAppId] = useState(!app_id);
4425
4475
  const [appIdError, setAppIdError] = useState(null);
4426
4476
  const fileInputRef = useRef(null);
4477
+ const progressIntervalsRef = useRef(/* @__PURE__ */ new Map());
4427
4478
  const { uploadFile, isLoading, error } = useFileReference(supabase);
4479
+ useEffect(() => {
4480
+ return () => {
4481
+ progressIntervalsRef.current.forEach((interval) => {
4482
+ clearInterval(interval);
4483
+ });
4484
+ progressIntervalsRef.current.clear();
4485
+ };
4486
+ }, []);
4428
4487
  useEffect(() => {
4429
4488
  if (app_id) {
4430
4489
  setResolvedAppId(app_id);
@@ -4579,11 +4638,16 @@ function FileUpload({
4579
4638
  return updated;
4580
4639
  });
4581
4640
  }, 200);
4641
+ progressIntervalsRef.current.set(fileId, progressInterval);
4582
4642
  if (!resolvedAppId) {
4643
+ clearInterval(progressInterval);
4644
+ progressIntervalsRef.current.delete(fileId);
4583
4645
  const errorMsg = appIdError || "App ID not available. Please provide app_id prop or set app name.";
4584
4646
  throw new Error(errorMsg);
4585
4647
  }
4586
4648
  if (!pageContext) {
4649
+ clearInterval(progressInterval);
4650
+ progressIntervalsRef.current.delete(fileId);
4587
4651
  const errorMsg = "pageContext is required for file upload. This is used for permission checks.";
4588
4652
  throw new Error(errorMsg);
4589
4653
  }
@@ -4601,6 +4665,7 @@ function FileUpload({
4601
4665
  is_public: isPublic
4602
4666
  }, file);
4603
4667
  clearInterval(progressInterval);
4668
+ progressIntervalsRef.current.delete(fileId);
4604
4669
  if (result) {
4605
4670
  setUploadStates((prev) => {
4606
4671
  const updated = new Map(prev);
@@ -4656,6 +4721,11 @@ function FileUpload({
4656
4721
  onUploadError?.("Upload failed", file);
4657
4722
  }
4658
4723
  } catch (err) {
4724
+ const interval = progressIntervalsRef.current.get(fileId);
4725
+ if (interval) {
4726
+ clearInterval(interval);
4727
+ progressIntervalsRef.current.delete(fileId);
4728
+ }
4659
4729
  const errorMessage = err instanceof Error ? err.message : "Upload failed";
4660
4730
  setUploadStates((prev) => {
4661
4731
  const updated = new Map(prev);
@@ -1,6 +1,6 @@
1
- import { useAppConfig, useOrganisationSecurity } from './chunk-VBCS3DUA.js';
2
- import { useEventService, useUnifiedAuth, useOrganisations } from './chunk-FTCRZOG2.js';
3
- import { OrganisationContextRequiredError, getRBACLogger, resolveAppContext, getPageScopeType, ContextValidator, getPermissionMap, getRoleContext, getAccessLevel, isPermittedCached, isPermitted, isSuperAdmin } from './chunk-ZFYPMX46.js';
1
+ import { useAppConfig, useOrganisationSecurity } from './chunk-EF2UGZWY.js';
2
+ import { useEventService, useUnifiedAuth, useOrganisations } from './chunk-T5CVK4R3.js';
3
+ import { OrganisationContextRequiredError, getRBACLogger, resolveAppContext, getPageScopeType, ContextValidator, getPermissionMap, getRoleContext, getAccessLevel, isPermittedCached, isPermitted, isSuperAdmin } from './chunk-LX6U42O3.js';
4
4
  import { getCurrentAppName } from './chunk-OJ4SKRSV.js';
5
5
  import { cn } from './chunk-7ILTDCL2.js';
6
6
  import { createLogger, logger } from './chunk-TTRFSOKR.js';
@@ -530,7 +530,7 @@ var _SecureSupabaseClient = class _SecureSupabaseClient {
530
530
  }
531
531
  const rpcContextWhitelist = {
532
532
  // RPCs that accept all three context parameters
533
- "rbac_roles_list": /* @__PURE__ */ new Set(["p_organisation_id", "p_event_id", "p_app_id"]),
533
+ "data_rbac_roles_list": /* @__PURE__ */ new Set(["p_organisation_id", "p_event_id", "p_app_id"]),
534
534
  // RPCs that accept only p_organisation_id (not p_app_id or p_event_id)
535
535
  "data_file_reference_by_category_list": /* @__PURE__ */ new Set(["p_organisation_id"])
536
536
  // Add more RPCs here as we discover them
@@ -881,7 +881,7 @@ function useAccessLevel(userId, scope) {
881
881
  try {
882
882
  setIsLoading(true);
883
883
  setError(null);
884
- const { isSuperAdmin: checkSuperAdmin } = await import('./api-Y4MQWOFW.js');
884
+ const { isSuperAdmin: checkSuperAdmin } = await import('./api-7P7DI652.js');
885
885
  const isSuperAdminUser = await checkSuperAdmin(userId);
886
886
  if (isSuperAdminUser) {
887
887
  setAccessLevel("super");
@@ -959,7 +959,7 @@ function useCan(userId, scope, permission, pageId, useCache = true, precomputedS
959
959
  const checkSuperAdmin = async () => {
960
960
  const startTime = Date.now();
961
961
  try {
962
- const { isSuperAdmin: checkSuperAdmin2 } = await import('./api-Y4MQWOFW.js');
962
+ const { isSuperAdmin: checkSuperAdmin2 } = await import('./api-7P7DI652.js');
963
963
  const timeoutWarning = setTimeout(() => {
964
964
  if (!cancelled) {
965
965
  console.warn("[useCan] Super admin check taking longer than 5 seconds", {
@@ -1349,7 +1349,7 @@ var RBACEngine = class {
1349
1349
  async resolveAppContext(input) {
1350
1350
  try {
1351
1351
  const { userId, appName } = input;
1352
- const { data, error } = await this.supabase.rpc("util_app_resolve", {
1352
+ const { data, error } = await this.supabase.rpc("data_app_resolve", {
1353
1353
  p_user_id: userId,
1354
1354
  p_app_name: appName
1355
1355
  });
@@ -1,5 +1,5 @@
1
- import { clearPalette, parseAndNormalizeEventColours, applyPalette } from './chunk-ZKAWKYT4.js';
2
- import { EventServiceContext } from './chunk-FTCRZOG2.js';
1
+ import { clearPalette, parseAndNormalizeEventColours, applyPalette } from './chunk-5W2A3DRC.js';
2
+ import { EventServiceContext } from './chunk-T5CVK4R3.js';
3
3
  import { assertAppId } from './chunk-4SXLQIZO.js';
4
4
  import { fetchPlaceDetails, createAddressFromPlaceResult, getAddressByPlaceId, fetchPlaceAutocomplete, setOrganisationContext } from './chunk-FYHN4DD5.js';
5
5
  import { createLogger, logger } from './chunk-TTRFSOKR.js';
@@ -1238,7 +1238,7 @@ var FileReferenceServiceImpl = class {
1238
1238
  const userIdForCheck = authenticatedUserId || options.userId;
1239
1239
  if (userIdForCheck) {
1240
1240
  try {
1241
- const { isSuperAdmin } = await import('./api-Y4MQWOFW.js');
1241
+ const { isSuperAdmin } = await import('./api-7P7DI652.js');
1242
1242
  isSuperAdminUser = await isSuperAdmin(userIdForCheck);
1243
1243
  if (isSuperAdminUser) {
1244
1244
  log3.debug("Super admin detected - bypassing permission checks", { userId: userIdForCheck });
@@ -2087,6 +2087,7 @@ function invalidateFileDisplayCache(table_name, record_id, organisation_id, cate
2087
2087
  authenticatedFileCache.delete(allCategoryKey);
2088
2088
  }
2089
2089
  }
2090
+ var log4 = createLogger("useEventTheme");
2090
2091
  function useEventTheme(event) {
2091
2092
  const location = useLocation();
2092
2093
  const eventServiceContext = useContext(EventServiceContext);
@@ -2111,6 +2112,7 @@ function useEventTheme(event) {
2111
2112
  try {
2112
2113
  applyPalette(normalized);
2113
2114
  } catch (error) {
2115
+ log4.error("Failed to apply event palette:", error);
2114
2116
  }
2115
2117
  return () => {
2116
2118
  };
@@ -1,8 +1,8 @@
1
- import { Button, ButtonGroup, useResolvedScope, useCan } from './chunk-BM4CQ5P3.js';
1
+ import { Button, ButtonGroup, useResolvedScope, useCan } from './chunk-GS5672WG.js';
2
2
  import { useFocusTrap, useDataTablePerformance, toast } from './chunk-S7DKJPLT.js';
3
- import { Card, CardHeader, CardDescription, CardContent, CardFooter, CardTitle } from './chunk-VBCS3DUA.js';
4
- import { useUnifiedAuth } from './chunk-FTCRZOG2.js';
5
- import { isSuperAdmin } from './chunk-ZFYPMX46.js';
3
+ import { Card, CardHeader, CardDescription, CardContent, CardFooter, CardTitle } from './chunk-EF2UGZWY.js';
4
+ import { useUnifiedAuth } from './chunk-T5CVK4R3.js';
5
+ import { isSuperAdmin } from './chunk-LX6U42O3.js';
6
6
  import { renderSafeHtml, LoadingSpinner } from './chunk-A3W6LW53.js';
7
7
  import { cn } from './chunk-7ILTDCL2.js';
8
8
  import { createLogger } from './chunk-TTRFSOKR.js';
@@ -1153,17 +1153,17 @@ var getAlertClasses = (variant = "default") => {
1153
1153
  };
1154
1154
  return `${baseClasses} ${variantClasses[variant]}`;
1155
1155
  };
1156
- var Alert = React7.forwardRef(({ className, variant = "default", ...props }, ref) => {
1156
+ var Alert = React7.forwardRef(({ className, variant = "default", role = "alert", ...props }, ref) => {
1157
1157
  const contextValue = React7.useMemo(() => ({ variant }), [variant]);
1158
1158
  if (variant === "inline") {
1159
1159
  return /* @__PURE__ */ jsx(AlertContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(React7.Fragment, { ...props }) });
1160
1160
  }
1161
1161
  return /* @__PURE__ */ jsx(AlertContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
1162
- "aside",
1162
+ "p",
1163
1163
  {
1164
1164
  ref,
1165
1165
  className: cn(getAlertClasses(variant), className),
1166
- role: "alert",
1166
+ role,
1167
1167
  ...props
1168
1168
  }
1169
1169
  ) });
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-BM4CQ5P3.js';
1
+ import { Button } from './chunk-GS5672WG.js';
2
2
  import { ShieldX } from 'lucide-react';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { isRBACInitialized, setupRBAC } from './chunk-ZFYPMX46.js';
1
+ import { isRBACInitialized, setupRBAC } from './chunk-LX6U42O3.js';
2
2
  import { assertOrganisationId, assertUserId } from './chunk-4SXLQIZO.js';
3
3
  import { secureStorage } from './chunk-HF6O3O37.js';
4
4
  import { createLogger, logger } from './chunk-TTRFSOKR.js';
@@ -1017,7 +1017,7 @@ var _OrganisationService = class _OrganisationService extends BaseService {
1017
1017
  let userIsSuperAdmin = false;
1018
1018
  if (this.user?.id) {
1019
1019
  try {
1020
- const { isSuperAdmin: checkSuperAdmin, isRBACInitialized: isRBACInitialized2, setupRBAC: setupRBAC2 } = await import('./api-Y4MQWOFW.js');
1020
+ const { isSuperAdmin: checkSuperAdmin, isRBACInitialized: isRBACInitialized2, setupRBAC: setupRBAC2 } = await import('./api-7P7DI652.js');
1021
1021
  if (!isRBACInitialized2() && this.supabaseClient) {
1022
1022
  setupRBAC2(this.supabaseClient);
1023
1023
  }
@@ -1276,7 +1276,7 @@ var _EventService = class _EventService extends BaseService {
1276
1276
  this.setSelectedEventId = setSelectedEventId;
1277
1277
  if (user?.id) {
1278
1278
  try {
1279
- const { isRBACInitialized: isRBACInitialized2, isSuperAdmin: checkSuperAdmin, setupRBAC: setupRBAC2 } = await import('./api-Y4MQWOFW.js');
1279
+ const { isRBACInitialized: isRBACInitialized2, isSuperAdmin: checkSuperAdmin, setupRBAC: setupRBAC2 } = await import('./api-7P7DI652.js');
1280
1280
  if (!isRBACInitialized2() && this.supabaseClient) {
1281
1281
  setupRBAC2(this.supabaseClient);
1282
1282
  }
@@ -1490,7 +1490,7 @@ var _EventService = class _EventService extends BaseService {
1490
1490
  let organisationIdForRpc = null;
1491
1491
  let userIsSuperAdmin = this.isSuperAdmin;
1492
1492
  try {
1493
- const { isRBACInitialized: isRBACInitialized2, isSuperAdmin: checkSuperAdmin, setupRBAC: setupRBAC2 } = await import('./api-Y4MQWOFW.js');
1493
+ const { isRBACInitialized: isRBACInitialized2, isSuperAdmin: checkSuperAdmin, setupRBAC: setupRBAC2 } = await import('./api-7P7DI652.js');
1494
1494
  if (!isRBACInitialized2() && this.supabaseClient) {
1495
1495
  setupRBAC2(this.supabaseClient);
1496
1496
  }
@@ -2386,7 +2386,7 @@ function UnifiedAuthContextProvider({
2386
2386
  resolvedUserIdRef.current = currentUserId;
2387
2387
  const userId = currentUserId;
2388
2388
  const appNameValue = appName;
2389
- import('./api-Y4MQWOFW.js').then(async ({ resolveAppContext, setupRBAC: setupRBAC2 }) => {
2389
+ import('./api-7P7DI652.js').then(async ({ resolveAppContext, setupRBAC: setupRBAC2 }) => {
2390
2390
  try {
2391
2391
  setupRBAC2(supabase);
2392
2392
  const result = await resolveAppContext({
@@ -1,7 +1,7 @@
1
- import { AccessDenied } from './chunk-6F3IILHI.js';
2
- import { useResolvedScope, scopeEqual, useCan, useMultiplePermissions } from './chunk-BM4CQ5P3.js';
3
- import { useUnifiedAuth } from './chunk-FTCRZOG2.js';
4
- import { getRBACLogger, getRBACConfig, RBACNotInitializedError } from './chunk-ZFYPMX46.js';
1
+ import { AccessDenied } from './chunk-S6ZQKDY6.js';
2
+ import { useResolvedScope, scopeEqual, useCan, useMultiplePermissions } from './chunk-GS5672WG.js';
3
+ import { useUnifiedAuth } from './chunk-T5CVK4R3.js';
4
+ import { getRBACLogger, getRBACConfig, RBACNotInitializedError } from './chunk-LX6U42O3.js';
5
5
  import { createLogger } from './chunk-TTRFSOKR.js';
6
6
  import React, { useRef, useMemo, useState, useEffect } from 'react';
7
7
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
@@ -14,7 +14,7 @@ var RPCFunction = /* @__PURE__ */ ((RPCFunction2) => {
14
14
  RPCFunction2["RBAC_PAGE_ACCESS_CHECK"] = "rbac_page_access_check";
15
15
  RPCFunction2["RBAC_ROLE_GRANT"] = "rbac_role_grant";
16
16
  RPCFunction2["RBAC_ROLE_REVOKE"] = "rbac_role_revoke";
17
- RPCFunction2["RBAC_ROLES_LIST"] = "rbac_roles_list";
17
+ RPCFunction2["RBAC_ROLES_LIST"] = "data_rbac_roles_list";
18
18
  RPCFunction2["RBAC_ROLE_VALIDATE"] = "rbac_role_validate";
19
19
  RPCFunction2["RBAC_SESSION_TRACK"] = "rbac_session_track";
20
20
  RPCFunction2["RBAC_AUDIT_LOG"] = "rbac_audit_log";
@@ -74,7 +74,7 @@ var PagePermissionGuardComponent = ({
74
74
  const checkSuperAdmin = async () => {
75
75
  const startTime = Date.now();
76
76
  try {
77
- const { isSuperAdmin: checkSuperAdmin2 } = await import('./api-Y4MQWOFW.js');
77
+ const { isSuperAdmin: checkSuperAdmin2 } = await import('./api-7P7DI652.js');
78
78
  const timeoutPromise = new Promise((_, reject) => {
79
79
  setTimeout(() => reject(new Error("Super admin check timeout")), 1e4);
80
80
  });
@@ -377,7 +377,7 @@ function withPermissionGuard(config, handler) {
377
377
  if (!userId || !organisationId) {
378
378
  throw new Error("User context required for permission check");
379
379
  }
380
- const { isPermitted: isPermitted2 } = await import('./api-Y4MQWOFW.js');
380
+ const { isPermitted: isPermitted2 } = await import('./api-7P7DI652.js');
381
381
  const hasPermission = await isPermitted2({
382
382
  userId,
383
383
  scope: { organisationId, eventId, appId },
@@ -400,7 +400,7 @@ function withAccessLevelGuard(minLevel, handler) {
400
400
  if (!userId || !organisationId) {
401
401
  throw new Error("User context required for access level check");
402
402
  }
403
- const { getAccessLevel: getAccessLevel2 } = await import('./api-Y4MQWOFW.js');
403
+ const { getAccessLevel: getAccessLevel2 } = await import('./api-7P7DI652.js');
404
404
  const accessLevel = await getAccessLevel2({
405
405
  userId,
406
406
  scope: { organisationId, eventId, appId }
@@ -425,7 +425,7 @@ function withRoleGuard(config, handler) {
425
425
  throw new Error("User context required for role check");
426
426
  }
427
427
  if (config.globalRoles && config.globalRoles.length > 0) {
428
- const { isSuperAdmin } = await import('./api-Y4MQWOFW.js');
428
+ const { isSuperAdmin } = await import('./api-7P7DI652.js');
429
429
  const isSuper = await isSuperAdmin(userId);
430
430
  if (isSuper) {
431
431
  if (organisationId) {
@@ -451,14 +451,14 @@ function withRoleGuard(config, handler) {
451
451
  }
452
452
  }
453
453
  if (config.organisationRoles && config.organisationRoles.length > 0) {
454
- const { isOrganisationAdmin } = await import('./api-Y4MQWOFW.js');
454
+ const { isOrganisationAdmin } = await import('./api-7P7DI652.js');
455
455
  const isOrgAdmin = await isOrganisationAdmin(userId, organisationId);
456
456
  if (!isOrgAdmin && config.requireAll !== false) {
457
457
  throw new Error(`Organisation admin role required`);
458
458
  }
459
459
  }
460
460
  if (config.eventAppRoles && config.eventAppRoles.length > 0 && eventId && appId) {
461
- const { isEventAdmin } = await import('./api-Y4MQWOFW.js');
461
+ const { isEventAdmin } = await import('./api-7P7DI652.js');
462
462
  const isEventAdminUser = await isEventAdmin(userId, { organisationId, eventId, appId });
463
463
  if (!isEventAdminUser && config.requireAll !== false) {
464
464
  throw new Error(`Event admin role required`);
@@ -498,7 +498,7 @@ function createRBACMiddleware(config) {
498
498
  );
499
499
  if (protectedRoute) {
500
500
  try {
501
- const { isPermitted: isPermitted2 } = await import('./api-Y4MQWOFW.js');
501
+ const { isPermitted: isPermitted2 } = await import('./api-7P7DI652.js');
502
502
  const hasPermission = await isPermitted2({
503
503
  userId,
504
504
  scope: { organisationId },
@@ -525,7 +525,7 @@ function createRBACExpressMiddleware(config) {
525
525
  return res.status(401).json({ error: "User context required" });
526
526
  }
527
527
  try {
528
- const { isPermitted: isPermitted2 } = await import('./api-Y4MQWOFW.js');
528
+ const { isPermitted: isPermitted2 } = await import('./api-7P7DI652.js');
529
529
  const hasPermission = await isPermitted2({
530
530
  userId,
531
531
  scope: { organisationId, eventId, appId },
@@ -1,5 +1,5 @@
1
1
  export { a as UnifiedAuthContextType, d as UnifiedAuthProvider, c as UnifiedAuthProviderProps, u as useUnifiedAuth } from './UnifiedAuthProvider-CKvHP1MK.js';
2
- 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, i as CardActionsProps, 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, 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, b3 as useFileReference, b5 as useFileReferenceById, b4 as useFileReferenceForRecord, b6 as useFilesByCategory, bf as useIsPublicPage, be as usePublicPageContext } from './PublicPageProvider-DlsCaR5v.js';
2
+ 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, i as CardActionsProps, 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, 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, b3 as useFileReference, b5 as useFileReferenceById, b4 as useFileReferenceForRecord, b6 as useFilesByCategory, bf as useIsPublicPage, be as usePublicPageContext } from './PublicPageProvider-CIGSujI2.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  export { u as useToast } from './useToast-AyaT-x7p.js';
5
5
  export { D as DataTable, a as DataTableProps } from './DataTable-DRUIgtUH.js';
@@ -1,17 +1,17 @@
1
- import { Calendar } from './chunk-JGWDVX64.js';
2
- export { AddressField, Avatar, Badge, Calendar, ContextSelector, FileDisplay, FileUpload, Footer, Form, FormField, Header, LoginForm, NavigationMenu, PaceAppLayout, PaceLoginPage, 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
- import './chunk-6F3IILHI.js';
4
- import { Label, Input } from './chunk-Q7Q7V5NV.js';
5
- export { Alert, AlertDescription, AlertTitle, Checkbox, 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 } from './chunk-Q7Q7V5NV.js';
6
- import { Button } from './chunk-BM4CQ5P3.js';
7
- export { Button, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from './chunk-BM4CQ5P3.js';
8
- import './chunk-5X4QLXRG.js';
9
- import './chunk-ZKAWKYT4.js';
1
+ import { Calendar } from './chunk-EURB7QFZ.js';
2
+ export { AddressField, Avatar, Badge, Calendar, ContextSelector, FileDisplay, FileUpload, Footer, Form, FormField, Header, LoginForm, NavigationMenu, PaceAppLayout, PaceLoginPage, 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-EURB7QFZ.js';
3
+ import './chunk-S6ZQKDY6.js';
4
+ import { Label, Input } from './chunk-NKHKXPI4.js';
5
+ export { Alert, AlertDescription, AlertTitle, Checkbox, 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 } from './chunk-NKHKXPI4.js';
6
+ import { Button } from './chunk-GS5672WG.js';
7
+ export { Button, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from './chunk-GS5672WG.js';
8
+ import './chunk-MPBLMWVR.js';
9
+ import './chunk-5W2A3DRC.js';
10
10
  export { useToast } from './chunk-S7DKJPLT.js';
11
- export { Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ErrorBoundary, ErrorBoundaryProvider, PublicPageProvider, useIsPublicPage, usePublicPageContext } from './chunk-VBCS3DUA.js';
11
+ export { Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ErrorBoundary, ErrorBoundaryProvider, PublicPageProvider, useIsPublicPage, usePublicPageContext } from './chunk-EF2UGZWY.js';
12
12
  import './chunk-C7NSAPTL.js';
13
- export { UnifiedAuthProvider, useUnifiedAuth } from './chunk-FTCRZOG2.js';
14
- import './chunk-ZFYPMX46.js';
13
+ export { UnifiedAuthProvider, useUnifiedAuth } from './chunk-T5CVK4R3.js';
14
+ import './chunk-LX6U42O3.js';
15
15
  import './chunk-AHU7G2R5.js';
16
16
  export { FileCategory } from './chunk-6QYDGKQY.js';
17
17
  import './chunk-4SXLQIZO.js';