tf-checkout-react 1.7.30 → 2.0.0-beta.0

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.
Files changed (453) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +141 -1033
  3. package/dist/checkout.css +17 -0
  4. package/dist/index.d.mts +3930 -0
  5. package/dist/index.d.ts +3930 -30
  6. package/dist/index.esm.js +9123 -0
  7. package/dist/index.esm.js.map +1 -0
  8. package/dist/index.js +9277 -6
  9. package/dist/index.js.map +1 -0
  10. package/dist/styles/addons.css +75 -0
  11. package/dist/styles/auth.css +294 -0
  12. package/dist/styles/billing.css +98 -0
  13. package/dist/styles/confirmation.css +51 -0
  14. package/dist/styles/foundation.css +146 -0
  15. package/dist/styles/payment.css +179 -0
  16. package/dist/styles/primitives.css +356 -0
  17. package/dist/styles/seat-map.css +46 -0
  18. package/dist/styles/tickets.css +285 -0
  19. package/dist/styles/verification-confirmation.css +258 -0
  20. package/package.json +93 -78
  21. package/src/.d.ts +1 -1
  22. package/src/CardInput.tsx +374 -0
  23. package/src/EmbeddedCheckout.tsx +400 -0
  24. package/src/ResumedCheckout.tsx +132 -0
  25. package/src/auth/AuthModal.tsx +231 -0
  26. package/src/auth/ForgotPasswordForm.tsx +93 -0
  27. package/src/auth/LoginForm.tsx +104 -0
  28. package/src/auth/PasswordInput.tsx +33 -0
  29. package/src/auth/RegisterForm.tsx +333 -0
  30. package/src/auth/ResetPasswordForm.tsx +112 -0
  31. package/src/auth/index.ts +5 -0
  32. package/src/checkout.css +17 -0
  33. package/src/configure.ts +29 -0
  34. package/src/confirmer.ts +439 -0
  35. package/src/index.ts +41 -30
  36. package/src/instance.ts +21 -0
  37. package/src/sections/AddOns.tsx +241 -0
  38. package/src/sections/BillingInfo.tsx +743 -0
  39. package/src/sections/Confirmation.tsx +146 -0
  40. package/src/sections/IDVerification.tsx +76 -0
  41. package/src/sections/OrderConfirmation.tsx +277 -0
  42. package/src/sections/OrderIDVerification.tsx +117 -0
  43. package/src/sections/OrderSummary.tsx +84 -0
  44. package/src/sections/Payment.tsx +541 -0
  45. package/src/sections/SeatMap.tsx +512 -0
  46. package/src/sections/Tickets.tsx +573 -0
  47. package/src/sections/billing/BillingAddressFields.tsx +138 -0
  48. package/src/sections/billing/BuyerField.tsx +75 -0
  49. package/src/sections/billing/TicketHoldersCard.tsx +119 -0
  50. package/src/sections/billing/types.ts +10 -0
  51. package/src/sections/index.ts +15 -0
  52. package/src/sections/seatMap.utils.ts +105 -0
  53. package/src/styles/addons.css +75 -0
  54. package/src/styles/auth.css +294 -0
  55. package/src/styles/billing.css +98 -0
  56. package/src/styles/confirmation.css +51 -0
  57. package/src/styles/foundation.css +146 -0
  58. package/src/styles/payment.css +179 -0
  59. package/src/styles/primitives.css +356 -0
  60. package/src/styles/seat-map.css +46 -0
  61. package/src/styles/tickets.css +285 -0
  62. package/src/styles/verification-confirmation.css +258 -0
  63. package/src/typings.d.ts +2 -2
  64. package/src/ui/Button.tsx +38 -0
  65. package/src/ui/Card.tsx +54 -0
  66. package/src/ui/CheckoutProvider.tsx +172 -0
  67. package/src/ui/CustomFields.tsx +195 -0
  68. package/src/ui/Field.tsx +114 -0
  69. package/src/ui/I18nProvider.tsx +36 -0
  70. package/src/ui/InstallmentPicker.tsx +69 -0
  71. package/src/ui/Loader.tsx +12 -0
  72. package/src/ui/PaymentMethods.tsx +133 -0
  73. package/src/ui/PriceLine.tsx +24 -0
  74. package/src/ui/QuantitySelect.tsx +50 -0
  75. package/src/ui/Stepper.tsx +36 -0
  76. package/src/ui/Timer.tsx +34 -0
  77. package/src/ui/TimerBanner.tsx +55 -0
  78. package/src/ui/cx.ts +3 -0
  79. package/src/ui/index.ts +54 -0
  80. package/src/ui/theme.ts +83 -0
  81. package/src/useCheckout.ts +35 -0
  82. package/src/xendit.ts +438 -0
  83. package/dist/adapters/customFields.d.ts +0 -12
  84. package/dist/adapters/index.d.ts +0 -1
  85. package/dist/api/auth.d.ts +0 -27
  86. package/dist/api/cart.d.ts +0 -2
  87. package/dist/api/checkout.d.ts +0 -3
  88. package/dist/api/common.d.ts +0 -11
  89. package/dist/api/guestTicketDelegation.d.ts +0 -47
  90. package/dist/api/index.d.ts +0 -82
  91. package/dist/api/interceptors.d.ts +0 -1
  92. package/dist/api/orders.d.ts +0 -2
  93. package/dist/api/payment.d.ts +0 -5
  94. package/dist/api/preRegistrationComplete.d.ts +0 -3
  95. package/dist/api/publicRequest.d.ts +0 -9
  96. package/dist/api/resale.d.ts +0 -5
  97. package/dist/components/account-settings/index.d.ts +0 -3
  98. package/dist/components/addonsContainer/AddonComponent.d.ts +0 -18
  99. package/dist/components/addonsContainer/SimpleAddonsContainer.d.ts +0 -20
  100. package/dist/components/addonsContainer/adapters/index.d.ts +0 -12
  101. package/dist/components/addonsContainer/index.d.ts +0 -22
  102. package/dist/components/addonsContainer/normalizers/index.d.ts +0 -1
  103. package/dist/components/addonsContainer/useAddons.d.ts +0 -23
  104. package/dist/components/addonsContainer/utils/index.d.ts +0 -16
  105. package/dist/components/billing-info-container/hooks/index.d.ts +0 -3
  106. package/dist/components/billing-info-container/hooks/usePaymentContext.d.ts +0 -5
  107. package/dist/components/billing-info-container/hooks/usePaymentRedirect.d.ts +0 -14
  108. package/dist/components/billing-info-container/hooks/useStripePayment.d.ts +0 -18
  109. package/dist/components/billing-info-container/index.d.ts +0 -69
  110. package/dist/components/billing-info-container/utils.d.ts +0 -59
  111. package/dist/components/common/Checkbox.d.ts +0 -11
  112. package/dist/components/common/CheckboxField/index.d.ts +0 -9
  113. package/dist/components/common/CopyField.d.ts +0 -12
  114. package/dist/components/common/CopyMessageModal.d.ts +0 -7
  115. package/dist/components/common/CustomField.d.ts +0 -26
  116. package/dist/components/common/DatePickerField.d.ts +0 -20
  117. package/dist/components/common/FieldSection/index.d.ts +0 -19
  118. package/dist/components/common/FieldSection/utils/index.d.ts +0 -8
  119. package/dist/components/common/FormikPhoneNumberField.d.ts +0 -11
  120. package/dist/components/common/Loader.d.ts +0 -2
  121. package/dist/components/common/ModalComponent/index.d.ts +0 -16
  122. package/dist/components/common/NativeSelectFeild/index.d.ts +0 -21
  123. package/dist/components/common/PhoneNumberField.d.ts +0 -14
  124. package/dist/components/common/PoweredBy.d.ts +0 -2
  125. package/dist/components/common/RadioField.d.ts +0 -11
  126. package/dist/components/common/RadioGroupField/index.d.ts +0 -17
  127. package/dist/components/common/RedirectModal.d.ts +0 -7
  128. package/dist/components/common/SelectField/index.d.ts +0 -19
  129. package/dist/components/common/SnackbarAlert.d.ts +0 -13
  130. package/dist/components/common/index.d.ts +0 -11
  131. package/dist/components/common/socials.d.ts +0 -10
  132. package/dist/components/confirmModal/index.d.ts +0 -10
  133. package/dist/components/confirmationContainer/config.d.ts +0 -1
  134. package/dist/components/confirmationContainer/index.d.ts +0 -46
  135. package/dist/components/confirmationContainer/social-buttons.d.ts +0 -16
  136. package/dist/components/countdown/index.d.ts +0 -14
  137. package/dist/components/delegationsContainer/IssueComponent.d.ts +0 -10
  138. package/dist/components/delegationsContainer/IssueTicketForm.d.ts +0 -9
  139. package/dist/components/delegationsContainer/TicketsAssignedTable.d.ts +0 -11
  140. package/dist/components/delegationsContainer/TicketsAvailableTable.d.ts +0 -11
  141. package/dist/components/delegationsContainer/index.d.ts +0 -10
  142. package/dist/components/forgotPasswordModal/index.d.ts +0 -12
  143. package/dist/components/idVerificationContainer/VerificationPendingModal.d.ts +0 -10
  144. package/dist/components/idVerificationContainer/constants.d.ts +0 -21
  145. package/dist/components/idVerificationContainer/index.d.ts +0 -16
  146. package/dist/components/index.d.ts +0 -12
  147. package/dist/components/loginForm/index.d.ts +0 -31
  148. package/dist/components/loginModal/SignUpForm.d.ts +0 -10
  149. package/dist/components/loginModal/constants.d.ts +0 -39
  150. package/dist/components/loginModal/index.d.ts +0 -22
  151. package/dist/components/myTicketsContainer/index.d.ts +0 -16
  152. package/dist/components/myTicketsContainer/row.d.ts +0 -3
  153. package/dist/components/myTicketsContainer/tableConfig.d.ts +0 -5
  154. package/dist/components/orderDetailsContainer/CustomFieldsForm.d.ts +0 -12
  155. package/dist/components/orderDetailsContainer/TicketHolderCustomFields.d.ts +0 -10
  156. package/dist/components/orderDetailsContainer/index.d.ts +0 -66
  157. package/dist/components/orderDetailsContainer/ticketsTable.d.ts +0 -46
  158. package/dist/components/orderDetailsContainer/utils/index.d.ts +0 -6
  159. package/dist/components/paymentContainer/OrderDetails.d.ts +0 -9
  160. package/dist/components/paymentContainer/PaymentPlanSection.d.ts +0 -10
  161. package/dist/components/paymentContainer/handlePayment.d.ts +0 -15
  162. package/dist/components/paymentContainer/index.d.ts +0 -39
  163. package/dist/components/preRegistration/FieldsSection.d.ts +0 -19
  164. package/dist/components/preRegistration/Influancers.d.ts +0 -2
  165. package/dist/components/preRegistration/PreRegistrationComplete.d.ts +0 -13
  166. package/dist/components/preRegistration/PreRegistrationInformations.d.ts +0 -2
  167. package/dist/components/preRegistration/Prewards.d.ts +0 -2
  168. package/dist/components/preRegistration/ShareOptions.d.ts +0 -2
  169. package/dist/components/preRegistration/constants.d.ts +0 -2
  170. package/dist/components/preRegistration/index.d.ts +0 -23
  171. package/dist/components/preRegistration/utils.d.ts +0 -12
  172. package/dist/components/registerForm/adapters/index.d.ts +0 -4
  173. package/dist/components/registerForm/constants.d.ts +0 -1
  174. package/dist/components/registerForm/index.d.ts +0 -16
  175. package/dist/components/registerModal/index.d.ts +0 -12
  176. package/dist/components/resetPasswordContainer/index.d.ts +0 -10
  177. package/dist/components/rsvpContainer/index.d.ts +0 -7
  178. package/dist/components/seatMapContainer/SeatMapComponent.d.ts +0 -8
  179. package/dist/components/seatMapContainer/TicketsSection.d.ts +0 -9
  180. package/dist/components/seatMapContainer/addToCart.d.ts +0 -14
  181. package/dist/components/seatMapContainer/index.d.ts +0 -2
  182. package/dist/components/seatMapContainer/utils.d.ts +0 -6
  183. package/dist/components/signupModal/index.d.ts +0 -12
  184. package/dist/components/ticketResale/index.d.ts +0 -12
  185. package/dist/components/ticketResaleModal/index.d.ts +0 -19
  186. package/dist/components/ticketsContainer/AccessCodeSection.d.ts +0 -7
  187. package/dist/components/ticketsContainer/InfoIcon.d.ts +0 -5
  188. package/dist/components/ticketsContainer/PromoCodeSection.d.ts +0 -15
  189. package/dist/components/ticketsContainer/ReferralLogic.d.ts +0 -5
  190. package/dist/components/ticketsContainer/TicketRow.d.ts +0 -13
  191. package/dist/components/ticketsContainer/TicketsSection.d.ts +0 -20
  192. package/dist/components/ticketsContainer/TimeSlotTicketRow.d.ts +0 -19
  193. package/dist/components/ticketsContainer/TimeSlotsSection.d.ts +0 -25
  194. package/dist/components/ticketsContainer/index.d.ts +0 -93
  195. package/dist/components/ticketsContainer/utils.d.ts +0 -13
  196. package/dist/components/timerWidget/index.d.ts +0 -16
  197. package/dist/components/waitingList/index.d.ts +0 -9
  198. package/dist/constants/index.d.ts +0 -7
  199. package/dist/env.d.ts +0 -16
  200. package/dist/hoc/CustomFields/index.d.ts +0 -3
  201. package/dist/hoc/index.d.ts +0 -1
  202. package/dist/hooks/index.d.ts +0 -1
  203. package/dist/hooks/useCookieListener.d.ts +0 -1
  204. package/dist/hooks/useEventListener.d.ts +0 -1
  205. package/dist/hooks/useLocalStorageListener.d.ts +0 -1
  206. package/dist/hooks/useOnline.d.ts +0 -1
  207. package/dist/hooks/usePixel.d.ts +0 -6
  208. package/dist/images/Polygon.png +0 -0
  209. package/dist/images/cross.svg +0 -44
  210. package/dist/images/done.svg +0 -3
  211. package/dist/images/edit.svg +0 -10
  212. package/dist/images/email.svg +0 -1
  213. package/dist/images/instagram.svg +0 -5
  214. package/dist/images/logo-ttf.png +0 -0
  215. package/dist/images/spotify.svg +0 -6
  216. package/dist/images/user.svg +0 -1
  217. package/dist/images/xmark.svg +0 -92
  218. package/dist/normalizers/index.d.ts +0 -4
  219. package/dist/tf-checkout-react.cjs.development.js +0 -16149
  220. package/dist/tf-checkout-react.cjs.development.js.map +0 -1
  221. package/dist/tf-checkout-react.cjs.production.min.js +0 -2
  222. package/dist/tf-checkout-react.cjs.production.min.js.map +0 -1
  223. package/dist/tf-checkout-react.esm.js +0 -16116
  224. package/dist/tf-checkout-react.esm.js.map +0 -1
  225. package/dist/tf-checkout-styles.css +0 -1
  226. package/dist/types/add_on.d.ts +0 -8
  227. package/dist/types/billing-info-data.d.ts +0 -27
  228. package/dist/types/checkoutPageConfigs.d.ts +0 -13
  229. package/dist/types/index.d.ts +0 -6
  230. package/dist/types/order-data.d.ts +0 -15
  231. package/dist/types/payment-field.d.ts +0 -6
  232. package/dist/types/payment-plan-configuration.d.ts +0 -18
  233. package/dist/types/referral-promotion.d.ts +0 -6
  234. package/dist/types/verification.d.ts +0 -12
  235. package/dist/utils/adaptStripeErrors.d.ts +0 -8
  236. package/dist/utils/auth.d.ts +0 -21
  237. package/dist/utils/cookies.d.ts +0 -3
  238. package/dist/utils/createCheckoutDataBodyWithDefaultHolder.d.ts +0 -23
  239. package/dist/utils/createMarkup.d.ts +0 -3
  240. package/dist/utils/customFields.d.ts +0 -35
  241. package/dist/utils/downloadPDF.d.ts +0 -1
  242. package/dist/utils/form.d.ts +0 -3
  243. package/dist/utils/formikErrorFocus.d.ts +0 -2
  244. package/dist/utils/getDomain.d.ts +0 -1
  245. package/dist/utils/getImage.d.ts +0 -1
  246. package/dist/utils/getQueryVariable.d.ts +0 -1
  247. package/dist/utils/htmlNodeFromString.d.ts +0 -1
  248. package/dist/utils/index.d.ts +0 -15
  249. package/dist/utils/isBrowser.d.ts +0 -1
  250. package/dist/utils/isValidNumber.d.ts +0 -1
  251. package/dist/utils/jsonUtils.d.ts +0 -1
  252. package/dist/utils/replaceVarInString.d.ts +0 -1
  253. package/dist/utils/setConfigs.d.ts +0 -11
  254. package/dist/utils/showZero.d.ts +0 -1
  255. package/dist/validators/index.d.ts +0 -8
  256. package/src/adapters/customFields.ts +0 -85
  257. package/src/adapters/index.ts +0 -1
  258. package/src/api/auth.ts +0 -88
  259. package/src/api/cart.ts +0 -28
  260. package/src/api/checkout.ts +0 -28
  261. package/src/api/common.ts +0 -190
  262. package/src/api/guestTicketDelegation.ts +0 -79
  263. package/src/api/index.ts +0 -346
  264. package/src/api/interceptors.ts +0 -77
  265. package/src/api/orders.ts +0 -30
  266. package/src/api/payment.ts +0 -77
  267. package/src/api/preRegistrationComplete.ts +0 -37
  268. package/src/api/publicRequest.ts +0 -47
  269. package/src/api/resale.ts +0 -28
  270. package/src/assets/images/Polygon.png +0 -0
  271. package/src/assets/images/cross.svg +0 -44
  272. package/src/assets/images/done.svg +0 -3
  273. package/src/assets/images/edit.svg +0 -10
  274. package/src/assets/images/email.svg +0 -1
  275. package/src/assets/images/instagram.svg +0 -5
  276. package/src/assets/images/logo-ttf.png +0 -0
  277. package/src/assets/images/spotify.svg +0 -6
  278. package/src/assets/images/user.svg +0 -1
  279. package/src/assets/images/xmark.svg +0 -92
  280. package/src/components/account-settings/index.tsx +0 -161
  281. package/src/components/account-settings/style.css +0 -200
  282. package/src/components/addonsContainer/AddonComponent.tsx +0 -204
  283. package/src/components/addonsContainer/SimpleAddonsContainer.tsx +0 -459
  284. package/src/components/addonsContainer/adapters/index.tsx +0 -62
  285. package/src/components/addonsContainer/index.tsx +0 -353
  286. package/src/components/addonsContainer/normalizers/index.ts +0 -5
  287. package/src/components/addonsContainer/useAddons.ts +0 -248
  288. package/src/components/addonsContainer/utils/index.tsx +0 -231
  289. package/src/components/billing-info-container/hooks/index.ts +0 -3
  290. package/src/components/billing-info-container/hooks/usePaymentContext.ts +0 -22
  291. package/src/components/billing-info-container/hooks/usePaymentRedirect.ts +0 -145
  292. package/src/components/billing-info-container/hooks/useStripePayment.ts +0 -119
  293. package/src/components/billing-info-container/index.tsx +0 -1695
  294. package/src/components/billing-info-container/style.css +0 -150
  295. package/src/components/billing-info-container/utils.tsx +0 -413
  296. package/src/components/common/Checkbox.tsx +0 -51
  297. package/src/components/common/CheckboxField/index.tsx +0 -41
  298. package/src/components/common/CopyField.tsx +0 -53
  299. package/src/components/common/CopyMessageModal.tsx +0 -34
  300. package/src/components/common/CustomField.tsx +0 -168
  301. package/src/components/common/DatePickerField.tsx +0 -126
  302. package/src/components/common/FieldSection/index.tsx +0 -141
  303. package/src/components/common/FieldSection/utils/index.tsx +0 -92
  304. package/src/components/common/FormikPhoneNumberField.tsx +0 -51
  305. package/src/components/common/Loader.tsx +0 -8
  306. package/src/components/common/ModalComponent/index.tsx +0 -68
  307. package/src/components/common/NativeSelectFeild/index.tsx +0 -86
  308. package/src/components/common/PhoneNumberField.tsx +0 -117
  309. package/src/components/common/PoweredBy.tsx +0 -15
  310. package/src/components/common/RadioField.tsx +0 -36
  311. package/src/components/common/RadioGroupField/index.tsx +0 -76
  312. package/src/components/common/RedirectModal.tsx +0 -43
  313. package/src/components/common/SelectField/index.tsx +0 -104
  314. package/src/components/common/SnackbarAlert.tsx +0 -52
  315. package/src/components/common/index.tsx +0 -11
  316. package/src/components/common/socials.tsx +0 -33
  317. package/src/components/confirmModal/index.tsx +0 -60
  318. package/src/components/confirmationContainer/config.ts +0 -79
  319. package/src/components/confirmationContainer/index.tsx +0 -349
  320. package/src/components/confirmationContainer/social-buttons.tsx +0 -149
  321. package/src/components/confirmationContainer/style.css +0 -206
  322. package/src/components/countdown/index.tsx +0 -100
  323. package/src/components/countdown/style.css +0 -10
  324. package/src/components/delegationsContainer/IssueComponent.tsx +0 -156
  325. package/src/components/delegationsContainer/IssueTicketForm.tsx +0 -109
  326. package/src/components/delegationsContainer/TicketsAssignedTable.tsx +0 -55
  327. package/src/components/delegationsContainer/TicketsAvailableTable.tsx +0 -54
  328. package/src/components/delegationsContainer/index.tsx +0 -83
  329. package/src/components/forgotPasswordModal/index.tsx +0 -138
  330. package/src/components/forgotPasswordModal/style.css +0 -47
  331. package/src/components/idVerificationContainer/VerificationPendingModal.tsx +0 -47
  332. package/src/components/idVerificationContainer/constants.ts +0 -27
  333. package/src/components/idVerificationContainer/index.tsx +0 -323
  334. package/src/components/index.ts +0 -12
  335. package/src/components/loginForm/index.tsx +0 -202
  336. package/src/components/loginModal/SignUpForm.tsx +0 -329
  337. package/src/components/loginModal/constants.ts +0 -46
  338. package/src/components/loginModal/index.tsx +0 -263
  339. package/src/components/loginModal/style.css +0 -116
  340. package/src/components/myTicketsContainer/index.tsx +0 -228
  341. package/src/components/myTicketsContainer/row.tsx +0 -46
  342. package/src/components/myTicketsContainer/style.css +0 -40
  343. package/src/components/myTicketsContainer/tableConfig.tsx +0 -80
  344. package/src/components/myTicketsContainer/types.d.ts +0 -41
  345. package/src/components/orderDetailsContainer/CustomFieldsForm.tsx +0 -75
  346. package/src/components/orderDetailsContainer/TicketHolderCustomFields.tsx +0 -100
  347. package/src/components/orderDetailsContainer/index.tsx +0 -586
  348. package/src/components/orderDetailsContainer/style.css +0 -77
  349. package/src/components/orderDetailsContainer/ticketsTable.tsx +0 -246
  350. package/src/components/orderDetailsContainer/utils/index.tsx +0 -55
  351. package/src/components/paymentContainer/OrderDetails.tsx +0 -277
  352. package/src/components/paymentContainer/PaymentPlanSection.tsx +0 -169
  353. package/src/components/paymentContainer/handlePayment.ts +0 -86
  354. package/src/components/paymentContainer/index.tsx +0 -643
  355. package/src/components/paymentContainer/style.css +0 -196
  356. package/src/components/preRegistration/FieldsSection.tsx +0 -150
  357. package/src/components/preRegistration/Influancers.tsx +0 -34
  358. package/src/components/preRegistration/PreRegistrationComplete.tsx +0 -186
  359. package/src/components/preRegistration/PreRegistrationInformations.tsx +0 -60
  360. package/src/components/preRegistration/Prewards.tsx +0 -41
  361. package/src/components/preRegistration/ShareOptions.tsx +0 -77
  362. package/src/components/preRegistration/constants.tsx +0 -169
  363. package/src/components/preRegistration/index.tsx +0 -330
  364. package/src/components/preRegistration/style.css +0 -3
  365. package/src/components/preRegistration/utils.ts +0 -163
  366. package/src/components/registerForm/adapters/index.tsx +0 -10
  367. package/src/components/registerForm/constants.tsx +0 -98
  368. package/src/components/registerForm/index.tsx +0 -188
  369. package/src/components/registerModal/index.tsx +0 -154
  370. package/src/components/registerModal/style.css +0 -18
  371. package/src/components/resetPasswordContainer/index.tsx +0 -102
  372. package/src/components/resetPasswordContainer/style.css +0 -36
  373. package/src/components/rsvpContainer/index.tsx +0 -126
  374. package/src/components/seatMapContainer/SeatMapComponent.tsx +0 -77
  375. package/src/components/seatMapContainer/TicketsSection.tsx +0 -286
  376. package/src/components/seatMapContainer/addToCart.ts +0 -66
  377. package/src/components/seatMapContainer/index.tsx +0 -443
  378. package/src/components/seatMapContainer/utils.ts +0 -133
  379. package/src/components/signupModal/index.tsx +0 -178
  380. package/src/components/signupModal/style.css +0 -58
  381. package/src/components/ticketResale/index.tsx +0 -86
  382. package/src/components/ticketResaleModal/index.tsx +0 -224
  383. package/src/components/ticketResaleModal/style.css +0 -28
  384. package/src/components/ticketsContainer/AccessCodeSection.tsx +0 -50
  385. package/src/components/ticketsContainer/InfoIcon.tsx +0 -35
  386. package/src/components/ticketsContainer/PromoCodeSection.tsx +0 -116
  387. package/src/components/ticketsContainer/ReferralLogic.tsx +0 -33
  388. package/src/components/ticketsContainer/TicketRow.tsx +0 -107
  389. package/src/components/ticketsContainer/TicketsSection.tsx +0 -350
  390. package/src/components/ticketsContainer/TimeSlotTicketRow.tsx +0 -243
  391. package/src/components/ticketsContainer/TimeSlotsSection.tsx +0 -194
  392. package/src/components/ticketsContainer/index.tsx +0 -986
  393. package/src/components/ticketsContainer/style.css +0 -178
  394. package/src/components/ticketsContainer/utils.ts +0 -35
  395. package/src/components/timerWidget/index.tsx +0 -97
  396. package/src/components/timerWidget/style.css +0 -35
  397. package/src/components/waitingList/index.tsx +0 -190
  398. package/src/components/waitingList/style.css +0 -27
  399. package/src/constants/index.ts +0 -3
  400. package/src/env.ts +0 -29
  401. package/src/hoc/CustomFields/index.tsx +0 -85
  402. package/src/hoc/index.ts +0 -1
  403. package/src/hooks/index.ts +0 -1
  404. package/src/hooks/useCookieListener.ts +0 -32
  405. package/src/hooks/useEventListener.ts +0 -32
  406. package/src/hooks/useLocalStorageListener.ts +0 -32
  407. package/src/hooks/useOnline.ts +0 -21
  408. package/src/hooks/usePixel.ts +0 -88
  409. package/src/normalizers/index.ts +0 -49
  410. package/src/types/add_on.ts +0 -8
  411. package/src/types/api/auth.d.ts +0 -63
  412. package/src/types/api/axiosResponse.d.ts +0 -6
  413. package/src/types/api/cart.d.ts +0 -73
  414. package/src/types/api/checkout.d.ts +0 -92
  415. package/src/types/api/common.d.ts +0 -153
  416. package/src/types/api/guestTicketDelegation.d.ts +0 -18
  417. package/src/types/api/orders.d.ts +0 -116
  418. package/src/types/api/payment.d.ts +0 -180
  419. package/src/types/api/preRegistration.d.ts +0 -11
  420. package/src/types/api/preRegistrationComplete.d.ts +0 -95
  421. package/src/types/api/ticketResale.d.ts +0 -13
  422. package/src/types/billing-info-data.ts +0 -37
  423. package/src/types/checkoutPageConfigs.ts +0 -13
  424. package/src/types/formFields.d.ts +0 -29
  425. package/src/types/index.ts +0 -6
  426. package/src/types/order-data.ts +0 -16
  427. package/src/types/payment-field.ts +0 -7
  428. package/src/types/payment-plan-configuration.ts +0 -19
  429. package/src/types/pre-registration-complete.d.ts +0 -47
  430. package/src/types/referral-promotion.ts +0 -7
  431. package/src/types/seatMap.d.ts +0 -159
  432. package/src/types/verification.ts +0 -12
  433. package/src/utils/adaptStripeErrors.ts +0 -26
  434. package/src/utils/auth.ts +0 -45
  435. package/src/utils/cookies.ts +0 -73
  436. package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +0 -81
  437. package/src/utils/createMarkup.ts +0 -1
  438. package/src/utils/customFields.ts +0 -80
  439. package/src/utils/downloadPDF.tsx +0 -42
  440. package/src/utils/form.ts +0 -34
  441. package/src/utils/formikErrorFocus.ts +0 -24
  442. package/src/utils/getDomain.ts +0 -21
  443. package/src/utils/getImage.ts +0 -14
  444. package/src/utils/getQueryVariable.ts +0 -13
  445. package/src/utils/htmlNodeFromString.ts +0 -6
  446. package/src/utils/index.ts +0 -15
  447. package/src/utils/isBrowser.ts +0 -2
  448. package/src/utils/isValidNumber.ts +0 -8
  449. package/src/utils/jsonUtils.ts +0 -8
  450. package/src/utils/replaceVarInString.ts +0 -9
  451. package/src/utils/setConfigs.ts +0 -24
  452. package/src/utils/showZero.tsx +0 -10
  453. package/src/validators/index.ts +0 -61
@@ -0,0 +1,138 @@
1
+ import React, { type Dispatch, type FC, type SetStateAction } from 'react'
2
+
3
+ import { Field, FieldRow, Input, Select } from '../../ui/Field'
4
+ import type { BillingDraft, BillingFieldError, LocationOption } from './types'
5
+
6
+ interface BillingAddressFieldsProps {
7
+ billing: BillingDraft
8
+ countries: LocationOption[]
9
+ states: LocationOption[]
10
+ fieldError: BillingFieldError
11
+ setBilling: Dispatch<SetStateAction<BillingDraft>>
12
+ }
13
+
14
+ /** Address fields shared by the embedded and stepped billing experiences. */
15
+ export const BillingAddressFields: FC<BillingAddressFieldsProps> = ({
16
+ billing,
17
+ countries,
18
+ states,
19
+ fieldError,
20
+ setBilling,
21
+ }) => {
22
+ const setValue =
23
+ (key: keyof BillingDraft) => (event: React.ChangeEvent<HTMLInputElement>) =>
24
+ setBilling((current) => ({ ...current, [key]: event.target.value }))
25
+
26
+ return (
27
+ <>
28
+ <div className="tf-checkout-billing__section-label">Billing address *</div>
29
+ <Field
30
+ error={fieldError('Street address', 'Street address is required.')}
31
+ invalid={Boolean(fieldError('Street address'))}
32
+ >
33
+ <Input
34
+ placeholder="Street address *"
35
+ autoComplete="street-address"
36
+ value={billing.streetAddress ?? ''}
37
+ required
38
+ invalid={Boolean(fieldError('Street address'))}
39
+ aria-invalid={Boolean(fieldError('Street address'))}
40
+ onChange={setValue('streetAddress')}
41
+ />
42
+ </Field>
43
+ <FieldRow>
44
+ <Field
45
+ error={fieldError('City', 'City is required.')}
46
+ invalid={Boolean(fieldError('City'))}
47
+ >
48
+ <Input
49
+ placeholder="City *"
50
+ autoComplete="address-level2"
51
+ value={billing.city ?? ''}
52
+ required
53
+ invalid={Boolean(fieldError('City'))}
54
+ aria-invalid={Boolean(fieldError('City'))}
55
+ onChange={setValue('city')}
56
+ />
57
+ </Field>
58
+ <Field
59
+ error={fieldError('ZIP / postcode', 'ZIP / postcode is required.')}
60
+ invalid={Boolean(fieldError('ZIP / postcode'))}
61
+ >
62
+ <Input
63
+ placeholder="ZIP / Postcode *"
64
+ autoComplete="postal-code"
65
+ value={billing.zip ?? ''}
66
+ required
67
+ invalid={Boolean(fieldError('ZIP / postcode'))}
68
+ aria-invalid={Boolean(fieldError('ZIP / postcode'))}
69
+ onChange={setValue('zip')}
70
+ />
71
+ </Field>
72
+ </FieldRow>
73
+ <FieldRow>
74
+ <Field
75
+ error={fieldError('Country', 'Country is required.')}
76
+ invalid={Boolean(fieldError('Country'))}
77
+ >
78
+ <Select
79
+ value={billing.countryId ?? ''}
80
+ aria-label="Country"
81
+ required
82
+ invalid={Boolean(fieldError('Country'))}
83
+ aria-invalid={Boolean(fieldError('Country'))}
84
+ onChange={(event) => {
85
+ const country = countries.find(
86
+ (candidate) => String(candidate.id) === event.target.value
87
+ )
88
+ setBilling((current) => ({
89
+ ...current,
90
+ countryId: event.target.value,
91
+ countryCode: country?.code?.toUpperCase(),
92
+ stateId: undefined,
93
+ stateCode: undefined,
94
+ }))
95
+ }}
96
+ >
97
+ <option value="">— country * —</option>
98
+ {countries.map((country) => (
99
+ <option key={country.id} value={country.id}>
100
+ {country.name}
101
+ </option>
102
+ ))}
103
+ </Select>
104
+ </Field>
105
+ <Field
106
+ error={fieldError('State / county', 'State / county is required.')}
107
+ invalid={Boolean(fieldError('State / county'))}
108
+ >
109
+ <Select
110
+ value={billing.stateId ?? ''}
111
+ disabled={!billing.countryId || states.length === 0}
112
+ aria-label="State / region"
113
+ required={states.length > 0}
114
+ invalid={Boolean(fieldError('State / county'))}
115
+ aria-invalid={Boolean(fieldError('State / county'))}
116
+ onChange={(event) => {
117
+ const state = states.find(
118
+ (candidate) => String(candidate.id) === event.target.value
119
+ )
120
+ setBilling((current) => ({
121
+ ...current,
122
+ stateId: event.target.value,
123
+ stateCode: state?.code,
124
+ }))
125
+ }}
126
+ >
127
+ <option value="">— state / county{states.length > 0 ? ' *' : ''} —</option>
128
+ {states.map((state) => (
129
+ <option key={state.id} value={state.id}>
130
+ {state.name}
131
+ </option>
132
+ ))}
133
+ </Select>
134
+ </Field>
135
+ </FieldRow>
136
+ </>
137
+ )
138
+ }
@@ -0,0 +1,75 @@
1
+ import React, { type FC, type ReactNode } from 'react'
2
+
3
+ import type { BuyerFieldSpec } from 'tf-checkout-shared'
4
+
5
+ import { Field, Input, Select } from '../../ui/Field'
6
+ import type { LocationOption } from './types'
7
+
8
+ interface BuyerFieldProps {
9
+ field: BuyerFieldSpec
10
+ value: string
11
+ countries: LocationOption[]
12
+ error?: ReactNode
13
+ onChange: (value: string) => void
14
+ }
15
+
16
+ /** Renders one backend-configured buyer field without owning form state. */
17
+ export const BuyerField: FC<BuyerFieldProps> = ({
18
+ field,
19
+ value,
20
+ countries,
21
+ error,
22
+ onChange,
23
+ }) => {
24
+ const label = `${field.label}${field.required ? ' *' : ''}`
25
+ const invalid = error !== undefined && error !== null
26
+
27
+ if (field.kind === 'gender') {
28
+ return (
29
+ <Field label={label} error={error} invalid={invalid}>
30
+ <Select
31
+ value={value}
32
+ invalid={invalid}
33
+ aria-invalid={invalid}
34
+ onChange={(event) => onChange(event.target.value)}
35
+ >
36
+ <option value="">— select —</option>
37
+ <option value="M">Male</option>
38
+ <option value="F">Female</option>
39
+ </Select>
40
+ </Field>
41
+ )
42
+ }
43
+
44
+ if (field.kind === 'nationality') {
45
+ return (
46
+ <Field label={label} error={error} invalid={invalid}>
47
+ <Select
48
+ value={value}
49
+ invalid={invalid}
50
+ aria-invalid={invalid}
51
+ onChange={(event) => onChange(event.target.value)}
52
+ >
53
+ <option value="">— select —</option>
54
+ {countries.map((country) => (
55
+ <option key={country.id} value={country.id}>
56
+ {country.name}
57
+ </option>
58
+ ))}
59
+ </Select>
60
+ </Field>
61
+ )
62
+ }
63
+
64
+ return (
65
+ <Field label={label} error={error} invalid={invalid}>
66
+ <Input
67
+ placeholder="@handle or profile URL"
68
+ value={value}
69
+ invalid={invalid}
70
+ aria-invalid={invalid}
71
+ onChange={(event) => onChange(event.target.value)}
72
+ />
73
+ </Field>
74
+ )
75
+ }
@@ -0,0 +1,119 @@
1
+ import React, { type FC, type ReactNode } from 'react'
2
+ import { PhoneInput, type CountryIso2 } from 'react-international-phone'
3
+
4
+ import { Card, SectionHeader } from '../../ui/Card'
5
+ import { Field, FieldRow, Input } from '../../ui/Field'
6
+ import type { BillingFieldError, HolderDraft } from './types'
7
+
8
+ interface TicketHoldersCardProps {
9
+ holders: HolderDraft[]
10
+ holderNamesRequired: boolean
11
+ collectHolderContact: boolean
12
+ phoneCountry: CountryIso2
13
+ fieldError: BillingFieldError
14
+ renderCustomFields: (holder: HolderDraft, index: number) => ReactNode
15
+ patchHolder: (index: number, patch: Partial<HolderDraft>) => void
16
+ }
17
+
18
+ /** Ticket-holder card kept separate from buyer billing for parity and reuse. */
19
+ export const TicketHoldersCard: FC<TicketHoldersCardProps> = ({
20
+ holders,
21
+ holderNamesRequired,
22
+ collectHolderContact,
23
+ phoneCountry,
24
+ fieldError,
25
+ renderCustomFields,
26
+ patchHolder,
27
+ }) => (
28
+ <Card className="tf-checkout-billing__holders-card">
29
+ <SectionHeader title="Ticket Holders" />
30
+ {holders.map((holder, index) => {
31
+ const firstNameKey = `Ticket ${index + 1} holder first name`
32
+ const lastNameKey = `Ticket ${index + 1} holder last name`
33
+ const emailKey = `Ticket ${index + 1} holder email`
34
+ const phoneKey = `Ticket ${index + 1} holder phone`
35
+
36
+ return (
37
+ <div key={index} className="tf-checkout-billing__holder">
38
+ <div className="tf-checkout-billing__holder-title">Ticket {index + 1}</div>
39
+ {holderNamesRequired && (
40
+ <FieldRow>
41
+ <Field
42
+ label="First Name *"
43
+ error={fieldError(firstNameKey, 'First name is required.')}
44
+ invalid={Boolean(fieldError(firstNameKey))}
45
+ >
46
+ <Input
47
+ value={holder.firstName}
48
+ required
49
+ invalid={Boolean(fieldError(firstNameKey))}
50
+ aria-invalid={Boolean(fieldError(firstNameKey))}
51
+ onChange={(event) =>
52
+ patchHolder(index, { firstName: event.target.value })
53
+ }
54
+ />
55
+ </Field>
56
+ <Field
57
+ label="Last Name *"
58
+ error={fieldError(lastNameKey, 'Last name is required.')}
59
+ invalid={Boolean(fieldError(lastNameKey))}
60
+ >
61
+ <Input
62
+ value={holder.lastName}
63
+ required
64
+ invalid={Boolean(fieldError(lastNameKey))}
65
+ aria-invalid={Boolean(fieldError(lastNameKey))}
66
+ onChange={(event) =>
67
+ patchHolder(index, { lastName: event.target.value })
68
+ }
69
+ />
70
+ </Field>
71
+ </FieldRow>
72
+ )}
73
+ {collectHolderContact && (
74
+ <FieldRow>
75
+ <Field
76
+ label="Email Address *"
77
+ error={fieldError(emailKey, 'Enter a valid email address.')}
78
+ invalid={Boolean(fieldError(emailKey))}
79
+ >
80
+ <Input
81
+ type="email"
82
+ autoComplete="email"
83
+ value={holder.email}
84
+ required
85
+ invalid={Boolean(fieldError(emailKey))}
86
+ aria-invalid={Boolean(fieldError(emailKey))}
87
+ onChange={(event) => patchHolder(index, { email: event.target.value })}
88
+ />
89
+ </Field>
90
+ <Field
91
+ label="Phone *"
92
+ error={fieldError(phoneKey, 'Enter a valid phone number.')}
93
+ invalid={Boolean(fieldError(phoneKey))}
94
+ >
95
+ <PhoneInput
96
+ className="tf-checkout-phone"
97
+ inputClassName={`tf-checkout-input tf-checkout-phone__input${
98
+ fieldError(phoneKey) ? ' tf-checkout-input--invalid' : ''
99
+ }`}
100
+ defaultCountry={phoneCountry}
101
+ disableDialCodePrefill
102
+ value={holder.phone}
103
+ required
104
+ inputProps={{
105
+ autoComplete: 'tel',
106
+ 'aria-label': phoneKey,
107
+ 'aria-invalid': Boolean(fieldError(phoneKey)),
108
+ }}
109
+ onChange={(phone) => patchHolder(index, { phone })}
110
+ />
111
+ </Field>
112
+ </FieldRow>
113
+ )}
114
+ {renderCustomFields(holder, index)}
115
+ </div>
116
+ )
117
+ })}
118
+ </Card>
119
+ )
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The billing form shapes now live in the SDK so web and native share one
3
+ * model. Re-exported here to keep `./billing/types` imports working.
4
+ */
5
+ export type {
6
+ BillingDraft,
7
+ HolderDraft,
8
+ LocationOption,
9
+ BillingFieldError,
10
+ } from 'tf-checkout-shared'
@@ -0,0 +1,15 @@
1
+ /** Checkout section components — composable, context-driven, themed. */
2
+ export { Tickets, type TicketsProps } from './Tickets'
3
+ export { SeatMap, type SeatMapProps } from './SeatMap'
4
+ export { AddOns, type AddOnsProps } from './AddOns'
5
+ export {
6
+ BillingInfo,
7
+ type BillingInfoProps,
8
+ type CheckoutPrivacyPolicy,
9
+ } from './BillingInfo'
10
+ export { Payment, type PaymentProps } from './Payment'
11
+ export { OrderSummary, type OrderSummaryProps } from './OrderSummary'
12
+ export { IDVerification, type IDVerificationProps } from './IDVerification'
13
+ export { Confirmation, type ConfirmationProps } from './Confirmation'
14
+ export { OrderConfirmation, type OrderConfirmationProps } from './OrderConfirmation'
15
+ export { OrderIDVerification, type OrderIDVerificationProps } from './OrderIDVerification'
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Seat-wire helpers — a faithful port of the legacy `seatMapContainer/utils.ts`
3
+ * (the real seat-map logic), rewritten in dependency-free TS. These translate
4
+ * the `seat-map-data` + `seats/status` responses into the shapes `<SeatMap/>`
5
+ * and the `tf-seat-map-view` widget need.
6
+ */
7
+
8
+ /** `{ [tierId]: { [ticketTypeId]: Relation } }` — from `seat-map-data`. */
9
+ export interface SeatRelation {
10
+ ticket_type_id: string
11
+ ticket_type_option: string
12
+ ticket_type_price: number
13
+ ticket_type_name: string
14
+ ticket_type_min_number_of_guests?: string | number | null
15
+ ticket_type_max_number_of_guests?: string | number | null
16
+ ticket_type_deposit?: string
17
+ guest_price?: string
18
+ fee_included?: boolean
19
+ description?: string | null
20
+ }
21
+ export type TierRelations = Record<string, Record<string, SeatRelation>>
22
+
23
+ /** `{ [groupRowId]: { [seatIndex]: statusCode } }` — from `seats/status`. */
24
+ export type SeatStatuses = Record<string, Record<string, string>>
25
+
26
+ /** `seat-map-data`'s `eventSeats` — used only to resolve seatId → tierId. */
27
+ export interface EventSeatLike {
28
+ tier_id: number | string
29
+ seats: Record<string, number>
30
+ }
31
+
32
+ /** A seat the buyer holds: its id + resolved tier. */
33
+ export interface ReservedSeat {
34
+ seatId: string
35
+ tierId: string
36
+ }
37
+
38
+ /** Statuses the widget won't let the buyer act on (blocked / reserved-by-others). */
39
+ export const UNSELECTABLE_STATUSES = new Set(['B', 'R', 'BLOCKED', 'RE'])
40
+
41
+ /** Max seats a single order may hold (legacy cap). */
42
+ export const MAX_SEATS = 10
43
+
44
+ /**
45
+ * `seatId` (`"rowId:seatIndex"`) → its tier id, by finding the `eventSeats`
46
+ * group whose `seats[rowId]` covers `seatIndex`. Port of legacy
47
+ * `getTierIdBasedOnSeatId`.
48
+ */
49
+ export const getTierIdBasedOnSeatId = (
50
+ seatId: string,
51
+ eventSeats: EventSeatLike[]
52
+ ): string => {
53
+ const [rowId, seatIndex] = seatId.split(':')
54
+ for (const group of eventSeats ?? []) {
55
+ for (const [row, count] of Object.entries(group.seats ?? {})) {
56
+ if (row === rowId && Number(seatIndex) <= Number(count)) {
57
+ return String(group.tier_id)
58
+ }
59
+ }
60
+ }
61
+ return ''
62
+ }
63
+
64
+ /**
65
+ * Statuses → the seat ids the buyer currently OWNS (status `'OR'`). Also rewrites
66
+ * `'H'` (held by someone else) to `'BLOCKED'` so the widget greys it out — the
67
+ * mutation the legacy container did in place. Pass a status object you own
68
+ * (freshly fetched), not shared React state.
69
+ */
70
+ export const getOwnReservationsBasedOnStatuses = (statuses: SeatStatuses): string[] => {
71
+ const own: string[] = []
72
+ for (const groupRowId of Object.keys(statuses ?? {})) {
73
+ const row = statuses[groupRowId]
74
+ for (const seatIndex of Object.keys(row ?? {})) {
75
+ if (row[seatIndex] === 'OR') own.push(`${groupRowId}:${seatIndex}`)
76
+ else if (row[seatIndex] === 'H') row[seatIndex] = 'BLOCKED'
77
+ }
78
+ }
79
+ return own
80
+ }
81
+
82
+ /**
83
+ * Tier→type relations → the flat relation array the `tf-seat-map-view` widget
84
+ * wants (its prop is the legacy-typo'd `ticketTypeTireRelationsArray`). Port of
85
+ * legacy `getTierRelationsArray`.
86
+ */
87
+ export const getTierRelationsArray = (relations: TierRelations): SeatRelation[] => {
88
+ const out: SeatRelation[] = []
89
+ for (const tier of Object.values(relations ?? {})) out.push(...Object.values(tier))
90
+ return out
91
+ }
92
+
93
+ /** The ticket types a tier offers (dropdown options for its seats). */
94
+ export const ticketTypesForTier = (
95
+ relations: TierRelations,
96
+ tierId: string
97
+ ): SeatRelation[] => (relations[tierId] ? Object.values(relations[tierId]) : [])
98
+
99
+ /** Whether a relation is guest-capable (a table / group ticket): it declares a
100
+ * real min AND max guest count. Only then does a SeatLine carry `guests`. */
101
+ export const isGuestCapable = (rel: SeatRelation | undefined): boolean => {
102
+ const min = Number(rel?.ticket_type_min_number_of_guests)
103
+ const max = Number(rel?.ticket_type_max_number_of_guests)
104
+ return Boolean(min && max)
105
+ }
@@ -0,0 +1,75 @@
1
+ /* ============================ Add-ons section ============================ */
2
+ .tf-checkout-addons__head {
3
+ display: flex;
4
+ align-items: baseline;
5
+ gap: var(--tf-checkout-space-3);
6
+ margin-bottom: 2px;
7
+ }
8
+ .tf-checkout-addons__eyebrow {
9
+ font-size: 12px;
10
+ font-weight: 600;
11
+ color: var(--tf-checkout-muted);
12
+ }
13
+ .tf-checkout-addons__heading {
14
+ font-size: 17px;
15
+ font-weight: 700;
16
+ letter-spacing: -0.01em;
17
+ flex: 1;
18
+ }
19
+ .tf-checkout-addons__skip {
20
+ border: 0;
21
+ background: transparent;
22
+ color: var(--tf-checkout-accent);
23
+ font: inherit;
24
+ font-weight: 600;
25
+ cursor: pointer;
26
+ padding: 4px 6px;
27
+ }
28
+ .tf-checkout-addons__subtitle {
29
+ font-size: 13px;
30
+ color: var(--tf-checkout-muted);
31
+ margin-bottom: var(--tf-checkout-space-3);
32
+ }
33
+ .tf-checkout-addons__group {
34
+ margin: var(--tf-checkout-space-3) 0 var(--tf-checkout-space-2);
35
+ font-size: 13px;
36
+ font-weight: 700;
37
+ letter-spacing: 0.02em;
38
+ text-transform: uppercase;
39
+ color: var(--tf-checkout-muted);
40
+ }
41
+ .tf-checkout-addons__item {
42
+ padding: var(--tf-checkout-space-3) 0;
43
+ border-bottom: 1px solid var(--tf-checkout-border);
44
+ }
45
+ .tf-checkout-addons__row {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: var(--tf-checkout-space-3);
49
+ }
50
+ .tf-checkout-addons__info {
51
+ flex: 1;
52
+ min-width: 0;
53
+ }
54
+ .tf-checkout-addons__name {
55
+ font-weight: 600;
56
+ font-size: 15px;
57
+ }
58
+ .tf-checkout-addons__req {
59
+ font-weight: 600;
60
+ font-size: 12px;
61
+ color: var(--tf-checkout-accent);
62
+ }
63
+ .tf-checkout-addons__meta {
64
+ margin-top: 2px;
65
+ }
66
+ .tf-checkout-addons__desc {
67
+ margin-top: 4px;
68
+ font-size: 13px;
69
+ color: var(--tf-checkout-muted);
70
+ }
71
+ .tf-checkout-addons__fields {
72
+ margin-top: var(--tf-checkout-space-3);
73
+ padding-left: var(--tf-checkout-space-3);
74
+ border-left: 2px solid var(--tf-checkout-border);
75
+ }