tf-checkout-react 1.7.31 → 2.0.0-beta.1
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/LICENSE +1 -1
- package/README.md +141 -1033
- package/dist/checkout.css +17 -0
- package/dist/index.d.mts +3946 -0
- package/dist/index.d.ts +3946 -30
- package/dist/index.esm.js +9176 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +9330 -6
- package/dist/index.js.map +1 -0
- package/dist/styles/addons.css +75 -0
- package/dist/styles/auth.css +294 -0
- package/dist/styles/billing.css +98 -0
- package/dist/styles/confirmation.css +51 -0
- package/dist/styles/foundation.css +146 -0
- package/dist/styles/payment.css +179 -0
- package/dist/styles/primitives.css +356 -0
- package/dist/styles/seat-map.css +46 -0
- package/dist/styles/tickets.css +285 -0
- package/dist/styles/verification-confirmation.css +258 -0
- package/package.json +93 -78
- package/src/.d.ts +1 -1
- package/src/CardInput.tsx +374 -0
- package/src/EmbeddedCheckout.tsx +400 -0
- package/src/ResumedCheckout.tsx +132 -0
- package/src/auth/AuthModal.tsx +238 -0
- package/src/auth/ForgotPasswordForm.tsx +93 -0
- package/src/auth/LoginForm.tsx +104 -0
- package/src/auth/PasswordInput.tsx +33 -0
- package/src/auth/RegisterForm.tsx +333 -0
- package/src/auth/ResetPasswordForm.tsx +112 -0
- package/src/auth/index.ts +5 -0
- package/src/checkout.css +17 -0
- package/src/configure.ts +29 -0
- package/src/confirmer.ts +439 -0
- package/src/index.ts +41 -30
- package/src/instance.ts +21 -0
- package/src/sections/AddOns.tsx +241 -0
- package/src/sections/BillingInfo.tsx +790 -0
- package/src/sections/Confirmation.tsx +146 -0
- package/src/sections/IDVerification.tsx +76 -0
- package/src/sections/OrderConfirmation.tsx +277 -0
- package/src/sections/OrderIDVerification.tsx +117 -0
- package/src/sections/OrderSummary.tsx +84 -0
- package/src/sections/Payment.tsx +557 -0
- package/src/sections/SeatMap.tsx +512 -0
- package/src/sections/Tickets.tsx +573 -0
- package/src/sections/billing/BillingAddressFields.tsx +138 -0
- package/src/sections/billing/BuyerField.tsx +75 -0
- package/src/sections/billing/TicketHoldersCard.tsx +124 -0
- package/src/sections/billing/fieldRules.ts +43 -0
- package/src/sections/billing/types.ts +10 -0
- package/src/sections/index.ts +15 -0
- package/src/sections/seatMap.utils.ts +105 -0
- package/src/styles/addons.css +75 -0
- package/src/styles/auth.css +294 -0
- package/src/styles/billing.css +98 -0
- package/src/styles/confirmation.css +51 -0
- package/src/styles/foundation.css +146 -0
- package/src/styles/payment.css +179 -0
- package/src/styles/primitives.css +356 -0
- package/src/styles/seat-map.css +46 -0
- package/src/styles/tickets.css +285 -0
- package/src/styles/verification-confirmation.css +258 -0
- package/src/typings.d.ts +2 -2
- package/src/ui/Button.tsx +38 -0
- package/src/ui/Card.tsx +54 -0
- package/src/ui/CheckoutProvider.tsx +172 -0
- package/src/ui/CustomFields.tsx +195 -0
- package/src/ui/Field.tsx +114 -0
- package/src/ui/I18nProvider.tsx +36 -0
- package/src/ui/InstallmentPicker.tsx +69 -0
- package/src/ui/Loader.tsx +12 -0
- package/src/ui/PaymentMethods.tsx +133 -0
- package/src/ui/PriceLine.tsx +24 -0
- package/src/ui/QuantitySelect.tsx +50 -0
- package/src/ui/Stepper.tsx +36 -0
- package/src/ui/Timer.tsx +34 -0
- package/src/ui/TimerBanner.tsx +55 -0
- package/src/ui/cx.ts +3 -0
- package/src/ui/index.ts +54 -0
- package/src/ui/theme.ts +83 -0
- package/src/useCheckout.ts +35 -0
- package/src/xendit.ts +438 -0
- package/dist/adapters/customFields.d.ts +0 -12
- package/dist/adapters/index.d.ts +0 -1
- package/dist/api/auth.d.ts +0 -27
- package/dist/api/cart.d.ts +0 -2
- package/dist/api/checkout.d.ts +0 -3
- package/dist/api/common.d.ts +0 -11
- package/dist/api/guestTicketDelegation.d.ts +0 -47
- package/dist/api/index.d.ts +0 -82
- package/dist/api/interceptors.d.ts +0 -1
- package/dist/api/orders.d.ts +0 -2
- package/dist/api/payment.d.ts +0 -5
- package/dist/api/preRegistrationComplete.d.ts +0 -3
- package/dist/api/publicRequest.d.ts +0 -9
- package/dist/api/resale.d.ts +0 -5
- package/dist/components/account-settings/index.d.ts +0 -3
- package/dist/components/addonsContainer/AddonComponent.d.ts +0 -18
- package/dist/components/addonsContainer/SimpleAddonsContainer.d.ts +0 -20
- package/dist/components/addonsContainer/adapters/index.d.ts +0 -12
- package/dist/components/addonsContainer/index.d.ts +0 -22
- package/dist/components/addonsContainer/normalizers/index.d.ts +0 -1
- package/dist/components/addonsContainer/useAddons.d.ts +0 -23
- package/dist/components/addonsContainer/utils/index.d.ts +0 -16
- package/dist/components/billing-info-container/hooks/index.d.ts +0 -3
- package/dist/components/billing-info-container/hooks/usePaymentContext.d.ts +0 -5
- package/dist/components/billing-info-container/hooks/usePaymentRedirect.d.ts +0 -14
- package/dist/components/billing-info-container/hooks/useStripePayment.d.ts +0 -18
- package/dist/components/billing-info-container/index.d.ts +0 -69
- package/dist/components/billing-info-container/utils.d.ts +0 -59
- package/dist/components/common/Checkbox.d.ts +0 -11
- package/dist/components/common/CheckboxField/index.d.ts +0 -9
- package/dist/components/common/CopyField.d.ts +0 -12
- package/dist/components/common/CopyMessageModal.d.ts +0 -7
- package/dist/components/common/CustomField.d.ts +0 -26
- package/dist/components/common/DatePickerField.d.ts +0 -20
- package/dist/components/common/FieldSection/index.d.ts +0 -19
- package/dist/components/common/FieldSection/utils/index.d.ts +0 -8
- package/dist/components/common/FormikPhoneNumberField.d.ts +0 -11
- package/dist/components/common/Loader.d.ts +0 -2
- package/dist/components/common/ModalComponent/index.d.ts +0 -16
- package/dist/components/common/NativeSelectFeild/index.d.ts +0 -21
- package/dist/components/common/PhoneNumberField.d.ts +0 -14
- package/dist/components/common/PoweredBy.d.ts +0 -2
- package/dist/components/common/RadioField.d.ts +0 -11
- package/dist/components/common/RadioGroupField/index.d.ts +0 -17
- package/dist/components/common/RedirectModal.d.ts +0 -7
- package/dist/components/common/SelectField/index.d.ts +0 -19
- package/dist/components/common/SnackbarAlert.d.ts +0 -13
- package/dist/components/common/index.d.ts +0 -11
- package/dist/components/common/socials.d.ts +0 -10
- package/dist/components/confirmModal/index.d.ts +0 -10
- package/dist/components/confirmationContainer/config.d.ts +0 -1
- package/dist/components/confirmationContainer/index.d.ts +0 -46
- package/dist/components/confirmationContainer/social-buttons.d.ts +0 -16
- package/dist/components/countdown/index.d.ts +0 -14
- package/dist/components/delegationsContainer/IssueComponent.d.ts +0 -10
- package/dist/components/delegationsContainer/IssueTicketForm.d.ts +0 -9
- package/dist/components/delegationsContainer/TicketsAssignedTable.d.ts +0 -11
- package/dist/components/delegationsContainer/TicketsAvailableTable.d.ts +0 -11
- package/dist/components/delegationsContainer/index.d.ts +0 -10
- package/dist/components/forgotPasswordModal/index.d.ts +0 -12
- package/dist/components/idVerificationContainer/VerificationPendingModal.d.ts +0 -10
- package/dist/components/idVerificationContainer/constants.d.ts +0 -21
- package/dist/components/idVerificationContainer/index.d.ts +0 -16
- package/dist/components/index.d.ts +0 -12
- package/dist/components/loginForm/index.d.ts +0 -31
- package/dist/components/loginModal/SignUpForm.d.ts +0 -10
- package/dist/components/loginModal/constants.d.ts +0 -39
- package/dist/components/loginModal/index.d.ts +0 -22
- package/dist/components/myTicketsContainer/index.d.ts +0 -16
- package/dist/components/myTicketsContainer/row.d.ts +0 -3
- package/dist/components/myTicketsContainer/tableConfig.d.ts +0 -5
- package/dist/components/orderDetailsContainer/CustomFieldsForm.d.ts +0 -12
- package/dist/components/orderDetailsContainer/TicketHolderCustomFields.d.ts +0 -10
- package/dist/components/orderDetailsContainer/index.d.ts +0 -66
- package/dist/components/orderDetailsContainer/ticketsTable.d.ts +0 -46
- package/dist/components/orderDetailsContainer/utils/index.d.ts +0 -6
- package/dist/components/paymentContainer/OrderDetails.d.ts +0 -9
- package/dist/components/paymentContainer/PaymentPlanSection.d.ts +0 -10
- package/dist/components/paymentContainer/handlePayment.d.ts +0 -15
- package/dist/components/paymentContainer/index.d.ts +0 -39
- package/dist/components/preRegistration/FieldsSection.d.ts +0 -19
- package/dist/components/preRegistration/Influancers.d.ts +0 -2
- package/dist/components/preRegistration/PreRegistrationComplete.d.ts +0 -13
- package/dist/components/preRegistration/PreRegistrationInformations.d.ts +0 -2
- package/dist/components/preRegistration/Prewards.d.ts +0 -2
- package/dist/components/preRegistration/ShareOptions.d.ts +0 -2
- package/dist/components/preRegistration/constants.d.ts +0 -2
- package/dist/components/preRegistration/index.d.ts +0 -23
- package/dist/components/preRegistration/utils.d.ts +0 -12
- package/dist/components/registerForm/adapters/index.d.ts +0 -4
- package/dist/components/registerForm/constants.d.ts +0 -1
- package/dist/components/registerForm/index.d.ts +0 -16
- package/dist/components/registerModal/index.d.ts +0 -12
- package/dist/components/resetPasswordContainer/index.d.ts +0 -10
- package/dist/components/rsvpContainer/index.d.ts +0 -7
- package/dist/components/seatMapContainer/SeatMapComponent.d.ts +0 -8
- package/dist/components/seatMapContainer/TicketsSection.d.ts +0 -9
- package/dist/components/seatMapContainer/addToCart.d.ts +0 -14
- package/dist/components/seatMapContainer/index.d.ts +0 -2
- package/dist/components/seatMapContainer/utils.d.ts +0 -6
- package/dist/components/signupModal/index.d.ts +0 -12
- package/dist/components/ticketResale/index.d.ts +0 -12
- package/dist/components/ticketResaleModal/index.d.ts +0 -19
- package/dist/components/ticketsContainer/AccessCodeSection.d.ts +0 -7
- package/dist/components/ticketsContainer/InfoIcon.d.ts +0 -5
- package/dist/components/ticketsContainer/PromoCodeSection.d.ts +0 -15
- package/dist/components/ticketsContainer/ReferralLogic.d.ts +0 -5
- package/dist/components/ticketsContainer/TicketRow.d.ts +0 -13
- package/dist/components/ticketsContainer/TicketsSection.d.ts +0 -20
- package/dist/components/ticketsContainer/TimeSlotTicketRow.d.ts +0 -19
- package/dist/components/ticketsContainer/TimeSlotsSection.d.ts +0 -25
- package/dist/components/ticketsContainer/index.d.ts +0 -93
- package/dist/components/ticketsContainer/utils.d.ts +0 -13
- package/dist/components/timerWidget/index.d.ts +0 -16
- package/dist/components/waitingList/index.d.ts +0 -9
- package/dist/constants/index.d.ts +0 -7
- package/dist/env.d.ts +0 -16
- package/dist/hoc/CustomFields/index.d.ts +0 -3
- package/dist/hoc/index.d.ts +0 -1
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/useCookieListener.d.ts +0 -1
- package/dist/hooks/useEventListener.d.ts +0 -1
- package/dist/hooks/useLocalStorageListener.d.ts +0 -1
- package/dist/hooks/useOnline.d.ts +0 -1
- package/dist/hooks/usePixel.d.ts +0 -6
- package/dist/images/Polygon.png +0 -0
- package/dist/images/cross.svg +0 -44
- package/dist/images/done.svg +0 -3
- package/dist/images/edit.svg +0 -10
- package/dist/images/email.svg +0 -1
- package/dist/images/instagram.svg +0 -5
- package/dist/images/logo-ttf.png +0 -0
- package/dist/images/spotify.svg +0 -6
- package/dist/images/user.svg +0 -1
- package/dist/images/xmark.svg +0 -92
- package/dist/normalizers/index.d.ts +0 -4
- package/dist/tf-checkout-react.cjs.development.js +0 -16149
- package/dist/tf-checkout-react.cjs.development.js.map +0 -1
- package/dist/tf-checkout-react.cjs.production.min.js +0 -2
- package/dist/tf-checkout-react.cjs.production.min.js.map +0 -1
- package/dist/tf-checkout-react.esm.js +0 -16116
- package/dist/tf-checkout-react.esm.js.map +0 -1
- package/dist/tf-checkout-styles.css +0 -1
- package/dist/types/add_on.d.ts +0 -8
- package/dist/types/billing-info-data.d.ts +0 -27
- package/dist/types/checkoutPageConfigs.d.ts +0 -13
- package/dist/types/index.d.ts +0 -6
- package/dist/types/order-data.d.ts +0 -15
- package/dist/types/payment-field.d.ts +0 -6
- package/dist/types/payment-plan-configuration.d.ts +0 -18
- package/dist/types/referral-promotion.d.ts +0 -6
- package/dist/types/verification.d.ts +0 -12
- package/dist/utils/adaptStripeErrors.d.ts +0 -8
- package/dist/utils/auth.d.ts +0 -21
- package/dist/utils/cookies.d.ts +0 -3
- package/dist/utils/createCheckoutDataBodyWithDefaultHolder.d.ts +0 -23
- package/dist/utils/createMarkup.d.ts +0 -3
- package/dist/utils/customFields.d.ts +0 -35
- package/dist/utils/downloadPDF.d.ts +0 -1
- package/dist/utils/form.d.ts +0 -3
- package/dist/utils/formikErrorFocus.d.ts +0 -2
- package/dist/utils/getDomain.d.ts +0 -1
- package/dist/utils/getImage.d.ts +0 -1
- package/dist/utils/getQueryVariable.d.ts +0 -1
- package/dist/utils/htmlNodeFromString.d.ts +0 -1
- package/dist/utils/index.d.ts +0 -15
- package/dist/utils/isBrowser.d.ts +0 -1
- package/dist/utils/isValidNumber.d.ts +0 -1
- package/dist/utils/jsonUtils.d.ts +0 -1
- package/dist/utils/replaceVarInString.d.ts +0 -1
- package/dist/utils/setConfigs.d.ts +0 -11
- package/dist/utils/showZero.d.ts +0 -1
- package/dist/validators/index.d.ts +0 -8
- package/src/adapters/customFields.ts +0 -85
- package/src/adapters/index.ts +0 -1
- package/src/api/auth.ts +0 -88
- package/src/api/cart.ts +0 -28
- package/src/api/checkout.ts +0 -28
- package/src/api/common.ts +0 -190
- package/src/api/guestTicketDelegation.ts +0 -79
- package/src/api/index.ts +0 -346
- package/src/api/interceptors.ts +0 -77
- package/src/api/orders.ts +0 -30
- package/src/api/payment.ts +0 -77
- package/src/api/preRegistrationComplete.ts +0 -37
- package/src/api/publicRequest.ts +0 -47
- package/src/api/resale.ts +0 -28
- package/src/assets/images/Polygon.png +0 -0
- package/src/assets/images/cross.svg +0 -44
- package/src/assets/images/done.svg +0 -3
- package/src/assets/images/edit.svg +0 -10
- package/src/assets/images/email.svg +0 -1
- package/src/assets/images/instagram.svg +0 -5
- package/src/assets/images/logo-ttf.png +0 -0
- package/src/assets/images/spotify.svg +0 -6
- package/src/assets/images/user.svg +0 -1
- package/src/assets/images/xmark.svg +0 -92
- package/src/components/account-settings/index.tsx +0 -161
- package/src/components/account-settings/style.css +0 -200
- package/src/components/addonsContainer/AddonComponent.tsx +0 -204
- package/src/components/addonsContainer/SimpleAddonsContainer.tsx +0 -459
- package/src/components/addonsContainer/adapters/index.tsx +0 -62
- package/src/components/addonsContainer/index.tsx +0 -353
- package/src/components/addonsContainer/normalizers/index.ts +0 -5
- package/src/components/addonsContainer/useAddons.ts +0 -248
- package/src/components/addonsContainer/utils/index.tsx +0 -231
- package/src/components/billing-info-container/hooks/index.ts +0 -3
- package/src/components/billing-info-container/hooks/usePaymentContext.ts +0 -22
- package/src/components/billing-info-container/hooks/usePaymentRedirect.ts +0 -145
- package/src/components/billing-info-container/hooks/useStripePayment.ts +0 -119
- package/src/components/billing-info-container/index.tsx +0 -1695
- package/src/components/billing-info-container/style.css +0 -150
- package/src/components/billing-info-container/utils.tsx +0 -413
- package/src/components/common/Checkbox.tsx +0 -51
- package/src/components/common/CheckboxField/index.tsx +0 -41
- package/src/components/common/CopyField.tsx +0 -53
- package/src/components/common/CopyMessageModal.tsx +0 -34
- package/src/components/common/CustomField.tsx +0 -168
- package/src/components/common/DatePickerField.tsx +0 -126
- package/src/components/common/FieldSection/index.tsx +0 -141
- package/src/components/common/FieldSection/utils/index.tsx +0 -92
- package/src/components/common/FormikPhoneNumberField.tsx +0 -51
- package/src/components/common/Loader.tsx +0 -8
- package/src/components/common/ModalComponent/index.tsx +0 -68
- package/src/components/common/NativeSelectFeild/index.tsx +0 -86
- package/src/components/common/PhoneNumberField.tsx +0 -117
- package/src/components/common/PoweredBy.tsx +0 -15
- package/src/components/common/RadioField.tsx +0 -36
- package/src/components/common/RadioGroupField/index.tsx +0 -76
- package/src/components/common/RedirectModal.tsx +0 -43
- package/src/components/common/SelectField/index.tsx +0 -104
- package/src/components/common/SnackbarAlert.tsx +0 -52
- package/src/components/common/index.tsx +0 -11
- package/src/components/common/socials.tsx +0 -33
- package/src/components/confirmModal/index.tsx +0 -60
- package/src/components/confirmationContainer/config.ts +0 -79
- package/src/components/confirmationContainer/index.tsx +0 -349
- package/src/components/confirmationContainer/social-buttons.tsx +0 -149
- package/src/components/confirmationContainer/style.css +0 -206
- package/src/components/countdown/index.tsx +0 -100
- package/src/components/countdown/style.css +0 -10
- package/src/components/delegationsContainer/IssueComponent.tsx +0 -156
- package/src/components/delegationsContainer/IssueTicketForm.tsx +0 -109
- package/src/components/delegationsContainer/TicketsAssignedTable.tsx +0 -55
- package/src/components/delegationsContainer/TicketsAvailableTable.tsx +0 -54
- package/src/components/delegationsContainer/index.tsx +0 -83
- package/src/components/forgotPasswordModal/index.tsx +0 -138
- package/src/components/forgotPasswordModal/style.css +0 -47
- package/src/components/idVerificationContainer/VerificationPendingModal.tsx +0 -47
- package/src/components/idVerificationContainer/constants.ts +0 -27
- package/src/components/idVerificationContainer/index.tsx +0 -323
- package/src/components/index.ts +0 -12
- package/src/components/loginForm/index.tsx +0 -202
- package/src/components/loginModal/SignUpForm.tsx +0 -329
- package/src/components/loginModal/constants.ts +0 -46
- package/src/components/loginModal/index.tsx +0 -263
- package/src/components/loginModal/style.css +0 -116
- package/src/components/myTicketsContainer/index.tsx +0 -228
- package/src/components/myTicketsContainer/row.tsx +0 -46
- package/src/components/myTicketsContainer/style.css +0 -40
- package/src/components/myTicketsContainer/tableConfig.tsx +0 -80
- package/src/components/myTicketsContainer/types.d.ts +0 -41
- package/src/components/orderDetailsContainer/CustomFieldsForm.tsx +0 -75
- package/src/components/orderDetailsContainer/TicketHolderCustomFields.tsx +0 -100
- package/src/components/orderDetailsContainer/index.tsx +0 -586
- package/src/components/orderDetailsContainer/style.css +0 -77
- package/src/components/orderDetailsContainer/ticketsTable.tsx +0 -246
- package/src/components/orderDetailsContainer/utils/index.tsx +0 -55
- package/src/components/paymentContainer/OrderDetails.tsx +0 -277
- package/src/components/paymentContainer/PaymentPlanSection.tsx +0 -169
- package/src/components/paymentContainer/handlePayment.ts +0 -86
- package/src/components/paymentContainer/index.tsx +0 -643
- package/src/components/paymentContainer/style.css +0 -196
- package/src/components/preRegistration/FieldsSection.tsx +0 -150
- package/src/components/preRegistration/Influancers.tsx +0 -34
- package/src/components/preRegistration/PreRegistrationComplete.tsx +0 -186
- package/src/components/preRegistration/PreRegistrationInformations.tsx +0 -60
- package/src/components/preRegistration/Prewards.tsx +0 -41
- package/src/components/preRegistration/ShareOptions.tsx +0 -77
- package/src/components/preRegistration/constants.tsx +0 -169
- package/src/components/preRegistration/index.tsx +0 -330
- package/src/components/preRegistration/style.css +0 -3
- package/src/components/preRegistration/utils.ts +0 -163
- package/src/components/registerForm/adapters/index.tsx +0 -10
- package/src/components/registerForm/constants.tsx +0 -98
- package/src/components/registerForm/index.tsx +0 -188
- package/src/components/registerModal/index.tsx +0 -154
- package/src/components/registerModal/style.css +0 -18
- package/src/components/resetPasswordContainer/index.tsx +0 -102
- package/src/components/resetPasswordContainer/style.css +0 -36
- package/src/components/rsvpContainer/index.tsx +0 -126
- package/src/components/seatMapContainer/SeatMapComponent.tsx +0 -77
- package/src/components/seatMapContainer/TicketsSection.tsx +0 -286
- package/src/components/seatMapContainer/addToCart.ts +0 -66
- package/src/components/seatMapContainer/index.tsx +0 -443
- package/src/components/seatMapContainer/utils.ts +0 -133
- package/src/components/signupModal/index.tsx +0 -178
- package/src/components/signupModal/style.css +0 -58
- package/src/components/ticketResale/index.tsx +0 -86
- package/src/components/ticketResaleModal/index.tsx +0 -224
- package/src/components/ticketResaleModal/style.css +0 -28
- package/src/components/ticketsContainer/AccessCodeSection.tsx +0 -50
- package/src/components/ticketsContainer/InfoIcon.tsx +0 -35
- package/src/components/ticketsContainer/PromoCodeSection.tsx +0 -116
- package/src/components/ticketsContainer/ReferralLogic.tsx +0 -33
- package/src/components/ticketsContainer/TicketRow.tsx +0 -107
- package/src/components/ticketsContainer/TicketsSection.tsx +0 -350
- package/src/components/ticketsContainer/TimeSlotTicketRow.tsx +0 -243
- package/src/components/ticketsContainer/TimeSlotsSection.tsx +0 -194
- package/src/components/ticketsContainer/index.tsx +0 -986
- package/src/components/ticketsContainer/style.css +0 -178
- package/src/components/ticketsContainer/utils.ts +0 -35
- package/src/components/timerWidget/index.tsx +0 -97
- package/src/components/timerWidget/style.css +0 -35
- package/src/components/waitingList/index.tsx +0 -190
- package/src/components/waitingList/style.css +0 -27
- package/src/constants/index.ts +0 -3
- package/src/env.ts +0 -29
- package/src/hoc/CustomFields/index.tsx +0 -85
- package/src/hoc/index.ts +0 -1
- package/src/hooks/index.ts +0 -1
- package/src/hooks/useCookieListener.ts +0 -32
- package/src/hooks/useEventListener.ts +0 -32
- package/src/hooks/useLocalStorageListener.ts +0 -32
- package/src/hooks/useOnline.ts +0 -21
- package/src/hooks/usePixel.ts +0 -88
- package/src/normalizers/index.ts +0 -49
- package/src/types/add_on.ts +0 -8
- package/src/types/api/auth.d.ts +0 -63
- package/src/types/api/axiosResponse.d.ts +0 -6
- package/src/types/api/cart.d.ts +0 -73
- package/src/types/api/checkout.d.ts +0 -92
- package/src/types/api/common.d.ts +0 -153
- package/src/types/api/guestTicketDelegation.d.ts +0 -18
- package/src/types/api/orders.d.ts +0 -116
- package/src/types/api/payment.d.ts +0 -180
- package/src/types/api/preRegistration.d.ts +0 -11
- package/src/types/api/preRegistrationComplete.d.ts +0 -95
- package/src/types/api/ticketResale.d.ts +0 -13
- package/src/types/billing-info-data.ts +0 -37
- package/src/types/checkoutPageConfigs.ts +0 -13
- package/src/types/formFields.d.ts +0 -29
- package/src/types/index.ts +0 -6
- package/src/types/order-data.ts +0 -16
- package/src/types/payment-field.ts +0 -7
- package/src/types/payment-plan-configuration.ts +0 -19
- package/src/types/pre-registration-complete.d.ts +0 -47
- package/src/types/referral-promotion.ts +0 -7
- package/src/types/seatMap.d.ts +0 -159
- package/src/types/verification.ts +0 -12
- package/src/utils/adaptStripeErrors.ts +0 -26
- package/src/utils/auth.ts +0 -45
- package/src/utils/cookies.ts +0 -73
- package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +0 -81
- package/src/utils/createMarkup.ts +0 -1
- package/src/utils/customFields.ts +0 -80
- package/src/utils/downloadPDF.tsx +0 -42
- package/src/utils/form.ts +0 -34
- package/src/utils/formikErrorFocus.ts +0 -24
- package/src/utils/getDomain.ts +0 -21
- package/src/utils/getImage.ts +0 -14
- package/src/utils/getQueryVariable.ts +0 -13
- package/src/utils/htmlNodeFromString.ts +0 -6
- package/src/utils/index.ts +0 -15
- package/src/utils/isBrowser.ts +0 -2
- package/src/utils/isValidNumber.ts +0 -8
- package/src/utils/jsonUtils.ts +0 -8
- package/src/utils/replaceVarInString.ts +0 -9
- package/src/utils/setConfigs.ts +0 -24
- package/src/utils/showZero.tsx +0 -10
- package/src/validators/index.ts +0 -61
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<PaymentMethods>` — a controlled radio-list of payment methods (icon + label
|
|
3
|
+
* per row), matching the hosted checkout's iconed selector. Presentational only:
|
|
4
|
+
* it renders the choices + the selected row's extra input (and hosts a card
|
|
5
|
+
* field in the card row via `children`/`inputSlotFor`). It does NOT own the Pay
|
|
6
|
+
* button or `placeOrder` — `<Payment/>` builds the options and maps a selection
|
|
7
|
+
* back to a `placeOrder` request.
|
|
8
|
+
*/
|
|
9
|
+
import React, { type FC, type ReactNode } from 'react'
|
|
10
|
+
|
|
11
|
+
import { cx } from './cx'
|
|
12
|
+
import { Field, Input } from './Field'
|
|
13
|
+
|
|
14
|
+
// The method descriptor + row shape live in the SDK so both platforms render
|
|
15
|
+
// the SAME option list. Imported for local use and re-exported for consumers
|
|
16
|
+
// that already import them from here.
|
|
17
|
+
import type {
|
|
18
|
+
PaymentMethodId,
|
|
19
|
+
PaymentMethodOption,
|
|
20
|
+
} from 'tf-checkout-shared'
|
|
21
|
+
|
|
22
|
+
export type { PaymentMethodId, PaymentMethodOption }
|
|
23
|
+
|
|
24
|
+
export interface PaymentMethodsProps {
|
|
25
|
+
options: PaymentMethodOption[]
|
|
26
|
+
/** Selected `option.value` (controlled). */
|
|
27
|
+
selected: string
|
|
28
|
+
onSelect: (value: string) => void
|
|
29
|
+
/** Extra-field values keyed by `option.value`. */
|
|
30
|
+
extraValues: Record<string, { cashtag?: string; phoneNumber?: string }>
|
|
31
|
+
onExtraChange: (
|
|
32
|
+
value: string,
|
|
33
|
+
patch: { cashtag?: string; phoneNumber?: string }
|
|
34
|
+
) => void
|
|
35
|
+
/** Reveal required extra-field errors after the buyer attempts payment. */
|
|
36
|
+
showValidation?: boolean
|
|
37
|
+
/** Rendered inside the row whose `value === inputSlotFor` (e.g. `<CardInput/>`). */
|
|
38
|
+
children?: ReactNode
|
|
39
|
+
inputSlotFor?: string
|
|
40
|
+
className?: string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const EXTRA_LABEL: Record<'cashtag' | 'phoneNumber', string> = {
|
|
44
|
+
cashtag: 'Jenius $cashtag',
|
|
45
|
+
phoneNumber: 'OVO phone number',
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const PaymentMethods: FC<PaymentMethodsProps> = ({
|
|
49
|
+
options,
|
|
50
|
+
selected,
|
|
51
|
+
onSelect,
|
|
52
|
+
extraValues,
|
|
53
|
+
onExtraChange,
|
|
54
|
+
showValidation = false,
|
|
55
|
+
children,
|
|
56
|
+
inputSlotFor,
|
|
57
|
+
className,
|
|
58
|
+
}) => (
|
|
59
|
+
<div
|
|
60
|
+
className={cx('tf-checkout-payment__methods', className)}
|
|
61
|
+
role="radiogroup"
|
|
62
|
+
aria-label="Payment method"
|
|
63
|
+
>
|
|
64
|
+
{options.map((o) => {
|
|
65
|
+
const isSelected = o.value === selected
|
|
66
|
+
const extraValue =
|
|
67
|
+
o.extra === 'phoneNumber'
|
|
68
|
+
? extraValues[o.value]?.phoneNumber
|
|
69
|
+
: extraValues[o.value]?.cashtag
|
|
70
|
+
const extraInvalid =
|
|
71
|
+
Boolean(isSelected && o.extra && showValidation) && !extraValue?.trim()
|
|
72
|
+
return (
|
|
73
|
+
<label
|
|
74
|
+
key={o.value}
|
|
75
|
+
className={cx(
|
|
76
|
+
'tf-checkout-payment__method',
|
|
77
|
+
isSelected && 'tf-checkout-payment__method--selected'
|
|
78
|
+
)}
|
|
79
|
+
>
|
|
80
|
+
<span className="tf-checkout-payment__method-head">
|
|
81
|
+
<input
|
|
82
|
+
type="radio"
|
|
83
|
+
name="tf-pay-method"
|
|
84
|
+
className="tf-checkout-payment__method-radio"
|
|
85
|
+
checked={isSelected}
|
|
86
|
+
onChange={() => onSelect(o.value)}
|
|
87
|
+
/>
|
|
88
|
+
{o.iconUrl && (
|
|
89
|
+
<img className="tf-checkout-payment__method-icon" src={o.iconUrl} alt="" />
|
|
90
|
+
)}
|
|
91
|
+
<span className="tf-checkout-payment__method-label">{o.label}</span>
|
|
92
|
+
</span>
|
|
93
|
+
|
|
94
|
+
{isSelected && (o.value === inputSlotFor || o.extra) && (
|
|
95
|
+
<div className="tf-checkout-payment__method-body">
|
|
96
|
+
{o.value === inputSlotFor && children}
|
|
97
|
+
{o.extra && (
|
|
98
|
+
<Field
|
|
99
|
+
label={`${EXTRA_LABEL[o.extra]} *`}
|
|
100
|
+
error={extraInvalid ? 'This field is required.' : undefined}
|
|
101
|
+
invalid={extraInvalid}
|
|
102
|
+
>
|
|
103
|
+
<Input
|
|
104
|
+
inputMode={o.extra === 'phoneNumber' ? 'tel' : 'text'}
|
|
105
|
+
required
|
|
106
|
+
invalid={extraInvalid}
|
|
107
|
+
aria-invalid={extraInvalid}
|
|
108
|
+
placeholder={
|
|
109
|
+
o.extra === 'phoneNumber' ? 'e.g. 081234567890' : '$cashtag'
|
|
110
|
+
}
|
|
111
|
+
value={
|
|
112
|
+
o.extra === 'phoneNumber'
|
|
113
|
+
? (extraValues[o.value]?.phoneNumber ?? '')
|
|
114
|
+
: (extraValues[o.value]?.cashtag ?? '')
|
|
115
|
+
}
|
|
116
|
+
onChange={(e) =>
|
|
117
|
+
onExtraChange(
|
|
118
|
+
o.value,
|
|
119
|
+
o.extra === 'phoneNumber'
|
|
120
|
+
? { phoneNumber: e.target.value }
|
|
121
|
+
: { cashtag: e.target.value }
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
/>
|
|
125
|
+
</Field>
|
|
126
|
+
)}
|
|
127
|
+
</div>
|
|
128
|
+
)}
|
|
129
|
+
</label>
|
|
130
|
+
)
|
|
131
|
+
})}
|
|
132
|
+
</div>
|
|
133
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React, { type FC, type ReactNode } from 'react'
|
|
2
|
+
|
|
3
|
+
import { cx } from './cx'
|
|
4
|
+
|
|
5
|
+
/** A price with optional struck-through original + a fees/deposit note. */
|
|
6
|
+
export const PriceLine: FC<{
|
|
7
|
+
currency?: string
|
|
8
|
+
amount: number | string
|
|
9
|
+
/** Struck-through pre-discount price. */
|
|
10
|
+
original?: number | string
|
|
11
|
+
/** e.g. "incl. fees" or "50% deposit". */
|
|
12
|
+
note?: ReactNode
|
|
13
|
+
className?: string
|
|
14
|
+
}> = ({ currency, amount, original, note, className }) => (
|
|
15
|
+
<span className={cx('tf-checkout-price', className)}>
|
|
16
|
+
{original != null && (
|
|
17
|
+
<span className="tf-checkout-price__original">
|
|
18
|
+
{currency} {original}
|
|
19
|
+
</span>
|
|
20
|
+
)}
|
|
21
|
+
{currency} {amount}
|
|
22
|
+
{note != null && <span className="tf-checkout-price__fees">{note}</span>}
|
|
23
|
+
</span>
|
|
24
|
+
)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<QuantitySelect>` — a compact quantity dropdown (0…max), the control the old
|
|
3
|
+
* checkout used for tickets and add-ons (not a +/- stepper).
|
|
4
|
+
*/
|
|
5
|
+
import React, { type FC } from 'react'
|
|
6
|
+
|
|
7
|
+
import { cx } from './cx'
|
|
8
|
+
|
|
9
|
+
export interface QuantitySelectProps {
|
|
10
|
+
value: number
|
|
11
|
+
onChange: (value: number) => void
|
|
12
|
+
/** Minimum purchasable quantity when buying (0 = none is always allowed). */
|
|
13
|
+
min?: number
|
|
14
|
+
max?: number
|
|
15
|
+
/** Step between options (the old checkout's `multiplier`). */
|
|
16
|
+
step?: number
|
|
17
|
+
disabled?: boolean
|
|
18
|
+
className?: string
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const QuantitySelect: FC<QuantitySelectProps> = ({
|
|
22
|
+
value,
|
|
23
|
+
onChange,
|
|
24
|
+
min = 0,
|
|
25
|
+
max = 10,
|
|
26
|
+
step = 1,
|
|
27
|
+
disabled,
|
|
28
|
+
className,
|
|
29
|
+
}) => {
|
|
30
|
+
// 0 (buy none) is always offered; the first non-zero option honors the ticket's
|
|
31
|
+
// minimum, then steps up to the cap — so a min-2 type offers 0, 2, 3, … not 1.
|
|
32
|
+
const cap = Math.min(max, 50)
|
|
33
|
+
const lo = Math.max(1, min)
|
|
34
|
+
const options: number[] = [0]
|
|
35
|
+
for (let n = lo; n <= cap; n += step) options.push(n)
|
|
36
|
+
return (
|
|
37
|
+
<select
|
|
38
|
+
className={cx('tf-checkout-qty', className)}
|
|
39
|
+
value={value}
|
|
40
|
+
disabled={disabled}
|
|
41
|
+
onChange={(e) => onChange(Number(e.target.value))}
|
|
42
|
+
>
|
|
43
|
+
{options.map((n) => (
|
|
44
|
+
<option key={n} value={n}>
|
|
45
|
+
{n}
|
|
46
|
+
</option>
|
|
47
|
+
))}
|
|
48
|
+
</select>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React, { type FC } from 'react'
|
|
2
|
+
|
|
3
|
+
import { cx } from './cx'
|
|
4
|
+
|
|
5
|
+
/** Quantity ± control (ticket / add-on quantities). */
|
|
6
|
+
export const Stepper: FC<{
|
|
7
|
+
value: number
|
|
8
|
+
onChange: (value: number) => void
|
|
9
|
+
min?: number
|
|
10
|
+
max?: number
|
|
11
|
+
step?: number
|
|
12
|
+
disabled?: boolean
|
|
13
|
+
className?: string
|
|
14
|
+
}> = ({ value, onChange, min = 0, max = Infinity, step = 1, disabled, className }) => (
|
|
15
|
+
<div className={cx('tf-checkout-stepper', className)}>
|
|
16
|
+
<button
|
|
17
|
+
type="button"
|
|
18
|
+
className="tf-checkout-stepper__btn"
|
|
19
|
+
aria-label="Decrease"
|
|
20
|
+
disabled={disabled || value <= min}
|
|
21
|
+
onClick={() => onChange(Math.max(min, value - step))}
|
|
22
|
+
>
|
|
23
|
+
−
|
|
24
|
+
</button>
|
|
25
|
+
<span className="tf-checkout-stepper__value">{value}</span>
|
|
26
|
+
<button
|
|
27
|
+
type="button"
|
|
28
|
+
className="tf-checkout-stepper__btn"
|
|
29
|
+
aria-label="Increase"
|
|
30
|
+
disabled={disabled || value >= max}
|
|
31
|
+
onClick={() => onChange(Math.min(max, value + step))}
|
|
32
|
+
>
|
|
33
|
+
+
|
|
34
|
+
</button>
|
|
35
|
+
</div>
|
|
36
|
+
)
|
package/src/ui/Timer.tsx
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React, { type FC, type ReactNode } from 'react'
|
|
2
|
+
|
|
3
|
+
import { cx } from './cx'
|
|
4
|
+
|
|
5
|
+
const clock = (s: number) => {
|
|
6
|
+
const v = Math.max(0, Math.floor(s))
|
|
7
|
+
return v >= 3600
|
|
8
|
+
? `${Math.floor(v / 3600)}:${String(Math.floor((v % 3600) / 60)).padStart(
|
|
9
|
+
2,
|
|
10
|
+
'0'
|
|
11
|
+
)}:${String(v % 60).padStart(2, '0')}`
|
|
12
|
+
: `${Math.floor(v / 60)}:${String(v % 60).padStart(2, '0')}`
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Reservation countdown. Pass `checkout.secondsLeft`. */
|
|
16
|
+
export const Timer: FC<{
|
|
17
|
+
seconds: number
|
|
18
|
+
/** Below this many seconds it turns urgent (default 60). */
|
|
19
|
+
urgentAt?: number
|
|
20
|
+
/** Text before the clock, e.g. "Reserved for". */
|
|
21
|
+
label?: ReactNode
|
|
22
|
+
className?: string
|
|
23
|
+
}> = ({ seconds, urgentAt = 60, label, className }) => (
|
|
24
|
+
<span
|
|
25
|
+
className={cx(
|
|
26
|
+
'tf-checkout-timer',
|
|
27
|
+
seconds <= urgentAt && 'tf-checkout-timer--urgent',
|
|
28
|
+
className
|
|
29
|
+
)}
|
|
30
|
+
>
|
|
31
|
+
{label != null && <span>{label}</span>}
|
|
32
|
+
{clock(seconds)}
|
|
33
|
+
</span>
|
|
34
|
+
)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<TimerBanner>` — the reservation countdown banner the old checkout showed at
|
|
3
|
+
* the top of the add-ons / billing / payment steps: "Please complete your
|
|
4
|
+
* purchase before the timer reaches zero." + mm:ss, with a dismiss X. Feed it
|
|
5
|
+
* `checkout.secondsLeft`. Renders nothing when there's no live reservation.
|
|
6
|
+
*/
|
|
7
|
+
import React, { useState, type FC } from 'react'
|
|
8
|
+
|
|
9
|
+
import { cx } from './cx'
|
|
10
|
+
|
|
11
|
+
const clock = (s: number) => {
|
|
12
|
+
const m = String(Math.floor(s / 60)).padStart(2, '0')
|
|
13
|
+
const ss = String(s % 60).padStart(2, '0')
|
|
14
|
+
return `${m}:${ss}`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface TimerBannerProps {
|
|
18
|
+
seconds?: number
|
|
19
|
+
/** Show red styling at/under this many seconds. Default 60. */
|
|
20
|
+
urgentAt?: number
|
|
21
|
+
message?: string
|
|
22
|
+
className?: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const TimerBanner: FC<TimerBannerProps> = ({
|
|
26
|
+
seconds,
|
|
27
|
+
urgentAt = 60,
|
|
28
|
+
message = 'Please complete your purchase before the timer reaches zero.',
|
|
29
|
+
className,
|
|
30
|
+
}) => {
|
|
31
|
+
const [dismissed, setDismissed] = useState(false)
|
|
32
|
+
if (seconds === undefined || seconds <= 0 || dismissed) return null
|
|
33
|
+
const urgent = seconds <= urgentAt
|
|
34
|
+
return (
|
|
35
|
+
<div
|
|
36
|
+
role="status"
|
|
37
|
+
className={cx(
|
|
38
|
+
'tf-checkout-timerbanner',
|
|
39
|
+
urgent && 'tf-checkout-timerbanner--urgent',
|
|
40
|
+
className
|
|
41
|
+
)}
|
|
42
|
+
>
|
|
43
|
+
<span className="tf-checkout-timerbanner__msg">{message}</span>
|
|
44
|
+
<span className="tf-checkout-timerbanner__clock">{clock(seconds)}</span>
|
|
45
|
+
<button
|
|
46
|
+
type="button"
|
|
47
|
+
className="tf-checkout-timerbanner__close"
|
|
48
|
+
aria-label="Dismiss"
|
|
49
|
+
onClick={() => setDismissed(true)}
|
|
50
|
+
>
|
|
51
|
+
×
|
|
52
|
+
</button>
|
|
53
|
+
</div>
|
|
54
|
+
)
|
|
55
|
+
}
|
package/src/ui/cx.ts
ADDED
package/src/ui/index.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tf-checkout UI kit — the themeable primitives every section composes.
|
|
3
|
+
* All scoped under `.tf-checkout`, all `tf-checkout-*` BEM classes, all take a
|
|
4
|
+
* `className`. Styles load automatically from the package entry point.
|
|
5
|
+
*/
|
|
6
|
+
export {
|
|
7
|
+
CheckoutProvider,
|
|
8
|
+
useCheckoutContext,
|
|
9
|
+
useCheckoutValidation,
|
|
10
|
+
type CheckoutProviderProps,
|
|
11
|
+
} from './CheckoutProvider'
|
|
12
|
+
export { themeToVars, type CheckoutTheme } from './theme'
|
|
13
|
+
export { cx } from './cx'
|
|
14
|
+
export {
|
|
15
|
+
Card,
|
|
16
|
+
SectionHeader,
|
|
17
|
+
Pill,
|
|
18
|
+
type CardProps,
|
|
19
|
+
type SectionHeaderProps,
|
|
20
|
+
} from './Card'
|
|
21
|
+
export { Button, type ButtonProps } from './Button'
|
|
22
|
+
export {
|
|
23
|
+
Field,
|
|
24
|
+
FieldRow,
|
|
25
|
+
Input,
|
|
26
|
+
Textarea,
|
|
27
|
+
Select,
|
|
28
|
+
Checkbox,
|
|
29
|
+
type InputProps,
|
|
30
|
+
type TextareaProps,
|
|
31
|
+
type SelectProps,
|
|
32
|
+
type CheckboxProps,
|
|
33
|
+
} from './Field'
|
|
34
|
+
export {
|
|
35
|
+
CustomFieldInput,
|
|
36
|
+
CustomFieldGroupFields,
|
|
37
|
+
customFieldsComplete,
|
|
38
|
+
type CustomFieldInputProps,
|
|
39
|
+
type CustomFieldGroupFieldsProps,
|
|
40
|
+
} from './CustomFields'
|
|
41
|
+
export {
|
|
42
|
+
PaymentMethods,
|
|
43
|
+
type PaymentMethodsProps,
|
|
44
|
+
type PaymentMethodOption,
|
|
45
|
+
type PaymentMethodId,
|
|
46
|
+
} from './PaymentMethods'
|
|
47
|
+
export { Stepper } from './Stepper'
|
|
48
|
+
export { QuantitySelect, type QuantitySelectProps } from './QuantitySelect'
|
|
49
|
+
export { PriceLine } from './PriceLine'
|
|
50
|
+
export { Timer } from './Timer'
|
|
51
|
+
export { TimerBanner, type TimerBannerProps } from './TimerBanner'
|
|
52
|
+
export { Loader } from './Loader'
|
|
53
|
+
export { useInstallmentPicker } from './InstallmentPicker'
|
|
54
|
+
export { I18nProvider, useT, type I18nProviderProps } from './I18nProvider'
|
package/src/ui/theme.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The checkout theme — a structured, documented token set. Pass any subset to
|
|
3
|
+
* `<CheckoutProvider theme={…}>`; each token maps to a `--tf-checkout-*` CSS
|
|
4
|
+
* custom property that `checkout.css` (and every component) reads. Anything you
|
|
5
|
+
* omit falls back to the stylesheet default.
|
|
6
|
+
*/
|
|
7
|
+
import type { CSSProperties } from 'react'
|
|
8
|
+
|
|
9
|
+
export interface CheckoutTheme {
|
|
10
|
+
/** `'dark'` adds the `tf-checkout--dark` class (dark default palette). */
|
|
11
|
+
colorScheme?: 'light' | 'dark'
|
|
12
|
+
|
|
13
|
+
// color
|
|
14
|
+
/** Primary color — buttons, step badges, focus ring, links. */
|
|
15
|
+
accent?: string
|
|
16
|
+
/** Hover state for `accent` (defaults near `accent`). */
|
|
17
|
+
accentHover?: string
|
|
18
|
+
/** Text/icon color on top of `accent`. */
|
|
19
|
+
accentContrast?: string
|
|
20
|
+
/** Card background. */
|
|
21
|
+
surface?: string
|
|
22
|
+
/** Subtle fill (summary rows, muted pills). */
|
|
23
|
+
surfaceMuted?: string
|
|
24
|
+
/** Primary text. */
|
|
25
|
+
text?: string
|
|
26
|
+
/** Secondary text (labels, "incl. fees", hints). */
|
|
27
|
+
muted?: string
|
|
28
|
+
/** Borders + dividers. */
|
|
29
|
+
border?: string
|
|
30
|
+
/** Error text + invalid field borders. */
|
|
31
|
+
error?: string
|
|
32
|
+
/** Success (confirmation check). */
|
|
33
|
+
success?: string
|
|
34
|
+
|
|
35
|
+
// shape
|
|
36
|
+
/** Corner radius for cards. */
|
|
37
|
+
radiusCard?: string
|
|
38
|
+
/** Corner radius for inputs / buttons. */
|
|
39
|
+
radiusControl?: string
|
|
40
|
+
/** Card shadow. */
|
|
41
|
+
shadow?: string
|
|
42
|
+
|
|
43
|
+
// type
|
|
44
|
+
/** Font family for the whole component tree. */
|
|
45
|
+
font?: string
|
|
46
|
+
/** Base font size (e.g. `15px`). */
|
|
47
|
+
fontSize?: string
|
|
48
|
+
|
|
49
|
+
// layout
|
|
50
|
+
/** Max width of the checkout column. */
|
|
51
|
+
maxWidth?: string
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const MAP: Record<keyof Omit<CheckoutTheme, 'colorScheme'>, string> = {
|
|
55
|
+
accent: '--tf-checkout-accent',
|
|
56
|
+
accentHover: '--tf-checkout-accent-hover',
|
|
57
|
+
accentContrast: '--tf-checkout-accent-contrast',
|
|
58
|
+
surface: '--tf-checkout-surface',
|
|
59
|
+
surfaceMuted: '--tf-checkout-surface-muted',
|
|
60
|
+
text: '--tf-checkout-text',
|
|
61
|
+
muted: '--tf-checkout-muted',
|
|
62
|
+
border: '--tf-checkout-border',
|
|
63
|
+
error: '--tf-checkout-error',
|
|
64
|
+
success: '--tf-checkout-success',
|
|
65
|
+
radiusCard: '--tf-checkout-radius-card',
|
|
66
|
+
radiusControl: '--tf-checkout-radius-control',
|
|
67
|
+
shadow: '--tf-checkout-shadow',
|
|
68
|
+
font: '--tf-checkout-font',
|
|
69
|
+
fontSize: '--tf-checkout-font-size',
|
|
70
|
+
maxWidth: '--tf-checkout-max-width',
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Turn a theme into inline `--tf-checkout-*` custom properties for the root. */
|
|
74
|
+
export const themeToVars = (theme?: CheckoutTheme): CSSProperties => {
|
|
75
|
+
const out: Record<string, string> = {}
|
|
76
|
+
if (theme) {
|
|
77
|
+
for (const key of Object.keys(MAP) as (keyof typeof MAP)[]) {
|
|
78
|
+
const value = theme[key]
|
|
79
|
+
if (value != null) out[MAP[key]] = value
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return out as CSSProperties
|
|
83
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web `useCheckout` — a thin injector: the SDK's `useCheckout` with the web
|
|
3
|
+
* platform ports pre-wired (Stripe confirmer, popup provider page, inline
|
|
4
|
+
* Xendit). ALL the DX (countdown, isBusy, promo/referrer/waiting-list, auto ID
|
|
5
|
+
* verification, the flat snapshot) lives in the SDK's hook, so web and React
|
|
6
|
+
* Native share it — this file only supplies what's browser-specific.
|
|
7
|
+
*
|
|
8
|
+
* configureCheckout({ env: 'PROD', clientId, clientSecret }) // once, at app start
|
|
9
|
+
* const checkout = useCheckout()
|
|
10
|
+
* await checkout.setTickets(eventId, selections)
|
|
11
|
+
* checkout.setBilling(b)
|
|
12
|
+
* await checkout.placeOrder('card') // <CardInput/> rendered
|
|
13
|
+
*/
|
|
14
|
+
import {
|
|
15
|
+
useCheckout as useSharedCheckout,
|
|
16
|
+
type CheckoutOptions,
|
|
17
|
+
type CheckoutPorts,
|
|
18
|
+
type UseCheckout,
|
|
19
|
+
} from 'tf-checkout-shared'
|
|
20
|
+
|
|
21
|
+
import { webConfirmer, webPorts } from './instance'
|
|
22
|
+
|
|
23
|
+
export interface UseCheckoutOptions {
|
|
24
|
+
/** Extra platform ports merged over the web defaults — e.g. MSI's
|
|
25
|
+
* `onInstallmentOffers` picker. Read once, at first render. */
|
|
26
|
+
ports?: Omit<CheckoutPorts, 'confirmer'>
|
|
27
|
+
/** Wallet/redirect engine options (merchant identity, redirect URL). */
|
|
28
|
+
options?: CheckoutOptions
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const useCheckout = (opts: UseCheckoutOptions = {}): UseCheckout =>
|
|
32
|
+
useSharedCheckout({
|
|
33
|
+
ports: { confirmer: webConfirmer, ...webPorts, ...opts.ports },
|
|
34
|
+
options: opts.options,
|
|
35
|
+
})
|