From ba81115dbe9430afe6a5913c67589d2282291833 Mon Sep 17 00:00:00 2001 From: David Estes Date: Mon, 12 Jan 2026 14:02:52 -0800 Subject: [PATCH 1/2] Copy PaymentSheet images --- .../Cards/ps_card_amex.imageset/Contents.json | 15 ++ .../ps_card_amex.imageset/icon-card-amex.svg | 9 ++ .../Contents.json | 15 ++ .../icon-card-cartebancaire.svg | 16 ++ .../Cards/ps_card_cvc.imageset/Contents.json | 25 +++ .../Cards/ps_card_cvc.imageset/cvcDark.svg | 12 ++ .../Cards/ps_card_cvc.imageset/cvcLight.svg | 12 ++ .../ps_card_cvc_amex.imageset/Contents.json | 25 +++ .../ps_card_cvc_amex.imageset/cvcAmexDark.svg | 12 ++ .../cvcAmexLight.svg | 12 ++ .../ps_card_diners.imageset/Contents.json | 15 ++ .../icon-card-diners-club.svg | 6 + .../ps_card_discover.imageset/Contents.json | 15 ++ .../icon-card-discover.svg | 7 + .../Cards/ps_card_jcb.imageset/Contents.json | 15 ++ .../ps_card_jcb.imageset/icon-card-jcb.svg | 8 + .../ps_card_mastercard.imageset/Contents.json | 15 ++ .../icon-card-mastercard.svg | 6 + .../ps_card_unionpay.imageset/Contents.json | 15 ++ .../icon-card-unionpay.svg | 6 + .../ps_card_unknown.imageset/Contents.json | 25 +++ .../ps_card_unknown.imageset/cardDark.svg | 4 + .../ps_card_unknown.imageset/cardLight.svg | 4 + .../Cards/ps_card_visa.imageset/Contents.json | 15 ++ .../ps_card_visa.imageset/icon-card-visa.svg | 5 + .../Contents.json | 12 ++ .../stp_card_unpadded_amex.svg | 9 ++ .../Contents.json | 12 ++ .../cartesBancairesNoPadding.svg | 16 ++ .../Contents.json | 12 ++ .../stp_card_unpadded_diners_club.svg | 6 + .../Contents.json | 12 ++ .../stp_card_unpadded_discover.svg | 7 + .../Contents.json | 12 ++ .../stp_card_unpadded_jcb.svg | 8 + .../Contents.json | 12 ++ .../stp_card_unpadded_mastercard.svg | 6 + .../Contents.json | 12 ++ .../stp_card_unpadded_unionpay.svg | 6 + .../Contents.json | 12 ++ .../visaNoPadding.svg | 5 + .../link_bank_icon.imageset}/Contents.json | 0 .../stp_icon_bank_link.svg | 0 .../DynamicImageView+Unknown.swift | 2 +- .../Source/Helpers/Images.swift | 3 +- ...y.swift => PaymentSheetImageLibrary.swift} | 95 +++++++++--- .../TextField/TextFieldElement+Card.swift | 4 +- .../PaymentSheet/Link/LinkController.swift | 3 +- .../PaymentSheet/PaymentOption+Images.swift | 7 +- .../Views/PayWithLinkButton.swift | 5 +- .../Views/RotatingCardBrandsView.swift | 7 +- .../LinkPaymentMethodPreview.swift | 3 +- .../PaymentSheetImageLibraryTest.swift | 143 ++++++++++++++++++ .../Source/Helpers/STPImageLibrary.swift | 4 - 54 files changed, 707 insertions(+), 42 deletions(-) create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_amex.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_amex.imageset/icon-card-amex.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cartes_bancaires.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cartes_bancaires.imageset/icon-card-cartebancaire.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/cvcDark.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/cvcLight.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/cvcAmexDark.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/cvcAmexLight.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_diners.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_diners.imageset/icon-card-diners-club.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_discover.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_discover.imageset/icon-card-discover.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_jcb.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_jcb.imageset/icon-card-jcb.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_mastercard.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_mastercard.imageset/icon-card-mastercard.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unionpay.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unionpay.imageset/icon-card-unionpay.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/cardDark.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/cardLight.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_visa.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_visa.imageset/icon-card-visa.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_amex.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_amex.imageset/stp_card_unpadded_amex.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_cartes_bancaires.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_cartes_bancaires.imageset/cartesBancairesNoPadding.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_diners_club.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_diners_club.imageset/stp_card_unpadded_diners_club.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_discover.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_discover.imageset/stp_card_unpadded_discover.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_jcb.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_jcb.imageset/stp_card_unpadded_jcb.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_mastercard.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_mastercard.imageset/stp_card_unpadded_mastercard.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_unionpay.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_unionpay.imageset/stp_card_unpadded_unionpay.svg create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_visa.imageset/Contents.json create mode 100644 StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_visa.imageset/visaNoPadding.svg rename {StripePaymentsUI/StripePaymentsUI/Resources/StripePaymentsUI.xcassets/stp_icon_bank_link.imageset => StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Link/link_bank_icon.imageset}/Contents.json (100%) rename {StripePaymentsUI/StripePaymentsUI/Resources/StripePaymentsUI.xcassets/stp_icon_bank_link.imageset => StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Link/link_bank_icon.imageset}/stp_icon_bank_link.svg (100%) rename {StripePaymentsUI/StripePaymentsUI/Source/Internal/UI/Views => StripePaymentSheet/StripePaymentSheet/Source/Categories}/DynamicImageView+Unknown.swift (84%) rename StripePaymentSheet/StripePaymentSheet/Source/Helpers/{STPImageLibrary.swift => PaymentSheetImageLibrary.swift} (56%) create mode 100644 StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetImageLibraryTest.swift diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_amex.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_amex.imageset/Contents.json new file mode 100644 index 000000000000..d8e252d1ed51 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_amex.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-card-amex.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_amex.imageset/icon-card-amex.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_amex.imageset/icon-card-amex.svg new file mode 100644 index 000000000000..67b9388e390d --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_amex.imageset/icon-card-amex.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cartes_bancaires.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cartes_bancaires.imageset/Contents.json new file mode 100644 index 000000000000..a778c159c38f --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cartes_bancaires.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-card-cartebancaire.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cartes_bancaires.imageset/icon-card-cartebancaire.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cartes_bancaires.imageset/icon-card-cartebancaire.svg new file mode 100644 index 000000000000..b9826ed99fc6 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cartes_bancaires.imageset/icon-card-cartebancaire.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/Contents.json new file mode 100644 index 000000000000..0a381cb8bab3 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "filename" : "cvcLight.svg", + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "cvcDark.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/cvcDark.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/cvcDark.svg new file mode 100644 index 000000000000..2bbf2097e2c8 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/cvcDark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/cvcLight.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/cvcLight.svg new file mode 100644 index 000000000000..e307ccc47a2e --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc.imageset/cvcLight.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/Contents.json new file mode 100644 index 000000000000..9603c7bb04cb --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "filename" : "cvcAmexLight.svg", + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "cvcAmexDark.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/cvcAmexDark.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/cvcAmexDark.svg new file mode 100644 index 000000000000..aead2435d2e5 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/cvcAmexDark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/cvcAmexLight.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/cvcAmexLight.svg new file mode 100644 index 000000000000..812aed3eb4dc --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_cvc_amex.imageset/cvcAmexLight.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_diners.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_diners.imageset/Contents.json new file mode 100644 index 000000000000..afbe0ac7e24b --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_diners.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-card-diners-club.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_diners.imageset/icon-card-diners-club.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_diners.imageset/icon-card-diners-club.svg new file mode 100644 index 000000000000..1ced17fa6d7d --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_diners.imageset/icon-card-diners-club.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_discover.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_discover.imageset/Contents.json new file mode 100644 index 000000000000..4d0af2911d5e --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_discover.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-card-discover.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_discover.imageset/icon-card-discover.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_discover.imageset/icon-card-discover.svg new file mode 100644 index 000000000000..9e147c337880 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_discover.imageset/icon-card-discover.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_jcb.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_jcb.imageset/Contents.json new file mode 100644 index 000000000000..8ff2a092eb76 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_jcb.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-card-jcb.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_jcb.imageset/icon-card-jcb.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_jcb.imageset/icon-card-jcb.svg new file mode 100644 index 000000000000..f3a00151c922 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_jcb.imageset/icon-card-jcb.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_mastercard.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_mastercard.imageset/Contents.json new file mode 100644 index 000000000000..f3a47bcca208 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_mastercard.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-card-mastercard.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_mastercard.imageset/icon-card-mastercard.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_mastercard.imageset/icon-card-mastercard.svg new file mode 100644 index 000000000000..fb6867aab74a --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_mastercard.imageset/icon-card-mastercard.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unionpay.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unionpay.imageset/Contents.json new file mode 100644 index 000000000000..474d2bd8750f --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unionpay.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-card-unionpay.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unionpay.imageset/icon-card-unionpay.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unionpay.imageset/icon-card-unionpay.svg new file mode 100644 index 000000000000..87ac638c1da2 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unionpay.imageset/icon-card-unionpay.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/Contents.json new file mode 100644 index 000000000000..3b577c093300 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "filename" : "cardLight.svg", + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "cardDark.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/cardDark.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/cardDark.svg new file mode 100644 index 000000000000..e1562e81ef1e --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/cardDark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/cardLight.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/cardLight.svg new file mode 100644 index 000000000000..68b3f27cf2b0 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_unknown.imageset/cardLight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_visa.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_visa.imageset/Contents.json new file mode 100644 index 000000000000..49b9119f1fb0 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_visa.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-card-visa.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_visa.imageset/icon-card-visa.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_visa.imageset/icon-card-visa.svg new file mode 100644 index 000000000000..0246dda3b66e --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Cards/ps_card_visa.imageset/icon-card-visa.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_amex.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_amex.imageset/Contents.json new file mode 100644 index 000000000000..73addc46fd8c --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_amex.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "stp_card_unpadded_amex.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_amex.imageset/stp_card_unpadded_amex.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_amex.imageset/stp_card_unpadded_amex.svg new file mode 100644 index 000000000000..b0c4f9f578dc --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_amex.imageset/stp_card_unpadded_amex.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_cartes_bancaires.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_cartes_bancaires.imageset/Contents.json new file mode 100644 index 000000000000..a414e0cf32d6 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_cartes_bancaires.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "cartesBancairesNoPadding.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_cartes_bancaires.imageset/cartesBancairesNoPadding.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_cartes_bancaires.imageset/cartesBancairesNoPadding.svg new file mode 100644 index 000000000000..46344a7bf64f --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_cartes_bancaires.imageset/cartesBancairesNoPadding.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_diners_club.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_diners_club.imageset/Contents.json new file mode 100644 index 000000000000..56a807fb2c31 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_diners_club.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "stp_card_unpadded_diners_club.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_diners_club.imageset/stp_card_unpadded_diners_club.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_diners_club.imageset/stp_card_unpadded_diners_club.svg new file mode 100644 index 000000000000..60d66a78b4c1 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_diners_club.imageset/stp_card_unpadded_diners_club.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_discover.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_discover.imageset/Contents.json new file mode 100644 index 000000000000..86c562062428 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_discover.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "stp_card_unpadded_discover.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_discover.imageset/stp_card_unpadded_discover.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_discover.imageset/stp_card_unpadded_discover.svg new file mode 100644 index 000000000000..969683b3a374 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_discover.imageset/stp_card_unpadded_discover.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_jcb.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_jcb.imageset/Contents.json new file mode 100644 index 000000000000..0fe11ac19c36 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_jcb.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "stp_card_unpadded_jcb.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_jcb.imageset/stp_card_unpadded_jcb.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_jcb.imageset/stp_card_unpadded_jcb.svg new file mode 100644 index 000000000000..96338fe55220 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_jcb.imageset/stp_card_unpadded_jcb.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_mastercard.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_mastercard.imageset/Contents.json new file mode 100644 index 000000000000..c2ec419d3106 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_mastercard.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "stp_card_unpadded_mastercard.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_mastercard.imageset/stp_card_unpadded_mastercard.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_mastercard.imageset/stp_card_unpadded_mastercard.svg new file mode 100644 index 000000000000..8216e4d46818 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_mastercard.imageset/stp_card_unpadded_mastercard.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_unionpay.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_unionpay.imageset/Contents.json new file mode 100644 index 000000000000..2c948dd4b075 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_unionpay.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "stp_card_unpadded_unionpay.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_unionpay.imageset/stp_card_unpadded_unionpay.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_unionpay.imageset/stp_card_unpadded_unionpay.svg new file mode 100644 index 000000000000..b85f035d1b97 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_unionpay.imageset/stp_card_unpadded_unionpay.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_visa.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_visa.imageset/Contents.json new file mode 100644 index 000000000000..4cf2424baf84 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_visa.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "visaNoPadding.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_visa.imageset/visaNoPadding.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_visa.imageset/visaNoPadding.svg new file mode 100644 index 000000000000..88f1ebd76497 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/CardsNoPadding/ps_card_unpadded_visa.imageset/visaNoPadding.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/StripePaymentsUI/StripePaymentsUI/Resources/StripePaymentsUI.xcassets/stp_icon_bank_link.imageset/Contents.json b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Link/link_bank_icon.imageset/Contents.json similarity index 100% rename from StripePaymentsUI/StripePaymentsUI/Resources/StripePaymentsUI.xcassets/stp_icon_bank_link.imageset/Contents.json rename to StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Link/link_bank_icon.imageset/Contents.json diff --git a/StripePaymentsUI/StripePaymentsUI/Resources/StripePaymentsUI.xcassets/stp_icon_bank_link.imageset/stp_icon_bank_link.svg b/StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Link/link_bank_icon.imageset/stp_icon_bank_link.svg similarity index 100% rename from StripePaymentsUI/StripePaymentsUI/Resources/StripePaymentsUI.xcassets/stp_icon_bank_link.imageset/stp_icon_bank_link.svg rename to StripePaymentSheet/StripePaymentSheet/Resources/StripePaymentSheet.xcassets/Link/link_bank_icon.imageset/stp_icon_bank_link.svg diff --git a/StripePaymentsUI/StripePaymentsUI/Source/Internal/UI/Views/DynamicImageView+Unknown.swift b/StripePaymentSheet/StripePaymentSheet/Source/Categories/DynamicImageView+Unknown.swift similarity index 84% rename from StripePaymentsUI/StripePaymentsUI/Source/Internal/UI/Views/DynamicImageView+Unknown.swift rename to StripePaymentSheet/StripePaymentSheet/Source/Categories/DynamicImageView+Unknown.swift index f2eaab82a599..df20030853d3 100644 --- a/StripePaymentsUI/StripePaymentsUI/Source/Internal/UI/Views/DynamicImageView+Unknown.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Categories/DynamicImageView+Unknown.swift @@ -11,7 +11,7 @@ import Foundation @_spi(STP) public extension DynamicImageView { static func makeUnknownCardImageView(theme: ElementsAppearance) -> DynamicImageView { return DynamicImageView( - dynamicImage: STPImageLibrary.unknownCardCardImage(), + dynamicImage: PaymentSheetImageLibrary.unknownCardCardImage(), pairedColor: theme.colors.componentBackground ) } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Helpers/Images.swift b/StripePaymentSheet/StripePaymentSheet/Source/Helpers/Images.swift index 70a9d5604af8..de90aadbc4bb 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Helpers/Images.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Helpers/Images.swift @@ -9,8 +9,6 @@ import Foundation @_spi(STP) import StripeUICore -// TODO(yuki|https://jira.corp.stripe.com/browse/MOBILESDK-309): Refactor STPImageLibrary's images to live here as well - /// The canonical set of all image files in the SDK. /// This helps us avoid duplicates and automatically test that all images load properly /// Raw value is the image file name. We use snake case to make long names easier to read. @@ -74,6 +72,7 @@ enum Image: String, CaseIterable, ImageMaker { case link_logo_knockout = "link_logo_knockout" case link_icon = "link_icon" case link_logo_tintable = "link_logo_tintable" + case link_bank_icon = "link_bank_icon" // ShopPay case shoppay_logo_bw = "shoppay_logo_bw" diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Helpers/STPImageLibrary.swift b/StripePaymentSheet/StripePaymentSheet/Source/Helpers/PaymentSheetImageLibrary.swift similarity index 56% rename from StripePaymentSheet/StripePaymentSheet/Source/Helpers/STPImageLibrary.swift rename to StripePaymentSheet/StripePaymentSheet/Source/Helpers/PaymentSheetImageLibrary.swift index 6478060219e3..4ad7bb1da326 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Helpers/STPImageLibrary.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Helpers/PaymentSheetImageLibrary.swift @@ -1,23 +1,18 @@ // -// STPImageLibrary.swift +// PaymentSheetImageLibrary.swift // StripePaymentSheet // -// Created by David Estes on 7/6/22. -// Copyright © 2022 Stripe, Inc. All rights reserved. -// import Foundation @_spi(STP) import StripeCore -@_spi(STP) import StripePaymentsUI +@_spi(STP) import StripePayments @_spi(STP) import StripeUICore import UIKit -@_spi(STP) -public class PaymentSheetImageLibrary { +class PaymentSheetImageLibrary { /// An icon representing Afterpay. - @objc - public class func afterpayLogo(currency: String? = nil) -> UIImage { + class func afterpayLogo(currency: String? = nil) -> UIImage { if AfterpayPriceBreakdownView.shouldUseClearpayBrand(for: currency) { return self.safeImageNamed("clearpay_mark", templateIfAvailable: true) } else if AfterpayPriceBreakdownView.shouldUseCashAppBrand(for: currency) { @@ -28,8 +23,7 @@ public class PaymentSheetImageLibrary { } /// This returns the appropriate icon for the affirm logo - @objc - public class func affirmLogo() -> UIImage { + class func affirmLogo() -> UIImage { return Image.affirm_copy.makeImage() } @@ -50,8 +44,7 @@ public class PaymentSheetImageLibrary { "wellsfargo": [#"Wells Fargo"#], ] - @_spi(STP) - public class func bankIconCode(for bankName: String?) -> String { + class func bankIconCode(for bankName: String?) -> String { guard let bankName = bankName else { return "default" } @@ -65,8 +58,7 @@ public class PaymentSheetImageLibrary { return "default" } - @_spi(STP) @_spi(AppearanceAPIAdditionsPreview) - public class func bankIcon(for bank: String?, iconStyle: PaymentSheet.Appearance.IconStyle) -> UIImage { + class func bankIcon(for bank: String?, iconStyle: PaymentSheet.Appearance.IconStyle) -> UIImage { guard let bank = bank else { return STPPaymentMethodType.USBankAccount.makeImage(iconStyle: iconStyle) ?? UIImage() } @@ -89,7 +81,74 @@ public class PaymentSheetImageLibrary { } class func linkBankIcon() -> UIImage { - STPImageLibrary.linkBankIcon() + return Image.link_bank_icon.makeImage(template: true) + } + + // MARK: - Card Brand Images + + /// This returns the appropriate icon for the specified card brand. + class func cardBrandImage(for brand: STPCardBrand) -> UIImage { + let imageName: String + switch brand { + case .amex: + imageName = "ps_card_amex" + case .dinersClub: + imageName = "ps_card_diners" + case .discover: + imageName = "ps_card_discover" + case .JCB: + imageName = "ps_card_jcb" + case .mastercard: + imageName = "ps_card_mastercard" + case .unionPay: + imageName = "ps_card_unionpay" + case .cartesBancaires: + imageName = "ps_card_cartes_bancaires" + case .visa: + imageName = "ps_card_visa" + case .unknown: + imageName = "ps_card_unknown" + @unknown default: + imageName = "ps_card_unknown" + } + return safeImageNamed(imageName) + } + + /// This returns an unpadded image for the specified card brand if available. + class func unpaddedCardBrandImage(for brand: STPCardBrand) -> UIImage { + switch brand { + case .cartesBancaires: + return safeImageNamed("ps_card_unpadded_cartes_bancaires") + case .visa: + return safeImageNamed("ps_card_unpadded_visa") + case .amex: + return safeImageNamed("ps_card_unpadded_amex") + case .mastercard: + return safeImageNamed("ps_card_unpadded_mastercard") + case .dinersClub: + return safeImageNamed("ps_card_unpadded_diners_club") + case .unionPay: + return safeImageNamed("ps_card_unpadded_unionpay") + case .discover: + return safeImageNamed("ps_card_unpadded_discover") + case .JCB: + return safeImageNamed("ps_card_unpadded_jcb") + case .unknown: + return cardBrandImage(for: brand) + @unknown default: + return cardBrandImage(for: brand) + } + } + + /// This returns a small icon indicating the CVC location for the given card brand. + class func cvcImage(for brand: STPCardBrand) -> UIImage { + let imageName = brand == .amex ? "ps_card_cvc_amex" : "ps_card_cvc" + return safeImageNamed(imageName) + } + + /// An icon to use when the type of the card is unknown. + class func unknownCardCardImage() -> UIImage { + return cardBrandImage(for: .unknown) } } @@ -130,6 +189,6 @@ extension STPCardBrand { // MARK: - ImageMaker // :nodoc: -@_spi(STP) extension PaymentSheetImageLibrary: ImageMaker { - @_spi(STP) public typealias BundleLocator = StripePaymentSheetBundleLocator +extension PaymentSheetImageLibrary: ImageMaker { + typealias BundleLocator = StripePaymentSheetBundleLocator } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Elements/TextField/TextFieldElement+Card.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Elements/TextField/TextFieldElement+Card.swift index c564924b0879..b4d35987b0f8 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Elements/TextField/TextFieldElement+Card.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Elements/TextField/TextFieldElement+Card.swift @@ -255,7 +255,7 @@ extension TextFieldElement { } func accessoryView(for text: String, theme: ElementsAppearance) -> UIView? { return DynamicImageView( - dynamicImage: STPImageLibrary.cvcImage(for: cardBrandProvider()), + dynamicImage: PaymentSheetImageLibrary.cvcImage(for: cardBrandProvider()), pairedColor: theme.colors.componentBackground ) } @@ -278,7 +278,7 @@ extension TextFieldElement { let disallowedCharacters: CharacterSet = CharacterSet(charactersIn: "•").inverted func accessoryView(for text: String, theme: ElementsAppearance) -> UIView? { return DynamicImageView( - dynamicImage: STPImageLibrary.cvcImage(for: brand), + dynamicImage: PaymentSheetImageLibrary.cvcImage(for: brand), pairedColor: theme.colors.componentBackground ) } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Link/LinkController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Link/LinkController.swift index 02fe96f8c654..3c86be66cb7b 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Link/LinkController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Link/LinkController.swift @@ -10,7 +10,6 @@ import UIKit @_spi(STP) import StripeCore @_spi(STP) import StripePayments -@_spi(STP) import StripePaymentsUI @_spi(STP) import StripeUICore /// A controller that presents a Link sheet to collect a customer's payment method. @@ -158,7 +157,7 @@ import UIKit switch paymentDetails.details { case .card(let card): - return STPImageLibrary.cardBrandImage(for: card.stpBrand) + return PaymentSheetImageLibrary.cardBrandImage(for: card.stpBrand) case .bankAccount(let bankAccount): let iconCode = PaymentSheetImageLibrary.bankIconCode(for: bankAccount.name) return PaymentSheetImageLibrary.bankIcon(for: iconCode, iconStyle: .filled) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentOption+Images.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentOption+Images.swift index 6b71cfab06d8..e4dcd33d5da2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentOption+Images.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentOption+Images.swift @@ -8,7 +8,6 @@ @_spi(STP) import StripeCore @_spi(STP) import StripePayments -@_spi(STP) import StripePaymentsUI @_spi(STP) import StripeUICore import UIKit @@ -82,7 +81,7 @@ extension STPPaymentMethod { case .card: return (isLinkPaymentMethod || isLinkPassthroughMode) ? Image.link_icon.makeImage() - : STPImageLibrary.cardBrandImage(for: calculateCardBrandToDisplay()) + : PaymentSheetImageLibrary.cardBrandImage(for: calculateCardBrandToDisplay()) case .USBankAccount: return isLinkPassthroughMode ? Image.link_icon.makeImage() @@ -131,7 +130,7 @@ extension STPPaymentMethod { case .card: return (isLinkPaymentMethod || isLinkPassthroughMode) ? Image.link_icon.makeImage() - : STPImageLibrary.unpaddedCardBrandImage(for: calculateCardBrandToDisplay()) + : PaymentSheetImageLibrary.unpaddedCardBrandImage(for: calculateCardBrandToDisplay()) case .USBankAccount: return isLinkPassthroughMode ? Image.link_icon.makeImage() @@ -152,7 +151,7 @@ extension STPPaymentMethod { switch type { case .card: let brand = STPCardValidator.brand(for: card) - return STPImageLibrary.cardBrandImage(for: brand) + return PaymentSheetImageLibrary.cardBrandImage(for: brand) default: // If there's no image specific to this PaymentMethod (eg card network logo, bank logo), default to the PaymentMethod type's icon // TODO: Refactor this out of PaymentMethodType. Users shouldn't have to convert STPPaymentMethodType to PaymentMethodType in order to get its image. diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/PayWithLinkButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/PayWithLinkButton.swift index e9f07cff45f9..5efe35eb26b5 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/PayWithLinkButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/PayWithLinkButton.swift @@ -10,7 +10,6 @@ import UIKit @_spi(STP) import StripeCore @_spi(STP) import StripePayments -@_spi(STP) import StripePaymentsUI @_spi(STP) import StripeUICore /// A button for paying with Link. @@ -167,7 +166,7 @@ final class PayWithLinkButton: UIControl { private lazy var cardBrandSeparatorView: UIView = Self.makeSeparatorView() private lazy var cardBrandView: UIImageView = { - let brandView = UIImageView(image: STPImageLibrary.unknownCardCardImage()) + let brandView = UIImageView(image: PaymentSheetImageLibrary.unknownCardCardImage()) brandView.translatesAutoresizingMaskIntoConstraints = false brandView.contentMode = .scaleAspectFill @@ -314,7 +313,7 @@ private extension PayWithLinkButton { func updateUI() { switch linkAccountState { case .hasCard(let last4, let brand): - let cardImage = STPImageLibrary.cardBrandImage(for: brand) + let cardImage = PaymentSheetImageLibrary.cardBrandImage(for: brand) .withAlignmentRectInsets( Constants.cardBrandInsets ) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/RotatingCardBrandsView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/RotatingCardBrandsView.swift index bf77c7e7ad7b..c37d078e93e5 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/RotatingCardBrandsView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/RotatingCardBrandsView.swift @@ -9,7 +9,6 @@ import UIKit @_spi(STP) import StripePayments -@_spi(STP) import StripePaymentsUI @_spi(STP) import StripeUICore /// A view that displays a horizontal collection of card brand images. @@ -92,7 +91,7 @@ class RotatingCardBrandsView: UIView { stopAnimating() } else { rotatingCardBrandView.setHiddenIfNecessary(false) - rotatingCardBrandView.image = STPImageLibrary.cardBrandImage( + rotatingCardBrandView.image = PaymentSheetImageLibrary.cardBrandImage( for: rotatingCardBrands[0] ) rotatingIndex = 0 @@ -120,7 +119,7 @@ class RotatingCardBrandsView: UIView { duration: Self.AnimationDuration, options: [.transitionCrossDissolve], animations: { - self.rotatingCardBrandView.image = STPImageLibrary.cardBrandImage(for: self.rotatingCardBrands[nextIndex]) + self.rotatingCardBrandView.image = PaymentSheetImageLibrary.cardBrandImage(for: self.rotatingCardBrands[nextIndex]) }) } @@ -170,7 +169,7 @@ class RotatingCardBrandsView: UIView { let imageView = UIImageView() imageView.contentMode = .scaleAspectFit imageView.setContentHuggingPriority(.required, for: .horizontal) - imageView.image = STPImageLibrary.cardBrandImage(for: brand) + imageView.image = PaymentSheetImageLibrary.cardBrandImage(for: brand) return imageView }) + [rotatingCardBrandView] rotatingCardBrands = Array(cardBrands.suffix(from: min(cardBrands.count, Self.MaxStaticBrands))) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/WalletButtonsView/LinkPaymentMethodPreview.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/WalletButtonsView/LinkPaymentMethodPreview.swift index 3b4a481ebd97..77d3d08d9552 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/WalletButtonsView/LinkPaymentMethodPreview.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/WalletButtonsView/LinkPaymentMethodPreview.swift @@ -5,7 +5,6 @@ // Created by Mat Schmid on 7/29/25. // -@_spi(STP) import StripePaymentsUI import UIKit struct LinkPaymentMethodPreview { @@ -33,7 +32,7 @@ struct LinkPaymentMethodPreview { return nil } let cardBrand = STPCard.brand(from: brand) - let icon = STPImageLibrary.unpaddedCardBrandImage(for: cardBrand) + let icon = PaymentSheetImageLibrary.unpaddedCardBrandImage(for: cardBrand) self.init(icon: icon, last4: last4) case .bankAccount: let bankIconCode = PaymentSheetImageLibrary.bankIconCode(for: nil) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetImageLibraryTest.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetImageLibraryTest.swift new file mode 100644 index 000000000000..cec5914769f3 --- /dev/null +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetImageLibraryTest.swift @@ -0,0 +1,143 @@ +// +// PaymentSheetImageLibraryTest.swift +// StripePaymentSheetTests +// + +@testable @_spi(STP) import StripePaymentSheet +@testable @_spi(STP) import StripePayments +@testable @_spi(STP) import StripeUICore +import XCTest + +final class PaymentSheetImageLibraryTest: XCTestCase { + + static let cardBrands: [STPCardBrand] = [ + .amex, + .cartesBancaires, + .dinersClub, + .discover, + .JCB, + .mastercard, + .unionPay, + .unknown, + .visa, + ] + + func testCardBrandImageForAllBrands() { + for brand in Self.cardBrands { + let image = PaymentSheetImageLibrary.cardBrandImage(for: brand) + XCTAssert(image.size != .zero, "Missing image for card brand: \(brand)") + } + } + + func testCardBrandImageReturnsCorrectImages() { + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .visa).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_visa").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .amex).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_amex").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .mastercard).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_mastercard").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .discover).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_discover").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .JCB).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_jcb").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .dinersClub).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_diners").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .unionPay).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unionpay").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .cartesBancaires).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_cartes_bancaires").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.cardBrandImage(for: .unknown).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unknown").pngData() + ) + } + + func testUnpaddedCardBrandImageForAllBrands() { + for brand in STPCardBrand.allCases { + let image = PaymentSheetImageLibrary.unpaddedCardBrandImage(for: brand) + XCTAssert(image.size != .zero, "Missing unpadded image for card brand: \(brand)") + } + } + + func testUnpaddedCardBrandImageReturnsCorrectImages() { + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .visa).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unpadded_visa").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .amex).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unpadded_amex").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .mastercard).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unpadded_mastercard").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .discover).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unpadded_discover").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .JCB).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unpadded_jcb").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .dinersClub).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unpadded_diners_club").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .unionPay).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unpadded_unionpay").pngData() + ) + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .cartesBancaires).pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_unpadded_cartes_bancaires").pngData() + ) + // Unknown brand should fall back to padded card brand image + XCTAssertEqual( + PaymentSheetImageLibrary.unpaddedCardBrandImage(for: .unknown).pngData(), + PaymentSheetImageLibrary.cardBrandImage(for: .unknown).pngData() + ) + } + + func testCVCImageForCardBrand() { + for brand in Self.cardBrands { + let image = PaymentSheetImageLibrary.cvcImage(for: brand) + + switch brand { + case .amex: + XCTAssertEqual( + image.pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_cvc_amex").pngData() + ) + default: + XCTAssertEqual( + image.pngData(), + PaymentSheetImageLibrary.safeImageNamed("ps_card_cvc").pngData() + ) + } + } + } + + func testUnknownCardCardImage() { + XCTAssertEqual( + PaymentSheetImageLibrary.unknownCardCardImage().pngData(), + PaymentSheetImageLibrary.cardBrandImage(for: .unknown).pngData() + ) + } +} diff --git a/StripePaymentsUI/StripePaymentsUI/Source/Helpers/STPImageLibrary.swift b/StripePaymentsUI/StripePaymentsUI/Source/Helpers/STPImageLibrary.swift index 99cf71abc4cf..245520771560 100644 --- a/StripePaymentsUI/StripePaymentsUI/Source/Helpers/STPImageLibrary.swift +++ b/StripePaymentsUI/StripePaymentsUI/Source/Helpers/STPImageLibrary.swift @@ -133,10 +133,6 @@ public class STPImageLibrary: NSObject { return self.safeImageNamed("stp_card_error") } - @_spi(STP) public class func linkBankIcon() -> UIImage { - return self.safeImageNamed("stp_icon_bank_link", templateIfAvailable: true) - } - class func brandImage( for brand: STPCardBrand, template shouldUseTemplate: Bool, From 6cb80b9f3aac25ca5663457b048fff9f43c33bed Mon Sep 17 00:00:00 2001 From: David Estes Date: Mon, 12 Jan 2026 14:04:28 -0800 Subject: [PATCH 2/2] Sort imports --- .../PaymentSheet/PaymentSheetImageLibraryTest.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetImageLibraryTest.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetImageLibraryTest.swift index cec5914769f3..d28d13d1c344 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetImageLibraryTest.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetImageLibraryTest.swift @@ -3,8 +3,8 @@ // StripePaymentSheetTests // -@testable @_spi(STP) import StripePaymentSheet @testable @_spi(STP) import StripePayments +@testable @_spi(STP) import StripePaymentSheet @testable @_spi(STP) import StripeUICore import XCTest