@jmruthers/pace-core 0.2.6 → 0.4.1
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 +1 -26
- package/README.md +229 -231
- package/dist/{DataTable-EEUDXPE5.js → DataTable-2LB6HI6V.js} +17 -10
- package/dist/{DataTable-C1AEm9Cx.d.ts → DataTable-BDBqkU-i.d.ts} +51 -23
- package/dist/{PublicLoadingSpinner-DztrzuJr.d.ts → Table-CIm9IWqk.d.ts} +122 -635
- package/dist/UnifiedAuthProvider-V7y63NjT.d.ts +88 -0
- package/dist/{api-ETQ6YJ3C.js → api-AIJ3IJX3.js} +4 -6
- package/dist/{appConfig-BVGyuvI7.d.ts → appConfig-fB1pP_v3.d.ts} +1 -1
- package/dist/{audit-BUW3LMJB.js → audit-PD5L5ZSC.js} +3 -3
- package/dist/{chunk-ETEJVKYK.js → chunk-4MCJAK7J.js} +4927 -504
- package/dist/chunk-4MCJAK7J.js.map +1 -0
- package/dist/{chunk-CDQ3PX7L.js → chunk-4ZTIEYU2.js} +1 -1
- package/dist/chunk-4ZTIEYU2.js.map +1 -0
- package/dist/{chunk-PLDDJCW6.js → chunk-DC5AMYBS.js} +5 -15
- package/dist/{chunk-HEMJ4SUJ.js → chunk-H4PZ4B3Y.js} +27 -124
- package/dist/chunk-H4PZ4B3Y.js.map +1 -0
- package/dist/{chunk-HNDFPXUU.js → chunk-IOX76PSM.js} +28 -270
- package/dist/chunk-IOX76PSM.js.map +1 -0
- package/dist/{chunk-TIVL4UQ7.js → chunk-JUUNUW3O.js} +5 -14
- package/dist/chunk-JUUNUW3O.js.map +1 -0
- package/dist/chunk-KK6WIDK6.js +63 -0
- package/dist/chunk-KK6WIDK6.js.map +1 -0
- package/dist/chunk-U7DY5T33.js +11 -0
- package/dist/chunk-U7DY5T33.js.map +1 -0
- package/dist/{chunk-SS3E6QLB.js → chunk-WHLSWC6W.js} +61 -16
- package/dist/chunk-WHLSWC6W.js.map +1 -0
- package/dist/chunk-XI7QFSSC.js +790 -0
- package/dist/chunk-XI7QFSSC.js.map +1 -0
- package/dist/chunk-XIJMMBDD.js +73 -0
- package/dist/chunk-XIJMMBDD.js.map +1 -0
- package/dist/{chunk-7BNPOCLL.js → chunk-YNU5QJ4S.js} +5 -22
- package/dist/chunk-YNU5QJ4S.js.map +1 -0
- package/dist/chunk-YWYCNGWH.js +2070 -0
- package/dist/chunk-YWYCNGWH.js.map +1 -0
- package/dist/chunk-ZJ3UKPIW.js +952 -0
- package/dist/chunk-ZJ3UKPIW.js.map +1 -0
- package/dist/components.d.ts +10 -906
- package/dist/components.js +77 -3255
- package/dist/components.js.map +1 -1
- package/dist/{database-C3Szpi5J.d.ts → database-CAMsquLm.d.ts} +11 -28
- package/dist/hooks.d.ts +6 -7
- package/dist/hooks.js +11 -35
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +111 -245
- package/dist/index.js +178 -187
- package/dist/index.js.map +1 -1
- package/dist/{organisation-CO3Sh3_D.d.ts → organisation-DLNNQhPB.d.ts} +1 -1
- package/dist/providers.d.ts +4 -4
- package/dist/providers.js +5 -19
- package/dist/rbac/index.d.ts +5 -61
- package/dist/rbac/index.js +93 -256
- package/dist/rbac/index.js.map +1 -1
- package/dist/{types-DiRQsGJs.d.ts → types-Bavn44NW.d.ts} +36 -71
- package/dist/types.d.ts +5 -5
- package/dist/types.js +2 -7
- package/dist/types.js.map +1 -1
- package/dist/{unified-CM7T0aTK.d.ts → unified-BtRpPbmp.d.ts} +2 -1
- package/dist/useAppConfig-CZNJJsT_.d.ts +148 -0
- package/dist/utils.d.ts +60 -83
- package/dist/utils.js +55633 -277
- package/dist/utils.js.map +1 -1
- package/dist/validation.d.ts +1 -1
- package/dist/validation.js +1 -1
- package/docs/README.md +32 -46
- package/docs/api/README.md +229 -231
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- package/docs/api/interfaces/ButtonProps.md +2 -2
- package/docs/api/interfaces/CardProps.md +2 -2
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +7 -85
- package/docs/api/interfaces/DataTableColumn.md +12 -131
- package/docs/api/interfaces/DataTableProps.md +274 -64
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- package/docs/api/interfaces/EventContextType.md +7 -7
- package/docs/api/interfaces/EventProviderProps.md +2 -2
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +2 -2
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- 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 +26 -26
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/StyleImport.md +2 -2
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +46 -447
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +9 -95
- package/docs/api/interfaces/UserEventAccess.md +14 -14
- package/docs/api/interfaces/UserMenuProps.md +6 -6
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +773 -1631
- package/docs/api-reference/components.md +43 -761
- package/docs/api-reference/hooks.md +0 -126
- package/docs/api-reference/providers.md +65 -141
- package/docs/api-reference/types.md +36 -66
- package/docs/api-reference/utilities.md +1 -1
- package/docs/architecture/README.md +2 -1
- package/docs/consuming-app-example.md +96 -42
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +1 -0
- package/docs/core-concepts/rbac-system.md +10 -23
- package/docs/documentation-style-checklist.md +2 -8
- package/docs/getting-started/examples/README.md +1 -15
- package/docs/getting-started/examples/basic-auth-app.md +119 -444
- package/docs/getting-started/examples/full-featured-app.md +6 -6
- package/docs/getting-started/installation.md +52 -231
- package/docs/getting-started/quick-start.md +24 -121
- package/docs/implementation-guides/app-layout.md +108 -133
- package/docs/implementation-guides/data-tables.md +29 -1011
- package/docs/implementation-guides/forms.md +3 -3
- package/docs/implementation-guides/large-datasets.md +2 -2
- package/docs/implementation-guides/navigation.md +1 -1
- package/docs/implementation-guides/permission-enforcement.md +4 -4
- package/docs/migration/README.md +8 -18
- package/docs/migration/rbac-migration.md +0 -50
- package/docs/migration-guide.md +104 -51
- package/docs/performance/README.md +4 -1
- package/docs/quick-reference.md +36 -53
- package/docs/rbac/README.md +69 -136
- package/docs/rbac/api-reference.md +8 -39
- package/docs/rbac/examples.md +66 -237
- package/docs/rbac/getting-started.md +16 -131
- package/docs/rbac/quick-start.md +323 -499
- package/docs/rbac/troubleshooting.md +262 -240
- package/docs/security/README.md +1 -50
- package/docs/styles/README.md +117 -143
- package/docs/testing/README.md +10 -6
- package/docs/troubleshooting/common-issues.md +14 -604
- package/docs/usage.md +90 -28
- package/docs/visual-testing.md +7 -0
- package/package.json +24 -43
- package/dist/UnifiedAuthProvider-w66zSCUf.d.ts +0 -160
- package/dist/appNameResolver-7GHF5ED2.js +0 -22
- package/dist/chunk-2V3Y6YBC.js +0 -114
- package/dist/chunk-2V3Y6YBC.js.map +0 -1
- package/dist/chunk-7BNPOCLL.js.map +0 -1
- package/dist/chunk-BEZRLNK3.js +0 -1744
- package/dist/chunk-BEZRLNK3.js.map +0 -1
- package/dist/chunk-C5G2A4PO.js +0 -1349
- package/dist/chunk-C5G2A4PO.js.map +0 -1
- package/dist/chunk-CDQ3PX7L.js.map +0 -1
- package/dist/chunk-ETEJVKYK.js.map +0 -1
- package/dist/chunk-EWKPTNPO.js +0 -5139
- package/dist/chunk-EWKPTNPO.js.map +0 -1
- package/dist/chunk-HEMJ4SUJ.js.map +0 -1
- package/dist/chunk-HNDFPXUU.js.map +0 -1
- package/dist/chunk-MZBUOP4P.js +0 -119
- package/dist/chunk-MZBUOP4P.js.map +0 -1
- package/dist/chunk-N2EUGZRW.js +0 -98
- package/dist/chunk-N2EUGZRW.js.map +0 -1
- package/dist/chunk-NQ4TOOO6.js +0 -20
- package/dist/chunk-NQ4TOOO6.js.map +0 -1
- package/dist/chunk-OHXGNT3K.js +0 -21
- package/dist/chunk-OHXGNT3K.js.map +0 -1
- package/dist/chunk-PLDDJCW6.js.map +0 -1
- package/dist/chunk-RRUYHORU.js +0 -3431
- package/dist/chunk-RRUYHORU.js.map +0 -1
- package/dist/chunk-SS3E6QLB.js.map +0 -1
- package/dist/chunk-TIVL4UQ7.js.map +0 -1
- package/dist/chunk-VYG4AXYW.js +0 -388
- package/dist/chunk-VYG4AXYW.js.map +0 -1
- package/dist/chunk-YDJW5XTN.js +0 -84
- package/dist/chunk-YDJW5XTN.js.map +0 -1
- package/dist/styles/core.css +0 -401
- package/dist/styles/fonts/georama-italic.woff2 +0 -0
- package/dist/styles/fonts/georama.woff2 +0 -0
- package/dist/styles/fonts/open-sans-italic.woff2 +0 -0
- package/dist/styles/fonts/open-sans.woff2 +0 -0
- package/dist/styles/fonts/reddit-mono.woff2 +0 -0
- package/dist/styles/index.d.ts +0 -36
- package/dist/styles/index.js +0 -24
- package/dist/styles/index.js.map +0 -1
- package/dist/theming/runtime.d.ts +0 -73
- package/dist/theming/runtime.js +0 -16
- package/dist/theming/runtime.js.map +0 -1
- package/dist/usePublicRouteParams-B6i0KtXW.d.ts +0 -477
- package/docs/INDEX.md +0 -192
- package/docs/api/classes/PublicErrorBoundary.md +0 -132
- package/docs/api/interfaces/EventLogoProps.md +0 -152
- package/docs/api/interfaces/FileSizeLimits.md +0 -7
- package/docs/api/interfaces/FileUploadProps.md +0 -154
- package/docs/api/interfaces/InactivityWarningModalProps.md +0 -115
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
- package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
- package/docs/api/interfaces/PublicPageFooterProps.md +0 -112
- package/docs/api/interfaces/PublicPageHeaderProps.md +0 -138
- package/docs/api/interfaces/PublicPageLayoutProps.md +0 -138
- package/docs/api/interfaces/StorageConfig.md +0 -41
- package/docs/api/interfaces/StorageFileInfo.md +0 -74
- package/docs/api/interfaces/StorageFileMetadata.md +0 -140
- package/docs/api/interfaces/StorageListOptions.md +0 -86
- package/docs/api/interfaces/StorageListResult.md +0 -41
- package/docs/api/interfaces/StorageUploadOptions.md +0 -88
- package/docs/api/interfaces/StorageUploadResult.md +0 -63
- package/docs/api/interfaces/StorageUrlOptions.md +0 -47
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +0 -136
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +0 -123
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +0 -87
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +0 -81
- package/docs/api/interfaces/UsePublicEventOptions.md +0 -34
- package/docs/api/interfaces/UsePublicEventReturn.md +0 -68
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +0 -94
- package/docs/best-practices/README.md +0 -400
- package/docs/consuming-app-vite-config.md +0 -233
- package/docs/examples/navigation-menu-auth-fix.md +0 -344
- package/docs/implementation-guides/hierarchical-datatable.md +0 -850
- package/docs/implementation-guides/public-pages.md +0 -752
- package/docs/migration/quick-migration-guide.md +0 -320
- package/docs/migration/v0.4.15-tailwind-scanning.md +0 -272
- package/docs/migration/v0.4.16-css-first-approach.md +0 -306
- package/docs/migration/v0.4.17-source-path-fix.md +0 -229
- package/docs/print-components/README.md +0 -258
- package/docs/print-components/api-reference.md +0 -636
- package/docs/print-components/examples/README.md +0 -204
- package/docs/print-components/examples/basic-report.tsx +0 -92
- package/docs/print-components/examples/card-catalog.tsx +0 -149
- package/docs/print-components/examples/cover-page-report.tsx +0 -163
- package/docs/print-components/quick-start.md +0 -363
- package/docs/troubleshooting/README.md +0 -497
- package/docs/troubleshooting/styling-issues.md +0 -219
- package/docs/troubleshooting/tailwind-content-scanning.md +0 -213
- package/src/__mocks__/lucide-react.ts +0 -181
- package/src/__tests__/README.md +0 -404
- package/src/__tests__/debug-provider.unit.test.tsx +0 -67
- package/src/__tests__/e2e/workflows.test.tsx +0 -373
- package/src/__tests__/hybridPermissions.unit.test.tsx +0 -474
- package/src/__tests__/index.integration.test.ts +0 -491
- package/src/__tests__/mocks/MockAuthProvider-standalone.tsx +0 -47
- package/src/__tests__/mocks/MockAuthProvider.tsx +0 -63
- package/src/__tests__/mocks/enhancedSupabaseMock.ts +0 -252
- package/src/__tests__/mocks/index.test.ts +0 -23
- package/src/__tests__/mocks/index.ts +0 -16
- package/src/__tests__/mocks/mockAuth.ts +0 -155
- package/src/__tests__/mocks/mockSupabase.ts +0 -83
- package/src/__tests__/mocks/mockSupabaseClient.ts +0 -63
- package/src/__tests__/mocks/providers.tsx +0 -22
- package/src/__tests__/patterns/__tests__/testPatterns.test.ts +0 -394
- package/src/__tests__/patterns/testPatterns.ts +0 -124
- package/src/__tests__/performance/componentPerformance.performance.test.ts +0 -27
- package/src/__tests__/performance/index.ts +0 -24
- package/src/__tests__/performance/performanceValidation.performance.test.ts +0 -15
- package/src/__tests__/security/security.unit.test.tsx +0 -7
- package/src/__tests__/security/securityValidation.security.test.tsx +0 -153
- package/src/__tests__/setup.ts +0 -259
- package/src/__tests__/setupTests.d.ts +0 -1
- package/src/__tests__/shared/componentTestUtils.tsx +0 -475
- package/src/__tests__/shared/errorHandlingTestUtils.ts +0 -107
- package/src/__tests__/shared/index.ts +0 -81
- package/src/__tests__/shared/integrationTestUtils.tsx +0 -375
- package/src/__tests__/shared/performanceTestUtils.tsx +0 -476
- package/src/__tests__/shared/testUtils.optimized.tsx +0 -685
- package/src/__tests__/simple.test.tsx +0 -20
- package/src/__tests__/templates/accessibility.test.template.tsx +0 -279
- package/src/__tests__/templates/component.test.template.tsx +0 -122
- package/src/__tests__/templates/integration.test.template.tsx +0 -199
- package/src/__tests__/test-utils/dataFactories.ts +0 -60
- package/src/__tests__/test-utils/index.ts +0 -6
- package/src/__tests__/typeSafety.unit.test.ts +0 -65
- package/src/__tests__/unifiedAuth.unit.test.tsx +0 -151
- package/src/__tests__/utils/accessibilityHelpers.ts +0 -254
- package/src/__tests__/utils/assertions.ts +0 -50
- package/src/__tests__/utils/deterministicHelpers.ts +0 -31
- package/src/__tests__/utils/edgeCaseConfig.test.ts +0 -75
- package/src/__tests__/utils/edgeCaseConfig.ts +0 -98
- package/src/__tests__/utils/mockHelpers.ts +0 -149
- package/src/__tests__/utils/mockLoader.ts +0 -101
- package/src/__tests__/utils/performanceHelpers.ts +0 -55
- package/src/__tests__/utils/performanceTestHelpers.ts +0 -68
- package/src/__tests__/utils/testDataFactories.ts +0 -28
- package/src/__tests__/utils/testIsolation.ts +0 -67
- package/src/__tests__/utils/visualTestHelpers.ts +0 -20
- package/src/__tests__/visual/__snapshots__/componentSnapshots.visual.test.tsx.snap +0 -68
- package/src/__tests__/visual/__snapshots__/componentVisuals.visual.test.tsx.snap +0 -14
- package/src/__tests__/visual/__snapshots__/visualRegression.test.tsx.snap +0 -217
- package/src/__tests__/visual/__snapshots__/visualRegression.visual.test.tsx.snap +0 -24
- package/src/__tests__/visual/componentSnapshots.visual.test.tsx +0 -33
- package/src/__tests__/visual/componentVisuals.visual.test.tsx +0 -12
- package/src/__tests__/visual/visualRegression.visual.test.tsx +0 -20
- package/src/components/Alert/Alert.tsx +0 -134
- package/src/components/Alert/__tests__/Alert.unit.test.tsx +0 -381
- package/src/components/Alert/index.ts +0 -2
- package/src/components/Avatar/Avatar.tsx +0 -84
- package/src/components/Avatar/__tests__/Avatar.unit.test.tsx +0 -232
- package/src/components/Avatar/index.ts +0 -2
- package/src/components/Button/Button.tsx +0 -270
- package/src/components/Button/__tests__/Button.accessibility.test.tsx +0 -131
- package/src/components/Button/__tests__/Button.comprehensive.test.tsx +0 -721
- package/src/components/Button/__tests__/Button.unit.test.tsx +0 -189
- package/src/components/Button/__tests__/EventSelector.integration.test.tsx +0 -285
- package/src/components/Button/index.ts +0 -2
- package/src/components/Card/Card.tsx +0 -271
- package/src/components/Card/__tests__/Card.accessibility.test.tsx +0 -394
- package/src/components/Card/__tests__/Card.comprehensive.test.tsx +0 -599
- package/src/components/Card/__tests__/Card.integration.test.tsx +0 -673
- package/src/components/Card/__tests__/Card.performance.test.tsx +0 -546
- package/src/components/Card/__tests__/Card.unit.test.tsx +0 -330
- package/src/components/Card/__tests__/Card.visual.test.tsx +0 -599
- package/src/components/Card/__tests__/README.md +0 -211
- package/src/components/Card/index.ts +0 -1
- package/src/components/Checkbox/Checkbox.tsx +0 -75
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
- package/src/components/Checkbox/__tests__/Checkbox.unit.test.tsx +0 -520
- package/src/components/Checkbox/index.ts +0 -2
- package/src/components/DataTable/DataTable.tsx +0 -438
- package/src/components/DataTable/__tests__/DataTable.errorHandling.test.tsx +0 -251
- package/src/components/DataTable/__tests__/DataTable.hierarchical.test.tsx +0 -680
- package/src/components/DataTable/__tests__/DataTable.infinite-loop.test.tsx +0 -323
- package/src/components/DataTable/__tests__/DataTable.integration.test.tsx +0 -716
- package/src/components/DataTable/__tests__/DataTable.performance.test.tsx +0 -589
- package/src/components/DataTable/__tests__/DataTable.permissions.test.tsx +0 -316
- package/src/components/DataTable/__tests__/DataTable.regressionFixes.test.tsx +0 -546
- package/src/components/DataTable/__tests__/DataTable.selection.controlled.test.tsx +0 -386
- package/src/components/DataTable/__tests__/DataTable.selection.test.tsx +0 -338
- package/src/components/DataTable/__tests__/DataTable.sorting.test.tsx +0 -321
- package/src/components/DataTable/__tests__/DataTable.userWorkflows.test.tsx +0 -320
- package/src/components/DataTable/__tests__/DataTable.workflowValidation.test.tsx +0 -583
- package/src/components/DataTable/__tests__/DataTable.workflows.test.tsx +0 -711
- package/src/components/DataTable/__tests__/README.md +0 -145
- package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +0 -66
- package/src/components/DataTable/__tests__/performance-regression.test.tsx +0 -777
- package/src/components/DataTable/__tests__/performance.test.tsx +0 -365
- package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +0 -103
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +0 -381
- package/src/components/DataTable/__tests__/test-utils.ts +0 -94
- package/src/components/DataTable/components/ActionButtons.tsx +0 -177
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +0 -160
- package/src/components/DataTable/components/ColumnFilter.tsx +0 -114
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +0 -100
- package/src/components/DataTable/components/DataTableBody.tsx +0 -461
- package/src/components/DataTable/components/DataTableCore.tsx +0 -941
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +0 -214
- package/src/components/DataTable/components/DataTableModals.tsx +0 -87
- package/src/components/DataTable/components/DataTableToolbar.tsx +0 -250
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -144
- package/src/components/DataTable/components/EditableRow.tsx +0 -159
- package/src/components/DataTable/components/EmptyState.tsx +0 -64
- package/src/components/DataTable/components/ExpandButton.tsx +0 -113
- package/src/components/DataTable/components/FilterRow.tsx +0 -100
- package/src/components/DataTable/components/GroupHeader.tsx +0 -42
- package/src/components/DataTable/components/GroupingDropdown.tsx +0 -96
- package/src/components/DataTable/components/ImportModal.tsx +0 -345
- package/src/components/DataTable/components/LoadingState.tsx +0 -12
- package/src/components/DataTable/components/PaginationControls.tsx +0 -332
- package/src/components/DataTable/components/UnifiedTableBody.tsx +0 -713
- package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -513
- package/src/components/DataTable/components/__tests__/ActionButtons.unit.test.tsx +0 -150
- package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +0 -224
- package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.unit.test.tsx +0 -244
- package/src/components/DataTable/components/__tests__/DataTable.accessibility.test.tsx +0 -629
- package/src/components/DataTable/components/__tests__/DataTable.integration.test.tsx +0 -470
- package/src/components/DataTable/components/__tests__/DataTable.performance.test.tsx +0 -160
- package/src/components/DataTable/components/__tests__/DataTable.real.test.tsx +0 -251
- package/src/components/DataTable/components/__tests__/DataTable.security.test.tsx +0 -171
- package/src/components/DataTable/components/__tests__/DataTable.unit.test.tsx +0 -290
- package/src/components/DataTable/components/__tests__/DataTableBody.unit.test.tsx +0 -147
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.unit.test.tsx +0 -182
- package/src/components/DataTable/components/__tests__/DataTableModals.unit.test.tsx +0 -123
- package/src/components/DataTable/components/__tests__/EditableRow.unit.test.tsx +0 -660
- package/src/components/DataTable/components/__tests__/EmptyState.unit.test.tsx +0 -256
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -498
- package/src/components/DataTable/components/__tests__/FilterRow.unit.test.tsx +0 -112
- package/src/components/DataTable/components/__tests__/FilteringToggle.unit.test.tsx +0 -133
- package/src/components/DataTable/components/__tests__/GroupHeader.unit.test.tsx +0 -172
- package/src/components/DataTable/components/__tests__/GroupingDropdown.unit.test.tsx +0 -222
- package/src/components/DataTable/components/__tests__/ImportModal.unit.test.tsx +0 -780
- package/src/components/DataTable/components/__tests__/LoadingState.unit.test.tsx +0 -65
- package/src/components/DataTable/components/__tests__/PaginationControls.unit.test.tsx +0 -634
- package/src/components/DataTable/components/__tests__/StateComponents.unit.test.tsx +0 -48
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.hierarchical.test.tsx +0 -541
- package/src/components/DataTable/components/__tests__/ViewRowModal.unit.test.tsx +0 -228
- package/src/components/DataTable/components/__tests__/VirtualizedDataTable.unit.test.tsx +0 -568
- package/src/components/DataTable/components/index.ts +0 -16
- package/src/components/DataTable/context/DataTableContext.tsx +0 -97
- package/src/components/DataTable/core/ActionManager.ts +0 -235
- package/src/components/DataTable/core/ColumnFactory.ts +0 -268
- package/src/components/DataTable/core/ColumnManager.ts +0 -205
- package/src/components/DataTable/core/DataManager.ts +0 -188
- package/src/components/DataTable/core/DataTableContext.tsx +0 -181
- package/src/components/DataTable/core/LocalDataAdapter.ts +0 -264
- package/src/components/DataTable/core/PluginRegistry.ts +0 -229
- package/src/components/DataTable/core/StateManager.ts +0 -311
- package/src/components/DataTable/core/__tests__/ActionManager.unit.test.ts +0 -405
- package/src/components/DataTable/core/__tests__/ArchitectureIntegration.unit.test.tsx +0 -445
- package/src/components/DataTable/core/__tests__/ColumnFactory.unit.test.ts +0 -288
- package/src/components/DataTable/core/__tests__/ColumnManager.unit.test.ts +0 -623
- package/src/components/DataTable/core/__tests__/DataManager.unit.test.ts +0 -431
- package/src/components/DataTable/core/__tests__/DataTableContext.unit.test.tsx +0 -433
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.unit.test.ts +0 -422
- package/src/components/DataTable/core/__tests__/PluginRegistry.unit.test.tsx +0 -207
- package/src/components/DataTable/core/__tests__/StateManager.unit.test.ts +0 -278
- package/src/components/DataTable/core/index.ts +0 -8
- package/src/components/DataTable/core/interfaces.ts +0 -338
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -418
- package/src/components/DataTable/examples/HierarchicalExample.tsx +0 -472
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -173
- package/src/components/DataTable/examples/PerformanceExample.tsx +0 -502
- package/src/components/DataTable/examples/__tests__/PerformanceExample.unit.test.tsx +0 -281
- package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.unit.test.ts +0 -407
- package/src/components/DataTable/hooks/__tests__/useColumnReordering.unit.test.ts +0 -679
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -95
- package/src/components/DataTable/hooks/useColumnReordering.ts +0 -110
- package/src/components/DataTable/hooks/useDataTableState.ts +0 -325
- package/src/components/DataTable/hooks/useHierarchicalState.ts +0 -174
- package/src/components/DataTable/index.ts +0 -68
- package/src/components/DataTable/styles.ts +0 -171
- package/src/components/DataTable/types.ts +0 -473
- package/src/components/DataTable/utils/__tests__/debugTools.unit.test.ts +0 -267
- package/src/components/DataTable/utils/__tests__/errorHandling.unit.test.ts +0 -467
- package/src/components/DataTable/utils/__tests__/exportUtils.unit.test.ts +0 -380
- package/src/components/DataTable/utils/__tests__/flexibleImport.unit.test.ts +0 -233
- package/src/components/DataTable/utils/__tests__/performanceUtils.unit.test.ts +0 -414
- package/src/components/DataTable/utils/debugTools.ts +0 -583
- package/src/components/DataTable/utils/errorHandling.ts +0 -494
- package/src/components/DataTable/utils/exportUtils.ts +0 -126
- package/src/components/DataTable/utils/flexibleImport.ts +0 -510
- package/src/components/DataTable/utils/hierarchicalSorting.ts +0 -151
- package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -218
- package/src/components/DataTable/utils/index.ts +0 -1
- package/src/components/DataTable/utils/performanceUtils.ts +0 -351
- package/src/components/Dialog/Dialog.tsx +0 -782
- package/src/components/Dialog/README.md +0 -804
- package/src/components/Dialog/__tests__/Dialog.accessibility.test.tsx +0 -521
- package/src/components/Dialog/__tests__/Dialog.auto-size.example.tsx +0 -157
- package/src/components/Dialog/__tests__/Dialog.enhanced.test.tsx +0 -538
- package/src/components/Dialog/__tests__/Dialog.unit.test.tsx +0 -1373
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
- package/src/components/Dialog/examples/HtmlDialogExample.tsx +0 -202
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
- package/src/components/Dialog/examples/SmartDialogExample.tsx +0 -322
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -151
- package/src/components/Dialog/index.ts +0 -12
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
- package/src/components/Dialog/utils/safeHtml.ts +0 -185
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +0 -312
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.accessibility.test.tsx +0 -517
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.integration.test.tsx +0 -572
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.unit.test.tsx +0 -579
- package/src/components/ErrorBoundary/index.ts +0 -8
- package/src/components/EventSelector/EventSelector.tsx +0 -360
- package/src/components/EventSelector/__tests__/EventSelector.test.tsx +0 -528
- package/src/components/EventSelector/index.ts +0 -3
- package/src/components/EventSelector/types.ts +0 -79
- package/src/components/FileUpload/FileUpload.example.tsx +0 -218
- package/src/components/FileUpload/FileUpload.tsx +0 -237
- package/src/components/FileUpload/__tests__/FileUpload.integration.test.tsx +0 -992
- package/src/components/FileUpload/__tests__/FileUpload.real.test.tsx +0 -927
- package/src/components/FileUpload/__tests__/FileUpload.test.tsx +0 -855
- package/src/components/FileUpload/__tests__/FileUpload.unit.test.tsx +0 -1311
- package/src/components/FileUpload/__tests__/FileUpload.unmocked.test.tsx +0 -937
- package/src/components/FileUpload/index.ts +0 -6
- package/src/components/Footer/Footer.tsx +0 -197
- package/src/components/Footer/__tests__/Footer.accessibility.test.tsx +0 -359
- package/src/components/Footer/__tests__/Footer.integration.test.tsx +0 -353
- package/src/components/Footer/__tests__/Footer.performance.test.tsx +0 -309
- package/src/components/Footer/__tests__/Footer.unit.test.tsx +0 -309
- package/src/components/Footer/__tests__/Footer.visual.test.tsx +0 -335
- package/src/components/Footer/index.ts +0 -17
- package/src/components/Form/Form.tsx +0 -166
- package/src/components/Form/FormErrorSummary.tsx +0 -113
- package/src/components/Form/FormField.tsx +0 -249
- package/src/components/Form/FormFieldset.tsx +0 -127
- package/src/components/Form/FormLiveRegion.tsx +0 -198
- package/src/components/Form/__tests__/Form.accessibility.test.tsx +0 -820
- package/src/components/Form/__tests__/Form.unit.test.tsx +0 -305
- package/src/components/Form/__tests__/FormErrorSummary.unit.test.tsx +0 -285
- package/src/components/Form/__tests__/FormFieldset.unit.test.tsx +0 -241
- package/src/components/Form/index.ts +0 -26
- package/src/components/Header/Header.tsx +0 -301
- package/src/components/Header/__tests__/Header.accessibility.test.tsx +0 -382
- package/src/components/Header/__tests__/Header.comprehensive.test.tsx +0 -509
- package/src/components/Header/__tests__/Header.unit.test.tsx +0 -335
- package/src/components/Header/index.ts +0 -4
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +0 -196
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +0 -164
- package/src/components/InactivityWarningModal/__tests__/InactivityWarningModal.unit.test.tsx +0 -224
- package/src/components/InactivityWarningModal/index.ts +0 -9
- package/src/components/Input/Input.tsx +0 -201
- package/src/components/Input/__mocks__/Input.tsx +0 -2
- package/src/components/Input/__tests__/Input.accessibility.test.tsx +0 -632
- package/src/components/Input/__tests__/Input.unit.test.tsx +0 -1121
- package/src/components/Input/index.ts +0 -9
- package/src/components/Label/Label.tsx +0 -186
- package/src/components/Label/__tests__/Label.accessibility.test.tsx +0 -239
- package/src/components/Label/__tests__/Label.unit.test.tsx +0 -331
- package/src/components/Label/index.ts +0 -2
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +0 -98
- package/src/components/LoadingSpinner/__tests__/LoadingSpinner.accessibility.test.tsx +0 -116
- package/src/components/LoadingSpinner/__tests__/LoadingSpinner.unit.test.tsx +0 -144
- package/src/components/LoadingSpinner/index.ts +0 -3
- package/src/components/LoginForm/LoginForm.tsx +0 -273
- package/src/components/LoginForm/__tests__/LoginForm.accessibility.test.tsx +0 -201
- package/src/components/LoginForm/__tests__/LoginForm.unit.test.tsx +0 -119
- package/src/components/LoginForm/index.ts +0 -3
- package/src/components/NavigationMenu/NavigationMenu.tsx +0 -698
- package/src/components/NavigationMenu/__tests__/NavigationMenu.accessibility.test.tsx +0 -378
- package/src/components/NavigationMenu/__tests__/NavigationMenu.enhanced.test.tsx +0 -768
- package/src/components/NavigationMenu/__tests__/NavigationMenu.integration.test.tsx +0 -576
- package/src/components/NavigationMenu/__tests__/NavigationMenu.performance.test.tsx +0 -585
- package/src/components/NavigationMenu/__tests__/NavigationMenu.real.component.test.tsx +0 -783
- package/src/components/NavigationMenu/__tests__/NavigationMenu.security.enhanced.test.tsx +0 -810
- package/src/components/NavigationMenu/__tests__/NavigationMenu.security.test.tsx +0 -494
- package/src/components/NavigationMenu/__tests__/NavigationMenu.unit.test.tsx +0 -331
- package/src/components/NavigationMenu/__tests__/NavigationMenu.userWorkflows.test.tsx +0 -347
- package/src/components/NavigationMenu/__tests__/NavigationMenu.workflows.test.tsx +0 -584
- package/src/components/NavigationMenu/index.ts +0 -10
- package/src/components/NavigationMenu/types.ts +0 -85
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -304
- package/src/components/OrganisationSelector/__tests__/OrganisationSelector.unit.test.tsx +0 -664
- package/src/components/OrganisationSelector/index.ts +0 -9
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +0 -699
- package/src/components/PaceAppLayout/README.md +0 -278
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -288
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +0 -893
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +0 -629
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +0 -782
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -904
- package/src/components/PaceAppLayout/index.ts +0 -1
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +0 -221
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.accessibility.test.tsx +0 -463
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.integration.test.tsx +0 -586
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.unit.test.tsx +0 -533
- package/src/components/PaceLoginPage/index.ts +0 -1
- package/src/components/PasswordReset/PasswordChangeForm.tsx +0 -186
- package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
- package/src/components/PasswordReset/__tests__/PasswordChangeForm.accessibility.test.tsx +0 -408
- package/src/components/PasswordReset/__tests__/PasswordChangeForm.unit.test.tsx +0 -561
- package/src/components/PasswordReset/__tests__/PasswordReset.integration.test.tsx +0 -304
- package/src/components/PasswordReset/__tests__/PasswordResetForm.accessibility.test.tsx +0 -20
- package/src/components/PasswordReset/__tests__/PasswordResetForm.unit.test.tsx +0 -523
- package/src/components/PasswordReset/__tests__/__mocks__/UnifiedAuthProvider.ts +0 -29
- package/src/components/PasswordReset/index.ts +0 -4
- package/src/components/Print/__tests__/Print.comprehensive.test.tsx +0 -331
- package/src/components/PrintButton/PrintButton.tsx +0 -321
- package/src/components/PrintButton/PrintButtonGroup.tsx +0 -84
- package/src/components/PrintButton/PrintToolbar.tsx +0 -94
- package/src/components/PrintButton/__tests__/PrintButton.unit.test.tsx +0 -429
- package/src/components/PrintButton/__tests__/PrintButtonGroup.unit.test.tsx +0 -277
- package/src/components/PrintButton/__tests__/PrintToolbar.unit.test.tsx +0 -264
- package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +0 -438
- package/src/components/PrintButton/index.ts +0 -33
- package/src/components/PrintButton/types.ts +0 -173
- package/src/components/PrintCard/PrintCard.tsx +0 -154
- package/src/components/PrintCard/PrintCardContent.tsx +0 -57
- package/src/components/PrintCard/PrintCardFooter.tsx +0 -60
- package/src/components/PrintCard/PrintCardGrid.tsx +0 -91
- package/src/components/PrintCard/PrintCardHeader.tsx +0 -78
- package/src/components/PrintCard/PrintCardImage.tsx +0 -81
- package/src/components/PrintCard/__tests__/PrintCard.unit.test.tsx +0 -233
- package/src/components/PrintCard/__tests__/PrintCardContent.test.tsx +0 -284
- package/src/components/PrintCard/__tests__/PrintCardGrid.unit.test.tsx +0 -214
- package/src/components/PrintCard/__tests__/PrintCardImage.unit.test.tsx +0 -264
- package/src/components/PrintCard/examples/PrintCardShowcase.tsx +0 -239
- package/src/components/PrintCard/index.ts +0 -34
- package/src/components/PrintCard/types.ts +0 -171
- package/src/components/PrintDataTable/PrintDataTable.tsx +0 -215
- package/src/components/PrintDataTable/PrintTableGroup.tsx +0 -90
- package/src/components/PrintDataTable/PrintTableRow.tsx +0 -76
- package/src/components/PrintDataTable/__tests__/PrintDataTable.unit.test.tsx +0 -361
- package/src/components/PrintDataTable/__tests__/PrintTableGroup.unit.test.tsx +0 -314
- package/src/components/PrintDataTable/__tests__/PrintTableRow.unit.test.tsx +0 -362
- package/src/components/PrintDataTable/index.ts +0 -25
- package/src/components/PrintDataTable/types.ts +0 -67
- package/src/components/PrintFooter/PrintFooter.tsx +0 -183
- package/src/components/PrintFooter/PrintFooterContent.tsx +0 -71
- package/src/components/PrintFooter/PrintFooterInfo.tsx +0 -86
- package/src/components/PrintFooter/PrintPageNumber.tsx +0 -90
- package/src/components/PrintFooter/__tests__/PrintFooter.unit.test.tsx +0 -500
- package/src/components/PrintFooter/__tests__/PrintFooterContent.unit.test.tsx +0 -321
- package/src/components/PrintFooter/__tests__/PrintFooterInfo.unit.test.tsx +0 -335
- package/src/components/PrintFooter/__tests__/PrintPageNumber.unit.test.tsx +0 -340
- package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +0 -390
- package/src/components/PrintFooter/index.ts +0 -30
- package/src/components/PrintFooter/types.ts +0 -149
- package/src/components/PrintGrid/PrintGrid.tsx +0 -180
- package/src/components/PrintGrid/PrintGridBreakpoint.tsx +0 -109
- package/src/components/PrintGrid/PrintGridContainer.tsx +0 -128
- package/src/components/PrintGrid/PrintGridItem.tsx +0 -220
- package/src/components/PrintGrid/__tests__/PrintGrid.unit.test.tsx +0 -340
- package/src/components/PrintGrid/__tests__/PrintGridBreakpoint.unit.test.tsx +0 -261
- package/src/components/PrintGrid/__tests__/PrintGridContainer.unit.test.tsx +0 -338
- package/src/components/PrintGrid/__tests__/PrintGridItem.unit.test.tsx +0 -338
- package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +0 -359
- package/src/components/PrintGrid/index.ts +0 -31
- package/src/components/PrintGrid/types.ts +0 -159
- package/src/components/PrintHeader/PrintCoverHeader.tsx +0 -230
- package/src/components/PrintHeader/PrintHeader.tsx +0 -150
- package/src/components/PrintHeader/__tests__/PrintCoverHeader.unit.test.tsx +0 -309
- package/src/components/PrintHeader/__tests__/PrintHeader.unit.test.tsx +0 -202
- package/src/components/PrintHeader/index.ts +0 -17
- package/src/components/PrintHeader/types.ts +0 -42
- package/src/components/PrintLayout/PrintLayout.tsx +0 -122
- package/src/components/PrintLayout/PrintLayoutContext.tsx +0 -66
- package/src/components/PrintLayout/PrintPageBreak.tsx +0 -52
- package/src/components/PrintLayout/__tests__/PrintLayout.unit.test.tsx +0 -238
- package/src/components/PrintLayout/examples/PrintShowcase.tsx +0 -230
- package/src/components/PrintLayout/index.ts +0 -19
- package/src/components/PrintLayout/types.ts +0 -37
- package/src/components/PrintPageBreak/PrintPageBreak.tsx +0 -120
- package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +0 -90
- package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +0 -112
- package/src/components/PrintPageBreak/__tests__/PrintPageBreak.unit.test.tsx +0 -263
- package/src/components/PrintPageBreak/__tests__/PrintPageBreakGroup.unit.test.tsx +0 -239
- package/src/components/PrintPageBreak/__tests__/PrintPageBreakIndicator.unit.test.tsx +0 -235
- package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +0 -279
- package/src/components/PrintPageBreak/index.ts +0 -23
- package/src/components/PrintPageBreak/types.ts +0 -94
- package/src/components/PrintSection/PrintColumn.tsx +0 -104
- package/src/components/PrintSection/PrintDivider.tsx +0 -101
- package/src/components/PrintSection/PrintSection.tsx +0 -129
- package/src/components/PrintSection/PrintSectionContent.tsx +0 -75
- package/src/components/PrintSection/PrintSectionHeader.tsx +0 -97
- package/src/components/PrintSection/__tests__/PrintColumn.unit.test.tsx +0 -385
- package/src/components/PrintSection/__tests__/PrintDivider.unit.test.tsx +0 -373
- package/src/components/PrintSection/__tests__/PrintSection.unit.test.tsx +0 -390
- package/src/components/PrintSection/__tests__/PrintSectionContent.unit.test.tsx +0 -321
- package/src/components/PrintSection/__tests__/PrintSectionHeader.unit.test.tsx +0 -334
- package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +0 -258
- package/src/components/PrintSection/index.ts +0 -33
- package/src/components/PrintSection/types.ts +0 -155
- package/src/components/PrintText/PrintText.tsx +0 -116
- package/src/components/PrintText/__tests__/PrintText.unit.test.tsx +0 -351
- package/src/components/PrintText/index.ts +0 -16
- package/src/components/PrintText/types.ts +0 -24
- package/src/components/Progress/Progress.tsx +0 -116
- package/src/components/Progress/__tests__/Progress.accessibility.test.tsx +0 -240
- package/src/components/Progress/__tests__/Progress.unit.test.tsx +0 -242
- package/src/components/Progress/index.ts +0 -3
- package/src/components/PublicLayout/EventLogo.tsx +0 -287
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -279
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -208
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -130
- package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
- package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
- package/src/components/PublicLayout/PublicPageHeader.tsx +0 -178
- package/src/components/PublicLayout/PublicPageLayout.tsx +0 -232
- package/src/components/PublicLayout/PublicPageProvider.tsx +0 -137
- package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +0 -761
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.simplified.test.tsx +0 -228
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -228
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -459
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -362
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -522
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -599
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -513
- package/src/components/PublicLayout/index.ts +0 -51
- package/src/components/RBAC/PagePermissionGuard.tsx +0 -287
- package/src/components/RBAC/RBACGuard.tsx +0 -143
- package/src/components/RBAC/RBACProvider.tsx +0 -186
- package/src/components/RBAC/RoleBasedContent.tsx +0 -129
- package/src/components/RBAC/__tests__/PagePermissionGuard.unit.test.tsx +0 -683
- package/src/components/RBAC/__tests__/RBAC.integration.test.tsx +0 -573
- package/src/components/RBAC/__tests__/RBACGuard.unit.test.tsx +0 -467
- package/src/components/RBAC/__tests__/RBACProvider.accessibility.test.tsx +0 -475
- package/src/components/RBAC/__tests__/RBACProvider.advanced.test.tsx +0 -569
- package/src/components/RBAC/__tests__/RBACProvider.integration.test.tsx +0 -352
- package/src/components/RBAC/__tests__/RBACProvider.unit.test.tsx +0 -128
- package/src/components/RBAC/__tests__/RoleBasedContent.unit.test.tsx +0 -657
- package/src/components/RBAC/index.ts +0 -23
- package/src/components/Select/Select.tsx +0 -660
- package/src/components/Select/__tests__/SearchableSelect.unit.test.tsx +0 -437
- package/src/components/Select/__tests__/Select.accessibility.test.tsx +0 -1202
- package/src/components/Select/__tests__/Select.actual.test.tsx +0 -774
- package/src/components/Select/__tests__/Select.comprehensive.test.tsx +0 -837
- package/src/components/Select/__tests__/Select.enhanced.test.tsx +0 -1101
- package/src/components/Select/__tests__/Select.integration.test.tsx +0 -772
- package/src/components/Select/__tests__/Select.performance.test.tsx +0 -695
- package/src/components/Select/__tests__/Select.real-world.test.tsx +0 -1046
- package/src/components/Select/__tests__/Select.search-algorithms.test.tsx +0 -968
- package/src/components/Select/__tests__/Select.unit.test.tsx +0 -647
- package/src/components/Select/__tests__/Select.utils.test.tsx +0 -890
- package/src/components/Select/index.ts +0 -1
- package/src/components/SuperAdminGuard.tsx +0 -116
- package/src/components/Table/Table.tsx +0 -222
- package/src/components/Table/__tests__/Table.accessibility.test.tsx +0 -233
- package/src/components/Table/__tests__/Table.unit.test.tsx +0 -235
- package/src/components/Table/index.ts +0 -11
- package/src/components/Toast/Toast.tsx +0 -339
- package/src/components/Toast/__tests__/Toast.accessibility.test.tsx +0 -238
- package/src/components/Toast/__tests__/Toast.integration.test.tsx +0 -699
- package/src/components/Toast/__tests__/Toast.unit.test.tsx +0 -750
- package/src/components/Toast/index.ts +0 -14
- package/src/components/Tooltip/Tooltip.tsx +0 -167
- package/src/components/Tooltip/__tests__/Tooltip.accessibility.test.tsx +0 -121
- package/src/components/Tooltip/__tests__/Tooltip.unit.test.tsx +0 -185
- package/src/components/Tooltip/index.ts +0 -7
- package/src/components/UserMenu/UserMenu.tsx +0 -243
- package/src/components/UserMenu/__tests__/UserMenu.accessibility.test.tsx +0 -139
- package/src/components/UserMenu/__tests__/UserMenu.integration.test.tsx +0 -188
- package/src/components/UserMenu/__tests__/UserMenu.unit.test.tsx +0 -458
- package/src/components/UserMenu/index.ts +0 -3
- package/src/components/__tests__/EdgeCaseTesting.enhanced.test.tsx +0 -524
- package/src/components/__tests__/ErrorTesting.enhanced.test.tsx +0 -455
- package/src/components/__tests__/SuperAdminGuard.test.tsx +0 -456
- package/src/components/__tests__/SuperAdminGuard.unit.test.tsx +0 -456
- package/src/components/examples/PermissionExample.tsx +0 -150
- package/src/components/examples/__tests__/PermissionExample.unit.test.tsx +0 -360
- package/src/components/index.ts +0 -434
- package/src/components.ts +0 -19
- package/src/constants/performance.ts +0 -14
- package/src/examples/CorrectPublicPageImplementation.tsx +0 -301
- package/src/examples/PublicEventPage.tsx +0 -274
- package/src/examples/PublicPageApp.tsx +0 -308
- package/src/examples/PublicPageUsageExample.tsx +0 -216
- package/src/hooks/__tests__/hooks.integration.test.tsx +0 -575
- package/src/hooks/__tests__/useApiFetch.unit.test.ts +0 -115
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +0 -133
- package/src/hooks/__tests__/useDebounce.unit.test.ts +0 -82
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +0 -293
- package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +0 -385
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +0 -286
- package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +0 -838
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +0 -627
- package/src/hooks/__tests__/useRBAC.unit.test.ts +0 -911
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -537
- package/src/hooks/__tests__/useToast.unit.test.tsx +0 -62
- package/src/hooks/__tests__/useZodForm.unit.test.tsx +0 -37
- package/src/hooks/index.ts +0 -56
- package/src/hooks/public/__tests__/usePublicEvent.test.tsx +0 -397
- package/src/hooks/public/__tests__/usePublicEventLogo.test.tsx +0 -690
- package/src/hooks/public/__tests__/usePublicRouteParams.test.tsx +0 -449
- package/src/hooks/public/index.ts +0 -34
- package/src/hooks/public/usePublicEvent.ts +0 -261
- package/src/hooks/public/usePublicEventLogo.ts +0 -285
- package/src/hooks/public/usePublicRouteParams.ts +0 -259
- package/src/hooks/useAppConfig.ts +0 -94
- package/src/hooks/useComponentPerformance.ts +0 -39
- package/src/hooks/useDataTablePerformance.ts +0 -387
- package/src/hooks/useDataTableState.ts +0 -110
- package/src/hooks/useDebounce.ts +0 -18
- package/src/hooks/useFocusManagement.ts +0 -161
- package/src/hooks/useFocusTrap.ts +0 -155
- package/src/hooks/useInactivityTracker.ts +0 -372
- package/src/hooks/useIsMobile.ts +0 -42
- package/src/hooks/useKeyboardShortcuts.ts +0 -237
- package/src/hooks/useOrganisationPermissions.ts +0 -208
- package/src/hooks/useOrganisationSecurity.ts +0 -262
- package/src/hooks/usePerformanceMonitor.ts +0 -128
- package/src/hooks/usePermissionCache.ts +0 -455
- package/src/hooks/useRBAC.ts +0 -262
- package/src/hooks/useSecureDataAccess.ts +0 -586
- package/src/hooks/useStorage.ts +0 -274
- package/src/hooks/useToast.ts +0 -242
- package/src/hooks/useZodForm.ts +0 -28
- package/src/index.ts +0 -200
- package/src/providers/AuthProvider.tsx +0 -369
- package/src/providers/EventProvider.tsx +0 -324
- package/src/providers/InactivityProvider.tsx +0 -238
- package/src/providers/OrganisationProvider.tsx +0 -588
- package/src/providers/RBACProvider.tsx +0 -634
- package/src/providers/UnifiedAuthProvider.tsx +0 -327
- package/src/providers/__tests__/EventProvider.unit.test.tsx +0 -768
- package/src/providers/__tests__/OrganisationProvider.basic.test.tsx +0 -116
- package/src/providers/__tests__/OrganisationProvider.unit.test.tsx +0 -1312
- package/src/providers/__tests__/UnifiedAuthProvider.inactivity.test.tsx +0 -601
- package/src/providers/__tests__/UnifiedAuthProvider.unit.test.tsx +0 -683
- package/src/providers/__tests__/index.unit.test.ts +0 -78
- package/src/providers/index.ts +0 -15
- package/src/rbac/README.md +0 -885
- package/src/rbac/__tests__/PagePermissionGuard.test.tsx +0 -673
- package/src/rbac/__tests__/README.md +0 -170
- package/src/rbac/__tests__/RoleBasedRouter.test.tsx +0 -709
- package/src/rbac/__tests__/TestContext.tsx +0 -72
- package/src/rbac/__tests__/__mocks__/cache.ts +0 -144
- package/src/rbac/__tests__/__mocks__/supabase.ts +0 -152
- package/src/rbac/__tests__/adapters-hooks-comprehensive.test.tsx +0 -782
- package/src/rbac/__tests__/adapters-hooks.test.tsx +0 -561
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +0 -963
- package/src/rbac/__tests__/adapters.test.tsx +0 -444
- package/src/rbac/__tests__/api.test.ts +0 -620
- package/src/rbac/__tests__/audit-observability-comprehensive.test.ts +0 -792
- package/src/rbac/__tests__/audit-observability.test.ts +0 -549
- package/src/rbac/__tests__/audit.test.ts +0 -616
- package/src/rbac/__tests__/build-contract-compliance-simple.test.ts +0 -230
- package/src/rbac/__tests__/cache-invalidation-comprehensive.test.ts +0 -889
- package/src/rbac/__tests__/cache-invalidation.test.ts +0 -457
- package/src/rbac/__tests__/cache.test.ts +0 -458
- package/src/rbac/__tests__/components-navigation-guard.enhanced.test.tsx +0 -859
- package/src/rbac/__tests__/components-navigation-guard.test.tsx +0 -895
- package/src/rbac/__tests__/components-navigation-provider.test.tsx +0 -692
- package/src/rbac/__tests__/components-page-permission-guard.test.tsx +0 -673
- package/src/rbac/__tests__/components-page-permission-provider.test.tsx +0 -614
- package/src/rbac/__tests__/components-permission-enforcer.enhanced.fixed.test.tsx +0 -836
- package/src/rbac/__tests__/components-permission-enforcer.enhanced.test.tsx +0 -837
- package/src/rbac/__tests__/components-permission-enforcer.test.tsx +0 -825
- package/src/rbac/__tests__/components-role-based-router.test.tsx +0 -709
- package/src/rbac/__tests__/components-secure-data-provider.test.tsx +0 -607
- package/src/rbac/__tests__/config.test.ts +0 -583
- package/src/rbac/__tests__/core-logic-unit.test.ts +0 -190
- package/src/rbac/__tests__/core-permission-logic-comprehensive.test.ts +0 -1467
- package/src/rbac/__tests__/core-permission-logic-fixed.test.ts +0 -151
- package/src/rbac/__tests__/core-permission-logic-simple.test.ts +0 -968
- package/src/rbac/__tests__/core-permission-logic.test.ts +0 -966
- package/src/rbac/__tests__/edge-cases-comprehensive.test.ts +0 -988
- package/src/rbac/__tests__/edge-cases.test.ts +0 -654
- package/src/rbac/__tests__/engine.test.ts +0 -361
- package/src/rbac/__tests__/engine.unit.test.ts +0 -361
- package/src/rbac/__tests__/hooks.enhanced.test.tsx +0 -979
- package/src/rbac/__tests__/hooks.fixed.test.tsx +0 -475
- package/src/rbac/__tests__/hooks.test.tsx +0 -385
- package/src/rbac/__tests__/index.test.ts +0 -269
- package/src/rbac/__tests__/integration.enhanced.test.tsx +0 -824
- package/src/rbac/__tests__/page-permission-guard-super-admin.test.tsx +0 -261
- package/src/rbac/__tests__/performance.enhanced.test.tsx +0 -724
- package/src/rbac/__tests__/permissions.test.ts +0 -383
- package/src/rbac/__tests__/requires-event.test.ts +0 -330
- package/src/rbac/__tests__/scope-isolation-comprehensive.test.ts +0 -1349
- package/src/rbac/__tests__/scope-isolation.test.ts +0 -755
- package/src/rbac/__tests__/secure-client-rls-comprehensive.test.ts +0 -592
- package/src/rbac/__tests__/secure-client-rls.test.ts +0 -377
- package/src/rbac/__tests__/security.test.ts +0 -296
- package/src/rbac/__tests__/setup.ts +0 -228
- package/src/rbac/__tests__/test-utils-enhanced.tsx +0 -400
- package/src/rbac/__tests__/types.test.ts +0 -685
- package/src/rbac/adapters.tsx +0 -726
- package/src/rbac/api.ts +0 -339
- package/src/rbac/audit-enhanced.ts +0 -339
- package/src/rbac/audit.ts +0 -338
- package/src/rbac/cache.ts +0 -215
- package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -294
- package/src/rbac/components/NavigationGuard.tsx +0 -294
- package/src/rbac/components/NavigationProvider.tsx +0 -314
- package/src/rbac/components/PagePermissionGuard.tsx +0 -430
- package/src/rbac/components/PagePermissionProvider.tsx +0 -274
- package/src/rbac/components/PermissionEnforcer.tsx +0 -307
- package/src/rbac/components/RoleBasedRouter.tsx +0 -425
- package/src/rbac/components/SecureDataProvider.tsx +0 -319
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -631
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -667
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -647
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -496
- package/src/rbac/components/index.ts +0 -64
- package/src/rbac/config.ts +0 -133
- package/src/rbac/docs/event-based-apps.md +0 -285
- package/src/rbac/engine.ts +0 -1026
- package/src/rbac/eslint-rules.js +0 -285
- package/src/rbac/examples/CompleteRBACExample.tsx +0 -323
- package/src/rbac/examples/EventBasedApp.tsx +0 -238
- package/src/rbac/hooks.ts +0 -570
- package/src/rbac/index.ts +0 -114
- package/src/rbac/permissions.ts +0 -293
- package/src/rbac/secureClient.ts +0 -244
- package/src/rbac/security.ts +0 -346
- package/src/rbac/testing/__tests__/index.test.tsx +0 -342
- package/src/rbac/testing/index.tsx +0 -340
- package/src/rbac/types.ts +0 -343
- package/src/rbac/utils/__tests__/eventContext.test.ts +0 -428
- package/src/rbac/utils/__tests__/eventContext.unit.test.ts +0 -428
- package/src/rbac/utils/eventContext.ts +0 -83
- package/src/styles/__tests__/styles.unit.test.ts +0 -164
- package/src/styles/core.css +0 -401
- package/src/styles/index.ts +0 -51
- package/src/test-dom-cleanup.test.tsx +0 -38
- package/src/theming/__tests__/README.md +0 -335
- package/src/theming/__tests__/runtime.accessibility.test.ts +0 -474
- package/src/theming/__tests__/runtime.error.test.ts +0 -616
- package/src/theming/__tests__/runtime.integration.test.ts +0 -376
- package/src/theming/__tests__/runtime.performance.test.ts +0 -411
- package/src/theming/__tests__/runtime.unit.test.ts +0 -470
- package/src/theming/runtime.ts +0 -187
- package/src/types/__tests__/database.unit.test.ts +0 -489
- package/src/types/__tests__/guards.unit.test.ts +0 -146
- package/src/types/__tests__/index.unit.test.ts +0 -77
- package/src/types/__tests__/organisation.unit.test.ts +0 -713
- package/src/types/__tests__/rbac.unit.test.ts +0 -621
- package/src/types/__tests__/security.unit.test.ts +0 -347
- package/src/types/__tests__/supabase.unit.test.ts +0 -658
- package/src/types/__tests__/theme.unit.test.ts +0 -218
- package/src/types/__tests__/unified.unit.test.ts +0 -537
- package/src/types/__tests__/validation.unit.test.ts +0 -616
- package/src/types/database.ts +0 -472
- package/src/types/guards.ts +0 -30
- package/src/types/index.ts +0 -25
- package/src/types/organisation.ts +0 -184
- package/src/types/security.ts +0 -70
- package/src/types/supabase.ts +0 -166
- package/src/types/theme.ts +0 -6
- package/src/types/unified.ts +0 -262
- package/src/types/validation.ts +0 -164
- package/src/types/vitest-globals.d.ts +0 -43
- package/src/utils/__mocks__/supabaseMock.ts +0 -75
- package/src/utils/__mocks__/supabaseMock.tsx +0 -198
- package/src/utils/__tests__/appConfig.unit.test.ts +0 -55
- package/src/utils/__tests__/appNameResolver.unit.test.ts +0 -137
- package/src/utils/__tests__/audit.unit.test.ts +0 -69
- package/src/utils/__tests__/auth-utils.unit.test.ts +0 -70
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +0 -317
- package/src/utils/__tests__/cn.unit.test.ts +0 -34
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +0 -480
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +0 -322
- package/src/utils/__tests__/formatDate.unit.test.ts +0 -109
- package/src/utils/__tests__/formatting.unit.test.ts +0 -66
- package/src/utils/__tests__/index.unit.test.ts +0 -251
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +0 -304
- package/src/utils/__tests__/organisationContext.unit.test.ts +0 -192
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +0 -259
- package/src/utils/__tests__/permissionTypes.unit.test.ts +0 -250
- package/src/utils/__tests__/permissionUtils.unit.test.ts +0 -362
- package/src/utils/__tests__/sanitization.unit.test.ts +0 -346
- package/src/utils/__tests__/schemaUtils.unit.test.ts +0 -441
- package/src/utils/__tests__/secureDataAccess.unit.test.ts +0 -334
- package/src/utils/__tests__/secureErrors.unit.test.ts +0 -377
- package/src/utils/__tests__/secureStorage.unit.test.ts +0 -293
- package/src/utils/__tests__/security.unit.test.ts +0 -127
- package/src/utils/__tests__/securityMonitor.unit.test.ts +0 -280
- package/src/utils/__tests__/sessionTracking.unit.test.ts +0 -370
- package/src/utils/__tests__/validation.unit.test.ts +0 -84
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -571
- package/src/utils/appConfig.ts +0 -47
- package/src/utils/appIdResolver.ts +0 -130
- package/src/utils/appNameResolver.ts +0 -190
- package/src/utils/audit.ts +0 -127
- package/src/utils/auth-utils.ts +0 -96
- package/src/utils/bundleAnalysis.ts +0 -129
- package/src/utils/cn.ts +0 -7
- package/src/utils/debugLogger.ts +0 -46
- package/src/utils/deviceFingerprint.ts +0 -215
- package/src/utils/dynamicUtils.ts +0 -105
- package/src/utils/formatting.ts +0 -77
- package/src/utils/index.ts +0 -145
- package/src/utils/lazyLoad.tsx +0 -44
- package/src/utils/organisationContext.ts +0 -135
- package/src/utils/performanceBenchmark.ts +0 -64
- package/src/utils/performanceBudgets.ts +0 -111
- package/src/utils/permissionTypes.ts +0 -37
- package/src/utils/permissionUtils.ts +0 -31
- package/src/utils/print/PrintDataProcessor.ts +0 -390
- package/src/utils/print/__tests__/PrintDataProcessor.unit.test.ts +0 -219
- package/src/utils/print/__tests__/usePrintOptimization.unit.test.tsx +0 -353
- package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +0 -397
- package/src/utils/print/index.ts +0 -29
- package/src/utils/print/types.ts +0 -196
- package/src/utils/print/usePrintOptimization.ts +0 -272
- package/src/utils/sanitization.ts +0 -264
- package/src/utils/schemaUtils.ts +0 -37
- package/src/utils/secureDataAccess.ts +0 -361
- package/src/utils/secureErrors.ts +0 -79
- package/src/utils/secureStorage.ts +0 -244
- package/src/utils/security.ts +0 -156
- package/src/utils/securityMonitor.ts +0 -45
- package/src/utils/sessionTracking.ts +0 -170
- package/src/utils/storage/README.md +0 -348
- package/src/utils/storage/__tests__/config.unit.test.ts +0 -206
- package/src/utils/storage/__tests__/helpers.unit.test.ts +0 -648
- package/src/utils/storage/__tests__/index.unit.test.ts +0 -167
- package/src/utils/storage/__tests__/types.unit.test.ts +0 -441
- package/src/utils/storage/config.ts +0 -100
- package/src/utils/storage/helpers.ts +0 -359
- package/src/utils/storage/index.ts +0 -36
- package/src/utils/storage/types.ts +0 -90
- package/src/utils/validation.ts +0 -111
- package/src/utils/validationUtils.ts +0 -120
- package/src/validation/__tests__/common.unit.test.ts +0 -101
- package/src/validation/__tests__/csrf.unit.test.ts +0 -302
- package/src/validation/__tests__/passwordSchema.unit.test.ts +0 -98
- package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +0 -466
- package/src/validation/common.ts +0 -53
- package/src/validation/csrf.ts +0 -214
- package/src/validation/index.ts +0 -43
- package/src/validation/passwordSchema.ts +0 -125
- package/src/validation/sanitization.ts +0 -96
- package/src/validation/schemaUtils.ts +0 -42
- package/src/validation/sqlInjectionProtection.ts +0 -242
- package/src/validation/user.ts +0 -34
- package/dist/{DataTable-EEUDXPE5.js.map → DataTable-2LB6HI6V.js.map} +0 -0
- package/dist/{api-ETQ6YJ3C.js.map → api-AIJ3IJX3.js.map} +0 -0
- package/dist/{appNameResolver-7GHF5ED2.js.map → audit-PD5L5ZSC.js.map} +0 -0
- package/dist/{audit-BUW3LMJB.js.map → chunk-DC5AMYBS.js.map} +0 -0
- package/dist/{validation-PM_iOaTI.d.ts → validation-D2-NNCCE.d.ts} +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/UnifiedAuthProvider.tsx","../src/providers/OrganisationProvider.tsx"],"sourcesContent":["/**\n * @file Unified Authentication Provider\n * @package @jmruthers/pace-core\n * @module Providers/UnifiedAuth\n * @since 0.1.0\n *\n * A comprehensive authentication and RBAC provider that combines user authentication,\n * role-based access control, and permission management in a single unified context.\n *\n * Features:\n * - Supabase authentication integration\n * - Role-based access control (RBAC)\n * - Permission management with database integration\n * - Access level hierarchy (VIEWER, PARTICIPANT, EDITOR, PLANNER, ADMIN, SUPER)\n * - Event-specific permissions\n * - Cross-device state persistence\n * - Loading state management\n * - Error handling and recovery\n * - Session management\n * - Admin role detection via user metadata\n * - Permission validation and caching\n * - Event selection and context switching\n *\n * @example\n * ```tsx\n * // Basic setup with Supabase\n * import { createClient } from '@supabase/supabase-js';\n * import { UnifiedAuthProvider } from '@jmruthers/pace-core';\n * \n * const supabase = createClient(url, key);\n * \n * function App() {\n * return (\n * <UnifiedAuthProvider supabaseClient={supabase} appName=\"My App\">\n * <Router>\n * <Routes>\n * <Route path=\"/login\" element={<LoginPage />} />\n * <Route path=\"/\" element={<Dashboard />} />\n * </Routes>\n * </Router>\n * </UnifiedAuthProvider>\n * );\n * }\n * \n * // Using authentication in components\n * function Dashboard() {\n * const { user, isAuthenticated, signOut } = useUnifiedAuth();\n * \n * if (!isAuthenticated) {\n * return <Navigate to=\"/login\" />;\n * }\n * \n * return (\n * <div>\n * <h1>Welcome, {user?.email}</h1>\n * <button onClick={signOut}>Sign Out</button>\n * </div>\n * );\n * }\n * \n * // Using RBAC permissions\n * function EventManager() {\n * const { \n * hasPermission, \n * hasRole, \n * hasAccessLevel, \n * setSelectedEventId \n * } = useUnifiedAuth();\n * \n * // Set event context for permissions\n * useEffect(() => {\n * setSelectedEventId('event-123');\n * }, []);\n * \n * return (\n * <div>\n * {hasPermission('events:read') && (\n * <EventList />\n * )}\n * {hasPermission('events:write') && (\n * <CreateEventButton />\n * )}\n * {hasRole('admin') && (\n * <AdminPanel />\n * )}\n * {hasAccessLevel(AccessLevel.PLANNER) && (\n * <EventPlanningTools />\n * )}\n * </div>\n * );\n * }\n * \n * // Advanced permission validation\n * function SecureComponent() {\n * const { validatePermission, canAccess } = useUnifiedAuth();\n * \n * const handleSensitiveAction = async () => {\n * const canPerform = await validatePermission('admin:system');\n * if (canPerform) {\n * // Perform action\n * }\n * };\n * \n * const canEditUsers = canAccess('users', 'write');\n * \n * return (\n * <div>\n * {canEditUsers && <UserEditor />}\n * <button onClick={handleSensitiveAction}>\n * Sensitive Action\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * @accessibility\n * - No direct accessibility concerns (context provider)\n * - Enables accessible permission-based UI rendering\n * - Supports screen reader friendly conditional content\n * - Maintains focus management during auth state changes\n *\n * @security\n * - Secure authentication via Supabase\n * - Permission-based access control\n * - Event-specific permission isolation\n * - Admin role validation via user metadata\n * - Session management and validation\n * - Error handling without exposure of sensitive data\n * - Database-backed permission validation\n *\n * @performance\n * - Optimized with useMemo and useCallback\n * - Permission caching and batching\n * - Minimal re-renders with stable references\n * - Lazy loading of permissions\n * - Event-based permission updates\n *\n * @dependencies\n * - React 18+ - Context, hooks, and effects\n * - @supabase/supabase-js - Authentication backend\n * - AccessLevel enum - Permission levels\n * - Event types - Event context\n * - Local storage - State persistence\n */\n\nimport React, { createContext, useContext, useState, useEffect, useMemo, useCallback } from 'react';\nimport { type SupabaseClient, type User, type Session, AuthError } from '@supabase/supabase-js';\nimport { AccessLevel } from '../types/unified';\n\n\n// App configuration type\ninterface AppConfig {\n supports_direct_access: boolean;\n requires_event: boolean;\n}\n\n// User event access type - now includes organisation context for security\nexport interface UserEventAccess {\n event_id: string;\n event_name: string;\n event_description?: string | null;\n start_date: string;\n end_date: string;\n event_status: string;\n app_name: string;\n access_level: string;\n granted_at: string;\n organisation_id: string; // MANDATORY for security\n}\n\n// Combined context type - now organisation-aware and secure\nexport interface UnifiedAuthContextType {\n // Auth state\n user: User | null;\n session: Session | null;\n isAuthenticated: boolean;\n authLoading: boolean;\n authError: AuthError | null;\n supabase: SupabaseClient | null;\n appName: string;\n \n // Auth methods\n signIn: (email: string, password?: string) => Promise<{ error: AuthError | null }>;\n signUp: (email: string, password: string) => Promise<{ error: AuthError | null }>;\n signOut: () => Promise<{ error: AuthError | null }>;\n resetPassword: (email: string) => Promise<{ error: AuthError | null }>;\n updatePassword: (password: string) => Promise<{ error: AuthError | null }>;\n refreshSession: () => Promise<{ error: AuthError | null }>;\n \n // RBAC state - now organisation-scoped\n permissions: Record<string, boolean>;\n roles: string[];\n accessLevel: AccessLevel;\n rbacLoading: boolean;\n rbacError: Error | null;\n selectedEventId: string | null;\n appConfig: AppConfig | null;\n userEventAccess: UserEventAccess[];\n eventAccessLoading: boolean;\n \n // Organisation context integration\n selectedOrganisationId: string | null;\n requireOrganisationContext: () => string; // Throws if no organisation context\n \n // RBAC methods - now organisation-aware\n hasPermission: (permission: string, orgId?: string) => boolean;\n hasAnyPermission: (permissions: string[], orgId?: string) => boolean;\n hasAllPermissions: (permissions: string[], orgId?: string) => boolean;\n hasRole: (role: string) => boolean;\n hasAccessLevel: (level: AccessLevel) => boolean;\n canAccess: (resource: string, action: string, orgId?: string) => boolean;\n validatePermission: (permission: string, orgId?: string) => Promise<boolean>;\n validateAccess: (resource: string, action: string, orgId?: string) => Promise<boolean>;\n refreshPermissions: (eventId?: string, orgId?: string) => Promise<void>;\n setSelectedEventId: (eventId: string | null) => void;\n loadUserEventAccess: (orgId?: string) => Promise<void>;\n getUserEventAccess: (eventId: string) => UserEventAccess | undefined;\n \n // New RBAC system support\n rbacEnabled: boolean;\n rbacContext?: any; // Will be populated by useRBAC hook when enabled\n \n // Combined states\n isLoading: boolean;\n hasErrors: boolean;\n}\n\nconst UnifiedAuthContext = createContext<UnifiedAuthContextType | undefined>(undefined);\n\nexport const useUnifiedAuth = () => {\n const context = useContext(UnifiedAuthContext);\n if (!context) {\n throw new Error('useUnifiedAuth must be used within a UnifiedAuthProvider');\n }\n return context;\n};\n\nexport interface UnifiedAuthProviderProps {\n children: React.ReactNode;\n supabaseClient?: SupabaseClient;\n appName: string;\n persistState?: boolean;\n enablePersistence?: boolean;\n requireOrganisationContext?: boolean; // Default: true for security\n enableRBAC?: boolean; // New prop for RBAC support\n}\n\n// Storage keys for persistence\nconst STORAGE_KEYS = {\n SELECTED_EVENT: 'pace-core-selected-event',\n} as const;\n\n// Helper function to transform RBAC permissions to the format expected by UnifiedAuthProvider\nconst transformRBACPermissions = (rbacData: any[], _appName: string) => {\n const permissions: Record<string, boolean> = {};\n let roles: string[] = [];\n let access_level: AccessLevel = AccessLevel.VIEWER;\n\n if (!rbacData || !Array.isArray(rbacData)) {\n return { permissions: {}, roles: ['viewer'], access_level: AccessLevel.VIEWER };\n }\n\n // Check for super admin first\n const superAdminPerm = rbacData.find((p: any) => p.permission_type === 'all_permissions');\n if (superAdminPerm) {\n return { \n permissions: { 'all:all': true } as Record<string, boolean>, \n roles: ['super'], \n access_level: AccessLevel.SUPER \n };\n }\n\n // Process event-app permissions\n const eventAppPerms = rbacData.filter((p: any) => p.permission_type === 'event_app_access');\n if (eventAppPerms.length > 0) {\n const role = eventAppPerms[0].role_name;\n \n // Map RBAC roles to AccessLevel\n switch (role) {\n case 'event_admin':\n access_level = AccessLevel.ADMIN;\n roles = ['admin'];\n break;\n case 'planner':\n access_level = AccessLevel.PLANNER;\n roles = ['planner'];\n break;\n case 'participant':\n access_level = AccessLevel.PARTICIPANT;\n roles = ['participant'];\n break;\n case 'editor':\n access_level = AccessLevel.EDITOR;\n roles = ['editor'];\n break;\n case 'viewer':\n default:\n access_level = AccessLevel.VIEWER;\n roles = ['viewer'];\n break;\n }\n\n // For now, we'll set basic permissions based on role\n // In a full implementation, you'd want to fetch page-specific permissions\n const basePermissions = ['read'];\n if (['event_admin', 'planner'].includes(role)) {\n basePermissions.push('create', 'update');\n }\n if (role === 'event_admin') {\n basePermissions.push('delete');\n }\n\n // Set permissions for all pages (simplified approach)\n // In a real implementation, you'd want to get actual page permissions\n basePermissions.forEach(operation => {\n permissions[`default:${operation}`] = true;\n });\n }\n\n // Process organisation permissions\n const orgPerms = rbacData.filter((p: any) => p.permission_type === 'organisation_access');\n if (orgPerms.length > 0) {\n const role = orgPerms[0].role_name;\n if (role === 'org_admin') {\n access_level = AccessLevel.ADMIN;\n roles = ['admin'];\n // Org admins get all permissions\n ['create', 'read', 'update', 'delete'].forEach(operation => {\n permissions[`default:${operation}`] = true;\n });\n }\n }\n\n return { permissions, roles, access_level };\n};\n\nexport function UnifiedAuthProvider({\n children,\n supabaseClient,\n appName,\n persistState = true,\n enablePersistence,\n requireOrganisationContext: _requireOrganisationContext = true,\n enableRBAC = false // New prop for RBAC support\n}: UnifiedAuthProviderProps) {\n // Use enablePersistence if provided, otherwise use persistState\n const shouldPersist = enablePersistence !== undefined ? enablePersistence : persistState;\n\n // Auth state\n const [user, setUser] = useState<User | null>(null);\n const [session, setSession] = useState<Session | null>(null);\n const [authLoading, setAuthLoading] = useState(true);\n const [authError, setAuthError] = useState<AuthError | null>(null);\n\n // RBAC state\n const [permissions, setPermissions] = useState<Record<string, boolean>>({});\n const [roles, setRoles] = useState<string[]>([]);\n const [accessLevel, setAccessLevel] = useState<AccessLevel>(AccessLevel.VIEWER);\n const [rbacLoading, setRbacLoading] = useState(false);\n const [rbacError, setRbacError] = useState<Error | null>(null);\n const [selectedEventId, setSelectedEventId] = useState<string | null>(null);\n const [appConfig, setAppConfig] = useState<AppConfig | null>(null);\n const [userEventAccess, setUserEventAccess] = useState<UserEventAccess[]>([]);\n const [eventAccessLoading, setEventAccessLoading] = useState(false);\n \n // Organisation context state\n const [selectedOrganisationId, _setSelectedOrganisationId] = useState<string | null>(null);\n\n // Load app configuration on mount and when appName changes\n useEffect(() => {\n if (!supabaseClient) return;\n\n const loadAppConfig = async () => {\n try {\n const { data } = await supabaseClient.rpc('get_app_config', {\n p_app_name: appName\n });\n\n if (data && data.length > 0) {\n setAppConfig({\n supports_direct_access: data[0].supports_direct_access,\n requires_event: data[0].requires_event\n });\n } else {\n // Default configuration if app not found\n setAppConfig({\n supports_direct_access: false,\n requires_event: true\n });\n }\n } catch (error) {\n console.warn(\"Clearing corrupted localStorage data\");\n localStorage.removeItem(STORAGE_KEYS.SELECTED_EVENT);\n console.warn('Failed to load app configuration:', error);\n // Default configuration on error\n setAppConfig({\n supports_direct_access: false,\n requires_event: true\n });\n }\n };\n\n loadAppConfig();\n }, [supabaseClient, appName]);\n\n // Set super admin roles based on user metadata\n useEffect(() => {\n // Check if user has super admin role in metadata\n const isSuperAdmin = user?.user_metadata?.globalRole === 'super_admin';\n if (isSuperAdmin) {\n setRoles(['super_admin']);\n } else {\n setRoles([]);\n }\n }, [user]);\n\n // Load persisted auth state on mount\n useEffect(() => {\n if (!shouldPersist) return;\n\n try {\n const persistedEvent = localStorage.getItem(STORAGE_KEYS.SELECTED_EVENT);\n if (persistedEvent) {\n setSelectedEventId(JSON.parse(persistedEvent));\n }\n } catch (error) {\n console.warn(\"Clearing corrupted localStorage data\");\n localStorage.removeItem(STORAGE_KEYS.SELECTED_EVENT);\n }\n }, [shouldPersist]);\n\n // Load initial user if no session but supabase client exists\n useEffect(() => {\n if (!supabaseClient) return;\n\n const loadInitialUser = async () => {\n try {\n const { data: { user: initialUser }, error } = await supabaseClient.auth.getUser();\n if (error) {\n console.warn('Failed to get initial user:', error);\n setAuthLoading(false);\n return;\n }\n \n if (initialUser) {\n setUser(initialUser);\n }\n setAuthLoading(false);\n } catch (error) {\n console.warn(\"Clearing corrupted localStorage data\");\n localStorage.removeItem(STORAGE_KEYS.SELECTED_EVENT);\n console.error('Error loading initial user:', error);\n setAuthLoading(false);\n }\n };\n\n // Only load initial user if we haven't set up the auth state change listener yet\n // This prevents race conditions between loadInitialUser and auth state change\n const timeoutId = setTimeout(() => {\n if (authLoading && !user && !session) {\n loadInitialUser();\n }\n }, 100);\n\n return () => clearTimeout(timeoutId);\n }, [supabaseClient, authLoading, user, session]);\n\n // Auth state change listener\n useEffect(() => {\n if (!supabaseClient) {\n setAuthLoading(false);\n return;\n }\n\n const timeoutId = setTimeout(() => {\n if (authLoading) {\n console.warn('UnifiedAuthProvider: Auth loading timeout reached');\n setAuthLoading(false);\n }\n }, 5000);\n\n try {\n console.log('[UnifiedAuthProvider] Setting up auth state change listener...');\n const authStateChange = supabaseClient.auth.onAuthStateChange(\n (event, session) => {\n console.log('[UnifiedAuthProvider] Auth state changed:', event, session?.user?.email);\n setSession(session);\n setUser(session?.user ?? null);\n setAuthLoading(false);\n setAuthError(null);\n }\n );\n\n const subscription = authStateChange?.data?.subscription || authStateChange;\n \n return () => {\n clearTimeout(timeoutId);\n if (subscription && typeof subscription.unsubscribe === 'function') {\n console.log('[UnifiedAuthProvider] Cleaning up auth state listener');\n subscription.unsubscribe();\n }\n };\n } catch (error) {\n console.warn(\"Clearing corrupted localStorage data\");\n localStorage.removeItem(STORAGE_KEYS.SELECTED_EVENT);\n console.error('UnifiedAuthProvider: Error setting up auth state change listener:', error);\n // Don't set authError for connection issues - this is expected when credentials are missing\n if (error instanceof Error && !error.message.includes('No API key found')) {\n setAuthError(error as AuthError);\n }\n setAuthLoading(false);\n clearTimeout(timeoutId);\n return () => {};\n }\n }, [supabaseClient]);\n\n // Persist auth state changes\n useEffect(() => {\n if (!shouldPersist) return;\n\n try {\n if (selectedEventId) {\n localStorage.setItem(\n STORAGE_KEYS.SELECTED_EVENT,\n JSON.stringify(selectedEventId),\n );\n } else {\n localStorage.removeItem(STORAGE_KEYS.SELECTED_EVENT);\n }\n } catch (error) {\n console.warn(\"Clearing corrupted localStorage data\");\n localStorage.removeItem(STORAGE_KEYS.SELECTED_EVENT);\n console.warn('Failed to persist auth state:', error);\n }\n }, [selectedEventId, shouldPersist]);\n\n // Load RBAC data when user is authenticated\n const refreshPermissions = useCallback(async (eventId?: string) => {\n if (!supabaseClient || !user || !appConfig) {\n setPermissions({});\n setRoles([]);\n setAccessLevel(AccessLevel.VIEWER);\n return;\n }\n\n // Check for super admin first - admin override should happen regardless of app configuration\n const isSuperAdmin = user?.user_metadata?.globalRole === 'super_admin';\n if (isSuperAdmin) {\n setPermissions({\n 'admin:create': true,\n 'admin:read': true,\n 'admin:update': true,\n 'admin:delete': true,\n 'users:create': true,\n 'users:read': true,\n 'users:update': true,\n 'users:delete': true,\n 'events:create': true,\n 'events:read': true,\n 'events:update': true,\n 'events:delete': true\n });\n setRoles(['super_admin']);\n setAccessLevel(AccessLevel.ADMIN);\n return;\n }\n\n // Determine if we should load permissions without an event\n const shouldLoadDirectPermissions = !eventId && !appConfig.requires_event;\n const shouldLoadEventPermissions = eventId;\n const shouldClearPermissions = !eventId && appConfig.requires_event;\n\n // If no eventId and app requires events, clear permissions\n if (shouldClearPermissions) {\n setPermissions({});\n setRoles([]);\n setAccessLevel(AccessLevel.VIEWER);\n return;\n }\n\n // Only proceed if we should load permissions\n if (!shouldLoadDirectPermissions && !shouldLoadEventPermissions) {\n return;\n }\n\n setRbacLoading(true);\n setRbacError(null);\n\n try {\n const { data, error } = await supabaseClient.rpc('get_rbac_permissions', {\n p_user_id: user.id,\n p_app_name: appName,\n p_event_id: eventId || null,\n p_organisation_id: selectedOrganisationId || null\n });\n\n if (error) {\n throw error;\n }\n\n const { permissions, roles, access_level } = transformRBACPermissions(data, appName);\n\n setPermissions(permissions);\n setRoles(roles);\n setAccessLevel(access_level);\n } catch (err: any) {\n setRbacError(err);\n } finally {\n setRbacLoading(false);\n }\n }, [supabaseClient, user, appName, appConfig, selectedOrganisationId]);\n\n // Load user event access data\n const loadUserEventAccess = useCallback(async () => {\n if (!supabaseClient || !user) {\n setUserEventAccess([]);\n return;\n }\n\n setEventAccessLoading(true);\n try {\n const { data, error } = await supabaseClient\n .from('rbac_event_app_roles')\n .select(`\n event_id,\n role,\n granted_at\n `)\n .eq('user_id', user.id)\n .eq('app_name', appName);\n\n if (error) {\n console.error('Failed to load user event access:', error);\n setUserEventAccess([]);\n return;\n }\n\n const eventAccess = data?.map(item => ({\n event_id: item.event_id,\n event_name: 'Unknown Event', // Event details not available in this query\n event_description: null, // Not available in this schema\n start_date: '', // Event date not available in this query\n end_date: '', // Event date not available in this query\n event_status: 'unknown', // Not available in this schema\n app_name: appName,\n access_level: item.role, // Map role to access_level\n granted_at: item.granted_at,\n organisation_id: '' // Will be populated from event's organisation_id if needed\n })) || [];\n\n setUserEventAccess(eventAccess);\n } catch (error) {\n console.warn(\"Clearing corrupted localStorage data\");\n localStorage.removeItem(STORAGE_KEYS.SELECTED_EVENT);\n console.error('Error loading user event access:', error);\n setUserEventAccess([]);\n } finally {\n setEventAccessLoading(false);\n }\n }, [supabaseClient, user, appName]);\n\n // Helper function to get access for a specific event\n const getUserEventAccess = useCallback((eventId: string) => {\n return userEventAccess.find(access => access.event_id === eventId);\n }, [userEventAccess]);\n\n // When the selected event ID changes, user logs in, or app config loads, refresh permissions\n useEffect(() => {\n if (!user || !appConfig) return;\n\n // Check for super admin first - admin override should happen regardless of app configuration\n const isSuperAdmin = user?.user_metadata?.globalRole === 'super_admin';\n if (isSuperAdmin) {\n setPermissions({\n 'admin:create': true,\n 'admin:read': true,\n 'admin:update': true,\n 'admin:delete': true,\n 'users:create': true,\n 'users:read': true,\n 'users:update': true,\n 'users:delete': true,\n 'events:create': true,\n 'events:read': true,\n 'events:update': true,\n 'events:delete': true\n });\n setRoles(['super_admin']);\n setAccessLevel(AccessLevel.ADMIN);\n return;\n }\n\n if (selectedEventId) {\n // Event-based permissions\n refreshPermissions(selectedEventId);\n } else if (!appConfig.requires_event) {\n // Direct app permissions (no event needed)\n refreshPermissions();\n } else {\n // No event and app requires events - clear permissions\n setPermissions({});\n setRoles([]);\n setAccessLevel(AccessLevel.VIEWER);\n }\n }, [selectedEventId, user, appConfig, refreshPermissions]);\n\n // Load user event access when user changes\n useEffect(() => {\n if (user) {\n loadUserEventAccess();\n } else {\n setUserEventAccess([]);\n }\n }, [user, loadUserEventAccess]);\n\n // Auth methods\n const signIn = useCallback(async (email: string, password?: string) => {\n if (!supabaseClient) {\n const error = new Error('No Supabase client provided') as AuthError;\n setAuthError(error);\n return { error };\n }\n\n setAuthLoading(true);\n setAuthError(null);\n \n try {\n const { error } = await supabaseClient.auth.signInWithPassword({ email, password: password || '' });\n if (error) {\n setAuthError(error);\n }\n return { error };\n } catch (err: any) {\n const authError = err as AuthError;\n setAuthError(authError);\n return { error: authError };\n } finally {\n setAuthLoading(false);\n }\n }, [supabaseClient]);\n\n const signUp = useCallback(async (email: string, password: string) => {\n if (!supabaseClient) {\n const error = new Error('No Supabase client provided') as AuthError;\n setAuthError(error);\n return { error };\n }\n\n setAuthError(null);\n try {\n const { error } = await supabaseClient.auth.signUp({ email, password });\n if (error) {\n setAuthError(error);\n }\n return { error };\n } catch (err: any) {\n const authError = err as AuthError;\n setAuthError(authError);\n return { error: authError };\n }\n }, [supabaseClient]);\n\n const signOut = useCallback(async () => {\n if (!supabaseClient) {\n setUser(null);\n setSession(null);\n setUserEventAccess([]);\n setPermissions({});\n setRoles([]);\n setAccessLevel(AccessLevel.VIEWER);\n setSelectedEventId(null);\n return { error: null };\n }\n const { error } = await supabaseClient.auth.signOut();\n if (error) {\n setAuthError(error);\n } else {\n // Immediately clear user-related state on successful sign out\n setUserEventAccess([]);\n setPermissions({});\n setRoles([]);\n setAccessLevel(AccessLevel.VIEWER);\n setSelectedEventId(null);\n }\n return { error };\n }, [supabaseClient]);\n\n const resetPassword = useCallback(async (email: string) => {\n if (!supabaseClient) {\n const error = new Error('No Supabase client provided') as AuthError;\n setAuthError(error);\n return { error };\n }\n\n setAuthError(null);\n try {\n const { error } = await supabaseClient.auth.resetPasswordForEmail(email);\n if (error) {\n setAuthError(error);\n }\n return { error };\n } catch (err: any) {\n const authError = err as AuthError;\n setAuthError(authError);\n return { error: authError };\n }\n }, [supabaseClient]);\n\n const updatePassword = useCallback(async (password: string) => {\n if (!supabaseClient) return { error: new AuthError('Supabase client not available.', 500) };\n const { error } = await supabaseClient.auth.updateUser({ password });\n if (error) {\n setAuthError(error);\n }\n return { error };\n }, [supabaseClient]);\n\n const refreshSession = useCallback(async () => {\n if (!supabaseClient) {\n const error = new Error('No Supabase client provided') as AuthError;\n setAuthError(error);\n return { error };\n }\n\n setAuthError(null);\n try {\n const { error } = await supabaseClient.auth.refreshSession();\n if (error) {\n setAuthError(error);\n }\n return { error };\n } catch (err: any) {\n const authError = err as AuthError;\n setAuthError(authError);\n return { error: authError };\n }\n }, [supabaseClient]);\n\n // Memoized derived values\n const isAuthenticated = useMemo(() => !!user, [user]);\n const isLoading = authLoading || rbacLoading;\n const hasErrors = !!authError || !!rbacError;\n\n // Permission methods\n const hasPermission = useCallback((permission: string) => {\n const hasPerm = !!permissions[permission];\n return hasPerm;\n }, [permissions]);\n const hasAnyPermission = useCallback((perms: string[]) => perms.some(p => !!permissions[p]), [permissions]);\n const hasAllPermissions = useCallback((perms: string[]) => perms.every(p => !!permissions[p]), [permissions]);\n const hasRole = useCallback((role: string) => {\n const isSuperAdmin = user?.user_metadata?.globalRole === 'super_admin';\n if (role.toLowerCase() === 'super_admin') {\n return isSuperAdmin;\n }\n return roles.includes(role);\n }, [roles, user]);\n const hasAccessLevel = useCallback((level: AccessLevel) => {\n const levels = Object.values(AccessLevel);\n return levels.indexOf(accessLevel) >= levels.indexOf(level);\n }, [accessLevel]);\n const canAccess = useCallback((resource: string, action: string) => {\n const permission = `${resource}:${action}`;\n const hasAccess = hasPermission(permission);\n return hasAccess;\n }, [hasPermission]);\n const validatePermission = useCallback(async (permission: string) => hasPermission(permission), [hasPermission]);\n const validateAccess = useCallback(async (resource: string, action: string) => {\n // Placeholder for more complex logic, e.g., re-validating with backend\n return Promise.resolve(canAccess(resource, action));\n }, [canAccess]);\n\n // Memoized context value\n const contextValue = useMemo<UnifiedAuthContextType>(() => ({\n user,\n session,\n isAuthenticated,\n authLoading,\n authError,\n supabase: supabaseClient || null,\n appName,\n\n signIn,\n signUp,\n signOut,\n resetPassword,\n updatePassword,\n refreshSession,\n\n permissions,\n roles,\n accessLevel,\n rbacLoading,\n rbacError,\n selectedEventId,\n appConfig,\n userEventAccess,\n eventAccessLoading,\n\n // Organisation context\n selectedOrganisationId,\n requireOrganisationContext: () => {\n if (!selectedOrganisationId) {\n throw new Error('Organisation context is required but not available');\n }\n return selectedOrganisationId;\n },\n\n hasPermission,\n hasAnyPermission,\n hasAllPermissions,\n hasRole,\n hasAccessLevel,\n canAccess,\n validatePermission,\n validateAccess,\n refreshPermissions,\n setSelectedEventId,\n \n // New RBAC system support\n rbacEnabled: enableRBAC,\n rbacContext: undefined, // Will be populated by useRBAC hook when enabled\n \n isLoading,\n hasErrors,\n\n loadUserEventAccess,\n getUserEventAccess\n }), [\n user, session, isAuthenticated, authLoading, authError, supabaseClient, appName,\n signIn, signUp, signOut, resetPassword, updatePassword, refreshSession,\n permissions, roles, accessLevel, rbacLoading, rbacError, selectedEventId, appConfig,\n userEventAccess, eventAccessLoading, selectedOrganisationId,\n hasPermission, hasAnyPermission, hasAllPermissions, hasRole, hasAccessLevel, canAccess,\n validatePermission, validateAccess, refreshPermissions, setSelectedEventId,\n enableRBAC, isLoading, hasErrors,\n loadUserEventAccess, getUserEventAccess\n ]);\n\n return (\n <UnifiedAuthContext.Provider value={contextValue}>\n {children}\n </UnifiedAuthContext.Provider>\n );\n} ","/**\n * @file Organisation Provider\n * @package @jmruthers/pace-core\n * @module Providers/Organisation\n * @since 0.4.0\n *\n * Security-first organisation provider that enforces mandatory organisation context.\n * No data operations can proceed without valid organisation context.\n * \n * Features:\n * - Mandatory organisation selection for all operations\n * - User organisation membership validation\n * - Role-based access within organisations\n * - Secure organisation switching\n * - Hierarchy support for parent/child organisations\n * - Error handling for security violations\n * - Persistent organisation selection\n *\n * @example\n * ```tsx\n * // Basic setup - organisation context is mandatory\n * import { UnifiedAuthProvider, OrganisationProvider } from '@jmruthers/pace-core';\n * \n * function App() {\n * return (\n * <UnifiedAuthProvider supabaseClient={supabase} appName=\"MY_APP\">\n * <OrganisationProvider>\n * <YourAppContent />\n * </OrganisationProvider>\n * </UnifiedAuthProvider>\n * );\n * }\n * \n * // Using in components\n * function MyComponent() {\n * const { \n * selectedOrganisation, \n * getUserRole, \n * switchOrganisation \n * } = useOrganisations();\n * \n * // selectedOrganisation is guaranteed to be non-null when this renders\n * return (\n * <div>\n * <h1>{selectedOrganisation.display_name}</h1>\n * <p>Your role: {getUserRole()}</p>\n * </div>\n * );\n * }\n * ```\n *\n * @security\n * - All data access requires valid organisation context\n * - User membership validation on organisation load\n * - Role-based access control within organisations\n * - Secure organisation switching with validation\n * - Error states for security violations\n * - No fallback to default organisation - explicit selection required\n *\n * @dependencies\n * - React 18+ - Context, hooks, and effects\n * - UnifiedAuthProvider - Authentication context\n * - Supabase - Database operations\n * - Organisation types - Type definitions\n */\n\nimport React, { createContext, useContext, useState, useEffect, useCallback, useMemo } from 'react';\nimport { useUnifiedAuth } from './UnifiedAuthProvider';\nimport { setOrganisationContext } from '../utils/organisationContext';\nimport type {\n Organisation,\n OrganisationMembership,\n OrganisationContextType,\n OrganisationProviderProps,\n OrganisationSecurityError,\n OrganisationHierarchy\n} from '../types/organisation';\n\n// Create the context\nconst OrganisationContext = createContext<OrganisationContextType | undefined>(undefined);\n\n// Storage keys for persistence\nconst STORAGE_KEYS = {\n SELECTED_ORGANISATION: 'pace-core-selected-organisation',\n ORGANISATION_CONTEXT: 'pace-core-organisation-context',\n} as const;\n\n/**\n * Organisation Provider component that enforces mandatory organisation context\n * \n * This provider:\n * - Loads user's organisation memberships on authentication\n * - Validates user has at least one active organisation\n * - Auto-selects primary organisation or first available\n * - Provides security helpers for organisation validation\n * - Handles organisation switching with validation\n * - Persists organisation selection across sessions\n * \n * SECURITY: No children are rendered without valid organisation context\n */\nexport function OrganisationProvider({ children }: OrganisationProviderProps) {\n const [selectedOrganisation, setSelectedOrganisation] = useState<Organisation | null>(null);\n const [organisations, setOrganisations] = useState<Organisation[]>([]);\n const [userMemberships, setUserMemberships] = useState<OrganisationMembership[]>([]);\n const [roleMapState, setRoleMapState] = useState<Map<string, string>>(new Map());\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [isContextReady, setIsContextReady] = useState(false);\n \n const { user, supabase } = useUnifiedAuth();\n\n // Set organisation context in database session\n const setDatabaseOrganisationContext = useCallback(async (organisation: Organisation): Promise<void> => {\n if (!supabase) {\n console.warn('[OrganisationProvider] No Supabase client available for setting organisation context');\n setIsContextReady(false);\n return;\n }\n\n try {\n await setOrganisationContext(supabase, organisation.id);\n console.log('[OrganisationProvider] Database organisation context set to:', organisation.display_name);\n setIsContextReady(true);\n } catch (error) {\n console.error('[OrganisationProvider] Failed to set database organisation context:', error);\n setIsContextReady(false);\n // Don't throw - this is a non-critical operation\n }\n }, [supabase]);\n\n // CRITICAL: Set database organisation context when organisation changes\n useEffect(() => {\n if (selectedOrganisation && supabase) {\n // Reset context ready state when organisation changes\n setIsContextReady(false);\n \n // Use an async IIFE to properly handle the async operation\n (async () => {\n await setDatabaseOrganisationContext(selectedOrganisation);\n })();\n } else {\n setIsContextReady(false);\n }\n }, [selectedOrganisation, setDatabaseOrganisationContext, supabase]);\n\n // CRITICAL: Load user organisations and validate access\n useEffect(() => {\n if (!user || !supabase) {\n // Clear state when no user\n setSelectedOrganisation(null);\n setOrganisations([]);\n setUserMemberships([]);\n setIsLoading(false);\n return;\n }\n\n const loadUserOrganisations = async () => {\n setIsLoading(true);\n setError(null);\n \n try {\n console.log(\"[OrganisationProvider] Loading organisations for user:\", user.id);\n \n // Get user's organisation memberships from consolidated rbac_organisation_roles table\n // Only get actual members (org_admin, leader, member) - exclude supporters\n let memberships, membershipError;\n try {\n const result = await supabase\n .from('rbac_organisation_roles')\n .select(`\n id,\n user_id,\n organisation_id,\n role,\n status,\n granted_at,\n granted_by,\n revoked_at,\n revoked_by,\n notes,\n created_at,\n updated_at\n `)\n .eq('user_id', user.id)\n .eq('status', 'active')\n .is('revoked_at', null)\n .in('role', ['org_admin', 'leader', 'member']); // Only actual members, not supporters\n \n memberships = result.data;\n membershipError = result.error;\n } catch (queryError: any) {\n membershipError = queryError;\n }\n\n if (membershipError) {\n console.error(\"[OrganisationProvider] Error loading memberships:\", membershipError);\n throw membershipError;\n }\n \n console.log(\"[OrganisationProvider] Raw memberships data:\", memberships);\n \n if (!memberships || memberships.length === 0) {\n throw new Error('User has no active organisation memberships') as OrganisationSecurityError;\n }\n\n // Get organisation details for the memberships\n const organisationIds = memberships.map((m: any) => m.organisation_id);\n const { data: organisations, error: orgError } = await supabase\n .from('organisations')\n .select('id, name, display_name, subscription_tier, settings, is_active, parent_id, created_at, updated_at')\n .in('id', organisationIds);\n\n if (orgError) {\n console.error(\"[OrganisationProvider] Error loading organisations:\", orgError);\n throw orgError;\n }\n\n // Create a map of organisation_id to role from the memberships data\n // Since we're now getting roles directly from the consolidated table\n const roleMap = new Map<string, string>();\n memberships?.forEach((membership: any) => {\n roleMap.set(membership.organisation_id, membership.role);\n });\n\n // Extract organisations and memberships\n const orgs = organisations as Organisation[];\n const activeOrgs = orgs.filter(org => org.is_active);\n \n if (activeOrgs.length === 0) {\n throw new Error('User has no access to active organisations') as OrganisationSecurityError;\n }\n\n console.log(\"[OrganisationProvider] Active organisations:\", activeOrgs);\n \n setOrganisations(activeOrgs);\n setUserMemberships(memberships as OrganisationMembership[]);\n \n // Store role map in component state for later use\n setRoleMapState(roleMap);\n \n // Auto-select organisation: try persisted, then primary, then first\n let initialOrg: Organisation | null = null;\n \n // 1. Try to restore from localStorage\n try {\n const persistedOrgString = localStorage.getItem(STORAGE_KEYS.SELECTED_ORGANISATION);\n if (persistedOrgString) {\n const persistedOrg = JSON.parse(persistedOrgString) as Organisation;\n const validPersistedOrg = activeOrgs.find(org => org.id === persistedOrg.id);\n if (validPersistedOrg) {\n initialOrg = validPersistedOrg;\n console.log(\"[OrganisationProvider] Restored persisted organisation:\", initialOrg.display_name);\n }\n }\n } catch (storageError) {\n console.warn(\"[OrganisationProvider] Failed to restore persisted organisation:\", storageError);\n }\n \n // 2. Fall back to org_admin role organisation (highest privilege)\n if (!initialOrg) {\n const adminMembership = memberships.find((m: any) => m.role === 'org_admin');\n if (adminMembership) {\n const foundOrg = organisations.find((org: any) => org.id === adminMembership.organisation_id);\n if (foundOrg) {\n initialOrg = foundOrg;\n console.log(\"[OrganisationProvider] Selected org_admin organisation:\", initialOrg.display_name);\n }\n }\n }\n \n // 3. Fall back to first organisation\n if (!initialOrg) {\n initialOrg = activeOrgs[0];\n console.log(\"[OrganisationProvider] Selected first organisation:\", initialOrg.display_name);\n }\n \n if (!initialOrg) {\n throw new Error('No valid organisation found for user') as OrganisationSecurityError;\n }\n\n setSelectedOrganisation(initialOrg);\n \n // Persist selection\n localStorage.setItem(STORAGE_KEYS.SELECTED_ORGANISATION, JSON.stringify(initialOrg));\n \n console.log(\"[OrganisationProvider] Organisation context established:\", {\n selectedOrganisation: initialOrg.display_name,\n totalOrganisations: activeOrgs.length,\n userRole: roleMap.get(initialOrg.id)\n });\n \n } catch (err) {\n console.error(\"[OrganisationProvider] Failed to load organisations:\", err);\n setError(err as Error);\n // SECURITY: Clear all state on error\n setSelectedOrganisation(null);\n setOrganisations([]);\n setUserMemberships([]);\n localStorage.removeItem(STORAGE_KEYS.SELECTED_ORGANISATION);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadUserOrganisations();\n }, [user, supabase]);\n\n // Security validation helper\n const ensureOrganisationContext = useCallback((): Organisation => {\n if (!selectedOrganisation) {\n throw new Error('Organisation context is required but not available') as OrganisationSecurityError;\n }\n return selectedOrganisation;\n }, [selectedOrganisation]);\n\n // Get user's role in specified organisation (defaults to current)\n const getUserRole = useCallback((orgId?: string): string => {\n const targetOrgId = orgId || selectedOrganisation?.id;\n if (!targetOrgId) return 'no_access';\n \n // Use roleMapState to get the role for this organisation\n return roleMapState.get(targetOrgId) || 'no_access';\n }, [roleMapState, selectedOrganisation]);\n\n // Validate user has access to organisation\n const validateOrganisationAccess = useCallback((orgId: string): boolean => {\n return userMemberships.some((m: any) => \n m.organisation_id === orgId && \n m.status === 'active' &&\n m.revoked_at === null\n );\n }, [userMemberships]);\n\n // Secure organisation switching\n const switchOrganisation = useCallback(async (orgId: string): Promise<void> => {\n console.log(\"[OrganisationProvider] Switching to organisation:\", orgId);\n \n // Validate access\n if (!validateOrganisationAccess(orgId)) {\n throw new Error(`User does not have access to organisation ${orgId}`) as OrganisationSecurityError;\n }\n \n const targetOrg = organisations.find(org => org.id === orgId);\n if (!targetOrg) {\n throw new Error(`Organisation ${orgId} not found in user's organisations`) as OrganisationSecurityError;\n }\n \n setSelectedOrganisation(targetOrg);\n \n // Persist selection\n localStorage.setItem(STORAGE_KEYS.SELECTED_ORGANISATION, JSON.stringify(targetOrg));\n \n // Set database organisation context\n await setDatabaseOrganisationContext(targetOrg);\n \n console.log(\"[OrganisationProvider] Switched to organisation:\", targetOrg.display_name);\n }, [organisations, validateOrganisationAccess, setDatabaseOrganisationContext]);\n\n // Refresh organisations data\n const refreshOrganisations = useCallback(async (): Promise<void> => {\n if (!user || !supabase) return;\n \n // Force reload by triggering the effect\n setIsLoading(true);\n // The useEffect will handle the actual reload\n }, [user, supabase]);\n\n // Get primary organisation (highest privilege role)\n const getPrimaryOrganisation = useCallback((): Organisation | null => {\n // Look for org_admin role first, then leader, then member\n const rolePriority = ['org_admin', 'leader', 'member'];\n \n for (const role of rolePriority) {\n const membership = userMemberships.find((m: any) => m.role === role);\n if (membership) {\n return organisations.find((org: any) => org.id === membership.organisation_id) || null;\n }\n }\n \n return null;\n }, [userMemberships, organisations]);\n\n // Security status\n const isOrganisationSecure = useCallback((): boolean => {\n return !!(selectedOrganisation && user);\n }, [selectedOrganisation, user]);\n\n // Build organisation hierarchy (for future use)\n const buildOrganisationHierarchy = useCallback((orgs: Organisation[]): OrganisationHierarchy[] => {\n const orgMap = new Map<string, Organisation>();\n orgs.forEach(org => orgMap.set(org.id, org));\n \n const roots: OrganisationHierarchy[] = [];\n \n orgs.forEach(org => {\n if (!org.parent_id) {\n // Root organisation\n roots.push({\n organisation: org,\n children: [],\n depth: 0\n });\n }\n });\n \n // For now, return flat structure - hierarchy building can be added later\n return roots;\n }, []);\n\n // Computed values\n const hasValidOrganisationContext = useMemo(() => {\n return !!(selectedOrganisation && !isLoading && !error && isContextReady);\n }, [selectedOrganisation, isLoading, error, isContextReady]);\n\n // Memoized context value\n const contextValue = useMemo<OrganisationContextType>(() => {\n // SECURITY: Only provide full context if we have valid organisation\n if (!selectedOrganisation) {\n // This will never be accessed due to the render guards above,\n // but TypeScript requires the interface to be satisfied\n const placeholderOrg: Organisation = {\n id: '',\n name: '',\n display_name: '',\n subscription_tier: 'standard',\n settings: {},\n is_active: false,\n created_at: '',\n updated_at: ''\n };\n \n return {\n selectedOrganisation: placeholderOrg,\n organisations: [],\n userMemberships: [],\n isLoading,\n error,\n hasValidOrganisationContext: false,\n setSelectedOrganisation: () => {},\n switchOrganisation: async () => {},\n getUserRole: () => 'no_access',\n validateOrganisationAccess: () => false,\n refreshOrganisations: async () => {},\n ensureOrganisationContext: () => { throw new Error('No organisation context') as OrganisationSecurityError; },\n isOrganisationSecure: () => false,\n getPrimaryOrganisation: () => null\n };\n }\n\n return {\n selectedOrganisation,\n organisations,\n userMemberships,\n isLoading,\n error,\n hasValidOrganisationContext,\n setSelectedOrganisation,\n switchOrganisation,\n getUserRole,\n validateOrganisationAccess,\n refreshOrganisations,\n ensureOrganisationContext,\n isOrganisationSecure,\n getPrimaryOrganisation\n };\n }, [\n selectedOrganisation,\n organisations,\n userMemberships,\n isLoading,\n error,\n hasValidOrganisationContext,\n switchOrganisation,\n getUserRole,\n validateOrganisationAccess,\n refreshOrganisations,\n ensureOrganisationContext,\n isOrganisationSecure,\n getPrimaryOrganisation\n ]);\n\n // SECURITY: Only render children when we have valid organisation context\n if (isLoading || (selectedOrganisation && !isContextReady)) {\n return (\n <div className=\"organisation-loading\" role=\"status\" aria-label=\"Loading organisation context\">\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary mx-auto mb-4\"></div>\n <p className=\"text-muted-foreground\">\n {isLoading ? 'Loading organisation context...' : 'Setting up organisation context...'}\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n if (error || (user && !selectedOrganisation)) {\n return (\n <div className=\"organisation-error\" role=\"alert\">\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-center max-w-md mx-auto p-6\">\n <div className=\"text-destructive mb-4\">\n <svg className=\"h-12 w-12 mx-auto\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.732-.833-2.464 0L4.35 16.5c-.77.833.192 2.5 1.732 2.5z\" />\n </svg>\n </div>\n <h2 className=\"text-xl font-semibold text-foreground mb-2\">\n Organisation Access Required\n </h2>\n <p className=\"text-muted-foreground mb-4\">\n {error?.message || 'No valid organisation context available. Please contact your administrator to be added to an organisation.'}\n </p>\n <button \n onClick={() => window.location.reload()}\n className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n >\n Retry\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <OrganisationContext.Provider value={contextValue}>\n {children}\n </OrganisationContext.Provider>\n );\n}\n\n/**\n * Hook to access organisation context\n * \n * @returns Organisation context with guaranteed non-null selectedOrganisation\n * @throws {Error} If used outside OrganisationProvider\n */\nexport const useOrganisations = (): OrganisationContextType => {\n const context = useContext(OrganisationContext);\n if (!context) {\n throw new Error('useOrganisations must be used within an OrganisationProvider');\n }\n return context;\n};\n\n// Re-export types for convenience\nexport type { \n Organisation, \n OrganisationMembership, \n OrganisationContextType,\n OrganisationSecurityError\n}; "],"mappings":"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","names":["session","permissions","roles","authError","createContext","useContext","useState","useEffect","useCallback","useMemo","jsx","createContext","STORAGE_KEYS","useState","useCallback","error","useEffect","organisations","useMemo","useContext"]}
|