@jmruthers/pace-core 0.2.6 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -26
- package/README.md +229 -231
- package/dist/{DataTable-EEUDXPE5.js → DataTable-2LB6HI6V.js} +17 -10
- package/dist/{DataTable-C1AEm9Cx.d.ts → DataTable-BDBqkU-i.d.ts} +51 -23
- package/dist/{PublicLoadingSpinner-DztrzuJr.d.ts → Table-CIm9IWqk.d.ts} +122 -635
- package/dist/UnifiedAuthProvider-V7y63NjT.d.ts +88 -0
- package/dist/{api-ETQ6YJ3C.js → api-AIJ3IJX3.js} +4 -6
- package/dist/{appConfig-BVGyuvI7.d.ts → appConfig-fB1pP_v3.d.ts} +1 -1
- package/dist/{audit-BUW3LMJB.js → audit-PD5L5ZSC.js} +3 -3
- package/dist/{chunk-ETEJVKYK.js → chunk-4MCJAK7J.js} +4927 -504
- package/dist/chunk-4MCJAK7J.js.map +1 -0
- package/dist/{chunk-CDQ3PX7L.js → chunk-4ZTIEYU2.js} +1 -1
- package/dist/chunk-4ZTIEYU2.js.map +1 -0
- package/dist/{chunk-PLDDJCW6.js → chunk-DC5AMYBS.js} +5 -15
- package/dist/{chunk-HEMJ4SUJ.js → chunk-H4PZ4B3Y.js} +27 -124
- package/dist/chunk-H4PZ4B3Y.js.map +1 -0
- package/dist/{chunk-HNDFPXUU.js → chunk-IOX76PSM.js} +28 -270
- package/dist/chunk-IOX76PSM.js.map +1 -0
- package/dist/{chunk-TIVL4UQ7.js → chunk-JUUNUW3O.js} +5 -14
- package/dist/chunk-JUUNUW3O.js.map +1 -0
- package/dist/chunk-KK6WIDK6.js +63 -0
- package/dist/chunk-KK6WIDK6.js.map +1 -0
- package/dist/chunk-U7DY5T33.js +11 -0
- package/dist/chunk-U7DY5T33.js.map +1 -0
- package/dist/{chunk-SS3E6QLB.js → chunk-WHLSWC6W.js} +61 -16
- package/dist/chunk-WHLSWC6W.js.map +1 -0
- package/dist/chunk-XI7QFSSC.js +790 -0
- package/dist/chunk-XI7QFSSC.js.map +1 -0
- package/dist/chunk-XIJMMBDD.js +73 -0
- package/dist/chunk-XIJMMBDD.js.map +1 -0
- package/dist/{chunk-7BNPOCLL.js → chunk-YNU5QJ4S.js} +5 -22
- package/dist/chunk-YNU5QJ4S.js.map +1 -0
- package/dist/chunk-YWYCNGWH.js +2070 -0
- package/dist/chunk-YWYCNGWH.js.map +1 -0
- package/dist/chunk-ZJ3UKPIW.js +952 -0
- package/dist/chunk-ZJ3UKPIW.js.map +1 -0
- package/dist/components.d.ts +10 -906
- package/dist/components.js +77 -3255
- package/dist/components.js.map +1 -1
- package/dist/{database-C3Szpi5J.d.ts → database-CAMsquLm.d.ts} +11 -28
- package/dist/hooks.d.ts +6 -7
- package/dist/hooks.js +11 -35
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +111 -245
- package/dist/index.js +178 -187
- package/dist/index.js.map +1 -1
- package/dist/{organisation-CO3Sh3_D.d.ts → organisation-DLNNQhPB.d.ts} +1 -1
- package/dist/providers.d.ts +4 -4
- package/dist/providers.js +5 -19
- package/dist/rbac/index.d.ts +5 -61
- package/dist/rbac/index.js +93 -256
- package/dist/rbac/index.js.map +1 -1
- package/dist/{types-DiRQsGJs.d.ts → types-Bavn44NW.d.ts} +36 -71
- package/dist/types.d.ts +5 -5
- package/dist/types.js +2 -7
- package/dist/types.js.map +1 -1
- package/dist/{unified-CM7T0aTK.d.ts → unified-BtRpPbmp.d.ts} +2 -1
- package/dist/useAppConfig-CZNJJsT_.d.ts +148 -0
- package/dist/utils.d.ts +60 -83
- package/dist/utils.js +55633 -277
- package/dist/utils.js.map +1 -1
- package/dist/validation.d.ts +1 -1
- package/dist/validation.js +1 -1
- package/docs/README.md +32 -46
- package/docs/api/README.md +229 -231
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- package/docs/api/interfaces/ButtonProps.md +2 -2
- package/docs/api/interfaces/CardProps.md +2 -2
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +7 -85
- package/docs/api/interfaces/DataTableColumn.md +12 -131
- package/docs/api/interfaces/DataTableProps.md +274 -64
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- package/docs/api/interfaces/EventContextType.md +7 -7
- package/docs/api/interfaces/EventProviderProps.md +2 -2
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +2 -2
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +26 -26
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/StyleImport.md +2 -2
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +46 -447
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +9 -95
- package/docs/api/interfaces/UserEventAccess.md +14 -14
- package/docs/api/interfaces/UserMenuProps.md +6 -6
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +773 -1631
- package/docs/api-reference/components.md +43 -761
- package/docs/api-reference/hooks.md +0 -126
- package/docs/api-reference/providers.md +65 -141
- package/docs/api-reference/types.md +36 -66
- package/docs/api-reference/utilities.md +1 -1
- package/docs/architecture/README.md +2 -1
- package/docs/consuming-app-example.md +96 -42
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +1 -0
- package/docs/core-concepts/rbac-system.md +10 -23
- package/docs/documentation-style-checklist.md +2 -8
- package/docs/getting-started/examples/README.md +1 -15
- package/docs/getting-started/examples/basic-auth-app.md +119 -444
- package/docs/getting-started/examples/full-featured-app.md +6 -6
- package/docs/getting-started/installation.md +52 -231
- package/docs/getting-started/quick-start.md +24 -121
- package/docs/implementation-guides/app-layout.md +108 -133
- package/docs/implementation-guides/data-tables.md +29 -1011
- package/docs/implementation-guides/forms.md +3 -3
- package/docs/implementation-guides/large-datasets.md +2 -2
- package/docs/implementation-guides/navigation.md +1 -1
- package/docs/implementation-guides/permission-enforcement.md +4 -4
- package/docs/migration/README.md +8 -18
- package/docs/migration/rbac-migration.md +0 -50
- package/docs/migration-guide.md +104 -51
- package/docs/performance/README.md +4 -1
- package/docs/quick-reference.md +36 -53
- package/docs/rbac/README.md +69 -136
- package/docs/rbac/api-reference.md +8 -39
- package/docs/rbac/examples.md +66 -237
- package/docs/rbac/getting-started.md +16 -131
- package/docs/rbac/quick-start.md +323 -499
- package/docs/rbac/troubleshooting.md +262 -240
- package/docs/security/README.md +1 -50
- package/docs/styles/README.md +117 -143
- package/docs/testing/README.md +10 -6
- package/docs/troubleshooting/common-issues.md +14 -604
- package/docs/usage.md +90 -28
- package/docs/visual-testing.md +7 -0
- package/package.json +24 -43
- package/dist/UnifiedAuthProvider-w66zSCUf.d.ts +0 -160
- package/dist/appNameResolver-7GHF5ED2.js +0 -22
- package/dist/chunk-2V3Y6YBC.js +0 -114
- package/dist/chunk-2V3Y6YBC.js.map +0 -1
- package/dist/chunk-7BNPOCLL.js.map +0 -1
- package/dist/chunk-BEZRLNK3.js +0 -1744
- package/dist/chunk-BEZRLNK3.js.map +0 -1
- package/dist/chunk-C5G2A4PO.js +0 -1349
- package/dist/chunk-C5G2A4PO.js.map +0 -1
- package/dist/chunk-CDQ3PX7L.js.map +0 -1
- package/dist/chunk-ETEJVKYK.js.map +0 -1
- package/dist/chunk-EWKPTNPO.js +0 -5139
- package/dist/chunk-EWKPTNPO.js.map +0 -1
- package/dist/chunk-HEMJ4SUJ.js.map +0 -1
- package/dist/chunk-HNDFPXUU.js.map +0 -1
- package/dist/chunk-MZBUOP4P.js +0 -119
- package/dist/chunk-MZBUOP4P.js.map +0 -1
- package/dist/chunk-N2EUGZRW.js +0 -98
- package/dist/chunk-N2EUGZRW.js.map +0 -1
- package/dist/chunk-NQ4TOOO6.js +0 -20
- package/dist/chunk-NQ4TOOO6.js.map +0 -1
- package/dist/chunk-OHXGNT3K.js +0 -21
- package/dist/chunk-OHXGNT3K.js.map +0 -1
- package/dist/chunk-PLDDJCW6.js.map +0 -1
- package/dist/chunk-RRUYHORU.js +0 -3431
- package/dist/chunk-RRUYHORU.js.map +0 -1
- package/dist/chunk-SS3E6QLB.js.map +0 -1
- package/dist/chunk-TIVL4UQ7.js.map +0 -1
- package/dist/chunk-VYG4AXYW.js +0 -388
- package/dist/chunk-VYG4AXYW.js.map +0 -1
- package/dist/chunk-YDJW5XTN.js +0 -84
- package/dist/chunk-YDJW5XTN.js.map +0 -1
- package/dist/styles/core.css +0 -401
- package/dist/styles/fonts/georama-italic.woff2 +0 -0
- package/dist/styles/fonts/georama.woff2 +0 -0
- package/dist/styles/fonts/open-sans-italic.woff2 +0 -0
- package/dist/styles/fonts/open-sans.woff2 +0 -0
- package/dist/styles/fonts/reddit-mono.woff2 +0 -0
- package/dist/styles/index.d.ts +0 -36
- package/dist/styles/index.js +0 -24
- package/dist/styles/index.js.map +0 -1
- package/dist/theming/runtime.d.ts +0 -73
- package/dist/theming/runtime.js +0 -16
- package/dist/theming/runtime.js.map +0 -1
- package/dist/usePublicRouteParams-B6i0KtXW.d.ts +0 -477
- package/docs/INDEX.md +0 -192
- package/docs/api/classes/PublicErrorBoundary.md +0 -132
- package/docs/api/interfaces/EventLogoProps.md +0 -152
- package/docs/api/interfaces/FileSizeLimits.md +0 -7
- package/docs/api/interfaces/FileUploadProps.md +0 -154
- package/docs/api/interfaces/InactivityWarningModalProps.md +0 -115
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
- package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
- package/docs/api/interfaces/PublicPageFooterProps.md +0 -112
- package/docs/api/interfaces/PublicPageHeaderProps.md +0 -138
- package/docs/api/interfaces/PublicPageLayoutProps.md +0 -138
- package/docs/api/interfaces/StorageConfig.md +0 -41
- package/docs/api/interfaces/StorageFileInfo.md +0 -74
- package/docs/api/interfaces/StorageFileMetadata.md +0 -140
- package/docs/api/interfaces/StorageListOptions.md +0 -86
- package/docs/api/interfaces/StorageListResult.md +0 -41
- package/docs/api/interfaces/StorageUploadOptions.md +0 -88
- package/docs/api/interfaces/StorageUploadResult.md +0 -63
- package/docs/api/interfaces/StorageUrlOptions.md +0 -47
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +0 -136
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +0 -123
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +0 -87
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +0 -81
- package/docs/api/interfaces/UsePublicEventOptions.md +0 -34
- package/docs/api/interfaces/UsePublicEventReturn.md +0 -68
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +0 -94
- package/docs/best-practices/README.md +0 -400
- package/docs/consuming-app-vite-config.md +0 -233
- package/docs/examples/navigation-menu-auth-fix.md +0 -344
- package/docs/implementation-guides/hierarchical-datatable.md +0 -850
- package/docs/implementation-guides/public-pages.md +0 -752
- package/docs/migration/quick-migration-guide.md +0 -320
- package/docs/migration/v0.4.15-tailwind-scanning.md +0 -272
- package/docs/migration/v0.4.16-css-first-approach.md +0 -306
- package/docs/migration/v0.4.17-source-path-fix.md +0 -229
- package/docs/print-components/README.md +0 -258
- package/docs/print-components/api-reference.md +0 -636
- package/docs/print-components/examples/README.md +0 -204
- package/docs/print-components/examples/basic-report.tsx +0 -92
- package/docs/print-components/examples/card-catalog.tsx +0 -149
- package/docs/print-components/examples/cover-page-report.tsx +0 -163
- package/docs/print-components/quick-start.md +0 -363
- package/docs/troubleshooting/README.md +0 -497
- package/docs/troubleshooting/styling-issues.md +0 -219
- package/docs/troubleshooting/tailwind-content-scanning.md +0 -213
- package/src/__mocks__/lucide-react.ts +0 -181
- package/src/__tests__/README.md +0 -404
- package/src/__tests__/debug-provider.unit.test.tsx +0 -67
- package/src/__tests__/e2e/workflows.test.tsx +0 -373
- package/src/__tests__/hybridPermissions.unit.test.tsx +0 -474
- package/src/__tests__/index.integration.test.ts +0 -491
- package/src/__tests__/mocks/MockAuthProvider-standalone.tsx +0 -47
- package/src/__tests__/mocks/MockAuthProvider.tsx +0 -63
- package/src/__tests__/mocks/enhancedSupabaseMock.ts +0 -252
- package/src/__tests__/mocks/index.test.ts +0 -23
- package/src/__tests__/mocks/index.ts +0 -16
- package/src/__tests__/mocks/mockAuth.ts +0 -155
- package/src/__tests__/mocks/mockSupabase.ts +0 -83
- package/src/__tests__/mocks/mockSupabaseClient.ts +0 -63
- package/src/__tests__/mocks/providers.tsx +0 -22
- package/src/__tests__/patterns/__tests__/testPatterns.test.ts +0 -394
- package/src/__tests__/patterns/testPatterns.ts +0 -124
- package/src/__tests__/performance/componentPerformance.performance.test.ts +0 -27
- package/src/__tests__/performance/index.ts +0 -24
- package/src/__tests__/performance/performanceValidation.performance.test.ts +0 -15
- package/src/__tests__/security/security.unit.test.tsx +0 -7
- package/src/__tests__/security/securityValidation.security.test.tsx +0 -153
- package/src/__tests__/setup.ts +0 -259
- package/src/__tests__/setupTests.d.ts +0 -1
- package/src/__tests__/shared/componentTestUtils.tsx +0 -475
- package/src/__tests__/shared/errorHandlingTestUtils.ts +0 -107
- package/src/__tests__/shared/index.ts +0 -81
- package/src/__tests__/shared/integrationTestUtils.tsx +0 -375
- package/src/__tests__/shared/performanceTestUtils.tsx +0 -476
- package/src/__tests__/shared/testUtils.optimized.tsx +0 -685
- package/src/__tests__/simple.test.tsx +0 -20
- package/src/__tests__/templates/accessibility.test.template.tsx +0 -279
- package/src/__tests__/templates/component.test.template.tsx +0 -122
- package/src/__tests__/templates/integration.test.template.tsx +0 -199
- package/src/__tests__/test-utils/dataFactories.ts +0 -60
- package/src/__tests__/test-utils/index.ts +0 -6
- package/src/__tests__/typeSafety.unit.test.ts +0 -65
- package/src/__tests__/unifiedAuth.unit.test.tsx +0 -151
- package/src/__tests__/utils/accessibilityHelpers.ts +0 -254
- package/src/__tests__/utils/assertions.ts +0 -50
- package/src/__tests__/utils/deterministicHelpers.ts +0 -31
- package/src/__tests__/utils/edgeCaseConfig.test.ts +0 -75
- package/src/__tests__/utils/edgeCaseConfig.ts +0 -98
- package/src/__tests__/utils/mockHelpers.ts +0 -149
- package/src/__tests__/utils/mockLoader.ts +0 -101
- package/src/__tests__/utils/performanceHelpers.ts +0 -55
- package/src/__tests__/utils/performanceTestHelpers.ts +0 -68
- package/src/__tests__/utils/testDataFactories.ts +0 -28
- package/src/__tests__/utils/testIsolation.ts +0 -67
- package/src/__tests__/utils/visualTestHelpers.ts +0 -20
- package/src/__tests__/visual/__snapshots__/componentSnapshots.visual.test.tsx.snap +0 -68
- package/src/__tests__/visual/__snapshots__/componentVisuals.visual.test.tsx.snap +0 -14
- package/src/__tests__/visual/__snapshots__/visualRegression.test.tsx.snap +0 -217
- package/src/__tests__/visual/__snapshots__/visualRegression.visual.test.tsx.snap +0 -24
- package/src/__tests__/visual/componentSnapshots.visual.test.tsx +0 -33
- package/src/__tests__/visual/componentVisuals.visual.test.tsx +0 -12
- package/src/__tests__/visual/visualRegression.visual.test.tsx +0 -20
- package/src/components/Alert/Alert.tsx +0 -134
- package/src/components/Alert/__tests__/Alert.unit.test.tsx +0 -381
- package/src/components/Alert/index.ts +0 -2
- package/src/components/Avatar/Avatar.tsx +0 -84
- package/src/components/Avatar/__tests__/Avatar.unit.test.tsx +0 -232
- package/src/components/Avatar/index.ts +0 -2
- package/src/components/Button/Button.tsx +0 -270
- package/src/components/Button/__tests__/Button.accessibility.test.tsx +0 -131
- package/src/components/Button/__tests__/Button.comprehensive.test.tsx +0 -721
- package/src/components/Button/__tests__/Button.unit.test.tsx +0 -189
- package/src/components/Button/__tests__/EventSelector.integration.test.tsx +0 -285
- package/src/components/Button/index.ts +0 -2
- package/src/components/Card/Card.tsx +0 -271
- package/src/components/Card/__tests__/Card.accessibility.test.tsx +0 -394
- package/src/components/Card/__tests__/Card.comprehensive.test.tsx +0 -599
- package/src/components/Card/__tests__/Card.integration.test.tsx +0 -673
- package/src/components/Card/__tests__/Card.performance.test.tsx +0 -546
- package/src/components/Card/__tests__/Card.unit.test.tsx +0 -330
- package/src/components/Card/__tests__/Card.visual.test.tsx +0 -599
- package/src/components/Card/__tests__/README.md +0 -211
- package/src/components/Card/index.ts +0 -1
- package/src/components/Checkbox/Checkbox.tsx +0 -75
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
- package/src/components/Checkbox/__tests__/Checkbox.unit.test.tsx +0 -520
- package/src/components/Checkbox/index.ts +0 -2
- package/src/components/DataTable/DataTable.tsx +0 -438
- package/src/components/DataTable/__tests__/DataTable.errorHandling.test.tsx +0 -251
- package/src/components/DataTable/__tests__/DataTable.hierarchical.test.tsx +0 -680
- package/src/components/DataTable/__tests__/DataTable.infinite-loop.test.tsx +0 -323
- package/src/components/DataTable/__tests__/DataTable.integration.test.tsx +0 -716
- package/src/components/DataTable/__tests__/DataTable.performance.test.tsx +0 -589
- package/src/components/DataTable/__tests__/DataTable.permissions.test.tsx +0 -316
- package/src/components/DataTable/__tests__/DataTable.regressionFixes.test.tsx +0 -546
- package/src/components/DataTable/__tests__/DataTable.selection.controlled.test.tsx +0 -386
- package/src/components/DataTable/__tests__/DataTable.selection.test.tsx +0 -338
- package/src/components/DataTable/__tests__/DataTable.sorting.test.tsx +0 -321
- package/src/components/DataTable/__tests__/DataTable.userWorkflows.test.tsx +0 -320
- package/src/components/DataTable/__tests__/DataTable.workflowValidation.test.tsx +0 -583
- package/src/components/DataTable/__tests__/DataTable.workflows.test.tsx +0 -711
- package/src/components/DataTable/__tests__/README.md +0 -145
- package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +0 -66
- package/src/components/DataTable/__tests__/performance-regression.test.tsx +0 -777
- package/src/components/DataTable/__tests__/performance.test.tsx +0 -365
- package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +0 -103
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +0 -381
- package/src/components/DataTable/__tests__/test-utils.ts +0 -94
- package/src/components/DataTable/components/ActionButtons.tsx +0 -177
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +0 -160
- package/src/components/DataTable/components/ColumnFilter.tsx +0 -114
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +0 -100
- package/src/components/DataTable/components/DataTableBody.tsx +0 -461
- package/src/components/DataTable/components/DataTableCore.tsx +0 -941
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +0 -214
- package/src/components/DataTable/components/DataTableModals.tsx +0 -87
- package/src/components/DataTable/components/DataTableToolbar.tsx +0 -250
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -144
- package/src/components/DataTable/components/EditableRow.tsx +0 -159
- package/src/components/DataTable/components/EmptyState.tsx +0 -64
- package/src/components/DataTable/components/ExpandButton.tsx +0 -113
- package/src/components/DataTable/components/FilterRow.tsx +0 -100
- package/src/components/DataTable/components/GroupHeader.tsx +0 -42
- package/src/components/DataTable/components/GroupingDropdown.tsx +0 -96
- package/src/components/DataTable/components/ImportModal.tsx +0 -345
- package/src/components/DataTable/components/LoadingState.tsx +0 -12
- package/src/components/DataTable/components/PaginationControls.tsx +0 -332
- package/src/components/DataTable/components/UnifiedTableBody.tsx +0 -713
- package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -513
- package/src/components/DataTable/components/__tests__/ActionButtons.unit.test.tsx +0 -150
- package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +0 -224
- package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.unit.test.tsx +0 -244
- package/src/components/DataTable/components/__tests__/DataTable.accessibility.test.tsx +0 -629
- package/src/components/DataTable/components/__tests__/DataTable.integration.test.tsx +0 -470
- package/src/components/DataTable/components/__tests__/DataTable.performance.test.tsx +0 -160
- package/src/components/DataTable/components/__tests__/DataTable.real.test.tsx +0 -251
- package/src/components/DataTable/components/__tests__/DataTable.security.test.tsx +0 -171
- package/src/components/DataTable/components/__tests__/DataTable.unit.test.tsx +0 -290
- package/src/components/DataTable/components/__tests__/DataTableBody.unit.test.tsx +0 -147
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.unit.test.tsx +0 -182
- package/src/components/DataTable/components/__tests__/DataTableModals.unit.test.tsx +0 -123
- package/src/components/DataTable/components/__tests__/EditableRow.unit.test.tsx +0 -660
- package/src/components/DataTable/components/__tests__/EmptyState.unit.test.tsx +0 -256
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -498
- package/src/components/DataTable/components/__tests__/FilterRow.unit.test.tsx +0 -112
- package/src/components/DataTable/components/__tests__/FilteringToggle.unit.test.tsx +0 -133
- package/src/components/DataTable/components/__tests__/GroupHeader.unit.test.tsx +0 -172
- package/src/components/DataTable/components/__tests__/GroupingDropdown.unit.test.tsx +0 -222
- package/src/components/DataTable/components/__tests__/ImportModal.unit.test.tsx +0 -780
- package/src/components/DataTable/components/__tests__/LoadingState.unit.test.tsx +0 -65
- package/src/components/DataTable/components/__tests__/PaginationControls.unit.test.tsx +0 -634
- package/src/components/DataTable/components/__tests__/StateComponents.unit.test.tsx +0 -48
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.hierarchical.test.tsx +0 -541
- package/src/components/DataTable/components/__tests__/ViewRowModal.unit.test.tsx +0 -228
- package/src/components/DataTable/components/__tests__/VirtualizedDataTable.unit.test.tsx +0 -568
- package/src/components/DataTable/components/index.ts +0 -16
- package/src/components/DataTable/context/DataTableContext.tsx +0 -97
- package/src/components/DataTable/core/ActionManager.ts +0 -235
- package/src/components/DataTable/core/ColumnFactory.ts +0 -268
- package/src/components/DataTable/core/ColumnManager.ts +0 -205
- package/src/components/DataTable/core/DataManager.ts +0 -188
- package/src/components/DataTable/core/DataTableContext.tsx +0 -181
- package/src/components/DataTable/core/LocalDataAdapter.ts +0 -264
- package/src/components/DataTable/core/PluginRegistry.ts +0 -229
- package/src/components/DataTable/core/StateManager.ts +0 -311
- package/src/components/DataTable/core/__tests__/ActionManager.unit.test.ts +0 -405
- package/src/components/DataTable/core/__tests__/ArchitectureIntegration.unit.test.tsx +0 -445
- package/src/components/DataTable/core/__tests__/ColumnFactory.unit.test.ts +0 -288
- package/src/components/DataTable/core/__tests__/ColumnManager.unit.test.ts +0 -623
- package/src/components/DataTable/core/__tests__/DataManager.unit.test.ts +0 -431
- package/src/components/DataTable/core/__tests__/DataTableContext.unit.test.tsx +0 -433
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.unit.test.ts +0 -422
- package/src/components/DataTable/core/__tests__/PluginRegistry.unit.test.tsx +0 -207
- package/src/components/DataTable/core/__tests__/StateManager.unit.test.ts +0 -278
- package/src/components/DataTable/core/index.ts +0 -8
- package/src/components/DataTable/core/interfaces.ts +0 -338
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -418
- package/src/components/DataTable/examples/HierarchicalExample.tsx +0 -472
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -173
- package/src/components/DataTable/examples/PerformanceExample.tsx +0 -502
- package/src/components/DataTable/examples/__tests__/PerformanceExample.unit.test.tsx +0 -281
- package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.unit.test.ts +0 -407
- package/src/components/DataTable/hooks/__tests__/useColumnReordering.unit.test.ts +0 -679
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -95
- package/src/components/DataTable/hooks/useColumnReordering.ts +0 -110
- package/src/components/DataTable/hooks/useDataTableState.ts +0 -325
- package/src/components/DataTable/hooks/useHierarchicalState.ts +0 -174
- package/src/components/DataTable/index.ts +0 -68
- package/src/components/DataTable/styles.ts +0 -171
- package/src/components/DataTable/types.ts +0 -473
- package/src/components/DataTable/utils/__tests__/debugTools.unit.test.ts +0 -267
- package/src/components/DataTable/utils/__tests__/errorHandling.unit.test.ts +0 -467
- package/src/components/DataTable/utils/__tests__/exportUtils.unit.test.ts +0 -380
- package/src/components/DataTable/utils/__tests__/flexibleImport.unit.test.ts +0 -233
- package/src/components/DataTable/utils/__tests__/performanceUtils.unit.test.ts +0 -414
- package/src/components/DataTable/utils/debugTools.ts +0 -583
- package/src/components/DataTable/utils/errorHandling.ts +0 -494
- package/src/components/DataTable/utils/exportUtils.ts +0 -126
- package/src/components/DataTable/utils/flexibleImport.ts +0 -510
- package/src/components/DataTable/utils/hierarchicalSorting.ts +0 -151
- package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -218
- package/src/components/DataTable/utils/index.ts +0 -1
- package/src/components/DataTable/utils/performanceUtils.ts +0 -351
- package/src/components/Dialog/Dialog.tsx +0 -782
- package/src/components/Dialog/README.md +0 -804
- package/src/components/Dialog/__tests__/Dialog.accessibility.test.tsx +0 -521
- package/src/components/Dialog/__tests__/Dialog.auto-size.example.tsx +0 -157
- package/src/components/Dialog/__tests__/Dialog.enhanced.test.tsx +0 -538
- package/src/components/Dialog/__tests__/Dialog.unit.test.tsx +0 -1373
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
- package/src/components/Dialog/examples/HtmlDialogExample.tsx +0 -202
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
- package/src/components/Dialog/examples/SmartDialogExample.tsx +0 -322
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -151
- package/src/components/Dialog/index.ts +0 -12
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
- package/src/components/Dialog/utils/safeHtml.ts +0 -185
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +0 -312
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.accessibility.test.tsx +0 -517
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.integration.test.tsx +0 -572
- package/src/components/ErrorBoundary/__tests__/ErrorBoundary.unit.test.tsx +0 -579
- package/src/components/ErrorBoundary/index.ts +0 -8
- package/src/components/EventSelector/EventSelector.tsx +0 -360
- package/src/components/EventSelector/__tests__/EventSelector.test.tsx +0 -528
- package/src/components/EventSelector/index.ts +0 -3
- package/src/components/EventSelector/types.ts +0 -79
- package/src/components/FileUpload/FileUpload.example.tsx +0 -218
- package/src/components/FileUpload/FileUpload.tsx +0 -237
- package/src/components/FileUpload/__tests__/FileUpload.integration.test.tsx +0 -992
- package/src/components/FileUpload/__tests__/FileUpload.real.test.tsx +0 -927
- package/src/components/FileUpload/__tests__/FileUpload.test.tsx +0 -855
- package/src/components/FileUpload/__tests__/FileUpload.unit.test.tsx +0 -1311
- package/src/components/FileUpload/__tests__/FileUpload.unmocked.test.tsx +0 -937
- package/src/components/FileUpload/index.ts +0 -6
- package/src/components/Footer/Footer.tsx +0 -197
- package/src/components/Footer/__tests__/Footer.accessibility.test.tsx +0 -359
- package/src/components/Footer/__tests__/Footer.integration.test.tsx +0 -353
- package/src/components/Footer/__tests__/Footer.performance.test.tsx +0 -309
- package/src/components/Footer/__tests__/Footer.unit.test.tsx +0 -309
- package/src/components/Footer/__tests__/Footer.visual.test.tsx +0 -335
- package/src/components/Footer/index.ts +0 -17
- package/src/components/Form/Form.tsx +0 -166
- package/src/components/Form/FormErrorSummary.tsx +0 -113
- package/src/components/Form/FormField.tsx +0 -249
- package/src/components/Form/FormFieldset.tsx +0 -127
- package/src/components/Form/FormLiveRegion.tsx +0 -198
- package/src/components/Form/__tests__/Form.accessibility.test.tsx +0 -820
- package/src/components/Form/__tests__/Form.unit.test.tsx +0 -305
- package/src/components/Form/__tests__/FormErrorSummary.unit.test.tsx +0 -285
- package/src/components/Form/__tests__/FormFieldset.unit.test.tsx +0 -241
- package/src/components/Form/index.ts +0 -26
- package/src/components/Header/Header.tsx +0 -301
- package/src/components/Header/__tests__/Header.accessibility.test.tsx +0 -382
- package/src/components/Header/__tests__/Header.comprehensive.test.tsx +0 -509
- package/src/components/Header/__tests__/Header.unit.test.tsx +0 -335
- package/src/components/Header/index.ts +0 -4
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +0 -196
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +0 -164
- package/src/components/InactivityWarningModal/__tests__/InactivityWarningModal.unit.test.tsx +0 -224
- package/src/components/InactivityWarningModal/index.ts +0 -9
- package/src/components/Input/Input.tsx +0 -201
- package/src/components/Input/__mocks__/Input.tsx +0 -2
- package/src/components/Input/__tests__/Input.accessibility.test.tsx +0 -632
- package/src/components/Input/__tests__/Input.unit.test.tsx +0 -1121
- package/src/components/Input/index.ts +0 -9
- package/src/components/Label/Label.tsx +0 -186
- package/src/components/Label/__tests__/Label.accessibility.test.tsx +0 -239
- package/src/components/Label/__tests__/Label.unit.test.tsx +0 -331
- package/src/components/Label/index.ts +0 -2
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +0 -98
- package/src/components/LoadingSpinner/__tests__/LoadingSpinner.accessibility.test.tsx +0 -116
- package/src/components/LoadingSpinner/__tests__/LoadingSpinner.unit.test.tsx +0 -144
- package/src/components/LoadingSpinner/index.ts +0 -3
- package/src/components/LoginForm/LoginForm.tsx +0 -273
- package/src/components/LoginForm/__tests__/LoginForm.accessibility.test.tsx +0 -201
- package/src/components/LoginForm/__tests__/LoginForm.unit.test.tsx +0 -119
- package/src/components/LoginForm/index.ts +0 -3
- package/src/components/NavigationMenu/NavigationMenu.tsx +0 -698
- package/src/components/NavigationMenu/__tests__/NavigationMenu.accessibility.test.tsx +0 -378
- package/src/components/NavigationMenu/__tests__/NavigationMenu.enhanced.test.tsx +0 -768
- package/src/components/NavigationMenu/__tests__/NavigationMenu.integration.test.tsx +0 -576
- package/src/components/NavigationMenu/__tests__/NavigationMenu.performance.test.tsx +0 -585
- package/src/components/NavigationMenu/__tests__/NavigationMenu.real.component.test.tsx +0 -783
- package/src/components/NavigationMenu/__tests__/NavigationMenu.security.enhanced.test.tsx +0 -810
- package/src/components/NavigationMenu/__tests__/NavigationMenu.security.test.tsx +0 -494
- package/src/components/NavigationMenu/__tests__/NavigationMenu.unit.test.tsx +0 -331
- package/src/components/NavigationMenu/__tests__/NavigationMenu.userWorkflows.test.tsx +0 -347
- package/src/components/NavigationMenu/__tests__/NavigationMenu.workflows.test.tsx +0 -584
- package/src/components/NavigationMenu/index.ts +0 -10
- package/src/components/NavigationMenu/types.ts +0 -85
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -304
- package/src/components/OrganisationSelector/__tests__/OrganisationSelector.unit.test.tsx +0 -664
- package/src/components/OrganisationSelector/index.ts +0 -9
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +0 -699
- package/src/components/PaceAppLayout/README.md +0 -278
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -288
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +0 -893
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +0 -629
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +0 -782
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -904
- package/src/components/PaceAppLayout/index.ts +0 -1
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +0 -221
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.accessibility.test.tsx +0 -463
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.integration.test.tsx +0 -586
- package/src/components/PaceLoginPage/__tests__/PaceLoginPage.unit.test.tsx +0 -533
- package/src/components/PaceLoginPage/index.ts +0 -1
- package/src/components/PasswordReset/PasswordChangeForm.tsx +0 -186
- package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
- package/src/components/PasswordReset/__tests__/PasswordChangeForm.accessibility.test.tsx +0 -408
- package/src/components/PasswordReset/__tests__/PasswordChangeForm.unit.test.tsx +0 -561
- package/src/components/PasswordReset/__tests__/PasswordReset.integration.test.tsx +0 -304
- package/src/components/PasswordReset/__tests__/PasswordResetForm.accessibility.test.tsx +0 -20
- package/src/components/PasswordReset/__tests__/PasswordResetForm.unit.test.tsx +0 -523
- package/src/components/PasswordReset/__tests__/__mocks__/UnifiedAuthProvider.ts +0 -29
- package/src/components/PasswordReset/index.ts +0 -4
- package/src/components/Print/__tests__/Print.comprehensive.test.tsx +0 -331
- package/src/components/PrintButton/PrintButton.tsx +0 -321
- package/src/components/PrintButton/PrintButtonGroup.tsx +0 -84
- package/src/components/PrintButton/PrintToolbar.tsx +0 -94
- package/src/components/PrintButton/__tests__/PrintButton.unit.test.tsx +0 -429
- package/src/components/PrintButton/__tests__/PrintButtonGroup.unit.test.tsx +0 -277
- package/src/components/PrintButton/__tests__/PrintToolbar.unit.test.tsx +0 -264
- package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +0 -438
- package/src/components/PrintButton/index.ts +0 -33
- package/src/components/PrintButton/types.ts +0 -173
- package/src/components/PrintCard/PrintCard.tsx +0 -154
- package/src/components/PrintCard/PrintCardContent.tsx +0 -57
- package/src/components/PrintCard/PrintCardFooter.tsx +0 -60
- package/src/components/PrintCard/PrintCardGrid.tsx +0 -91
- package/src/components/PrintCard/PrintCardHeader.tsx +0 -78
- package/src/components/PrintCard/PrintCardImage.tsx +0 -81
- package/src/components/PrintCard/__tests__/PrintCard.unit.test.tsx +0 -233
- package/src/components/PrintCard/__tests__/PrintCardContent.test.tsx +0 -284
- package/src/components/PrintCard/__tests__/PrintCardGrid.unit.test.tsx +0 -214
- package/src/components/PrintCard/__tests__/PrintCardImage.unit.test.tsx +0 -264
- package/src/components/PrintCard/examples/PrintCardShowcase.tsx +0 -239
- package/src/components/PrintCard/index.ts +0 -34
- package/src/components/PrintCard/types.ts +0 -171
- package/src/components/PrintDataTable/PrintDataTable.tsx +0 -215
- package/src/components/PrintDataTable/PrintTableGroup.tsx +0 -90
- package/src/components/PrintDataTable/PrintTableRow.tsx +0 -76
- package/src/components/PrintDataTable/__tests__/PrintDataTable.unit.test.tsx +0 -361
- package/src/components/PrintDataTable/__tests__/PrintTableGroup.unit.test.tsx +0 -314
- package/src/components/PrintDataTable/__tests__/PrintTableRow.unit.test.tsx +0 -362
- package/src/components/PrintDataTable/index.ts +0 -25
- package/src/components/PrintDataTable/types.ts +0 -67
- package/src/components/PrintFooter/PrintFooter.tsx +0 -183
- package/src/components/PrintFooter/PrintFooterContent.tsx +0 -71
- package/src/components/PrintFooter/PrintFooterInfo.tsx +0 -86
- package/src/components/PrintFooter/PrintPageNumber.tsx +0 -90
- package/src/components/PrintFooter/__tests__/PrintFooter.unit.test.tsx +0 -500
- package/src/components/PrintFooter/__tests__/PrintFooterContent.unit.test.tsx +0 -321
- package/src/components/PrintFooter/__tests__/PrintFooterInfo.unit.test.tsx +0 -335
- package/src/components/PrintFooter/__tests__/PrintPageNumber.unit.test.tsx +0 -340
- package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +0 -390
- package/src/components/PrintFooter/index.ts +0 -30
- package/src/components/PrintFooter/types.ts +0 -149
- package/src/components/PrintGrid/PrintGrid.tsx +0 -180
- package/src/components/PrintGrid/PrintGridBreakpoint.tsx +0 -109
- package/src/components/PrintGrid/PrintGridContainer.tsx +0 -128
- package/src/components/PrintGrid/PrintGridItem.tsx +0 -220
- package/src/components/PrintGrid/__tests__/PrintGrid.unit.test.tsx +0 -340
- package/src/components/PrintGrid/__tests__/PrintGridBreakpoint.unit.test.tsx +0 -261
- package/src/components/PrintGrid/__tests__/PrintGridContainer.unit.test.tsx +0 -338
- package/src/components/PrintGrid/__tests__/PrintGridItem.unit.test.tsx +0 -338
- package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +0 -359
- package/src/components/PrintGrid/index.ts +0 -31
- package/src/components/PrintGrid/types.ts +0 -159
- package/src/components/PrintHeader/PrintCoverHeader.tsx +0 -230
- package/src/components/PrintHeader/PrintHeader.tsx +0 -150
- package/src/components/PrintHeader/__tests__/PrintCoverHeader.unit.test.tsx +0 -309
- package/src/components/PrintHeader/__tests__/PrintHeader.unit.test.tsx +0 -202
- package/src/components/PrintHeader/index.ts +0 -17
- package/src/components/PrintHeader/types.ts +0 -42
- package/src/components/PrintLayout/PrintLayout.tsx +0 -122
- package/src/components/PrintLayout/PrintLayoutContext.tsx +0 -66
- package/src/components/PrintLayout/PrintPageBreak.tsx +0 -52
- package/src/components/PrintLayout/__tests__/PrintLayout.unit.test.tsx +0 -238
- package/src/components/PrintLayout/examples/PrintShowcase.tsx +0 -230
- package/src/components/PrintLayout/index.ts +0 -19
- package/src/components/PrintLayout/types.ts +0 -37
- package/src/components/PrintPageBreak/PrintPageBreak.tsx +0 -120
- package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +0 -90
- package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +0 -112
- package/src/components/PrintPageBreak/__tests__/PrintPageBreak.unit.test.tsx +0 -263
- package/src/components/PrintPageBreak/__tests__/PrintPageBreakGroup.unit.test.tsx +0 -239
- package/src/components/PrintPageBreak/__tests__/PrintPageBreakIndicator.unit.test.tsx +0 -235
- package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +0 -279
- package/src/components/PrintPageBreak/index.ts +0 -23
- package/src/components/PrintPageBreak/types.ts +0 -94
- package/src/components/PrintSection/PrintColumn.tsx +0 -104
- package/src/components/PrintSection/PrintDivider.tsx +0 -101
- package/src/components/PrintSection/PrintSection.tsx +0 -129
- package/src/components/PrintSection/PrintSectionContent.tsx +0 -75
- package/src/components/PrintSection/PrintSectionHeader.tsx +0 -97
- package/src/components/PrintSection/__tests__/PrintColumn.unit.test.tsx +0 -385
- package/src/components/PrintSection/__tests__/PrintDivider.unit.test.tsx +0 -373
- package/src/components/PrintSection/__tests__/PrintSection.unit.test.tsx +0 -390
- package/src/components/PrintSection/__tests__/PrintSectionContent.unit.test.tsx +0 -321
- package/src/components/PrintSection/__tests__/PrintSectionHeader.unit.test.tsx +0 -334
- package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +0 -258
- package/src/components/PrintSection/index.ts +0 -33
- package/src/components/PrintSection/types.ts +0 -155
- package/src/components/PrintText/PrintText.tsx +0 -116
- package/src/components/PrintText/__tests__/PrintText.unit.test.tsx +0 -351
- package/src/components/PrintText/index.ts +0 -16
- package/src/components/PrintText/types.ts +0 -24
- package/src/components/Progress/Progress.tsx +0 -116
- package/src/components/Progress/__tests__/Progress.accessibility.test.tsx +0 -240
- package/src/components/Progress/__tests__/Progress.unit.test.tsx +0 -242
- package/src/components/Progress/index.ts +0 -3
- package/src/components/PublicLayout/EventLogo.tsx +0 -287
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -279
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -208
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -130
- package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
- package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
- package/src/components/PublicLayout/PublicPageHeader.tsx +0 -178
- package/src/components/PublicLayout/PublicPageLayout.tsx +0 -232
- package/src/components/PublicLayout/PublicPageProvider.tsx +0 -137
- package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +0 -761
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.simplified.test.tsx +0 -228
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -228
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -459
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -362
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -522
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -599
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -513
- package/src/components/PublicLayout/index.ts +0 -51
- package/src/components/RBAC/PagePermissionGuard.tsx +0 -287
- package/src/components/RBAC/RBACGuard.tsx +0 -143
- package/src/components/RBAC/RBACProvider.tsx +0 -186
- package/src/components/RBAC/RoleBasedContent.tsx +0 -129
- package/src/components/RBAC/__tests__/PagePermissionGuard.unit.test.tsx +0 -683
- package/src/components/RBAC/__tests__/RBAC.integration.test.tsx +0 -573
- package/src/components/RBAC/__tests__/RBACGuard.unit.test.tsx +0 -467
- package/src/components/RBAC/__tests__/RBACProvider.accessibility.test.tsx +0 -475
- package/src/components/RBAC/__tests__/RBACProvider.advanced.test.tsx +0 -569
- package/src/components/RBAC/__tests__/RBACProvider.integration.test.tsx +0 -352
- package/src/components/RBAC/__tests__/RBACProvider.unit.test.tsx +0 -128
- package/src/components/RBAC/__tests__/RoleBasedContent.unit.test.tsx +0 -657
- package/src/components/RBAC/index.ts +0 -23
- package/src/components/Select/Select.tsx +0 -660
- package/src/components/Select/__tests__/SearchableSelect.unit.test.tsx +0 -437
- package/src/components/Select/__tests__/Select.accessibility.test.tsx +0 -1202
- package/src/components/Select/__tests__/Select.actual.test.tsx +0 -774
- package/src/components/Select/__tests__/Select.comprehensive.test.tsx +0 -837
- package/src/components/Select/__tests__/Select.enhanced.test.tsx +0 -1101
- package/src/components/Select/__tests__/Select.integration.test.tsx +0 -772
- package/src/components/Select/__tests__/Select.performance.test.tsx +0 -695
- package/src/components/Select/__tests__/Select.real-world.test.tsx +0 -1046
- package/src/components/Select/__tests__/Select.search-algorithms.test.tsx +0 -968
- package/src/components/Select/__tests__/Select.unit.test.tsx +0 -647
- package/src/components/Select/__tests__/Select.utils.test.tsx +0 -890
- package/src/components/Select/index.ts +0 -1
- package/src/components/SuperAdminGuard.tsx +0 -116
- package/src/components/Table/Table.tsx +0 -222
- package/src/components/Table/__tests__/Table.accessibility.test.tsx +0 -233
- package/src/components/Table/__tests__/Table.unit.test.tsx +0 -235
- package/src/components/Table/index.ts +0 -11
- package/src/components/Toast/Toast.tsx +0 -339
- package/src/components/Toast/__tests__/Toast.accessibility.test.tsx +0 -238
- package/src/components/Toast/__tests__/Toast.integration.test.tsx +0 -699
- package/src/components/Toast/__tests__/Toast.unit.test.tsx +0 -750
- package/src/components/Toast/index.ts +0 -14
- package/src/components/Tooltip/Tooltip.tsx +0 -167
- package/src/components/Tooltip/__tests__/Tooltip.accessibility.test.tsx +0 -121
- package/src/components/Tooltip/__tests__/Tooltip.unit.test.tsx +0 -185
- package/src/components/Tooltip/index.ts +0 -7
- package/src/components/UserMenu/UserMenu.tsx +0 -243
- package/src/components/UserMenu/__tests__/UserMenu.accessibility.test.tsx +0 -139
- package/src/components/UserMenu/__tests__/UserMenu.integration.test.tsx +0 -188
- package/src/components/UserMenu/__tests__/UserMenu.unit.test.tsx +0 -458
- package/src/components/UserMenu/index.ts +0 -3
- package/src/components/__tests__/EdgeCaseTesting.enhanced.test.tsx +0 -524
- package/src/components/__tests__/ErrorTesting.enhanced.test.tsx +0 -455
- package/src/components/__tests__/SuperAdminGuard.test.tsx +0 -456
- package/src/components/__tests__/SuperAdminGuard.unit.test.tsx +0 -456
- package/src/components/examples/PermissionExample.tsx +0 -150
- package/src/components/examples/__tests__/PermissionExample.unit.test.tsx +0 -360
- package/src/components/index.ts +0 -434
- package/src/components.ts +0 -19
- package/src/constants/performance.ts +0 -14
- package/src/examples/CorrectPublicPageImplementation.tsx +0 -301
- package/src/examples/PublicEventPage.tsx +0 -274
- package/src/examples/PublicPageApp.tsx +0 -308
- package/src/examples/PublicPageUsageExample.tsx +0 -216
- package/src/hooks/__tests__/hooks.integration.test.tsx +0 -575
- package/src/hooks/__tests__/useApiFetch.unit.test.ts +0 -115
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +0 -133
- package/src/hooks/__tests__/useDebounce.unit.test.ts +0 -82
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +0 -293
- package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +0 -385
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +0 -286
- package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +0 -838
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +0 -627
- package/src/hooks/__tests__/useRBAC.unit.test.ts +0 -911
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -537
- package/src/hooks/__tests__/useToast.unit.test.tsx +0 -62
- package/src/hooks/__tests__/useZodForm.unit.test.tsx +0 -37
- package/src/hooks/index.ts +0 -56
- package/src/hooks/public/__tests__/usePublicEvent.test.tsx +0 -397
- package/src/hooks/public/__tests__/usePublicEventLogo.test.tsx +0 -690
- package/src/hooks/public/__tests__/usePublicRouteParams.test.tsx +0 -449
- package/src/hooks/public/index.ts +0 -34
- package/src/hooks/public/usePublicEvent.ts +0 -261
- package/src/hooks/public/usePublicEventLogo.ts +0 -285
- package/src/hooks/public/usePublicRouteParams.ts +0 -259
- package/src/hooks/useAppConfig.ts +0 -94
- package/src/hooks/useComponentPerformance.ts +0 -39
- package/src/hooks/useDataTablePerformance.ts +0 -387
- package/src/hooks/useDataTableState.ts +0 -110
- package/src/hooks/useDebounce.ts +0 -18
- package/src/hooks/useFocusManagement.ts +0 -161
- package/src/hooks/useFocusTrap.ts +0 -155
- package/src/hooks/useInactivityTracker.ts +0 -372
- package/src/hooks/useIsMobile.ts +0 -42
- package/src/hooks/useKeyboardShortcuts.ts +0 -237
- package/src/hooks/useOrganisationPermissions.ts +0 -208
- package/src/hooks/useOrganisationSecurity.ts +0 -262
- package/src/hooks/usePerformanceMonitor.ts +0 -128
- package/src/hooks/usePermissionCache.ts +0 -455
- package/src/hooks/useRBAC.ts +0 -262
- package/src/hooks/useSecureDataAccess.ts +0 -586
- package/src/hooks/useStorage.ts +0 -274
- package/src/hooks/useToast.ts +0 -242
- package/src/hooks/useZodForm.ts +0 -28
- package/src/index.ts +0 -200
- package/src/providers/AuthProvider.tsx +0 -369
- package/src/providers/EventProvider.tsx +0 -324
- package/src/providers/InactivityProvider.tsx +0 -238
- package/src/providers/OrganisationProvider.tsx +0 -588
- package/src/providers/RBACProvider.tsx +0 -634
- package/src/providers/UnifiedAuthProvider.tsx +0 -327
- package/src/providers/__tests__/EventProvider.unit.test.tsx +0 -768
- package/src/providers/__tests__/OrganisationProvider.basic.test.tsx +0 -116
- package/src/providers/__tests__/OrganisationProvider.unit.test.tsx +0 -1312
- package/src/providers/__tests__/UnifiedAuthProvider.inactivity.test.tsx +0 -601
- package/src/providers/__tests__/UnifiedAuthProvider.unit.test.tsx +0 -683
- package/src/providers/__tests__/index.unit.test.ts +0 -78
- package/src/providers/index.ts +0 -15
- package/src/rbac/README.md +0 -885
- package/src/rbac/__tests__/PagePermissionGuard.test.tsx +0 -673
- package/src/rbac/__tests__/README.md +0 -170
- package/src/rbac/__tests__/RoleBasedRouter.test.tsx +0 -709
- package/src/rbac/__tests__/TestContext.tsx +0 -72
- package/src/rbac/__tests__/__mocks__/cache.ts +0 -144
- package/src/rbac/__tests__/__mocks__/supabase.ts +0 -152
- package/src/rbac/__tests__/adapters-hooks-comprehensive.test.tsx +0 -782
- package/src/rbac/__tests__/adapters-hooks.test.tsx +0 -561
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +0 -963
- package/src/rbac/__tests__/adapters.test.tsx +0 -444
- package/src/rbac/__tests__/api.test.ts +0 -620
- package/src/rbac/__tests__/audit-observability-comprehensive.test.ts +0 -792
- package/src/rbac/__tests__/audit-observability.test.ts +0 -549
- package/src/rbac/__tests__/audit.test.ts +0 -616
- package/src/rbac/__tests__/build-contract-compliance-simple.test.ts +0 -230
- package/src/rbac/__tests__/cache-invalidation-comprehensive.test.ts +0 -889
- package/src/rbac/__tests__/cache-invalidation.test.ts +0 -457
- package/src/rbac/__tests__/cache.test.ts +0 -458
- package/src/rbac/__tests__/components-navigation-guard.enhanced.test.tsx +0 -859
- package/src/rbac/__tests__/components-navigation-guard.test.tsx +0 -895
- package/src/rbac/__tests__/components-navigation-provider.test.tsx +0 -692
- package/src/rbac/__tests__/components-page-permission-guard.test.tsx +0 -673
- package/src/rbac/__tests__/components-page-permission-provider.test.tsx +0 -614
- package/src/rbac/__tests__/components-permission-enforcer.enhanced.fixed.test.tsx +0 -836
- package/src/rbac/__tests__/components-permission-enforcer.enhanced.test.tsx +0 -837
- package/src/rbac/__tests__/components-permission-enforcer.test.tsx +0 -825
- package/src/rbac/__tests__/components-role-based-router.test.tsx +0 -709
- package/src/rbac/__tests__/components-secure-data-provider.test.tsx +0 -607
- package/src/rbac/__tests__/config.test.ts +0 -583
- package/src/rbac/__tests__/core-logic-unit.test.ts +0 -190
- package/src/rbac/__tests__/core-permission-logic-comprehensive.test.ts +0 -1467
- package/src/rbac/__tests__/core-permission-logic-fixed.test.ts +0 -151
- package/src/rbac/__tests__/core-permission-logic-simple.test.ts +0 -968
- package/src/rbac/__tests__/core-permission-logic.test.ts +0 -966
- package/src/rbac/__tests__/edge-cases-comprehensive.test.ts +0 -988
- package/src/rbac/__tests__/edge-cases.test.ts +0 -654
- package/src/rbac/__tests__/engine.test.ts +0 -361
- package/src/rbac/__tests__/engine.unit.test.ts +0 -361
- package/src/rbac/__tests__/hooks.enhanced.test.tsx +0 -979
- package/src/rbac/__tests__/hooks.fixed.test.tsx +0 -475
- package/src/rbac/__tests__/hooks.test.tsx +0 -385
- package/src/rbac/__tests__/index.test.ts +0 -269
- package/src/rbac/__tests__/integration.enhanced.test.tsx +0 -824
- package/src/rbac/__tests__/page-permission-guard-super-admin.test.tsx +0 -261
- package/src/rbac/__tests__/performance.enhanced.test.tsx +0 -724
- package/src/rbac/__tests__/permissions.test.ts +0 -383
- package/src/rbac/__tests__/requires-event.test.ts +0 -330
- package/src/rbac/__tests__/scope-isolation-comprehensive.test.ts +0 -1349
- package/src/rbac/__tests__/scope-isolation.test.ts +0 -755
- package/src/rbac/__tests__/secure-client-rls-comprehensive.test.ts +0 -592
- package/src/rbac/__tests__/secure-client-rls.test.ts +0 -377
- package/src/rbac/__tests__/security.test.ts +0 -296
- package/src/rbac/__tests__/setup.ts +0 -228
- package/src/rbac/__tests__/test-utils-enhanced.tsx +0 -400
- package/src/rbac/__tests__/types.test.ts +0 -685
- package/src/rbac/adapters.tsx +0 -726
- package/src/rbac/api.ts +0 -339
- package/src/rbac/audit-enhanced.ts +0 -339
- package/src/rbac/audit.ts +0 -338
- package/src/rbac/cache.ts +0 -215
- package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -294
- package/src/rbac/components/NavigationGuard.tsx +0 -294
- package/src/rbac/components/NavigationProvider.tsx +0 -314
- package/src/rbac/components/PagePermissionGuard.tsx +0 -430
- package/src/rbac/components/PagePermissionProvider.tsx +0 -274
- package/src/rbac/components/PermissionEnforcer.tsx +0 -307
- package/src/rbac/components/RoleBasedRouter.tsx +0 -425
- package/src/rbac/components/SecureDataProvider.tsx +0 -319
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -631
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -667
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -647
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -496
- package/src/rbac/components/index.ts +0 -64
- package/src/rbac/config.ts +0 -133
- package/src/rbac/docs/event-based-apps.md +0 -285
- package/src/rbac/engine.ts +0 -1026
- package/src/rbac/eslint-rules.js +0 -285
- package/src/rbac/examples/CompleteRBACExample.tsx +0 -323
- package/src/rbac/examples/EventBasedApp.tsx +0 -238
- package/src/rbac/hooks.ts +0 -570
- package/src/rbac/index.ts +0 -114
- package/src/rbac/permissions.ts +0 -293
- package/src/rbac/secureClient.ts +0 -244
- package/src/rbac/security.ts +0 -346
- package/src/rbac/testing/__tests__/index.test.tsx +0 -342
- package/src/rbac/testing/index.tsx +0 -340
- package/src/rbac/types.ts +0 -343
- package/src/rbac/utils/__tests__/eventContext.test.ts +0 -428
- package/src/rbac/utils/__tests__/eventContext.unit.test.ts +0 -428
- package/src/rbac/utils/eventContext.ts +0 -83
- package/src/styles/__tests__/styles.unit.test.ts +0 -164
- package/src/styles/core.css +0 -401
- package/src/styles/index.ts +0 -51
- package/src/test-dom-cleanup.test.tsx +0 -38
- package/src/theming/__tests__/README.md +0 -335
- package/src/theming/__tests__/runtime.accessibility.test.ts +0 -474
- package/src/theming/__tests__/runtime.error.test.ts +0 -616
- package/src/theming/__tests__/runtime.integration.test.ts +0 -376
- package/src/theming/__tests__/runtime.performance.test.ts +0 -411
- package/src/theming/__tests__/runtime.unit.test.ts +0 -470
- package/src/theming/runtime.ts +0 -187
- package/src/types/__tests__/database.unit.test.ts +0 -489
- package/src/types/__tests__/guards.unit.test.ts +0 -146
- package/src/types/__tests__/index.unit.test.ts +0 -77
- package/src/types/__tests__/organisation.unit.test.ts +0 -713
- package/src/types/__tests__/rbac.unit.test.ts +0 -621
- package/src/types/__tests__/security.unit.test.ts +0 -347
- package/src/types/__tests__/supabase.unit.test.ts +0 -658
- package/src/types/__tests__/theme.unit.test.ts +0 -218
- package/src/types/__tests__/unified.unit.test.ts +0 -537
- package/src/types/__tests__/validation.unit.test.ts +0 -616
- package/src/types/database.ts +0 -472
- package/src/types/guards.ts +0 -30
- package/src/types/index.ts +0 -25
- package/src/types/organisation.ts +0 -184
- package/src/types/security.ts +0 -70
- package/src/types/supabase.ts +0 -166
- package/src/types/theme.ts +0 -6
- package/src/types/unified.ts +0 -262
- package/src/types/validation.ts +0 -164
- package/src/types/vitest-globals.d.ts +0 -43
- package/src/utils/__mocks__/supabaseMock.ts +0 -75
- package/src/utils/__mocks__/supabaseMock.tsx +0 -198
- package/src/utils/__tests__/appConfig.unit.test.ts +0 -55
- package/src/utils/__tests__/appNameResolver.unit.test.ts +0 -137
- package/src/utils/__tests__/audit.unit.test.ts +0 -69
- package/src/utils/__tests__/auth-utils.unit.test.ts +0 -70
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +0 -317
- package/src/utils/__tests__/cn.unit.test.ts +0 -34
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +0 -480
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +0 -322
- package/src/utils/__tests__/formatDate.unit.test.ts +0 -109
- package/src/utils/__tests__/formatting.unit.test.ts +0 -66
- package/src/utils/__tests__/index.unit.test.ts +0 -251
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +0 -304
- package/src/utils/__tests__/organisationContext.unit.test.ts +0 -192
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +0 -259
- package/src/utils/__tests__/permissionTypes.unit.test.ts +0 -250
- package/src/utils/__tests__/permissionUtils.unit.test.ts +0 -362
- package/src/utils/__tests__/sanitization.unit.test.ts +0 -346
- package/src/utils/__tests__/schemaUtils.unit.test.ts +0 -441
- package/src/utils/__tests__/secureDataAccess.unit.test.ts +0 -334
- package/src/utils/__tests__/secureErrors.unit.test.ts +0 -377
- package/src/utils/__tests__/secureStorage.unit.test.ts +0 -293
- package/src/utils/__tests__/security.unit.test.ts +0 -127
- package/src/utils/__tests__/securityMonitor.unit.test.ts +0 -280
- package/src/utils/__tests__/sessionTracking.unit.test.ts +0 -370
- package/src/utils/__tests__/validation.unit.test.ts +0 -84
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -571
- package/src/utils/appConfig.ts +0 -47
- package/src/utils/appIdResolver.ts +0 -130
- package/src/utils/appNameResolver.ts +0 -190
- package/src/utils/audit.ts +0 -127
- package/src/utils/auth-utils.ts +0 -96
- package/src/utils/bundleAnalysis.ts +0 -129
- package/src/utils/cn.ts +0 -7
- package/src/utils/debugLogger.ts +0 -46
- package/src/utils/deviceFingerprint.ts +0 -215
- package/src/utils/dynamicUtils.ts +0 -105
- package/src/utils/formatting.ts +0 -77
- package/src/utils/index.ts +0 -145
- package/src/utils/lazyLoad.tsx +0 -44
- package/src/utils/organisationContext.ts +0 -135
- package/src/utils/performanceBenchmark.ts +0 -64
- package/src/utils/performanceBudgets.ts +0 -111
- package/src/utils/permissionTypes.ts +0 -37
- package/src/utils/permissionUtils.ts +0 -31
- package/src/utils/print/PrintDataProcessor.ts +0 -390
- package/src/utils/print/__tests__/PrintDataProcessor.unit.test.ts +0 -219
- package/src/utils/print/__tests__/usePrintOptimization.unit.test.tsx +0 -353
- package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +0 -397
- package/src/utils/print/index.ts +0 -29
- package/src/utils/print/types.ts +0 -196
- package/src/utils/print/usePrintOptimization.ts +0 -272
- package/src/utils/sanitization.ts +0 -264
- package/src/utils/schemaUtils.ts +0 -37
- package/src/utils/secureDataAccess.ts +0 -361
- package/src/utils/secureErrors.ts +0 -79
- package/src/utils/secureStorage.ts +0 -244
- package/src/utils/security.ts +0 -156
- package/src/utils/securityMonitor.ts +0 -45
- package/src/utils/sessionTracking.ts +0 -170
- package/src/utils/storage/README.md +0 -348
- package/src/utils/storage/__tests__/config.unit.test.ts +0 -206
- package/src/utils/storage/__tests__/helpers.unit.test.ts +0 -648
- package/src/utils/storage/__tests__/index.unit.test.ts +0 -167
- package/src/utils/storage/__tests__/types.unit.test.ts +0 -441
- package/src/utils/storage/config.ts +0 -100
- package/src/utils/storage/helpers.ts +0 -359
- package/src/utils/storage/index.ts +0 -36
- package/src/utils/storage/types.ts +0 -90
- package/src/utils/validation.ts +0 -111
- package/src/utils/validationUtils.ts +0 -120
- package/src/validation/__tests__/common.unit.test.ts +0 -101
- package/src/validation/__tests__/csrf.unit.test.ts +0 -302
- package/src/validation/__tests__/passwordSchema.unit.test.ts +0 -98
- package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +0 -466
- package/src/validation/common.ts +0 -53
- package/src/validation/csrf.ts +0 -214
- package/src/validation/index.ts +0 -43
- package/src/validation/passwordSchema.ts +0 -125
- package/src/validation/sanitization.ts +0 -96
- package/src/validation/schemaUtils.ts +0 -42
- package/src/validation/sqlInjectionProtection.ts +0 -242
- package/src/validation/user.ts +0 -34
- package/dist/{DataTable-EEUDXPE5.js.map → DataTable-2LB6HI6V.js.map} +0 -0
- package/dist/{api-ETQ6YJ3C.js.map → api-AIJ3IJX3.js.map} +0 -0
- package/dist/{appNameResolver-7GHF5ED2.js.map → audit-PD5L5ZSC.js.map} +0 -0
- package/dist/{audit-BUW3LMJB.js.map → chunk-DC5AMYBS.js.map} +0 -0
- package/dist/{validation-PM_iOaTI.d.ts → validation-D2-NNCCE.d.ts} +6 -6
|
@@ -1,782 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Dialog Component System
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/Dialog
|
|
5
|
-
* @since 0.1.0
|
|
6
|
-
*
|
|
7
|
-
* A comprehensive dialog component system built on top of Radix UI primitives.
|
|
8
|
-
* Provides accessible modal dialogs with focus management and keyboard navigation.
|
|
9
|
-
* Uses semantic HTML elements including native <dialog> element for maximum accessibility.
|
|
10
|
-
*
|
|
11
|
-
* Features:
|
|
12
|
-
* - Semantic HTML structure (native <dialog>, header, main, footer elements)
|
|
13
|
-
* - Focus trapping within dialog content
|
|
14
|
-
* - Keyboard navigation (Escape to close, Tab for focus management)
|
|
15
|
-
* - Screen reader support with proper ARIA attributes
|
|
16
|
-
* - Native dialog element with enhanced styling
|
|
17
|
-
* - Complete semantic landmark structure for accessibility
|
|
18
|
-
* - Smooth animations and transitions
|
|
19
|
-
* - Customizable styling and positioning
|
|
20
|
-
* - Multiple size variants (sm, md, lg, xl, full, auto)
|
|
21
|
-
* - Responsive design with smart height management
|
|
22
|
-
* - Automatic height constraints based on viewport
|
|
23
|
-
* - Scrollable content areas when content overflows
|
|
24
|
-
* - Sticky headers/footers with scrollable body
|
|
25
|
-
* - Overlay backdrop with customization
|
|
26
|
-
* - Close button with accessibility (optional)
|
|
27
|
-
* - Header, footer, title, and description components
|
|
28
|
-
* - Configurable close behaviors
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```tsx
|
|
32
|
-
* // Basic dialog with semantic structure
|
|
33
|
-
* <Dialog>
|
|
34
|
-
* <DialogTrigger asChild>
|
|
35
|
-
* <Button>Open Dialog</Button>
|
|
36
|
-
* </DialogTrigger>
|
|
37
|
-
* <DialogContent size="lg">
|
|
38
|
-
* <DialogHeader>
|
|
39
|
-
* <DialogTitle>Edit Profile</DialogTitle>
|
|
40
|
-
* <DialogDescription>
|
|
41
|
-
* Make changes to your profile here. Click save when you're done.
|
|
42
|
-
* </DialogDescription>
|
|
43
|
-
* </DialogHeader>
|
|
44
|
-
* <DialogBody>
|
|
45
|
-
* <section className="space-y-4">
|
|
46
|
-
* <div className="grid grid-cols-4 items-center gap-4">
|
|
47
|
-
* <Label htmlFor="name" className="text-right">Name</Label>
|
|
48
|
-
* <Input id="name" defaultValue="John Doe" className="col-span-3" />
|
|
49
|
-
* </div>
|
|
50
|
-
* </section>
|
|
51
|
-
* </DialogBody>
|
|
52
|
-
* <DialogFooter>
|
|
53
|
-
* <Button type="submit">Save changes</Button>
|
|
54
|
-
* </DialogFooter>
|
|
55
|
-
* </DialogContent>
|
|
56
|
-
* </Dialog>
|
|
57
|
-
*
|
|
58
|
-
* // Dialog with semantic scrolling content
|
|
59
|
-
* <Dialog>
|
|
60
|
-
* <DialogTrigger asChild>
|
|
61
|
-
* <Button>Scrollable Dialog</Button>
|
|
62
|
-
* </DialogTrigger>
|
|
63
|
-
* <DialogContent
|
|
64
|
-
* size="lg"
|
|
65
|
-
* enableScrolling={true}
|
|
66
|
-
* maxHeightPercent={80}
|
|
67
|
-
* >
|
|
68
|
-
* <DialogHeader>
|
|
69
|
-
* <DialogTitle>Large Content Dialog</DialogTitle>
|
|
70
|
-
* <DialogDescription>
|
|
71
|
-
* This dialog has lots of content and will scroll if needed.
|
|
72
|
-
* </DialogDescription>
|
|
73
|
-
* </DialogHeader>
|
|
74
|
-
* <DialogBody>
|
|
75
|
-
* <section className="space-y-4">
|
|
76
|
-
* {Array.from({ length: 50 }, (_, i) => (
|
|
77
|
-
* <article key={i}>
|
|
78
|
-
* <h4>Content Item {i + 1}</h4>
|
|
79
|
-
* <p>This is semantic content within the dialog body.</p>
|
|
80
|
-
* </article>
|
|
81
|
-
* ))}
|
|
82
|
-
* </section>
|
|
83
|
-
* </DialogBody>
|
|
84
|
-
* <DialogFooter>
|
|
85
|
-
* <Button>Save</Button>
|
|
86
|
-
* </DialogFooter>
|
|
87
|
-
* </DialogContent>
|
|
88
|
-
* </Dialog>
|
|
89
|
-
*
|
|
90
|
-
* // Auto-sizing dialog that fits content
|
|
91
|
-
* <Dialog>
|
|
92
|
-
* <DialogTrigger asChild>
|
|
93
|
-
* <Button>Auto Size Dialog</Button>
|
|
94
|
-
* </DialogTrigger>
|
|
95
|
-
* <DialogContent size="auto">
|
|
96
|
-
* <DialogHeader>
|
|
97
|
-
* <DialogTitle>Auto-Sized Dialog</DialogTitle>
|
|
98
|
-
* <DialogDescription>
|
|
99
|
-
* This dialog automatically adjusts its width to fit the content.
|
|
100
|
-
* </DialogDescription>
|
|
101
|
-
* </DialogHeader>
|
|
102
|
-
* <DialogBody>
|
|
103
|
-
* <section>
|
|
104
|
-
* <p>Content that determines the dialog width...</p>
|
|
105
|
-
* </section>
|
|
106
|
-
* </DialogBody>
|
|
107
|
-
* </DialogContent>
|
|
108
|
-
* </Dialog>
|
|
109
|
-
*
|
|
110
|
-
* // Full-screen dialog with semantic structure
|
|
111
|
-
* <Dialog>
|
|
112
|
-
* <DialogTrigger asChild>
|
|
113
|
-
* <Button>Full Screen</Button>
|
|
114
|
-
* </DialogTrigger>
|
|
115
|
-
* <DialogContent size="full">
|
|
116
|
-
* <DialogHeader>
|
|
117
|
-
* <DialogTitle>Full Screen Dialog</DialogTitle>
|
|
118
|
-
* </DialogHeader>
|
|
119
|
-
* <DialogBody>
|
|
120
|
-
* <section>
|
|
121
|
-
* <p>Full screen content with semantic structure...</p>
|
|
122
|
-
* </section>
|
|
123
|
-
* </DialogBody>
|
|
124
|
-
* </DialogContent>
|
|
125
|
-
* </Dialog>
|
|
126
|
-
* ```
|
|
127
|
-
*
|
|
128
|
-
* @accessibility
|
|
129
|
-
* - WCAG 2.1 AA compliant
|
|
130
|
-
* - Uses semantic HTML structure (dialog, header, main, footer)
|
|
131
|
-
* - Native dialog element with enhanced ARIA attributes via Radix UI
|
|
132
|
-
* - Focus trapping within dialog content
|
|
133
|
-
* - Keyboard navigation support
|
|
134
|
-
* - Screen reader announcements
|
|
135
|
-
* - Focus restoration when closed
|
|
136
|
-
* - Escape key to close (configurable)
|
|
137
|
-
* - Tab key focus management
|
|
138
|
-
* - Close button with screen reader text (optional)
|
|
139
|
-
* - Scrollable regions properly announced to screen readers
|
|
140
|
-
* - Complete semantic landmark structure for screen reader navigation
|
|
141
|
-
*
|
|
142
|
-
* @performance
|
|
143
|
-
* - Efficient focus management
|
|
144
|
-
* - Optimized animations
|
|
145
|
-
* - Memory leak prevention
|
|
146
|
-
* - Conditional rendering
|
|
147
|
-
* - Optimized scroll handling
|
|
148
|
-
*
|
|
149
|
-
* @dependencies
|
|
150
|
-
* - @radix-ui/react-dialog - Core dialog functionality
|
|
151
|
-
* - lucide-react - Icons
|
|
152
|
-
* - React 18+ - Hooks and refs
|
|
153
|
-
* - Tailwind CSS - Styling and animations
|
|
154
|
-
*/
|
|
155
|
-
|
|
156
|
-
import * as React from 'react';
|
|
157
|
-
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
158
|
-
import { X } from 'lucide-react';
|
|
159
|
-
import { cn } from '../../utils/cn';
|
|
160
|
-
import { renderSafeHtml } from './utils/safeHtml';
|
|
161
|
-
import { useState, useEffect } from 'react';
|
|
162
|
-
import { debounce } from 'lodash';
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Dialog size variants
|
|
166
|
-
* @public
|
|
167
|
-
*/
|
|
168
|
-
export type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full' | 'auto';
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Props for the Dialog root component
|
|
172
|
-
* @public
|
|
173
|
-
*/
|
|
174
|
-
export interface DialogProps extends DialogPrimitive.DialogProps {}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Props for the DialogTrigger component
|
|
178
|
-
* @public
|
|
179
|
-
*/
|
|
180
|
-
export interface DialogTriggerProps extends DialogPrimitive.DialogTriggerProps {}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Enhanced props for the DialogContent component with size variants and customization
|
|
184
|
-
* Uses semantic HTML dialog element with Radix UI accessibility features
|
|
185
|
-
* @public
|
|
186
|
-
*/
|
|
187
|
-
export interface DialogContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
|
|
188
|
-
/** Dialog size variant */
|
|
189
|
-
size?: DialogSize;
|
|
190
|
-
/** Whether to show the close button */
|
|
191
|
-
showCloseButton?: boolean;
|
|
192
|
-
/** Custom className for the overlay */
|
|
193
|
-
overlayClassName?: string;
|
|
194
|
-
/** Whether to prevent closing on escape key */
|
|
195
|
-
preventCloseOnEscape?: boolean;
|
|
196
|
-
/** Whether to prevent closing on outside click */
|
|
197
|
-
preventCloseOnOutsideClick?: boolean;
|
|
198
|
-
/** Maximum height as percentage of viewport height (0-100) */
|
|
199
|
-
maxHeightPercent?: number;
|
|
200
|
-
/** Maximum width as percentage of viewport width (0-100) */
|
|
201
|
-
maxWidthPercent?: number;
|
|
202
|
-
/** Enable smart scrolling with sticky header/footer */
|
|
203
|
-
enableScrolling?: boolean;
|
|
204
|
-
/** Custom max height in CSS units (overrides maxHeightPercent) */
|
|
205
|
-
maxHeight?: string;
|
|
206
|
-
/** Custom max width in CSS units (overrides maxWidthPercent and size) */
|
|
207
|
-
maxWidth?: string;
|
|
208
|
-
/** Minimum height in CSS units */
|
|
209
|
-
minHeight?: string;
|
|
210
|
-
/** Minimum width in CSS units */
|
|
211
|
-
minWidth?: string;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Props for the DialogOverlay component
|
|
216
|
-
* @public
|
|
217
|
-
*/
|
|
218
|
-
export interface DialogOverlayProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> {}
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* Props for the DialogHeader component (semantic header element)
|
|
222
|
-
* @public
|
|
223
|
-
*/
|
|
224
|
-
export interface DialogHeaderProps extends React.HTMLAttributes<HTMLElement> {
|
|
225
|
-
/** Whether this header should be sticky when scrolling is enabled */
|
|
226
|
-
sticky?: boolean;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Props for the DialogFooter component (semantic footer element)
|
|
231
|
-
* @public
|
|
232
|
-
*/
|
|
233
|
-
export interface DialogFooterProps extends React.HTMLAttributes<HTMLElement> {
|
|
234
|
-
/** Whether this footer should be sticky when scrolling is enabled */
|
|
235
|
-
sticky?: boolean;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Props for the DialogBody component (semantic main element)
|
|
240
|
-
* @public
|
|
241
|
-
*/
|
|
242
|
-
export interface DialogBodyProps extends React.HTMLAttributes<HTMLElement> {
|
|
243
|
-
/** Custom max height for the scrollable area */
|
|
244
|
-
maxHeight?: string;
|
|
245
|
-
/** HTML content to render (will be sanitized for security) */
|
|
246
|
-
htmlContent?: string;
|
|
247
|
-
/** Whether to allow HTML content rendering (default: true) */
|
|
248
|
-
allowHtml?: boolean;
|
|
249
|
-
/** Whether to use strict HTML sanitization (default: true) */
|
|
250
|
-
strictSanitization?: boolean;
|
|
251
|
-
/** Whether to log HTML sanitization warnings to console (default: false) */
|
|
252
|
-
logWarnings?: boolean;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
/**
|
|
256
|
-
* Props for the DialogTitle component
|
|
257
|
-
* @public
|
|
258
|
-
*/
|
|
259
|
-
export interface DialogTitleProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> {
|
|
260
|
-
/** HTML content to render as title (will be sanitized for security) */
|
|
261
|
-
htmlContent?: string;
|
|
262
|
-
/** Whether to allow HTML content rendering (default: true) */
|
|
263
|
-
allowHtml?: boolean;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Props for the DialogDescription component
|
|
268
|
-
* @public
|
|
269
|
-
*/
|
|
270
|
-
export interface DialogDescriptionProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description> {
|
|
271
|
-
/** HTML content to render as description (will be sanitized for security) */
|
|
272
|
-
htmlContent?: string;
|
|
273
|
-
/** Whether to allow HTML content rendering (default: true) */
|
|
274
|
-
allowHtml?: boolean;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// Size mapping for dialog variants
|
|
278
|
-
const sizeClasses = {
|
|
279
|
-
sm: 'max-w-sm',
|
|
280
|
-
md: 'max-w-md',
|
|
281
|
-
lg: 'max-w-lg',
|
|
282
|
-
xl: 'max-w-xl',
|
|
283
|
-
full: 'max-w-full h-full',
|
|
284
|
-
auto: 'max-w-none w-auto min-w-0'
|
|
285
|
-
};
|
|
286
|
-
|
|
287
|
-
// Root Dialog components from Radix
|
|
288
|
-
const Dialog = DialogPrimitive.Root;
|
|
289
|
-
const DialogTrigger = DialogPrimitive.Trigger;
|
|
290
|
-
const DialogPortal = DialogPrimitive.Portal;
|
|
291
|
-
const DialogClose = DialogPrimitive.Close;
|
|
292
|
-
|
|
293
|
-
// DialogOverlay component
|
|
294
|
-
const DialogOverlay = React.forwardRef<
|
|
295
|
-
React.ElementRef<typeof DialogPrimitive.Overlay>,
|
|
296
|
-
DialogOverlayProps
|
|
297
|
-
>(({ className, ...props }, ref) => (
|
|
298
|
-
<DialogPrimitive.Overlay
|
|
299
|
-
ref={ref}
|
|
300
|
-
className={cn(
|
|
301
|
-
'fixed inset-0 z-50 bg-main-950/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
|
|
302
|
-
className
|
|
303
|
-
)}
|
|
304
|
-
{...props}
|
|
305
|
-
/>
|
|
306
|
-
));
|
|
307
|
-
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Custom hook for managing smart dialog dimensions
|
|
311
|
-
* Handles responsive sizing and viewport-based constraints
|
|
312
|
-
*/
|
|
313
|
-
const useSmartDimensions = ({
|
|
314
|
-
maxHeightPercent,
|
|
315
|
-
maxWidthPercent,
|
|
316
|
-
maxHeight,
|
|
317
|
-
maxWidth,
|
|
318
|
-
minHeight,
|
|
319
|
-
minWidth,
|
|
320
|
-
enableScrolling = false,
|
|
321
|
-
}: {
|
|
322
|
-
maxHeightPercent?: number;
|
|
323
|
-
maxWidthPercent?: number;
|
|
324
|
-
maxHeight?: string;
|
|
325
|
-
maxWidth?: string;
|
|
326
|
-
minHeight?: string;
|
|
327
|
-
minWidth?: string;
|
|
328
|
-
enableScrolling?: boolean;
|
|
329
|
-
}) => {
|
|
330
|
-
const [dimensions, setDimensions] = useState<React.CSSProperties>({});
|
|
331
|
-
|
|
332
|
-
useEffect(() => {
|
|
333
|
-
if (!maxHeightPercent && !maxWidthPercent && !maxHeight && !maxWidth && !minHeight && !minWidth) {
|
|
334
|
-
return;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
const updateDimensions = () => {
|
|
338
|
-
const result: React.CSSProperties = {};
|
|
339
|
-
|
|
340
|
-
// Handle height constraints
|
|
341
|
-
if (maxHeightPercent && typeof maxHeightPercent === 'number') {
|
|
342
|
-
const constrainedHeight = Math.min(maxHeightPercent, 95); // Cap at 95% to ensure some margin
|
|
343
|
-
result.maxHeight = `${constrainedHeight}vh`;
|
|
344
|
-
} else if (maxHeight) {
|
|
345
|
-
result.maxHeight = maxHeight;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
// Handle width constraints
|
|
349
|
-
if (maxWidthPercent && typeof maxWidthPercent === 'number') {
|
|
350
|
-
const constrainedWidth = Math.min(maxWidthPercent, 95); // Cap at 95% to ensure some margin
|
|
351
|
-
result.maxWidth = `${constrainedWidth}vw`;
|
|
352
|
-
} else if (maxWidth) {
|
|
353
|
-
result.maxWidth = maxWidth;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// Include minHeight/minWidth if provided
|
|
357
|
-
if (minHeight) {
|
|
358
|
-
result.minHeight = minHeight;
|
|
359
|
-
}
|
|
360
|
-
if (minWidth) {
|
|
361
|
-
result.minWidth = minWidth;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
setDimensions(result);
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
// Debounced resize handler
|
|
368
|
-
const debouncedUpdate = debounce(updateDimensions, 100);
|
|
369
|
-
|
|
370
|
-
// Initial calculation
|
|
371
|
-
updateDimensions();
|
|
372
|
-
|
|
373
|
-
// Listen for resize events
|
|
374
|
-
window.addEventListener('resize', debouncedUpdate);
|
|
375
|
-
|
|
376
|
-
return () => {
|
|
377
|
-
window.removeEventListener('resize', debouncedUpdate);
|
|
378
|
-
debouncedUpdate.cancel();
|
|
379
|
-
};
|
|
380
|
-
}, [maxHeightPercent, maxWidthPercent, maxHeight, maxWidth, minHeight, minWidth, enableScrolling]);
|
|
381
|
-
|
|
382
|
-
// Only return dimensions if we have something to constrain
|
|
383
|
-
const result: React.CSSProperties = {};
|
|
384
|
-
|
|
385
|
-
// Handle height constraints
|
|
386
|
-
if (maxHeightPercent && typeof maxHeightPercent === 'number') {
|
|
387
|
-
const constrainedHeight = Math.min(maxHeightPercent, 95);
|
|
388
|
-
result.maxHeight = `${constrainedHeight}vh`;
|
|
389
|
-
} else if (maxHeight) {
|
|
390
|
-
result.maxHeight = maxHeight;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
// Handle width constraints
|
|
394
|
-
if (maxWidthPercent && typeof maxWidthPercent === 'number') {
|
|
395
|
-
const constrainedWidth = Math.min(maxWidthPercent, 95);
|
|
396
|
-
result.maxWidth = `${constrainedWidth}vw`;
|
|
397
|
-
} else if (maxWidth) {
|
|
398
|
-
result.maxWidth = maxWidth;
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
// Include minHeight/minWidth if provided
|
|
402
|
-
if (minHeight) {
|
|
403
|
-
result.minHeight = minHeight;
|
|
404
|
-
}
|
|
405
|
-
if (minWidth) {
|
|
406
|
-
result.minWidth = minWidth;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
return result;
|
|
410
|
-
};
|
|
411
|
-
|
|
412
|
-
/**
|
|
413
|
-
* DialogContent component
|
|
414
|
-
* The main content container using semantic HTML <dialog> element with enhanced features
|
|
415
|
-
* Built on Radix UI primitives for accessibility while providing semantic structure
|
|
416
|
-
*
|
|
417
|
-
* @param props - Content configuration and styling
|
|
418
|
-
* @param ref - Forwarded ref to the dialog element
|
|
419
|
-
* @returns JSX.Element - The semantic dialog content with overlay and optional close button
|
|
420
|
-
*
|
|
421
|
-
* @example
|
|
422
|
-
* ```tsx
|
|
423
|
-
* <DialogContent size="lg" enableScrolling={true} maxHeightPercent={80}>
|
|
424
|
-
* <DialogHeader>
|
|
425
|
-
* <DialogTitle>Scrollable Dialog</DialogTitle>
|
|
426
|
-
* <DialogDescription>This dialog will scroll if content overflows.</DialogDescription>
|
|
427
|
-
* </DialogHeader>
|
|
428
|
-
* <DialogBody>
|
|
429
|
-
* <section>Large amount of semantic content here...</section>
|
|
430
|
-
* </DialogBody>
|
|
431
|
-
* <DialogFooter>
|
|
432
|
-
* <Button>Save</Button>
|
|
433
|
-
* </DialogFooter>
|
|
434
|
-
* </DialogContent>
|
|
435
|
-
* ```
|
|
436
|
-
*/
|
|
437
|
-
const DialogContent = React.forwardRef<
|
|
438
|
-
React.ElementRef<typeof DialogPrimitive.Content>,
|
|
439
|
-
DialogContentProps
|
|
440
|
-
>(({
|
|
441
|
-
className,
|
|
442
|
-
children,
|
|
443
|
-
size = 'md',
|
|
444
|
-
showCloseButton = true,
|
|
445
|
-
overlayClassName,
|
|
446
|
-
preventCloseOnEscape = false,
|
|
447
|
-
preventCloseOnOutsideClick = false,
|
|
448
|
-
maxHeightPercent,
|
|
449
|
-
maxWidthPercent,
|
|
450
|
-
enableScrolling = false,
|
|
451
|
-
maxHeight,
|
|
452
|
-
maxWidth,
|
|
453
|
-
minHeight,
|
|
454
|
-
minWidth,
|
|
455
|
-
style,
|
|
456
|
-
...props
|
|
457
|
-
}, ref) => {
|
|
458
|
-
const smartDimensions = useSmartDimensions({
|
|
459
|
-
maxHeightPercent,
|
|
460
|
-
maxWidthPercent,
|
|
461
|
-
maxHeight,
|
|
462
|
-
maxWidth,
|
|
463
|
-
minHeight,
|
|
464
|
-
minWidth,
|
|
465
|
-
enableScrolling
|
|
466
|
-
});
|
|
467
|
-
|
|
468
|
-
const handleEscapeKeyDown = React.useCallback((event: KeyboardEvent) => {
|
|
469
|
-
if (preventCloseOnEscape) {
|
|
470
|
-
event.preventDefault();
|
|
471
|
-
}
|
|
472
|
-
}, [preventCloseOnEscape]);
|
|
473
|
-
|
|
474
|
-
const handlePointerDownOutside = React.useCallback((event: Event) => {
|
|
475
|
-
if (preventCloseOnOutsideClick) {
|
|
476
|
-
event.preventDefault();
|
|
477
|
-
}
|
|
478
|
-
}, [preventCloseOnOutsideClick]);
|
|
479
|
-
|
|
480
|
-
// Merge smart dimensions with provided style
|
|
481
|
-
const mergedStyle = React.useMemo(() => {
|
|
482
|
-
// If no smart dimensions are active, just return the provided style
|
|
483
|
-
if (Object.keys(smartDimensions).length === 0) {
|
|
484
|
-
return style;
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
// Start with smart dimensions
|
|
488
|
-
const finalStyle: React.CSSProperties = { ...smartDimensions, ...style };
|
|
489
|
-
|
|
490
|
-
// If not using smart width and no maxWidth override, don't include maxWidth
|
|
491
|
-
if (!maxWidth && !maxWidthPercent) {
|
|
492
|
-
const { maxWidth: _, ...styleWithoutMaxWidth } = finalStyle;
|
|
493
|
-
return styleWithoutMaxWidth;
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
return finalStyle;
|
|
497
|
-
}, [smartDimensions, style, maxWidth, maxWidthPercent]);
|
|
498
|
-
|
|
499
|
-
return (
|
|
500
|
-
<DialogPortal>
|
|
501
|
-
<DialogOverlay className={overlayClassName} />
|
|
502
|
-
<DialogPrimitive.Content
|
|
503
|
-
ref={ref}
|
|
504
|
-
onEscapeKeyDown={preventCloseOnEscape ? handleEscapeKeyDown : undefined}
|
|
505
|
-
onPointerDownOutside={handlePointerDownOutside}
|
|
506
|
-
className={cn(
|
|
507
|
-
'fixed left-[50%] top-[50%] z-50 w-full translate-x-[-50%] translate-y-[-50%] border bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',
|
|
508
|
-
// Reset native dialog styles that interfere with our custom styling
|
|
509
|
-
'm-0 p-0 max-w-none max-h-none w-auto h-auto border-0 bg-transparent outline-none',
|
|
510
|
-
// Apply our custom styling
|
|
511
|
-
'border bg-background shadow-lg',
|
|
512
|
-
// Only apply size classes if not using smart width
|
|
513
|
-
!maxWidth && !maxWidthPercent && sizeClasses[size],
|
|
514
|
-
// Auto size gets special handling for content fitting
|
|
515
|
-
size === 'auto' && 'w-fit max-w-[90vw] sm:max-w-[80vw]',
|
|
516
|
-
// Layout classes based on scrolling mode
|
|
517
|
-
enableScrolling ? 'flex flex-col' : 'grid gap-4 p-6',
|
|
518
|
-
// Full screen handling
|
|
519
|
-
size === 'full' && 'sm:left-[50%] sm:top-[50%] sm:translate-x-[-50%] sm:translate-y-[-50%] left-0 top-0 translate-x-0 translate-y-0 h-full rounded-none sm:h-auto sm:rounded-lg',
|
|
520
|
-
// Overflow handling for scrolling mode
|
|
521
|
-
enableScrolling && 'overflow-hidden',
|
|
522
|
-
className
|
|
523
|
-
)}
|
|
524
|
-
style={mergedStyle}
|
|
525
|
-
{...props}
|
|
526
|
-
>
|
|
527
|
-
{children}
|
|
528
|
-
{showCloseButton && (
|
|
529
|
-
<DialogPrimitive.Close className="absolute right-4 top-4 z-10 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
|
|
530
|
-
<X className="h-4 w-4" />
|
|
531
|
-
<span className="sr-only">Close</span>
|
|
532
|
-
</DialogPrimitive.Close>
|
|
533
|
-
)}
|
|
534
|
-
</DialogPrimitive.Content>
|
|
535
|
-
</DialogPortal>
|
|
536
|
-
);
|
|
537
|
-
});
|
|
538
|
-
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
539
|
-
|
|
540
|
-
/**
|
|
541
|
-
* DialogHeader component
|
|
542
|
-
* Semantic header container for dialog title and description with optional sticky behavior
|
|
543
|
-
*
|
|
544
|
-
* @param props - Header configuration and styling
|
|
545
|
-
* @returns JSX.Element - The dialog header container using semantic <header> element
|
|
546
|
-
*
|
|
547
|
-
* @example
|
|
548
|
-
* ```tsx
|
|
549
|
-
* <DialogHeader sticky={true}>
|
|
550
|
-
* <DialogTitle>Sticky Header</DialogTitle>
|
|
551
|
-
* <DialogDescription>This header stays visible while scrolling.</DialogDescription>
|
|
552
|
-
* </DialogHeader>
|
|
553
|
-
* ```
|
|
554
|
-
*/
|
|
555
|
-
const DialogHeader = ({
|
|
556
|
-
className,
|
|
557
|
-
sticky = false,
|
|
558
|
-
...props
|
|
559
|
-
}: DialogHeaderProps) => (
|
|
560
|
-
<header
|
|
561
|
-
className={cn(
|
|
562
|
-
'flex flex-col space-y-1.5 text-center sm:text-left',
|
|
563
|
-
sticky ? 'sticky top-0 z-10 bg-background p-6 pb-4 border-b' : 'p-6 pb-4',
|
|
564
|
-
className
|
|
565
|
-
)}
|
|
566
|
-
{...props}
|
|
567
|
-
/>
|
|
568
|
-
);
|
|
569
|
-
DialogHeader.displayName = 'DialogHeader';
|
|
570
|
-
|
|
571
|
-
/**
|
|
572
|
-
* DialogBody component
|
|
573
|
-
* Semantic main content area for dialog body content with scrollable functionality
|
|
574
|
-
* Supports both React children and safe HTML content rendering
|
|
575
|
-
*
|
|
576
|
-
* @param props - Body configuration and styling
|
|
577
|
-
* @returns JSX.Element - The scrollable dialog body container using semantic <main> element
|
|
578
|
-
*
|
|
579
|
-
* @example
|
|
580
|
-
* ```tsx
|
|
581
|
-
* // Using React children
|
|
582
|
-
* <DialogBody>
|
|
583
|
-
* <section className="space-y-4">
|
|
584
|
-
* <h4>Content Title</h4>
|
|
585
|
-
* <p>Long content that will scroll...</p>
|
|
586
|
-
* </section>
|
|
587
|
-
* </DialogBody>
|
|
588
|
-
*
|
|
589
|
-
* // Using HTML content
|
|
590
|
-
* <DialogBody
|
|
591
|
-
* htmlContent="<h2>Import Instructions</h2><p>Upload a CSV file with the following format:</p><ul><li>Required columns: name, email</li><li>Optional columns: phone, address</li></ul>"
|
|
592
|
-
* allowHtml={true}
|
|
593
|
-
* />
|
|
594
|
-
* ```
|
|
595
|
-
*/
|
|
596
|
-
const DialogBody = ({
|
|
597
|
-
className,
|
|
598
|
-
maxHeight,
|
|
599
|
-
style,
|
|
600
|
-
htmlContent,
|
|
601
|
-
allowHtml = true,
|
|
602
|
-
strictSanitization = true,
|
|
603
|
-
logWarnings = false,
|
|
604
|
-
children,
|
|
605
|
-
...props
|
|
606
|
-
}: DialogBodyProps) => {
|
|
607
|
-
const mergedStyle = React.useMemo(() => {
|
|
608
|
-
return {
|
|
609
|
-
...(maxHeight && { maxHeight }),
|
|
610
|
-
...style,
|
|
611
|
-
};
|
|
612
|
-
}, [maxHeight, style]);
|
|
613
|
-
|
|
614
|
-
// Process HTML content if provided
|
|
615
|
-
const processedHtmlContent = React.useMemo(() => {
|
|
616
|
-
if (!htmlContent || !allowHtml) {
|
|
617
|
-
return null;
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
console.log('🔍 Dialog HTML Debug:', {
|
|
621
|
-
originalHtml: htmlContent,
|
|
622
|
-
allowHtml,
|
|
623
|
-
strictSanitization,
|
|
624
|
-
logWarnings
|
|
625
|
-
});
|
|
626
|
-
|
|
627
|
-
const result = renderSafeHtml(htmlContent, {
|
|
628
|
-
strict: strictSanitization,
|
|
629
|
-
logWarnings
|
|
630
|
-
});
|
|
631
|
-
|
|
632
|
-
console.log('🔍 Dialog HTML Result:', {
|
|
633
|
-
sanitizedHtml: result.html,
|
|
634
|
-
isValid: result.isValid,
|
|
635
|
-
warnings: result.warnings
|
|
636
|
-
});
|
|
637
|
-
|
|
638
|
-
return result.html;
|
|
639
|
-
}, [htmlContent, allowHtml, strictSanitization, logWarnings]);
|
|
640
|
-
|
|
641
|
-
return (
|
|
642
|
-
<main
|
|
643
|
-
className={cn(
|
|
644
|
-
'flex-1 overflow-y-auto px-6 py-2',
|
|
645
|
-
className
|
|
646
|
-
)}
|
|
647
|
-
style={mergedStyle}
|
|
648
|
-
aria-label="Dialog main content"
|
|
649
|
-
tabIndex={-1}
|
|
650
|
-
{...props}
|
|
651
|
-
>
|
|
652
|
-
{processedHtmlContent ? (
|
|
653
|
-
<div
|
|
654
|
-
dangerouslySetInnerHTML={{ __html: processedHtmlContent }}
|
|
655
|
-
className="prose prose-sm max-w-none"
|
|
656
|
-
/>
|
|
657
|
-
) : (
|
|
658
|
-
<div>
|
|
659
|
-
<div className="text-red-500 mb-2">
|
|
660
|
-
No HTML content processed. Showing children instead.
|
|
661
|
-
</div>
|
|
662
|
-
{children}
|
|
663
|
-
</div>
|
|
664
|
-
)}
|
|
665
|
-
</main>
|
|
666
|
-
);
|
|
667
|
-
};
|
|
668
|
-
DialogBody.displayName = 'DialogBody';
|
|
669
|
-
|
|
670
|
-
/**
|
|
671
|
-
* DialogFooter component
|
|
672
|
-
* Semantic footer container for dialog action buttons with optional sticky behavior
|
|
673
|
-
*
|
|
674
|
-
* @param props - Footer configuration and styling
|
|
675
|
-
* @returns JSX.Element - The dialog footer container using semantic <footer> element
|
|
676
|
-
*
|
|
677
|
-
* @example
|
|
678
|
-
* ```tsx
|
|
679
|
-
* <DialogFooter sticky={true}>
|
|
680
|
-
* <Button variant="outline">Cancel</Button>
|
|
681
|
-
* <Button>Save changes</Button>
|
|
682
|
-
* </DialogFooter>
|
|
683
|
-
* ```
|
|
684
|
-
*/
|
|
685
|
-
const DialogFooter = ({
|
|
686
|
-
className,
|
|
687
|
-
sticky = false,
|
|
688
|
-
...props
|
|
689
|
-
}: DialogFooterProps) => (
|
|
690
|
-
<footer
|
|
691
|
-
className={cn(
|
|
692
|
-
'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',
|
|
693
|
-
sticky ? 'sticky bottom-0 z-10 bg-background p-6 pt-4 border-t' : 'p-6 pt-4',
|
|
694
|
-
className
|
|
695
|
-
)}
|
|
696
|
-
{...props}
|
|
697
|
-
/>
|
|
698
|
-
);
|
|
699
|
-
DialogFooter.displayName = 'DialogFooter';
|
|
700
|
-
|
|
701
|
-
const DialogTitle = React.forwardRef<
|
|
702
|
-
React.ElementRef<typeof DialogPrimitive.Title>,
|
|
703
|
-
DialogTitleProps
|
|
704
|
-
>(({ className, htmlContent, allowHtml = true, children, ...props }, ref) => {
|
|
705
|
-
const processedHtmlContent = React.useMemo(() => {
|
|
706
|
-
if (!htmlContent || !allowHtml) {
|
|
707
|
-
return null;
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
const result = renderSafeHtml(htmlContent, {
|
|
711
|
-
strict: true,
|
|
712
|
-
logWarnings: false
|
|
713
|
-
});
|
|
714
|
-
|
|
715
|
-
return result.html;
|
|
716
|
-
}, [htmlContent, allowHtml]);
|
|
717
|
-
|
|
718
|
-
return (
|
|
719
|
-
<DialogPrimitive.Title
|
|
720
|
-
ref={ref}
|
|
721
|
-
className={cn(
|
|
722
|
-
'text-lg font-semibold leading-none tracking-tight',
|
|
723
|
-
className
|
|
724
|
-
)}
|
|
725
|
-
{...props}
|
|
726
|
-
>
|
|
727
|
-
{processedHtmlContent ? (
|
|
728
|
-
<span dangerouslySetInnerHTML={{ __html: processedHtmlContent }} />
|
|
729
|
-
) : (
|
|
730
|
-
children
|
|
731
|
-
)}
|
|
732
|
-
</DialogPrimitive.Title>
|
|
733
|
-
);
|
|
734
|
-
});
|
|
735
|
-
DialogTitle.displayName = DialogPrimitive.Title.displayName;
|
|
736
|
-
|
|
737
|
-
const DialogDescription = React.forwardRef<
|
|
738
|
-
React.ElementRef<typeof DialogPrimitive.Description>,
|
|
739
|
-
DialogDescriptionProps
|
|
740
|
-
>(({ className, htmlContent, allowHtml = true, children, ...props }, ref) => {
|
|
741
|
-
const processedHtmlContent = React.useMemo(() => {
|
|
742
|
-
if (!htmlContent || !allowHtml) {
|
|
743
|
-
return null;
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
const result = renderSafeHtml(htmlContent, {
|
|
747
|
-
strict: true,
|
|
748
|
-
logWarnings: false
|
|
749
|
-
});
|
|
750
|
-
|
|
751
|
-
return result.html;
|
|
752
|
-
}, [htmlContent, allowHtml]);
|
|
753
|
-
|
|
754
|
-
return (
|
|
755
|
-
<DialogPrimitive.Description
|
|
756
|
-
ref={ref}
|
|
757
|
-
className={cn('text-sm text-muted-foreground', className)}
|
|
758
|
-
{...props}
|
|
759
|
-
>
|
|
760
|
-
{processedHtmlContent ? (
|
|
761
|
-
<span dangerouslySetInnerHTML={{ __html: processedHtmlContent }} />
|
|
762
|
-
) : (
|
|
763
|
-
children
|
|
764
|
-
)}
|
|
765
|
-
</DialogPrimitive.Description>
|
|
766
|
-
);
|
|
767
|
-
});
|
|
768
|
-
DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
769
|
-
|
|
770
|
-
export {
|
|
771
|
-
Dialog,
|
|
772
|
-
DialogPortal,
|
|
773
|
-
DialogOverlay,
|
|
774
|
-
DialogClose,
|
|
775
|
-
DialogTrigger,
|
|
776
|
-
DialogContent,
|
|
777
|
-
DialogHeader,
|
|
778
|
-
DialogBody,
|
|
779
|
-
DialogFooter,
|
|
780
|
-
DialogTitle,
|
|
781
|
-
DialogDescription,
|
|
782
|
-
};
|