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.
Files changed (454) 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 +3946 -0
  5. package/dist/index.d.ts +3946 -30
  6. package/dist/index.esm.js +9176 -0
  7. package/dist/index.esm.js.map +1 -0
  8. package/dist/index.js +9330 -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 +238 -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 +790 -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 +557 -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 +124 -0
  50. package/src/sections/billing/fieldRules.ts +43 -0
  51. package/src/sections/billing/types.ts +10 -0
  52. package/src/sections/index.ts +15 -0
  53. package/src/sections/seatMap.utils.ts +105 -0
  54. package/src/styles/addons.css +75 -0
  55. package/src/styles/auth.css +294 -0
  56. package/src/styles/billing.css +98 -0
  57. package/src/styles/confirmation.css +51 -0
  58. package/src/styles/foundation.css +146 -0
  59. package/src/styles/payment.css +179 -0
  60. package/src/styles/primitives.css +356 -0
  61. package/src/styles/seat-map.css +46 -0
  62. package/src/styles/tickets.css +285 -0
  63. package/src/styles/verification-confirmation.css +258 -0
  64. package/src/typings.d.ts +2 -2
  65. package/src/ui/Button.tsx +38 -0
  66. package/src/ui/Card.tsx +54 -0
  67. package/src/ui/CheckoutProvider.tsx +172 -0
  68. package/src/ui/CustomFields.tsx +195 -0
  69. package/src/ui/Field.tsx +114 -0
  70. package/src/ui/I18nProvider.tsx +36 -0
  71. package/src/ui/InstallmentPicker.tsx +69 -0
  72. package/src/ui/Loader.tsx +12 -0
  73. package/src/ui/PaymentMethods.tsx +133 -0
  74. package/src/ui/PriceLine.tsx +24 -0
  75. package/src/ui/QuantitySelect.tsx +50 -0
  76. package/src/ui/Stepper.tsx +36 -0
  77. package/src/ui/Timer.tsx +34 -0
  78. package/src/ui/TimerBanner.tsx +55 -0
  79. package/src/ui/cx.ts +3 -0
  80. package/src/ui/index.ts +54 -0
  81. package/src/ui/theme.ts +83 -0
  82. package/src/useCheckout.ts +35 -0
  83. package/src/xendit.ts +438 -0
  84. package/dist/adapters/customFields.d.ts +0 -12
  85. package/dist/adapters/index.d.ts +0 -1
  86. package/dist/api/auth.d.ts +0 -27
  87. package/dist/api/cart.d.ts +0 -2
  88. package/dist/api/checkout.d.ts +0 -3
  89. package/dist/api/common.d.ts +0 -11
  90. package/dist/api/guestTicketDelegation.d.ts +0 -47
  91. package/dist/api/index.d.ts +0 -82
  92. package/dist/api/interceptors.d.ts +0 -1
  93. package/dist/api/orders.d.ts +0 -2
  94. package/dist/api/payment.d.ts +0 -5
  95. package/dist/api/preRegistrationComplete.d.ts +0 -3
  96. package/dist/api/publicRequest.d.ts +0 -9
  97. package/dist/api/resale.d.ts +0 -5
  98. package/dist/components/account-settings/index.d.ts +0 -3
  99. package/dist/components/addonsContainer/AddonComponent.d.ts +0 -18
  100. package/dist/components/addonsContainer/SimpleAddonsContainer.d.ts +0 -20
  101. package/dist/components/addonsContainer/adapters/index.d.ts +0 -12
  102. package/dist/components/addonsContainer/index.d.ts +0 -22
  103. package/dist/components/addonsContainer/normalizers/index.d.ts +0 -1
  104. package/dist/components/addonsContainer/useAddons.d.ts +0 -23
  105. package/dist/components/addonsContainer/utils/index.d.ts +0 -16
  106. package/dist/components/billing-info-container/hooks/index.d.ts +0 -3
  107. package/dist/components/billing-info-container/hooks/usePaymentContext.d.ts +0 -5
  108. package/dist/components/billing-info-container/hooks/usePaymentRedirect.d.ts +0 -14
  109. package/dist/components/billing-info-container/hooks/useStripePayment.d.ts +0 -18
  110. package/dist/components/billing-info-container/index.d.ts +0 -69
  111. package/dist/components/billing-info-container/utils.d.ts +0 -59
  112. package/dist/components/common/Checkbox.d.ts +0 -11
  113. package/dist/components/common/CheckboxField/index.d.ts +0 -9
  114. package/dist/components/common/CopyField.d.ts +0 -12
  115. package/dist/components/common/CopyMessageModal.d.ts +0 -7
  116. package/dist/components/common/CustomField.d.ts +0 -26
  117. package/dist/components/common/DatePickerField.d.ts +0 -20
  118. package/dist/components/common/FieldSection/index.d.ts +0 -19
  119. package/dist/components/common/FieldSection/utils/index.d.ts +0 -8
  120. package/dist/components/common/FormikPhoneNumberField.d.ts +0 -11
  121. package/dist/components/common/Loader.d.ts +0 -2
  122. package/dist/components/common/ModalComponent/index.d.ts +0 -16
  123. package/dist/components/common/NativeSelectFeild/index.d.ts +0 -21
  124. package/dist/components/common/PhoneNumberField.d.ts +0 -14
  125. package/dist/components/common/PoweredBy.d.ts +0 -2
  126. package/dist/components/common/RadioField.d.ts +0 -11
  127. package/dist/components/common/RadioGroupField/index.d.ts +0 -17
  128. package/dist/components/common/RedirectModal.d.ts +0 -7
  129. package/dist/components/common/SelectField/index.d.ts +0 -19
  130. package/dist/components/common/SnackbarAlert.d.ts +0 -13
  131. package/dist/components/common/index.d.ts +0 -11
  132. package/dist/components/common/socials.d.ts +0 -10
  133. package/dist/components/confirmModal/index.d.ts +0 -10
  134. package/dist/components/confirmationContainer/config.d.ts +0 -1
  135. package/dist/components/confirmationContainer/index.d.ts +0 -46
  136. package/dist/components/confirmationContainer/social-buttons.d.ts +0 -16
  137. package/dist/components/countdown/index.d.ts +0 -14
  138. package/dist/components/delegationsContainer/IssueComponent.d.ts +0 -10
  139. package/dist/components/delegationsContainer/IssueTicketForm.d.ts +0 -9
  140. package/dist/components/delegationsContainer/TicketsAssignedTable.d.ts +0 -11
  141. package/dist/components/delegationsContainer/TicketsAvailableTable.d.ts +0 -11
  142. package/dist/components/delegationsContainer/index.d.ts +0 -10
  143. package/dist/components/forgotPasswordModal/index.d.ts +0 -12
  144. package/dist/components/idVerificationContainer/VerificationPendingModal.d.ts +0 -10
  145. package/dist/components/idVerificationContainer/constants.d.ts +0 -21
  146. package/dist/components/idVerificationContainer/index.d.ts +0 -16
  147. package/dist/components/index.d.ts +0 -12
  148. package/dist/components/loginForm/index.d.ts +0 -31
  149. package/dist/components/loginModal/SignUpForm.d.ts +0 -10
  150. package/dist/components/loginModal/constants.d.ts +0 -39
  151. package/dist/components/loginModal/index.d.ts +0 -22
  152. package/dist/components/myTicketsContainer/index.d.ts +0 -16
  153. package/dist/components/myTicketsContainer/row.d.ts +0 -3
  154. package/dist/components/myTicketsContainer/tableConfig.d.ts +0 -5
  155. package/dist/components/orderDetailsContainer/CustomFieldsForm.d.ts +0 -12
  156. package/dist/components/orderDetailsContainer/TicketHolderCustomFields.d.ts +0 -10
  157. package/dist/components/orderDetailsContainer/index.d.ts +0 -66
  158. package/dist/components/orderDetailsContainer/ticketsTable.d.ts +0 -46
  159. package/dist/components/orderDetailsContainer/utils/index.d.ts +0 -6
  160. package/dist/components/paymentContainer/OrderDetails.d.ts +0 -9
  161. package/dist/components/paymentContainer/PaymentPlanSection.d.ts +0 -10
  162. package/dist/components/paymentContainer/handlePayment.d.ts +0 -15
  163. package/dist/components/paymentContainer/index.d.ts +0 -39
  164. package/dist/components/preRegistration/FieldsSection.d.ts +0 -19
  165. package/dist/components/preRegistration/Influancers.d.ts +0 -2
  166. package/dist/components/preRegistration/PreRegistrationComplete.d.ts +0 -13
  167. package/dist/components/preRegistration/PreRegistrationInformations.d.ts +0 -2
  168. package/dist/components/preRegistration/Prewards.d.ts +0 -2
  169. package/dist/components/preRegistration/ShareOptions.d.ts +0 -2
  170. package/dist/components/preRegistration/constants.d.ts +0 -2
  171. package/dist/components/preRegistration/index.d.ts +0 -23
  172. package/dist/components/preRegistration/utils.d.ts +0 -12
  173. package/dist/components/registerForm/adapters/index.d.ts +0 -4
  174. package/dist/components/registerForm/constants.d.ts +0 -1
  175. package/dist/components/registerForm/index.d.ts +0 -16
  176. package/dist/components/registerModal/index.d.ts +0 -12
  177. package/dist/components/resetPasswordContainer/index.d.ts +0 -10
  178. package/dist/components/rsvpContainer/index.d.ts +0 -7
  179. package/dist/components/seatMapContainer/SeatMapComponent.d.ts +0 -8
  180. package/dist/components/seatMapContainer/TicketsSection.d.ts +0 -9
  181. package/dist/components/seatMapContainer/addToCart.d.ts +0 -14
  182. package/dist/components/seatMapContainer/index.d.ts +0 -2
  183. package/dist/components/seatMapContainer/utils.d.ts +0 -6
  184. package/dist/components/signupModal/index.d.ts +0 -12
  185. package/dist/components/ticketResale/index.d.ts +0 -12
  186. package/dist/components/ticketResaleModal/index.d.ts +0 -19
  187. package/dist/components/ticketsContainer/AccessCodeSection.d.ts +0 -7
  188. package/dist/components/ticketsContainer/InfoIcon.d.ts +0 -5
  189. package/dist/components/ticketsContainer/PromoCodeSection.d.ts +0 -15
  190. package/dist/components/ticketsContainer/ReferralLogic.d.ts +0 -5
  191. package/dist/components/ticketsContainer/TicketRow.d.ts +0 -13
  192. package/dist/components/ticketsContainer/TicketsSection.d.ts +0 -20
  193. package/dist/components/ticketsContainer/TimeSlotTicketRow.d.ts +0 -19
  194. package/dist/components/ticketsContainer/TimeSlotsSection.d.ts +0 -25
  195. package/dist/components/ticketsContainer/index.d.ts +0 -93
  196. package/dist/components/ticketsContainer/utils.d.ts +0 -13
  197. package/dist/components/timerWidget/index.d.ts +0 -16
  198. package/dist/components/waitingList/index.d.ts +0 -9
  199. package/dist/constants/index.d.ts +0 -7
  200. package/dist/env.d.ts +0 -16
  201. package/dist/hoc/CustomFields/index.d.ts +0 -3
  202. package/dist/hoc/index.d.ts +0 -1
  203. package/dist/hooks/index.d.ts +0 -1
  204. package/dist/hooks/useCookieListener.d.ts +0 -1
  205. package/dist/hooks/useEventListener.d.ts +0 -1
  206. package/dist/hooks/useLocalStorageListener.d.ts +0 -1
  207. package/dist/hooks/useOnline.d.ts +0 -1
  208. package/dist/hooks/usePixel.d.ts +0 -6
  209. package/dist/images/Polygon.png +0 -0
  210. package/dist/images/cross.svg +0 -44
  211. package/dist/images/done.svg +0 -3
  212. package/dist/images/edit.svg +0 -10
  213. package/dist/images/email.svg +0 -1
  214. package/dist/images/instagram.svg +0 -5
  215. package/dist/images/logo-ttf.png +0 -0
  216. package/dist/images/spotify.svg +0 -6
  217. package/dist/images/user.svg +0 -1
  218. package/dist/images/xmark.svg +0 -92
  219. package/dist/normalizers/index.d.ts +0 -4
  220. package/dist/tf-checkout-react.cjs.development.js +0 -16149
  221. package/dist/tf-checkout-react.cjs.development.js.map +0 -1
  222. package/dist/tf-checkout-react.cjs.production.min.js +0 -2
  223. package/dist/tf-checkout-react.cjs.production.min.js.map +0 -1
  224. package/dist/tf-checkout-react.esm.js +0 -16116
  225. package/dist/tf-checkout-react.esm.js.map +0 -1
  226. package/dist/tf-checkout-styles.css +0 -1
  227. package/dist/types/add_on.d.ts +0 -8
  228. package/dist/types/billing-info-data.d.ts +0 -27
  229. package/dist/types/checkoutPageConfigs.d.ts +0 -13
  230. package/dist/types/index.d.ts +0 -6
  231. package/dist/types/order-data.d.ts +0 -15
  232. package/dist/types/payment-field.d.ts +0 -6
  233. package/dist/types/payment-plan-configuration.d.ts +0 -18
  234. package/dist/types/referral-promotion.d.ts +0 -6
  235. package/dist/types/verification.d.ts +0 -12
  236. package/dist/utils/adaptStripeErrors.d.ts +0 -8
  237. package/dist/utils/auth.d.ts +0 -21
  238. package/dist/utils/cookies.d.ts +0 -3
  239. package/dist/utils/createCheckoutDataBodyWithDefaultHolder.d.ts +0 -23
  240. package/dist/utils/createMarkup.d.ts +0 -3
  241. package/dist/utils/customFields.d.ts +0 -35
  242. package/dist/utils/downloadPDF.d.ts +0 -1
  243. package/dist/utils/form.d.ts +0 -3
  244. package/dist/utils/formikErrorFocus.d.ts +0 -2
  245. package/dist/utils/getDomain.d.ts +0 -1
  246. package/dist/utils/getImage.d.ts +0 -1
  247. package/dist/utils/getQueryVariable.d.ts +0 -1
  248. package/dist/utils/htmlNodeFromString.d.ts +0 -1
  249. package/dist/utils/index.d.ts +0 -15
  250. package/dist/utils/isBrowser.d.ts +0 -1
  251. package/dist/utils/isValidNumber.d.ts +0 -1
  252. package/dist/utils/jsonUtils.d.ts +0 -1
  253. package/dist/utils/replaceVarInString.d.ts +0 -1
  254. package/dist/utils/setConfigs.d.ts +0 -11
  255. package/dist/utils/showZero.d.ts +0 -1
  256. package/dist/validators/index.d.ts +0 -8
  257. package/src/adapters/customFields.ts +0 -85
  258. package/src/adapters/index.ts +0 -1
  259. package/src/api/auth.ts +0 -88
  260. package/src/api/cart.ts +0 -28
  261. package/src/api/checkout.ts +0 -28
  262. package/src/api/common.ts +0 -190
  263. package/src/api/guestTicketDelegation.ts +0 -79
  264. package/src/api/index.ts +0 -346
  265. package/src/api/interceptors.ts +0 -77
  266. package/src/api/orders.ts +0 -30
  267. package/src/api/payment.ts +0 -77
  268. package/src/api/preRegistrationComplete.ts +0 -37
  269. package/src/api/publicRequest.ts +0 -47
  270. package/src/api/resale.ts +0 -28
  271. package/src/assets/images/Polygon.png +0 -0
  272. package/src/assets/images/cross.svg +0 -44
  273. package/src/assets/images/done.svg +0 -3
  274. package/src/assets/images/edit.svg +0 -10
  275. package/src/assets/images/email.svg +0 -1
  276. package/src/assets/images/instagram.svg +0 -5
  277. package/src/assets/images/logo-ttf.png +0 -0
  278. package/src/assets/images/spotify.svg +0 -6
  279. package/src/assets/images/user.svg +0 -1
  280. package/src/assets/images/xmark.svg +0 -92
  281. package/src/components/account-settings/index.tsx +0 -161
  282. package/src/components/account-settings/style.css +0 -200
  283. package/src/components/addonsContainer/AddonComponent.tsx +0 -204
  284. package/src/components/addonsContainer/SimpleAddonsContainer.tsx +0 -459
  285. package/src/components/addonsContainer/adapters/index.tsx +0 -62
  286. package/src/components/addonsContainer/index.tsx +0 -353
  287. package/src/components/addonsContainer/normalizers/index.ts +0 -5
  288. package/src/components/addonsContainer/useAddons.ts +0 -248
  289. package/src/components/addonsContainer/utils/index.tsx +0 -231
  290. package/src/components/billing-info-container/hooks/index.ts +0 -3
  291. package/src/components/billing-info-container/hooks/usePaymentContext.ts +0 -22
  292. package/src/components/billing-info-container/hooks/usePaymentRedirect.ts +0 -145
  293. package/src/components/billing-info-container/hooks/useStripePayment.ts +0 -119
  294. package/src/components/billing-info-container/index.tsx +0 -1695
  295. package/src/components/billing-info-container/style.css +0 -150
  296. package/src/components/billing-info-container/utils.tsx +0 -413
  297. package/src/components/common/Checkbox.tsx +0 -51
  298. package/src/components/common/CheckboxField/index.tsx +0 -41
  299. package/src/components/common/CopyField.tsx +0 -53
  300. package/src/components/common/CopyMessageModal.tsx +0 -34
  301. package/src/components/common/CustomField.tsx +0 -168
  302. package/src/components/common/DatePickerField.tsx +0 -126
  303. package/src/components/common/FieldSection/index.tsx +0 -141
  304. package/src/components/common/FieldSection/utils/index.tsx +0 -92
  305. package/src/components/common/FormikPhoneNumberField.tsx +0 -51
  306. package/src/components/common/Loader.tsx +0 -8
  307. package/src/components/common/ModalComponent/index.tsx +0 -68
  308. package/src/components/common/NativeSelectFeild/index.tsx +0 -86
  309. package/src/components/common/PhoneNumberField.tsx +0 -117
  310. package/src/components/common/PoweredBy.tsx +0 -15
  311. package/src/components/common/RadioField.tsx +0 -36
  312. package/src/components/common/RadioGroupField/index.tsx +0 -76
  313. package/src/components/common/RedirectModal.tsx +0 -43
  314. package/src/components/common/SelectField/index.tsx +0 -104
  315. package/src/components/common/SnackbarAlert.tsx +0 -52
  316. package/src/components/common/index.tsx +0 -11
  317. package/src/components/common/socials.tsx +0 -33
  318. package/src/components/confirmModal/index.tsx +0 -60
  319. package/src/components/confirmationContainer/config.ts +0 -79
  320. package/src/components/confirmationContainer/index.tsx +0 -349
  321. package/src/components/confirmationContainer/social-buttons.tsx +0 -149
  322. package/src/components/confirmationContainer/style.css +0 -206
  323. package/src/components/countdown/index.tsx +0 -100
  324. package/src/components/countdown/style.css +0 -10
  325. package/src/components/delegationsContainer/IssueComponent.tsx +0 -156
  326. package/src/components/delegationsContainer/IssueTicketForm.tsx +0 -109
  327. package/src/components/delegationsContainer/TicketsAssignedTable.tsx +0 -55
  328. package/src/components/delegationsContainer/TicketsAvailableTable.tsx +0 -54
  329. package/src/components/delegationsContainer/index.tsx +0 -83
  330. package/src/components/forgotPasswordModal/index.tsx +0 -138
  331. package/src/components/forgotPasswordModal/style.css +0 -47
  332. package/src/components/idVerificationContainer/VerificationPendingModal.tsx +0 -47
  333. package/src/components/idVerificationContainer/constants.ts +0 -27
  334. package/src/components/idVerificationContainer/index.tsx +0 -323
  335. package/src/components/index.ts +0 -12
  336. package/src/components/loginForm/index.tsx +0 -202
  337. package/src/components/loginModal/SignUpForm.tsx +0 -329
  338. package/src/components/loginModal/constants.ts +0 -46
  339. package/src/components/loginModal/index.tsx +0 -263
  340. package/src/components/loginModal/style.css +0 -116
  341. package/src/components/myTicketsContainer/index.tsx +0 -228
  342. package/src/components/myTicketsContainer/row.tsx +0 -46
  343. package/src/components/myTicketsContainer/style.css +0 -40
  344. package/src/components/myTicketsContainer/tableConfig.tsx +0 -80
  345. package/src/components/myTicketsContainer/types.d.ts +0 -41
  346. package/src/components/orderDetailsContainer/CustomFieldsForm.tsx +0 -75
  347. package/src/components/orderDetailsContainer/TicketHolderCustomFields.tsx +0 -100
  348. package/src/components/orderDetailsContainer/index.tsx +0 -586
  349. package/src/components/orderDetailsContainer/style.css +0 -77
  350. package/src/components/orderDetailsContainer/ticketsTable.tsx +0 -246
  351. package/src/components/orderDetailsContainer/utils/index.tsx +0 -55
  352. package/src/components/paymentContainer/OrderDetails.tsx +0 -277
  353. package/src/components/paymentContainer/PaymentPlanSection.tsx +0 -169
  354. package/src/components/paymentContainer/handlePayment.ts +0 -86
  355. package/src/components/paymentContainer/index.tsx +0 -643
  356. package/src/components/paymentContainer/style.css +0 -196
  357. package/src/components/preRegistration/FieldsSection.tsx +0 -150
  358. package/src/components/preRegistration/Influancers.tsx +0 -34
  359. package/src/components/preRegistration/PreRegistrationComplete.tsx +0 -186
  360. package/src/components/preRegistration/PreRegistrationInformations.tsx +0 -60
  361. package/src/components/preRegistration/Prewards.tsx +0 -41
  362. package/src/components/preRegistration/ShareOptions.tsx +0 -77
  363. package/src/components/preRegistration/constants.tsx +0 -169
  364. package/src/components/preRegistration/index.tsx +0 -330
  365. package/src/components/preRegistration/style.css +0 -3
  366. package/src/components/preRegistration/utils.ts +0 -163
  367. package/src/components/registerForm/adapters/index.tsx +0 -10
  368. package/src/components/registerForm/constants.tsx +0 -98
  369. package/src/components/registerForm/index.tsx +0 -188
  370. package/src/components/registerModal/index.tsx +0 -154
  371. package/src/components/registerModal/style.css +0 -18
  372. package/src/components/resetPasswordContainer/index.tsx +0 -102
  373. package/src/components/resetPasswordContainer/style.css +0 -36
  374. package/src/components/rsvpContainer/index.tsx +0 -126
  375. package/src/components/seatMapContainer/SeatMapComponent.tsx +0 -77
  376. package/src/components/seatMapContainer/TicketsSection.tsx +0 -286
  377. package/src/components/seatMapContainer/addToCart.ts +0 -66
  378. package/src/components/seatMapContainer/index.tsx +0 -443
  379. package/src/components/seatMapContainer/utils.ts +0 -133
  380. package/src/components/signupModal/index.tsx +0 -178
  381. package/src/components/signupModal/style.css +0 -58
  382. package/src/components/ticketResale/index.tsx +0 -86
  383. package/src/components/ticketResaleModal/index.tsx +0 -224
  384. package/src/components/ticketResaleModal/style.css +0 -28
  385. package/src/components/ticketsContainer/AccessCodeSection.tsx +0 -50
  386. package/src/components/ticketsContainer/InfoIcon.tsx +0 -35
  387. package/src/components/ticketsContainer/PromoCodeSection.tsx +0 -116
  388. package/src/components/ticketsContainer/ReferralLogic.tsx +0 -33
  389. package/src/components/ticketsContainer/TicketRow.tsx +0 -107
  390. package/src/components/ticketsContainer/TicketsSection.tsx +0 -350
  391. package/src/components/ticketsContainer/TimeSlotTicketRow.tsx +0 -243
  392. package/src/components/ticketsContainer/TimeSlotsSection.tsx +0 -194
  393. package/src/components/ticketsContainer/index.tsx +0 -986
  394. package/src/components/ticketsContainer/style.css +0 -178
  395. package/src/components/ticketsContainer/utils.ts +0 -35
  396. package/src/components/timerWidget/index.tsx +0 -97
  397. package/src/components/timerWidget/style.css +0 -35
  398. package/src/components/waitingList/index.tsx +0 -190
  399. package/src/components/waitingList/style.css +0 -27
  400. package/src/constants/index.ts +0 -3
  401. package/src/env.ts +0 -29
  402. package/src/hoc/CustomFields/index.tsx +0 -85
  403. package/src/hoc/index.ts +0 -1
  404. package/src/hooks/index.ts +0 -1
  405. package/src/hooks/useCookieListener.ts +0 -32
  406. package/src/hooks/useEventListener.ts +0 -32
  407. package/src/hooks/useLocalStorageListener.ts +0 -32
  408. package/src/hooks/useOnline.ts +0 -21
  409. package/src/hooks/usePixel.ts +0 -88
  410. package/src/normalizers/index.ts +0 -49
  411. package/src/types/add_on.ts +0 -8
  412. package/src/types/api/auth.d.ts +0 -63
  413. package/src/types/api/axiosResponse.d.ts +0 -6
  414. package/src/types/api/cart.d.ts +0 -73
  415. package/src/types/api/checkout.d.ts +0 -92
  416. package/src/types/api/common.d.ts +0 -153
  417. package/src/types/api/guestTicketDelegation.d.ts +0 -18
  418. package/src/types/api/orders.d.ts +0 -116
  419. package/src/types/api/payment.d.ts +0 -180
  420. package/src/types/api/preRegistration.d.ts +0 -11
  421. package/src/types/api/preRegistrationComplete.d.ts +0 -95
  422. package/src/types/api/ticketResale.d.ts +0 -13
  423. package/src/types/billing-info-data.ts +0 -37
  424. package/src/types/checkoutPageConfigs.ts +0 -13
  425. package/src/types/formFields.d.ts +0 -29
  426. package/src/types/index.ts +0 -6
  427. package/src/types/order-data.ts +0 -16
  428. package/src/types/payment-field.ts +0 -7
  429. package/src/types/payment-plan-configuration.ts +0 -19
  430. package/src/types/pre-registration-complete.d.ts +0 -47
  431. package/src/types/referral-promotion.ts +0 -7
  432. package/src/types/seatMap.d.ts +0 -159
  433. package/src/types/verification.ts +0 -12
  434. package/src/utils/adaptStripeErrors.ts +0 -26
  435. package/src/utils/auth.ts +0 -45
  436. package/src/utils/cookies.ts +0 -73
  437. package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +0 -81
  438. package/src/utils/createMarkup.ts +0 -1
  439. package/src/utils/customFields.ts +0 -80
  440. package/src/utils/downloadPDF.tsx +0 -42
  441. package/src/utils/form.ts +0 -34
  442. package/src/utils/formikErrorFocus.ts +0 -24
  443. package/src/utils/getDomain.ts +0 -21
  444. package/src/utils/getImage.ts +0 -14
  445. package/src/utils/getQueryVariable.ts +0 -13
  446. package/src/utils/htmlNodeFromString.ts +0 -6
  447. package/src/utils/index.ts +0 -15
  448. package/src/utils/isBrowser.ts +0 -2
  449. package/src/utils/isValidNumber.ts +0 -8
  450. package/src/utils/jsonUtils.ts +0 -8
  451. package/src/utils/replaceVarInString.ts +0 -9
  452. package/src/utils/setConfigs.ts +0 -24
  453. package/src/utils/showZero.tsx +0 -10
  454. 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,124 @@
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
+ // Matches the buyer phone field in ../BillingInfo.tsx — see
102
+ // the note there on why the dial code must stay out of the
103
+ // input.
104
+ disableDialCodeAndPrefix
105
+ showDisabledDialCodeAndPrefix
106
+ disableDialCodePrefill
107
+ value={holder.phone}
108
+ required
109
+ inputProps={{
110
+ autoComplete: 'tel',
111
+ 'aria-label': phoneKey,
112
+ 'aria-invalid': Boolean(fieldError(phoneKey)),
113
+ }}
114
+ onChange={(phone) => patchHolder(index, { phone })}
115
+ />
116
+ </Field>
117
+ </FieldRow>
118
+ )}
119
+ {renderCustomFields(holder, index)}
120
+ </div>
121
+ )
122
+ })}
123
+ </Card>
124
+ )
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Small value rules shared by the billing form's inputs. They live here rather
3
+ * than in `../BillingInfo.tsx` so that file stays inside the checkout
4
+ * architecture budget, and because each one encodes a non-obvious constraint
5
+ * worth stating once.
6
+ */
7
+
8
+ /**
9
+ * The phone control keeps the dial code outside the input, so it reports a bare
10
+ * `"+52"` the moment it mounts — before the buyer has typed anything. A string
11
+ * that short is a country prefix, not a number, so treat it as blank: it must
12
+ * not out-rank a saved profile number, and it must never reach the API as a
13
+ * phone in its own right.
14
+ */
15
+ export const isBlankPhone = (phone?: string) =>
16
+ !phone || /^\+?\d{0,4}$/.test(phone.trim())
17
+
18
+ /** Earliest date of birth the form accepts. Nobody alive predates it. */
19
+ export const DOB_MIN = '1900-01-01'
20
+
21
+ /**
22
+ * Today as `yyyy-mm-dd` in the buyer's own timezone. Built from the local
23
+ * calendar parts rather than `toISOString()`, which would roll over to
24
+ * tomorrow's date for anyone east of Greenwich late in the day.
25
+ */
26
+ export const todayISO = () => {
27
+ const now = new Date()
28
+ return [
29
+ now.getFullYear(),
30
+ String(now.getMonth() + 1).padStart(2, '0'),
31
+ String(now.getDate()).padStart(2, '0'),
32
+ ].join('-')
33
+ }
34
+
35
+ /** `dobDay/dobMonth/dobYear` → the `yyyy-mm-dd` a date input expects. */
36
+ export const toDateInputValue = (
37
+ year?: number,
38
+ month?: number,
39
+ day?: number
40
+ ): string | undefined =>
41
+ year && month && day
42
+ ? `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`
43
+ : undefined
@@ -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
+ }