@jmruthers/pace-core 0.2.4
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 +202 -0
- package/README.md +299 -0
- package/dist/DataTable-BHlzyKZP.d.ts +116 -0
- package/dist/DataTable-GEY5U7OI.js +100 -0
- package/dist/DataTable-GEY5U7OI.js.map +1 -0
- package/dist/PublicLoadingSpinner-DztrzuJr.d.ts +3430 -0
- package/dist/UnifiedAuthProvider-w66zSCUf.d.ts +160 -0
- package/dist/api-GZHIDA4X.js +41 -0
- package/dist/api-GZHIDA4X.js.map +1 -0
- package/dist/appConfig-BVGyuvI7.d.ts +71 -0
- package/dist/appNameResolver-7GHF5ED2.js +22 -0
- package/dist/appNameResolver-7GHF5ED2.js.map +1 -0
- package/dist/audit-BUW3LMJB.js +16 -0
- package/dist/audit-BUW3LMJB.js.map +1 -0
- package/dist/chunk-22KLBHPS.js +29 -0
- package/dist/chunk-22KLBHPS.js.map +1 -0
- package/dist/chunk-24MKLB7U.js +81 -0
- package/dist/chunk-24MKLB7U.js.map +1 -0
- package/dist/chunk-2MKP6IYD.js +388 -0
- package/dist/chunk-2MKP6IYD.js.map +1 -0
- package/dist/chunk-2V3Y6YBC.js +114 -0
- package/dist/chunk-2V3Y6YBC.js.map +1 -0
- package/dist/chunk-5CDJCTOO.js +190 -0
- package/dist/chunk-5CDJCTOO.js.map +1 -0
- package/dist/chunk-6ZQVSHKL.js +1345 -0
- package/dist/chunk-6ZQVSHKL.js.map +1 -0
- package/dist/chunk-74C6SNEC.js +77 -0
- package/dist/chunk-74C6SNEC.js.map +1 -0
- package/dist/chunk-7BNPOCLL.js +178 -0
- package/dist/chunk-7BNPOCLL.js.map +1 -0
- package/dist/chunk-7JL3T7BO.js +3344 -0
- package/dist/chunk-7JL3T7BO.js.map +1 -0
- package/dist/chunk-CDQ3PX7L.js +18 -0
- package/dist/chunk-CDQ3PX7L.js.map +1 -0
- package/dist/chunk-DY5E3AT7.js +1734 -0
- package/dist/chunk-DY5E3AT7.js.map +1 -0
- package/dist/chunk-ETEJVKYK.js +6032 -0
- package/dist/chunk-ETEJVKYK.js.map +1 -0
- package/dist/chunk-I5Z3QH5X.js +32 -0
- package/dist/chunk-I5Z3QH5X.js.map +1 -0
- package/dist/chunk-MZBUOP4P.js +119 -0
- package/dist/chunk-MZBUOP4P.js.map +1 -0
- package/dist/chunk-N2EUGZRW.js +98 -0
- package/dist/chunk-N2EUGZRW.js.map +1 -0
- package/dist/chunk-NQ4TOOO6.js +20 -0
- package/dist/chunk-NQ4TOOO6.js.map +1 -0
- package/dist/chunk-OHXGNT3K.js +21 -0
- package/dist/chunk-OHXGNT3K.js.map +1 -0
- package/dist/chunk-OKXMUYIB.js +522 -0
- package/dist/chunk-OKXMUYIB.js.map +1 -0
- package/dist/chunk-PFRRIDYA.js +382 -0
- package/dist/chunk-PFRRIDYA.js.map +1 -0
- package/dist/chunk-PLDDJCW6.js +49 -0
- package/dist/chunk-PLDDJCW6.js.map +1 -0
- package/dist/chunk-SS3E6QLB.js +695 -0
- package/dist/chunk-SS3E6QLB.js.map +1 -0
- package/dist/chunk-TMRLB2LA.js +326 -0
- package/dist/chunk-TMRLB2LA.js.map +1 -0
- package/dist/chunk-WYB6MBZA.js +5533 -0
- package/dist/chunk-WYB6MBZA.js.map +1 -0
- package/dist/chunk-YDJW5XTN.js +84 -0
- package/dist/chunk-YDJW5XTN.js.map +1 -0
- package/dist/components.d.ts +1308 -0
- package/dist/components.js +3759 -0
- package/dist/components.js.map +1 -0
- package/dist/database-C3Szpi5J.d.ts +470 -0
- package/dist/hooks.d.ts +449 -0
- package/dist/hooks.js +612 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +385 -0
- package/dist/index.js +569 -0
- package/dist/index.js.map +1 -0
- package/dist/organisation-CO3Sh3_D.d.ts +99 -0
- package/dist/providers.d.ts +45 -0
- package/dist/providers.js +36 -0
- package/dist/providers.js.map +1 -0
- package/dist/rbac/eslint-rules.d.ts +52 -0
- package/dist/rbac/eslint-rules.js +252 -0
- package/dist/rbac/eslint-rules.js.map +1 -0
- package/dist/rbac/index.d.ts +1918 -0
- package/dist/rbac/index.js +2212 -0
- package/dist/rbac/index.js.map +1 -0
- package/dist/styles/core.css +401 -0
- 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 +36 -0
- package/dist/styles/index.js +24 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/theming/runtime.d.ts +73 -0
- package/dist/theming/runtime.js +16 -0
- package/dist/theming/runtime.js.map +1 -0
- package/dist/types-CInEi-ng.d.ts +316 -0
- package/dist/types.d.ts +196 -0
- package/dist/types.js +83 -0
- package/dist/types.js.map +1 -0
- package/dist/unified-CM7T0aTK.d.ts +198 -0
- package/dist/useComponentPerformance-DE9l5RkL.d.ts +11 -0
- package/dist/usePublicRouteParams-B6i0KtXW.d.ts +477 -0
- package/dist/utils.d.ts +639 -0
- package/dist/utils.js +1103 -0
- package/dist/utils.js.map +1 -0
- package/dist/validation-PM_iOaTI.d.ts +159 -0
- package/dist/validation.d.ts +138 -0
- package/dist/validation.js +477 -0
- package/dist/validation.js.map +1 -0
- package/docs/INDEX.md +192 -0
- package/docs/README.md +165 -0
- package/docs/api/.nojekyll +1 -0
- package/docs/api/README.md +301 -0
- package/docs/api/classes/ErrorBoundary.md +144 -0
- package/docs/api/classes/PublicErrorBoundary.md +132 -0
- package/docs/api/interfaces/AggregateConfig.md +43 -0
- package/docs/api/interfaces/ButtonProps.md +53 -0
- package/docs/api/interfaces/CardProps.md +40 -0
- package/docs/api/interfaces/ColorPalette.md +7 -0
- package/docs/api/interfaces/ColorShade.md +41 -0
- package/docs/api/interfaces/DataTableAction.md +200 -0
- package/docs/api/interfaces/DataTableColumn.md +300 -0
- package/docs/api/interfaces/DataTableProps.md +517 -0
- package/docs/api/interfaces/DataTableToolbarButton.md +96 -0
- package/docs/api/interfaces/EmptyStateConfig.md +61 -0
- package/docs/api/interfaces/EventContextType.md +96 -0
- package/docs/api/interfaces/EventLogoProps.md +152 -0
- package/docs/api/interfaces/EventProviderProps.md +19 -0
- package/docs/api/interfaces/FileSizeLimits.md +7 -0
- package/docs/api/interfaces/FileUploadProps.md +154 -0
- package/docs/api/interfaces/FooterProps.md +105 -0
- package/docs/api/interfaces/InactivityWarningModalProps.md +115 -0
- package/docs/api/interfaces/InputProps.md +53 -0
- package/docs/api/interfaces/LabelProps.md +107 -0
- package/docs/api/interfaces/LoginFormProps.md +184 -0
- package/docs/api/interfaces/NavigationItem.md +176 -0
- package/docs/api/interfaces/NavigationMenuProps.md +236 -0
- package/docs/api/interfaces/Organisation.md +140 -0
- package/docs/api/interfaces/OrganisationContextType.md +377 -0
- package/docs/api/interfaces/OrganisationMembership.md +140 -0
- package/docs/api/interfaces/OrganisationProviderProps.md +19 -0
- package/docs/api/interfaces/OrganisationSecurityError.md +62 -0
- package/docs/api/interfaces/PaceAppLayoutProps.md +393 -0
- package/docs/api/interfaces/PaceLoginPageProps.md +34 -0
- package/docs/api/interfaces/PaletteData.md +41 -0
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +94 -0
- package/docs/api/interfaces/PublicErrorBoundaryState.md +68 -0
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +86 -0
- package/docs/api/interfaces/PublicPageFooterProps.md +112 -0
- package/docs/api/interfaces/PublicPageHeaderProps.md +138 -0
- package/docs/api/interfaces/PublicPageLayoutProps.md +138 -0
- package/docs/api/interfaces/StorageConfig.md +41 -0
- package/docs/api/interfaces/StorageFileInfo.md +74 -0
- package/docs/api/interfaces/StorageFileMetadata.md +140 -0
- package/docs/api/interfaces/StorageListOptions.md +86 -0
- package/docs/api/interfaces/StorageListResult.md +41 -0
- package/docs/api/interfaces/StorageUploadOptions.md +88 -0
- package/docs/api/interfaces/StorageUploadResult.md +63 -0
- package/docs/api/interfaces/StorageUrlOptions.md +47 -0
- package/docs/api/interfaces/StyleImport.md +19 -0
- package/docs/api/interfaces/ToastActionElement.md +9 -0
- package/docs/api/interfaces/ToastProps.md +9 -0
- package/docs/api/interfaces/UnifiedAuthContextType.md +1108 -0
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +171 -0
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +136 -0
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +123 -0
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
- package/docs/api/interfaces/UsePublicEventOptions.md +34 -0
- package/docs/api/interfaces/UsePublicEventReturn.md +68 -0
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +94 -0
- package/docs/api/interfaces/UserEventAccess.md +118 -0
- package/docs/api/interfaces/UserMenuProps.md +86 -0
- package/docs/api/interfaces/UserProfile.md +63 -0
- package/docs/api/modules.md +4153 -0
- package/docs/api-reference/components.md +1623 -0
- package/docs/api-reference/hooks.md +627 -0
- package/docs/api-reference/providers.md +487 -0
- package/docs/api-reference/types.md +1005 -0
- package/docs/api-reference/utilities.md +1104 -0
- package/docs/app.css.example +53 -0
- package/docs/architecture/README.md +577 -0
- package/docs/best-practices/README.md +400 -0
- package/docs/best-practices/deployment.md +1042 -0
- package/docs/best-practices/performance.md +789 -0
- package/docs/best-practices/security.md +881 -0
- package/docs/best-practices/testing.md +981 -0
- package/docs/consuming-app-example.md +290 -0
- package/docs/consuming-app-vite-config.md +233 -0
- package/docs/core-concepts/authentication.md +98 -0
- package/docs/core-concepts/events.md +756 -0
- package/docs/core-concepts/organisations.md +790 -0
- package/docs/core-concepts/permissions.md +729 -0
- package/docs/core-concepts/rbac-system.md +233 -0
- package/docs/database-schema-requirements.md +172 -0
- package/docs/documentation-style-checklist.md +294 -0
- package/docs/examples/navigation-menu-auth-fix.md +344 -0
- package/docs/getting-started/examples/README.md +106 -0
- package/docs/getting-started/examples/basic-auth-app.md +521 -0
- package/docs/getting-started/examples/full-featured-app.md +616 -0
- package/docs/getting-started/installation.md +269 -0
- package/docs/getting-started/quick-start.md +401 -0
- package/docs/implementation-guides/app-layout.md +983 -0
- package/docs/implementation-guides/data-tables.md +1898 -0
- package/docs/implementation-guides/dynamic-colors.md +195 -0
- package/docs/implementation-guides/forms.md +578 -0
- package/docs/implementation-guides/hierarchical-datatable.md +850 -0
- package/docs/implementation-guides/large-datasets.md +281 -0
- package/docs/implementation-guides/navigation.md +844 -0
- package/docs/implementation-guides/performance.md +403 -0
- package/docs/implementation-guides/permission-enforcement.md +764 -0
- package/docs/implementation-guides/public-pages.md +752 -0
- package/docs/migration/README.md +493 -0
- package/docs/migration/organisation-context-timing-fix.md +217 -0
- package/docs/migration/quick-migration-guide.md +320 -0
- package/docs/migration/rbac-migration.md +571 -0
- package/docs/migration/v0.4.15-tailwind-scanning.md +272 -0
- package/docs/migration/v0.4.16-css-first-approach.md +306 -0
- package/docs/migration/v0.4.17-source-path-fix.md +229 -0
- package/docs/migration-guide.md +168 -0
- package/docs/performance/README.md +551 -0
- package/docs/print-components/README.md +258 -0
- package/docs/print-components/api-reference.md +636 -0
- package/docs/print-components/examples/README.md +204 -0
- package/docs/print-components/examples/basic-report.tsx +92 -0
- package/docs/print-components/examples/card-catalog.tsx +149 -0
- package/docs/print-components/examples/cover-page-report.tsx +163 -0
- package/docs/print-components/quick-start.md +363 -0
- package/docs/quick-reference.md +576 -0
- package/docs/rbac/README.md +265 -0
- package/docs/rbac/advanced-patterns.md +776 -0
- package/docs/rbac/api-reference.md +1033 -0
- package/docs/rbac/examples.md +883 -0
- package/docs/rbac/getting-started.md +679 -0
- package/docs/rbac/quick-start.md +619 -0
- package/docs/rbac/super-admin-guide.md +592 -0
- package/docs/rbac/troubleshooting.md +316 -0
- package/docs/security/README.md +680 -0
- package/docs/security/checklist.md +343 -0
- package/docs/style-guide.md +522 -0
- package/docs/styles/README.md +319 -0
- package/docs/testing/README.md +874 -0
- package/docs/troubleshooting/README.md +497 -0
- package/docs/troubleshooting/common-issues.md +1563 -0
- package/docs/troubleshooting/database-view-compatibility.md +119 -0
- package/docs/troubleshooting/debugging.md +1117 -0
- package/docs/troubleshooting/migration.md +918 -0
- package/docs/troubleshooting/organisation-context-setup.md +277 -0
- package/docs/troubleshooting/react-hooks-issue-analysis.md +166 -0
- package/docs/troubleshooting/styling-issues.md +219 -0
- package/docs/troubleshooting/tailwind-content-scanning.md +213 -0
- package/docs/usage.md +175 -0
- package/docs/visual-testing.md +114 -0
- package/package.json +211 -0
- package/src/__mocks__/lucide-react.ts +181 -0
- package/src/__tests__/README.md +404 -0
- package/src/__tests__/debug-provider.unit.test.tsx +67 -0
- package/src/__tests__/e2e/workflows.test.tsx +373 -0
- package/src/__tests__/hybridPermissions.unit.test.tsx +474 -0
- package/src/__tests__/index.integration.test.ts +491 -0
- package/src/__tests__/mocks/MockAuthProvider-standalone.tsx +47 -0
- package/src/__tests__/mocks/MockAuthProvider.tsx +63 -0
- package/src/__tests__/mocks/enhancedSupabaseMock.ts +252 -0
- package/src/__tests__/mocks/index.test.ts +23 -0
- package/src/__tests__/mocks/index.ts +16 -0
- package/src/__tests__/mocks/mockAuth.ts +155 -0
- package/src/__tests__/mocks/mockSupabase.ts +83 -0
- package/src/__tests__/mocks/mockSupabaseClient.ts +63 -0
- package/src/__tests__/mocks/providers.tsx +22 -0
- package/src/__tests__/patterns/__tests__/testPatterns.test.ts +394 -0
- package/src/__tests__/patterns/testPatterns.ts +124 -0
- package/src/__tests__/performance/componentPerformance.performance.test.ts +27 -0
- package/src/__tests__/performance/index.ts +24 -0
- package/src/__tests__/performance/performanceValidation.performance.test.ts +15 -0
- package/src/__tests__/security/security.unit.test.tsx +7 -0
- package/src/__tests__/security/securityValidation.security.test.tsx +153 -0
- package/src/__tests__/setup.ts +259 -0
- package/src/__tests__/setupTests.d.ts +1 -0
- package/src/__tests__/shared/componentTestUtils.tsx +475 -0
- package/src/__tests__/shared/errorHandlingTestUtils.ts +107 -0
- package/src/__tests__/shared/index.ts +81 -0
- package/src/__tests__/shared/integrationTestUtils.tsx +375 -0
- package/src/__tests__/shared/performanceTestUtils.tsx +476 -0
- package/src/__tests__/shared/testUtils.optimized.tsx +627 -0
- package/src/__tests__/simple.test.tsx +20 -0
- package/src/__tests__/templates/accessibility.test.template.tsx +279 -0
- package/src/__tests__/templates/component.test.template.tsx +122 -0
- package/src/__tests__/templates/integration.test.template.tsx +199 -0
- package/src/__tests__/test-utils/dataFactories.ts +60 -0
- package/src/__tests__/test-utils/index.ts +6 -0
- package/src/__tests__/typeSafety.unit.test.ts +65 -0
- package/src/__tests__/unifiedAuth.unit.test.tsx +151 -0
- package/src/__tests__/utils/accessibilityHelpers.ts +254 -0
- package/src/__tests__/utils/assertions.ts +50 -0
- package/src/__tests__/utils/deterministicHelpers.ts +31 -0
- package/src/__tests__/utils/edgeCaseConfig.test.ts +75 -0
- package/src/__tests__/utils/edgeCaseConfig.ts +98 -0
- package/src/__tests__/utils/mockHelpers.ts +149 -0
- package/src/__tests__/utils/mockLoader.ts +101 -0
- package/src/__tests__/utils/performanceHelpers.ts +55 -0
- package/src/__tests__/utils/performanceTestHelpers.ts +68 -0
- package/src/__tests__/utils/testDataFactories.ts +28 -0
- package/src/__tests__/utils/testIsolation.ts +67 -0
- package/src/__tests__/utils/visualTestHelpers.ts +20 -0
- package/src/__tests__/visual/__snapshots__/componentSnapshots.visual.test.tsx.snap +68 -0
- package/src/__tests__/visual/__snapshots__/componentVisuals.visual.test.tsx.snap +14 -0
- package/src/__tests__/visual/__snapshots__/visualRegression.test.tsx.snap +217 -0
- package/src/__tests__/visual/__snapshots__/visualRegression.visual.test.tsx.snap +24 -0
- package/src/__tests__/visual/componentSnapshots.visual.test.tsx +33 -0
- package/src/__tests__/visual/componentVisuals.visual.test.tsx +12 -0
- package/src/__tests__/visual/visualRegression.visual.test.tsx +20 -0
- package/src/components/Alert/Alert.tsx +134 -0
- package/src/components/Alert/__tests__/Alert.unit.test.tsx +381 -0
- package/src/components/Alert/index.ts +2 -0
- package/src/components/Avatar/Avatar.tsx +84 -0
- package/src/components/Avatar/__tests__/Avatar.unit.test.tsx +232 -0
- package/src/components/Avatar/index.ts +2 -0
- package/src/components/Button/Button.tsx +270 -0
- package/src/components/Button/__tests__/Button.accessibility.test.tsx +131 -0
- package/src/components/Button/__tests__/Button.comprehensive.test.tsx +721 -0
- package/src/components/Button/__tests__/Button.unit.test.tsx +189 -0
- package/src/components/Button/__tests__/EventSelector.integration.test.tsx +285 -0
- package/src/components/Button/index.ts +2 -0
- package/src/components/Card/Card.tsx +271 -0
- package/src/components/Card/__tests__/Card.accessibility.test.tsx +394 -0
- package/src/components/Card/__tests__/Card.comprehensive.test.tsx +599 -0
- package/src/components/Card/__tests__/Card.integration.test.tsx +673 -0
- package/src/components/Card/__tests__/Card.performance.test.tsx +546 -0
- package/src/components/Card/__tests__/Card.unit.test.tsx +330 -0
- package/src/components/Card/__tests__/Card.visual.test.tsx +599 -0
- package/src/components/Card/__tests__/README.md +211 -0
- package/src/components/Card/index.ts +1 -0
- package/src/components/Checkbox/Checkbox.tsx +75 -0
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +2 -0
- package/src/components/Checkbox/__tests__/Checkbox.unit.test.tsx +520 -0
- package/src/components/Checkbox/index.ts +2 -0
- package/src/components/DataTable/DataTable.tsx +440 -0
- package/src/components/DataTable/__tests__/DataTable.autoSizing.test.tsx +526 -0
- package/src/components/DataTable/__tests__/DataTable.errorHandling.test.tsx +259 -0
- package/src/components/DataTable/__tests__/DataTable.hierarchical.test.tsx +675 -0
- package/src/components/DataTable/__tests__/DataTable.infinite-loop.test.tsx +324 -0
- package/src/components/DataTable/__tests__/DataTable.integration.test.tsx +724 -0
- package/src/components/DataTable/__tests__/DataTable.performance.test.tsx +597 -0
- package/src/components/DataTable/__tests__/DataTable.permissions.test.tsx +306 -0
- package/src/components/DataTable/__tests__/DataTable.regressionFixes.test.tsx +546 -0
- package/src/components/DataTable/__tests__/DataTable.selection.controlled.test.tsx +386 -0
- package/src/components/DataTable/__tests__/DataTable.selection.test.tsx +338 -0
- package/src/components/DataTable/__tests__/DataTable.userWorkflows.test.tsx +310 -0
- package/src/components/DataTable/__tests__/DataTable.workflowValidation.test.tsx +489 -0
- package/src/components/DataTable/__tests__/DataTable.workflows.test.tsx +701 -0
- package/src/components/DataTable/__tests__/README.md +136 -0
- package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +66 -0
- package/src/components/DataTable/__tests__/performance-regression.test.tsx +788 -0
- package/src/components/DataTable/__tests__/performance.test.tsx +365 -0
- package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +103 -0
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +382 -0
- package/src/components/DataTable/__tests__/test-utils.ts +94 -0
- package/src/components/DataTable/components/ActionButtons.tsx +177 -0
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +160 -0
- package/src/components/DataTable/components/ColumnFilter.tsx +114 -0
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +100 -0
- package/src/components/DataTable/components/DataTableBody.tsx +462 -0
- package/src/components/DataTable/components/DataTableCore.tsx +869 -0
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +214 -0
- package/src/components/DataTable/components/DataTableHeader.tsx +31 -0
- package/src/components/DataTable/components/DataTableModals.tsx +87 -0
- package/src/components/DataTable/components/DataTableToolbar.tsx +251 -0
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +148 -0
- package/src/components/DataTable/components/EditableRow.tsx +160 -0
- package/src/components/DataTable/components/EmptyState.tsx +64 -0
- package/src/components/DataTable/components/ExpandButton.tsx +113 -0
- package/src/components/DataTable/components/FilterRow.tsx +101 -0
- package/src/components/DataTable/components/GroupHeader.tsx +42 -0
- package/src/components/DataTable/components/GroupingDropdown.tsx +96 -0
- package/src/components/DataTable/components/ImportModal.tsx +345 -0
- package/src/components/DataTable/components/LoadingState.tsx +12 -0
- package/src/components/DataTable/components/PaginationControls.tsx +332 -0
- package/src/components/DataTable/components/UnifiedTableBody.tsx +911 -0
- package/src/components/DataTable/components/ViewRowModal.tsx +68 -0
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +593 -0
- package/src/components/DataTable/components/__tests__/ActionButtons.unit.test.tsx +150 -0
- package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +224 -0
- package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.unit.test.tsx +244 -0
- package/src/components/DataTable/components/__tests__/DataTable.accessibility.test.tsx +523 -0
- package/src/components/DataTable/components/__tests__/DataTable.integration.test.tsx +401 -0
- package/src/components/DataTable/components/__tests__/DataTable.performance.test.tsx +161 -0
- package/src/components/DataTable/components/__tests__/DataTable.real.test.tsx +251 -0
- package/src/components/DataTable/components/__tests__/DataTable.security.test.tsx +172 -0
- package/src/components/DataTable/components/__tests__/DataTable.unit.test.tsx +290 -0
- package/src/components/DataTable/components/__tests__/DataTableBody.unit.test.tsx +147 -0
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.unit.test.tsx +182 -0
- package/src/components/DataTable/components/__tests__/DataTableHeader.unit.test.tsx +143 -0
- package/src/components/DataTable/components/__tests__/DataTableModals.unit.test.tsx +123 -0
- package/src/components/DataTable/components/__tests__/EditableRow.unit.test.tsx +660 -0
- package/src/components/DataTable/components/__tests__/EmptyState.unit.test.tsx +256 -0
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +498 -0
- package/src/components/DataTable/components/__tests__/FilterRow.unit.test.tsx +112 -0
- package/src/components/DataTable/components/__tests__/FilteringToggle.unit.test.tsx +130 -0
- package/src/components/DataTable/components/__tests__/GroupHeader.unit.test.tsx +172 -0
- package/src/components/DataTable/components/__tests__/GroupingDropdown.unit.test.tsx +222 -0
- package/src/components/DataTable/components/__tests__/ImportModal.unit.test.tsx +780 -0
- package/src/components/DataTable/components/__tests__/LoadingState.unit.test.tsx +65 -0
- package/src/components/DataTable/components/__tests__/PaginationControls.unit.test.tsx +634 -0
- package/src/components/DataTable/components/__tests__/StateComponents.unit.test.tsx +48 -0
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.hierarchical.test.tsx +541 -0
- package/src/components/DataTable/components/__tests__/ViewRowModal.unit.test.tsx +228 -0
- package/src/components/DataTable/components/__tests__/VirtualizedDataTable.unit.test.tsx +568 -0
- package/src/components/DataTable/components/index.ts +17 -0
- package/src/components/DataTable/context/DataTableContext.tsx +97 -0
- package/src/components/DataTable/core/ActionManager.ts +235 -0
- package/src/components/DataTable/core/ColumnFactory.ts +268 -0
- package/src/components/DataTable/core/ColumnManager.ts +205 -0
- package/src/components/DataTable/core/DataManager.ts +188 -0
- package/src/components/DataTable/core/DataTableContext.tsx +182 -0
- package/src/components/DataTable/core/LocalDataAdapter.ts +264 -0
- package/src/components/DataTable/core/PluginRegistry.ts +229 -0
- package/src/components/DataTable/core/StateManager.ts +311 -0
- package/src/components/DataTable/core/__tests__/ActionManager.unit.test.ts +405 -0
- package/src/components/DataTable/core/__tests__/ArchitectureIntegration.unit.test.tsx +445 -0
- package/src/components/DataTable/core/__tests__/ColumnFactory.unit.test.ts +288 -0
- package/src/components/DataTable/core/__tests__/ColumnManager.unit.test.ts +623 -0
- package/src/components/DataTable/core/__tests__/DataManager.unit.test.ts +431 -0
- package/src/components/DataTable/core/__tests__/DataTableContext.unit.test.tsx +433 -0
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.unit.test.ts +422 -0
- package/src/components/DataTable/core/__tests__/PluginRegistry.unit.test.tsx +207 -0
- package/src/components/DataTable/core/__tests__/StateManager.unit.test.ts +278 -0
- package/src/components/DataTable/core/index.ts +8 -0
- package/src/components/DataTable/core/interfaces.ts +338 -0
- package/src/components/DataTable/examples/AutoSizingExample.tsx +180 -0
- package/src/components/DataTable/examples/ColumnSizingComparison.tsx +235 -0
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +418 -0
- package/src/components/DataTable/examples/HierarchicalExample.tsx +472 -0
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +173 -0
- package/src/components/DataTable/examples/PerformanceExample.tsx +502 -0
- package/src/components/DataTable/examples/__tests__/PerformanceExample.unit.test.tsx +281 -0
- package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.unit.test.ts +407 -0
- package/src/components/DataTable/hooks/__tests__/useColumnReordering.unit.test.ts +679 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +95 -0
- package/src/components/DataTable/hooks/useColumnReordering.ts +110 -0
- package/src/components/DataTable/hooks/useDataTableState.ts +325 -0
- package/src/components/DataTable/hooks/useHierarchicalState.ts +174 -0
- package/src/components/DataTable/index.ts +70 -0
- package/src/components/DataTable/styles.ts +171 -0
- package/src/components/DataTable/types.ts +475 -0
- package/src/components/DataTable/utils/__tests__/columnSizing.test.ts +237 -0
- package/src/components/DataTable/utils/__tests__/debugTools.unit.test.ts +267 -0
- package/src/components/DataTable/utils/__tests__/errorHandling.unit.test.ts +467 -0
- package/src/components/DataTable/utils/__tests__/exportUtils.unit.test.ts +380 -0
- package/src/components/DataTable/utils/__tests__/flexibleImport.unit.test.ts +233 -0
- package/src/components/DataTable/utils/__tests__/performanceUtils.unit.test.ts +414 -0
- package/src/components/DataTable/utils/columnSizing.ts +125 -0
- package/src/components/DataTable/utils/debugTools.ts +583 -0
- package/src/components/DataTable/utils/errorHandling.ts +494 -0
- package/src/components/DataTable/utils/exportUtils.ts +126 -0
- package/src/components/DataTable/utils/flexibleImport.ts +510 -0
- package/src/components/DataTable/utils/hierarchicalSorting.ts +151 -0
- package/src/components/DataTable/utils/hierarchicalUtils.ts +218 -0
- package/src/components/DataTable/utils/index.ts +1 -0
- package/src/components/DataTable/utils/performanceUtils.ts +351 -0
- package/src/components/Dialog/Dialog.tsx +782 -0
- package/src/components/Dialog/README.md +804 -0
- package/src/components/Dialog/__tests__/Dialog.accessibility.test.tsx +521 -0
- package/src/components/Dialog/__tests__/Dialog.auto-size.example.tsx +157 -0
- package/src/components/Dialog/__tests__/Dialog.enhanced.test.tsx +538 -0
- package/src/components/Dialog/__tests__/Dialog.unit.test.tsx +1373 -0
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +55 -0
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +68 -0
- package/src/components/Dialog/examples/HtmlDialogExample.tsx +202 -0
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +61 -0
- package/src/components/Dialog/examples/SmartDialogExample.tsx +322 -0
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +151 -0
- package/src/components/Dialog/index.ts +12 -0
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +611 -0
- package/src/components/Dialog/utils/safeHtml.ts +185 -0
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +312 -0
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.accessibility.test.tsx +517 -0
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.integration.test.tsx +572 -0
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.unit.test.tsx +579 -0
- package/src/components/ErrorBoundary/index.ts +8 -0
- package/src/components/EventSelector/EventSelector.tsx +360 -0
- package/src/components/EventSelector/__tests__/EventSelector.test.tsx +528 -0
- package/src/components/EventSelector/index.ts +3 -0
- package/src/components/EventSelector/types.ts +79 -0
- package/src/components/FileUpload/FileUpload.example.tsx +218 -0
- package/src/components/FileUpload/FileUpload.tsx +237 -0
- package/src/components/FileUpload/__tests__/FileUpload.integration.test.tsx +992 -0
- package/src/components/FileUpload/__tests__/FileUpload.real.test.tsx +927 -0
- package/src/components/FileUpload/__tests__/FileUpload.test.tsx +855 -0
- package/src/components/FileUpload/__tests__/FileUpload.unit.test.tsx +1311 -0
- package/src/components/FileUpload/__tests__/FileUpload.unmocked.test.tsx +937 -0
- package/src/components/FileUpload/index.ts +6 -0
- package/src/components/Footer/Footer.tsx +197 -0
- package/src/components/Footer/__tests__/Footer.accessibility.test.tsx +359 -0
- package/src/components/Footer/__tests__/Footer.integration.test.tsx +353 -0
- package/src/components/Footer/__tests__/Footer.performance.test.tsx +309 -0
- package/src/components/Footer/__tests__/Footer.unit.test.tsx +309 -0
- package/src/components/Footer/__tests__/Footer.visual.test.tsx +335 -0
- package/src/components/Footer/index.ts +17 -0
- package/src/components/Form/Form.tsx +166 -0
- package/src/components/Form/FormErrorSummary.tsx +113 -0
- package/src/components/Form/FormField.tsx +249 -0
- package/src/components/Form/FormFieldset.tsx +127 -0
- package/src/components/Form/FormLiveRegion.tsx +198 -0
- package/src/components/Form/__tests__/Form.accessibility.test.tsx +820 -0
- package/src/components/Form/__tests__/Form.unit.test.tsx +305 -0
- package/src/components/Form/__tests__/FormErrorSummary.unit.test.tsx +285 -0
- package/src/components/Form/__tests__/FormFieldset.unit.test.tsx +241 -0
- package/src/components/Form/index.ts +26 -0
- package/src/components/Header/Header.tsx +301 -0
- package/src/components/Header/__tests__/Header.accessibility.test.tsx +382 -0
- package/src/components/Header/__tests__/Header.comprehensive.test.tsx +509 -0
- package/src/components/Header/__tests__/Header.unit.test.tsx +335 -0
- package/src/components/Header/index.ts +4 -0
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +196 -0
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +164 -0
- package/src/components/InactivityWarningModal/__tests__/InactivityWarningModal.unit.test.tsx +224 -0
- package/src/components/InactivityWarningModal/index.ts +9 -0
- package/src/components/Input/Input.tsx +201 -0
- package/src/components/Input/__mocks__/Input.tsx +2 -0
- package/src/components/Input/__tests__/Input.accessibility.test.tsx +632 -0
- package/src/components/Input/__tests__/Input.unit.test.tsx +1121 -0
- package/src/components/Input/index.ts +9 -0
- package/src/components/Label/Label.tsx +186 -0
- package/src/components/Label/__tests__/Label.accessibility.test.tsx +239 -0
- package/src/components/Label/__tests__/Label.unit.test.tsx +331 -0
- package/src/components/Label/index.ts +2 -0
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +98 -0
- package/src/components/LoadingSpinner/__tests__/LoadingSpinner.accessibility.test.tsx +116 -0
- package/src/components/LoadingSpinner/__tests__/LoadingSpinner.unit.test.tsx +144 -0
- package/src/components/LoadingSpinner/index.ts +3 -0
- package/src/components/LoginForm/LoginForm.tsx +273 -0
- package/src/components/LoginForm/__tests__/LoginForm.accessibility.test.tsx +201 -0
- package/src/components/LoginForm/__tests__/LoginForm.unit.test.tsx +119 -0
- package/src/components/LoginForm/index.ts +3 -0
- package/src/components/NavigationMenu/NavigationMenu.tsx +698 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.accessibility.test.tsx +378 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.enhanced.test.tsx +768 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.integration.test.tsx +576 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.performance.test.tsx +585 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.real.component.test.tsx +783 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.security.enhanced.test.tsx +810 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.security.test.tsx +494 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.unit.test.tsx +331 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.userWorkflows.test.tsx +347 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.workflows.test.tsx +584 -0
- package/src/components/NavigationMenu/index.ts +10 -0
- package/src/components/NavigationMenu/types.ts +85 -0
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +304 -0
- package/src/components/OrganisationSelector/__tests__/OrganisationSelector.unit.test.tsx +664 -0
- package/src/components/OrganisationSelector/index.ts +9 -0
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +699 -0
- package/src/components/PaceAppLayout/README.md +278 -0
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +288 -0
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +889 -0
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +629 -0
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +782 -0
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +904 -0
- package/src/components/PaceAppLayout/index.ts +1 -0
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +221 -0
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.accessibility.test.tsx +463 -0
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.integration.test.tsx +586 -0
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.unit.test.tsx +533 -0
- package/src/components/PaceLoginPage/index.ts +1 -0
- package/src/components/PasswordReset/PasswordChangeForm.tsx +186 -0
- package/src/components/PasswordReset/PasswordResetForm.tsx +201 -0
- package/src/components/PasswordReset/__tests__/PasswordChangeForm.accessibility.test.tsx +408 -0
- package/src/components/PasswordReset/__tests__/PasswordChangeForm.unit.test.tsx +561 -0
- package/src/components/PasswordReset/__tests__/PasswordReset.integration.test.tsx +304 -0
- package/src/components/PasswordReset/__tests__/PasswordResetForm.accessibility.test.tsx +20 -0
- package/src/components/PasswordReset/__tests__/PasswordResetForm.unit.test.tsx +523 -0
- package/src/components/PasswordReset/__tests__/__mocks__/UnifiedAuthProvider.ts +29 -0
- package/src/components/PasswordReset/index.ts +4 -0
- package/src/components/Print/__tests__/Print.comprehensive.test.tsx +331 -0
- package/src/components/PrintButton/PrintButton.tsx +321 -0
- package/src/components/PrintButton/PrintButtonGroup.tsx +84 -0
- package/src/components/PrintButton/PrintToolbar.tsx +94 -0
- package/src/components/PrintButton/__tests__/PrintButton.unit.test.tsx +429 -0
- package/src/components/PrintButton/__tests__/PrintButtonGroup.unit.test.tsx +277 -0
- package/src/components/PrintButton/__tests__/PrintToolbar.unit.test.tsx +264 -0
- package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +438 -0
- package/src/components/PrintButton/index.ts +33 -0
- package/src/components/PrintButton/types.ts +173 -0
- package/src/components/PrintCard/PrintCard.tsx +154 -0
- package/src/components/PrintCard/PrintCardContent.tsx +57 -0
- package/src/components/PrintCard/PrintCardFooter.tsx +60 -0
- package/src/components/PrintCard/PrintCardGrid.tsx +91 -0
- package/src/components/PrintCard/PrintCardHeader.tsx +78 -0
- package/src/components/PrintCard/PrintCardImage.tsx +81 -0
- package/src/components/PrintCard/__tests__/PrintCard.unit.test.tsx +233 -0
- package/src/components/PrintCard/__tests__/PrintCardContent.test.tsx +284 -0
- package/src/components/PrintCard/__tests__/PrintCardGrid.unit.test.tsx +214 -0
- package/src/components/PrintCard/__tests__/PrintCardImage.unit.test.tsx +264 -0
- package/src/components/PrintCard/examples/PrintCardShowcase.tsx +239 -0
- package/src/components/PrintCard/index.ts +34 -0
- package/src/components/PrintCard/types.ts +171 -0
- package/src/components/PrintDataTable/PrintDataTable.tsx +215 -0
- package/src/components/PrintDataTable/PrintTableGroup.tsx +90 -0
- package/src/components/PrintDataTable/PrintTableRow.tsx +76 -0
- package/src/components/PrintDataTable/__tests__/PrintDataTable.unit.test.tsx +361 -0
- package/src/components/PrintDataTable/__tests__/PrintTableGroup.unit.test.tsx +314 -0
- package/src/components/PrintDataTable/__tests__/PrintTableRow.unit.test.tsx +362 -0
- package/src/components/PrintDataTable/index.ts +25 -0
- package/src/components/PrintDataTable/types.ts +67 -0
- package/src/components/PrintFooter/PrintFooter.tsx +183 -0
- package/src/components/PrintFooter/PrintFooterContent.tsx +71 -0
- package/src/components/PrintFooter/PrintFooterInfo.tsx +86 -0
- package/src/components/PrintFooter/PrintPageNumber.tsx +90 -0
- package/src/components/PrintFooter/__tests__/PrintFooter.unit.test.tsx +500 -0
- package/src/components/PrintFooter/__tests__/PrintFooterContent.unit.test.tsx +321 -0
- package/src/components/PrintFooter/__tests__/PrintFooterInfo.unit.test.tsx +335 -0
- package/src/components/PrintFooter/__tests__/PrintPageNumber.unit.test.tsx +340 -0
- package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +390 -0
- package/src/components/PrintFooter/index.ts +30 -0
- package/src/components/PrintFooter/types.ts +149 -0
- package/src/components/PrintGrid/PrintGrid.tsx +180 -0
- package/src/components/PrintGrid/PrintGridBreakpoint.tsx +109 -0
- package/src/components/PrintGrid/PrintGridContainer.tsx +128 -0
- package/src/components/PrintGrid/PrintGridItem.tsx +220 -0
- package/src/components/PrintGrid/__tests__/PrintGrid.unit.test.tsx +340 -0
- package/src/components/PrintGrid/__tests__/PrintGridBreakpoint.unit.test.tsx +261 -0
- package/src/components/PrintGrid/__tests__/PrintGridContainer.unit.test.tsx +338 -0
- package/src/components/PrintGrid/__tests__/PrintGridItem.unit.test.tsx +338 -0
- package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +359 -0
- package/src/components/PrintGrid/index.ts +31 -0
- package/src/components/PrintGrid/types.ts +159 -0
- package/src/components/PrintHeader/PrintCoverHeader.tsx +230 -0
- package/src/components/PrintHeader/PrintHeader.tsx +150 -0
- package/src/components/PrintHeader/__tests__/PrintCoverHeader.unit.test.tsx +309 -0
- package/src/components/PrintHeader/__tests__/PrintHeader.unit.test.tsx +202 -0
- package/src/components/PrintHeader/index.ts +17 -0
- package/src/components/PrintHeader/types.ts +42 -0
- package/src/components/PrintLayout/PrintLayout.tsx +122 -0
- package/src/components/PrintLayout/PrintLayoutContext.tsx +66 -0
- package/src/components/PrintLayout/PrintPageBreak.tsx +52 -0
- package/src/components/PrintLayout/__tests__/PrintLayout.unit.test.tsx +238 -0
- package/src/components/PrintLayout/examples/PrintShowcase.tsx +230 -0
- package/src/components/PrintLayout/index.ts +19 -0
- package/src/components/PrintLayout/types.ts +37 -0
- package/src/components/PrintPageBreak/PrintPageBreak.tsx +120 -0
- package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +90 -0
- package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +112 -0
- package/src/components/PrintPageBreak/__tests__/PrintPageBreak.unit.test.tsx +263 -0
- package/src/components/PrintPageBreak/__tests__/PrintPageBreakGroup.unit.test.tsx +239 -0
- package/src/components/PrintPageBreak/__tests__/PrintPageBreakIndicator.unit.test.tsx +235 -0
- package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +279 -0
- package/src/components/PrintPageBreak/index.ts +23 -0
- package/src/components/PrintPageBreak/types.ts +94 -0
- package/src/components/PrintSection/PrintColumn.tsx +104 -0
- package/src/components/PrintSection/PrintDivider.tsx +101 -0
- package/src/components/PrintSection/PrintSection.tsx +129 -0
- package/src/components/PrintSection/PrintSectionContent.tsx +75 -0
- package/src/components/PrintSection/PrintSectionHeader.tsx +97 -0
- package/src/components/PrintSection/__tests__/PrintColumn.unit.test.tsx +385 -0
- package/src/components/PrintSection/__tests__/PrintDivider.unit.test.tsx +373 -0
- package/src/components/PrintSection/__tests__/PrintSection.unit.test.tsx +390 -0
- package/src/components/PrintSection/__tests__/PrintSectionContent.unit.test.tsx +321 -0
- package/src/components/PrintSection/__tests__/PrintSectionHeader.unit.test.tsx +334 -0
- package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +258 -0
- package/src/components/PrintSection/index.ts +33 -0
- package/src/components/PrintSection/types.ts +155 -0
- package/src/components/PrintText/PrintText.tsx +116 -0
- package/src/components/PrintText/__tests__/PrintText.unit.test.tsx +351 -0
- package/src/components/PrintText/index.ts +16 -0
- package/src/components/PrintText/types.ts +24 -0
- package/src/components/Progress/Progress.tsx +116 -0
- package/src/components/Progress/__tests__/Progress.accessibility.test.tsx +240 -0
- package/src/components/Progress/__tests__/Progress.unit.test.tsx +242 -0
- package/src/components/Progress/index.ts +3 -0
- package/src/components/PublicLayout/EventLogo.tsx +287 -0
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +279 -0
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +208 -0
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +130 -0
- package/src/components/PublicLayout/PublicPageDebugger.tsx +104 -0
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +162 -0
- package/src/components/PublicLayout/PublicPageFooter.tsx +124 -0
- package/src/components/PublicLayout/PublicPageHeader.tsx +178 -0
- package/src/components/PublicLayout/PublicPageLayout.tsx +232 -0
- package/src/components/PublicLayout/PublicPageProvider.tsx +137 -0
- package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +761 -0
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.simplified.test.tsx +228 -0
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +228 -0
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +459 -0
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +362 -0
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +522 -0
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +599 -0
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +513 -0
- package/src/components/PublicLayout/index.ts +51 -0
- package/src/components/RBAC/PagePermissionGuard.tsx +274 -0
- package/src/components/RBAC/RBACGuard.tsx +143 -0
- package/src/components/RBAC/RBACProvider.tsx +186 -0
- package/src/components/RBAC/RoleBasedContent.tsx +129 -0
- package/src/components/RBAC/__tests__/PagePermissionGuard.unit.test.tsx +674 -0
- package/src/components/RBAC/__tests__/RBAC.integration.test.tsx +573 -0
- package/src/components/RBAC/__tests__/RBACGuard.unit.test.tsx +467 -0
- package/src/components/RBAC/__tests__/RBACProvider.accessibility.test.tsx +475 -0
- package/src/components/RBAC/__tests__/RBACProvider.advanced.test.tsx +569 -0
- package/src/components/RBAC/__tests__/RBACProvider.integration.test.tsx +352 -0
- package/src/components/RBAC/__tests__/RBACProvider.unit.test.tsx +128 -0
- package/src/components/RBAC/__tests__/RoleBasedContent.unit.test.tsx +657 -0
- package/src/components/RBAC/index.ts +23 -0
- package/src/components/Select/Select.tsx +654 -0
- package/src/components/Select/__tests__/SearchableSelect.unit.test.tsx +437 -0
- package/src/components/Select/__tests__/Select.accessibility.test.tsx +1202 -0
- package/src/components/Select/__tests__/Select.actual.test.tsx +774 -0
- package/src/components/Select/__tests__/Select.comprehensive.test.tsx +837 -0
- package/src/components/Select/__tests__/Select.enhanced.test.tsx +1101 -0
- package/src/components/Select/__tests__/Select.integration.test.tsx +772 -0
- package/src/components/Select/__tests__/Select.performance.test.tsx +695 -0
- package/src/components/Select/__tests__/Select.real-world.test.tsx +1046 -0
- package/src/components/Select/__tests__/Select.search-algorithms.test.tsx +968 -0
- package/src/components/Select/__tests__/Select.unit.test.tsx +647 -0
- package/src/components/Select/__tests__/Select.utils.test.tsx +890 -0
- package/src/components/Select/index.ts +1 -0
- package/src/components/SuperAdminGuard.tsx +116 -0
- package/src/components/Table/Table.tsx +222 -0
- package/src/components/Table/__tests__/Table.accessibility.test.tsx +233 -0
- package/src/components/Table/__tests__/Table.unit.test.tsx +235 -0
- package/src/components/Table/index.ts +11 -0
- package/src/components/Toast/Toast.tsx +339 -0
- package/src/components/Toast/__tests__/Toast.accessibility.test.tsx +238 -0
- package/src/components/Toast/__tests__/Toast.integration.test.tsx +699 -0
- package/src/components/Toast/__tests__/Toast.unit.test.tsx +750 -0
- package/src/components/Toast/index.ts +14 -0
- package/src/components/Tooltip/Tooltip.tsx +167 -0
- package/src/components/Tooltip/__tests__/Tooltip.accessibility.test.tsx +121 -0
- package/src/components/Tooltip/__tests__/Tooltip.unit.test.tsx +185 -0
- package/src/components/Tooltip/index.ts +7 -0
- package/src/components/UserMenu/UserMenu.tsx +243 -0
- package/src/components/UserMenu/__tests__/UserMenu.accessibility.test.tsx +139 -0
- package/src/components/UserMenu/__tests__/UserMenu.integration.test.tsx +188 -0
- package/src/components/UserMenu/__tests__/UserMenu.unit.test.tsx +458 -0
- package/src/components/UserMenu/index.ts +3 -0
- package/src/components/__tests__/EdgeCaseTesting.enhanced.test.tsx +523 -0
- package/src/components/__tests__/ErrorTesting.enhanced.test.tsx +455 -0
- package/src/components/__tests__/SuperAdminGuard.test.tsx +456 -0
- package/src/components/__tests__/SuperAdminGuard.unit.test.tsx +456 -0
- package/src/components/examples/PermissionExample.tsx +150 -0
- package/src/components/examples/__tests__/PermissionExample.unit.test.tsx +360 -0
- package/src/components/index.ts +434 -0
- package/src/components.ts +19 -0
- package/src/constants/performance.ts +14 -0
- package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
- package/src/examples/PublicEventPage.tsx +274 -0
- package/src/examples/PublicPageApp.tsx +308 -0
- package/src/examples/PublicPageUsageExample.tsx +216 -0
- package/src/fonts/georama-italic.woff2 +0 -0
- package/src/fonts/georama.woff2 +0 -0
- package/src/fonts/open-sans-italic.woff2 +0 -0
- package/src/fonts/open-sans.woff2 +0 -0
- package/src/fonts/reddit-mono.woff2 +0 -0
- package/src/hooks/__tests__/hooks.integration.test.tsx +575 -0
- package/src/hooks/__tests__/useApiFetch.unit.test.ts +115 -0
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +133 -0
- package/src/hooks/__tests__/useDebounce.unit.test.ts +82 -0
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +293 -0
- package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +385 -0
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +286 -0
- package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +838 -0
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +627 -0
- package/src/hooks/__tests__/useRBAC.unit.test.ts +903 -0
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +537 -0
- package/src/hooks/__tests__/useToast.unit.test.tsx +62 -0
- package/src/hooks/__tests__/useZodForm.unit.test.tsx +37 -0
- package/src/hooks/index.ts +56 -0
- package/src/hooks/public/__tests__/usePublicEvent.test.tsx +397 -0
- package/src/hooks/public/__tests__/usePublicEventLogo.test.tsx +690 -0
- package/src/hooks/public/__tests__/usePublicRouteParams.test.tsx +449 -0
- package/src/hooks/public/index.ts +34 -0
- package/src/hooks/public/usePublicEvent.ts +261 -0
- package/src/hooks/public/usePublicEventLogo.ts +285 -0
- package/src/hooks/public/usePublicRouteParams.ts +259 -0
- package/src/hooks/useAppConfig.ts +94 -0
- package/src/hooks/useComponentPerformance.ts +39 -0
- package/src/hooks/useDataTablePerformance.ts +387 -0
- package/src/hooks/useDataTableState.ts +110 -0
- package/src/hooks/useDebounce.ts +18 -0
- package/src/hooks/useFocusManagement.ts +161 -0
- package/src/hooks/useFocusTrap.ts +155 -0
- package/src/hooks/useInactivityTracker.ts +372 -0
- package/src/hooks/useIsMobile.ts +42 -0
- package/src/hooks/useKeyboardShortcuts.ts +237 -0
- package/src/hooks/useOrganisationPermissions.ts +208 -0
- package/src/hooks/useOrganisationSecurity.ts +262 -0
- package/src/hooks/usePerformanceMonitor.ts +128 -0
- package/src/hooks/usePermissionCache.ts +455 -0
- package/src/hooks/useRBAC.ts +262 -0
- package/src/hooks/useSecureDataAccess.ts +586 -0
- package/src/hooks/useStorage.ts +274 -0
- package/src/hooks/useToast.ts +242 -0
- package/src/hooks/useZodForm.ts +28 -0
- package/src/index.ts +200 -0
- package/src/providers/AuthProvider.tsx +369 -0
- package/src/providers/EventProvider.tsx +324 -0
- package/src/providers/InactivityProvider.tsx +238 -0
- package/src/providers/OrganisationProvider.tsx +588 -0
- package/src/providers/RBACProvider.tsx +622 -0
- package/src/providers/UnifiedAuthProvider.tsx +327 -0
- package/src/providers/__tests__/EventProvider.unit.test.tsx +768 -0
- package/src/providers/__tests__/OrganisationProvider.basic.test.tsx +116 -0
- package/src/providers/__tests__/OrganisationProvider.unit.test.tsx +1312 -0
- package/src/providers/__tests__/UnifiedAuthProvider.inactivity.test.tsx +601 -0
- package/src/providers/__tests__/UnifiedAuthProvider.unit.test.tsx +675 -0
- package/src/providers/__tests__/index.unit.test.ts +78 -0
- package/src/providers/index.ts +15 -0
- package/src/rbac/README.md +885 -0
- package/src/rbac/__tests__/PagePermissionGuard.test.tsx +673 -0
- package/src/rbac/__tests__/README.md +170 -0
- package/src/rbac/__tests__/RoleBasedRouter.test.tsx +709 -0
- package/src/rbac/__tests__/TestContext.tsx +72 -0
- package/src/rbac/__tests__/__mocks__/cache.ts +144 -0
- package/src/rbac/__tests__/__mocks__/supabase.ts +152 -0
- package/src/rbac/__tests__/adapters-hooks-comprehensive.test.tsx +782 -0
- package/src/rbac/__tests__/adapters-hooks.test.tsx +561 -0
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +963 -0
- package/src/rbac/__tests__/adapters.test.tsx +444 -0
- package/src/rbac/__tests__/api.test.ts +620 -0
- package/src/rbac/__tests__/audit-observability-comprehensive.test.ts +792 -0
- package/src/rbac/__tests__/audit-observability.test.ts +549 -0
- package/src/rbac/__tests__/audit.test.ts +616 -0
- package/src/rbac/__tests__/build-contract-compliance-simple.test.ts +230 -0
- package/src/rbac/__tests__/cache-invalidation-comprehensive.test.ts +889 -0
- package/src/rbac/__tests__/cache-invalidation.test.ts +457 -0
- package/src/rbac/__tests__/cache.test.ts +458 -0
- package/src/rbac/__tests__/components-navigation-guard.enhanced.test.tsx +859 -0
- package/src/rbac/__tests__/components-navigation-guard.test.tsx +895 -0
- package/src/rbac/__tests__/components-navigation-provider.test.tsx +692 -0
- package/src/rbac/__tests__/components-page-permission-guard.test.tsx +673 -0
- package/src/rbac/__tests__/components-page-permission-provider.test.tsx +614 -0
- package/src/rbac/__tests__/components-permission-enforcer.enhanced.fixed.test.tsx +836 -0
- package/src/rbac/__tests__/components-permission-enforcer.enhanced.test.tsx +837 -0
- package/src/rbac/__tests__/components-permission-enforcer.test.tsx +825 -0
- package/src/rbac/__tests__/components-role-based-router.test.tsx +709 -0
- package/src/rbac/__tests__/components-secure-data-provider.test.tsx +607 -0
- package/src/rbac/__tests__/config.test.ts +583 -0
- package/src/rbac/__tests__/core-logic-unit.test.ts +190 -0
- package/src/rbac/__tests__/core-permission-logic-comprehensive.test.ts +1467 -0
- package/src/rbac/__tests__/core-permission-logic-fixed.test.ts +151 -0
- package/src/rbac/__tests__/core-permission-logic-simple.test.ts +968 -0
- package/src/rbac/__tests__/core-permission-logic.test.ts +966 -0
- package/src/rbac/__tests__/edge-cases-comprehensive.test.ts +988 -0
- package/src/rbac/__tests__/edge-cases.test.ts +654 -0
- package/src/rbac/__tests__/engine.test.ts +361 -0
- package/src/rbac/__tests__/engine.unit.test.ts +361 -0
- package/src/rbac/__tests__/hooks.enhanced.test.tsx +979 -0
- package/src/rbac/__tests__/hooks.fixed.test.tsx +475 -0
- package/src/rbac/__tests__/hooks.test.tsx +385 -0
- package/src/rbac/__tests__/index.test.ts +269 -0
- package/src/rbac/__tests__/integration.enhanced.test.tsx +824 -0
- package/src/rbac/__tests__/page-permission-guard-super-admin.test.tsx +261 -0
- package/src/rbac/__tests__/performance.enhanced.test.tsx +724 -0
- package/src/rbac/__tests__/permissions.test.ts +383 -0
- package/src/rbac/__tests__/requires-event.test.ts +330 -0
- package/src/rbac/__tests__/scope-isolation-comprehensive.test.ts +1349 -0
- package/src/rbac/__tests__/scope-isolation.test.ts +755 -0
- package/src/rbac/__tests__/secure-client-rls-comprehensive.test.ts +592 -0
- package/src/rbac/__tests__/secure-client-rls.test.ts +377 -0
- package/src/rbac/__tests__/security.test.ts +296 -0
- package/src/rbac/__tests__/setup.ts +228 -0
- package/src/rbac/__tests__/test-utils-enhanced.tsx +400 -0
- package/src/rbac/__tests__/types.test.ts +685 -0
- package/src/rbac/adapters.tsx +726 -0
- package/src/rbac/api.ts +337 -0
- package/src/rbac/audit-enhanced.ts +339 -0
- package/src/rbac/audit.ts +338 -0
- package/src/rbac/cache.ts +213 -0
- package/src/rbac/components/EnhancedNavigationMenu.tsx +294 -0
- package/src/rbac/components/NavigationGuard.tsx +294 -0
- package/src/rbac/components/NavigationProvider.tsx +314 -0
- package/src/rbac/components/PagePermissionGuard.tsx +430 -0
- package/src/rbac/components/PagePermissionProvider.tsx +274 -0
- package/src/rbac/components/PermissionEnforcer.tsx +307 -0
- package/src/rbac/components/RoleBasedRouter.tsx +425 -0
- package/src/rbac/components/SecureDataProvider.tsx +319 -0
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +631 -0
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +667 -0
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +647 -0
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +496 -0
- package/src/rbac/components/index.ts +64 -0
- package/src/rbac/config.ts +133 -0
- package/src/rbac/docs/event-based-apps.md +285 -0
- package/src/rbac/engine.ts +1026 -0
- package/src/rbac/eslint-rules.js +285 -0
- package/src/rbac/examples/CompleteRBACExample.tsx +323 -0
- package/src/rbac/examples/EventBasedApp.tsx +238 -0
- package/src/rbac/hooks.ts +555 -0
- package/src/rbac/index.ts +114 -0
- package/src/rbac/permissions.ts +293 -0
- package/src/rbac/secureClient.ts +244 -0
- package/src/rbac/security.ts +346 -0
- package/src/rbac/testing/__tests__/index.test.tsx +342 -0
- package/src/rbac/testing/index.tsx +340 -0
- package/src/rbac/types.ts +341 -0
- package/src/rbac/utils/__tests__/eventContext.test.ts +428 -0
- package/src/rbac/utils/__tests__/eventContext.unit.test.ts +428 -0
- package/src/rbac/utils/eventContext.ts +83 -0
- package/src/styles/__tests__/styles.unit.test.ts +164 -0
- package/src/styles/core.css +401 -0
- package/src/styles/index.ts +51 -0
- package/src/test-dom-cleanup.test.tsx +38 -0
- package/src/theming/__tests__/README.md +335 -0
- package/src/theming/__tests__/runtime.accessibility.test.ts +474 -0
- package/src/theming/__tests__/runtime.error.test.ts +616 -0
- package/src/theming/__tests__/runtime.integration.test.ts +376 -0
- package/src/theming/__tests__/runtime.performance.test.ts +411 -0
- package/src/theming/__tests__/runtime.unit.test.ts +470 -0
- package/src/theming/runtime.ts +187 -0
- package/src/types/__tests__/database.unit.test.ts +489 -0
- package/src/types/__tests__/guards.unit.test.ts +146 -0
- package/src/types/__tests__/index.unit.test.ts +77 -0
- package/src/types/__tests__/organisation.unit.test.ts +713 -0
- package/src/types/__tests__/rbac.unit.test.ts +621 -0
- package/src/types/__tests__/security.unit.test.ts +347 -0
- package/src/types/__tests__/supabase.unit.test.ts +658 -0
- package/src/types/__tests__/theme.unit.test.ts +218 -0
- package/src/types/__tests__/unified.unit.test.ts +537 -0
- package/src/types/__tests__/validation.unit.test.ts +616 -0
- package/src/types/database.ts +472 -0
- package/src/types/guards.ts +30 -0
- package/src/types/index.ts +25 -0
- package/src/types/organisation.ts +184 -0
- package/src/types/security.ts +70 -0
- package/src/types/supabase.ts +166 -0
- package/src/types/theme.ts +6 -0
- package/src/types/unified.ts +262 -0
- package/src/types/validation.ts +164 -0
- package/src/types/vitest-globals.d.ts +43 -0
- package/src/utils/__mocks__/supabaseMock.ts +75 -0
- package/src/utils/__mocks__/supabaseMock.tsx +198 -0
- package/src/utils/__tests__/appConfig.unit.test.ts +55 -0
- package/src/utils/__tests__/appNameResolver.unit.test.ts +137 -0
- package/src/utils/__tests__/audit.unit.test.ts +69 -0
- package/src/utils/__tests__/auth-utils.unit.test.ts +70 -0
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +317 -0
- package/src/utils/__tests__/cn.unit.test.ts +34 -0
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +480 -0
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +322 -0
- package/src/utils/__tests__/formatDate.unit.test.ts +109 -0
- package/src/utils/__tests__/formatting.unit.test.ts +66 -0
- package/src/utils/__tests__/index.unit.test.ts +251 -0
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +309 -0
- package/src/utils/__tests__/organisationContext.unit.test.ts +192 -0
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +259 -0
- package/src/utils/__tests__/permissionTypes.unit.test.ts +250 -0
- package/src/utils/__tests__/permissionUtils.unit.test.ts +362 -0
- package/src/utils/__tests__/sanitization.unit.test.ts +346 -0
- package/src/utils/__tests__/schemaUtils.unit.test.ts +441 -0
- package/src/utils/__tests__/secureDataAccess.unit.test.ts +334 -0
- package/src/utils/__tests__/secureErrors.unit.test.ts +377 -0
- package/src/utils/__tests__/secureStorage.unit.test.ts +293 -0
- package/src/utils/__tests__/security.unit.test.ts +127 -0
- package/src/utils/__tests__/securityMonitor.unit.test.ts +280 -0
- package/src/utils/__tests__/sessionTracking.unit.test.ts +370 -0
- package/src/utils/__tests__/validation.unit.test.ts +84 -0
- package/src/utils/__tests__/validationUtils.unit.test.ts +571 -0
- package/src/utils/appConfig.ts +47 -0
- package/src/utils/appIdResolver.ts +130 -0
- package/src/utils/appNameResolver.ts +190 -0
- package/src/utils/audit.ts +127 -0
- package/src/utils/auth-utils.ts +96 -0
- package/src/utils/bundleAnalysis.ts +129 -0
- package/src/utils/cn.ts +7 -0
- package/src/utils/debugLogger.ts +46 -0
- package/src/utils/deviceFingerprint.ts +215 -0
- package/src/utils/dynamicUtils.ts +105 -0
- package/src/utils/formatting.ts +77 -0
- package/src/utils/index.ts +145 -0
- package/src/utils/lazyLoad.tsx +44 -0
- package/src/utils/organisationContext.ts +135 -0
- package/src/utils/performanceBenchmark.ts +64 -0
- package/src/utils/performanceBudgets.ts +111 -0
- package/src/utils/permissionTypes.ts +37 -0
- package/src/utils/permissionUtils.ts +31 -0
- package/src/utils/print/PrintDataProcessor.ts +390 -0
- package/src/utils/print/__tests__/PrintDataProcessor.unit.test.ts +219 -0
- package/src/utils/print/__tests__/usePrintOptimization.unit.test.tsx +353 -0
- package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +397 -0
- package/src/utils/print/index.ts +29 -0
- package/src/utils/print/types.ts +196 -0
- package/src/utils/print/usePrintOptimization.ts +272 -0
- package/src/utils/sanitization.ts +264 -0
- package/src/utils/schemaUtils.ts +37 -0
- package/src/utils/secureDataAccess.ts +361 -0
- package/src/utils/secureErrors.ts +79 -0
- package/src/utils/secureStorage.ts +244 -0
- package/src/utils/security.ts +156 -0
- package/src/utils/securityMonitor.ts +45 -0
- package/src/utils/sessionTracking.ts +170 -0
- package/src/utils/storage/README.md +348 -0
- package/src/utils/storage/__tests__/config.unit.test.ts +206 -0
- package/src/utils/storage/__tests__/helpers.unit.test.ts +646 -0
- package/src/utils/storage/__tests__/index.unit.test.ts +167 -0
- package/src/utils/storage/__tests__/types.unit.test.ts +441 -0
- package/src/utils/storage/config.ts +100 -0
- package/src/utils/storage/helpers.ts +359 -0
- package/src/utils/storage/index.ts +36 -0
- package/src/utils/storage/types.ts +90 -0
- package/src/utils/validation.ts +111 -0
- package/src/utils/validationUtils.ts +120 -0
- package/src/validation/__tests__/common.unit.test.ts +101 -0
- package/src/validation/__tests__/csrf.unit.test.ts +302 -0
- package/src/validation/__tests__/passwordSchema.unit.test.ts +98 -0
- package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +466 -0
- package/src/validation/common.ts +53 -0
- package/src/validation/csrf.ts +214 -0
- package/src/validation/index.ts +43 -0
- package/src/validation/passwordSchema.ts +125 -0
- package/src/validation/sanitization.ts +96 -0
- package/src/validation/schemaUtils.ts +42 -0
- package/src/validation/sqlInjectionProtection.ts +242 -0
- package/src/validation/user.ts +34 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# RBAC System
|
|
2
|
+
|
|
3
|
+
> **📚 New Developer?** Start with the [Installation](../getting-started/installation.md) guide, then [Quick Start](../getting-started/quick-start.md) to build your first app.
|
|
4
|
+
|
|
5
|
+
PACE Core provides a comprehensive Role-Based Access Control (RBAC) system that manages user permissions through roles, ensuring secure and scalable access control across your application.
|
|
6
|
+
|
|
7
|
+
> **🔄 Migrating?** If you're upgrading from the legacy RBAC system, see the [Migration Guide](../migration/rbac-migration.md) for step-by-step instructions.
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
The RBAC system provides:
|
|
12
|
+
- **Role-Based Permissions** - Permissions assigned through roles
|
|
13
|
+
- **Granular Access Control** - Fine-grained permission management
|
|
14
|
+
- **Context-Aware Permissions** - Organisation and event-specific access
|
|
15
|
+
- **Dynamic Permission Checking** - Runtime permission validation
|
|
16
|
+
- **Permission Inheritance** - Hierarchical permission structure
|
|
17
|
+
- **Audit Logging** - Complete permission tracking
|
|
18
|
+
|
|
19
|
+
## Core Concepts
|
|
20
|
+
|
|
21
|
+
### Roles
|
|
22
|
+
|
|
23
|
+
Roles are collections of permissions that define what users can do within the system.
|
|
24
|
+
|
|
25
|
+
#### Global Roles
|
|
26
|
+
- **Super Admin** - Full system access across all organisations
|
|
27
|
+
- **System Admin** - System-level administration capabilities
|
|
28
|
+
- **User** - Basic authenticated user access
|
|
29
|
+
|
|
30
|
+
#### Organisation Roles
|
|
31
|
+
- **Organisation Admin** - Full access within an organisation
|
|
32
|
+
- **Leader** - Management capabilities within an organisation
|
|
33
|
+
- **Member** - Basic member access within an organisation
|
|
34
|
+
- **Supporter** - Limited access for external supporters
|
|
35
|
+
|
|
36
|
+
#### Event Roles
|
|
37
|
+
- **Event Admin** - Full access within an event
|
|
38
|
+
- **Event Manager** - Management capabilities within an event
|
|
39
|
+
- **Event Participant** - Basic participant access within an event
|
|
40
|
+
|
|
41
|
+
### Permissions
|
|
42
|
+
|
|
43
|
+
Permissions define specific actions users can perform on resources.
|
|
44
|
+
|
|
45
|
+
#### Permission Format
|
|
46
|
+
```
|
|
47
|
+
{operation}:{resource}[.{context}]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
#### Common Operations
|
|
51
|
+
- **create** - Create new resources
|
|
52
|
+
- **read** - View resources
|
|
53
|
+
- **update** - Modify existing resources
|
|
54
|
+
- **delete** - Remove resources
|
|
55
|
+
- **manage** - Full resource management
|
|
56
|
+
|
|
57
|
+
#### Common Resources
|
|
58
|
+
- **users** - User management
|
|
59
|
+
- **organisations** - Organisation management
|
|
60
|
+
- **events** - Event management
|
|
61
|
+
- **data** - General data access
|
|
62
|
+
- **settings** - Configuration management
|
|
63
|
+
|
|
64
|
+
#### Permission Examples
|
|
65
|
+
- `read:page.dashboard` - View dashboard page
|
|
66
|
+
- `create:page.users` - Create users on users page
|
|
67
|
+
- `update:page.settings` - Modify settings page
|
|
68
|
+
- `delete:page.admin` - Remove content from admin page
|
|
69
|
+
- `manage:page.system` - Full system page management
|
|
70
|
+
- `read:events` - View event information (event-app permission)
|
|
71
|
+
|
|
72
|
+
### Permission Hierarchy
|
|
73
|
+
|
|
74
|
+
Permissions follow a hierarchical structure based on organisation roles:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Organisation Admin
|
|
78
|
+
├── All page permissions (read:page.*, create:page.*, update:page.*, delete:page.*, manage:page.*)
|
|
79
|
+
├── All event-app permissions (read:events, create:events, update:events, delete:events)
|
|
80
|
+
|
|
81
|
+
Leader
|
|
82
|
+
├── Most page permissions (read:page.*, create:page.*, update:page.*)
|
|
83
|
+
├── Event management (read:events, create:events, update:events)
|
|
84
|
+
|
|
85
|
+
Member
|
|
86
|
+
├── Basic page permissions (read:page.dashboard, read:page.users)
|
|
87
|
+
├── Basic event access (read:events)
|
|
88
|
+
|
|
89
|
+
Supporter
|
|
90
|
+
├── Limited page permissions (read:page.dashboard)
|
|
91
|
+
├── No event access
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Role-Based Permission Mapping
|
|
95
|
+
|
|
96
|
+
The system uses a consolidated role-based approach where permissions are automatically assigned based on organisation roles:
|
|
97
|
+
|
|
98
|
+
- **Organisation Admin**: Full access to all organisation features
|
|
99
|
+
- **Leader**: Can moderate content and manage events
|
|
100
|
+
- **Member**: Can view basic and detailed information
|
|
101
|
+
- **Supporter**: Limited to basic viewing permissions
|
|
102
|
+
|
|
103
|
+
## Access Control Levels
|
|
104
|
+
|
|
105
|
+
### Page-Level Protection
|
|
106
|
+
|
|
107
|
+
Protect entire routes or pages based on permissions:
|
|
108
|
+
|
|
109
|
+
- **Route Guards** - Prevent access to protected routes
|
|
110
|
+
- **Permission Checks** - Validate user permissions before rendering
|
|
111
|
+
- **Redirect Logic** - Redirect unauthorized users to appropriate pages
|
|
112
|
+
|
|
113
|
+
### Component-Level Protection
|
|
114
|
+
|
|
115
|
+
Control access to specific UI components:
|
|
116
|
+
|
|
117
|
+
- **Conditional Rendering** - Show/hide components based on permissions
|
|
118
|
+
- **Action Buttons** - Enable/disable actions based on permissions
|
|
119
|
+
- **Form Fields** - Show/hide form elements based on permissions
|
|
120
|
+
|
|
121
|
+
### Data-Level Protection
|
|
122
|
+
|
|
123
|
+
Secure data access at the database level:
|
|
124
|
+
|
|
125
|
+
- **Row Level Security (RLS)** - Database-level access control
|
|
126
|
+
- **Query Filtering** - Automatically filter data based on permissions
|
|
127
|
+
- **API Protection** - Secure API endpoints with permission checks
|
|
128
|
+
|
|
129
|
+
## Permission Context
|
|
130
|
+
|
|
131
|
+
### Organisation Context
|
|
132
|
+
|
|
133
|
+
Permissions are evaluated within the context of the user's selected organisation:
|
|
134
|
+
|
|
135
|
+
- **Organisation Isolation** - Users can only access data from their selected organisation
|
|
136
|
+
- **Cross-Organisation Access** - Global roles can access multiple organisations
|
|
137
|
+
- **Organisation Switching** - Permissions update when switching organisations
|
|
138
|
+
|
|
139
|
+
### Event Context
|
|
140
|
+
|
|
141
|
+
Additional permission layer for event-specific access:
|
|
142
|
+
|
|
143
|
+
- **Event Isolation** - Users can only access data from their selected event
|
|
144
|
+
- **Event Switching** - Permissions update when switching events
|
|
145
|
+
- **Cross-Event Access** - Users can access multiple events within an organisation
|
|
146
|
+
|
|
147
|
+
### Resource Context
|
|
148
|
+
|
|
149
|
+
Permissions can be scoped to specific resources:
|
|
150
|
+
|
|
151
|
+
- **Resource Ownership** - Users can only access resources they own
|
|
152
|
+
- **Resource Sharing** - Resources can be shared with specific users or roles
|
|
153
|
+
- **Resource Hierarchy** - Permissions can inherit from parent resources
|
|
154
|
+
|
|
155
|
+
## Security Features
|
|
156
|
+
|
|
157
|
+
### Database-First Architecture
|
|
158
|
+
|
|
159
|
+
The RBAC system uses a **database-first architecture** where all permission logic resides in PostgreSQL functions:
|
|
160
|
+
|
|
161
|
+
- **RPC Functions** - All permission checks use `get_rbac_permissions()` RPC function
|
|
162
|
+
- **RLS Protection** - Direct table access is blocked by Row Level Security policies
|
|
163
|
+
- **Elevated Privileges** - RPC functions run with elevated privileges to bypass RLS
|
|
164
|
+
- **Single Source of Truth** - All permission logic centralized in database functions
|
|
165
|
+
|
|
166
|
+
### Permission Validation
|
|
167
|
+
|
|
168
|
+
- **Runtime Checking** - Permissions are validated on every request
|
|
169
|
+
- **Caching** - Permission results are cached for performance
|
|
170
|
+
- **Fallback Handling** - Graceful degradation when permissions are unavailable
|
|
171
|
+
|
|
172
|
+
### Audit Logging
|
|
173
|
+
|
|
174
|
+
- **Permission Checks** - All permission checks are logged
|
|
175
|
+
- **Access Attempts** - Failed access attempts are tracked
|
|
176
|
+
- **Permission Changes** - Role and permission modifications are audited
|
|
177
|
+
|
|
178
|
+
### Security Enforcement
|
|
179
|
+
|
|
180
|
+
- **Client-Side Protection** - UI elements are protected from unauthorized access
|
|
181
|
+
- **Server-Side Validation** - All permissions are validated server-side
|
|
182
|
+
- **Database Security** - RLS policies enforce data access control
|
|
183
|
+
|
|
184
|
+
## Role Management
|
|
185
|
+
|
|
186
|
+
The RBAC system provides dedicated database functions for managing user roles. These functions offer centralized business logic, consistent validation, and proper audit trails.
|
|
187
|
+
|
|
188
|
+
### Key Functions
|
|
189
|
+
|
|
190
|
+
- **`grant_organisation_role()`** - Grant organisation roles to users
|
|
191
|
+
- **`revoke_organisation_role()`** - Revoke organisation roles from users
|
|
192
|
+
- **`grant_global_role()`** - Grant global roles (like super_admin)
|
|
193
|
+
- **`revoke_global_role()`** - Revoke global roles
|
|
194
|
+
- **`grant_event_app_role()`** - Grant event-app specific roles
|
|
195
|
+
- **`revoke_event_app_role()`** - Revoke event-app specific roles
|
|
196
|
+
- **`get_user_roles()`** - Get all roles for a user
|
|
197
|
+
|
|
198
|
+
### Usage Example
|
|
199
|
+
|
|
200
|
+
```sql
|
|
201
|
+
-- Grant a member role to a user
|
|
202
|
+
SELECT grant_organisation_role(
|
|
203
|
+
'user-uuid-here',
|
|
204
|
+
'org-uuid-here',
|
|
205
|
+
'member',
|
|
206
|
+
auth.uid(),
|
|
207
|
+
'Welcome to the team!'
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
-- Promote user to leader
|
|
211
|
+
SELECT grant_organisation_role(
|
|
212
|
+
'user-uuid-here',
|
|
213
|
+
'org-uuid-here',
|
|
214
|
+
'leader',
|
|
215
|
+
auth.uid(),
|
|
216
|
+
'Promoted due to excellent performance'
|
|
217
|
+
);
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
For complete documentation on role management functions, see **[Role Management Functions](../rbac/role-management-functions.md)**.
|
|
221
|
+
|
|
222
|
+
## What's Next?
|
|
223
|
+
|
|
224
|
+
- **[Role Management Functions](../rbac/role-management-functions.md)** - Complete guide to role management functions
|
|
225
|
+
- **[RBAC Quick Start](../rbac/quick-start.md)** - Build your first RBAC-enabled app
|
|
226
|
+
- **[RBAC API Reference](../rbac/api-reference.md)** - Complete API documentation
|
|
227
|
+
- **[RBAC Examples](../rbac/examples.md)** - Practical usage examples
|
|
228
|
+
- **[Migration Guide](../migration/rbac-migration.md)** - Migrate from legacy RBAC
|
|
229
|
+
- **[Installation](../getting-started/installation.md)** - Get PACE Core set up
|
|
230
|
+
- **[Authentication](./authentication.md)** - Understand authentication system
|
|
231
|
+
- **[Organisations](./organisations.md)** - Learn about multi-tenancy
|
|
232
|
+
- **[Events](./events.md)** - Understand event management
|
|
233
|
+
- **[Implementation Guides](../implementation-guides/)** - Practical implementation patterns
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Database Schema Requirements
|
|
2
|
+
|
|
3
|
+
This document outlines the required database tables and schema for the `@jmruthers/pace-core` package to function correctly.
|
|
4
|
+
|
|
5
|
+
## Required Tables
|
|
6
|
+
|
|
7
|
+
### Core Tables
|
|
8
|
+
|
|
9
|
+
#### 1. `organisations`
|
|
10
|
+
```sql
|
|
11
|
+
CREATE TABLE organisations (
|
|
12
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
13
|
+
name VARCHAR(255) NOT NULL,
|
|
14
|
+
display_name VARCHAR(255) NOT NULL,
|
|
15
|
+
description TEXT,
|
|
16
|
+
parent_id UUID REFERENCES organisations(id),
|
|
17
|
+
subscription_tier VARCHAR(50) DEFAULT 'free',
|
|
18
|
+
settings JSONB DEFAULT '{}',
|
|
19
|
+
is_active BOOLEAN DEFAULT true,
|
|
20
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
21
|
+
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
22
|
+
created_by UUID REFERENCES auth.users(id),
|
|
23
|
+
updated_by UUID REFERENCES auth.users(id)
|
|
24
|
+
);
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
#### 2. `rbac_organisation_roles` (Main RBAC Table)
|
|
28
|
+
```sql
|
|
29
|
+
CREATE TABLE rbac_organisation_roles (
|
|
30
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
31
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
32
|
+
organisation_id UUID NOT NULL REFERENCES public.organisations(id) ON DELETE CASCADE,
|
|
33
|
+
role rbac_organisation_role NOT NULL, -- ENUM: 'supporter', 'member', 'leader', 'org_admin'
|
|
34
|
+
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'suspended')),
|
|
35
|
+
granted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
36
|
+
granted_by UUID REFERENCES auth.users(id),
|
|
37
|
+
revoked_at TIMESTAMP WITH TIME ZONE,
|
|
38
|
+
revoked_by UUID REFERENCES auth.users(id),
|
|
39
|
+
notes TEXT,
|
|
40
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
41
|
+
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
42
|
+
valid_from TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
43
|
+
valid_to TIMESTAMP WITH TIME ZONE
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
-- Enable RLS
|
|
47
|
+
ALTER TABLE rbac_organisation_roles ENABLE ROW LEVEL SECURITY;
|
|
48
|
+
|
|
49
|
+
-- RLS Policy: Users can only see their own roles
|
|
50
|
+
CREATE POLICY "Users can view own roles" ON rbac_organisation_roles
|
|
51
|
+
FOR SELECT USING (user_id = auth.uid());
|
|
52
|
+
|
|
53
|
+
-- RLS Policy: Organisation admins can view all roles in their organisation
|
|
54
|
+
CREATE POLICY "Org admins can view all roles" ON rbac_organisation_roles
|
|
55
|
+
FOR SELECT USING (
|
|
56
|
+
EXISTS (
|
|
57
|
+
SELECT 1 FROM rbac_organisation_roles ror
|
|
58
|
+
WHERE ror.user_id = auth.uid()
|
|
59
|
+
AND ror.organisation_id = rbac_organisation_roles.organisation_id
|
|
60
|
+
AND ror.role IN ('org_admin', 'leader')
|
|
61
|
+
AND ror.status = 'active'
|
|
62
|
+
AND ror.revoked_at IS NULL
|
|
63
|
+
)
|
|
64
|
+
);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### 3. `user_organisation_memberships` (View)
|
|
68
|
+
```sql
|
|
69
|
+
-- This is a VIEW, not a table - it provides membership interface
|
|
70
|
+
CREATE VIEW user_organisation_memberships AS
|
|
71
|
+
SELECT DISTINCT
|
|
72
|
+
r.user_id,
|
|
73
|
+
r.organisation_id
|
|
74
|
+
FROM rbac_organisation_roles r
|
|
75
|
+
WHERE r.status = 'active'
|
|
76
|
+
AND r.revoked_at IS NULL
|
|
77
|
+
AND r.role IN ('org_admin', 'leader', 'member', 'supporter');
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### 4. `rbac_active_organisation_roles` (View)
|
|
81
|
+
```sql
|
|
82
|
+
-- This is a VIEW, not a table - it provides active role filtering
|
|
83
|
+
CREATE VIEW rbac_active_organisation_roles AS
|
|
84
|
+
SELECT
|
|
85
|
+
rbac_organisation_roles.id,
|
|
86
|
+
rbac_organisation_roles.user_id,
|
|
87
|
+
rbac_organisation_roles.organisation_id,
|
|
88
|
+
rbac_organisation_roles.role,
|
|
89
|
+
rbac_organisation_roles.status,
|
|
90
|
+
rbac_organisation_roles.granted_at,
|
|
91
|
+
rbac_organisation_roles.granted_by,
|
|
92
|
+
rbac_organisation_roles.revoked_at,
|
|
93
|
+
rbac_organisation_roles.revoked_by,
|
|
94
|
+
rbac_organisation_roles.notes,
|
|
95
|
+
rbac_organisation_roles.created_at,
|
|
96
|
+
rbac_organisation_roles.updated_at,
|
|
97
|
+
rbac_organisation_roles.valid_from,
|
|
98
|
+
rbac_organisation_roles.valid_to
|
|
99
|
+
FROM rbac_organisation_roles
|
|
100
|
+
WHERE rbac_organisation_roles.status = 'active'
|
|
101
|
+
AND rbac_organisation_roles.valid_from <= now()
|
|
102
|
+
AND (rbac_organisation_roles.valid_to IS NULL OR rbac_organisation_roles.valid_to > now());
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### RBAC System Architecture
|
|
106
|
+
|
|
107
|
+
The RBAC system uses a **single source of truth** approach:
|
|
108
|
+
|
|
109
|
+
1. **`rbac_organisation_roles`** - Main table storing all role assignments
|
|
110
|
+
2. **`user_organisation_memberships`** - View providing membership interface
|
|
111
|
+
3. **`rbac_active_organisation_roles`** - View providing active role filtering
|
|
112
|
+
|
|
113
|
+
### Important Notes
|
|
114
|
+
|
|
115
|
+
- **DO NOT** create a separate `organisation_memberships` table - it's redundant
|
|
116
|
+
- All functions use `user_organisation_memberships` view for membership checks
|
|
117
|
+
- All functions use `rbac_organisation_roles` table for role management
|
|
118
|
+
- Views inherit RLS policies from the underlying `rbac_organisation_roles` table
|
|
119
|
+
|
|
120
|
+
## Required RPC Functions
|
|
121
|
+
|
|
122
|
+
The following RPC functions are required and should be updated to use the correct tables/views:
|
|
123
|
+
|
|
124
|
+
1. `get_pace_user_events(user_uuid, app_name, p_organisation_id)`
|
|
125
|
+
2. `has_organisation_role(p_user_id, p_organisation_id, p_role_name)`
|
|
126
|
+
3. `user_has_role_in_org(user_id, org_id, required_role)`
|
|
127
|
+
4. `get_user_organisations(p_user_id)`
|
|
128
|
+
5. `get_user_organisation_ids(user_id)`
|
|
129
|
+
6. `user_has_min_role_in_org(user_id, org_id, min_role)`
|
|
130
|
+
7. `accept_organisation_invitation(p_invitation_id)`
|
|
131
|
+
8. `grant_organisation_role(p_user_id, p_organisation_id, p_role, p_granted_by, p_notes)`
|
|
132
|
+
9. `revoke_organisation_role(p_user_id, p_organisation_id, p_revoked_by, p_reason)`
|
|
133
|
+
10. `create_organisation_invitation(p_organisation_id, p_email, p_role)`
|
|
134
|
+
|
|
135
|
+
## Migration Script
|
|
136
|
+
|
|
137
|
+
Use the migration script `20250115000001_fix_organisation_memberships_references.sql` to update all functions to use the correct tables/views.
|
|
138
|
+
|
|
139
|
+
## Setup Instructions
|
|
140
|
+
|
|
141
|
+
1. Apply the migration script to update all RPC functions
|
|
142
|
+
2. Ensure RLS policies are enabled on `rbac_organisation_roles`
|
|
143
|
+
3. Verify that views are created correctly
|
|
144
|
+
4. Test the RBAC system with the updated functions
|
|
145
|
+
|
|
146
|
+
## Troubleshooting
|
|
147
|
+
|
|
148
|
+
### Common Issues
|
|
149
|
+
|
|
150
|
+
1. **"relation organisation_memberships does not exist"** - This means functions are still referencing the old table name. Apply the migration script.
|
|
151
|
+
|
|
152
|
+
2. **RLS Policy Violations** - Ensure RLS is enabled on `rbac_organisation_roles` and policies are correctly configured.
|
|
153
|
+
|
|
154
|
+
3. **Permission Denied** - Check that users have the correct roles in `rbac_organisation_roles` table.
|
|
155
|
+
|
|
156
|
+
### Verification Queries
|
|
157
|
+
|
|
158
|
+
```sql
|
|
159
|
+
-- Check if views exist
|
|
160
|
+
SELECT table_name, table_type FROM information_schema.tables
|
|
161
|
+
WHERE table_schema = 'public'
|
|
162
|
+
AND table_name IN ('user_organisation_memberships', 'rbac_active_organisation_roles');
|
|
163
|
+
|
|
164
|
+
-- Check RLS status
|
|
165
|
+
SELECT schemaname, tablename, rowsecurity as rls_enabled
|
|
166
|
+
FROM pg_tables
|
|
167
|
+
WHERE schemaname = 'public'
|
|
168
|
+
AND tablename = 'rbac_organisation_roles';
|
|
169
|
+
|
|
170
|
+
-- Test membership view
|
|
171
|
+
SELECT * FROM user_organisation_memberships LIMIT 5;
|
|
172
|
+
```
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Documentation Style Checklist
|
|
2
|
+
|
|
3
|
+
> **📝 Consistency Guide** | [Style Guide](./style-guide.md) | [Quick Reference](./quick-reference.md)
|
|
4
|
+
|
|
5
|
+
Comprehensive checklist for maintaining consistent, high-quality documentation across PACE Core.
|
|
6
|
+
|
|
7
|
+
## 📋 Content Quality Checklist
|
|
8
|
+
|
|
9
|
+
### ✅ **Code Examples**
|
|
10
|
+
|
|
11
|
+
- [ ] **Complete Examples** - All code examples are runnable and complete
|
|
12
|
+
- [ ] **Error Handling** - Examples include proper error handling
|
|
13
|
+
- [ ] **TypeScript** - All examples use TypeScript with proper types
|
|
14
|
+
- [ ] **Imports** - All necessary imports are shown
|
|
15
|
+
- [ ] **Comments** - Complex logic is explained with comments
|
|
16
|
+
- [ ] **Best Practices** - Examples follow PACE Core best practices
|
|
17
|
+
|
|
18
|
+
**Example:**
|
|
19
|
+
```tsx
|
|
20
|
+
// ✅ Good - Complete, runnable example
|
|
21
|
+
import React, { useState } from 'react';
|
|
22
|
+
import { DataTable, Button } from '@jmruthers/pace-core';
|
|
23
|
+
|
|
24
|
+
// Import the core CSS file (in your app's entry point)
|
|
25
|
+
import './app.css'; // Your app's color palette (must come first)
|
|
26
|
+
import '@jmruthers/pace-core/styles/core.css';
|
|
27
|
+
|
|
28
|
+
interface User {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
email: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function MyComponent() {
|
|
35
|
+
const [data, setData] = useState<User[]>([]);
|
|
36
|
+
|
|
37
|
+
const handleAddUser = () => {
|
|
38
|
+
setData([...data, { id: Date.now().toString(), name: 'New User', email: 'user@example.com' }]);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<div>
|
|
43
|
+
<Button onClick={handleAddUser}>Add User</Button>
|
|
44
|
+
<DataTable data={data} columns={[]} />
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### ✅ **Consistency**
|
|
51
|
+
|
|
52
|
+
- [ ] **Package Name** - Always use `@jmruthers/pace-core`
|
|
53
|
+
- [ ] **Terminology** - Consistent use of technical terms
|
|
54
|
+
- [ ] **Formatting** - Follow the established style guide
|
|
55
|
+
- [ ] **Cross-references** - Links are accurate and helpful
|
|
56
|
+
- [ ] **File Naming** - Use kebab-case for file names
|
|
57
|
+
- [ ] **Headings** - Use consistent heading hierarchy
|
|
58
|
+
|
|
59
|
+
### ✅ **Developer Experience**
|
|
60
|
+
|
|
61
|
+
- [ ] **Quick Start** - Can get started in 5 minutes
|
|
62
|
+
- [ ] **Clear Navigation** - Easy to find information
|
|
63
|
+
- [ ] **Practical Examples** - Real-world use cases
|
|
64
|
+
- [ ] **Troubleshooting** - Common issues are addressed
|
|
65
|
+
- [ ] **Cross-references** - Helpful links to related content
|
|
66
|
+
- [ ] **Table of Contents** - Clear navigation structure
|
|
67
|
+
|
|
68
|
+
## 📝 Writing Guidelines
|
|
69
|
+
|
|
70
|
+
### ✅ **Structure**
|
|
71
|
+
|
|
72
|
+
- [ ] **Clear Introduction** - Explain what the document covers
|
|
73
|
+
- [ ] **Logical Flow** - Information flows logically from basic to advanced
|
|
74
|
+
- [ ] **Scannable** - Use headings, lists, and code blocks effectively
|
|
75
|
+
- [ ] **Complete** - All necessary information is included
|
|
76
|
+
- [ ] **Accurate** - Information is correct and up-to-date
|
|
77
|
+
|
|
78
|
+
### ✅ **Language**
|
|
79
|
+
|
|
80
|
+
- [ ] **Clear and Concise** - Avoid unnecessary jargon
|
|
81
|
+
- [ ] **Active Voice** - Use active voice when possible
|
|
82
|
+
- [ ] **Consistent Tone** - Professional but approachable
|
|
83
|
+
- [ ] **Proper Grammar** - Correct spelling and grammar
|
|
84
|
+
- [ ] **Inclusive Language** - Use inclusive terminology
|
|
85
|
+
|
|
86
|
+
### ✅ **Formatting**
|
|
87
|
+
|
|
88
|
+
- [ ] **Markdown Standards** - Follow standard Markdown formatting
|
|
89
|
+
- [ ] **Code Blocks** - Use proper language tags for syntax highlighting
|
|
90
|
+
- [ ] **Lists** - Use consistent list formatting
|
|
91
|
+
- [ ] **Tables** - Use tables for structured data
|
|
92
|
+
- [ ] **Callouts** - Use callouts for important information
|
|
93
|
+
|
|
94
|
+
## 🔗 Cross-Reference Guidelines
|
|
95
|
+
|
|
96
|
+
### ✅ **Internal Links**
|
|
97
|
+
|
|
98
|
+
- [ ] **Relative Paths** - Use relative paths for internal links
|
|
99
|
+
- [ ] **Descriptive Text** - Link text describes the destination
|
|
100
|
+
- [ ] **Valid Links** - All links work and point to correct content
|
|
101
|
+
- [ ] **Context** - Links provide helpful context
|
|
102
|
+
- [ ] **Breadcrumbs** - Include navigation breadcrumbs
|
|
103
|
+
|
|
104
|
+
**Example:**
|
|
105
|
+
```markdown
|
|
106
|
+
[← Back to Documentation](./README.md) | [↑ Table of Contents](#table-of-contents) | [Next: Getting Started →](./getting-started/quick-start.md)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### ✅ **External Links**
|
|
110
|
+
|
|
111
|
+
- [ ] **Descriptive Text** - Link text describes the destination
|
|
112
|
+
- [ ] **Valid URLs** - All external links work
|
|
113
|
+
- [ ] **Security** - Use HTTPS when possible
|
|
114
|
+
- [ ] **Context** - Explain why the link is relevant
|
|
115
|
+
- [ ] **Opening** - Consider if links should open in new tabs
|
|
116
|
+
|
|
117
|
+
## 📊 Code Example Standards
|
|
118
|
+
|
|
119
|
+
### ✅ **Import Statements**
|
|
120
|
+
|
|
121
|
+
```tsx
|
|
122
|
+
// ✅ Good - Complete imports
|
|
123
|
+
import React, { useState, useEffect } from 'react';
|
|
124
|
+
import { DataTable, Button, useUnifiedAuth } from '@jmruthers/pace-core';
|
|
125
|
+
|
|
126
|
+
// Import the core CSS file (in your app's entry point)
|
|
127
|
+
import './app.css'; // Your app's color palette (must come first)
|
|
128
|
+
import '@jmruthers/pace-core/styles/core.css';
|
|
129
|
+
|
|
130
|
+
// ❌ Bad - Incomplete imports
|
|
131
|
+
import { DataTable } from '@jmruthers/pace-core';
|
|
132
|
+
// Missing React import and styles
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### ✅ **TypeScript Usage**
|
|
136
|
+
|
|
137
|
+
```tsx
|
|
138
|
+
// ✅ Good - Proper TypeScript
|
|
139
|
+
interface User {
|
|
140
|
+
id: string;
|
|
141
|
+
name: string;
|
|
142
|
+
email: string;
|
|
143
|
+
role: 'admin' | 'user';
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function UserComponent({ user }: { user: User }) {
|
|
147
|
+
return <div>{user.name}</div>;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// ❌ Bad - Missing types
|
|
151
|
+
function UserComponent({ user }) {
|
|
152
|
+
return <div>{user.name}</div>;
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### ✅ **Error Handling**
|
|
157
|
+
|
|
158
|
+
```tsx
|
|
159
|
+
// ✅ Good - Proper error handling
|
|
160
|
+
function MyComponent() {
|
|
161
|
+
const { user, loading, error } = useUnifiedAuth();
|
|
162
|
+
|
|
163
|
+
if (loading) return <div>Loading...</div>;
|
|
164
|
+
if (error) return <div>Error: {error.message}</div>;
|
|
165
|
+
if (!user) return <div>Please sign in</div>;
|
|
166
|
+
|
|
167
|
+
return <div>Welcome, {user.email}!</div>;
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## 🎯 Documentation Types
|
|
172
|
+
|
|
173
|
+
### ✅ **Getting Started Guides**
|
|
174
|
+
|
|
175
|
+
- [ ] **Clear Prerequisites** - List what's needed before starting
|
|
176
|
+
- [ ] **Step-by-step** - Break down complex processes
|
|
177
|
+
- [ ] **Verification** - Show how to verify each step
|
|
178
|
+
- [ ] **Troubleshooting** - Address common issues
|
|
179
|
+
- [ ] **Next Steps** - Guide users to next learning
|
|
180
|
+
|
|
181
|
+
### ✅ **API Reference**
|
|
182
|
+
|
|
183
|
+
- [ ] **Complete Props** - Document all props and their types
|
|
184
|
+
- [ ] **Usage Examples** - Show practical usage
|
|
185
|
+
- [ ] **Default Values** - Document default values
|
|
186
|
+
- [ ] **Deprecation** - Mark deprecated features
|
|
187
|
+
- [ ] **Version Info** - Include version information
|
|
188
|
+
|
|
189
|
+
### ✅ **Implementation Guides**
|
|
190
|
+
|
|
191
|
+
- [ ] **Real-world Examples** - Use practical scenarios
|
|
192
|
+
- [ ] **Best Practices** - Include recommended patterns
|
|
193
|
+
- [ ] **Common Pitfalls** - Warn about common mistakes
|
|
194
|
+
- [ ] **Performance Tips** - Include optimization advice
|
|
195
|
+
- [ ] **Accessibility** - Consider accessibility requirements
|
|
196
|
+
|
|
197
|
+
## 🔍 Review Process
|
|
198
|
+
|
|
199
|
+
### ✅ **Self-Review**
|
|
200
|
+
|
|
201
|
+
- [ ] **Read Aloud** - Read the document aloud for clarity
|
|
202
|
+
- [ ] **Test Examples** - Verify all code examples work
|
|
203
|
+
- [ ] **Check Links** - Verify all links work
|
|
204
|
+
- [ ] **Spell Check** - Use spell check tools
|
|
205
|
+
- [ ] **Grammar Check** - Use grammar check tools
|
|
206
|
+
|
|
207
|
+
### ✅ **Peer Review**
|
|
208
|
+
|
|
209
|
+
- [ ] **Technical Accuracy** - Have a developer review
|
|
210
|
+
- [ ] **Clarity** - Have a non-technical person review
|
|
211
|
+
- [ ] **Completeness** - Ensure all necessary information is included
|
|
212
|
+
- [ ] **Consistency** - Check against style guide
|
|
213
|
+
- [ ] **Accessibility** - Ensure content is accessible
|
|
214
|
+
|
|
215
|
+
## 📚 Style Guide References
|
|
216
|
+
|
|
217
|
+
### ✅ **Markdown Standards**
|
|
218
|
+
|
|
219
|
+
- [ ] **Headings** - Use proper heading hierarchy (H1 → H2 → H3)
|
|
220
|
+
- [ ] **Lists** - Use consistent list formatting
|
|
221
|
+
- [ ] **Code Blocks** - Use proper language tags
|
|
222
|
+
- [ ] **Tables** - Use proper table formatting
|
|
223
|
+
- [ ] **Links** - Use descriptive link text
|
|
224
|
+
|
|
225
|
+
### ✅ **Code Standards**
|
|
226
|
+
|
|
227
|
+
- [ ] **TypeScript** - Use TypeScript for all examples
|
|
228
|
+
- [ ] **Imports** - Include all necessary imports
|
|
229
|
+
- [ ] **Error Handling** - Include proper error handling
|
|
230
|
+
- [ ] **Comments** - Add comments for complex logic
|
|
231
|
+
- [ ] **Formatting** - Use consistent code formatting
|
|
232
|
+
|
|
233
|
+
## 🚀 Publishing Checklist
|
|
234
|
+
|
|
235
|
+
### ✅ **Before Publishing**
|
|
236
|
+
|
|
237
|
+
- [ ] **Content Review** - All content reviewed and approved
|
|
238
|
+
- [ ] **Link Check** - All links verified
|
|
239
|
+
- [ ] **Code Review** - All code examples tested
|
|
240
|
+
- [ ] **Style Check** - Follows style guide
|
|
241
|
+
- [ ] **Accessibility** - Content is accessible
|
|
242
|
+
|
|
243
|
+
### ✅ **After Publishing**
|
|
244
|
+
|
|
245
|
+
- [ ] **Link Verification** - Verify all links work
|
|
246
|
+
- [ ] **User Feedback** - Monitor for user feedback
|
|
247
|
+
- [ ] **Update Schedule** - Plan regular updates
|
|
248
|
+
- [ ] **Version Control** - Track changes
|
|
249
|
+
- [ ] **Analytics** - Monitor usage and engagement
|
|
250
|
+
|
|
251
|
+
## 📋 Maintenance Schedule
|
|
252
|
+
|
|
253
|
+
### ✅ **Regular Reviews**
|
|
254
|
+
|
|
255
|
+
- [ ] **Monthly** - Review for accuracy and updates
|
|
256
|
+
- [ ] **Quarterly** - Comprehensive content review
|
|
257
|
+
- [ ] **Annually** - Full documentation audit
|
|
258
|
+
- [ ] **As Needed** - Update when features change
|
|
259
|
+
- [ ] **User Feedback** - Address user-reported issues
|
|
260
|
+
|
|
261
|
+
### ✅ **Update Triggers**
|
|
262
|
+
|
|
263
|
+
- [ ] **New Features** - Update when new features are added
|
|
264
|
+
- [ ] **Breaking Changes** - Update when breaking changes occur
|
|
265
|
+
- [ ] **Bug Fixes** - Update when bugs are fixed
|
|
266
|
+
- [ ] **User Questions** - Update based on common questions
|
|
267
|
+
- [ ] **Performance Issues** - Update when performance improves
|
|
268
|
+
|
|
269
|
+
## 🆘 Common Issues
|
|
270
|
+
|
|
271
|
+
### ❌ **Avoid These Mistakes**
|
|
272
|
+
|
|
273
|
+
- **Incomplete Examples** - Don't show partial code without context
|
|
274
|
+
- **Missing Imports** - Always include necessary imports
|
|
275
|
+
- **Outdated Information** - Keep information current
|
|
276
|
+
- **Broken Links** - Verify all links work
|
|
277
|
+
- **Inconsistent Terminology** - Use consistent terms throughout
|
|
278
|
+
|
|
279
|
+
### ✅ **Best Practices**
|
|
280
|
+
|
|
281
|
+
- **Start Simple** - Begin with basic examples
|
|
282
|
+
- **Build Complexity** - Progress to more complex examples
|
|
283
|
+
- **Explain Why** - Explain the reasoning behind decisions
|
|
284
|
+
- **Show Alternatives** - Provide alternative approaches
|
|
285
|
+
- **Include Context** - Provide enough context for understanding
|
|
286
|
+
|
|
287
|
+
## 📚 Additional Resources
|
|
288
|
+
|
|
289
|
+
- **[Style Guide](./style-guide.md)** - Detailed style guidelines
|
|
290
|
+
- **[Quick Reference](./quick-reference.md)** - Quick reference for common tasks
|
|
291
|
+
- **[Examples](../getting-started/examples/)** - Complete working examples
|
|
292
|
+
- **[Troubleshooting](../troubleshooting/)** - Common issues and solutions
|
|
293
|
+
|
|
294
|
+
Remember: **Good documentation is a product, not an afterthought!**
|