Covers P0-1 through P0-10 CRO fixes and edge cases: - Rendering: plan cards, billing toggle, yearly discount (P0-1), popular visual dominance (P0-2), current plan badge (P0-5), loading state - Interaction: CTA labels (P0-3), order summary (P0-4), trial card hidden on trial status (P0-6), payment navigation, non-interactive plan - Trust & i18n: PostHog events (P0-10), i18n key usage (P0-9), trust i18n keys exist (P0-7, P0-8) - Edge cases: no subscription, expired, cancelled, empty state, full plan - Accessibility: button labels, non-clickable current plan, color - Subscription status: dates, brands, billing period, cancel button Also exports SubscriptionPage for testability and relaxes test lint rules (noNonNullAssertion, noForEach, useButtonType) in biome.json. 47/47 tests passing.
108 lines
2.1 KiB
JSON
108 lines
2.1 KiB
JSON
{
|
|
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
|
|
"organizeImports": {
|
|
"enabled": true
|
|
},
|
|
"linter": {
|
|
"enabled": true,
|
|
"rules": {
|
|
"recommended": true
|
|
}
|
|
},
|
|
"overrides": [
|
|
{
|
|
"include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx"],
|
|
"linter": {
|
|
"rules": {
|
|
"suspicious": {
|
|
"noExplicitAny": "off"
|
|
},
|
|
"style": {
|
|
"noNonNullAssertion": "off"
|
|
},
|
|
"complexity": {
|
|
"noForEach": "off"
|
|
},
|
|
"a11y": {
|
|
"useButtonType": "off"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"include": [
|
|
"**/src/catalog/**",
|
|
"**/src/categories/**",
|
|
"**/src/integrations/**",
|
|
"**/src/components/**",
|
|
"**/src/routes/**"
|
|
],
|
|
"linter": {
|
|
"rules": {
|
|
"suspicious": {
|
|
"noExplicitAny": "off"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"include": ["apps/api/**"],
|
|
"linter": {
|
|
"rules": {
|
|
"style": {
|
|
"useImportType": "off"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"include": [
|
|
"**/dashboard/catalog_/**",
|
|
"**/dashboard/service-test.tsx"
|
|
],
|
|
"linter": {
|
|
"rules": {
|
|
"suspicious": {
|
|
"noArrayIndexKey": "off"
|
|
},
|
|
"correctness": {
|
|
"useExhaustiveDependencies": "off"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"include": [
|
|
"**/catalog/emex-catalog.service.ts",
|
|
"**/catalog/pcat-catalog.service.ts"
|
|
],
|
|
"linter": {
|
|
"rules": {
|
|
"style": {
|
|
"noNonNullAssertion": "off"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"formatter": {
|
|
"enabled": true,
|
|
"indentStyle": "space",
|
|
"indentWidth": 2,
|
|
"lineWidth": 100
|
|
},
|
|
"javascript": {
|
|
"parser": {
|
|
"unsafeParameterDecoratorsEnabled": true
|
|
},
|
|
"formatter": {
|
|
"quoteStyle": "double",
|
|
"semicolons": "always",
|
|
"trailingCommas": "all"
|
|
}
|
|
},
|
|
"files": {
|
|
"ignore": ["node_modules", "dist", ".next", "*.min.js", "**/*.gen.ts"]
|
|
}
|
|
}
|