@jmruthers/pace-core 0.5.76 → 0.5.78
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.
- package/CHANGELOG.md +8 -0
- package/dist/{RBACService-C4udt_Zp.d.ts → AuthService-Df3IozMG.d.ts} +10 -118
- package/dist/{DataTable-ntgmhO2W.d.ts → DataTable-BE0OXZKQ.d.ts} +9 -2
- package/dist/{DataTable-4GAVPIEG.js → DataTable-ETGVF4Y5.js} +50 -13
- package/dist/{PublicLoadingSpinner-BiNER8F5.d.ts → PublicLoadingSpinner-CnUaz0vG.d.ts} +5 -2
- package/dist/{UnifiedAuthProvider-Bj6YCf7c.d.ts → UnifiedAuthProvider-B391Aqum.d.ts} +42 -45
- package/dist/{UnifiedAuthProvider-3NKDOSOK.js → UnifiedAuthProvider-P5SOJAQ6.js} +4 -5
- package/dist/{api-DDMUKIUD.js → api-KG4A2X7P.js} +9 -3
- package/dist/{audit-6TOCAMKO.js → audit-65VNHEV2.js} +2 -2
- package/dist/{chunk-K34IM5CT.js → chunk-2OGV6IRV.js} +196 -626
- package/dist/chunk-2OGV6IRV.js.map +1 -0
- package/dist/{chunk-NTNILOBC.js → chunk-5BO3MI5Y.js} +4 -4
- package/dist/{chunk-XLZ7U46Z.js → chunk-CVMVPYAL.js} +9 -60
- package/dist/chunk-CVMVPYAL.js.map +1 -0
- package/dist/{chunk-URUTVZ7N.js → chunk-FL4ZCQLD.js} +2 -2
- package/dist/{chunk-LW7MMEAQ.js → chunk-FT2M4R4F.js} +2 -2
- package/dist/{chunk-5BSLGBYI.js → chunk-JCQZ6LA7.js} +2 -8
- package/dist/{chunk-5BSLGBYI.js.map → chunk-JCQZ6LA7.js.map} +1 -1
- package/dist/{chunk-KHJS6VIA.js → chunk-LRQ6RBJC.js} +157 -112
- package/dist/chunk-LRQ6RBJC.js.map +1 -0
- package/dist/{chunk-WN6XJWOS.js → chunk-MNJXXD6C.js} +274 -743
- package/dist/chunk-MNJXXD6C.js.map +1 -0
- package/dist/{chunk-KK73ZB4E.js → chunk-PTR5PMPE.js} +153 -132
- package/dist/chunk-PTR5PMPE.js.map +1 -0
- package/dist/{chunk-B2WTCLCV.js → chunk-Q7APDV6H.js} +18 -8
- package/dist/chunk-Q7APDV6H.js.map +1 -0
- package/dist/{chunk-A4FUBC7B.js → chunk-QGVSOUJ2.js} +2 -4
- package/dist/{chunk-A4FUBC7B.js.map → chunk-QGVSOUJ2.js.map} +1 -1
- package/dist/{chunk-FGMFQSHX.js → chunk-S63MFSY6.js} +500 -551
- package/dist/chunk-S63MFSY6.js.map +1 -0
- package/dist/{chunk-AFGTSUAD.js → chunk-VSOKOFRF.js} +4 -4
- package/dist/chunk-WUXCWRL6.js +20 -0
- package/dist/chunk-WUXCWRL6.js.map +1 -0
- package/dist/{chunk-Y6TXWPJO.js → chunk-YVVGHRGI.js} +105 -31
- package/dist/chunk-YVVGHRGI.js.map +1 -0
- package/dist/{chunk-M5IWZRBT.js → chunk-ZMNXIJP4.js} +2187 -981
- package/dist/chunk-ZMNXIJP4.js.map +1 -0
- package/dist/components.d.ts +6 -6
- package/dist/components.js +14 -18
- package/dist/components.js.map +1 -1
- package/dist/{database-C3Szpi5J.d.ts → database-BXAfr2Y_.d.ts} +18 -0
- package/dist/hooks.d.ts +5 -5
- package/dist/hooks.js +8 -9
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +19 -27
- package/dist/index.js +21 -29
- package/dist/index.js.map +1 -1
- package/dist/{organisation-BtshODVF.d.ts → organisation-D6qRDtbF.d.ts} +1 -1
- package/dist/providers.d.ts +7 -21
- package/dist/providers.js +3 -10
- package/dist/rbac/index.d.ts +71 -221
- package/dist/rbac/index.js +15 -16
- package/dist/{types-CGX9Vyf5.d.ts → types-BDg1mAGG.d.ts} +36 -6
- package/dist/types.d.ts +3 -3
- package/dist/types.js +61 -18
- package/dist/types.js.map +1 -1
- package/dist/{unified-CM7T0aTK.d.ts → unified-DQ4VcT7H.d.ts} +1 -1
- package/dist/{usePublicRouteParams-B-CumWRc.d.ts → usePublicRouteParams-BlgwXweB.d.ts} +3 -3
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +52 -9
- package/dist/utils.js.map +1 -1
- package/docs/CONTENT_AUDIT_REPORT.md +253 -0
- package/docs/DOCUMENTATION_AUDIT.md +172 -0
- package/docs/README.md +142 -147
- package/docs/STYLE_GUIDE.md +37 -0
- package/docs/api/classes/ColumnFactory.md +17 -17
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/MissingUserContextError.md +4 -4
- package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
- package/docs/api/classes/PermissionDeniedError.md +5 -5
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +8 -8
- package/docs/api/classes/RBACCache.md +35 -5
- package/docs/api/classes/RBACEngine.md +49 -20
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +11 -0
- package/docs/api/interfaces/DataTableAction.md +65 -29
- package/docs/api/interfaces/DataTableColumn.md +36 -23
- package/docs/api/interfaces/DataTableProps.md +80 -38
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +1 -1
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +11 -11
- package/docs/api/interfaces/NavigationContextType.md +9 -9
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +7 -7
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
- package/docs/api/interfaces/PaceLoginPageProps.md +16 -3
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +2 -2
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +4 -4
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +2 -2
- package/docs/api/interfaces/RouteConfig.md +2 -2
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +94 -521
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +16 -16
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +11 -11
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +251 -269
- package/docs/api-reference/components.md +193 -0
- package/docs/api-reference/hooks.md +265 -0
- package/docs/api-reference/providers.md +6 -0
- package/docs/api-reference/types.md +6 -0
- package/docs/api-reference/utilities.md +207 -0
- package/docs/architecture/README.md +6 -0
- package/docs/{database-schema-requirements.md → architecture/database-schema-requirements.md} +6 -0
- package/docs/architecture/rbac-security-architecture.md +258 -0
- package/docs/architecture/services.md +9 -1
- package/docs/best-practices/README.md +6 -0
- package/docs/best-practices/accessibility.md +6 -0
- package/docs/{common-patterns.md → best-practices/common-patterns.md} +6 -0
- package/docs/best-practices/deployment.md +6 -0
- package/docs/best-practices/performance.md +475 -2
- package/docs/best-practices/security.md +6 -0
- package/docs/best-practices/testing.md +6 -0
- package/docs/core-concepts/authentication.md +6 -0
- package/docs/core-concepts/events.md +6 -0
- package/docs/core-concepts/organisations.md +6 -0
- package/docs/core-concepts/permissions.md +6 -0
- package/docs/core-concepts/rbac-system.md +8 -0
- package/docs/documentation-index.md +121 -182
- package/docs/{consuming-app-vite-config.md → getting-started/consuming-app-vite-config.md} +6 -0
- package/docs/getting-started/documentation-index.md +40 -0
- package/docs/getting-started/examples/README.md +878 -35
- package/docs/{faq.md → getting-started/faq.md} +7 -1
- package/docs/getting-started/installation-guide.md +6 -0
- package/docs/{quick-reference.md → getting-started/quick-reference.md} +6 -0
- package/docs/implementation-guides/app-layout.md +6 -0
- package/docs/implementation-guides/authentication.md +1021 -0
- package/docs/implementation-guides/component-styling.md +6 -0
- package/docs/implementation-guides/data-tables.md +1264 -2076
- package/docs/implementation-guides/dynamic-colors.md +6 -0
- package/docs/implementation-guides/event-theming-summary.md +6 -0
- package/docs/{file-reference-system.md → implementation-guides/file-reference-system.md} +6 -0
- package/docs/implementation-guides/file-upload-storage.md +6 -0
- package/docs/implementation-guides/forms.md +6 -0
- package/docs/implementation-guides/inactivity-tracking.md +6 -0
- package/docs/implementation-guides/navigation.md +6 -0
- package/docs/implementation-guides/organisation-security.md +6 -0
- package/docs/implementation-guides/permission-enforcement.md +6 -0
- package/docs/implementation-guides/public-pages-advanced.md +6 -0
- package/docs/implementation-guides/public-pages.md +6 -0
- package/docs/migration/MIGRATION_GUIDE.md +827 -351
- package/docs/migration/README.md +7 -1
- package/docs/migration/organisation-context-timing-fix.md +6 -0
- package/docs/migration/rbac-migration.md +44 -1
- package/docs/migration/service-architecture.md +6 -0
- package/docs/migration/v0.4.15-tailwind-scanning.md +6 -0
- package/docs/migration/v0.4.16-css-first-approach.md +6 -0
- package/docs/migration/v0.4.17-source-path-fix.md +6 -0
- package/docs/rbac/README-rbac-rls-integration.md +6 -0
- package/docs/rbac/README.md +6 -0
- package/docs/rbac/advanced-patterns.md +6 -0
- package/docs/rbac/api-reference.md +7 -1
- package/docs/rbac/breaking-changes-v3.md +222 -0
- package/docs/rbac/examples/rbac-rls-integration-example.md +6 -0
- package/docs/rbac/examples.md +6 -0
- package/docs/rbac/getting-started.md +6 -0
- package/docs/rbac/migration-guide.md +260 -0
- package/docs/rbac/quick-start.md +70 -13
- package/docs/rbac/rbac-rls-integration.md +6 -0
- package/docs/rbac/super-admin-guide.md +6 -0
- package/docs/rbac/troubleshooting.md +6 -0
- package/docs/security/README.md +6 -0
- package/docs/security/checklist.md +6 -0
- package/docs/styles/README.md +7 -1
- package/docs/{usage.md → styles/usage.md} +6 -0
- package/docs/testing/README.md +6 -0
- package/docs/{visual-testing.md → testing/visual-testing.md} +6 -0
- package/docs/troubleshooting/README.md +387 -5
- package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +6 -0
- package/docs/troubleshooting/common-issues.md +6 -0
- package/docs/troubleshooting/database-view-compatibility.md +6 -0
- package/docs/troubleshooting/organisation-context-setup.md +6 -0
- package/docs/troubleshooting/react-hooks-issue-analysis.md +6 -0
- package/docs/troubleshooting/styling-issues.md +6 -0
- package/docs/troubleshooting/tailwind-content-scanning.md +6 -0
- package/package.json +1 -1
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -1
- package/src/__tests__/helpers/test-providers.tsx +3 -53
- package/src/components/DataTable/DataTable.test.tsx +319 -0
- package/src/components/DataTable/DataTable.tsx +32 -11
- package/src/components/DataTable/__tests__/{DataTable.comprehensive.test.tsx → DataTable.comprehensive.test.tsx.skip} +6 -4
- package/src/components/DataTable/__tests__/{DataTable.test.tsx → DataTable.test.tsx.skip} +6 -4
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +31 -9
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +601 -0
- package/src/components/DataTable/__tests__/keyboard.test.tsx +615 -0
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +639 -0
- package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx.skip +330 -0
- package/src/components/DataTable/components/AccessDeniedPage.tsx +2 -2
- package/src/components/DataTable/components/ActionButtons.tsx +88 -104
- package/src/components/DataTable/components/DataTableCore.tsx +309 -337
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +4 -2
- package/src/components/DataTable/components/DataTableModals.tsx +22 -1
- package/src/components/DataTable/components/EditableRow.tsx +69 -84
- package/src/components/DataTable/components/EmptyState.tsx +5 -1
- package/src/components/DataTable/components/ImportModal.tsx +65 -36
- package/src/components/DataTable/components/PaginationControls.tsx +40 -100
- package/src/components/DataTable/components/UnifiedTableBody.tsx +125 -148
- package/src/components/DataTable/context/DataTableContext.tsx +1 -1
- package/src/components/DataTable/core/ColumnFactory.ts +5 -0
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +12 -10
- package/src/components/DataTable/examples/HierarchicalExample.tsx +1 -1
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +1 -0
- package/src/components/DataTable/examples/PerformanceExample.tsx +1 -0
- package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +1 -5
- package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +167 -0
- package/src/components/DataTable/hooks/index.ts +7 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +32 -15
- package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +102 -0
- package/src/components/DataTable/hooks/useDataTableConfiguration.ts +89 -0
- package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +117 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +71 -27
- package/src/components/DataTable/hooks/useDataTableState.ts +39 -11
- package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +33 -0
- package/src/components/DataTable/hooks/useHierarchicalState.ts +15 -1
- package/src/components/DataTable/hooks/useKeyboardNavigation.ts +447 -0
- package/src/components/DataTable/hooks/useServerSideDataEffect.ts +94 -0
- package/src/components/DataTable/hooks/useTableColumns.ts +10 -7
- package/src/components/DataTable/hooks/useTableHandlers.ts +174 -0
- package/src/components/DataTable/index.ts +12 -3
- package/src/components/DataTable/types.ts +129 -9
- package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +159 -22
- package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +111 -0
- package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +15 -29
- package/src/components/DataTable/utils/a11yUtils.ts +244 -0
- package/src/components/DataTable/utils/debugTools.ts +609 -0
- package/src/components/DataTable/utils/exportUtils.ts +114 -16
- package/src/components/DataTable/utils/flexibleImport.ts +202 -32
- package/src/components/DataTable/utils/hierarchicalUtils.ts +1 -1
- package/src/components/DataTable/utils/index.ts +2 -0
- package/src/components/DataTable/utils/paginationUtils.ts +350 -0
- package/src/components/DataTable/utils/rowUtils.ts +6 -5
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +19 -24
- package/src/components/NavigationMenu/NavigationMenu.tsx +19 -8
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +1 -23
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +56 -6
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +137 -13
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +1 -1
- package/src/components/Select/Select.tsx +1 -0
- package/src/components/examples/PermissionExample.tsx +173 -0
- package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
- package/src/examples/PublicEventPage.tsx +274 -0
- package/src/examples/PublicPageApp.tsx +308 -0
- package/src/examples/PublicPageUsageExample.tsx +216 -0
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +12 -1
- package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +129 -17
- package/src/hooks/__tests__/useRBAC.unit.test.ts +151 -846
- package/src/hooks/useOrganisationPermissions.test.ts +42 -18
- package/src/hooks/useOrganisationPermissions.ts +12 -6
- package/src/hooks/useOrganisationSecurity.test.ts +138 -85
- package/src/hooks/useOrganisationSecurity.ts +41 -10
- package/src/index.ts +0 -1
- package/src/providers/AuthProvider.simplified.tsx +880 -0
- package/src/providers/UnifiedAuthProvider.test.simple.tsx +8 -8
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +29 -19
- package/src/providers/index.ts +0 -1
- package/src/providers/services/EventServiceProvider.tsx +19 -15
- package/src/providers/services/InactivityServiceProvider.tsx +19 -15
- package/src/providers/services/OrganisationServiceProvider.tsx +19 -15
- package/src/providers/services/UnifiedAuthProvider.tsx +156 -127
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +1 -1
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -3
- package/src/rbac/README.md +1 -1
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +25 -27
- package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +313 -0
- package/src/rbac/__tests__/engine.comprehensive.test.ts +114 -348
- package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +28 -110
- package/src/rbac/__tests__/rbac-engine-simplified.test.ts +33 -85
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +2 -2
- package/src/rbac/adapters.tsx +26 -69
- package/src/rbac/api.test.ts +90 -27
- package/src/rbac/api.ts +61 -10
- package/src/rbac/audit.test.ts +33 -38
- package/src/rbac/audit.ts +21 -6
- package/src/rbac/cache.ts +33 -1
- package/src/rbac/components/NavigationGuard.tsx +11 -11
- package/src/rbac/components/NavigationProvider.test.tsx +11 -5
- package/src/rbac/components/NavigationProvider.tsx +37 -13
- package/src/rbac/components/PagePermissionGuard.tsx +111 -50
- package/src/rbac/components/PagePermissionProvider.tsx +5 -5
- package/src/rbac/components/PermissionEnforcer.tsx +11 -11
- package/src/rbac/components/RoleBasedRouter.tsx +5 -5
- package/src/rbac/components/SecureDataProvider.tsx +5 -5
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +8 -8
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +14 -14
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +12 -12
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +6 -6
- package/src/rbac/engine.test.simple.ts +19 -13
- package/src/rbac/engine.test.ts +1 -0
- package/src/rbac/engine.ts +330 -766
- package/src/rbac/errors.ts +156 -0
- package/src/rbac/hooks/usePermissions.ts +32 -10
- package/src/rbac/hooks/useRBAC.test.ts +126 -512
- package/src/rbac/hooks/useRBAC.ts +147 -193
- package/src/rbac/hooks/useResolvedScope.ts +12 -0
- package/src/rbac/index.ts +7 -4
- package/src/rbac/security.ts +109 -18
- package/src/rbac/types.ts +12 -1
- package/src/services/AuthService.ts +2 -15
- package/src/services/EventService.ts +43 -46
- package/src/services/OrganisationService.ts +51 -31
- package/src/services/__tests__/AuthService.test.ts +1 -1
- package/src/services/__tests__/EventService.test.ts +1 -1
- package/src/services/__tests__/OrganisationService.test.ts +1 -1
- package/src/services/base/BaseService.ts +8 -0
- package/src/styles/base.css +208 -0
- package/src/styles/semantic.css +24 -0
- package/src/types/database.generated.ts +7347 -0
- package/src/types/database.ts +20 -0
- package/src/utils/logger.ts +179 -0
- package/src/utils/organisationContext.ts +11 -4
- package/src/utils/storage/__tests__/helpers.unit.test.ts +6 -2
- package/dist/appNameResolver-UURKN7NF.js +0 -22
- package/dist/audit-6TOCAMKO.js.map +0 -1
- package/dist/chunk-B2WTCLCV.js.map +0 -1
- package/dist/chunk-FGMFQSHX.js.map +0 -1
- package/dist/chunk-K34IM5CT.js.map +0 -1
- package/dist/chunk-KHJS6VIA.js.map +0 -1
- package/dist/chunk-KK73ZB4E.js.map +0 -1
- package/dist/chunk-M5IWZRBT.js.map +0 -1
- package/dist/chunk-ULBI5JGB.js +0 -109
- package/dist/chunk-ULBI5JGB.js.map +0 -1
- package/dist/chunk-WN6XJWOS.js.map +0 -1
- package/dist/chunk-XLZ7U46Z.js.map +0 -1
- package/dist/chunk-Y6TXWPJO.js.map +0 -1
- package/docs/DOCUMENTATION_CHECKLIST.md +0 -281
- package/docs/TERMINOLOGY.md +0 -231
- package/docs/api/interfaces/RBACContextType.md +0 -468
- package/docs/api/interfaces/RBACProviderProps.md +0 -107
- package/docs/best-practices/performance-expansion.md +0 -473
- package/docs/breaking-changes.md +0 -179
- package/docs/consuming-app-example.md +0 -290
- package/docs/documentation-templates.md +0 -539
- package/docs/examples/navigation-menu-auth-fix.md +0 -344
- package/docs/getting-started/examples/basic-auth-app.md +0 -520
- package/docs/getting-started/examples/full-featured-app.md +0 -616
- package/docs/getting-started/quick-start.md +0 -376
- package/docs/implementation-guides/datatable-filtering.md +0 -313
- package/docs/implementation-guides/datatable-rbac-usage.md +0 -317
- package/docs/implementation-guides/hierarchical-datatable.md +0 -850
- package/docs/implementation-guides/large-datasets.md +0 -281
- package/docs/implementation-guides/performance.md +0 -403
- package/docs/migration/quick-migration-guide.md +0 -320
- package/docs/migration-guide.md +0 -193
- package/docs/migration-guides/unified-auth-provider-mandatory-timeouts.md +0 -226
- package/docs/performance/README.md +0 -551
- package/docs/style-guide.md +0 -964
- package/docs/troubleshooting/authentication-issues.md +0 -334
- package/docs/troubleshooting/debugging.md +0 -1117
- package/docs/troubleshooting/migration.md +0 -918
- package/src/__tests__/hooks/usePermissions.test.ts +0 -261
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +0 -574
- package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -613
- package/src/hooks/services/__tests__/useServiceHooks.test.tsx +0 -137
- package/src/hooks/services/usePermissions.ts +0 -70
- package/src/hooks/services/useRBACService.ts +0 -30
- package/src/hooks/usePermissionCheck.ts +0 -150
- package/src/providers/__tests__/ServiceProviders.test.tsx +0 -477
- package/src/providers/services/RBACServiceProvider.tsx +0 -79
- package/src/rbac/__tests__/integration.authflow.test.tsx +0 -119
- package/src/rbac/__tests__/integration.navigation.test.tsx +0 -69
- package/src/rbac/__tests__/integration.securedata.test.tsx +0 -92
- package/src/rbac/__tests__/integration.smoke.test.tsx +0 -73
- package/src/rbac/providers/RBACProvider.tsx +0 -645
- package/src/rbac/providers/__tests__/RBACProvider.integration.test.tsx +0 -688
- package/src/rbac/providers/__tests__/RBACProvider.test.tsx +0 -1186
- package/src/rbac/providers/index.ts +0 -11
- package/src/services/RBACService.ts +0 -522
- package/src/services/__tests__/RBACService.test.ts +0 -492
- package/src/services/interfaces/IRBACService.ts +0 -62
- package/src/utils/appNameResolver.test 2.ts +0 -494
- /package/dist/{DataTable-4GAVPIEG.js.map → DataTable-ETGVF4Y5.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-3NKDOSOK.js.map → UnifiedAuthProvider-P5SOJAQ6.js.map} +0 -0
- /package/dist/{api-DDMUKIUD.js.map → api-KG4A2X7P.js.map} +0 -0
- /package/dist/{appNameResolver-UURKN7NF.js.map → audit-65VNHEV2.js.map} +0 -0
- /package/dist/{chunk-NTNILOBC.js.map → chunk-5BO3MI5Y.js.map} +0 -0
- /package/dist/{chunk-URUTVZ7N.js.map → chunk-FL4ZCQLD.js.map} +0 -0
- /package/dist/{chunk-LW7MMEAQ.js.map → chunk-FT2M4R4F.js.map} +0 -0
- /package/dist/{chunk-AFGTSUAD.js.map → chunk-VSOKOFRF.js.map} +0 -0
- /package/docs/{app.css.example → styles/app.css.example} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Changed - RBAC Refactoring
|
|
11
|
+
- **Breaking**: Renamed provider hook `useRBAC()` to `useRBACContext()` to avoid naming collision
|
|
12
|
+
- **Removed**: Non-functional `usePermissionCheck` hook
|
|
13
|
+
- **Deprecated**: `RBACService`, `useRBACService` - use new RBAC system instead
|
|
14
|
+
- Consolidated permission checking logic into single source of truth
|
|
15
|
+
- Established consistent fail-secure error handling across RBAC components
|
|
16
|
+
- Removed 100+ lines of duplicate code
|
|
17
|
+
|
|
10
18
|
### Added
|
|
11
19
|
- **DataTable Initial Page Size**: Added `initialPageSize` prop to DataTable component for customizing the initial page size
|
|
12
20
|
- **Page Size Validation**: Automatic validation of initial page size against available options with fallback to closest valid option
|
|
@@ -1,62 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { SupabaseClient, User, Session, AuthError } from '@supabase/supabase-js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @file RBAC Service Interface
|
|
9
|
-
* @package @jmruthers/pace-core
|
|
10
|
-
* @module Services/Interfaces
|
|
11
|
-
* @since 0.1.0
|
|
12
|
-
*
|
|
13
|
-
* Interface for RBAC service operations.
|
|
14
|
-
* Defines the contract for role-based access control functionality.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
interface UserEventAccess {
|
|
18
|
-
event_id: string;
|
|
19
|
-
event_name: string;
|
|
20
|
-
event_description?: string | null;
|
|
21
|
-
start_date: string;
|
|
22
|
-
end_date: string;
|
|
23
|
-
event_status: string;
|
|
24
|
-
app_id: string;
|
|
25
|
-
access_level: string;
|
|
26
|
-
granted_at: string;
|
|
27
|
-
organisation_id: string;
|
|
28
|
-
}
|
|
29
|
-
interface AppConfig {
|
|
30
|
-
supports_direct_access: boolean;
|
|
31
|
-
requires_event: boolean;
|
|
32
|
-
}
|
|
33
|
-
interface IRBACService {
|
|
34
|
-
getPermissions(): Record<string, boolean>;
|
|
35
|
-
getRoles(): string[];
|
|
36
|
-
getAccessLevel(): AccessLevel;
|
|
37
|
-
isLoading(): boolean;
|
|
38
|
-
getError(): Error | null;
|
|
39
|
-
getSelectedEventId(): string | null;
|
|
40
|
-
getAppConfig(): AppConfig | null;
|
|
41
|
-
getUserEventAccess(): UserEventAccess[];
|
|
42
|
-
isEventAccessLoading(): boolean;
|
|
43
|
-
getSelectedOrganisationId(): string | null;
|
|
44
|
-
hasPermission(permission: string, orgId?: string): boolean;
|
|
45
|
-
hasAnyPermission(permissions: string[], orgId?: string): boolean;
|
|
46
|
-
hasAllPermissions(permissions: string[], orgId?: string): boolean;
|
|
47
|
-
hasRole(role: string): boolean;
|
|
48
|
-
hasAccessLevel(level: AccessLevel): boolean;
|
|
49
|
-
canAccess(resource: string, action: string, orgId?: string): boolean;
|
|
50
|
-
validatePermission(permission: string, orgId?: string): Promise<boolean>;
|
|
51
|
-
validateAccess(resource: string, action: string, orgId?: string): Promise<boolean>;
|
|
52
|
-
refreshPermissions(eventId?: string, orgId?: string): Promise<void>;
|
|
53
|
-
setSelectedEventId(eventId: string | null): void;
|
|
54
|
-
loadUserEventAccess(orgId?: string): Promise<void>;
|
|
55
|
-
getUserEventAccessById(eventId: string): UserEventAccess | undefined;
|
|
56
|
-
requireOrganisationContext(): string;
|
|
57
|
-
initialize(): Promise<void>;
|
|
58
|
-
cleanup(): void;
|
|
59
|
-
}
|
|
4
|
+
import { E as Event } from './unified-DQ4VcT7H.js';
|
|
5
|
+
import { O as Organisation, a as OrganisationMembership, d as OrganisationHierarchy } from './organisation-D6qRDtbF.js';
|
|
60
6
|
|
|
61
7
|
/**
|
|
62
8
|
* @file Base Service Class
|
|
@@ -96,6 +42,11 @@ declare abstract class BaseService {
|
|
|
96
42
|
* Check if service is initialized
|
|
97
43
|
*/
|
|
98
44
|
protected getInitialized(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Reset initialization state (allows re-initialization)
|
|
47
|
+
* Use when dependencies change and service needs to re-initialize
|
|
48
|
+
*/
|
|
49
|
+
protected resetInitialization(): void;
|
|
99
50
|
/**
|
|
100
51
|
* Override in subclasses to implement initialization logic
|
|
101
52
|
*/
|
|
@@ -155,8 +106,8 @@ declare class EventService extends BaseService implements IEventService {
|
|
|
155
106
|
private isFetchingRef;
|
|
156
107
|
private hasAutoSelectedRef;
|
|
157
108
|
private userClearedEventRef;
|
|
158
|
-
constructor(supabaseClient:
|
|
159
|
-
updateDependencies(supabaseClient:
|
|
109
|
+
constructor(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string, selectedOrganisation: Organisation | null, setSelectedEventId: (eventId: string | null) => void);
|
|
110
|
+
updateDependencies(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string, selectedOrganisation: Organisation | null, setSelectedEventId: (eventId: string | null) => void): void;
|
|
160
111
|
getEvents(): Event[];
|
|
161
112
|
getSelectedEvent(): Event | null;
|
|
162
113
|
isLoading(): boolean;
|
|
@@ -466,63 +417,4 @@ declare class AuthService extends BaseService implements IAuthService {
|
|
|
466
417
|
private removeErrorHandlers;
|
|
467
418
|
}
|
|
468
419
|
|
|
469
|
-
|
|
470
|
-
* @file RBAC Service
|
|
471
|
-
* @package @jmruthers/pace-core
|
|
472
|
-
* @module Services
|
|
473
|
-
* @since 0.1.0
|
|
474
|
-
*
|
|
475
|
-
* RBAC service implementation.
|
|
476
|
-
* Handles role-based access control, permissions, and event access management.
|
|
477
|
-
*/
|
|
478
|
-
|
|
479
|
-
declare class RBACService extends BaseService implements IRBACService {
|
|
480
|
-
private permissions;
|
|
481
|
-
private roles;
|
|
482
|
-
private accessLevel;
|
|
483
|
-
private rbacLoading;
|
|
484
|
-
private rbacError;
|
|
485
|
-
private selectedEventId;
|
|
486
|
-
private appConfig;
|
|
487
|
-
private userEventAccess;
|
|
488
|
-
private eventAccessLoading;
|
|
489
|
-
private selectedOrganisationId;
|
|
490
|
-
private supabaseClient;
|
|
491
|
-
private user;
|
|
492
|
-
private session;
|
|
493
|
-
private appName;
|
|
494
|
-
constructor(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string);
|
|
495
|
-
updateDependencies(user: User | null, session: Session | null, appName: string): void;
|
|
496
|
-
getPermissions(): Record<string, boolean>;
|
|
497
|
-
getRoles(): string[];
|
|
498
|
-
getAccessLevel(): AccessLevel;
|
|
499
|
-
isLoading(): boolean;
|
|
500
|
-
getError(): Error | null;
|
|
501
|
-
getSelectedEventId(): string | null;
|
|
502
|
-
getAppConfig(): AppConfig | null;
|
|
503
|
-
getUserEventAccess(): UserEventAccess[];
|
|
504
|
-
isEventAccessLoading(): boolean;
|
|
505
|
-
getSelectedOrganisationId(): string | null;
|
|
506
|
-
hasPermission(permission: string, orgId?: string): boolean;
|
|
507
|
-
hasAnyPermission(permissions: string[], orgId?: string): boolean;
|
|
508
|
-
hasAllPermissions(permissions: string[], orgId?: string): boolean;
|
|
509
|
-
hasRole(role: string): boolean;
|
|
510
|
-
hasAccessLevel(level: AccessLevel): boolean;
|
|
511
|
-
canAccess(resource: string, action: string, orgId?: string): boolean;
|
|
512
|
-
validatePermission(permission: string, orgId?: string): Promise<boolean>;
|
|
513
|
-
validateAccess(resource: string, action: string, orgId?: string): Promise<boolean>;
|
|
514
|
-
refreshPermissions(eventId?: string, orgId?: string): Promise<void>;
|
|
515
|
-
setSelectedEventId(eventId: string | null): void;
|
|
516
|
-
loadUserEventAccess(orgId?: string): Promise<void>;
|
|
517
|
-
getUserEventAccessById(eventId: string): UserEventAccess | undefined;
|
|
518
|
-
requireOrganisationContext(): string;
|
|
519
|
-
initialize(): Promise<void>;
|
|
520
|
-
cleanup(): void;
|
|
521
|
-
protected doInitialize(): Promise<void>;
|
|
522
|
-
protected doCleanup(): void;
|
|
523
|
-
private loadAppConfig;
|
|
524
|
-
private loadPersistedState;
|
|
525
|
-
private transformRBACPermissions;
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
export { AuthService as A, type EventServiceContextType as E, type InactivityServiceContextType as I, type OrganisationServiceContextType as O, RBACService as R, type UserEventAccess as U, type EventContextType as a, EventServiceContext as b, type EventServiceProviderProps as c, EventServiceProvider as d, OrganisationServiceContext as e, type OrganisationServiceProviderProps as f, OrganisationServiceProvider as g, useOrganisationService as h, InactivityServiceContext as i, type InactivityServiceProviderProps as j, InactivityServiceProvider as k, useInactivityService as l, InactivityService as m, EventService as n, OrganisationService as o, useEventService as u };
|
|
420
|
+
export { AuthService as A, type EventServiceContextType as E, type InactivityServiceContextType as I, type OrganisationServiceContextType as O, type EventContextType as a, EventServiceContext as b, type EventServiceProviderProps as c, EventServiceProvider as d, OrganisationServiceContext as e, type OrganisationServiceProviderProps as f, OrganisationServiceProvider as g, useOrganisationService as h, InactivityServiceContext as i, type InactivityServiceProviderProps as j, InactivityServiceProvider as k, useInactivityService as l, InactivityService as m, EventService as n, OrganisationService as o, useEventService as u };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React__default from 'react';
|
|
3
|
-
import { D as DataRecord, a as DataTableColumn, b as DataTableRBACConfig, c as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, d as PaginationMode, C as ChunkingConfig, e as SearchIndexConfig, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, f as DataTableAction } from './types-
|
|
3
|
+
import { D as DataRecord, a as DataTableColumn, b as DataTableRBACConfig, c as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, d as PaginationMode, C as ChunkingConfig, e as SearchIndexConfig, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, f as DataTableAction } from './types-BDg1mAGG.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Configuration interface for customizing ImportModal text content
|
|
@@ -47,7 +47,7 @@ interface DataTableProps<TData extends DataRecord> {
|
|
|
47
47
|
/** Additional CSS classes for the table container */
|
|
48
48
|
className?: string;
|
|
49
49
|
/** Feature configuration - all features are disabled by default */
|
|
50
|
-
features
|
|
50
|
+
features?: DataTableFeatureConfig;
|
|
51
51
|
/** Hierarchical parent/child row configuration */
|
|
52
52
|
hierarchical?: HierarchicalConfig;
|
|
53
53
|
/** Performance optimization configuration */
|
|
@@ -108,6 +108,13 @@ interface DataTableProps<TData extends DataRecord> {
|
|
|
108
108
|
actions?: DataTableAction<TData>[];
|
|
109
109
|
/** Column order configuration - array of column IDs in desired order */
|
|
110
110
|
columnOrder?: string[];
|
|
111
|
+
/** Unique storage key for persisting table layout state across sessions */
|
|
112
|
+
storageKey?: string;
|
|
113
|
+
/** Callback when table layout changes (column order, visibility, etc.) */
|
|
114
|
+
onLayoutChange?: (layout: {
|
|
115
|
+
columnOrder: string[];
|
|
116
|
+
columnVisibility: Record<string, boolean>;
|
|
117
|
+
}) => void;
|
|
111
118
|
}
|
|
112
119
|
/**
|
|
113
120
|
* Enhanced DataTable with comprehensive performance optimizations
|
|
@@ -17,27 +17,46 @@ import {
|
|
|
17
17
|
LoadingState,
|
|
18
18
|
PaginationControls,
|
|
19
19
|
UnifiedTableBody,
|
|
20
|
+
announce,
|
|
21
|
+
announceBulkOperation,
|
|
22
|
+
announceFilterChange,
|
|
23
|
+
announceLoadingState,
|
|
24
|
+
announcePaginationChange,
|
|
25
|
+
announceSearchResults,
|
|
26
|
+
announceSelectionChange,
|
|
27
|
+
announceSortChange,
|
|
20
28
|
calculateAllDepths,
|
|
21
29
|
calculateAllIndentation,
|
|
22
30
|
calculateIndentation,
|
|
31
|
+
calculateOptimalPageSize,
|
|
32
|
+
cleanupLiveRegion,
|
|
23
33
|
createHierarchicalStructure,
|
|
34
|
+
defaultDataTableFeatures,
|
|
24
35
|
exportToCSV,
|
|
25
36
|
generateCSVContent,
|
|
37
|
+
getAriaSortValue,
|
|
26
38
|
getCellRenderer,
|
|
27
39
|
getHierarchicalSortConfig,
|
|
40
|
+
getPageSizeOptions,
|
|
41
|
+
getPaginationBinding,
|
|
28
42
|
getRowDepth,
|
|
43
|
+
getRowDescription,
|
|
29
44
|
getRowIdSafe,
|
|
45
|
+
getSortButtonLabel,
|
|
30
46
|
groupHierarchicalData,
|
|
31
47
|
hasValidRowId,
|
|
48
|
+
initializeLiveRegion,
|
|
32
49
|
isHierarchicalSortableColumn,
|
|
50
|
+
normalizeDataTableFeatures,
|
|
33
51
|
shouldShowColumnForRow,
|
|
34
52
|
sortHierarchicalDataByStructure,
|
|
35
53
|
sortHierarchicalDataWithSorting,
|
|
36
|
-
validateHierarchicalData
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
54
|
+
validateHierarchicalData,
|
|
55
|
+
validatePaginationConfig
|
|
56
|
+
} from "./chunk-ZMNXIJP4.js";
|
|
57
|
+
import "./chunk-LRQ6RBJC.js";
|
|
58
|
+
import "./chunk-S63MFSY6.js";
|
|
59
|
+
import "./chunk-Q7APDV6H.js";
|
|
41
60
|
import {
|
|
42
61
|
CircuitBreaker,
|
|
43
62
|
DEFAULT_FALLBACK_CONFIG,
|
|
@@ -56,13 +75,12 @@ import {
|
|
|
56
75
|
throttle,
|
|
57
76
|
useDataTablePerformance
|
|
58
77
|
} from "./chunk-YCKPEMJA.js";
|
|
59
|
-
import "./chunk-
|
|
60
|
-
import "./chunk-
|
|
61
|
-
import "./chunk-
|
|
62
|
-
import "./chunk-ULBI5JGB.js";
|
|
78
|
+
import "./chunk-FT2M4R4F.js";
|
|
79
|
+
import "./chunk-FL4ZCQLD.js";
|
|
80
|
+
import "./chunk-MNJXXD6C.js";
|
|
63
81
|
import "./chunk-PYUXFQJ3.js";
|
|
64
|
-
import "./chunk-
|
|
65
|
-
import "./chunk-
|
|
82
|
+
import "./chunk-JCQZ6LA7.js";
|
|
83
|
+
import "./chunk-CVMVPYAL.js";
|
|
66
84
|
import "./chunk-PLDDJCW6.js";
|
|
67
85
|
export {
|
|
68
86
|
ActionButtons,
|
|
@@ -92,29 +110,48 @@ export {
|
|
|
92
110
|
SearchIndex,
|
|
93
111
|
UnifiedTableBody,
|
|
94
112
|
VisibilityTracker,
|
|
113
|
+
announce,
|
|
114
|
+
announceBulkOperation,
|
|
115
|
+
announceFilterChange,
|
|
116
|
+
announceLoadingState,
|
|
117
|
+
announcePaginationChange,
|
|
118
|
+
announceSearchResults,
|
|
119
|
+
announceSelectionChange,
|
|
120
|
+
announceSortChange,
|
|
95
121
|
calculateAllDepths,
|
|
96
122
|
calculateAllIndentation,
|
|
97
123
|
calculateIndentation,
|
|
124
|
+
calculateOptimalPageSize,
|
|
98
125
|
chunkData,
|
|
126
|
+
cleanupLiveRegion,
|
|
99
127
|
createHierarchicalStructure,
|
|
100
128
|
debounce,
|
|
129
|
+
defaultDataTableFeatures,
|
|
101
130
|
determinePaginationMode,
|
|
102
131
|
exportToCSV,
|
|
103
132
|
generateCSVContent,
|
|
133
|
+
getAriaSortValue,
|
|
104
134
|
getCellRenderer,
|
|
105
135
|
getHierarchicalSortConfig,
|
|
106
136
|
getOptimalPageSizeOptions,
|
|
137
|
+
getPageSizeOptions,
|
|
138
|
+
getPaginationBinding,
|
|
107
139
|
getRowDepth,
|
|
140
|
+
getRowDescription,
|
|
108
141
|
getRowIdSafe,
|
|
142
|
+
getSortButtonLabel,
|
|
109
143
|
groupHierarchicalData,
|
|
110
144
|
hasValidRowId,
|
|
145
|
+
initializeLiveRegion,
|
|
111
146
|
isHierarchicalSortableColumn,
|
|
147
|
+
normalizeDataTableFeatures,
|
|
112
148
|
safeExecute,
|
|
113
149
|
shouldShowColumnForRow,
|
|
114
150
|
sortHierarchicalDataByStructure,
|
|
115
151
|
sortHierarchicalDataWithSorting,
|
|
116
152
|
throttle,
|
|
117
153
|
useDataTablePerformance,
|
|
118
|
-
validateHierarchicalData
|
|
154
|
+
validateHierarchicalData,
|
|
155
|
+
validatePaginationConfig
|
|
119
156
|
};
|
|
120
|
-
//# sourceMappingURL=DataTable-
|
|
157
|
+
//# sourceMappingURL=DataTable-ETGVF4Y5.js.map
|
|
@@ -12,8 +12,8 @@ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
|
12
12
|
import { FieldValues, DefaultValues, SubmitHandler, SubmitErrorHandler, UseFormReturn } from 'react-hook-form';
|
|
13
13
|
import { z } from 'zod';
|
|
14
14
|
import { User, SupabaseClient, createClient } from '@supabase/supabase-js';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
15
|
+
import { E as Event } from './unified-DQ4VcT7H.js';
|
|
16
|
+
import { O as Organisation } from './organisation-D6qRDtbF.js';
|
|
17
17
|
import { b as FileCategory, c as FileUploadOptions, e as FileUploadResult, F as FileReference } from './file-reference-9xUOnwyt.js';
|
|
18
18
|
|
|
19
19
|
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
@@ -2529,6 +2529,8 @@ interface PaceLoginPageProps {
|
|
|
2529
2529
|
appName: string;
|
|
2530
2530
|
/** The path to redirect to upon successful login. Defaults to `/`. */
|
|
2531
2531
|
onSuccessRedirectPath?: string;
|
|
2532
|
+
/** Whether to check app access using RBAC. Defaults to false. */
|
|
2533
|
+
requireAppAccess?: boolean;
|
|
2532
2534
|
}
|
|
2533
2535
|
/**
|
|
2534
2536
|
* A consistent, reusable login page for all PACE suite applications.
|
|
@@ -2537,6 +2539,7 @@ interface PaceLoginPageProps {
|
|
|
2537
2539
|
*
|
|
2538
2540
|
* Recent enhancements:
|
|
2539
2541
|
* - Role-based redirection: Admin users are automatically redirected
|
|
2542
|
+
* - RBAC-based app access control: Checks if user has permission to access the app
|
|
2540
2543
|
* - Enhanced error handling with navigation error recovery
|
|
2541
2544
|
* - Dual loading states: auth loading + form submission loading
|
|
2542
2545
|
* - Error persistence: Auth errors are displayed below the form
|
|
@@ -1,59 +1,50 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React__default from 'react';
|
|
3
|
-
import { SupabaseClient } from '@supabase/supabase-js';
|
|
3
|
+
import { SupabaseClient, User, Session, AuthError } from '@supabase/supabase-js';
|
|
4
|
+
import { O as Organisation, a as OrganisationMembership } from './organisation-D6qRDtbF.js';
|
|
5
|
+
import { E as Event } from './unified-DQ4VcT7H.js';
|
|
4
6
|
|
|
7
|
+
interface UserEventAccess {
|
|
8
|
+
event_id: string;
|
|
9
|
+
event_name: string;
|
|
10
|
+
event_description?: string | null;
|
|
11
|
+
start_date: string;
|
|
12
|
+
end_date: string;
|
|
13
|
+
event_status: string;
|
|
14
|
+
app_id: string;
|
|
15
|
+
access_level: string;
|
|
16
|
+
granted_at: string;
|
|
17
|
+
organisation_id: string;
|
|
18
|
+
}
|
|
5
19
|
interface UnifiedAuthContextType {
|
|
6
|
-
user:
|
|
7
|
-
session:
|
|
20
|
+
user: User | null;
|
|
21
|
+
session: Session | null;
|
|
8
22
|
isAuthenticated: boolean;
|
|
9
23
|
authLoading: boolean;
|
|
10
|
-
authError:
|
|
11
|
-
error:
|
|
24
|
+
authError: AuthError | null;
|
|
25
|
+
error: AuthError | null;
|
|
12
26
|
supabase: SupabaseClient | null;
|
|
13
27
|
signIn: (email: string, password?: string) => Promise<{
|
|
14
|
-
error:
|
|
28
|
+
error: AuthError | null;
|
|
15
29
|
}>;
|
|
16
30
|
signUp: (email: string, password: string) => Promise<{
|
|
17
|
-
error:
|
|
31
|
+
error: AuthError | null;
|
|
18
32
|
}>;
|
|
19
33
|
signOut: () => Promise<{
|
|
20
|
-
error:
|
|
34
|
+
error: AuthError | null;
|
|
21
35
|
}>;
|
|
22
36
|
resetPassword: (email: string) => Promise<{
|
|
23
|
-
error:
|
|
37
|
+
error: AuthError | null;
|
|
24
38
|
}>;
|
|
25
39
|
updatePassword: (password: string) => Promise<{
|
|
26
|
-
error:
|
|
40
|
+
error: AuthError | null;
|
|
27
41
|
}>;
|
|
28
42
|
refreshSession: () => Promise<{
|
|
29
|
-
error:
|
|
43
|
+
error: AuthError | null;
|
|
30
44
|
}>;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
rbacLoading: boolean;
|
|
35
|
-
rbacError: Error | null;
|
|
36
|
-
selectedEventId: string | null;
|
|
37
|
-
appConfig: any | null;
|
|
38
|
-
userEventAccess: any[];
|
|
39
|
-
eventAccessLoading: boolean;
|
|
40
|
-
selectedOrganisationId: string | null;
|
|
41
|
-
hasPermission: (permission: string, orgId?: string) => boolean;
|
|
42
|
-
hasAnyPermission: (permissions: string[], orgId?: string) => boolean;
|
|
43
|
-
hasAllPermissions: (permissions: string[], orgId?: string) => boolean;
|
|
44
|
-
hasRole: (role: string) => boolean;
|
|
45
|
-
hasAccessLevel: (level: any) => boolean;
|
|
46
|
-
canAccess: (resource: string, action: string, orgId?: string) => boolean;
|
|
47
|
-
validatePermission: (permission: string, orgId?: string) => Promise<boolean>;
|
|
48
|
-
validateAccess: (resource: string, action: string, orgId?: string) => Promise<boolean>;
|
|
49
|
-
refreshPermissions: (eventId?: string, orgId?: string) => Promise<void>;
|
|
50
|
-
setSelectedEventId: (eventId: string | null) => void;
|
|
51
|
-
loadUserEventAccess: (orgId?: string) => Promise<void>;
|
|
52
|
-
getUserEventAccess: (eventId: string) => any | undefined;
|
|
53
|
-
requireOrganisationContext: () => string;
|
|
54
|
-
selectedOrganisation: any | null;
|
|
55
|
-
organisations: any[];
|
|
56
|
-
userMemberships: any[];
|
|
45
|
+
selectedOrganisation: Organisation | null;
|
|
46
|
+
organisations: Organisation[];
|
|
47
|
+
userMemberships: OrganisationMembership[];
|
|
57
48
|
organisationLoading: boolean;
|
|
58
49
|
organisationError: Error | null;
|
|
59
50
|
hasValidOrganisationContext: boolean;
|
|
@@ -62,14 +53,14 @@ interface UnifiedAuthContextType {
|
|
|
62
53
|
getUserRole: (orgId?: string) => string;
|
|
63
54
|
validateOrganisationAccess: (orgId: string) => boolean;
|
|
64
55
|
refreshOrganisations: () => Promise<void>;
|
|
65
|
-
ensureOrganisationContext: () =>
|
|
56
|
+
ensureOrganisationContext: () => Organisation;
|
|
66
57
|
isOrganisationSecure: () => boolean;
|
|
67
|
-
getPrimaryOrganisation: () =>
|
|
68
|
-
events:
|
|
69
|
-
selectedEvent:
|
|
58
|
+
getPrimaryOrganisation: () => Organisation | null;
|
|
59
|
+
events: Event[];
|
|
60
|
+
selectedEvent: Event | null;
|
|
70
61
|
eventLoading: boolean;
|
|
71
62
|
eventError: Error | null;
|
|
72
|
-
setSelectedEvent: (event:
|
|
63
|
+
setSelectedEvent: (event: Event | null) => void;
|
|
73
64
|
refreshEvents: () => Promise<void>;
|
|
74
65
|
showInactivityWarning: boolean;
|
|
75
66
|
inactivityTimeRemaining: number;
|
|
@@ -84,6 +75,9 @@ interface UnifiedAuthContextType {
|
|
|
84
75
|
handleStaySignedIn: () => void;
|
|
85
76
|
handleSignOutNow: () => Promise<void>;
|
|
86
77
|
appName: string;
|
|
78
|
+
appConfig: {
|
|
79
|
+
requires_event: boolean;
|
|
80
|
+
} | null;
|
|
87
81
|
isLoading: boolean;
|
|
88
82
|
hasErrors: boolean;
|
|
89
83
|
}
|
|
@@ -95,7 +89,9 @@ interface UnifiedAuthProviderProps {
|
|
|
95
89
|
persistState?: boolean;
|
|
96
90
|
enablePersistence?: boolean;
|
|
97
91
|
requireOrganisationContext?: boolean;
|
|
98
|
-
|
|
92
|
+
appConfig?: {
|
|
93
|
+
requires_event: boolean;
|
|
94
|
+
} | null;
|
|
99
95
|
idleTimeoutMs: number;
|
|
100
96
|
warnBeforeMs: number;
|
|
101
97
|
onIdleLogout: (reason: 'inactivity') => void;
|
|
@@ -106,8 +102,9 @@ interface UnifiedAuthProviderProps {
|
|
|
106
102
|
}) => React__default.ReactNode;
|
|
107
103
|
dangerouslyDisableInactivity?: boolean;
|
|
108
104
|
}
|
|
109
|
-
declare function UnifiedAuthProvider({ children, supabaseClient, appName,
|
|
105
|
+
declare function UnifiedAuthProvider({ children, supabaseClient, appName, appConfig, // Default to requiring events
|
|
106
|
+
persistState, enablePersistence, requireOrganisationContext, idleTimeoutMs, // 30 minutes
|
|
110
107
|
warnBeforeMs, // 60 seconds
|
|
111
108
|
onIdleLogout, renderInactivityWarning, dangerouslyDisableInactivity }: UnifiedAuthProviderProps): react_jsx_runtime.JSX.Element;
|
|
112
109
|
|
|
113
|
-
export { type
|
|
110
|
+
export { type UserEventAccess as U, type UnifiedAuthContextType as a, type UnifiedAuthProviderProps as b, UnifiedAuthProvider as c, useUnifiedAuth as u };
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
init_UnifiedAuthProvider
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FL4ZCQLD.js";
|
|
4
4
|
import {
|
|
5
5
|
UnifiedAuthProvider,
|
|
6
6
|
useUnifiedAuth
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-XLZ7U46Z.js";
|
|
7
|
+
} from "./chunk-MNJXXD6C.js";
|
|
8
|
+
import "./chunk-CVMVPYAL.js";
|
|
10
9
|
import "./chunk-PLDDJCW6.js";
|
|
11
10
|
init_UnifiedAuthProvider();
|
|
12
11
|
export {
|
|
13
12
|
UnifiedAuthProvider,
|
|
14
13
|
useUnifiedAuth
|
|
15
14
|
};
|
|
16
|
-
//# sourceMappingURL=UnifiedAuthProvider-
|
|
15
|
+
//# sourceMappingURL=UnifiedAuthProvider-P5SOJAQ6.js.map
|
|
@@ -2,7 +2,9 @@ import {
|
|
|
2
2
|
clearCache,
|
|
3
3
|
getAccessLevel,
|
|
4
4
|
getAppConfig,
|
|
5
|
+
getAppConfigWithClient,
|
|
5
6
|
getPermissionMap,
|
|
7
|
+
getRoleContext,
|
|
6
8
|
hasAllPermissions,
|
|
7
9
|
hasAnyPermission,
|
|
8
10
|
hasPermission,
|
|
@@ -15,15 +17,18 @@ import {
|
|
|
15
17
|
isPermitted,
|
|
16
18
|
isPermittedCached,
|
|
17
19
|
isSuperAdmin,
|
|
20
|
+
resolveAppContext,
|
|
18
21
|
setupRBAC
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-S63MFSY6.js";
|
|
23
|
+
import "./chunk-Q7APDV6H.js";
|
|
21
24
|
import "./chunk-PLDDJCW6.js";
|
|
22
25
|
export {
|
|
23
26
|
clearCache,
|
|
24
27
|
getAccessLevel,
|
|
25
28
|
getAppConfig,
|
|
29
|
+
getAppConfigWithClient,
|
|
26
30
|
getPermissionMap,
|
|
31
|
+
getRoleContext,
|
|
27
32
|
hasAllPermissions,
|
|
28
33
|
hasAnyPermission,
|
|
29
34
|
hasPermission,
|
|
@@ -36,6 +41,7 @@ export {
|
|
|
36
41
|
isPermitted,
|
|
37
42
|
isPermittedCached,
|
|
38
43
|
isSuperAdmin,
|
|
44
|
+
resolveAppContext,
|
|
39
45
|
setupRBAC
|
|
40
46
|
};
|
|
41
|
-
//# sourceMappingURL=api-
|
|
47
|
+
//# sourceMappingURL=api-KG4A2X7P.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
emitAuditEvent,
|
|
5
5
|
getGlobalAuditManager,
|
|
6
6
|
setGlobalAuditManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-Q7APDV6H.js";
|
|
8
8
|
import "./chunk-PLDDJCW6.js";
|
|
9
9
|
export {
|
|
10
10
|
RBACAuditManager,
|
|
@@ -13,4 +13,4 @@ export {
|
|
|
13
13
|
getGlobalAuditManager,
|
|
14
14
|
setGlobalAuditManager
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=audit-
|
|
16
|
+
//# sourceMappingURL=audit-65VNHEV2.js.map
|