@jmruthers/pace-core 0.6.5 → 0.6.7
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 +104 -0
- package/README.md +5 -403
- package/audit-tool/00-dependencies.cjs +394 -0
- package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
- package/audit-tool/audits/02-project-structure.cjs +255 -0
- package/audit-tool/audits/03-architecture.cjs +196 -0
- package/audit-tool/audits/04-code-quality.cjs +149 -0
- package/audit-tool/audits/05-styling.cjs +224 -0
- package/audit-tool/audits/06-security-rbac.cjs +544 -0
- package/audit-tool/audits/07-api-tech-stack.cjs +301 -0
- package/audit-tool/audits/08-testing-documentation.cjs +202 -0
- package/audit-tool/audits/09-operations.cjs +208 -0
- package/audit-tool/index.cjs +291 -0
- package/audit-tool/utils/code-utils.cjs +218 -0
- package/audit-tool/utils/file-utils.cjs +230 -0
- package/audit-tool/utils/report-utils.cjs +241 -0
- package/core-usage-manifest.json +93 -0
- package/cursor-rules/00-standards-overview.mdc +156 -0
- package/cursor-rules/01-pace-core-compliance.mdc +586 -0
- package/cursor-rules/02-project-structure.mdc +42 -4
- package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +126 -10
- package/cursor-rules/04-code-quality.mdc +419 -0
- package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +104 -34
- package/cursor-rules/06-security-rbac.mdc +518 -0
- package/cursor-rules/07-api-tech-stack.mdc +377 -0
- package/cursor-rules/08-testing-documentation.mdc +324 -0
- package/cursor-rules/09-operations.mdc +365 -0
- package/dist/{AuthService-Cb34EQs3.d.ts → AuthService-DmfO5rGS.d.ts} +10 -0
- package/dist/DataTable-7PMH7XN7.js +15 -0
- package/dist/{DataTable-BMRU8a1j.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
- package/dist/{PublicPageProvider-QTFVrL-Z.d.ts → PublicPageProvider-DlsCaR5v.d.ts} +33 -72
- package/dist/UnifiedAuthProvider-ZT6TIGM7.js +7 -0
- package/dist/api-Y4MQWOFW.js +4 -0
- package/dist/audit-MYQXYZFU.js +3 -0
- package/dist/{chunk-DGUM43GV.js → chunk-3RG5ZIWI.js} +1 -4
- package/dist/{chunk-QXHPKYJV.js → chunk-4SXLQIZO.js} +1 -26
- package/dist/{chunk-UPPMRMYG.js → chunk-5X4QLXRG.js} +73 -151
- package/dist/chunk-6F3IILHI.js +62 -0
- package/dist/{chunk-E66EQZE6.js → chunk-6GLLNA6U.js} +3 -9
- package/dist/{chunk-ZSAAAMVR.js → chunk-6QYDGKQY.js} +1 -4
- package/dist/{chunk-FMUCXFII.js → chunk-7ILTDCL2.js} +9 -5
- package/dist/{chunk-M43Y4SSO.js → chunk-A3W6LW53.js} +15 -13
- package/dist/{chunk-63FOKYGO.js → chunk-AHU7G2R5.js} +2 -11
- package/dist/{chunk-HU2C6SSC.js → chunk-BM4CQ5P3.js} +606 -559
- package/dist/chunk-C7NSAPTL.js +1 -0
- package/dist/{chunk-J36DSWQK.js → chunk-FEJLJNWA.js} +7 -41
- package/dist/{chunk-IHB5DR3H.js → chunk-FTCRZOG2.js} +188 -387
- package/dist/{chunk-G37KK66H.js → chunk-FYHN4DD5.js} +60 -19
- package/dist/chunk-GHYHJTYV.js +994 -0
- package/dist/{chunk-VBXEHIUJ.js → chunk-HF6O3O37.js} +6 -88
- package/dist/{chunk-FFQEQTNW.js → chunk-IUBRCBSY.js} +134 -45
- package/dist/{chunk-6COVEUS7.js → chunk-JGWDVX64.js} +983 -1034
- package/dist/{chunk-RGAWHO7N.js → chunk-L4XMVJKY.js} +77 -222
- package/dist/chunk-MBADTM7L.js +64 -0
- package/dist/{chunk-M7MPQISP.js → chunk-OJ4SKRSV.js} +3 -16
- package/dist/{chunk-IVOFDYWT.js → chunk-Q7Q7V5NV.js} +2109 -1604
- package/dist/{chunk-JGRYX5UX.js → chunk-S7DKJPLT.js} +29 -58
- package/dist/{chunk-PWLANIRT.js → chunk-TTRFSOKR.js} +1 -7
- package/dist/{chunk-5DRSZLL2.js → chunk-UH3NTO3F.js} +1 -6
- package/dist/{chunk-NTM7ZSB6.js → chunk-VBCS3DUA.js} +261 -168
- package/dist/{chunk-EFN2EIMK.js → chunk-ZFYPMX46.js} +271 -87
- package/dist/{chunk-L4OXEN46.js → chunk-ZKAWKYT4.js} +10 -24
- package/dist/components.d.ts +7 -5
- package/dist/components.js +46 -257
- package/dist/{database.generated-CzIvgcPu.d.ts → database.generated-CcnC_DRc.d.ts} +4795 -3691
- package/dist/eslint-rules/index.cjs +35 -0
- package/{src/eslint-rules/pace-core-compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +234 -235
- package/dist/eslint-rules/rules/04-code-quality.cjs +290 -0
- package/dist/eslint-rules/rules/05-styling.cjs +61 -0
- package/dist/eslint-rules/rules/06-security-rbac.cjs +806 -0
- package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
- package/dist/eslint-rules/rules/08-testing.cjs +94 -0
- package/dist/eslint-rules/utils/helpers.cjs +42 -0
- package/dist/eslint-rules/utils/manifest-loader.cjs +75 -0
- package/dist/hooks.d.ts +6 -6
- package/dist/hooks.js +62 -172
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +1 -0
- package/dist/index.d.ts +12 -11
- package/dist/index.js +67 -660
- package/dist/providers.d.ts +2 -2
- package/dist/providers.js +8 -35
- package/dist/rbac/eslint-rules.d.ts +46 -44
- package/dist/rbac/eslint-rules.js +7 -4
- package/dist/rbac/index.d.ts +109 -586
- package/dist/rbac/index.js +14 -207
- package/dist/styles/index.js +2 -12
- package/dist/theming/runtime.d.ts +14 -1
- package/dist/theming/runtime.js +3 -19
- package/dist/{timezone-CHhWg6b4.d.ts → timezone-BZe_eUxx.d.ts} +175 -1
- package/dist/{types-CkbwOr4Y.d.ts → types-DXstZpNI.d.ts} +4 -17
- package/dist/types-t9H8qKRw.d.ts +55 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +7 -94
- package/dist/{usePublicRouteParams-ClnV4tnv.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +20 -20
- package/dist/utils.d.ts +24 -117
- package/dist/utils.js +54 -392
- package/docs/README.md +17 -7
- package/docs/api/README.md +4 -402
- package/docs/api/modules.md +301 -871
- package/docs/api-reference/components.md +21 -21
- package/docs/api-reference/deprecated.md +31 -6
- package/docs/api-reference/hooks.md +80 -80
- package/docs/api-reference/rpc-functions.md +78 -3
- package/docs/api-reference/types.md +1 -1
- package/docs/api-reference/utilities.md +1 -1
- package/docs/architecture/README.md +1 -1
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +6 -6
- package/docs/core-concepts/permissions.md +6 -6
- package/docs/documentation-index.md +12 -18
- package/docs/getting-started/cursor-rules.md +3 -23
- package/docs/getting-started/dependencies.md +650 -0
- package/docs/getting-started/documentation-index.md +1 -1
- package/docs/getting-started/examples/README.md +4 -4
- package/docs/getting-started/examples/full-featured-app.md +1 -1
- package/docs/getting-started/faq.md +2 -2
- package/docs/getting-started/installation-guide.md +20 -7
- package/docs/getting-started/quick-reference.md +4 -4
- package/docs/getting-started/quick-start.md +23 -12
- package/docs/implementation-guides/authentication.md +15 -15
- package/docs/implementation-guides/component-styling.md +1 -1
- package/docs/implementation-guides/data-tables.md +126 -33
- package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
- package/docs/implementation-guides/dynamic-colors.md +3 -3
- package/docs/implementation-guides/file-upload-storage.md +2 -2
- package/docs/implementation-guides/hierarchical-datatable.md +40 -60
- package/docs/implementation-guides/inactivity-tracking.md +3 -3
- package/docs/implementation-guides/large-datasets.md +3 -2
- package/docs/implementation-guides/organisation-security.md +2 -2
- package/docs/implementation-guides/performance.md +2 -2
- package/docs/implementation-guides/permission-enforcement.md +5 -1
- package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
- package/docs/migration/V0.4.0_rbac-migration.md +6 -6
- package/docs/rbac/MIGRATION_GUIDE.md +819 -0
- package/docs/rbac/RBAC_CONTRACT.md +724 -0
- package/docs/rbac/README.md +17 -8
- package/docs/rbac/advanced-patterns.md +6 -6
- package/docs/rbac/api-reference.md +20 -20
- package/docs/rbac/edge-functions-guide.md +376 -0
- package/docs/rbac/event-based-apps.md +3 -3
- package/docs/rbac/examples.md +41 -41
- package/docs/rbac/getting-started.md +37 -37
- package/docs/rbac/performance.md +1 -1
- package/docs/rbac/quick-start.md +52 -52
- package/docs/rbac/secure-client-protection.md +1 -35
- package/docs/rbac/troubleshooting.md +1 -1
- package/docs/security/README.md +5 -5
- package/docs/standards/0-standards-overview.md +220 -0
- package/docs/standards/1-pace-core-compliance-standards.md +986 -0
- package/docs/standards/2-project-structure-standards.md +949 -0
- package/docs/standards/3-architecture-standards.md +606 -0
- package/docs/standards/4-code-quality-standards.md +728 -0
- package/docs/standards/5-styling-standards.md +348 -0
- package/docs/standards/{07-rbac-and-rls-standard.md → 6-security-rbac-standards.md} +269 -66
- package/docs/standards/7-api-tech-stack-standards.md +662 -0
- package/docs/standards/8-testing-documentation-standards.md +401 -0
- package/docs/standards/9-operations-standards.md +1102 -0
- package/docs/standards/README.md +185 -57
- package/docs/troubleshooting/README.md +4 -4
- package/docs/troubleshooting/common-issues.md +2 -2
- package/docs/troubleshooting/debugging.md +9 -9
- package/docs/troubleshooting/migration.md +4 -4
- package/docs/troubleshooting/organisation-context-setup.md +42 -19
- package/eslint-config-pace-core.cjs +33 -6
- package/package.json +35 -23
- package/scripts/install-cursor-rules.cjs +25 -6
- package/scripts/install-eslint-config.cjs +284 -0
- package/src/__tests__/fixtures/supabase.ts +1 -1
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +3 -3
- package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +1 -1
- package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +1 -1
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +13 -13
- package/src/__tests__/helpers/component-test-utils.tsx +1 -1
- package/src/__tests__/helpers/supabaseMock.ts +2 -2
- package/src/__tests__/integration/UserProfile.test.tsx +14 -14
- package/src/__tests__/public-recipe-view.test.ts +38 -9
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
- package/src/__tests__/templates/accessibility.test.template.tsx +9 -9
- package/src/__tests__/templates/component.test.template.tsx +18 -15
- package/src/components/Button/Button.tsx +5 -1
- package/src/components/Calendar/Calendar.tsx +201 -47
- package/src/components/ContextSelector/ContextSelector.tsx +106 -119
- package/src/components/DataTable/AUDIT_REPORT.md +293 -0
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +10 -2
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +10 -4
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
- package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
- package/src/components/DataTable/components/DataTableCore.tsx +186 -13
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
- package/src/components/DataTable/components/DataTableLayout.tsx +35 -21
- package/src/components/DataTable/components/EditFields.tsx +23 -3
- package/src/components/DataTable/components/EditableRow.tsx +12 -9
- package/src/components/DataTable/components/EmptyState.tsx +10 -9
- package/src/components/DataTable/components/FilterRow.tsx +2 -4
- package/src/components/DataTable/components/ImportModal.tsx +124 -126
- package/src/components/DataTable/components/LoadingState.tsx +5 -6
- package/src/components/DataTable/components/RowComponent.tsx +12 -0
- package/src/components/DataTable/components/SortIndicator.tsx +50 -0
- package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
- package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
- package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
- package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
- package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +41 -27
- package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -4
- package/src/components/DataTable/components/index.ts +2 -1
- package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +51 -47
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +24 -21
- package/src/components/DataTable/hooks/useDataTableState.ts +125 -9
- package/src/components/DataTable/hooks/useTableColumns.ts +40 -2
- package/src/components/DataTable/hooks/useTableHandlers.ts +11 -0
- package/src/components/DataTable/types.ts +5 -18
- package/src/components/DataTable/utils/a11yUtils.ts +17 -0
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +2 -1
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
- package/src/components/DateTimeField/DateTimeField.tsx +10 -9
- package/src/components/Dialog/Dialog.test.tsx +128 -104
- package/src/components/Dialog/Dialog.tsx +742 -24
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
- package/src/components/FileDisplay/FileDisplay.test.tsx +4 -2
- package/src/components/FileDisplay/FileDisplay.tsx +23 -17
- package/src/components/FileUpload/FileUpload.test.tsx +52 -14
- package/src/components/FileUpload/FileUpload.tsx +112 -130
- package/src/components/Form/Form.test.tsx +6 -8
- package/src/components/Form/Form.tsx +365 -4
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +14 -13
- package/src/components/NavigationMenu/useNavigationFiltering.ts +11 -21
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +6 -4
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +11 -15
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +108 -61
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +27 -3
- package/src/components/Progress/Progress.tsx +2 -4
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
- package/src/components/Select/Select.tsx +109 -98
- package/src/components/Select/types.ts +4 -1
- package/src/components/UserMenu/UserMenu.tsx +9 -6
- package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
- package/src/hooks/__tests__/hooks.integration.test.tsx +55 -57
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +129 -67
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +149 -67
- package/src/hooks/__tests__/usePublicEvent.test.ts +149 -79
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +158 -109
- package/src/hooks/__tests__/useSessionDraft.test.ts +163 -0
- package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +10 -5
- package/src/hooks/public/usePublicEvent.ts +67 -195
- package/src/hooks/public/usePublicEventLogo.test.ts +70 -17
- package/src/hooks/public/usePublicEventLogo.ts +24 -14
- package/src/hooks/public/usePublicFileDisplay.ts +2 -2
- package/src/hooks/public/usePublicRouteParams.ts +5 -5
- package/src/hooks/useAppConfig.ts +28 -26
- package/src/hooks/useEventTheme.test.ts +217 -239
- package/src/hooks/useEventTheme.ts +16 -28
- package/src/hooks/useFileDisplay.ts +2 -2
- package/src/hooks/useOrganisationPermissions.ts +5 -7
- package/src/hooks/useQueryCache.ts +0 -1
- package/src/hooks/useSessionDraft.ts +380 -0
- package/src/hooks/useSessionRestoration.ts +3 -1
- package/src/icons/index.ts +27 -0
- package/src/index.ts +5 -0
- package/src/providers/OrganisationProvider.tsx +23 -14
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
- package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
- package/src/providers/__tests__/EventProvider.test.tsx +61 -61
- package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
- package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +37 -37
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
- package/src/providers/services/EventServiceProvider.tsx +1 -24
- package/src/providers/services/UnifiedAuthProvider.tsx +5 -48
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +13 -10
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +7 -457
- package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +33 -7
- package/src/rbac/adapters.tsx +7 -295
- package/src/rbac/api.test.ts +44 -56
- package/src/rbac/api.ts +10 -17
- package/src/rbac/cache-invalidation.ts +0 -1
- package/src/rbac/compliance/index.ts +10 -0
- package/src/rbac/compliance/pattern-detector.ts +553 -0
- package/src/rbac/compliance/runtime-compliance.ts +22 -0
- package/src/rbac/components/AccessDenied.tsx +150 -0
- package/src/rbac/components/NavigationGuard.tsx +12 -20
- package/src/rbac/components/PagePermissionGuard.tsx +4 -24
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +21 -8
- package/src/rbac/components/index.ts +3 -41
- package/src/rbac/eslint-rules.js +1 -1
- package/src/rbac/hooks/index.ts +0 -3
- package/src/rbac/hooks/permissions/index.ts +0 -3
- package/src/rbac/hooks/permissions/useAccessLevel.ts +4 -8
- package/src/rbac/hooks/usePermissions.ts +0 -3
- package/src/rbac/hooks/useResolvedScope.test.ts +57 -47
- package/src/rbac/hooks/useResolvedScope.ts +58 -140
- package/src/rbac/hooks/useResourcePermissions.test.ts +124 -38
- package/src/rbac/hooks/useResourcePermissions.ts +139 -48
- package/src/rbac/hooks/useRoleManagement.test.ts +65 -22
- package/src/rbac/hooks/useRoleManagement.ts +147 -19
- package/src/rbac/hooks/useSecureSupabase.ts +4 -8
- package/src/rbac/index.ts +7 -9
- package/src/rbac/utils/contextValidator.ts +9 -7
- package/src/services/AuthService.ts +130 -18
- package/src/services/EventService.ts +4 -97
- package/src/services/InactivityService.ts +16 -0
- package/src/services/OrganisationService.ts +7 -44
- package/src/services/__tests__/OrganisationService.test.ts +26 -8
- package/src/services/base/BaseService.ts +0 -3
- package/src/styles/core.css +7 -0
- package/src/theming/__tests__/parseEventColours.test.ts +9 -3
- package/src/theming/parseEventColours.ts +22 -10
- package/src/types/database.generated.ts +4733 -3809
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
- package/src/utils/__tests__/organisationContext.unit.test.ts +9 -10
- package/src/utils/context/organisationContext.test.ts +13 -28
- package/src/utils/context/organisationContext.ts +21 -52
- package/src/utils/dynamic/dynamicUtils.ts +1 -1
- package/src/utils/file-reference/index.ts +39 -15
- package/src/utils/formatting/formatDateTime.test.ts +3 -2
- package/src/utils/google-places/loadGoogleMapsScript.ts +29 -4
- package/src/utils/index.ts +4 -1
- package/src/utils/persistence/__tests__/keyDerivation.test.ts +135 -0
- package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +123 -0
- package/src/utils/persistence/keyDerivation.ts +304 -0
- package/src/utils/persistence/sensitiveFieldDetection.ts +212 -0
- package/src/utils/security/secureStorage.ts +5 -5
- package/src/utils/storage/README.md +1 -1
- package/src/utils/storage/helpers.ts +3 -3
- package/src/utils/supabase/createBaseClient.ts +147 -0
- package/src/utils/timezone/timezone.test.ts +1 -2
- package/src/utils/timezone/timezone.ts +1 -1
- package/src/utils/validation/csrf.ts +4 -4
- package/cursor-rules/00-pace-core-compliance.mdc +0 -331
- package/cursor-rules/01-standards-compliance.mdc +0 -244
- package/cursor-rules/04-testing-standards.mdc +0 -268
- package/cursor-rules/05-bug-reports-and-features.mdc +0 -246
- package/cursor-rules/06-code-quality.mdc +0 -309
- package/cursor-rules/07-tech-stack-compliance.mdc +0 -214
- package/cursor-rules/CHANGELOG.md +0 -119
- package/cursor-rules/README.md +0 -192
- package/dist/DataTable-AOVNCPTX.js +0 -175
- package/dist/DataTable-AOVNCPTX.js.map +0 -1
- package/dist/UnifiedAuthProvider-4SBX4LU5.js +0 -18
- package/dist/UnifiedAuthProvider-4SBX4LU5.js.map +0 -1
- package/dist/api-O6HTBX5Y.js +0 -52
- package/dist/api-O6HTBX5Y.js.map +0 -1
- package/dist/audit-V53FV5AG.js +0 -17
- package/dist/audit-V53FV5AG.js.map +0 -1
- package/dist/chunk-5DRSZLL2.js.map +0 -1
- package/dist/chunk-63FOKYGO.js.map +0 -1
- package/dist/chunk-6COVEUS7.js.map +0 -1
- package/dist/chunk-AFVQODI2.js +0 -263
- package/dist/chunk-AFVQODI2.js.map +0 -1
- package/dist/chunk-DGUM43GV.js.map +0 -1
- package/dist/chunk-E66EQZE6.js.map +0 -1
- package/dist/chunk-EFN2EIMK.js.map +0 -1
- package/dist/chunk-FFQEQTNW.js.map +0 -1
- package/dist/chunk-FMUCXFII.js.map +0 -1
- package/dist/chunk-G37KK66H.js.map +0 -1
- package/dist/chunk-G7QEZTYQ.js +0 -2053
- package/dist/chunk-G7QEZTYQ.js.map +0 -1
- package/dist/chunk-HU2C6SSC.js.map +0 -1
- package/dist/chunk-IHB5DR3H.js.map +0 -1
- package/dist/chunk-IVOFDYWT.js.map +0 -1
- package/dist/chunk-J36DSWQK.js.map +0 -1
- package/dist/chunk-JGRYX5UX.js.map +0 -1
- package/dist/chunk-KQCRWDSA.js +0 -1
- package/dist/chunk-KQCRWDSA.js.map +0 -1
- package/dist/chunk-L4OXEN46.js.map +0 -1
- package/dist/chunk-LMC26NLJ.js +0 -84
- package/dist/chunk-LMC26NLJ.js.map +0 -1
- package/dist/chunk-M43Y4SSO.js.map +0 -1
- package/dist/chunk-M7MPQISP.js.map +0 -1
- package/dist/chunk-NTM7ZSB6.js.map +0 -1
- package/dist/chunk-PWLANIRT.js.map +0 -1
- package/dist/chunk-QXHPKYJV.js.map +0 -1
- package/dist/chunk-RGAWHO7N.js.map +0 -1
- package/dist/chunk-UPPMRMYG.js.map +0 -1
- package/dist/chunk-VBXEHIUJ.js.map +0 -1
- package/dist/chunk-ZSAAAMVR.js.map +0 -1
- package/dist/components.js.map +0 -1
- package/dist/contextValidator-5OGXSPKS.js +0 -9
- package/dist/contextValidator-5OGXSPKS.js.map +0 -1
- package/dist/eslint-rules/pace-core-compliance.cjs +0 -510
- package/dist/hooks.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers.js.map +0 -1
- package/dist/rbac/eslint-rules.js.map +0 -1
- package/dist/rbac/index.js.map +0 -1
- package/dist/styles/index.js.map +0 -1
- package/dist/theming/runtime.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.js.map +0 -1
- package/docs/best-practices/README.md +0 -472
- package/docs/best-practices/accessibility.md +0 -601
- package/docs/best-practices/common-patterns.md +0 -516
- package/docs/best-practices/deployment.md +0 -1103
- package/docs/best-practices/performance.md +0 -1328
- package/docs/best-practices/security.md +0 -940
- package/docs/best-practices/testing.md +0 -1034
- package/docs/rbac/compliance/compliance-guide.md +0 -544
- package/docs/standards/01-architecture-standard.md +0 -44
- package/docs/standards/02-api-and-rpc-standard.md +0 -39
- package/docs/standards/03-component-standard.md +0 -32
- package/docs/standards/04-code-style-standard.md +0 -32
- package/docs/standards/05-security-standard.md +0 -44
- package/docs/standards/06-testing-and-docs-standard.md +0 -29
- package/docs/standards/pace-core-compliance.md +0 -432
- package/scripts/audit/core/checks/accessibility.cjs +0 -197
- package/scripts/audit/core/checks/api-usage.cjs +0 -191
- package/scripts/audit/core/checks/bundle.cjs +0 -142
- package/scripts/audit/core/checks/compliance.cjs +0 -2706
- package/scripts/audit/core/checks/config.cjs +0 -54
- package/scripts/audit/core/checks/coverage.cjs +0 -84
- package/scripts/audit/core/checks/dependencies.cjs +0 -994
- package/scripts/audit/core/checks/documentation.cjs +0 -268
- package/scripts/audit/core/checks/environment.cjs +0 -116
- package/scripts/audit/core/checks/error-handling.cjs +0 -340
- package/scripts/audit/core/checks/forms.cjs +0 -172
- package/scripts/audit/core/checks/heuristics.cjs +0 -68
- package/scripts/audit/core/checks/hooks.cjs +0 -334
- package/scripts/audit/core/checks/imports.cjs +0 -244
- package/scripts/audit/core/checks/performance.cjs +0 -325
- package/scripts/audit/core/checks/routes.cjs +0 -117
- package/scripts/audit/core/checks/state.cjs +0 -130
- package/scripts/audit/core/checks/structure.cjs +0 -65
- package/scripts/audit/core/checks/style.cjs +0 -584
- package/scripts/audit/core/checks/testing.cjs +0 -122
- package/scripts/audit/core/checks/typescript.cjs +0 -61
- package/scripts/audit/core/scanner.cjs +0 -199
- package/scripts/audit/core/utils.cjs +0 -137
- package/scripts/audit/index.cjs +0 -223
- package/scripts/audit/reporters/console.cjs +0 -151
- package/scripts/audit/reporters/json.cjs +0 -54
- package/scripts/audit/reporters/markdown.cjs +0 -124
- package/scripts/audit-consuming-app.cjs +0 -86
- package/src/components/DataTable/components/DataTableBody.tsx +0 -454
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
- package/src/components/DataTable/components/ExpandButton.tsx +0 -113
- package/src/components/DataTable/components/GroupHeader.tsx +0 -54
- package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
- package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
- package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
- package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
- package/src/components/DataTable/core/DataTableContext.tsx +0 -216
- package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
- package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
- package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
- package/src/components/DataTable/utils/debugTools.ts +0 -514
- package/src/eslint-rules/pace-core-compliance.js +0 -638
- package/src/rbac/components/EnhancedNavigationMenu.test.tsx +0 -555
- package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -293
- package/src/rbac/components/NavigationProvider.test.tsx +0 -481
- package/src/rbac/components/NavigationProvider.tsx +0 -345
- package/src/rbac/components/PagePermissionProvider.test.tsx +0 -476
- package/src/rbac/components/PagePermissionProvider.tsx +0 -279
- package/src/rbac/components/PermissionEnforcer.tsx +0 -312
- package/src/rbac/components/RoleBasedRouter.tsx +0 -440
- package/src/rbac/components/SecureDataProvider.test.tsx +0 -543
- package/src/rbac/components/SecureDataProvider.tsx +0 -339
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -620
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -726
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -661
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +0 -881
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +0 -783
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +0 -645
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -659
- package/src/rbac/hooks/permissions/useCachedPermissions.ts +0 -79
- package/src/rbac/hooks/permissions/useHasAllPermissions.ts +0 -90
- package/src/rbac/hooks/permissions/useHasAnyPermission.ts +0 -90
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
# Testing & Documentation Standards
|
|
2
|
+
|
|
3
|
+
**🤖 Cursor Rule**: See [08-testing-documentation.mdc](../../cursor-rules/08-testing-documentation.mdc) for AI-optimized directives that automatically enforce testing and documentation standards.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
This standard defines testing strategies, documentation requirements, and issue reporting templates to ensure consistent quality, maintainability, and effective communication across pace-core and consuming apps.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Testing Strategy
|
|
12
|
+
|
|
13
|
+
### Test Types
|
|
14
|
+
|
|
15
|
+
**MUST** use this testing strategy:
|
|
16
|
+
|
|
17
|
+
- **Unit tests** - For utils & hooks (≥90% coverage)
|
|
18
|
+
- **Integration tests** - For components (≥70% coverage)
|
|
19
|
+
- **Few meaningful E2E tests** - In consuming apps only (critical user flows)
|
|
20
|
+
|
|
21
|
+
### Test Structure
|
|
22
|
+
|
|
23
|
+
**MUST** colocate tests with source files:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
src/
|
|
27
|
+
├── components/
|
|
28
|
+
│ └── events/
|
|
29
|
+
│ ├── EventCard.tsx
|
|
30
|
+
│ └── EventCard.test.tsx # ✅ Colocated
|
|
31
|
+
│
|
|
32
|
+
├── hooks/
|
|
33
|
+
│ ├── useEventData.ts
|
|
34
|
+
│ └── useEventData.test.ts # ✅ Colocated
|
|
35
|
+
│
|
|
36
|
+
└── utils/
|
|
37
|
+
├── formatEvent.ts
|
|
38
|
+
└── formatEvent.test.ts # ✅ Colocated
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Test File Naming
|
|
42
|
+
|
|
43
|
+
- Unit tests: `*.test.ts` or `*.test.tsx`
|
|
44
|
+
- Integration tests: `*.integration.test.ts`
|
|
45
|
+
- E2E tests: Place in `tests/` directory
|
|
46
|
+
|
|
47
|
+
### Testing Tools
|
|
48
|
+
|
|
49
|
+
**MUST** use:
|
|
50
|
+
|
|
51
|
+
- **React Testing Library** - For component testing
|
|
52
|
+
- **userEvent** - For user interaction simulation
|
|
53
|
+
- **Vitest** - For test runner
|
|
54
|
+
- **Avoid unnecessary mocks** - Prefer real implementations when possible
|
|
55
|
+
|
|
56
|
+
### Test Timeouts
|
|
57
|
+
|
|
58
|
+
**MUST** configure timeouts for all test commands to prevent tests from hanging indefinitely.
|
|
59
|
+
|
|
60
|
+
**Recommended Configuration:**
|
|
61
|
+
|
|
62
|
+
**Option 1: Configure in `vitest.config.ts` (Recommended)**
|
|
63
|
+
```typescript
|
|
64
|
+
// vitest.config.ts
|
|
65
|
+
import { defineConfig } from 'vitest/config';
|
|
66
|
+
|
|
67
|
+
export default defineConfig({
|
|
68
|
+
test: {
|
|
69
|
+
testTimeout: 10000, // 10 seconds per test
|
|
70
|
+
hookTimeout: 10000, // 10 seconds for hooks
|
|
71
|
+
teardownTimeout: 5000, // 5 seconds for cleanup
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Option 2: Configure in `package.json` scripts (Alternative)**
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"scripts": {
|
|
80
|
+
"test": "vitest run --test-timeout=10000",
|
|
81
|
+
"test:watch": "vitest --test-timeout=10000",
|
|
82
|
+
"test:coverage": "vitest run --coverage --test-timeout=10000"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Recommended Timeout Values:**
|
|
88
|
+
- **Unit tests**: 5-10 seconds (most tests should complete in < 1 second)
|
|
89
|
+
- **Integration tests**: 10-15 seconds (may involve async operations)
|
|
90
|
+
- **E2E tests**: 30-60 seconds (may involve network requests)
|
|
91
|
+
|
|
92
|
+
**Why:** Tests in this project have issues with hanging and require manual cancellation without timeouts. Always configure timeouts to prevent CI/CD pipelines from hanging indefinitely.
|
|
93
|
+
|
|
94
|
+
**Example:**
|
|
95
|
+
```typescript
|
|
96
|
+
// ✅ CORRECT - Test with explicit timeout for slow operations
|
|
97
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
98
|
+
|
|
99
|
+
describe('Slow API call', () => {
|
|
100
|
+
it('should complete within timeout', async () => {
|
|
101
|
+
const result = await slowApiCall();
|
|
102
|
+
expect(result).toBeDefined();
|
|
103
|
+
}, 15000); // 15 second timeout for this specific test
|
|
104
|
+
});
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Example Test
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// src/components/events/EventCard.test.tsx
|
|
111
|
+
import { render, screen } from '@testing-library/react';
|
|
112
|
+
import userEvent from '@testing-library/user-event';
|
|
113
|
+
import { EventCard } from './EventCard';
|
|
114
|
+
|
|
115
|
+
describe('EventCard', () => {
|
|
116
|
+
it('renders event title', () => {
|
|
117
|
+
const event = { id: '1', name: 'Test Event', date: new Date() };
|
|
118
|
+
render(<EventCard event={event} />);
|
|
119
|
+
expect(screen.getByText('Test Event')).toBeInTheDocument();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('handles click interaction', async () => {
|
|
123
|
+
const user = userEvent.setup();
|
|
124
|
+
const handleClick = vi.fn();
|
|
125
|
+
const event = { id: '1', name: 'Test Event', date: new Date() };
|
|
126
|
+
|
|
127
|
+
render(<EventCard event={event} onClick={handleClick} />);
|
|
128
|
+
await user.click(screen.getByRole('button'));
|
|
129
|
+
|
|
130
|
+
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Test Coverage Requirements
|
|
136
|
+
|
|
137
|
+
- **Utils & Hooks**: ≥90% coverage
|
|
138
|
+
- **Components**: ≥70% coverage
|
|
139
|
+
- **Critical paths**: 100% coverage (authentication, payments, etc.)
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Documentation Requirements
|
|
144
|
+
|
|
145
|
+
### Purpose
|
|
146
|
+
|
|
147
|
+
Documentation ensures code is maintainable, understandable, and usable. All documentation MUST follow these standards.
|
|
148
|
+
|
|
149
|
+
### When to Document
|
|
150
|
+
|
|
151
|
+
**MUST document:**
|
|
152
|
+
- New components, hooks, utilities, or APIs
|
|
153
|
+
- Breaking changes to existing APIs
|
|
154
|
+
- Complex business logic or algorithms
|
|
155
|
+
- Non-obvious implementation decisions
|
|
156
|
+
- Configuration requirements
|
|
157
|
+
- Migration paths for breaking changes
|
|
158
|
+
|
|
159
|
+
**SHOULD document:**
|
|
160
|
+
- Public APIs and their usage
|
|
161
|
+
- Component props and behavior
|
|
162
|
+
- Hook return values and dependencies
|
|
163
|
+
- Utility function parameters and return types
|
|
164
|
+
- Error conditions and handling
|
|
165
|
+
|
|
166
|
+
**MAY document:**
|
|
167
|
+
- Internal implementation details (if helpful)
|
|
168
|
+
- Performance considerations
|
|
169
|
+
- Future plans or limitations
|
|
170
|
+
|
|
171
|
+
### Documentation Structure
|
|
172
|
+
|
|
173
|
+
**Every component/API documentation MUST include:**
|
|
174
|
+
|
|
175
|
+
1. **Overview** - What it does and when to use it
|
|
176
|
+
2. **API/Props** - Complete prop/parameter definitions with types
|
|
177
|
+
3. **Examples** - Real-world usage examples
|
|
178
|
+
4. **Accessibility (A11y)** - Accessibility considerations and requirements
|
|
179
|
+
5. **Edge Cases** - Known limitations, error conditions, and special cases
|
|
180
|
+
|
|
181
|
+
**Example Structure:**
|
|
182
|
+
|
|
183
|
+
```markdown
|
|
184
|
+
# ComponentName
|
|
185
|
+
|
|
186
|
+
## Overview
|
|
187
|
+
Brief description of what the component does and when to use it.
|
|
188
|
+
|
|
189
|
+
## API
|
|
190
|
+
|
|
191
|
+
### Props
|
|
192
|
+
- `propName` (type): Description
|
|
193
|
+
- `optionalProp?` (type): Description (default: value)
|
|
194
|
+
|
|
195
|
+
## Examples
|
|
196
|
+
|
|
197
|
+
### Basic Usage
|
|
198
|
+
\`\`\`tsx
|
|
199
|
+
<ComponentName prop="value" />
|
|
200
|
+
\`\`\`
|
|
201
|
+
|
|
202
|
+
### Advanced Usage
|
|
203
|
+
\`\`\`tsx
|
|
204
|
+
<ComponentName prop="value" optionalProp="optional" />
|
|
205
|
+
\`\`\`
|
|
206
|
+
|
|
207
|
+
## Accessibility
|
|
208
|
+
- Keyboard navigation: Supported
|
|
209
|
+
- Screen readers: Announced as...
|
|
210
|
+
- Focus management: ...
|
|
211
|
+
|
|
212
|
+
## Edge Cases
|
|
213
|
+
- Handles null/undefined: Yes/No
|
|
214
|
+
- Error conditions: ...
|
|
215
|
+
- Performance considerations: ...
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Documentation Formats
|
|
219
|
+
|
|
220
|
+
**Component Documentation:**
|
|
221
|
+
- Location: `packages/core/docs/api-reference/components.md` or component-specific README
|
|
222
|
+
- Format: Markdown with code examples
|
|
223
|
+
- Must include: Overview, Props, Examples, A11y, Edge Cases
|
|
224
|
+
|
|
225
|
+
**API Documentation:**
|
|
226
|
+
- Location: `packages/core/docs/api-reference/`
|
|
227
|
+
- Format: TypeScript types + Markdown descriptions
|
|
228
|
+
- Must include: Function signatures, Parameters, Return types, Examples
|
|
229
|
+
|
|
230
|
+
**Implementation Guides:**
|
|
231
|
+
- Location: `packages/core/docs/implementation-guides/`
|
|
232
|
+
- Format: Step-by-step guides with examples
|
|
233
|
+
- Must include: Overview, Step-by-step instructions, Code examples, Troubleshooting
|
|
234
|
+
|
|
235
|
+
**Standards Documentation:**
|
|
236
|
+
- Location: `packages/core/docs/standards/`
|
|
237
|
+
- Format: Markdown with examples and checklists
|
|
238
|
+
- Must include: Purpose, Requirements, Examples, Checklists
|
|
239
|
+
|
|
240
|
+
### Documentation Maintenance
|
|
241
|
+
|
|
242
|
+
**MUST update documentation when:**
|
|
243
|
+
- Adding new props/parameters
|
|
244
|
+
- Changing behavior (breaking or non-breaking)
|
|
245
|
+
- Fixing bugs that change user-facing behavior
|
|
246
|
+
- Deprecating features
|
|
247
|
+
|
|
248
|
+
**SHOULD update documentation when:**
|
|
249
|
+
- Improving examples
|
|
250
|
+
- Adding new use cases
|
|
251
|
+
- Clarifying edge cases
|
|
252
|
+
|
|
253
|
+
**Update Process:**
|
|
254
|
+
1. Update code and tests first
|
|
255
|
+
2. Update documentation to match
|
|
256
|
+
3. Verify examples still work
|
|
257
|
+
4. Update related documentation if needed
|
|
258
|
+
|
|
259
|
+
### Documentation Quality Checklist
|
|
260
|
+
|
|
261
|
+
Before committing documentation, verify:
|
|
262
|
+
|
|
263
|
+
- [ ] Overview clearly explains purpose and usage
|
|
264
|
+
- [ ] All props/parameters documented with types
|
|
265
|
+
- [ ] Examples are complete and working
|
|
266
|
+
- [ ] Accessibility considerations documented
|
|
267
|
+
- [ ] Edge cases and limitations documented
|
|
268
|
+
- [ ] Code examples are syntax-highlighted
|
|
269
|
+
- [ ] Links to related documentation included
|
|
270
|
+
- [ ] Breaking changes have migration guides
|
|
271
|
+
- [ ] Documentation matches actual implementation
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Bug Reports
|
|
276
|
+
|
|
277
|
+
### Bug Report Template
|
|
278
|
+
|
|
279
|
+
**MUST** use this template when reporting bugs:
|
|
280
|
+
|
|
281
|
+
```markdown
|
|
282
|
+
## Description
|
|
283
|
+
Clear description of the bug and expected vs actual behavior.
|
|
284
|
+
|
|
285
|
+
## Steps to Reproduce
|
|
286
|
+
1. Step one
|
|
287
|
+
2. Step two
|
|
288
|
+
3. Step three
|
|
289
|
+
|
|
290
|
+
## Minimal Reproduction
|
|
291
|
+
Link to CodeSandbox/StackBlitz or minimal code snippet that reproduces the issue.
|
|
292
|
+
|
|
293
|
+
## Environment
|
|
294
|
+
- pace-core version: X.X.X
|
|
295
|
+
- React version: X.X.X
|
|
296
|
+
- Node version: X.X.X
|
|
297
|
+
- Browser: Chrome/Firefox/Safari X.X
|
|
298
|
+
- OS: macOS/Windows/Linux
|
|
299
|
+
|
|
300
|
+
## Error Messages/Logs
|
|
301
|
+
```
|
|
302
|
+
Paste error messages or logs here
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Additional Context
|
|
306
|
+
Screenshots, videos, or other context that helps understand the issue.
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Bug Report Checklist
|
|
310
|
+
|
|
311
|
+
Before submitting a bug report, verify:
|
|
312
|
+
|
|
313
|
+
- [ ] Description clearly explains the issue
|
|
314
|
+
- [ ] Steps to reproduce are minimal and ordered
|
|
315
|
+
- [ ] Minimal reproduction provided (link or code)
|
|
316
|
+
- [ ] Environment information complete
|
|
317
|
+
- [ ] Error messages/logs included
|
|
318
|
+
- [ ] Additional context provided if helpful
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Feature Requests
|
|
323
|
+
|
|
324
|
+
### Feature Request Template
|
|
325
|
+
|
|
326
|
+
**MUST** use this template when requesting features:
|
|
327
|
+
|
|
328
|
+
```markdown
|
|
329
|
+
## Feature Description
|
|
330
|
+
Clear description of the feature and the problem it solves.
|
|
331
|
+
|
|
332
|
+
## Proposed Solution/API
|
|
333
|
+
Description of how the feature should work, including API design if applicable.
|
|
334
|
+
|
|
335
|
+
## Use Case
|
|
336
|
+
Real-world scenario where this feature would be useful.
|
|
337
|
+
|
|
338
|
+
## Alternatives Considered
|
|
339
|
+
Other approaches you've considered and why they don't work.
|
|
340
|
+
|
|
341
|
+
## Example Code
|
|
342
|
+
\`\`\`tsx
|
|
343
|
+
// Example of how the feature would be used
|
|
344
|
+
<NewComponent prop="value" />
|
|
345
|
+
\`\`\`
|
|
346
|
+
|
|
347
|
+
## Additional Context
|
|
348
|
+
Mockups, diagrams, or other context that helps understand the feature.
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### Feature Request Checklist
|
|
352
|
+
|
|
353
|
+
Before submitting a feature request, verify:
|
|
354
|
+
|
|
355
|
+
- [ ] Feature description is clear
|
|
356
|
+
- [ ] Problem statement is well-defined
|
|
357
|
+
- [ ] Proposed solution/API is described
|
|
358
|
+
- [ ] Use case with real scenario provided
|
|
359
|
+
- [ ] Alternatives considered and documented
|
|
360
|
+
- [ ] Example code snippet included
|
|
361
|
+
- [ ] Additional context provided if helpful
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Testing Checklist
|
|
366
|
+
|
|
367
|
+
Before committing code with tests, verify:
|
|
368
|
+
|
|
369
|
+
- [ ] Tests colocated with source files
|
|
370
|
+
- [ ] React Testing Library + userEvent used
|
|
371
|
+
- [ ] Unnecessary mocks avoided
|
|
372
|
+
- [ ] Coverage requirements met (≥90% utils/hooks, ≥70% components)
|
|
373
|
+
- [ ] Critical paths have 100% coverage
|
|
374
|
+
- [ ] Tests are meaningful and test behavior, not implementation
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Documentation Checklist
|
|
379
|
+
|
|
380
|
+
Before committing code with documentation, verify:
|
|
381
|
+
|
|
382
|
+
- [ ] New components/APIs documented
|
|
383
|
+
- [ ] Breaking changes have migration guides
|
|
384
|
+
- [ ] Examples are complete and working
|
|
385
|
+
- [ ] Accessibility considerations documented
|
|
386
|
+
- [ ] Edge cases documented
|
|
387
|
+
- [ ] Documentation matches implementation
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## Related Documentation
|
|
392
|
+
|
|
393
|
+
- [Standards Overview](./0-standards-overview.md) - Standards system overview
|
|
394
|
+
- [Code Quality](./4-code-quality-standards.md) - Code patterns and TypeScript
|
|
395
|
+
- [Architecture](./3-architecture-standards.md) - Component design principles
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
**Last Updated:** 2025-01-28
|
|
400
|
+
**Version:** 2.0.0
|
|
401
|
+
**Applies to:** All pace-core and consuming apps
|