@jmruthers/pace-core 0.5.127 → 0.5.128

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 (131) hide show
  1. package/dist/{DataTable-QZH6SEUM.js → DataTable-3Z5HLOWF.js} +2 -2
  2. package/dist/{PublicLoadingSpinner-qqvM-NUe.d.ts → PublicLoadingSpinner-CUAnTvcg.d.ts} +7 -0
  3. package/dist/{chunk-JDBO5NCG.js → chunk-27MGXDD6.js} +34 -16
  4. package/dist/chunk-27MGXDD6.js.map +1 -0
  5. package/dist/{chunk-TMUNK34W.js → chunk-ENE3AB75.js} +37 -9
  6. package/dist/chunk-ENE3AB75.js.map +1 -0
  7. package/dist/components.d.ts +1 -1
  8. package/dist/components.js +2 -2
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/utils.d.ts +1 -1
  12. package/dist/utils.js +1 -1
  13. package/docs/api/classes/ColumnFactory.md +1 -1
  14. package/docs/api/classes/ErrorBoundary.md +1 -1
  15. package/docs/api/classes/InvalidScopeError.md +1 -1
  16. package/docs/api/classes/MissingUserContextError.md +1 -1
  17. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  18. package/docs/api/classes/PermissionDeniedError.md +1 -1
  19. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  20. package/docs/api/classes/RBACAuditManager.md +1 -1
  21. package/docs/api/classes/RBACCache.md +1 -1
  22. package/docs/api/classes/RBACEngine.md +1 -1
  23. package/docs/api/classes/RBACError.md +1 -1
  24. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  25. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  26. package/docs/api/classes/StorageUtils.md +1 -1
  27. package/docs/api/enums/FileCategory.md +1 -1
  28. package/docs/api/interfaces/AggregateConfig.md +1 -1
  29. package/docs/api/interfaces/ButtonProps.md +1 -1
  30. package/docs/api/interfaces/CardProps.md +1 -1
  31. package/docs/api/interfaces/ColorPalette.md +1 -1
  32. package/docs/api/interfaces/ColorShade.md +1 -1
  33. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  34. package/docs/api/interfaces/DataRecord.md +1 -1
  35. package/docs/api/interfaces/DataTableAction.md +1 -1
  36. package/docs/api/interfaces/DataTableColumn.md +1 -1
  37. package/docs/api/interfaces/DataTableProps.md +1 -1
  38. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  39. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  40. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  41. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  42. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  43. package/docs/api/interfaces/FileMetadata.md +1 -1
  44. package/docs/api/interfaces/FileReference.md +1 -1
  45. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  46. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  47. package/docs/api/interfaces/FileUploadProps.md +1 -1
  48. package/docs/api/interfaces/FooterProps.md +1 -1
  49. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  50. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  51. package/docs/api/interfaces/InputProps.md +1 -1
  52. package/docs/api/interfaces/LabelProps.md +1 -1
  53. package/docs/api/interfaces/LoginFormProps.md +1 -1
  54. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  55. package/docs/api/interfaces/NavigationContextType.md +1 -1
  56. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  57. package/docs/api/interfaces/NavigationItem.md +1 -1
  58. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  59. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  60. package/docs/api/interfaces/Organisation.md +1 -1
  61. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  62. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  63. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  64. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  65. package/docs/api/interfaces/PaceAppLayoutProps.md +27 -27
  66. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  67. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  68. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  69. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  70. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  71. package/docs/api/interfaces/PaletteData.md +1 -1
  72. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  73. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  74. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  75. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  76. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  77. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  78. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  79. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  80. package/docs/api/interfaces/RBACConfig.md +1 -1
  81. package/docs/api/interfaces/RBACLogger.md +1 -1
  82. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  83. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  84. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  85. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  86. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  87. package/docs/api/interfaces/RouteConfig.md +1 -1
  88. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  89. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  90. package/docs/api/interfaces/StorageConfig.md +1 -1
  91. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  92. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  93. package/docs/api/interfaces/StorageListOptions.md +1 -1
  94. package/docs/api/interfaces/StorageListResult.md +1 -1
  95. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  96. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  97. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  98. package/docs/api/interfaces/StyleImport.md +1 -1
  99. package/docs/api/interfaces/SwitchProps.md +1 -1
  100. package/docs/api/interfaces/ToastActionElement.md +1 -1
  101. package/docs/api/interfaces/ToastProps.md +1 -1
  102. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  103. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  104. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  105. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  106. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  107. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  108. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  109. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  110. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  111. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  112. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  113. package/docs/api/interfaces/UserEventAccess.md +1 -1
  114. package/docs/api/interfaces/UserMenuProps.md +1 -1
  115. package/docs/api/interfaces/UserProfile.md +1 -1
  116. package/docs/api/modules.md +10 -3
  117. package/docs/api-reference/components.md +24 -0
  118. package/docs/api-reference/types.md +28 -0
  119. package/docs/implementation-guides/data-tables.md +55 -10
  120. package/docs/implementation-guides/permission-enforcement.md +4 -0
  121. package/docs/rbac/super-admin-guide.md +43 -5
  122. package/package.json +1 -1
  123. package/src/components/DataTable/__tests__/DataTable.export.test.tsx +702 -0
  124. package/src/components/DataTable/components/DataTableCore.tsx +55 -36
  125. package/src/components/DataTable/index.ts +3 -1
  126. package/src/components/DataTable/types.ts +68 -0
  127. package/src/components/PaceAppLayout/PaceAppLayout.tsx +60 -11
  128. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +81 -1
  129. package/dist/chunk-JDBO5NCG.js.map +0 -1
  130. package/dist/chunk-TMUNK34W.js.map +0 -1
  131. /package/dist/{DataTable-QZH6SEUM.js.map → DataTable-3Z5HLOWF.js.map} +0 -0
@@ -25,7 +25,7 @@ import {
25
25
  SelectSeparator,
26
26
  SelectTrigger,
27
27
  SelectValue
28
- } from "./chunk-JDBO5NCG.js";
28
+ } from "./chunk-27MGXDD6.js";
29
29
  import {
30
30
  useCan,
31
31
  usePermissions,
@@ -1474,7 +1474,11 @@ function PaceAppLayout({
1474
1474
  }, [location.pathname, routePermissions, defaultPermission]);
1475
1475
  const currentPageId = useMemo5(() => {
1476
1476
  const currentPath = location.pathname;
1477
- return pageIdMapping[currentPath] || currentPath.slice(1) || "home";
1477
+ if (pageIdMapping[currentPath]) {
1478
+ return pageIdMapping[currentPath];
1479
+ }
1480
+ const pathSegments = currentPath.slice(1).split("/").filter(Boolean);
1481
+ return pathSegments[0] || "home";
1478
1482
  }, [location.pathname, pageIdMapping]);
1479
1483
  const currentPermission = useMemo5(() => {
1480
1484
  if (!enforcePermissions) {
@@ -1483,7 +1487,29 @@ function PaceAppLayout({
1483
1487
  const permissionString = `${currentRoutePermission}:page.${currentPageId}`;
1484
1488
  return permissionString;
1485
1489
  }, [enforcePermissions, currentRoutePermission, currentPageId]);
1486
- const { can, isLoading: isCheckingPermission, error: permissionError } = useCan(
1490
+ const [isSuperAdminUser, setIsSuperAdminUser] = useState5(false);
1491
+ const [isCheckingSuperAdmin, setIsCheckingSuperAdmin] = useState5(false);
1492
+ useEffect3(() => {
1493
+ const checkSuperAdminStatus = async () => {
1494
+ if (!user?.id) {
1495
+ setIsSuperAdminUser(false);
1496
+ setIsCheckingSuperAdmin(false);
1497
+ return;
1498
+ }
1499
+ setIsCheckingSuperAdmin(true);
1500
+ try {
1501
+ const superAdminStatus = await isSuperAdmin(user.id);
1502
+ setIsSuperAdminUser(superAdminStatus);
1503
+ } catch (error) {
1504
+ console.error("[PaceAppLayout] Error checking super admin status:", error);
1505
+ setIsSuperAdminUser(false);
1506
+ } finally {
1507
+ setIsCheckingSuperAdmin(false);
1508
+ }
1509
+ };
1510
+ checkSuperAdminStatus();
1511
+ }, [user?.id]);
1512
+ const { can: canFromHook, isLoading: isCheckingPermission, error: permissionError } = useCan(
1487
1513
  user?.id || "",
1488
1514
  scope,
1489
1515
  currentPermission,
@@ -1491,29 +1517,31 @@ function PaceAppLayout({
1491
1517
  true
1492
1518
  // useCache
1493
1519
  );
1520
+ const can = isSuperAdminUser ? true : canFromHook;
1494
1521
  const hasPermission = enforcePermissions ? can : true;
1495
1522
  useEffect3(() => {
1496
1523
  if (!enforcePermissions) {
1497
1524
  return;
1498
1525
  }
1499
- if (isCheckingPermission) {
1526
+ if (isCheckingSuperAdmin || isCheckingPermission) {
1500
1527
  return;
1501
1528
  }
1502
- if (strictMode && !can) {
1529
+ if (strictMode && !isSuperAdminUser && !can) {
1503
1530
  console.error(`[PaceAppLayout] STRICT MODE VIOLATION: User attempted to access protected page without permission`, {
1504
1531
  pageName: currentPageId,
1505
1532
  operation: currentRoutePermission,
1506
1533
  userId: user?.id,
1534
+ isSuperAdmin: isSuperAdminUser,
1507
1535
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1508
1536
  });
1509
1537
  if (onStrictModeViolation) {
1510
1538
  onStrictModeViolation(currentPageId, currentRoutePermission);
1511
1539
  }
1512
1540
  }
1513
- if (!can && onPageAccessDenied) {
1541
+ if (!isSuperAdminUser && !can && onPageAccessDenied) {
1514
1542
  onPageAccessDenied(currentPageId, currentRoutePermission);
1515
1543
  }
1516
- }, [enforcePermissions, can, isCheckingPermission, currentPageId, currentRoutePermission, user?.id, strictMode, auditLog, onPageAccessDenied, onStrictModeViolation]);
1544
+ }, [enforcePermissions, can, isCheckingPermission, isCheckingSuperAdmin, isSuperAdminUser, currentPageId, currentRoutePermission, user?.id, strictMode, auditLog, onPageAccessDenied, onStrictModeViolation]);
1517
1545
  const [filteredMenuItems, setFilteredMenuItems] = useState5(baseMenuItems);
1518
1546
  useEffect3(() => {
1519
1547
  if (!filterNavigationByPermissions) {
@@ -1661,7 +1689,7 @@ function PaceAppLayout({
1661
1689
  }
1662
1690
  return result || { error: null };
1663
1691
  };
1664
- if (enforcePermissions && isCheckingPermission) {
1692
+ if (enforcePermissions && (isCheckingSuperAdmin || isCheckingPermission)) {
1665
1693
  return /* @__PURE__ */ jsx13("div", { className: "flex items-center justify-center min-h-screen", children: /* @__PURE__ */ jsxs10("div", { className: "text-center", children: [
1666
1694
  /* @__PURE__ */ jsx13("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-sec-900 mx-auto mb-4" }),
1667
1695
  /* @__PURE__ */ jsx13("p", { className: "text-sec-600", children: "Checking permissions..." })
@@ -4548,4 +4576,4 @@ export {
4548
4576
  PublicPageDiagnostic,
4549
4577
  PublicPageContextChecker
4550
4578
  };
4551
- //# sourceMappingURL=chunk-TMUNK34W.js.map
4579
+ //# sourceMappingURL=chunk-ENE3AB75.js.map