@empline/preflight 1.1.11 → 1.1.13
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/dist/checks/consolidated/auth-storage-state.d.ts +3 -0
- package/dist/checks/consolidated/auth-storage-state.d.ts.map +1 -0
- package/dist/checks/consolidated/auth-storage-state.js +146 -0
- package/dist/checks/consolidated/auth-storage-state.js.map +1 -0
- package/dist/checks/consolidated/business.d.ts +50 -0
- package/dist/checks/consolidated/business.d.ts.map +1 -0
- package/dist/checks/consolidated/business.js +252 -0
- package/dist/checks/consolidated/business.js.map +1 -0
- package/dist/checks/consolidated/caching-strategy.d.ts +104 -0
- package/dist/checks/consolidated/caching-strategy.d.ts.map +1 -0
- package/dist/checks/consolidated/caching-strategy.js +725 -0
- package/dist/checks/consolidated/caching-strategy.js.map +1 -0
- package/dist/checks/consolidated/code-quality.d.ts +83 -0
- package/dist/checks/consolidated/code-quality.d.ts.map +1 -0
- package/dist/checks/consolidated/code-quality.js +445 -0
- package/dist/checks/consolidated/code-quality.js.map +1 -0
- package/dist/checks/consolidated/console-statements.d.ts +32 -0
- package/dist/checks/consolidated/console-statements.d.ts.map +1 -0
- package/dist/checks/consolidated/console-statements.js +304 -0
- package/dist/checks/consolidated/console-statements.js.map +1 -0
- package/dist/checks/consolidated/css-advanced-validation.d.ts +24 -0
- package/dist/checks/consolidated/css-advanced-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/css-advanced-validation.js +415 -0
- package/dist/checks/consolidated/css-advanced-validation.js.map +1 -0
- package/dist/checks/consolidated/css-organization.d.ts +14 -0
- package/dist/checks/consolidated/css-organization.d.ts.map +1 -0
- package/dist/checks/consolidated/css-organization.js +432 -0
- package/dist/checks/consolidated/css-organization.js.map +1 -0
- package/dist/checks/consolidated/css-runtime-validation.d.ts +22 -0
- package/dist/checks/consolidated/css-runtime-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/css-runtime-validation.js +330 -0
- package/dist/checks/consolidated/css-runtime-validation.js.map +1 -0
- package/dist/checks/consolidated/css-variable-validation.d.ts +17 -0
- package/dist/checks/consolidated/css-variable-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/css-variable-validation.js +412 -0
- package/dist/checks/consolidated/css-variable-validation.js.map +1 -0
- package/dist/checks/consolidated/dark-mode-consistency.d.ts +23 -0
- package/dist/checks/consolidated/dark-mode-consistency.d.ts.map +1 -0
- package/dist/checks/consolidated/dark-mode-consistency.js +291 -0
- package/dist/checks/consolidated/dark-mode-consistency.js.map +1 -0
- package/dist/checks/consolidated/database.d.ts +95 -0
- package/dist/checks/consolidated/database.d.ts.map +1 -0
- package/dist/checks/consolidated/database.js +427 -0
- package/dist/checks/consolidated/database.js.map +1 -0
- package/dist/checks/consolidated/e2e-checks.d.ts +52 -0
- package/dist/checks/consolidated/e2e-checks.d.ts.map +1 -0
- package/dist/checks/consolidated/e2e-checks.js +157 -0
- package/dist/checks/consolidated/e2e-checks.js.map +1 -0
- package/dist/checks/consolidated/e2e-regression-coverage.d.ts +14 -0
- package/dist/checks/consolidated/e2e-regression-coverage.d.ts.map +1 -0
- package/dist/checks/consolidated/e2e-regression-coverage.js +151 -0
- package/dist/checks/consolidated/e2e-regression-coverage.js.map +1 -0
- package/dist/checks/consolidated/e2e-validation.d.ts +137 -0
- package/dist/checks/consolidated/e2e-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/e2e-validation.js +1001 -0
- package/dist/checks/consolidated/e2e-validation.js.map +1 -0
- package/dist/checks/consolidated/enterprise-baseline.d.ts +9 -0
- package/dist/checks/consolidated/enterprise-baseline.d.ts.map +1 -0
- package/dist/checks/consolidated/enterprise-baseline.js +277 -0
- package/dist/checks/consolidated/enterprise-baseline.js.map +1 -0
- package/dist/checks/consolidated/generate-pageload-config.d.ts +6 -0
- package/dist/checks/consolidated/generate-pageload-config.d.ts.map +1 -0
- package/dist/checks/consolidated/generate-pageload-config.js +161 -0
- package/dist/checks/consolidated/generate-pageload-config.js.map +1 -0
- package/dist/checks/consolidated/hardened-checks.d.ts +276 -0
- package/dist/checks/consolidated/hardened-checks.d.ts.map +1 -0
- package/dist/checks/consolidated/hardened-checks.js +3056 -0
- package/dist/checks/consolidated/hardened-checks.js.map +1 -0
- package/dist/checks/consolidated/homepage-ux.d.ts +12 -0
- package/dist/checks/consolidated/homepage-ux.d.ts.map +1 -0
- package/dist/checks/consolidated/homepage-ux.js +242 -0
- package/dist/checks/consolidated/homepage-ux.js.map +1 -0
- package/dist/checks/consolidated/images.d.ts +76 -0
- package/dist/checks/consolidated/images.d.ts.map +1 -0
- package/dist/checks/consolidated/images.js +311 -0
- package/dist/checks/consolidated/images.js.map +1 -0
- package/dist/checks/consolidated/import-cycles.d.ts +63 -0
- package/dist/checks/consolidated/import-cycles.d.ts.map +1 -0
- package/dist/checks/consolidated/import-cycles.js +291 -0
- package/dist/checks/consolidated/import-cycles.js.map +1 -0
- package/dist/checks/consolidated/imports.d.ts +112 -0
- package/dist/checks/consolidated/imports.d.ts.map +1 -0
- package/dist/checks/consolidated/imports.js +977 -0
- package/dist/checks/consolidated/imports.js.map +1 -0
- package/dist/checks/consolidated/inline-style-conflicts.d.ts +21 -0
- package/dist/checks/consolidated/inline-style-conflicts.d.ts.map +1 -0
- package/dist/checks/consolidated/inline-style-conflicts.js +300 -0
- package/dist/checks/consolidated/inline-style-conflicts.js.map +1 -0
- package/dist/checks/consolidated/lib-organization.d.ts +12 -0
- package/dist/checks/consolidated/lib-organization.d.ts.map +1 -0
- package/dist/checks/consolidated/lib-organization.js +419 -0
- package/dist/checks/consolidated/lib-organization.js.map +1 -0
- package/dist/checks/consolidated/n-plus-one.d.ts +63 -0
- package/dist/checks/consolidated/n-plus-one.d.ts.map +1 -0
- package/dist/checks/consolidated/n-plus-one.js +331 -0
- package/dist/checks/consolidated/n-plus-one.js.map +1 -0
- package/dist/checks/consolidated/nextjs.d.ts +51 -0
- package/dist/checks/consolidated/nextjs.d.ts.map +1 -0
- package/dist/checks/consolidated/nextjs.js +205 -0
- package/dist/checks/consolidated/nextjs.js.map +1 -0
- package/dist/checks/consolidated/organization.d.ts +54 -0
- package/dist/checks/consolidated/organization.d.ts.map +1 -0
- package/dist/checks/consolidated/organization.js +158 -0
- package/dist/checks/consolidated/organization.js.map +1 -0
- package/dist/checks/consolidated/pageload.d.ts +12 -0
- package/dist/checks/consolidated/pageload.d.ts.map +1 -0
- package/dist/checks/consolidated/pageload.js +138 -0
- package/dist/checks/consolidated/pageload.js.map +1 -0
- package/dist/checks/consolidated/performance.d.ts +112 -0
- package/dist/checks/consolidated/performance.d.ts.map +1 -0
- package/dist/checks/consolidated/performance.js +1546 -0
- package/dist/checks/consolidated/performance.js.map +1 -0
- package/dist/checks/consolidated/quality.d.ts +52 -0
- package/dist/checks/consolidated/quality.d.ts.map +1 -0
- package/dist/checks/consolidated/quality.js +253 -0
- package/dist/checks/consolidated/quality.js.map +1 -0
- package/dist/checks/consolidated/react.d.ts +48 -0
- package/dist/checks/consolidated/react.d.ts.map +1 -0
- package/dist/checks/consolidated/react.js +203 -0
- package/dist/checks/consolidated/react.js.map +1 -0
- package/dist/checks/consolidated/regression-hygiene.d.ts +17 -0
- package/dist/checks/consolidated/regression-hygiene.d.ts.map +1 -0
- package/dist/checks/consolidated/regression-hygiene.js +242 -0
- package/dist/checks/consolidated/regression-hygiene.js.map +1 -0
- package/dist/checks/consolidated/regression.d.ts +20 -0
- package/dist/checks/consolidated/regression.d.ts.map +1 -0
- package/dist/checks/consolidated/regression.js +121 -0
- package/dist/checks/consolidated/regression.js.map +1 -0
- package/dist/checks/consolidated/runtime.d.ts +53 -0
- package/dist/checks/consolidated/runtime.d.ts.map +1 -0
- package/dist/checks/consolidated/runtime.js +160 -0
- package/dist/checks/consolidated/runtime.js.map +1 -0
- package/dist/checks/consolidated/script-performance.d.ts +17 -0
- package/dist/checks/consolidated/script-performance.d.ts.map +1 -0
- package/dist/checks/consolidated/script-performance.js +137 -0
- package/dist/checks/consolidated/script-performance.js.map +1 -0
- package/dist/checks/consolidated/security.d.ts +78 -0
- package/dist/checks/consolidated/security.d.ts.map +1 -0
- package/dist/checks/consolidated/security.js +404 -0
- package/dist/checks/consolidated/security.js.map +1 -0
- package/dist/checks/consolidated/seo.d.ts +31 -0
- package/dist/checks/consolidated/seo.d.ts.map +1 -0
- package/dist/checks/consolidated/seo.js +1438 -0
- package/dist/checks/consolidated/seo.js.map +1 -0
- package/dist/checks/consolidated/sx-prop-deprecation.d.ts +22 -0
- package/dist/checks/consolidated/sx-prop-deprecation.d.ts.map +1 -0
- package/dist/checks/consolidated/sx-prop-deprecation.js +280 -0
- package/dist/checks/consolidated/sx-prop-deprecation.js.map +1 -0
- package/dist/checks/consolidated/tailwind-class-validation.d.ts +25 -0
- package/dist/checks/consolidated/tailwind-class-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/tailwind-class-validation.js +533 -0
- package/dist/checks/consolidated/tailwind-class-validation.js.map +1 -0
- package/dist/checks/consolidated/testing.d.ts +54 -0
- package/dist/checks/consolidated/testing.d.ts.map +1 -0
- package/dist/checks/consolidated/testing.js +163 -0
- package/dist/checks/consolidated/testing.js.map +1 -0
- package/dist/checks/consolidated/typescript.d.ts +3 -0
- package/dist/checks/consolidated/typescript.d.ts.map +1 -0
- package/dist/checks/consolidated/typescript.js +31 -0
- package/dist/checks/consolidated/typescript.js.map +1 -0
- package/dist/checks/consolidated/ui-accessibility-advanced.d.ts +104 -0
- package/dist/checks/consolidated/ui-accessibility-advanced.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-accessibility-advanced.js +689 -0
- package/dist/checks/consolidated/ui-accessibility-advanced.js.map +1 -0
- package/dist/checks/consolidated/ui-accessibility.d.ts +121 -0
- package/dist/checks/consolidated/ui-accessibility.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-accessibility.js +776 -0
- package/dist/checks/consolidated/ui-accessibility.js.map +1 -0
- package/dist/checks/consolidated/ui-advanced-spacing.d.ts +142 -0
- package/dist/checks/consolidated/ui-advanced-spacing.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-advanced-spacing.js +1220 -0
- package/dist/checks/consolidated/ui-advanced-spacing.js.map +1 -0
- package/dist/checks/consolidated/ui-animation-duration.d.ts +108 -0
- package/dist/checks/consolidated/ui-animation-duration.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-animation-duration.js +531 -0
- package/dist/checks/consolidated/ui-animation-duration.js.map +1 -0
- package/dist/checks/consolidated/ui-border-radius.d.ts +90 -0
- package/dist/checks/consolidated/ui-border-radius.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-border-radius.js +519 -0
- package/dist/checks/consolidated/ui-border-radius.js.map +1 -0
- package/dist/checks/consolidated/ui-buttons.d.ts +32 -0
- package/dist/checks/consolidated/ui-buttons.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-buttons.js +481 -0
- package/dist/checks/consolidated/ui-buttons.js.map +1 -0
- package/dist/checks/consolidated/ui-cards.d.ts +29 -0
- package/dist/checks/consolidated/ui-cards.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-cards.js +504 -0
- package/dist/checks/consolidated/ui-cards.js.map +1 -0
- package/dist/checks/consolidated/ui-checks.d.ts +48 -0
- package/dist/checks/consolidated/ui-checks.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-checks.js +264 -0
- package/dist/checks/consolidated/ui-checks.js.map +1 -0
- package/dist/checks/consolidated/ui-cleanup.d.ts +81 -0
- package/dist/checks/consolidated/ui-cleanup.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-cleanup.js +650 -0
- package/dist/checks/consolidated/ui-cleanup.js.map +1 -0
- package/dist/checks/consolidated/ui-components.d.ts +255 -0
- package/dist/checks/consolidated/ui-components.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-components.js +2008 -0
- package/dist/checks/consolidated/ui-components.js.map +1 -0
- package/dist/checks/consolidated/ui-consistency-advanced.d.ts +130 -0
- package/dist/checks/consolidated/ui-consistency-advanced.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-consistency-advanced.js +982 -0
- package/dist/checks/consolidated/ui-consistency-advanced.js.map +1 -0
- package/dist/checks/consolidated/ui-consistency-comprehensive.d.ts +30 -0
- package/dist/checks/consolidated/ui-consistency-comprehensive.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-consistency-comprehensive.js +1018 -0
- package/dist/checks/consolidated/ui-consistency-comprehensive.js.map +1 -0
- package/dist/checks/consolidated/ui-consistency-extended.d.ts +26 -0
- package/dist/checks/consolidated/ui-consistency-extended.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-consistency-extended.js +606 -0
- package/dist/checks/consolidated/ui-consistency-extended.js.map +1 -0
- package/dist/checks/consolidated/ui-data-display.d.ts +103 -0
- package/dist/checks/consolidated/ui-data-display.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-data-display.js +740 -0
- package/dist/checks/consolidated/ui-data-display.js.map +1 -0
- package/dist/checks/consolidated/ui-deprecated.d.ts +22 -0
- package/dist/checks/consolidated/ui-deprecated.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-deprecated.js +336 -0
- package/dist/checks/consolidated/ui-deprecated.js.map +1 -0
- package/dist/checks/consolidated/ui-empty-null-states.d.ts +90 -0
- package/dist/checks/consolidated/ui-empty-null-states.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-empty-null-states.js +511 -0
- package/dist/checks/consolidated/ui-empty-null-states.js.map +1 -0
- package/dist/checks/consolidated/ui-error-states.d.ts +99 -0
- package/dist/checks/consolidated/ui-error-states.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-error-states.js +694 -0
- package/dist/checks/consolidated/ui-error-states.js.map +1 -0
- package/dist/checks/consolidated/ui-feedback-confirmations.d.ts +90 -0
- package/dist/checks/consolidated/ui-feedback-confirmations.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-feedback-confirmations.js +596 -0
- package/dist/checks/consolidated/ui-feedback-confirmations.js.map +1 -0
- package/dist/checks/consolidated/ui-forms.d.ts +32 -0
- package/dist/checks/consolidated/ui-forms.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-forms.js +568 -0
- package/dist/checks/consolidated/ui-forms.js.map +1 -0
- package/dist/checks/consolidated/ui-gradient-shadow.d.ts +90 -0
- package/dist/checks/consolidated/ui-gradient-shadow.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-gradient-shadow.js +568 -0
- package/dist/checks/consolidated/ui-gradient-shadow.js.map +1 -0
- package/dist/checks/consolidated/ui-grid-responsive.d.ts +27 -0
- package/dist/checks/consolidated/ui-grid-responsive.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-grid-responsive.js +441 -0
- package/dist/checks/consolidated/ui-grid-responsive.js.map +1 -0
- package/dist/checks/consolidated/ui-icon-size-tokens.d.ts +104 -0
- package/dist/checks/consolidated/ui-icon-size-tokens.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-icon-size-tokens.js +514 -0
- package/dist/checks/consolidated/ui-icon-size-tokens.js.map +1 -0
- package/dist/checks/consolidated/ui-iconography.d.ts +90 -0
- package/dist/checks/consolidated/ui-iconography.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-iconography.js +565 -0
- package/dist/checks/consolidated/ui-iconography.js.map +1 -0
- package/dist/checks/consolidated/ui-interactive-states.d.ts +240 -0
- package/dist/checks/consolidated/ui-interactive-states.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-interactive-states.js +2474 -0
- package/dist/checks/consolidated/ui-interactive-states.js.map +1 -0
- package/dist/checks/consolidated/ui-layout.d.ts +256 -0
- package/dist/checks/consolidated/ui-layout.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-layout.js +1371 -0
- package/dist/checks/consolidated/ui-layout.js.map +1 -0
- package/dist/checks/consolidated/ui-loading-skeletons.d.ts +11 -0
- package/dist/checks/consolidated/ui-loading-skeletons.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-loading-skeletons.js +145 -0
- package/dist/checks/consolidated/ui-loading-skeletons.js.map +1 -0
- package/dist/checks/consolidated/ui-loading-state-skeletons.d.ts +9 -0
- package/dist/checks/consolidated/ui-loading-state-skeletons.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-loading-state-skeletons.js +125 -0
- package/dist/checks/consolidated/ui-loading-state-skeletons.js.map +1 -0
- package/dist/checks/consolidated/ui-media.d.ts +74 -0
- package/dist/checks/consolidated/ui-media.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-media.js +408 -0
- package/dist/checks/consolidated/ui-media.js.map +1 -0
- package/dist/checks/consolidated/ui-micro-interactions.d.ts +107 -0
- package/dist/checks/consolidated/ui-micro-interactions.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-micro-interactions.js +825 -0
- package/dist/checks/consolidated/ui-micro-interactions.js.map +1 -0
- package/dist/checks/consolidated/ui-microcopy-consistency.d.ts +114 -0
- package/dist/checks/consolidated/ui-microcopy-consistency.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-microcopy-consistency.js +566 -0
- package/dist/checks/consolidated/ui-microcopy-consistency.js.map +1 -0
- package/dist/checks/consolidated/ui-mobile-ux.d.ts +251 -0
- package/dist/checks/consolidated/ui-mobile-ux.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-mobile-ux.js +2212 -0
- package/dist/checks/consolidated/ui-mobile-ux.js.map +1 -0
- package/dist/checks/consolidated/ui-motion-accessibility.d.ts +93 -0
- package/dist/checks/consolidated/ui-motion-accessibility.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-motion-accessibility.js +450 -0
- package/dist/checks/consolidated/ui-motion-accessibility.js.map +1 -0
- package/dist/checks/consolidated/ui-navigation.d.ts +85 -0
- package/dist/checks/consolidated/ui-navigation.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-navigation.js +673 -0
- package/dist/checks/consolidated/ui-navigation.js.map +1 -0
- package/dist/checks/consolidated/ui-patterns.d.ts +174 -0
- package/dist/checks/consolidated/ui-patterns.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-patterns.js +1532 -0
- package/dist/checks/consolidated/ui-patterns.js.map +1 -0
- package/dist/checks/consolidated/ui-responsive.d.ts +89 -0
- package/dist/checks/consolidated/ui-responsive.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-responsive.js +588 -0
- package/dist/checks/consolidated/ui-responsive.js.map +1 -0
- package/dist/checks/consolidated/ui-spacing-standards.d.ts +43 -0
- package/dist/checks/consolidated/ui-spacing-standards.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-spacing-standards.js +874 -0
- package/dist/checks/consolidated/ui-spacing-standards.js.map +1 -0
- package/dist/checks/consolidated/ui-spacing.d.ts +751 -0
- package/dist/checks/consolidated/ui-spacing.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-spacing.js +4996 -0
- package/dist/checks/consolidated/ui-spacing.js.map +1 -0
- package/dist/checks/consolidated/ui-standards-auto-fixer.d.ts +70 -0
- package/dist/checks/consolidated/ui-standards-auto-fixer.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-standards-auto-fixer.js +429 -0
- package/dist/checks/consolidated/ui-standards-auto-fixer.js.map +1 -0
- package/dist/checks/consolidated/ui-standards-enforcement.d.ts +100 -0
- package/dist/checks/consolidated/ui-standards-enforcement.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-standards-enforcement.js +935 -0
- package/dist/checks/consolidated/ui-standards-enforcement.js.map +1 -0
- package/dist/checks/consolidated/ui-state-consistency.d.ts +90 -0
- package/dist/checks/consolidated/ui-state-consistency.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-state-consistency.js +659 -0
- package/dist/checks/consolidated/ui-state-consistency.js.map +1 -0
- package/dist/checks/consolidated/ui-style-validation.d.ts +74 -0
- package/dist/checks/consolidated/ui-style-validation.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-style-validation.js +403 -0
- package/dist/checks/consolidated/ui-style-validation.js.map +1 -0
- package/dist/checks/consolidated/ui-tokens.d.ts +110 -0
- package/dist/checks/consolidated/ui-tokens.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-tokens.js +990 -0
- package/dist/checks/consolidated/ui-tokens.js.map +1 -0
- package/dist/checks/consolidated/ui-typography.d.ts +77 -0
- package/dist/checks/consolidated/ui-typography.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-typography.js +416 -0
- package/dist/checks/consolidated/ui-typography.js.map +1 -0
- package/dist/checks/consolidated/ui-visual-hierarchy.d.ts +90 -0
- package/dist/checks/consolidated/ui-visual-hierarchy.d.ts.map +1 -0
- package/dist/checks/consolidated/ui-visual-hierarchy.js +562 -0
- package/dist/checks/consolidated/ui-visual-hierarchy.js.map +1 -0
- package/dist/checks/consolidated/woocommerce.d.ts +50 -0
- package/dist/checks/consolidated/woocommerce.d.ts.map +1 -0
- package/dist/checks/consolidated/woocommerce.js +198 -0
- package/dist/checks/consolidated/woocommerce.js.map +1 -0
- package/dist/checks/core/api-route-protection.d.ts +2 -0
- package/dist/checks/core/api-route-protection.d.ts.map +1 -0
- package/dist/checks/core/api-route-protection.js +101 -0
- package/dist/checks/core/api-route-protection.js.map +1 -0
- package/dist/checks/core/critical.d.ts +8 -0
- package/dist/checks/core/critical.d.ts.map +1 -0
- package/dist/checks/core/critical.js +200 -0
- package/dist/checks/core/critical.js.map +1 -0
- package/dist/checks/core/database.d.ts +8 -0
- package/dist/checks/core/database.d.ts.map +1 -0
- package/dist/checks/core/database.js +699 -0
- package/dist/checks/core/database.js.map +1 -0
- package/dist/checks/core/development.d.ts +8 -0
- package/dist/checks/core/development.d.ts.map +1 -0
- package/dist/checks/core/development.js +417 -0
- package/dist/checks/core/development.js.map +1 -0
- package/dist/checks/core/hydration-mismatch-check.d.ts +38 -0
- package/dist/checks/core/hydration-mismatch-check.d.ts.map +1 -0
- package/dist/checks/core/hydration-mismatch-check.js +411 -0
- package/dist/checks/core/hydration-mismatch-check.js.map +1 -0
- package/dist/checks/core/performance.d.ts +8 -0
- package/dist/checks/core/performance.d.ts.map +1 -0
- package/dist/checks/core/performance.js +474 -0
- package/dist/checks/core/performance.js.map +1 -0
- package/dist/checks/core/security.d.ts +8 -0
- package/dist/checks/core/security.d.ts.map +1 -0
- package/dist/checks/core/security.js +275 -0
- package/dist/checks/core/security.js.map +1 -0
- package/dist/checks/core/standardized-error-handling.d.ts +43 -0
- package/dist/checks/core/standardized-error-handling.d.ts.map +1 -0
- package/dist/checks/core/standardized-error-handling.js +384 -0
- package/dist/checks/core/standardized-error-handling.js.map +1 -0
- package/dist/checks/core/supercatch.d.ts +8 -0
- package/dist/checks/core/supercatch.d.ts.map +1 -0
- package/dist/checks/core/supercatch.js +750 -0
- package/dist/checks/core/supercatch.js.map +1 -0
- package/dist/checks/core/suppression-check.d.ts +2 -0
- package/dist/checks/core/suppression-check.d.ts.map +1 -0
- package/dist/checks/core/suppression-check.js +129 -0
- package/dist/checks/core/suppression-check.js.map +1 -0
- package/dist/checks/core/ui-quality.d.ts +8 -0
- package/dist/checks/core/ui-quality.d.ts.map +1 -0
- package/dist/checks/core/ui-quality.js +1736 -0
- package/dist/checks/core/ui-quality.js.map +1 -0
- package/dist/checks/core/unused-assets-check.d.ts +2 -0
- package/dist/checks/core/unused-assets-check.d.ts.map +1 -0
- package/dist/checks/core/unused-assets-check.js +112 -0
- package/dist/checks/core/unused-assets-check.js.map +1 -0
- package/dist/checks/core/use-status-ssr-safety.d.ts +34 -0
- package/dist/checks/core/use-status-ssr-safety.d.ts.map +1 -0
- package/dist/checks/core/use-status-ssr-safety.js +283 -0
- package/dist/checks/core/use-status-ssr-safety.js.map +1 -0
- package/dist/checks/email/email-flow-validation.d.ts +23 -0
- package/dist/checks/email/email-flow-validation.d.ts.map +1 -0
- package/dist/checks/email/email-flow-validation.js +468 -0
- package/dist/checks/email/email-flow-validation.js.map +1 -0
- package/dist/checks/email/email-template-db-verification.d.ts +20 -0
- package/dist/checks/email/email-template-db-verification.d.ts.map +1 -0
- package/dist/checks/email/email-template-db-verification.js +46 -0
- package/dist/checks/email/email-template-db-verification.js.map +1 -0
- package/dist/checks/email/email-template-validation.d.ts +24 -0
- package/dist/checks/email/email-template-validation.d.ts.map +1 -0
- package/dist/checks/email/email-template-validation.js +688 -0
- package/dist/checks/email/email-template-validation.js.map +1 -0
- package/dist/checks/jsx/comment-placement.d.ts +45 -0
- package/dist/checks/jsx/comment-placement.d.ts.map +1 -0
- package/dist/checks/jsx/comment-placement.js +316 -0
- package/dist/checks/jsx/comment-placement.js.map +1 -0
- package/dist/checks/specialized/admin-layout-check.d.ts +19 -0
- package/dist/checks/specialized/admin-layout-check.d.ts.map +1 -0
- package/dist/checks/specialized/admin-layout-check.js +166 -0
- package/dist/checks/specialized/admin-layout-check.js.map +1 -0
- package/dist/checks/specialized/client-server-separation.d.ts +14 -0
- package/dist/checks/specialized/client-server-separation.d.ts.map +1 -0
- package/dist/checks/specialized/client-server-separation.js +197 -0
- package/dist/checks/specialized/client-server-separation.js.map +1 -0
- package/dist/checks/specialized/cost-optimization.d.ts +18 -0
- package/dist/checks/specialized/cost-optimization.d.ts.map +1 -0
- package/dist/checks/specialized/cost-optimization.js +78 -0
- package/dist/checks/specialized/cost-optimization.js.map +1 -0
- package/dist/checks/specialized/database-migration-sync.d.ts +21 -0
- package/dist/checks/specialized/database-migration-sync.d.ts.map +1 -0
- package/dist/checks/specialized/database-migration-sync.js +150 -0
- package/dist/checks/specialized/database-migration-sync.js.map +1 -0
- package/dist/checks/specialized/database-model-validation.d.ts +15 -0
- package/dist/checks/specialized/database-model-validation.d.ts.map +1 -0
- package/dist/checks/specialized/database-model-validation.js +35 -0
- package/dist/checks/specialized/database-model-validation.js.map +1 -0
- package/dist/checks/specialized/database-schema-migrations-diff.d.ts +27 -0
- package/dist/checks/specialized/database-schema-migrations-diff.d.ts.map +1 -0
- package/dist/checks/specialized/database-schema-migrations-diff.js +177 -0
- package/dist/checks/specialized/database-schema-migrations-diff.js.map +1 -0
- package/dist/checks/specialized/database-schema-sync.d.ts +23 -0
- package/dist/checks/specialized/database-schema-sync.d.ts.map +1 -0
- package/dist/checks/specialized/database-schema-sync.js +77 -0
- package/dist/checks/specialized/database-schema-sync.js.map +1 -0
- package/dist/checks/specialized/decimal-serialization.d.ts +24 -0
- package/dist/checks/specialized/decimal-serialization.d.ts.map +1 -0
- package/dist/checks/specialized/decimal-serialization.js +400 -0
- package/dist/checks/specialized/decimal-serialization.js.map +1 -0
- package/dist/checks/specialized/detect-router-issues.d.ts +14 -0
- package/dist/checks/specialized/detect-router-issues.d.ts.map +1 -0
- package/dist/checks/specialized/detect-router-issues.js +96 -0
- package/dist/checks/specialized/detect-router-issues.js.map +1 -0
- package/dist/checks/specialized/enum-validation.d.ts +15 -0
- package/dist/checks/specialized/enum-validation.d.ts.map +1 -0
- package/dist/checks/specialized/enum-validation.js +35 -0
- package/dist/checks/specialized/enum-validation.js.map +1 -0
- package/dist/checks/specialized/hash-collision.d.ts +18 -0
- package/dist/checks/specialized/hash-collision.d.ts.map +1 -0
- package/dist/checks/specialized/hash-collision.js +78 -0
- package/dist/checks/specialized/hash-collision.js.map +1 -0
- package/dist/checks/specialized/id-generation-enforcement.d.ts +16 -0
- package/dist/checks/specialized/id-generation-enforcement.d.ts.map +1 -0
- package/dist/checks/specialized/id-generation-enforcement.js +307 -0
- package/dist/checks/specialized/id-generation-enforcement.js.map +1 -0
- package/dist/checks/specialized/image-data-integrity.d.ts +15 -0
- package/dist/checks/specialized/image-data-integrity.d.ts.map +1 -0
- package/dist/checks/specialized/image-data-integrity.js +79 -0
- package/dist/checks/specialized/image-data-integrity.js.map +1 -0
- package/dist/checks/specialized/image-health.d.ts +14 -0
- package/dist/checks/specialized/image-health.d.ts.map +1 -0
- package/dist/checks/specialized/image-health.js +122 -0
- package/dist/checks/specialized/image-health.js.map +1 -0
- package/dist/checks/specialized/image-metadata-validation.d.ts +14 -0
- package/dist/checks/specialized/image-metadata-validation.d.ts.map +1 -0
- package/dist/checks/specialized/image-metadata-validation.js +95 -0
- package/dist/checks/specialized/image-metadata-validation.js.map +1 -0
- package/dist/checks/specialized/image-optimization.d.ts +16 -0
- package/dist/checks/specialized/image-optimization.d.ts.map +1 -0
- package/dist/checks/specialized/image-optimization.js +86 -0
- package/dist/checks/specialized/image-optimization.js.map +1 -0
- package/dist/checks/specialized/invalid-module-imports.d.ts +24 -0
- package/dist/checks/specialized/invalid-module-imports.d.ts.map +1 -0
- package/dist/checks/specialized/invalid-module-imports.js +209 -0
- package/dist/checks/specialized/invalid-module-imports.js.map +1 -0
- package/dist/checks/specialized/lint-validation.d.ts +26 -0
- package/dist/checks/specialized/lint-validation.d.ts.map +1 -0
- package/dist/checks/specialized/lint-validation.js +193 -0
- package/dist/checks/specialized/lint-validation.js.map +1 -0
- package/dist/checks/specialized/listing-workflow.d.ts +19 -0
- package/dist/checks/specialized/listing-workflow.d.ts.map +1 -0
- package/dist/checks/specialized/listing-workflow.js +89 -0
- package/dist/checks/specialized/listing-workflow.js.map +1 -0
- package/dist/checks/specialized/mui-imports-validation.d.ts +18 -0
- package/dist/checks/specialized/mui-imports-validation.d.ts.map +1 -0
- package/dist/checks/specialized/mui-imports-validation.js +134 -0
- package/dist/checks/specialized/mui-imports-validation.js.map +1 -0
- package/dist/checks/specialized/nextauth-v5-compliance.d.ts +16 -0
- package/dist/checks/specialized/nextauth-v5-compliance.d.ts.map +1 -0
- package/dist/checks/specialized/nextauth-v5-compliance.js +164 -0
- package/dist/checks/specialized/nextauth-v5-compliance.js.map +1 -0
- package/dist/checks/specialized/nextjs-params-check.d.ts +14 -0
- package/dist/checks/specialized/nextjs-params-check.d.ts.map +1 -0
- package/dist/checks/specialized/nextjs-params-check.js +140 -0
- package/dist/checks/specialized/nextjs-params-check.js.map +1 -0
- package/dist/checks/specialized/no-legacy-catalog-aliases-validation.d.ts +16 -0
- package/dist/checks/specialized/no-legacy-catalog-aliases-validation.d.ts.map +1 -0
- package/dist/checks/specialized/no-legacy-catalog-aliases-validation.js +36 -0
- package/dist/checks/specialized/no-legacy-catalog-aliases-validation.js.map +1 -0
- package/dist/checks/specialized/no-wata-cardgraded-validation.d.ts +22 -0
- package/dist/checks/specialized/no-wata-cardgraded-validation.d.ts.map +1 -0
- package/dist/checks/specialized/no-wata-cardgraded-validation.js +97 -0
- package/dist/checks/specialized/no-wata-cardgraded-validation.js.map +1 -0
- package/dist/checks/specialized/parameter-consistency-check.d.ts +20 -0
- package/dist/checks/specialized/parameter-consistency-check.d.ts.map +1 -0
- package/dist/checks/specialized/parameter-consistency-check.js +115 -0
- package/dist/checks/specialized/parameter-consistency-check.js.map +1 -0
- package/dist/checks/specialized/prisma-field-names-validation.d.ts +15 -0
- package/dist/checks/specialized/prisma-field-names-validation.d.ts.map +1 -0
- package/dist/checks/specialized/prisma-field-names-validation.js +35 -0
- package/dist/checks/specialized/prisma-field-names-validation.js.map +1 -0
- package/dist/checks/specialized/prisma-null-syntax.d.ts +34 -0
- package/dist/checks/specialized/prisma-null-syntax.d.ts.map +1 -0
- package/dist/checks/specialized/prisma-null-syntax.js +330 -0
- package/dist/checks/specialized/prisma-null-syntax.js.map +1 -0
- package/dist/checks/specialized/prisma-query-validation.d.ts +15 -0
- package/dist/checks/specialized/prisma-query-validation.d.ts.map +1 -0
- package/dist/checks/specialized/prisma-query-validation.js +35 -0
- package/dist/checks/specialized/prisma-query-validation.js.map +1 -0
- package/dist/checks/specialized/product-type-validation.d.ts +17 -0
- package/dist/checks/specialized/product-type-validation.d.ts.map +1 -0
- package/dist/checks/specialized/product-type-validation.js +129 -0
- package/dist/checks/specialized/product-type-validation.js.map +1 -0
- package/dist/checks/specialized/responsive-image-validation.d.ts +14 -0
- package/dist/checks/specialized/responsive-image-validation.d.ts.map +1 -0
- package/dist/checks/specialized/responsive-image-validation.js +101 -0
- package/dist/checks/specialized/responsive-image-validation.js.map +1 -0
- package/dist/checks/specialized/root-cleanliness.d.ts +21 -0
- package/dist/checks/specialized/root-cleanliness.d.ts.map +1 -0
- package/dist/checks/specialized/root-cleanliness.js +251 -0
- package/dist/checks/specialized/root-cleanliness.js.map +1 -0
- package/dist/checks/specialized/rotation-detection-validation.d.ts +16 -0
- package/dist/checks/specialized/rotation-detection-validation.d.ts.map +1 -0
- package/dist/checks/specialized/rotation-detection-validation.js +113 -0
- package/dist/checks/specialized/rotation-detection-validation.js.map +1 -0
- package/dist/checks/specialized/script-organization.d.ts +17 -0
- package/dist/checks/specialized/script-organization.d.ts.map +1 -0
- package/dist/checks/specialized/script-organization.js +487 -0
- package/dist/checks/specialized/script-organization.js.map +1 -0
- package/dist/checks/specialized/shared-components-migration.d.ts +137 -0
- package/dist/checks/specialized/shared-components-migration.d.ts.map +1 -0
- package/dist/checks/specialized/shared-components-migration.js +1288 -0
- package/dist/checks/specialized/shared-components-migration.js.map +1 -0
- package/dist/checks/specialized/store-specialties-normalization.d.ts +10 -0
- package/dist/checks/specialized/store-specialties-normalization.d.ts.map +1 -0
- package/dist/checks/specialized/store-specialties-normalization.js +126 -0
- package/dist/checks/specialized/store-specialties-normalization.js.map +1 -0
- package/dist/checks/specialized/two-stage-trim-validation.d.ts +16 -0
- package/dist/checks/specialized/two-stage-trim-validation.d.ts.map +1 -0
- package/dist/checks/specialized/two-stage-trim-validation.js +115 -0
- package/dist/checks/specialized/two-stage-trim-validation.js.map +1 -0
- package/dist/checks/specialized/underscore-variable-audit.d.ts +26 -0
- package/dist/checks/specialized/underscore-variable-audit.d.ts.map +1 -0
- package/dist/checks/specialized/underscore-variable-audit.js +219 -0
- package/dist/checks/specialized/underscore-variable-audit.js.map +1 -0
- package/dist/checks/specialized/unified-badge-consistency.d.ts +16 -0
- package/dist/checks/specialized/unified-badge-consistency.d.ts.map +1 -0
- package/dist/checks/specialized/unified-badge-consistency.js +284 -0
- package/dist/checks/specialized/unified-badge-consistency.js.map +1 -0
- package/dist/checks/specialized/validate-integration-enums.d.ts +15 -0
- package/dist/checks/specialized/validate-integration-enums.d.ts.map +1 -0
- package/dist/checks/specialized/validate-integration-enums.js +131 -0
- package/dist/checks/specialized/validate-integration-enums.js.map +1 -0
- package/dist/checks/testing/action-regression.d.ts +23 -0
- package/dist/checks/testing/action-regression.d.ts.map +1 -0
- package/dist/checks/testing/action-regression.js +192 -0
- package/dist/checks/testing/action-regression.js.map +1 -0
- package/dist/checks/testing/critical-api-coverage.d.ts +21 -0
- package/dist/checks/testing/critical-api-coverage.d.ts.map +1 -0
- package/dist/checks/testing/critical-api-coverage.js +158 -0
- package/dist/checks/testing/critical-api-coverage.js.map +1 -0
- package/dist/checks/testing/data-entry-regression-required.d.ts +24 -0
- package/dist/checks/testing/data-entry-regression-required.d.ts.map +1 -0
- package/dist/checks/testing/data-entry-regression-required.js +378 -0
- package/dist/checks/testing/data-entry-regression-required.js.map +1 -0
- package/dist/checks/testing/e2e-best-practices.d.ts +24 -0
- package/dist/checks/testing/e2e-best-practices.d.ts.map +1 -0
- package/dist/checks/testing/e2e-best-practices.js +791 -0
- package/dist/checks/testing/e2e-best-practices.js.map +1 -0
- package/dist/checks/testing/e2e-flake-patterns.d.ts +26 -0
- package/dist/checks/testing/e2e-flake-patterns.d.ts.map +1 -0
- package/dist/checks/testing/e2e-flake-patterns.js +305 -0
- package/dist/checks/testing/e2e-flake-patterns.js.map +1 -0
- package/dist/checks/testing/e2e-redundant-visibility-checks.d.ts +25 -0
- package/dist/checks/testing/e2e-redundant-visibility-checks.d.ts.map +1 -0
- package/dist/checks/testing/e2e-redundant-visibility-checks.js +613 -0
- package/dist/checks/testing/e2e-redundant-visibility-checks.js.map +1 -0
- package/dist/checks/testing/e2e-slow-tests.d.ts +9 -0
- package/dist/checks/testing/e2e-slow-tests.d.ts.map +1 -0
- package/dist/checks/testing/e2e-slow-tests.js +142 -0
- package/dist/checks/testing/e2e-slow-tests.js.map +1 -0
- package/dist/checks/testing/e2e-timeouts.d.ts +9 -0
- package/dist/checks/testing/e2e-timeouts.d.ts.map +1 -0
- package/dist/checks/testing/e2e-timeouts.js +82 -0
- package/dist/checks/testing/e2e-timeouts.js.map +1 -0
- package/dist/checks/testing/integration-e2e-depth.d.ts +20 -0
- package/dist/checks/testing/integration-e2e-depth.d.ts.map +1 -0
- package/dist/checks/testing/integration-e2e-depth.js +575 -0
- package/dist/checks/testing/integration-e2e-depth.js.map +1 -0
- package/dist/checks/testing/playwright-feature-coverage-gaps.d.ts +31 -0
- package/dist/checks/testing/playwright-feature-coverage-gaps.d.ts.map +1 -0
- package/dist/checks/testing/playwright-feature-coverage-gaps.js +1582 -0
- package/dist/checks/testing/playwright-feature-coverage-gaps.js.map +1 -0
- package/dist/checks/testing/playwright-mock-inventory.d.ts +24 -0
- package/dist/checks/testing/playwright-mock-inventory.d.ts.map +1 -0
- package/dist/checks/testing/playwright-mock-inventory.js +380 -0
- package/dist/checks/testing/playwright-mock-inventory.js.map +1 -0
- package/dist/checks/testing/test-coverage-threshold.d.ts +25 -0
- package/dist/checks/testing/test-coverage-threshold.d.ts.map +1 -0
- package/dist/checks/testing/test-coverage-threshold.js +166 -0
- package/dist/checks/testing/test-coverage-threshold.js.map +1 -0
- package/dist/checks/testing/test-flakiness-score.d.ts +27 -0
- package/dist/checks/testing/test-flakiness-score.d.ts.map +1 -0
- package/dist/checks/testing/test-flakiness-score.js +358 -0
- package/dist/checks/testing/test-flakiness-score.js.map +1 -0
- package/dist/checks/testing/test-patterns.d.ts +16 -0
- package/dist/checks/testing/test-patterns.d.ts.map +1 -0
- package/dist/checks/testing/test-patterns.js +156 -0
- package/dist/checks/testing/test-patterns.js.map +1 -0
- package/dist/checks/workflows/a-plus-rating-validation.d.ts +42 -0
- package/dist/checks/workflows/a-plus-rating-validation.d.ts.map +1 -0
- package/dist/checks/workflows/a-plus-rating-validation.js +527 -0
- package/dist/checks/workflows/a-plus-rating-validation.js.map +1 -0
- package/dist/checks/workflows/affected.d.ts +14 -0
- package/dist/checks/workflows/affected.d.ts.map +1 -0
- package/dist/checks/workflows/affected.js +126 -0
- package/dist/checks/workflows/affected.js.map +1 -0
- package/dist/checks/workflows/ai.d.ts +6 -0
- package/dist/checks/workflows/ai.d.ts.map +1 -0
- package/dist/checks/workflows/ai.js +42 -0
- package/dist/checks/workflows/ai.js.map +1 -0
- package/dist/checks/workflows/all.d.ts +31 -0
- package/dist/checks/workflows/all.d.ts.map +1 -0
- package/dist/checks/workflows/all.js +2688 -0
- package/dist/checks/workflows/all.js.map +1 -0
- package/dist/checks/workflows/commit.d.ts +19 -0
- package/dist/checks/workflows/commit.d.ts.map +1 -0
- package/dist/checks/workflows/commit.js +207 -0
- package/dist/checks/workflows/commit.js.map +1 -0
- package/dist/checks/workflows/critical.d.ts +9 -0
- package/dist/checks/workflows/critical.d.ts.map +1 -0
- package/dist/checks/workflows/critical.js +213 -0
- package/dist/checks/workflows/critical.js.map +1 -0
- package/dist/checks/workflows/database-id-validation.d.ts +9 -0
- package/dist/checks/workflows/database-id-validation.d.ts.map +1 -0
- package/dist/checks/workflows/database-id-validation.js +13 -0
- package/dist/checks/workflows/database-id-validation.js.map +1 -0
- package/dist/checks/workflows/deploy.d.ts +20 -0
- package/dist/checks/workflows/deploy.d.ts.map +1 -0
- package/dist/checks/workflows/deploy.js +107 -0
- package/dist/checks/workflows/deploy.js.map +1 -0
- package/dist/checks/workflows/deployment-readiness.d.ts +12 -0
- package/dist/checks/workflows/deployment-readiness.d.ts.map +1 -0
- package/dist/checks/workflows/deployment-readiness.js +403 -0
- package/dist/checks/workflows/deployment-readiness.js.map +1 -0
- package/dist/checks/workflows/dev.d.ts +19 -0
- package/dist/checks/workflows/dev.d.ts.map +1 -0
- package/dist/checks/workflows/dev.js +88 -0
- package/dist/checks/workflows/dev.js.map +1 -0
- package/dist/checks/workflows/development.d.ts +9 -0
- package/dist/checks/workflows/development.d.ts.map +1 -0
- package/dist/checks/workflows/development.js +65 -0
- package/dist/checks/workflows/development.js.map +1 -0
- package/dist/checks/workflows/enterprise.d.ts +10 -0
- package/dist/checks/workflows/enterprise.d.ts.map +1 -0
- package/dist/checks/workflows/enterprise.js +359 -0
- package/dist/checks/workflows/enterprise.js.map +1 -0
- package/dist/checks/workflows/images.d.ts +6 -0
- package/dist/checks/workflows/images.d.ts.map +1 -0
- package/dist/checks/workflows/images.js +58 -0
- package/dist/checks/workflows/images.js.map +1 -0
- package/dist/checks/workflows/naming.d.ts +19 -0
- package/dist/checks/workflows/naming.d.ts.map +1 -0
- package/dist/checks/workflows/naming.js +42 -0
- package/dist/checks/workflows/naming.js.map +1 -0
- package/dist/checks/workflows/performance.d.ts +8 -0
- package/dist/checks/workflows/performance.d.ts.map +1 -0
- package/dist/checks/workflows/performance.js +77 -0
- package/dist/checks/workflows/performance.js.map +1 -0
- package/dist/checks/workflows/pre-deploy.d.ts +6 -0
- package/dist/checks/workflows/pre-deploy.d.ts.map +1 -0
- package/dist/checks/workflows/pre-deploy.js +41 -0
- package/dist/checks/workflows/pre-deploy.js.map +1 -0
- package/dist/checks/workflows/security.d.ts +8 -0
- package/dist/checks/workflows/security.d.ts.map +1 -0
- package/dist/checks/workflows/security.js +71 -0
- package/dist/checks/workflows/security.js.map +1 -0
- package/dist/checks/workflows/supercatch.d.ts +8 -0
- package/dist/checks/workflows/supercatch.d.ts.map +1 -0
- package/dist/checks/workflows/supercatch.js +127 -0
- package/dist/checks/workflows/supercatch.js.map +1 -0
- package/dist/checks/workflows/ui-quality.d.ts +9 -0
- package/dist/checks/workflows/ui-quality.d.ts.map +1 -0
- package/dist/checks/workflows/ui-quality.js +264 -0
- package/dist/checks/workflows/ui-quality.js.map +1 -0
- package/dist/checks/workflows/ui-uniformity.d.ts +18 -0
- package/dist/checks/workflows/ui-uniformity.d.ts.map +1 -0
- package/dist/checks/workflows/ui-uniformity.js +265 -0
- package/dist/checks/workflows/ui-uniformity.js.map +1 -0
- package/dist/checks/workflows/vercel.d.ts +16 -0
- package/dist/checks/workflows/vercel.d.ts.map +1 -0
- package/dist/checks/workflows/vercel.js +173 -0
- package/dist/checks/workflows/vercel.js.map +1 -0
- package/dist/utils/validation-helpers.d.ts +43 -0
- package/dist/utils/validation-helpers.d.ts.map +1 -0
- package/dist/utils/validation-helpers.js +370 -0
- package/dist/utils/validation-helpers.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,825 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* UI Micro-Interactions Preflight (NON-BLOCKING)
|
|
5
|
+
*
|
|
6
|
+
* Google/Meta/X-level micro-interaction consistency.
|
|
7
|
+
* Validates subtle animations and interactive feedback polish.
|
|
8
|
+
*
|
|
9
|
+
* Checks:
|
|
10
|
+
* 1. Hover micro-animations - Subtle hover effects on interactive elements
|
|
11
|
+
* 2. Button press feedback - Tactile scale/shadow on button press
|
|
12
|
+
* 3. Input focus animations - Smooth focus transitions
|
|
13
|
+
* 4. Card hover lift - Elevation changes on card hover
|
|
14
|
+
* 5. Icon state animations - Icon transitions (loading spinners, check animations)
|
|
15
|
+
* 6. List item animations - Stagger/fade in for list entries
|
|
16
|
+
* 7. Tab switch transitions - Smooth tab indicator movement
|
|
17
|
+
* 8. Tooltip animations - Fade/scale for tooltips
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* pnpm preflight:ui-micro-interactions # All checks
|
|
21
|
+
* pnpm preflight:ui-micro-interactions hover # Hover animations only
|
|
22
|
+
* pnpm preflight:ui-micro-interactions button # Button feedback only
|
|
23
|
+
*/
|
|
24
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
27
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
28
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
29
|
+
}
|
|
30
|
+
Object.defineProperty(o, k2, desc);
|
|
31
|
+
}) : (function(o, m, k, k2) {
|
|
32
|
+
if (k2 === undefined) k2 = k;
|
|
33
|
+
o[k2] = m[k];
|
|
34
|
+
}));
|
|
35
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
36
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
37
|
+
}) : function(o, v) {
|
|
38
|
+
o["default"] = v;
|
|
39
|
+
});
|
|
40
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
41
|
+
var ownKeys = function(o) {
|
|
42
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
43
|
+
var ar = [];
|
|
44
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
45
|
+
return ar;
|
|
46
|
+
};
|
|
47
|
+
return ownKeys(o);
|
|
48
|
+
};
|
|
49
|
+
return function (mod) {
|
|
50
|
+
if (mod && mod.__esModule) return mod;
|
|
51
|
+
var result = {};
|
|
52
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
53
|
+
__setModuleDefault(result, mod);
|
|
54
|
+
return result;
|
|
55
|
+
};
|
|
56
|
+
})();
|
|
57
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
58
|
+
exports.UIMicroInteractionsModule = void 0;
|
|
59
|
+
const fs = __importStar(require("fs"));
|
|
60
|
+
const path = __importStar(require("path"));
|
|
61
|
+
const console_chars_1 = require("../../utils/console-chars");
|
|
62
|
+
const file_cache_1 = require("../../shared/file-cache");
|
|
63
|
+
const glob_patterns_1 = require("../../shared/glob-patterns");
|
|
64
|
+
const universal_progress_reporter_1 = require("../system/universal-progress-reporter");
|
|
65
|
+
const concurrency_config_1 = require("../../shared/concurrency-config");
|
|
66
|
+
const EXCLUDED = [...glob_patterns_1.STANDARD_EXCLUDES, "**/*.test.tsx", "**/*.spec.tsx", "**/*.stories.tsx"];
|
|
67
|
+
// Get concurrency from shared config (respects PREFLIGHT_CONCURRENCY env var)
|
|
68
|
+
const concurrencyConfig = (0, concurrency_config_1.getConcurrencyConfig)();
|
|
69
|
+
class UIMicroInteractionsModule {
|
|
70
|
+
verbose;
|
|
71
|
+
parallel = false;
|
|
72
|
+
constructor(options = {}) {
|
|
73
|
+
this.verbose = options.verbose || false;
|
|
74
|
+
this.parallel = options.parallel || concurrencyConfig.parallel;
|
|
75
|
+
}
|
|
76
|
+
async getTsxFiles() {
|
|
77
|
+
return file_cache_1.fileCache.getAppAndComponentsTSX();
|
|
78
|
+
}
|
|
79
|
+
async getCssFiles() {
|
|
80
|
+
return file_cache_1.fileCache.getCSSFiles();
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 1. Hover Micro-animations
|
|
84
|
+
* Check for subtle hover effects on interactive elements
|
|
85
|
+
*/
|
|
86
|
+
async checkHoverMicroAnimations() {
|
|
87
|
+
const startTime = Date.now();
|
|
88
|
+
const issues = [];
|
|
89
|
+
const files = await this.getTsxFiles();
|
|
90
|
+
const hoverTransitionPatterns = new Map();
|
|
91
|
+
for (const file of files) {
|
|
92
|
+
const content = fs.readFileSync(file, "utf8");
|
|
93
|
+
const lines = content.split("\n");
|
|
94
|
+
for (let i = 0; i < lines.length; i++) {
|
|
95
|
+
const line = lines[i];
|
|
96
|
+
// Check for hover states with transitions
|
|
97
|
+
if (/hover:/.test(line)) {
|
|
98
|
+
const hasTransition = /transition|duration-/.test(line);
|
|
99
|
+
const contextBlock = lines.slice(Math.max(0, i - 2), Math.min(i + 3, lines.length)).join("\n");
|
|
100
|
+
const hasTransitionNearby = /transition|duration-/.test(contextBlock);
|
|
101
|
+
if (!hasTransition && !hasTransitionNearby) {
|
|
102
|
+
// Check if it's a meaningful hover change
|
|
103
|
+
const hasColorChange = /hover:(?:bg-|text-|border-)/.test(line);
|
|
104
|
+
const hasScaleChange = /hover:scale/.test(line);
|
|
105
|
+
const hasShadowChange = /hover:shadow/.test(line);
|
|
106
|
+
if (hasColorChange || hasScaleChange || hasShadowChange) {
|
|
107
|
+
issues.push({
|
|
108
|
+
file,
|
|
109
|
+
line: i + 1,
|
|
110
|
+
type: "hover-no-transition",
|
|
111
|
+
severity: "info",
|
|
112
|
+
message: "Hover effect without smooth transition",
|
|
113
|
+
suggestion: "Add transition-all duration-200 for polished hover animations",
|
|
114
|
+
snippet: line.trim().substring(0, 80),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Track transition durations
|
|
119
|
+
const durationMatch = line.match(/duration-(\d+)/);
|
|
120
|
+
if (durationMatch) {
|
|
121
|
+
const duration = durationMatch[1];
|
|
122
|
+
hoverTransitionPatterns.set(duration, (hoverTransitionPatterns.get(duration) || 0) + 1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Check for micro-animation patterns
|
|
126
|
+
if (/hover:translate|hover:rotate|hover:-translate/.test(line)) {
|
|
127
|
+
const contextBlock = lines.slice(i, Math.min(i + 3, lines.length)).join("\n");
|
|
128
|
+
const hasEasing = /ease-|cubic-bezier/.test(contextBlock);
|
|
129
|
+
if (!hasEasing) {
|
|
130
|
+
issues.push({
|
|
131
|
+
file,
|
|
132
|
+
line: i + 1,
|
|
133
|
+
type: "transform-no-easing",
|
|
134
|
+
severity: "info",
|
|
135
|
+
message: "Transform animation without explicit easing",
|
|
136
|
+
suggestion: "Add ease-out or ease-in-out for more natural motion",
|
|
137
|
+
snippet: line.trim().substring(0, 80),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Report inconsistent durations
|
|
144
|
+
if (hoverTransitionPatterns.size > 3) {
|
|
145
|
+
const sorted = [...hoverTransitionPatterns.entries()].sort((a, b) => b[1] - a[1]);
|
|
146
|
+
issues.push({
|
|
147
|
+
file: "codebase-wide",
|
|
148
|
+
line: 0,
|
|
149
|
+
type: "hover-duration-inconsistency",
|
|
150
|
+
severity: "info",
|
|
151
|
+
message: `${hoverTransitionPatterns.size} different hover transition durations`,
|
|
152
|
+
suggestion: `Standardize on 2-3 durations. Usage: ${sorted.map(([d, c]) => `${d}ms(${c})`).join(", ")}`,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
name: "Hover Micro-animations",
|
|
157
|
+
passed: true,
|
|
158
|
+
blocking: false,
|
|
159
|
+
issues,
|
|
160
|
+
duration: Date.now() - startTime,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* 2. Button Press Feedback
|
|
165
|
+
* Check for tactile feedback on button press
|
|
166
|
+
*/
|
|
167
|
+
async checkButtonPressFeedback() {
|
|
168
|
+
const startTime = Date.now();
|
|
169
|
+
const issues = [];
|
|
170
|
+
const files = await this.getTsxFiles();
|
|
171
|
+
const pressPatterns = new Map();
|
|
172
|
+
for (const file of files) {
|
|
173
|
+
const content = fs.readFileSync(file, "utf8");
|
|
174
|
+
const lines = content.split("\n");
|
|
175
|
+
for (let i = 0; i < lines.length; i++) {
|
|
176
|
+
const line = lines[i];
|
|
177
|
+
// Check for button components
|
|
178
|
+
if (/<(?:Button|IconButton|button)\b/.test(line) && /className=/.test(line)) {
|
|
179
|
+
const contextBlock = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
|
|
180
|
+
const hasActiveScale = /active:scale/.test(contextBlock);
|
|
181
|
+
const hasActiveShadow = /active:shadow/.test(contextBlock);
|
|
182
|
+
const hasActiveOpacity = /active:opacity/.test(contextBlock);
|
|
183
|
+
const hasActiveBg = /active:bg-/.test(contextBlock);
|
|
184
|
+
const hasPressFeedback = hasActiveScale || hasActiveShadow || hasActiveOpacity || hasActiveBg;
|
|
185
|
+
// Track what patterns are used
|
|
186
|
+
if (hasActiveScale)
|
|
187
|
+
pressPatterns.set("scale", (pressPatterns.get("scale") || 0) + 1);
|
|
188
|
+
if (hasActiveShadow)
|
|
189
|
+
pressPatterns.set("shadow", (pressPatterns.get("shadow") || 0) + 1);
|
|
190
|
+
if (hasActiveOpacity)
|
|
191
|
+
pressPatterns.set("opacity", (pressPatterns.get("opacity") || 0) + 1);
|
|
192
|
+
if (hasActiveBg)
|
|
193
|
+
pressPatterns.set("bg", (pressPatterns.get("bg") || 0) + 1);
|
|
194
|
+
// Skip built-in components that likely have their own feedback
|
|
195
|
+
const isCustomButton = !/variant=|size=|color=/.test(contextBlock);
|
|
196
|
+
if (!hasPressFeedback && isCustomButton) {
|
|
197
|
+
issues.push({
|
|
198
|
+
file,
|
|
199
|
+
line: i + 1,
|
|
200
|
+
type: "button-no-press-feedback",
|
|
201
|
+
severity: "info",
|
|
202
|
+
message: "Button without active/pressed state feedback",
|
|
203
|
+
suggestion: "Add active:scale-[0.98] or active:shadow-inner for tactile feedback",
|
|
204
|
+
snippet: line.trim().substring(0, 80),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Check for custom clickable elements
|
|
209
|
+
if (/<div[^>]*onClick|role=["']button/.test(line)) {
|
|
210
|
+
const contextBlock = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
|
|
211
|
+
const hasPressFeedback = /active:/.test(contextBlock);
|
|
212
|
+
if (!hasPressFeedback) {
|
|
213
|
+
issues.push({
|
|
214
|
+
file,
|
|
215
|
+
line: i + 1,
|
|
216
|
+
type: "clickable-no-press-feedback",
|
|
217
|
+
severity: "info",
|
|
218
|
+
message: "Custom clickable element without press feedback",
|
|
219
|
+
suggestion: "Add active:scale-95 or active:bg-* for interaction feedback",
|
|
220
|
+
snippet: line.trim().substring(0, 80),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Report press feedback pattern usage
|
|
227
|
+
if (pressPatterns.size > 0) {
|
|
228
|
+
const sorted = [...pressPatterns.entries()].sort((a, b) => b[1] - a[1]);
|
|
229
|
+
if (sorted.length > 2 && sorted[0][1] < sorted.slice(1).reduce((a, b) => a + b[1], 0)) {
|
|
230
|
+
issues.push({
|
|
231
|
+
file: "codebase-wide",
|
|
232
|
+
line: 0,
|
|
233
|
+
type: "mixed-press-feedback",
|
|
234
|
+
severity: "info",
|
|
235
|
+
message: `Multiple button press feedback patterns in use`,
|
|
236
|
+
suggestion: `Standardize on primary pattern. Usage: ${sorted.map(([p, c]) => `${p}(${c})`).join(", ")}`,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
name: "Button Press Feedback",
|
|
242
|
+
passed: true,
|
|
243
|
+
blocking: false,
|
|
244
|
+
issues,
|
|
245
|
+
duration: Date.now() - startTime,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* 3. Input Focus Animations
|
|
250
|
+
* Check for smooth focus transitions on form inputs
|
|
251
|
+
*/
|
|
252
|
+
async checkInputFocusAnimations() {
|
|
253
|
+
const startTime = Date.now();
|
|
254
|
+
const issues = [];
|
|
255
|
+
const files = await this.getTsxFiles();
|
|
256
|
+
for (const file of files) {
|
|
257
|
+
const content = fs.readFileSync(file, "utf8");
|
|
258
|
+
const lines = content.split("\n");
|
|
259
|
+
for (let i = 0; i < lines.length; i++) {
|
|
260
|
+
const line = lines[i];
|
|
261
|
+
// Check for input elements with focus styles
|
|
262
|
+
if (/<(?:input|Input|TextField|textarea|Textarea|Select)\b/i.test(line)) {
|
|
263
|
+
const contextBlock = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
|
|
264
|
+
const hasFocusStyle = /focus:|focus-within:|focus-visible:/.test(contextBlock);
|
|
265
|
+
const hasTransition = /transition/.test(contextBlock);
|
|
266
|
+
if (hasFocusStyle && !hasTransition) {
|
|
267
|
+
issues.push({
|
|
268
|
+
file,
|
|
269
|
+
line: i + 1,
|
|
270
|
+
type: "input-focus-no-transition",
|
|
271
|
+
severity: "info",
|
|
272
|
+
message: "Input focus style without transition",
|
|
273
|
+
suggestion: "Add transition-all for smooth focus ring/border animation",
|
|
274
|
+
snippet: line.trim().substring(0, 80),
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
// Check for border color focus animation
|
|
278
|
+
const hasBorderFocus = /focus:border|focus-visible:border|focus:ring/.test(contextBlock);
|
|
279
|
+
const hasScaleFocus = /focus:scale/.test(contextBlock);
|
|
280
|
+
if (hasBorderFocus && !hasScaleFocus) {
|
|
281
|
+
// Check for label float animation (MUI-style)
|
|
282
|
+
const hasFloatLabel = /float|label.*transform|label.*scale|peer-focus/i.test(content.substring(Math.max(0, content.indexOf(line) - 200), content.indexOf(line) + 200));
|
|
283
|
+
// This is optional polish, just track
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Check for floating label patterns
|
|
287
|
+
if (/peer-focus|label.*peer|float.*label/i.test(line)) {
|
|
288
|
+
const contextBlock = lines.slice(i, Math.min(i + 10, lines.length)).join("\n");
|
|
289
|
+
const hasTransform = /transform|translate|scale/.test(contextBlock);
|
|
290
|
+
const hasTransition = /transition/.test(contextBlock);
|
|
291
|
+
if (hasTransform && !hasTransition) {
|
|
292
|
+
issues.push({
|
|
293
|
+
file,
|
|
294
|
+
line: i + 1,
|
|
295
|
+
type: "float-label-no-transition",
|
|
296
|
+
severity: "info",
|
|
297
|
+
message: "Floating label without smooth transition",
|
|
298
|
+
suggestion: "Add transition-all duration-200 for smooth label animation",
|
|
299
|
+
snippet: line.trim().substring(0, 80),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
name: "Input Focus Animations",
|
|
307
|
+
passed: true,
|
|
308
|
+
blocking: false,
|
|
309
|
+
issues,
|
|
310
|
+
duration: Date.now() - startTime,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* 4. Card Hover Lift
|
|
315
|
+
* Check for elevation changes on card hover
|
|
316
|
+
*/
|
|
317
|
+
async checkCardHoverLift() {
|
|
318
|
+
const startTime = Date.now();
|
|
319
|
+
const issues = [];
|
|
320
|
+
const files = await this.getTsxFiles();
|
|
321
|
+
const cardHoverPatterns = new Map();
|
|
322
|
+
for (const file of files) {
|
|
323
|
+
const content = fs.readFileSync(file, "utf8");
|
|
324
|
+
const lines = content.split("\n");
|
|
325
|
+
for (let i = 0; i < lines.length; i++) {
|
|
326
|
+
const line = lines[i];
|
|
327
|
+
// Check for Card components
|
|
328
|
+
if (/<Card\b|card.*className/i.test(line)) {
|
|
329
|
+
const contextBlock = lines.slice(i, Math.min(i + 10, lines.length)).join("\n");
|
|
330
|
+
const isClickable = /onClick|href|to=|Link/.test(contextBlock);
|
|
331
|
+
if (isClickable) {
|
|
332
|
+
const hasHoverLift = /hover:shadow|hover:-translate-y|hover:scale/.test(contextBlock);
|
|
333
|
+
const hasTransition = /transition/.test(contextBlock);
|
|
334
|
+
// Track hover patterns
|
|
335
|
+
if (/hover:shadow/.test(contextBlock)) {
|
|
336
|
+
cardHoverPatterns.set("shadow", (cardHoverPatterns.get("shadow") || 0) + 1);
|
|
337
|
+
}
|
|
338
|
+
if (/hover:-translate-y/.test(contextBlock)) {
|
|
339
|
+
cardHoverPatterns.set("translate", (cardHoverPatterns.get("translate") || 0) + 1);
|
|
340
|
+
}
|
|
341
|
+
if (/hover:scale/.test(contextBlock)) {
|
|
342
|
+
cardHoverPatterns.set("scale", (cardHoverPatterns.get("scale") || 0) + 1);
|
|
343
|
+
}
|
|
344
|
+
if (!hasHoverLift) {
|
|
345
|
+
issues.push({
|
|
346
|
+
file,
|
|
347
|
+
line: i + 1,
|
|
348
|
+
type: "clickable-card-no-lift",
|
|
349
|
+
severity: "info",
|
|
350
|
+
message: "Clickable card without hover lift effect",
|
|
351
|
+
suggestion: "Add hover:shadow-lg hover:-translate-y-1 for lift feedback",
|
|
352
|
+
snippet: line.trim().substring(0, 80),
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
if (hasHoverLift && !hasTransition) {
|
|
356
|
+
issues.push({
|
|
357
|
+
file,
|
|
358
|
+
line: i + 1,
|
|
359
|
+
type: "card-lift-no-transition",
|
|
360
|
+
severity: "info",
|
|
361
|
+
message: "Card hover lift without smooth transition",
|
|
362
|
+
suggestion: "Add transition-all duration-200 ease-out",
|
|
363
|
+
snippet: line.trim().substring(0, 80),
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
// Check for shadow hover patterns
|
|
369
|
+
if (/hover:shadow-/.test(line)) {
|
|
370
|
+
const shadowMatch = line.match(/hover:shadow-(\w+)/);
|
|
371
|
+
if (shadowMatch) {
|
|
372
|
+
const level = shadowMatch[1];
|
|
373
|
+
// Check for extreme shadow jumps
|
|
374
|
+
if (/shadow(?:-sm)?/.test(line) && /hover:shadow-2xl/.test(line)) {
|
|
375
|
+
issues.push({
|
|
376
|
+
file,
|
|
377
|
+
line: i + 1,
|
|
378
|
+
type: "shadow-jump-too-large",
|
|
379
|
+
severity: "info",
|
|
380
|
+
message: "Shadow jump from sm to 2xl may be too dramatic",
|
|
381
|
+
suggestion: "Use progressive shadow: shadow -> shadow-md -> shadow-lg",
|
|
382
|
+
snippet: line.trim().substring(0, 80),
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
// Report mixed card hover patterns
|
|
390
|
+
if (cardHoverPatterns.size > 1) {
|
|
391
|
+
const sorted = [...cardHoverPatterns.entries()].sort((a, b) => b[1] - a[1]);
|
|
392
|
+
issues.push({
|
|
393
|
+
file: "codebase-wide",
|
|
394
|
+
line: 0,
|
|
395
|
+
type: "mixed-card-hover-patterns",
|
|
396
|
+
severity: "info",
|
|
397
|
+
message: `Multiple card hover patterns in use`,
|
|
398
|
+
suggestion: `Consider standardizing. Usage: ${sorted.map(([p, c]) => `${p}(${c})`).join(", ")}`,
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
return {
|
|
402
|
+
name: "Card Hover Lift",
|
|
403
|
+
passed: true,
|
|
404
|
+
blocking: false,
|
|
405
|
+
issues,
|
|
406
|
+
duration: Date.now() - startTime,
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* 5. Icon State Animations
|
|
411
|
+
* Check for icon transitions (spinners, check animations, etc.)
|
|
412
|
+
*/
|
|
413
|
+
async checkIconStateAnimations() {
|
|
414
|
+
const startTime = Date.now();
|
|
415
|
+
const issues = [];
|
|
416
|
+
const files = await this.getTsxFiles();
|
|
417
|
+
for (const file of files) {
|
|
418
|
+
const content = fs.readFileSync(file, "utf8");
|
|
419
|
+
const lines = content.split("\n");
|
|
420
|
+
for (let i = 0; i < lines.length; i++) {
|
|
421
|
+
const line = lines[i];
|
|
422
|
+
// Check for conditional icon rendering
|
|
423
|
+
if (/\{.*\?.*<.*Icon|isLoading.*\?|isSuccess.*\?|isError.*\?/.test(line)) {
|
|
424
|
+
const contextBlock = lines.slice(i, Math.min(i + 10, lines.length)).join("\n");
|
|
425
|
+
const hasAnimation = /animate-|motion\.|Transition|AnimatePresence/.test(contextBlock);
|
|
426
|
+
const hasFade = /opacity|fade/.test(contextBlock);
|
|
427
|
+
// Check if icons swap without animation
|
|
428
|
+
const hasIconSwap = /<\w+Icon.*:.*<\w+Icon|Icon.*\?.*Icon/.test(contextBlock);
|
|
429
|
+
if (hasIconSwap && !hasAnimation && !hasFade) {
|
|
430
|
+
issues.push({
|
|
431
|
+
file,
|
|
432
|
+
line: i + 1,
|
|
433
|
+
type: "icon-swap-no-animation",
|
|
434
|
+
severity: "info",
|
|
435
|
+
message: "Icon state change without transition animation",
|
|
436
|
+
suggestion: "Add opacity fade or scale animation for icon transitions",
|
|
437
|
+
snippet: line.trim().substring(0, 80),
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
// Check for loading spinners
|
|
442
|
+
if (/animate-spin|CircularProgress|Spinner/i.test(line)) {
|
|
443
|
+
// These are typically fine, just ensure consistent sizing
|
|
444
|
+
const sizeMatch = line.match(/(?:size|w-|h-)(\d+)/);
|
|
445
|
+
// Track sizes for consistency check if needed
|
|
446
|
+
}
|
|
447
|
+
// Check for checkmark animations (success states)
|
|
448
|
+
if (/<Check|CheckIcon|CheckCircle/i.test(line)) {
|
|
449
|
+
const contextBlock = lines.slice(i, Math.min(i + 5, lines.length)).join("\n");
|
|
450
|
+
const hasDrawAnimation = /animate-|stroke-dasharray|pathLength|motion/.test(contextBlock);
|
|
451
|
+
// Nice-to-have: animated checkmark draw
|
|
452
|
+
}
|
|
453
|
+
// Check for icon rotation on expand/collapse
|
|
454
|
+
if (/ChevronDown|ChevronRight|ArrowDown|ExpandMore/i.test(line)) {
|
|
455
|
+
const contextBlock = lines.slice(Math.max(0, i - 5), Math.min(i + 10, lines.length)).join("\n");
|
|
456
|
+
const hasRotation = /rotate|transform.*rotate|data-\[state/.test(contextBlock);
|
|
457
|
+
const hasTransition = /transition|duration/.test(contextBlock);
|
|
458
|
+
const isExpandable = /expand|collapse|isOpen|isExpanded|accordion/i.test(contextBlock);
|
|
459
|
+
if (isExpandable && hasRotation && !hasTransition) {
|
|
460
|
+
issues.push({
|
|
461
|
+
file,
|
|
462
|
+
line: i + 1,
|
|
463
|
+
type: "chevron-rotate-no-transition",
|
|
464
|
+
severity: "info",
|
|
465
|
+
message: "Chevron rotation without smooth transition",
|
|
466
|
+
suggestion: "Add transition-transform duration-200 for smooth rotation",
|
|
467
|
+
snippet: line.trim().substring(0, 80),
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return {
|
|
474
|
+
name: "Icon State Animations",
|
|
475
|
+
passed: true,
|
|
476
|
+
blocking: false,
|
|
477
|
+
issues,
|
|
478
|
+
duration: Date.now() - startTime,
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* 6. List Item Animations
|
|
483
|
+
* Check for stagger/fade animations on list entries
|
|
484
|
+
*/
|
|
485
|
+
async checkListItemAnimations() {
|
|
486
|
+
const startTime = Date.now();
|
|
487
|
+
const issues = [];
|
|
488
|
+
const files = await this.getTsxFiles();
|
|
489
|
+
for (const file of files) {
|
|
490
|
+
const content = fs.readFileSync(file, "utf8");
|
|
491
|
+
const lines = content.split("\n");
|
|
492
|
+
for (let i = 0; i < lines.length; i++) {
|
|
493
|
+
const line = lines[i];
|
|
494
|
+
// Check for list mapping patterns
|
|
495
|
+
if (/\.map\s*\(\s*\(/.test(line)) {
|
|
496
|
+
const contextBlock = lines.slice(i, Math.min(i + 20, lines.length)).join("\n");
|
|
497
|
+
const isList = /list|items|results|data|rows/i.test(line);
|
|
498
|
+
const hasStagger = /stagger|delay.*index|style={{.*delay|animate-\[.*ms\]/.test(contextBlock);
|
|
499
|
+
const hasMotion = /motion\.|AnimatePresence|Transition/.test(contextBlock);
|
|
500
|
+
const hasOpacityIn = /animate-fadeIn|opacity.*0.*1|animate-in/.test(contextBlock);
|
|
501
|
+
// Check if it's rendering visual list items
|
|
502
|
+
const rendersCards = /<Card|<ListItem|<div.*className/i.test(contextBlock);
|
|
503
|
+
if (isList && rendersCards && !hasStagger && !hasMotion && !hasOpacityIn) {
|
|
504
|
+
// Only flag if it's a substantial list render
|
|
505
|
+
const hasKey = /key=/.test(contextBlock);
|
|
506
|
+
if (hasKey) {
|
|
507
|
+
issues.push({
|
|
508
|
+
file,
|
|
509
|
+
line: i + 1,
|
|
510
|
+
type: "list-no-animation",
|
|
511
|
+
severity: "info",
|
|
512
|
+
message: "List items render without entry animation",
|
|
513
|
+
suggestion: "Consider stagger animation or fade-in for polished feel",
|
|
514
|
+
snippet: line.trim().substring(0, 60),
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
// Check for framer-motion stagger patterns
|
|
520
|
+
if (/variants.*staggerChildren|stagger/i.test(line)) {
|
|
521
|
+
const contextBlock = lines.slice(i, Math.min(i + 10, lines.length)).join("\n");
|
|
522
|
+
const staggerMatch = contextBlock.match(/staggerChildren[:\s]+([0-9.]+)/);
|
|
523
|
+
if (staggerMatch) {
|
|
524
|
+
const delay = parseFloat(staggerMatch[1]);
|
|
525
|
+
if (delay > 0.2) {
|
|
526
|
+
issues.push({
|
|
527
|
+
file,
|
|
528
|
+
line: i + 1,
|
|
529
|
+
type: "stagger-too-slow",
|
|
530
|
+
severity: "info",
|
|
531
|
+
message: `Stagger delay ${delay}s may feel slow`,
|
|
532
|
+
suggestion: "Use 0.05-0.1s for snappy list animations",
|
|
533
|
+
snippet: line.trim().substring(0, 80),
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
return {
|
|
541
|
+
name: "List Item Animations",
|
|
542
|
+
passed: true,
|
|
543
|
+
blocking: false,
|
|
544
|
+
issues,
|
|
545
|
+
duration: Date.now() - startTime,
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* 7. Tab Switch Transitions
|
|
550
|
+
* Check for smooth tab indicator movement
|
|
551
|
+
*/
|
|
552
|
+
async checkTabSwitchTransitions() {
|
|
553
|
+
const startTime = Date.now();
|
|
554
|
+
const issues = [];
|
|
555
|
+
const files = await this.getTsxFiles();
|
|
556
|
+
for (const file of files) {
|
|
557
|
+
const content = fs.readFileSync(file, "utf8");
|
|
558
|
+
const lines = content.split("\n");
|
|
559
|
+
for (let i = 0; i < lines.length; i++) {
|
|
560
|
+
const line = lines[i];
|
|
561
|
+
// Check for tab components
|
|
562
|
+
if (/<Tabs|<TabsList|role=["']tablist/i.test(line)) {
|
|
563
|
+
const contextBlock = lines.slice(i, Math.min(i + 30, lines.length)).join("\n");
|
|
564
|
+
// Check for animated indicator
|
|
565
|
+
const hasIndicator = /indicator|underline|TabIndicator/.test(contextBlock);
|
|
566
|
+
const hasIndicatorAnimation = /motion|transition.*transform|animate-/.test(contextBlock);
|
|
567
|
+
const hasRadixAnimation = /data-\[state=/.test(contextBlock);
|
|
568
|
+
if (hasIndicator && !hasIndicatorAnimation && !hasRadixAnimation) {
|
|
569
|
+
issues.push({
|
|
570
|
+
file,
|
|
571
|
+
line: i + 1,
|
|
572
|
+
type: "tab-indicator-no-animation",
|
|
573
|
+
severity: "info",
|
|
574
|
+
message: "Tab indicator without sliding animation",
|
|
575
|
+
suggestion: "Add motion.div with layoutId or CSS transition for indicator",
|
|
576
|
+
snippet: line.trim().substring(0, 80),
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
// Check for tab content transitions
|
|
581
|
+
if (/<TabsContent|<TabPanel|role=["']tabpanel/i.test(line)) {
|
|
582
|
+
const contextBlock = lines.slice(i, Math.min(i + 15, lines.length)).join("\n");
|
|
583
|
+
const hasContentAnimation = /AnimatePresence|motion\.|animate-|Transition|fade/.test(contextBlock);
|
|
584
|
+
const hasRadixAnimation = /data-\[state=/.test(contextBlock);
|
|
585
|
+
if (!hasContentAnimation && !hasRadixAnimation) {
|
|
586
|
+
issues.push({
|
|
587
|
+
file,
|
|
588
|
+
line: i + 1,
|
|
589
|
+
type: "tab-content-no-animation",
|
|
590
|
+
severity: "info",
|
|
591
|
+
message: "Tab content without entry/exit animation",
|
|
592
|
+
suggestion: "Add fade or slide animation for tab content changes",
|
|
593
|
+
snippet: line.trim().substring(0, 80),
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
// Check for segmented control patterns
|
|
598
|
+
if (/segmented|SegmentedControl|ButtonGroup.*toggle/i.test(line)) {
|
|
599
|
+
const contextBlock = lines.slice(i, Math.min(i + 20, lines.length)).join("\n");
|
|
600
|
+
const hasBackgroundSlide = /motion|layoutId|transition.*left|transition.*transform/.test(contextBlock);
|
|
601
|
+
if (!hasBackgroundSlide) {
|
|
602
|
+
issues.push({
|
|
603
|
+
file,
|
|
604
|
+
line: i + 1,
|
|
605
|
+
type: "segmented-no-slide",
|
|
606
|
+
severity: "info",
|
|
607
|
+
message: "Segmented control without sliding background",
|
|
608
|
+
suggestion: "Add motion.div with layoutId for sliding selection indicator",
|
|
609
|
+
snippet: line.trim().substring(0, 80),
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
return {
|
|
616
|
+
name: "Tab Switch Transitions",
|
|
617
|
+
passed: true,
|
|
618
|
+
blocking: false,
|
|
619
|
+
issues,
|
|
620
|
+
duration: Date.now() - startTime,
|
|
621
|
+
};
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* 8. Tooltip Animations
|
|
625
|
+
* Check for smooth tooltip fade/scale
|
|
626
|
+
*/
|
|
627
|
+
async checkTooltipAnimations() {
|
|
628
|
+
const startTime = Date.now();
|
|
629
|
+
const issues = [];
|
|
630
|
+
const files = await this.getTsxFiles();
|
|
631
|
+
const tooltipAnimations = new Map();
|
|
632
|
+
for (const file of files) {
|
|
633
|
+
const content = fs.readFileSync(file, "utf8");
|
|
634
|
+
const lines = content.split("\n");
|
|
635
|
+
for (let i = 0; i < lines.length; i++) {
|
|
636
|
+
const line = lines[i];
|
|
637
|
+
// Check for Tooltip components
|
|
638
|
+
if (/<Tooltip|<TooltipContent|data-tooltip/i.test(line)) {
|
|
639
|
+
const contextBlock = lines.slice(i, Math.min(i + 15, lines.length)).join("\n");
|
|
640
|
+
const hasFade = /fade|opacity|animate-in|animate-fade/.test(contextBlock);
|
|
641
|
+
const hasScale = /scale|zoom/.test(contextBlock);
|
|
642
|
+
const hasSlide = /slide|translate/.test(contextBlock);
|
|
643
|
+
const hasRadixAnimation = /data-\[state=|data-\[side=/.test(contextBlock);
|
|
644
|
+
// Track animation patterns
|
|
645
|
+
if (hasFade)
|
|
646
|
+
tooltipAnimations.set("fade", (tooltipAnimations.get("fade") || 0) + 1);
|
|
647
|
+
if (hasScale)
|
|
648
|
+
tooltipAnimations.set("scale", (tooltipAnimations.get("scale") || 0) + 1);
|
|
649
|
+
if (hasSlide)
|
|
650
|
+
tooltipAnimations.set("slide", (tooltipAnimations.get("slide") || 0) + 1);
|
|
651
|
+
// Built-in Radix tooltips have good animations
|
|
652
|
+
if (!hasRadixAnimation && !hasFade && !hasScale && !hasSlide) {
|
|
653
|
+
issues.push({
|
|
654
|
+
file,
|
|
655
|
+
line: i + 1,
|
|
656
|
+
type: "tooltip-no-animation",
|
|
657
|
+
severity: "info",
|
|
658
|
+
message: "Tooltip without entry/exit animation",
|
|
659
|
+
suggestion: "Add fade-in scale-95 animation for polished tooltips",
|
|
660
|
+
snippet: line.trim().substring(0, 80),
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
// Check tooltip delay
|
|
664
|
+
const delayMatch = contextBlock.match(/delay[=:]\s*\{?\s*(\d+)/);
|
|
665
|
+
if (delayMatch) {
|
|
666
|
+
const delay = parseInt(delayMatch[1]);
|
|
667
|
+
if (delay > 700) {
|
|
668
|
+
issues.push({
|
|
669
|
+
file,
|
|
670
|
+
line: i + 1,
|
|
671
|
+
type: "tooltip-delay-too-long",
|
|
672
|
+
severity: "info",
|
|
673
|
+
message: `Tooltip delay ${delay}ms may feel unresponsive`,
|
|
674
|
+
suggestion: "Use 300-500ms delay for responsive tooltips",
|
|
675
|
+
snippet: line.trim().substring(0, 80),
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
if (delay < 100) {
|
|
679
|
+
issues.push({
|
|
680
|
+
file,
|
|
681
|
+
line: i + 1,
|
|
682
|
+
type: "tooltip-delay-too-short",
|
|
683
|
+
severity: "info",
|
|
684
|
+
message: `Tooltip delay ${delay}ms may be too eager`,
|
|
685
|
+
suggestion: "Use 200-400ms delay to avoid accidental triggers",
|
|
686
|
+
snippet: line.trim().substring(0, 80),
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
// Check for popover animations (similar pattern)
|
|
692
|
+
if (/<Popover|<PopoverContent/i.test(line)) {
|
|
693
|
+
const contextBlock = lines.slice(i, Math.min(i + 15, lines.length)).join("\n");
|
|
694
|
+
const hasAnimation = /animate-|motion|fade|scale|Transition/.test(contextBlock);
|
|
695
|
+
const hasRadixAnimation = /data-\[state=/.test(contextBlock);
|
|
696
|
+
if (!hasAnimation && !hasRadixAnimation) {
|
|
697
|
+
issues.push({
|
|
698
|
+
file,
|
|
699
|
+
line: i + 1,
|
|
700
|
+
type: "popover-no-animation",
|
|
701
|
+
severity: "info",
|
|
702
|
+
message: "Popover without entry animation",
|
|
703
|
+
suggestion: "Add fade-in and slight scale animation for popovers",
|
|
704
|
+
snippet: line.trim().substring(0, 80),
|
|
705
|
+
});
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
// Report mixed animation patterns
|
|
711
|
+
if (tooltipAnimations.size > 1) {
|
|
712
|
+
const sorted = [...tooltipAnimations.entries()].sort((a, b) => b[1] - a[1]);
|
|
713
|
+
issues.push({
|
|
714
|
+
file: "codebase-wide",
|
|
715
|
+
line: 0,
|
|
716
|
+
type: "mixed-tooltip-animations",
|
|
717
|
+
severity: "info",
|
|
718
|
+
message: `Multiple tooltip animation patterns`,
|
|
719
|
+
suggestion: `Consider standardizing. Usage: ${sorted.map(([p, c]) => `${p}(${c})`).join(", ")}`,
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
return {
|
|
723
|
+
name: "Tooltip Animations",
|
|
724
|
+
passed: true,
|
|
725
|
+
blocking: false,
|
|
726
|
+
issues,
|
|
727
|
+
duration: Date.now() - startTime,
|
|
728
|
+
};
|
|
729
|
+
}
|
|
730
|
+
/**
|
|
731
|
+
* Run all checks
|
|
732
|
+
*/
|
|
733
|
+
async runAll(filter) {
|
|
734
|
+
const startTime = Date.now();
|
|
735
|
+
const checks = [];
|
|
736
|
+
const checkMap = {
|
|
737
|
+
hover: () => this.checkHoverMicroAnimations(),
|
|
738
|
+
button: () => this.checkButtonPressFeedback(),
|
|
739
|
+
input: () => this.checkInputFocusAnimations(),
|
|
740
|
+
card: () => this.checkCardHoverLift(),
|
|
741
|
+
icon: () => this.checkIconStateAnimations(),
|
|
742
|
+
list: () => this.checkListItemAnimations(),
|
|
743
|
+
tab: () => this.checkTabSwitchTransitions(),
|
|
744
|
+
tooltip: () => this.checkTooltipAnimations(),
|
|
745
|
+
};
|
|
746
|
+
if (filter && checkMap[filter]) {
|
|
747
|
+
checks.push(await checkMap[filter]());
|
|
748
|
+
}
|
|
749
|
+
else {
|
|
750
|
+
for (const check of Object.values(checkMap)) {
|
|
751
|
+
checks.push(await check());
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
const errors = checks.reduce((sum, c) => sum + c.issues.filter((i) => i.severity === "error").length, 0);
|
|
755
|
+
const warnings = checks.reduce((sum, c) => sum + c.issues.filter((i) => i.severity === "warning").length, 0);
|
|
756
|
+
return {
|
|
757
|
+
module: "UI Micro-Interactions",
|
|
758
|
+
passed: errors === 0,
|
|
759
|
+
totalDuration: Date.now() - startTime,
|
|
760
|
+
checks,
|
|
761
|
+
summary: {
|
|
762
|
+
total: checks.length,
|
|
763
|
+
passed: checks.filter((c) => c.passed).length,
|
|
764
|
+
failed: checks.filter((c) => !c.passed).length,
|
|
765
|
+
errors,
|
|
766
|
+
warnings,
|
|
767
|
+
},
|
|
768
|
+
};
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
exports.UIMicroInteractionsModule = UIMicroInteractionsModule;
|
|
772
|
+
// CLI ENTRY POINT
|
|
773
|
+
async function main() {
|
|
774
|
+
const args = process.argv.slice(2);
|
|
775
|
+
const filter = args.find((a) => !a.startsWith("-"));
|
|
776
|
+
const verbose = args.includes("--verbose") || args.includes("-v");
|
|
777
|
+
const parallel = args.includes("--parallel") || args.includes("-p");
|
|
778
|
+
const reporter = (0, universal_progress_reporter_1.createUniversalProgressReporter)(path.basename(__filename, ".ts"));
|
|
779
|
+
const module = new UIMicroInteractionsModule({ verbose, parallel });
|
|
780
|
+
const result = await module.runAll(filter);
|
|
781
|
+
console.log((0, console_chars_1.createDivider)(80, "heavy"));
|
|
782
|
+
console.log(`${console_chars_1.emoji.lightning} UI MICRO-INTERACTIONS CHECK`);
|
|
783
|
+
console.log((0, console_chars_1.createDivider)(80, "heavy"));
|
|
784
|
+
console.log();
|
|
785
|
+
for (const check of result.checks) {
|
|
786
|
+
const icon = check.passed
|
|
787
|
+
? console_chars_1.emoji.success
|
|
788
|
+
: check.issues.some((i) => i.severity === "error")
|
|
789
|
+
? console_chars_1.emoji.error
|
|
790
|
+
: console_chars_1.emoji.warning;
|
|
791
|
+
console.log(`${icon} ${check.name} (${check.duration}ms)`);
|
|
792
|
+
if (check.issues.length > 0 && (verbose || check.issues.some((i) => i.severity !== "info"))) {
|
|
793
|
+
for (const issue of check.issues.slice(0, verbose ? 100 : 5)) {
|
|
794
|
+
const sevIcon = issue.severity === "error"
|
|
795
|
+
? console_chars_1.emoji.error
|
|
796
|
+
: issue.severity === "warning"
|
|
797
|
+
? console_chars_1.emoji.warning
|
|
798
|
+
: console_chars_1.emoji.info;
|
|
799
|
+
const relPath = path.relative(process.cwd(), issue.file).replace(/\\/g, "/");
|
|
800
|
+
console.log(` ${sevIcon} ${relPath}:${issue.line}`);
|
|
801
|
+
console.log(` ${issue.message}`);
|
|
802
|
+
console.log(` ${console_chars_1.emoji.hint} ${issue.suggestion}`);
|
|
803
|
+
}
|
|
804
|
+
if (!verbose && check.issues.length > 5) {
|
|
805
|
+
console.log(` ... and ${check.issues.length - 5} more issues`);
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
console.log();
|
|
809
|
+
}
|
|
810
|
+
console.log((0, console_chars_1.createDivider)(80, "light"));
|
|
811
|
+
console.log(`Total: ${result.summary.total} checks | ${console_chars_1.emoji.error} ${result.summary.errors} errors | ${console_chars_1.emoji.warning} ${result.summary.warnings} warnings`);
|
|
812
|
+
console.log(`Duration: ${(result.totalDuration / 1000).toFixed(2)}s`);
|
|
813
|
+
console.log((0, console_chars_1.createDivider)(80, "heavy"));
|
|
814
|
+
if (result.summary.errors > 0) {
|
|
815
|
+
console.log(`\n${console_chars_1.emoji.error} MICRO-INTERACTIONS CHECK FAILED\n`);
|
|
816
|
+
process.exit(1);
|
|
817
|
+
}
|
|
818
|
+
else {
|
|
819
|
+
console.log(`\n${console_chars_1.emoji.success} MICRO-INTERACTIONS CHECK PASSED\n`);
|
|
820
|
+
process.exit(0);
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
if (require.main === module)
|
|
824
|
+
main();
|
|
825
|
+
//# sourceMappingURL=ui-micro-interactions.js.map
|