Skip to content

[Feature] PaymentSheet Appearance API: Support disabled CTA styling #13821

Description

@initishbhatt

Is your feature request related to a problem? Please describe.

When a customer opens PaymentSheet and leaves the card form empty or incomplete, the primary CTA is correctly disabled from a payment-validation perspective.

However, PaymentSheet.PrimaryButtonColors.background is used for both the enabled and disabled states. Stripe only dims the button label and lock icon, while the background keeps the active primary color.

This makes the disabled CTA look enabled and does not provide a clear disabled state that matches our design system.

Describe the solution you'd like

Please expose separate appearance options for the disabled primary CTA state in PaymentSheet.PrimaryButtonColors, for example:

  • disabledBackground
  • onDisabledBackground
  • disabledBorder

These values should be applied whenever the primary CTA is disabled because the card form is incomplete or invalid.

This would let integrators keep Stripe’s built-in validation behavior while making the disabled state visually clear and aligned with their product design.

Describe alternatives you've considered

We considered using the existing background, onBackground, and border appearance options. These affect the enabled CTA as well, so they cannot create a distinct disabled state.

We also considered relying on Stripe’s default label and icon opacity change, but this is too subtle because the button background still looks active.

The remaining alternatives are to build a custom payment form or fork Stripe’s SDK. Both remove the benefits of using Stripe’s prebuilt PaymentSheet and add significant maintenance effort.

Additional context

This is observed in the Android PaymentSheet using stripe-android:23.7.0 and the FlowController flow.

Reproduction steps:

  1. Configure PaymentSheet with a custom PaymentSheet.PrimaryButtonColors.background.
  2. Open the PaymentSheet and select Card.
  3. Leave all card fields empty or incomplete.
  4. Observe that the CTA is disabled, but it retains the configured enabled-state background color.

A separate disabled background and foreground color would make the state clearer for customers and improve consistency with app design systems.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions