tf-checkout-react-native 2.0.0-beta.18 → 2.0.0-beta.19

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/dist/index.mjs CHANGED
@@ -2446,6 +2446,8 @@ import { useQueryClient as useQueryClient14 } from "@tanstack/react-query";
2446
2446
  import { useEffect as useEffect22, useRef as useRef27, useState as useState29 } from "react";
2447
2447
  import { useEffect as useEffect23, useRef as useRef28, useState as useState30 } from "react";
2448
2448
  import { useQueryClient as useQueryClient15 } from "@tanstack/react-query";
2449
+ import { useQueryClient as useQueryClient16 } from "@tanstack/react-query";
2450
+ import { useCallback as useCallback14, useEffect as useEffect24, useMemo as useMemo16, useSyncExternalStore as useSyncExternalStore20 } from "react";
2449
2451
  var __defProp = Object.defineProperty;
2450
2452
  var __export = (target, all) => {
2451
2453
  for (var name in all)
@@ -8521,6 +8523,27 @@ var waitingListEntryFrom = (definition, draft) => {
8521
8523
  quantity
8522
8524
  };
8523
8525
  };
8526
+ var calendarTicketRows = (base, dated) => {
8527
+ const ids = new Set(dated.map((ticket) => ticket.id));
8528
+ return [
8529
+ ...dated,
8530
+ ...base.filter((ticket) => ticket.isRegularTicket === true && !ids.has(ticket.id))
8531
+ ];
8532
+ };
8533
+ var catalogDate = (selected, dates) => {
8534
+ var _a2;
8535
+ return dates.includes(selected) ? selected : (_a2 = dates[0]) != null ? _a2 : "";
8536
+ };
8537
+ var catalogQuantities = (previous, tickets) => {
8538
+ const next = {};
8539
+ for (const ticket of tickets) {
8540
+ const quantity = previous[ticket.id];
8541
+ const range = ticketQuantityRange(ticket);
8542
+ if (quantity > 0 && !ticket.soldOut && ticket.salesStarted && !ticket.salesEnded && quantity >= range.min && quantity <= range.max && quantity % range.step === 0)
8543
+ next[ticket.id] = quantity;
8544
+ }
8545
+ return Object.keys(previous).length === Object.keys(next).length && Object.keys(next).every((id2) => previous[id2] === next[id2]) ? previous : next;
8546
+ };
8524
8547
  var initialSnapshot = () => ({
8525
8548
  status: "idle",
8526
8549
  selections: [],
@@ -9958,6 +9981,7 @@ var mapTicket = (t) => {
9958
9981
  var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
9959
9982
  return {
9960
9983
  id: String(t.id),
9984
+ isRegularTicket: typeof t.isRegularTicket === "boolean" ? t.isRegularTicket : void 0,
9961
9985
  name: (_a2 = t.displayName) != null ? _a2 : "",
9962
9986
  groupName: (_c = (_b = t.groupName) != null ? _b : t.group_name) != null ? _c : null,
9963
9987
  optionName: (_d = t.optionName) != null ? _d : "",
@@ -10047,7 +10071,8 @@ var getEventInfo = async (eventId, pk) => {
10047
10071
  var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
10048
10072
  await sdkSeatSessionHeaders(eventId);
10049
10073
  const body3 = await get(ENDPOINTS.events.info(eventId), {
10050
- params: pk ? { pk } : void 0
10074
+ params: pk ? { pk } : void 0,
10075
+ tfCatalogContext: true
10051
10076
  });
10052
10077
  const attributes6 = (_b = (_a2 = body3 == null ? void 0 : body3.data) == null ? void 0 : _a2.attributes) != null ? _b : {};
10053
10078
  const a = attributes6;
@@ -10286,7 +10311,11 @@ var getEventBundles = async (eventId) => {
10286
10311
  };
10287
10312
  var submitPromoCode = async (eventId, promo) => {
10288
10313
  await sdkSeatSessionHeaders(eventId);
10289
- await post(ENDPOINTS.events.promo(eventId), { promo: promo.trim() });
10314
+ await post(
10315
+ ENDPOINTS.events.promo(eventId),
10316
+ { promo: promo.trim() },
10317
+ { tfCatalogContext: true }
10318
+ );
10290
10319
  };
10291
10320
  var setEventCurrency = async (eventId, code, options) => {
10292
10321
  var _a2;
@@ -14845,6 +14874,7 @@ __export(hooks_exports, {
14845
14874
  useSubmitPrizeDetails: () => useSubmitPrizeDetails,
14846
14875
  useTicketCardForm: () => useTicketCardForm,
14847
14876
  useTicketCardOwner: () => useTicketCardOwner,
14877
+ useTicketCatalog: () => useTicketCatalog,
14848
14878
  useTicketChange: () => useTicketChange,
14849
14879
  useTicketChangeOptions: () => useTicketChangeOptions,
14850
14880
  useTicketGatewayWait: () => useTicketGatewayWait,
@@ -15795,7 +15825,7 @@ var useCatalogQuery = (options) => {
15795
15825
  } : queryFn
15796
15826
  });
15797
15827
  };
15798
- var useEvent = (eventId, options) => useSessionQuery({
15828
+ var useEvent = (eventId, options) => useCatalogQuery({
15799
15829
  queryKey: ttfKeys.event(eventId != null ? eventId : ""),
15800
15830
  queryFn: () => ttf.events.info(eventId),
15801
15831
  enabled: Boolean(eventId),
@@ -21407,6 +21437,154 @@ var useAccountEmailEnrichment = (options = {}) => {
21407
21437
  }
21408
21438
  };
21409
21439
  };
21440
+ var EMPTY_DATES = [];
21441
+ var EMPTY_TICKETS = [];
21442
+ var useTicketCatalog = (eventId, explicitDates) => {
21443
+ var _a2, _b, _c, _d;
21444
+ const queryClient = useQueryClient16();
21445
+ const account = useSyncExternalStore20(subscribeSession, getSessionCacheScope, () => 0);
21446
+ const revision = useSyncExternalStore20(
21447
+ subscribeSession,
21448
+ getCatalogContextRevision,
21449
+ () => 0
21450
+ );
21451
+ const assertOwner = useMemo16(captureSessionAction, [account]);
21452
+ const actionSubject = JSON.stringify([eventId, account]);
21453
+ const action = useLiveScope(actionSubject);
21454
+ const subject = JSON.stringify([eventId, account, revision]);
21455
+ const { live, instance: instance2 } = useLiveScope(subject);
21456
+ const current5 = useCallback14(() => {
21457
+ try {
21458
+ assertOwner();
21459
+ return revision === getCatalogContextRevision() && instance2 !== null && live.current() === instance2;
21460
+ } catch (e) {
21461
+ return false;
21462
+ }
21463
+ }, [assertOwner, revision, instance2, live]);
21464
+ const capturePrimeContinuation = () => {
21465
+ const pin = getCartPinRevision();
21466
+ return () => {
21467
+ try {
21468
+ assertOwner();
21469
+ if (action.instance === null || action.live.current() !== action.instance)
21470
+ return false;
21471
+ if (current5()) return true;
21472
+ return getCartPinRevision() > pin && getCartGuestToken() !== null && getEffectiveGuestCarrier() === getCartGuestToken();
21473
+ } catch (e) {
21474
+ return false;
21475
+ }
21476
+ };
21477
+ };
21478
+ const [qty, updateQty] = useScopedState(subject, {});
21479
+ const [slotDate, updateDate] = useScopedState(subject, "");
21480
+ const [refreshing, setRefreshing] = useScopedState(subject, false);
21481
+ const eventQuery = useEvent(eventId);
21482
+ const ticketsQuery = useTicketsWithMeta(eventId);
21483
+ const eventInfo = eventQuery.data;
21484
+ const isTimeSlot = Boolean((explicitDates == null ? void 0 : explicitDates.length) || (eventInfo == null ? void 0 : eventInfo.isTimeSlotEvent));
21485
+ const dates = (_a2 = explicitDates != null ? explicitDates : eventInfo == null ? void 0 : eventInfo.availableDates) != null ? _a2 : EMPTY_DATES;
21486
+ const slotQuery = useTimeSlotTickets(eventId, isTimeSlot ? slotDate : void 0);
21487
+ const { tickets, datedTickets, regularTickets } = useMemo16(() => {
21488
+ var _a3, _b2, _c2;
21489
+ if (!eventInfo && explicitDates === void 0)
21490
+ return {
21491
+ tickets: EMPTY_TICKETS,
21492
+ datedTickets: EMPTY_TICKETS,
21493
+ regularTickets: EMPTY_TICKETS
21494
+ };
21495
+ const base = (_b2 = (_a3 = ticketsQuery.data) == null ? void 0 : _a3.tickets) != null ? _b2 : EMPTY_TICKETS;
21496
+ if (!isTimeSlot)
21497
+ return { tickets: base, datedTickets: EMPTY_TICKETS, regularTickets: EMPTY_TICKETS };
21498
+ const dated = (_c2 = slotQuery.data) != null ? _c2 : EMPTY_TICKETS;
21499
+ const rows2 = calendarTicketRows(base, dated);
21500
+ return {
21501
+ tickets: rows2,
21502
+ datedTickets: dated,
21503
+ regularTickets: rows2.slice(dated.length)
21504
+ };
21505
+ }, [eventInfo, explicitDates, isTimeSlot, (_b = ticketsQuery.data) == null ? void 0 : _b.tickets, slotQuery.data]);
21506
+ useEffect24(() => {
21507
+ if (!current5()) return;
21508
+ const next = isTimeSlot ? catalogDate(slotDate, dates) : "";
21509
+ if (next !== slotDate) updateDate(next);
21510
+ updateQty((previous) => catalogQuantities(previous, tickets));
21511
+ }, [current5, isTimeSlot, slotDate, dates, tickets, updateDate, updateQty]);
21512
+ const setQty = useCallback14(
21513
+ (update) => {
21514
+ if (current5()) updateQty(update);
21515
+ },
21516
+ [current5, updateQty]
21517
+ );
21518
+ const setSlotDate = useCallback14(
21519
+ (date) => {
21520
+ if (current5() && dates.includes(date)) updateDate(date);
21521
+ },
21522
+ [current5, dates, updateDate]
21523
+ );
21524
+ const { refetch: refetchInfo } = eventQuery;
21525
+ const { refetch: refetchTickets } = ticketsQuery;
21526
+ const refetchCatalog = useCallback14(async () => {
21527
+ if (!current5()) return;
21528
+ setRefreshing(true);
21529
+ try {
21530
+ await Promise.all([
21531
+ refetchInfo({ throwOnError: true }),
21532
+ refetchTickets({ throwOnError: true })
21533
+ ]);
21534
+ if (!current5()) return;
21535
+ await queryClient.invalidateQueries(
21536
+ {
21537
+ predicate: (query) => {
21538
+ const key5 = query.queryKey;
21539
+ const prefix = [...ttfKeys.tickets(eventId), "slots"];
21540
+ return prefix.every((part, index) => key5[index] === part) && key5.some(
21541
+ (part) => !!part && typeof part === "object" && part.tfCatalogContext === revision
21542
+ ) && key5.some(
21543
+ (part) => !!part && typeof part === "object" && part.tfSessionScope === account
21544
+ );
21545
+ },
21546
+ refetchType: "active"
21547
+ },
21548
+ { throwOnError: true }
21549
+ );
21550
+ if (!current5()) return;
21551
+ } finally {
21552
+ if (current5()) setRefreshing(false);
21553
+ }
21554
+ }, [
21555
+ current5,
21556
+ refetchInfo,
21557
+ refetchTickets,
21558
+ setRefreshing,
21559
+ queryClient,
21560
+ eventId,
21561
+ revision,
21562
+ account
21563
+ ]);
21564
+ return {
21565
+ scope: subject,
21566
+ capturePrimeContinuation,
21567
+ attributionReady: !!eventInfo && !!ticketsQuery.data && !eventQuery.isFetching && !ticketsQuery.isFetching,
21568
+ ticketsQuery,
21569
+ eventInfo,
21570
+ slotQuery,
21571
+ tickets,
21572
+ datedTickets,
21573
+ regularTickets,
21574
+ dates,
21575
+ slotDate,
21576
+ isTimeSlot,
21577
+ setSlotDate,
21578
+ qty,
21579
+ setQty,
21580
+ current: current5,
21581
+ instance: instance2,
21582
+ refetchCatalog,
21583
+ busy: refreshing || eventQuery.isFetching || ticketsQuery.isFetching || isTimeSlot && !!slotDate && slotQuery.isFetching,
21584
+ isLoading: eventQuery.isLoading || ticketsQuery.isLoading || isTimeSlot && !!slotDate && slotQuery.isLoading,
21585
+ error: (_d = (_c = eventQuery.error) != null ? _c : ticketsQuery.error) != null ? _d : isTimeSlot ? slotQuery.error : null
21586
+ };
21587
+ };
21410
21588
  var accountEn = {
21411
21589
  "account.add_an_email_address": "Add an email address",
21412
21590
  "account.email_address": "Email address",
@@ -23795,26 +23973,26 @@ var translateAccountMessage = (translate2, english, vars) => {
23795
23973
  import { useState as useState35 } from "react";
23796
23974
 
23797
23975
  // src/CardInput.tsx
23798
- import { useEffect as useEffect26, useRef as useRef29, useState as useState34 } from "react";
23976
+ import { useEffect as useEffect27, useRef as useRef29, useState as useState34 } from "react";
23799
23977
  import { Platform, StyleSheet as StyleSheet4 } from "react-native";
23800
23978
  import { CardField } from "@stripe/stripe-react-native";
23801
23979
 
23802
23980
  // src/ui/CheckoutProvider.tsx
23803
23981
  import {
23804
23982
  createContext as createContext2,
23805
- useCallback as useCallback14,
23983
+ useCallback as useCallback15,
23806
23984
  useContext as useContext2,
23807
- useMemo as useMemo18,
23985
+ useMemo as useMemo19,
23808
23986
  useState as useState33
23809
23987
  } from "react";
23810
23988
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
23811
23989
 
23812
23990
  // src/ui/InstallmentPicker.tsx
23813
- import { useEffect as useEffect24, useMemo as useMemo17, useState as useState31 } from "react";
23991
+ import { useEffect as useEffect25, useMemo as useMemo18, useState as useState31 } from "react";
23814
23992
  import { Modal, Pressable as Pressable2, StyleSheet as StyleSheet2, Text as Text2, View as View2 } from "react-native";
23815
23993
 
23816
23994
  // src/ui/primitives.tsx
23817
- import { useMemo as useMemo16 } from "react";
23995
+ import { useMemo as useMemo17 } from "react";
23818
23996
  import {
23819
23997
  ActivityIndicator,
23820
23998
  Pressable,
@@ -23933,7 +24111,7 @@ var Button = ({
23933
24111
  }
23934
24112
  );
23935
24113
  };
23936
- var useStyles = (theme) => useMemo16(
24114
+ var useStyles = (theme) => useMemo17(
23937
24115
  () => StyleSheet.create({
23938
24116
  card: {
23939
24117
  backgroundColor: theme.surface,
@@ -24002,7 +24180,7 @@ var useInstallmentPicker = () => {
24002
24180
  var _a2;
24003
24181
  const [pending3, setPending] = useState31(null);
24004
24182
  const [choices] = useState31(() => createInstallmentChoices(setPending));
24005
- useEffect24(() => () => choices.cancel(), [choices]);
24183
+ useEffect25(() => () => choices.cancel(), [choices]);
24006
24184
  const onInstallmentOffers = choices.ask;
24007
24185
  const choose = (offer) => pending3 == null ? void 0 : pending3.choose(offer);
24008
24186
  const picker = /* @__PURE__ */ jsx3(
@@ -24057,7 +24235,7 @@ var InstallmentModal = ({ offers, onChoose, onClose }) => {
24057
24235
  }
24058
24236
  );
24059
24237
  };
24060
- var useStyles2 = (theme) => useMemo17(
24238
+ var useStyles2 = (theme) => useMemo18(
24061
24239
  () => StyleSheet2.create({
24062
24240
  backdrop: {
24063
24241
  flex: 1,
@@ -24108,7 +24286,7 @@ var useStyles2 = (theme) => useMemo17(
24108
24286
  );
24109
24287
 
24110
24288
  // src/ui/ProviderPages.tsx
24111
- import { useEffect as useEffect25, useState as useState32 } from "react";
24289
+ import { useEffect as useEffect26, useState as useState32 } from "react";
24112
24290
  import {
24113
24291
  ActivityIndicator as ActivityIndicator2,
24114
24292
  Linking,
@@ -24191,8 +24369,8 @@ var externalInitialUri = (uri) => {
24191
24369
  var useProviderPages = () => {
24192
24370
  const [pending3, setPending] = useState32(null);
24193
24371
  const [pages] = useState32(() => createProviderPages(setPending));
24194
- useEffect25(() => () => pages.cancel(), [pages]);
24195
- useEffect25(() => {
24372
+ useEffect26(() => () => pages.cancel(), [pages]);
24373
+ useEffect26(() => {
24196
24374
  if (!pending3) return;
24197
24375
  const subscription = Linking.addEventListener("url", ({ url: url2 }) => {
24198
24376
  if (providerPageMatchesReturn(url2, pending3.request.returnUrlPrefix))
@@ -24217,7 +24395,7 @@ var ProviderPage = ({
24217
24395
  const [error, setError] = useState32("");
24218
24396
  const displayedError = sourceError || error;
24219
24397
  const [reload, setReload] = useState32(0);
24220
- useEffect25(() => {
24398
+ useEffect26(() => {
24221
24399
  if (!externalUri) return;
24222
24400
  let active2 = true;
24223
24401
  void Linking.openURL(externalUri).catch(() => {
@@ -24335,18 +24513,18 @@ var CheckoutThemeProvider = ({
24335
24513
  theme,
24336
24514
  children
24337
24515
  }) => {
24338
- const resolved = useMemo18(() => resolveTheme(theme), [theme]);
24516
+ const resolved = useMemo19(() => resolveTheme(theme), [theme]);
24339
24517
  return /* @__PURE__ */ jsx5(ThemeCtx.Provider, { value: resolved, children });
24340
24518
  };
24341
24519
  var CheckoutRoot = ({ checkout, theme, pickImage, children }) => {
24342
24520
  const inheritedPicker = useContext2(ImagePickerCtx);
24343
24521
  const [attempt2, setAttempt] = useState33(0);
24344
- const requestValidation = useCallback14(() => setAttempt((n) => n + 1), []);
24345
- const validation = useMemo18(
24522
+ const requestValidation = useCallback15(() => setAttempt((n) => n + 1), []);
24523
+ const validation = useMemo19(
24346
24524
  () => ({ attempt: attempt2, requestValidation }),
24347
24525
  [attempt2, requestValidation]
24348
24526
  );
24349
- const resolved = useMemo18(() => resolveTheme(theme), [theme]);
24527
+ const resolved = useMemo19(() => resolveTheme(theme), [theme]);
24350
24528
  return /* @__PURE__ */ jsx5(CheckoutCtx.Provider, { value: checkout, children: /* @__PURE__ */ jsx5(ThemeCtx.Provider, { value: resolved, children: /* @__PURE__ */ jsx5(ImagePickerCtx.Provider, { value: pickImage != null ? pickImage : inheritedPicker, children: /* @__PURE__ */ jsx5(ValidationCtx.Provider, { value: validation, children }) }) }) });
24351
24529
  };
24352
24530
  var SelfProvidedCheckout = ({
@@ -24418,7 +24596,7 @@ var CardInput = ({
24418
24596
  const handleRef = useRef29(null);
24419
24597
  const visibleRef = useRef29(visible);
24420
24598
  visibleRef.current = visible;
24421
- useEffect26(() => {
24599
+ useEffect27(() => {
24422
24600
  const handle = cardFields.mount(
24423
24601
  owner,
24424
24602
  () => setAttachment((n) => n + 1),
@@ -24430,7 +24608,7 @@ var CardInput = ({
24430
24608
  handleRef.current = null;
24431
24609
  };
24432
24610
  }, [owner]);
24433
- useEffect26(() => {
24611
+ useEffect27(() => {
24434
24612
  var _a2;
24435
24613
  (_a2 = handleRef.current) == null ? void 0 : _a2.setVisible(visible);
24436
24614
  }, [visible]);
@@ -25094,7 +25272,7 @@ var configureCheckout = (config) => configure({
25094
25272
  });
25095
25273
 
25096
25274
  // src/ui/Field.tsx
25097
- import { useMemo as useMemo19, useState as useState36 } from "react";
25275
+ import { useMemo as useMemo20, useState as useState36 } from "react";
25098
25276
  import {
25099
25277
  Pressable as Pressable3,
25100
25278
  StyleSheet as StyleSheet5,
@@ -25188,7 +25366,7 @@ var Checkbox = ({ checked, onChange, label, invalid: invalid3 = false }) => {
25188
25366
  }
25189
25367
  );
25190
25368
  };
25191
- var useFieldStyles = (theme) => useMemo19(
25369
+ var useFieldStyles = (theme) => useMemo20(
25192
25370
  () => StyleSheet5.create({
25193
25371
  field: { gap: 6 },
25194
25372
  label: {
@@ -25238,7 +25416,7 @@ var useFieldStyles = (theme) => useMemo19(
25238
25416
  );
25239
25417
 
25240
25418
  // src/ui/Select.tsx
25241
- import { useCallback as useCallback15, useEffect as useEffect27, useMemo as useMemo20, useRef as useRef30, useState as useState37 } from "react";
25419
+ import { useCallback as useCallback16, useEffect as useEffect28, useMemo as useMemo21, useRef as useRef30, useState as useState37 } from "react";
25242
25420
  import { FlatList, Modal as Modal3, Pressable as Pressable4, StyleSheet as StyleSheet6, Text as Text5, View as View5 } from "react-native";
25243
25421
  import { Fragment, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
25244
25422
  function Select({
@@ -25257,12 +25435,12 @@ function Select({
25257
25435
  const interaction = useRef30({ disabled, open: false, revision: 0 });
25258
25436
  interaction.current.disabled = disabled;
25259
25437
  const revision = interaction.current.revision;
25260
- const close = useCallback15(() => {
25438
+ const close = useCallback16(() => {
25261
25439
  interaction.current.open = false;
25262
25440
  interaction.current.revision += 1;
25263
25441
  setOpen(false);
25264
25442
  }, []);
25265
- useEffect27(() => {
25443
+ useEffect28(() => {
25266
25444
  if (disabled && interaction.current.open) close();
25267
25445
  }, [disabled, close]);
25268
25446
  const selected = options.find((o) => o.value === value6);
@@ -25327,7 +25505,7 @@ function Select({
25327
25505
  )
25328
25506
  ] });
25329
25507
  }
25330
- var useSelectStyles = (theme) => useMemo20(
25508
+ var useSelectStyles = (theme) => useMemo21(
25331
25509
  () => StyleSheet6.create({
25332
25510
  control: {
25333
25511
  flexDirection: "row",
@@ -25388,7 +25566,7 @@ var useSelectStyles = (theme) => useMemo20(
25388
25566
  );
25389
25567
 
25390
25568
  // src/ui/QuantitySelect.tsx
25391
- import { useMemo as useMemo21 } from "react";
25569
+ import { useMemo as useMemo22 } from "react";
25392
25570
  import { Pressable as Pressable5, StyleSheet as StyleSheet7, Text as Text6, View as View6 } from "react-native";
25393
25571
  import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
25394
25572
  var QuantitySelect = ({
@@ -25459,7 +25637,7 @@ var QuantitySelect = ({
25459
25637
  }
25460
25638
  );
25461
25639
  };
25462
- var useQuantityStyles = (theme) => useMemo21(
25640
+ var useQuantityStyles = (theme) => useMemo22(
25463
25641
  () => StyleSheet7.create({
25464
25642
  stepper: { flexDirection: "row", alignItems: "center", gap: 14 },
25465
25643
  btn: {
@@ -25487,7 +25665,7 @@ var useQuantityStyles = (theme) => useMemo21(
25487
25665
  );
25488
25666
 
25489
25667
  // src/ui/Timer.tsx
25490
- import { useMemo as useMemo22 } from "react";
25668
+ import { useMemo as useMemo23 } from "react";
25491
25669
  import { StyleSheet as StyleSheet8, Text as Text7, View as View7 } from "react-native";
25492
25670
  import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
25493
25671
  var clock = (s9) => {
@@ -25506,7 +25684,7 @@ var Timer = ({ seconds: seconds2, urgentAt = 60, label }) => {
25506
25684
  /* @__PURE__ */ jsx10(Text7, { style: [s9.clock, urgent && s9.clockUrgent], children: clock(seconds2) })
25507
25685
  ] });
25508
25686
  };
25509
- var useTimerStyles = (theme) => useMemo22(
25687
+ var useTimerStyles = (theme) => useMemo23(
25510
25688
  () => StyleSheet8.create({
25511
25689
  row: { flexDirection: "row", alignItems: "center", gap: 6 },
25512
25690
  label: {
@@ -25527,7 +25705,7 @@ var useTimerStyles = (theme) => useMemo22(
25527
25705
  );
25528
25706
 
25529
25707
  // src/ui/TimerBanner.tsx
25530
- import { useMemo as useMemo23, useState as useState38 } from "react";
25708
+ import { useMemo as useMemo24, useState as useState38 } from "react";
25531
25709
  import { Pressable as Pressable6, StyleSheet as StyleSheet9, Text as Text8, View as View8 } from "react-native";
25532
25710
  import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
25533
25711
  var clock2 = (s9) => {
@@ -25565,7 +25743,7 @@ var TimerBanner = ({
25565
25743
  ] })
25566
25744
  );
25567
25745
  };
25568
- var useBannerStyles = (theme) => useMemo23(
25746
+ var useBannerStyles = (theme) => useMemo24(
25569
25747
  () => StyleSheet9.create({
25570
25748
  banner: {
25571
25749
  flexDirection: "row",
@@ -25605,7 +25783,7 @@ var useBannerStyles = (theme) => useMemo23(
25605
25783
  );
25606
25784
 
25607
25785
  // src/ui/PaymentMethods.tsx
25608
- import { useMemo as useMemo24 } from "react";
25786
+ import { useMemo as useMemo25 } from "react";
25609
25787
  import { Image, Pressable as Pressable7, StyleSheet as StyleSheet10, Text as Text9, View as View9 } from "react-native";
25610
25788
  import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
25611
25789
  var EXTRA_LABEL = {
@@ -25684,7 +25862,7 @@ var PaymentMethods = ({
25684
25862
  ] }, option.value);
25685
25863
  }) });
25686
25864
  };
25687
- var useStyles3 = (theme) => useMemo24(
25865
+ var useStyles3 = (theme) => useMemo25(
25688
25866
  () => StyleSheet10.create({
25689
25867
  list: { gap: 8 },
25690
25868
  row: {
@@ -25728,7 +25906,7 @@ var useStyles3 = (theme) => useMemo24(
25728
25906
  );
25729
25907
 
25730
25908
  // src/ui/RichText.tsx
25731
- import { useMemo as useMemo25, useState as useState39 } from "react";
25909
+ import { useMemo as useMemo26, useState as useState39 } from "react";
25732
25910
  import { Alert, Linking as Linking3, StyleSheet as StyleSheet11, Text as Text10, View as View10 } from "react-native";
25733
25911
  import RenderHTML, {
25734
25912
  defaultSystemFonts,
@@ -25782,8 +25960,8 @@ var RichText = ({
25782
25960
  }) => {
25783
25961
  const theme = useTheme();
25784
25962
  const [width, setWidth] = useState39(0);
25785
- const source = useMemo25(() => ({ html }), [html]);
25786
- const baseStyle = useMemo25(
25963
+ const source = useMemo26(() => ({ html }), [html]);
25964
+ const baseStyle = useMemo26(
25787
25965
  () => ({
25788
25966
  color: theme.muted,
25789
25967
  fontSize: theme.fontSize - 1,
@@ -25793,13 +25971,13 @@ var RichText = ({
25793
25971
  }),
25794
25972
  [theme.muted, theme.fontSize, theme.fontFamily, textStyle]
25795
25973
  );
25796
- const systemFonts = useMemo25(
25974
+ const systemFonts = useMemo26(
25797
25975
  () => [
25798
25976
  .../* @__PURE__ */ new Set([...defaultSystemFonts, theme.fontFamily, textStyle == null ? void 0 : textStyle.fontFamily])
25799
25977
  ].filter((font) => typeof font === "string"),
25800
25978
  [theme.fontFamily, textStyle == null ? void 0 : textStyle.fontFamily]
25801
25979
  );
25802
- const tagsStyles = useMemo25(() => {
25980
+ const tagsStyles = useMemo26(() => {
25803
25981
  var _a2;
25804
25982
  const defaults = {
25805
25983
  p: { marginTop: 0, marginBottom: 8 },
@@ -25836,7 +26014,7 @@ var RichText = ({
25836
26014
  defaults[tag] = { ...defaults[tag], ...style };
25837
26015
  return defaults;
25838
26016
  }, [theme.accent, theme.fontSize, baseStyle.fontSize, tagOverrides]);
25839
- const renderersProps = useMemo25(
26017
+ const renderersProps = useMemo26(
25840
26018
  () => ({
25841
26019
  a: {
25842
26020
  onPress: (event, href) => {
@@ -25853,7 +26031,7 @@ var RichText = ({
25853
26031
  }),
25854
26032
  [onLinkPress]
25855
26033
  );
25856
- const defaultTextProps = useMemo25(() => ({ selectable }), [selectable]);
26034
+ const defaultTextProps = useMemo26(() => ({ selectable }), [selectable]);
25857
26035
  return /* @__PURE__ */ jsx13(
25858
26036
  View10,
25859
26037
  {
@@ -25884,8 +26062,8 @@ var styles3 = StyleSheet11.create({ container: { alignSelf: "stretch", minWidth:
25884
26062
  // src/sections/Tickets.tsx
25885
26063
  import {
25886
26064
  Fragment as Fragment2,
25887
- useEffect as useEffect28,
25888
- useMemo as useMemo26,
26065
+ useEffect as useEffect29,
26066
+ useMemo as useMemo27,
25889
26067
  useRef as useRef31,
25890
26068
  useState as useState40
25891
26069
  } from "react";
@@ -26030,7 +26208,20 @@ var Tickets = ({
26030
26208
  const checkout = useCheckoutContext();
26031
26209
  const theme = useTheme();
26032
26210
  const s9 = useTicketStyles(theme);
26033
- const ticketsQuery = hooks_exports.useTicketsWithMeta(eventId);
26211
+ const catalog = hooks_exports.useTicketCatalog(eventId, timeSlotDates);
26212
+ const {
26213
+ ticketsQuery,
26214
+ eventInfo,
26215
+ slotQuery,
26216
+ isTimeSlot,
26217
+ dates,
26218
+ slotDate,
26219
+ setSlotDate,
26220
+ qty,
26221
+ setQty,
26222
+ refetchCatalog,
26223
+ current: catalogCurrent
26224
+ } = catalog;
26034
26225
  const waitingBuyer = hooks_exports.useAuthSession();
26035
26226
  const cachedProfile = hooks_exports.useProfile({ enabled: false }).data;
26036
26227
  const waitingPrefill = waitingListProfilePrefill(
@@ -26041,48 +26232,23 @@ var Tickets = ({
26041
26232
  const bundleWait = hooks_exports.useTicketGatewayWait(checkout.store);
26042
26233
  const bundleStarting = bundleWait !== null;
26043
26234
  const promoMeta = (_a2 = ticketsQuery.data) == null ? void 0 : _a2.promo;
26044
- const [qty, setQty] = useState40({});
26045
- const [slotDate, setSlotDate] = useState40("");
26046
- const eventInfo = hooks_exports.useEvent(eventId).data;
26047
- const isTimeSlot = Boolean((timeSlotDates == null ? void 0 : timeSlotDates.length) || (eventInfo == null ? void 0 : eventInfo.isTimeSlotEvent));
26048
- const dates = useMemo26(
26049
- () => {
26050
- var _a3;
26051
- return (_a3 = timeSlotDates != null ? timeSlotDates : eventInfo == null ? void 0 : eventInfo.availableDates) != null ? _a3 : [];
26052
- },
26053
- [timeSlotDates, eventInfo == null ? void 0 : eventInfo.availableDates]
26235
+ const tickets = catalog.tickets;
26236
+ const [error, updateError] = hooks_exports.useScopedState(catalog.scope, "");
26237
+ const setError = (message2) => {
26238
+ if (catalogCurrent()) updateError(message2);
26239
+ };
26240
+ const [code, setCode] = hooks_exports.useScopedState(catalog.scope, "");
26241
+ const [codeState, setCodeState] = hooks_exports.useScopedState(
26242
+ catalog.scope,
26243
+ "idle"
26054
26244
  );
26055
- useEffect28(() => {
26056
- if (isTimeSlot && !slotDate && dates.length) setSlotDate(dates[0]);
26057
- }, [isTimeSlot, slotDate, dates]);
26058
- const slotQuery = hooks_exports.useTimeSlotTickets(eventId, isTimeSlot ? slotDate : void 0);
26059
- const refetchCatalog = () => Promise.all([
26060
- ticketsQuery.refetch(),
26061
- ...isTimeSlot && slotDate ? [slotQuery.refetch()] : []
26062
- ]);
26063
- const tickets = useMemo26(
26064
- () => {
26065
- var _a3, _b2, _c2;
26066
- return isTimeSlot ? (_a3 = slotQuery.data) != null ? _a3 : [] : (_c2 = (_b2 = ticketsQuery.data) == null ? void 0 : _b2.tickets) != null ? _c2 : [];
26067
- },
26068
- [isTimeSlot, slotQuery.data, (_b = ticketsQuery.data) == null ? void 0 : _b.tickets]
26069
- );
26070
- const [error, setError] = useState40("");
26071
- const [code, setCode] = useState40("");
26072
- const [codeState, setCodeState] = useState40("idle");
26073
- const [promoOpen, setPromoOpen] = useState40(false);
26074
- hooks_exports.useOnEventChange(eventId, () => {
26075
- setQty({});
26076
- setSlotDate("");
26077
- setCode("");
26078
- setPromoOpen(false);
26079
- setError("");
26080
- });
26245
+ const [promoOpen, setPromoOpen] = hooks_exports.useScopedState(catalog.scope, false);
26081
26246
  const [visibleDescription, setVisibleDescription] = useState40(null);
26082
26247
  const attributionEvent = useRef31(null);
26083
- useEffect28(() => {
26248
+ useEffect29(() => {
26084
26249
  var _a3;
26085
- if (attributionEvent.current === eventId) return;
26250
+ if (!catalogCurrent() || !catalog.attributionReady || attributionEvent.current === eventId)
26251
+ return;
26086
26252
  attributionEvent.current = eventId;
26087
26253
  const promo = (_a3 = initialPromoCode == null ? void 0 : initialPromoCode.trim()) != null ? _a3 : "";
26088
26254
  const referral = referrer;
@@ -26094,23 +26260,37 @@ var Tickets = ({
26094
26260
  setPromoOpen(true);
26095
26261
  setCodeState("busy");
26096
26262
  checkout.applyPromoCode(eventId, promo).catch(() => void 0).finally(() => {
26097
- refetchCatalog().finally(() => setCodeState("idle"));
26263
+ if (!catalogCurrent()) return;
26264
+ return refetchCatalog().catch((e) => {
26265
+ if (catalogCurrent()) setError(errorMessage(e));
26266
+ }).finally(() => {
26267
+ if (catalogCurrent()) setCodeState("idle");
26268
+ });
26098
26269
  });
26099
26270
  }
26100
- }, [eventId, initialPromoCode, referrer, readAttributionFromUrl]);
26101
- useEffect28(() => {
26271
+ }, [
26272
+ eventId,
26273
+ initialPromoCode,
26274
+ referrer,
26275
+ readAttributionFromUrl,
26276
+ catalog.instance,
26277
+ catalog.attributionReady
26278
+ ]);
26279
+ useEffect29(() => {
26102
26280
  checkout.syncCurrency(eventId, void 0, { seed: true }).catch(() => void 0);
26103
26281
  }, [eventId]);
26104
26282
  const changeCurrency = (nextCode) => {
26105
26283
  checkout.syncCurrency(eventId, nextCode).then((res) => {
26106
- if (res.requiresCatalogRefresh) {
26284
+ if (catalogCurrent() && res.requiresCatalogRefresh) {
26107
26285
  setQty({});
26108
- refetchCatalog();
26286
+ refetchCatalog().catch((e) => {
26287
+ if (catalogCurrent()) setError(errorMessage(e));
26288
+ });
26109
26289
  }
26110
26290
  }).catch(() => void 0);
26111
26291
  };
26112
26292
  const originals = useRef31({});
26113
- useEffect28(() => {
26293
+ useEffect29(() => {
26114
26294
  for (const t of tickets)
26115
26295
  if (originals.current[t.id] == null) originals.current[t.id] = t.price;
26116
26296
  }, [tickets]);
@@ -26123,7 +26303,7 @@ var Tickets = ({
26123
26303
  const selectQty = (ticket, value6) => setQty(
26124
26304
  (previous) => changeTicketQuantity(previous, tickets, ticket, value6, allowMultiple)
26125
26305
  );
26126
- const isSeated = (_c = eventInfo == null ? void 0 : eventInfo.isSeatedEvent) != null ? _c : false;
26306
+ const isSeated = (_b = eventInfo == null ? void 0 : eventInfo.isSeatedEvent) != null ? _b : false;
26127
26307
  const seatMapRow = (t) => isSeated && !t.allowDirectPurchase;
26128
26308
  const hasSeatMapTickets = tickets.some(seatMapRow);
26129
26309
  const directPurchasable = tickets.filter((t) => !seatMapRow(t));
@@ -26131,7 +26311,9 @@ var Tickets = ({
26131
26311
  const firstTableIndex = tickets.findIndex((t) => t.isTable);
26132
26312
  const firstTableId = firstTableIndex > 0 && tickets.slice(0, firstTableIndex).some((t) => !t.isTable) ? tickets[firstTableIndex].id : void 0;
26133
26313
  const prime = () => {
26314
+ if (!catalogCurrent() || catalog.busy || codeState === "busy" || catalog.error) return;
26134
26315
  setError("");
26316
+ const continuationCurrent = catalog.capturePrimeContinuation();
26135
26317
  const selections = selected.map((t) => {
26136
26318
  var _a3;
26137
26319
  return {
@@ -26143,22 +26325,31 @@ var Tickets = ({
26143
26325
  currency: t.currency
26144
26326
  };
26145
26327
  });
26146
- checkout.setTickets(eventId, selections).then(() => onContinue == null ? void 0 : onContinue()).catch(
26328
+ checkout.setTickets(eventId, selections).then(() => {
26329
+ if (continuationCurrent()) onContinue == null ? void 0 : onContinue();
26330
+ }).catch(
26147
26331
  (e) => setError(
26148
26332
  e instanceof ConfirmerBusyError ? createTranslator()(e.message) : errorMessage(e)
26149
26333
  )
26150
26334
  );
26151
26335
  };
26152
26336
  const applyCode = () => {
26153
- if (!code.trim()) return;
26337
+ if (!catalogCurrent() || !catalog.attributionReady || catalog.busy || codeState === "busy" || !code.trim())
26338
+ return;
26339
+ setError("");
26154
26340
  setCodeState("busy");
26155
26341
  checkout.applyPromoCode(eventId, code.trim()).catch(() => void 0).finally(() => {
26156
- refetchCatalog().finally(() => setCodeState("idle"));
26342
+ if (!catalogCurrent()) return;
26343
+ return refetchCatalog().catch((e) => {
26344
+ if (catalogCurrent()) setError(errorMessage(e));
26345
+ }).finally(() => {
26346
+ if (catalogCurrent()) setCodeState("idle");
26347
+ });
26157
26348
  });
26158
26349
  };
26159
26350
  const isAccess = promoMeta == null ? void 0 : promoMeta.isAccessCodeEnabled;
26160
26351
  const showCodeInput = (promoMeta == null ? void 0 : promoMeta.isPromotionsEnabled) || isAccess;
26161
- const listQuery = isTimeSlot ? slotQuery : ticketsQuery;
26352
+ const listQuery = catalog;
26162
26353
  const currency = checkout.currency;
26163
26354
  const renderRow = (t) => {
26164
26355
  var _a3, _b2;
@@ -26237,8 +26428,8 @@ var Tickets = ({
26237
26428
  };
26238
26429
  const timeGroups = [];
26239
26430
  if (isTimeSlot)
26240
- for (const t of tickets) {
26241
- const time = (_e = (_d = t.timeSlot) == null ? void 0 : _d.time) != null ? _e : "";
26431
+ for (const t of catalog.datedTickets) {
26432
+ const time = (_d = (_c = t.timeSlot) == null ? void 0 : _c.time) != null ? _d : "";
26242
26433
  const g = timeGroups.find((x) => x.time === time);
26243
26434
  if (g) g.items.push(t);
26244
26435
  else timeGroups.push({ time, items: [t] });
@@ -26257,7 +26448,6 @@ var Tickets = ({
26257
26448
  value: slotDate,
26258
26449
  onChange: (d) => {
26259
26450
  setSlotDate(d);
26260
- setQty({});
26261
26451
  },
26262
26452
  options: dates.map((d) => ({ label: d, value: d }))
26263
26453
  }
@@ -26277,11 +26467,15 @@ var Tickets = ({
26277
26467
  }
26278
26468
  )
26279
26469
  ] }) : null,
26280
- isTimeSlot && !slotQuery.isLoading && tickets.length === 0 && slotDate ? /* @__PURE__ */ jsx15(MutedText, { children: "No sessions available on this date." }) : null,
26470
+ isTimeSlot && !slotQuery.isLoading && !((_e = slotQuery.data) == null ? void 0 : _e.length) && slotDate ? /* @__PURE__ */ jsx15(MutedText, { children: "No sessions available on this date." }) : null,
26281
26471
  isTimeSlot ? timeGroups.map((g) => /* @__PURE__ */ jsxs12(Fragment2, { children: [
26282
26472
  g.time ? /* @__PURE__ */ jsx15(Text11, { style: s9.slotTime, children: g.time }) : null,
26283
26473
  g.items.map(renderRow)
26284
26474
  ] }, g.time)) : tickets.map(renderRow),
26475
+ isTimeSlot && catalog.regularTickets.length > 0 ? /* @__PURE__ */ jsxs12(Fragment3, { children: [
26476
+ /* @__PURE__ */ jsx15(Text11, { style: s9.slotTime, children: createTranslator()("tickets.getTickets") }),
26477
+ catalog.regularTickets.map(renderRow)
26478
+ ] }) : null,
26285
26479
  showCodeInput ? /* @__PURE__ */ jsx15(View12, { style: s9.promo, children: !isAccess && !promoOpen ? /* @__PURE__ */ jsx15(
26286
26480
  Pressable8,
26287
26481
  {
@@ -26306,7 +26500,7 @@ var Tickets = ({
26306
26500
  variant: "ghost",
26307
26501
  onPress: applyCode,
26308
26502
  loading: codeState === "busy",
26309
- disabled: codeState === "busy" || !code.trim(),
26503
+ disabled: !catalog.attributionReady || catalog.busy || codeState === "busy" || !code.trim(),
26310
26504
  children: isAccess ? "ENTER" : "APPLY"
26311
26505
  }
26312
26506
  ),
@@ -26316,14 +26510,14 @@ var Tickets = ({
26316
26510
  directPurchasable.length > 0 ? renderContinue ? renderContinue({
26317
26511
  onPress: prime,
26318
26512
  loading: checkout.isBusy,
26319
- disabled: checkout.orderFixed || checkout.isBusy || bundleStarting || selected.length === 0,
26513
+ disabled: checkout.orderFixed || checkout.isBusy || bundleStarting || catalog.busy || codeState === "busy" || !!catalog.error || selected.length === 0,
26320
26514
  title: continueTitle
26321
26515
  }) : /* @__PURE__ */ jsx15(
26322
26516
  Button,
26323
26517
  {
26324
26518
  onPress: prime,
26325
26519
  loading: checkout.isBusy,
26326
- disabled: checkout.isBusy || bundleStarting || selected.length === 0,
26520
+ disabled: checkout.isBusy || bundleStarting || catalog.busy || codeState === "busy" || !!catalog.error || selected.length === 0,
26327
26521
  children: checkout.isBusy ? "Reserving\u2026" : selectionIsTable ? "Reserve tables" : buttonLabel
26328
26522
  }
26329
26523
  ) : null,
@@ -26348,7 +26542,7 @@ var Tickets = ({
26348
26542
  error || checkout.error ? /* @__PURE__ */ jsx15(ErrorText, { children: error || checkout.error }) : null
26349
26543
  ] }) });
26350
26544
  };
26351
- var useTicketStyles = (theme) => useMemo26(
26545
+ var useTicketStyles = (theme) => useMemo27(
26352
26546
  () => StyleSheet13.create({
26353
26547
  loading: { paddingVertical: 24, alignItems: "center" },
26354
26548
  selectBlock: { gap: 6 },
@@ -26481,7 +26675,7 @@ var useTicketStyles = (theme) => useMemo26(
26481
26675
  );
26482
26676
 
26483
26677
  // src/sections/SeatsIoMap.tsx
26484
- import { useMemo as useMemo27 } from "react";
26678
+ import { useMemo as useMemo28 } from "react";
26485
26679
  import { View as View13 } from "react-native";
26486
26680
  import { WebView as WebView2 } from "react-native-webview";
26487
26681
  import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
@@ -26490,7 +26684,7 @@ var SeatsIoMap = ({ eventId, initial, onContinue }) => {
26490
26684
  const checkout = useCheckoutContext();
26491
26685
  const flow = hooks_exports.useSeatsIoSelection(eventId, checkout, initial, onContinue);
26492
26686
  const bundleStarting = hooks_exports.useBundleStarting(checkout.store);
26493
- const html = useMemo27(
26687
+ const html = useMemo28(
26494
26688
  () => flow.data.chart ? seatsIoChartDocument(flow.data.chart, flow.nonce) : "",
26495
26689
  [flow.data.chart, flow.nonce]
26496
26690
  );
@@ -26576,7 +26770,7 @@ var SeatsIoMap = ({ eventId, initial, onContinue }) => {
26576
26770
  };
26577
26771
 
26578
26772
  // src/sections/SeatMap.tsx
26579
- import { useEffect as useEffect29, useMemo as useMemo28, useRef as useRef32, useState as useState41 } from "react";
26773
+ import { useEffect as useEffect30, useMemo as useMemo29, useRef as useRef32, useState as useState41 } from "react";
26580
26774
  import { StyleSheet as StyleSheet14, Text as Text12, View as View14 } from "react-native";
26581
26775
  import { WebView as WebView3 } from "react-native-webview";
26582
26776
 
@@ -26610,7 +26804,7 @@ var SeatMap = ({ eventId, onContinue }) => {
26610
26804
  predefinedSeats: flow.chart.data.predefinedSeats
26611
26805
  } : null;
26612
26806
  const chart = flow.chart.state === "ready" ? flow.chart.data : null;
26613
- const html = useMemo28(
26807
+ const html = useMemo29(
26614
26808
  () => chart ? `<!doctype html><html><head><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"><style>html,body,#seat-map{margin:0;width:100%;height:100%;overflow:hidden}body{background:#fff}${SEAT_MAP_CSS}</style></head><body><div id="seat-map"></div><script>${SEAT_MAP_SCRIPT.replace(/<\/script/gi, "<\\/script")}</script></body></html>` : "",
26615
26809
  [chart]
26616
26810
  );
@@ -26621,7 +26815,7 @@ var SeatMap = ({ eventId, onContinue }) => {
26621
26815
  `window.__tfSeatMapUpdate&&window.__tfSeatMapUpdate(${safeJson2(properties)});true;`
26622
26816
  );
26623
26817
  };
26624
- useEffect29(update, [properties && safeJson2(properties)]);
26818
+ useEffect30(update, [properties && safeJson2(properties)]);
26625
26819
  if (flow.chart.state === "provider") return /* @__PURE__ */ jsx17(SeatsIoMap, { eventId, initial: flow.chart.data, onContinue });
26626
26820
  return /* @__PURE__ */ jsx17(FrozenFields, { frozen: checkout.orderFixed, children: /* @__PURE__ */ jsxs14(Card, { children: [
26627
26821
  /* @__PURE__ */ jsx17(SectionHeader, { title: "Select your seats" }),
@@ -26757,7 +26951,7 @@ var styles5 = StyleSheet14.create({
26757
26951
  });
26758
26952
 
26759
26953
  // src/sections/AddOns.tsx
26760
- import { Fragment as Fragment6, useMemo as useMemo29 } from "react";
26954
+ import { Fragment as Fragment6, useMemo as useMemo30 } from "react";
26761
26955
  import { Pressable as Pressable9, StyleSheet as StyleSheet15, Text as Text13, View as View16 } from "react-native";
26762
26956
 
26763
26957
  // src/ui/CustomFields.tsx
@@ -27028,7 +27222,7 @@ var AddOns = ({
27028
27222
  error || checkout.error ? /* @__PURE__ */ jsx19(ErrorText, { children: error || checkout.error }) : null
27029
27223
  ] }) });
27030
27224
  };
27031
- var useAddonStyles = (theme) => useMemo29(
27225
+ var useAddonStyles = (theme) => useMemo30(
27032
27226
  () => StyleSheet15.create({
27033
27227
  head: { flexDirection: "row", alignItems: "center", flexWrap: "wrap", gap: 8 },
27034
27228
  eyebrow: {
@@ -27122,7 +27316,7 @@ var useAddonStyles = (theme) => useMemo29(
27122
27316
  );
27123
27317
 
27124
27318
  // src/sections/Bundles.tsx
27125
- import { useMemo as useMemo30 } from "react";
27319
+ import { useMemo as useMemo31 } from "react";
27126
27320
  import { StyleSheet as StyleSheet16, Text as Text14, View as View17 } from "react-native";
27127
27321
  import { Fragment as Fragment7, jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
27128
27322
  var money3 = (currency, amount2) => `${currency} ${amount2.toFixed(2)}`;
@@ -27372,7 +27566,7 @@ var Bundles = ({
27372
27566
  /* @__PURE__ */ jsx20(Button, { onPress: flow.continueToDetails, disabled: !anySelected, children: t("bundles.continue") })
27373
27567
  ] });
27374
27568
  };
27375
- var useBundleStyles = (theme) => useMemo30(
27569
+ var useBundleStyles = (theme) => useMemo31(
27376
27570
  () => StyleSheet16.create({
27377
27571
  loader: { paddingVertical: 20, alignItems: "center" },
27378
27572
  heading: {
@@ -27427,8 +27621,8 @@ var useBundleStyles = (theme) => useMemo30(
27427
27621
  // src/sections/BillingInfo.tsx
27428
27622
  import {
27429
27623
  Fragment as Fragment10,
27430
- useEffect as useEffect30,
27431
- useMemo as useMemo31,
27624
+ useEffect as useEffect31,
27625
+ useMemo as useMemo32,
27432
27626
  useRef as useRef33,
27433
27627
  useState as useState44
27434
27628
  } from "react";
@@ -27959,21 +28153,21 @@ var BillingInfo = ({
27959
28153
  setConsent: commitConsent
27960
28154
  } = checkout;
27961
28155
  const gates = checkout.fieldGates;
27962
- const orderGroups = useMemo31(
28156
+ const orderGroups = useMemo32(
27963
28157
  () => checkout.customFields.filter((g) => g.scope === "order"),
27964
28158
  [checkout.customFields]
27965
28159
  );
27966
- const ticketGroups = useMemo31(
28160
+ const ticketGroups = useMemo32(
27967
28161
  () => checkout.customFields.filter((g) => g.scope === "ticket"),
27968
28162
  [checkout.customFields]
27969
28163
  );
27970
- const ticketFields = useMemo31(
28164
+ const ticketFields = useMemo32(
27971
28165
  () => ticketGroups.flatMap((g) => g.fields),
27972
28166
  [ticketGroups]
27973
28167
  );
27974
28168
  const holderNamesRequired = checkout.holderNamesRequired || collectTicketHolders;
27975
28169
  const showHolders = holderNamesRequired || ticketFields.length > 0;
27976
- const slots = useMemo31(() => {
28170
+ const slots = useMemo32(() => {
27977
28171
  var _a3, _b2;
27978
28172
  const out = [];
27979
28173
  const lines = (_b2 = (_a3 = checkout.breakdown) == null ? void 0 : _a3.tickets) != null ? _b2 : [];
@@ -27986,7 +28180,7 @@ var BillingInfo = ({
27986
28180
  }
27987
28181
  return out;
27988
28182
  }, [checkout.breakdown, checkout.selections]);
27989
- useEffect30(() => {
28183
+ useEffect31(() => {
27990
28184
  const p = profile.data;
27991
28185
  if (!p || profileSeeded.current) return;
27992
28186
  profileSeeded.current = true;
@@ -28009,10 +28203,10 @@ var BillingInfo = ({
28009
28203
  return keys.every((k) => next[k] === prev[k]) ? prev : next;
28010
28204
  });
28011
28205
  }, [profile.data, checkout.isLoggedIn]);
28012
- useEffect30(() => {
28206
+ useEffect31(() => {
28013
28207
  setHolders((prev) => holderDraftsForSlots(prev, slots, restoredHolders.current));
28014
28208
  }, [slots]);
28015
- useEffect30(() => {
28209
+ useEffect31(() => {
28016
28210
  if (!showHolders) return;
28017
28211
  setHolders(
28018
28212
  (prev) => holderDraftsMirroringBuyer(prev, {
@@ -28023,7 +28217,7 @@ var BillingInfo = ({
28023
28217
  })
28024
28218
  );
28025
28219
  }, [showHolders, billing.firstName, billing.lastName, billing.email, billing.phone]);
28026
- useEffect30(() => {
28220
+ useEffect31(() => {
28027
28221
  const email = billing.email.trim();
28028
28222
  if (checkout.isLoggedIn || !isEmail(email)) return;
28029
28223
  const t = setTimeout(
@@ -28037,18 +28231,18 @@ var BillingInfo = ({
28037
28231
  const countriesQuery = hooks_exports.useCountries({
28038
28232
  enabled: needsNationality || gates.showAddress
28039
28233
  });
28040
- const countries = useMemo31(() => {
28234
+ const countries = useMemo32(() => {
28041
28235
  var _a3;
28042
28236
  return (_a3 = countriesQuery.data) != null ? _a3 : [];
28043
28237
  }, [countriesQuery.data]);
28044
28238
  const statesQuery = hooks_exports.useStates(billing.countryId, {
28045
28239
  enabled: Boolean(billing.countryId)
28046
28240
  });
28047
- const states = useMemo31(() => {
28241
+ const states = useMemo32(() => {
28048
28242
  var _a3;
28049
28243
  return (_a3 = statesQuery.data) != null ? _a3 : [];
28050
28244
  }, [statesQuery.data]);
28051
- useEffect30(() => {
28245
+ useEffect31(() => {
28052
28246
  var _a3, _b2, _c2, _d2;
28053
28247
  if (countryDefaultApplied.current || billing.countryId || countries.length === 0 || profile.isLoading || eventId && event.isLoading) {
28054
28248
  return;
@@ -28087,7 +28281,7 @@ var BillingInfo = ({
28087
28281
  event.isLoading,
28088
28282
  (_e = event.data) == null ? void 0 : _e.countryCode
28089
28283
  ]);
28090
- useEffect30(() => {
28284
+ useEffect31(() => {
28091
28285
  var _a3;
28092
28286
  if (!billing.countryId) return;
28093
28287
  const country = countries.find(
@@ -28098,7 +28292,7 @@ var BillingInfo = ({
28098
28292
  setBilling((current5) => ({ ...current5, countryCode }));
28099
28293
  }
28100
28294
  }, [billing.countryId, billing.countryCode, countries]);
28101
- useEffect30(() => {
28295
+ useEffect31(() => {
28102
28296
  if (!billing.stateId) return;
28103
28297
  const state = states.find(
28104
28298
  (candidate) => String(candidate.id) === String(billing.stateId)
@@ -28158,7 +28352,7 @@ var BillingInfo = ({
28158
28352
  });
28159
28353
  if (ttfOptInLabel || brandOptInLabel) commitConsent(consent);
28160
28354
  };
28161
- useEffect30(() => {
28355
+ useEffect31(() => {
28162
28356
  if (combined) commit();
28163
28357
  }, [
28164
28358
  combined,
@@ -28432,7 +28626,7 @@ var BillingInfo = ({
28432
28626
  showHolders ? continueButton : null
28433
28627
  ] });
28434
28628
  };
28435
- var useStyles4 = (theme) => useMemo31(
28629
+ var useStyles4 = (theme) => useMemo32(
28436
28630
  () => StyleSheet19.create({
28437
28631
  loginRow: {
28438
28632
  flexDirection: "row",
@@ -28625,7 +28819,7 @@ var Accommodation = ({ eventId }) => {
28625
28819
  var styles9 = StyleSheet21.create({ room: { gap: 12, paddingVertical: 12 }, title: { fontSize: 16, fontWeight: "600" } });
28626
28820
 
28627
28821
  // src/sections/Payment.tsx
28628
- import { useEffect as useEffect31, useMemo as useMemo32, useState as useState45 } from "react";
28822
+ import { useEffect as useEffect32, useMemo as useMemo33, useState as useState45 } from "react";
28629
28823
  import { Platform as Platform2, View as View25 } from "react-native";
28630
28824
  import { isPlatformPaySupported } from "@stripe/stripe-react-native";
28631
28825
  import { Fragment as Fragment12, jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
@@ -28686,7 +28880,7 @@ var Payment = ({
28686
28880
  const [extras, setExtras] = useState45({});
28687
28881
  const [useSavedCard, setUseSavedCard] = useState45(true);
28688
28882
  const [nativeWalletSupported, setNativeWalletSupported] = useState45(false);
28689
- useEffect31(() => {
28883
+ useEffect32(() => {
28690
28884
  let mounted = true;
28691
28885
  const env = getConfig().env;
28692
28886
  isPlatformPaySupported({ googlePay: { testEnv: env === "STAG" || env === "DEV" } }).then((supported) => {
@@ -28702,7 +28896,7 @@ var Payment = ({
28702
28896
  const isFree = bd !== void 0 && Number(bd.total) === 0;
28703
28897
  const isXendit = checkout.gateway === "xendit";
28704
28898
  const offersOxxo = stripeOffersOxxo(checkout.stripeElementsConfig);
28705
- const options = useMemo32(() => {
28899
+ const options = useMemo33(() => {
28706
28900
  var _a3, _b2, _c2, _d2, _e2;
28707
28901
  if (isFree || !methods) return [];
28708
28902
  const out = [];
@@ -28759,7 +28953,7 @@ var Payment = ({
28759
28953
  nativeWalletSupported,
28760
28954
  offersOxxo
28761
28955
  ]);
28762
- useEffect31(() => {
28956
+ useEffect32(() => {
28763
28957
  if (options.length && !options.some((o) => o.value === selected))
28764
28958
  setSelected(options[0].value);
28765
28959
  }, [options, selected]);
@@ -28944,11 +29138,11 @@ var Payment = ({
28944
29138
  };
28945
29139
 
28946
29140
  // src/sections/WaiverSigning.tsx
28947
- import { useMemo as useMemo34, useRef as useRef35, useState as useState47 } from "react";
29141
+ import { useMemo as useMemo35, useRef as useRef35, useState as useState47 } from "react";
28948
29142
  import { Pressable as Pressable12, ScrollView, StyleSheet as StyleSheet23, Text as Text19, View as View27 } from "react-native";
28949
29143
 
28950
29144
  // src/ui/SignaturePad.tsx
28951
- import { memo, useEffect as useEffect32, useMemo as useMemo33, useRef as useRef34, useState as useState46 } from "react";
29145
+ import { memo, useEffect as useEffect33, useMemo as useMemo34, useRef as useRef34, useState as useState46 } from "react";
28952
29146
  import { PanResponder, Pressable as Pressable11, StyleSheet as StyleSheet22, Text as Text18, View as View26 } from "react-native";
28953
29147
  import { Fragment as Fragment13, jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
28954
29148
  var LINE_WIDTH = 2.5;
@@ -29011,7 +29205,7 @@ var SignaturePad = ({
29011
29205
  if (frameRequest.current !== null) return;
29012
29206
  frameRequest.current = requestAnimationFrame(render);
29013
29207
  };
29014
- useEffect32(
29208
+ useEffect33(
29015
29209
  () => () => {
29016
29210
  if (frameRequest.current !== null) cancelAnimationFrame(frameRequest.current);
29017
29211
  },
@@ -29026,7 +29220,7 @@ var SignaturePad = ({
29026
29220
  });
29027
29221
  if (ended) report.current(ended.pngDataUrl, ended.inkLength);
29028
29222
  };
29029
- const responder = useMemo33(
29223
+ const responder = useMemo34(
29030
29224
  () => PanResponder.create({
29031
29225
  onStartShouldSetPanResponder: () => !disabledRef.current,
29032
29226
  onMoveShouldSetPanResponder: () => !disabledRef.current,
@@ -29397,7 +29591,7 @@ var TicketForm = ({ ticket, consentText, t, methods, busy, locked = false, error
29397
29591
  )
29398
29592
  ] });
29399
29593
  };
29400
- var useWaiverStyles = (theme) => useMemo34(
29594
+ var useWaiverStyles = (theme) => useMemo35(
29401
29595
  () => StyleSheet23.create({
29402
29596
  muted: {
29403
29597
  color: theme.muted,
@@ -29553,7 +29747,7 @@ var styles11 = StyleSheet24.create({
29553
29747
  });
29554
29748
 
29555
29749
  // src/sections/Rewards.tsx
29556
- import { useEffect as useEffect33, useState as useState51 } from "react";
29750
+ import { useEffect as useEffect34, useState as useState51 } from "react";
29557
29751
  import { Alert as Alert3, Image as Image3, Share as Share2, StyleSheet as StyleSheet27, View as View31 } from "react-native";
29558
29752
  import Clipboard2 from "@react-native-clipboard/clipboard";
29559
29753
 
@@ -29662,7 +29856,7 @@ var styles12 = StyleSheet25.create({
29662
29856
  });
29663
29857
 
29664
29858
  // src/sections/rewards/RewardsTree.tsx
29665
- import { useMemo as useMemo35 } from "react";
29859
+ import { useMemo as useMemo36 } from "react";
29666
29860
  import { StyleSheet as StyleSheet26, View as View30 } from "react-native";
29667
29861
  import { jsx as jsx35, jsxs as jsxs31 } from "react/jsx-runtime";
29668
29862
  var MAX_NODES = 120;
@@ -29670,11 +29864,11 @@ var DOT = 10;
29670
29864
  var ROOT_DOT = 16;
29671
29865
  var RewardsTree = ({ tree, size = 260 }) => {
29672
29866
  const theme = useTheme();
29673
- const nodes = useMemo35(() => {
29867
+ const nodes = useMemo36(() => {
29674
29868
  var _a2;
29675
29869
  return ((_a2 = tree == null ? void 0 : tree.nodes) != null ? _a2 : []).slice(0, MAX_NODES);
29676
29870
  }, [tree]);
29677
- const { layout, edges, rootId } = useMemo35(() => {
29871
+ const { layout, edges, rootId } = useMemo36(() => {
29678
29872
  const root = treeRootId(nodes);
29679
29873
  const computed = computeRadialTreeLayout(nodes, root);
29680
29874
  return { layout: computed, edges: radialTreeEdges(nodes, computed), rootId: root };
@@ -29764,7 +29958,7 @@ var RewardsView = ({
29764
29958
  const [packName, setPackName] = useState51("");
29765
29959
  const [packCode, setPackCode] = useState51("");
29766
29960
  const [copied, setCopied] = useState51(false);
29767
- useEffect33(() => {
29961
+ useEffect34(() => {
29768
29962
  setCopied(false);
29769
29963
  }, [rewards == null ? void 0 : rewards.share_link]);
29770
29964
  if (!rewards)
@@ -29952,7 +30146,7 @@ var styles14 = StyleSheet27.create({
29952
30146
  });
29953
30147
 
29954
30148
  // src/sections/TicketChange.tsx
29955
- import { useMemo as useMemo36 } from "react";
30149
+ import { useMemo as useMemo37 } from "react";
29956
30150
  import { Pressable as Pressable13, StyleSheet as StyleSheet28, Text as Text21, View as View32 } from "react-native";
29957
30151
  import { Fragment as Fragment16, jsx as jsx37, jsxs as jsxs33 } from "react/jsx-runtime";
29958
30152
  var TicketChange = ({
@@ -30162,7 +30356,7 @@ var TicketChange = ({
30162
30356
  flow.notice ? /* @__PURE__ */ jsx37(Text21, { style: s9.muted, children: t(flow.notice) }) : null
30163
30357
  ] });
30164
30358
  };
30165
- var useChangeStyles = (theme) => useMemo36(
30359
+ var useChangeStyles = (theme) => useMemo37(
30166
30360
  () => StyleSheet28.create({
30167
30361
  loader: { paddingVertical: 20, alignItems: "center" },
30168
30362
  muted: {
@@ -30276,7 +30470,7 @@ import {
30276
30470
  } from "react-native";
30277
30471
 
30278
30472
  // src/sections/discussion/CommentImages.tsx
30279
- import { useEffect as useEffect34, useState as useState52 } from "react";
30473
+ import { useEffect as useEffect35, useState as useState52 } from "react";
30280
30474
  import {
30281
30475
  ActivityIndicator as ActivityIndicator3,
30282
30476
  Image as Image4,
@@ -30289,9 +30483,9 @@ import {
30289
30483
  } from "react-native";
30290
30484
 
30291
30485
  // src/ui/useAccountT.ts
30292
- import { useMemo as useMemo37 } from "react";
30486
+ import { useMemo as useMemo38 } from "react";
30293
30487
  var useAccountT = (locale) => {
30294
- const translate2 = useMemo37(
30488
+ const translate2 = useMemo38(
30295
30489
  () => createTranslator({ locale: resolveLocale(locale) }),
30296
30490
  [locale]
30297
30491
  );
@@ -30356,7 +30550,7 @@ var CommentImages = ({
30356
30550
  const theme = useTheme();
30357
30551
  const white = [s.white, { fontFamily: theme.fontFamily }];
30358
30552
  const [selected, setSelected] = useState52(null);
30359
- useEffect34(() => {
30553
+ useEffect35(() => {
30360
30554
  if (selected === null) return;
30361
30555
  onPreviewChange(true);
30362
30556
  return () => onPreviewChange(false);
@@ -30612,7 +30806,7 @@ var s = StyleSheet29.create({
30612
30806
  });
30613
30807
 
30614
30808
  // src/sections/discussion/SwipeReply.tsx
30615
- import { useMemo as useMemo38, useRef as useRef36 } from "react";
30809
+ import { useMemo as useMemo39, useRef as useRef36 } from "react";
30616
30810
  import { Animated, PanResponder as PanResponder2, StyleSheet as StyleSheet30, Text as Text23, View as View35 } from "react-native";
30617
30811
  import { jsx as jsx40, jsxs as jsxs36 } from "react/jsx-runtime";
30618
30812
  var SwipeReply = ({
@@ -30624,7 +30818,7 @@ var SwipeReply = ({
30624
30818
  }) => {
30625
30819
  const theme = useTheme();
30626
30820
  const offset = useRef36(new Animated.Value(0)).current;
30627
- const gesture = useMemo38(() => {
30821
+ const gesture = useMemo39(() => {
30628
30822
  const reset = () => Animated.spring(offset, { toValue: 0, useNativeDriver: true }).start();
30629
30823
  return PanResponder2.create({
30630
30824
  onMoveShouldSetPanResponder: (_, value6) => enabled && value6.dx < -12 && Math.abs(value6.dx) > Math.abs(value6.dy) * 1.5,
@@ -31728,7 +31922,7 @@ var styles15 = StyleSheet32.create({
31728
31922
  });
31729
31923
 
31730
31924
  // src/sections/Streaming.tsx
31731
- import { useMemo as useMemo39, useRef as useRef38, useState as useState54 } from "react";
31925
+ import { useMemo as useMemo40, useRef as useRef38, useState as useState54 } from "react";
31732
31926
  import {
31733
31927
  ActivityIndicator as ActivityIndicator5,
31734
31928
  Alert as Alert6,
@@ -31757,7 +31951,7 @@ var StreamingView = ({
31757
31951
  const defaultT = useAccountT(locale);
31758
31952
  const t = translate2 != null ? translate2 : defaultT;
31759
31953
  const inherited = useTheme();
31760
- const theme = useMemo39(
31954
+ const theme = useMemo40(
31761
31955
  () => override ? resolveTheme({ ...inherited, ...override }) : inherited,
31762
31956
  [inherited, override]
31763
31957
  );
@@ -31927,7 +32121,7 @@ var s4 = StyleSheet33.create({
31927
32121
  });
31928
32122
 
31929
32123
  // src/sections/AccountDeletion.tsx
31930
- import { useMemo as useMemo40 } from "react";
32124
+ import { useMemo as useMemo41 } from "react";
31931
32125
  import {
31932
32126
  ActivityIndicator as ActivityIndicator6,
31933
32127
  Alert as Alert7,
@@ -31959,7 +32153,7 @@ var AccountDeletionView = ({
31959
32153
  const defaultT = useAccountT(locale);
31960
32154
  const t = translate2 != null ? translate2 : defaultT;
31961
32155
  const inherited = useTheme();
31962
- const theme = useMemo40(
32156
+ const theme = useMemo41(
31963
32157
  () => override ? resolveTheme({ ...inherited, ...override }) : inherited,
31964
32158
  [inherited, override]
31965
32159
  );
@@ -32188,7 +32382,7 @@ var s5 = StyleSheet34.create({
32188
32382
  });
32189
32383
 
32190
32384
  // src/sections/ProfileSettings.tsx
32191
- import { useEffect as useEffect35, useMemo as useMemo41 } from "react";
32385
+ import { useEffect as useEffect36, useMemo as useMemo42 } from "react";
32192
32386
  import {
32193
32387
  ActivityIndicator as ActivityIndicator7,
32194
32388
  KeyboardAvoidingView as KeyboardAvoidingView2,
@@ -32223,7 +32417,7 @@ var ProfileSettingsView = ({
32223
32417
  const defaultT = useAccountT(locale);
32224
32418
  const t = translate2 != null ? translate2 : defaultT;
32225
32419
  const inherited = useTheme();
32226
- const theme = useMemo41(
32420
+ const theme = useMemo42(
32227
32421
  () => override ? resolveTheme({ ...inherited, ...override }) : inherited,
32228
32422
  [inherited, override]
32229
32423
  );
@@ -32235,7 +32429,7 @@ var ProfileSettingsView = ({
32235
32429
  } catch (e) {
32236
32430
  }
32237
32431
  };
32238
- useEffect35(() => {
32432
+ useEffect36(() => {
32239
32433
  if (flow.settings) flow.open(mode);
32240
32434
  }, [mode, flow.scopeKey, Boolean(flow.settings)]);
32241
32435
  const text6 = { color: theme.text, fontFamily: theme.fontFamily };
@@ -32740,7 +32934,7 @@ var AccountPaymentPlanSection = ({
32740
32934
  };
32741
32935
 
32742
32936
  // src/sections/NotificationPreferences.tsx
32743
- import { useEffect as useEffect36, useMemo as useMemo42 } from "react";
32937
+ import { useEffect as useEffect37, useMemo as useMemo43 } from "react";
32744
32938
  import {
32745
32939
  ActivityIndicator as ActivityIndicator8,
32746
32940
  Pressable as Pressable21,
@@ -32769,7 +32963,7 @@ var NotificationPreferencesView = ({
32769
32963
  const defaultT = useAccountT(locale);
32770
32964
  const t = translate2 != null ? translate2 : defaultT;
32771
32965
  const inherited = useTheme();
32772
- const theme = useMemo42(
32966
+ const theme = useMemo43(
32773
32967
  () => override ? resolveTheme({ ...inherited, ...override }) : inherited,
32774
32968
  [inherited, override]
32775
32969
  );
@@ -32781,7 +32975,7 @@ var NotificationPreferencesView = ({
32781
32975
  } catch (e) {
32782
32976
  }
32783
32977
  };
32784
- useEffect36(() => {
32978
+ useEffect37(() => {
32785
32979
  var _a3;
32786
32980
  if ((_a3 = flow.preferences) == null ? void 0 : _a3.available) flow.begin();
32787
32981
  }, [flow.scopeKey, Boolean(flow.preferences), (_a2 = flow.preferences) == null ? void 0 : _a2.available]);
@@ -32951,7 +33145,7 @@ import {
32951
33145
  } from "react-native";
32952
33146
 
32953
33147
  // src/auth/LoginForm.tsx
32954
- import { useEffect as useEffect37, useState as useState56 } from "react";
33148
+ import { useEffect as useEffect38, useState as useState56 } from "react";
32955
33149
  import { Pressable as Pressable23, StyleSheet as StyleSheet38, Text as Text31, View as View49 } from "react-native";
32956
33150
 
32957
33151
  // src/auth/PasswordInput.tsx
@@ -33003,7 +33197,7 @@ var LoginForm = ({
33003
33197
  const theme = useTheme();
33004
33198
  const [email, setEmail] = useState56(initialEmail);
33005
33199
  const [password, setPassword] = useState56("");
33006
- useEffect37(() => {
33200
+ useEffect38(() => {
33007
33201
  if (initialEmail && !email) setEmail(initialEmail);
33008
33202
  }, [email, initialEmail]);
33009
33203
  const submit = () => void onSubmit({ email, password });
@@ -33127,7 +33321,7 @@ var EmailCodeForm = ({
33127
33321
  };
33128
33322
 
33129
33323
  // src/auth/ForgotPasswordForm.tsx
33130
- import { useEffect as useEffect38, useState as useState58 } from "react";
33324
+ import { useEffect as useEffect39, useState as useState58 } from "react";
33131
33325
  import { Pressable as Pressable24, StyleSheet as StyleSheet39, Text as Text32, View as View51 } from "react-native";
33132
33326
  import { jsx as jsx56, jsxs as jsxs52 } from "react/jsx-runtime";
33133
33327
  var ForgotPasswordForm = ({
@@ -33142,7 +33336,7 @@ var ForgotPasswordForm = ({
33142
33336
  }) => {
33143
33337
  const theme = useTheme();
33144
33338
  const [email, setEmail] = useState58(initialEmail);
33145
- useEffect38(() => {
33339
+ useEffect39(() => {
33146
33340
  if (initialEmail && !email) setEmail(initialEmail);
33147
33341
  }, [email, initialEmail]);
33148
33342
  const submit = () => void onSubmit(email);
@@ -33190,7 +33384,7 @@ var styles18 = StyleSheet39.create({
33190
33384
  });
33191
33385
 
33192
33386
  // src/auth/RegisterForm.tsx
33193
- import { useEffect as useEffect39, useMemo as useMemo43, useState as useState59 } from "react";
33387
+ import { useEffect as useEffect40, useMemo as useMemo44, useState as useState59 } from "react";
33194
33388
  import { Linking as Linking10, Pressable as Pressable25, StyleSheet as StyleSheet40, View as View52 } from "react-native";
33195
33389
  import { Fragment as Fragment29, jsx as jsx57, jsxs as jsxs53 } from "react/jsx-runtime";
33196
33390
  var emptyRegistration = (email) => ({
@@ -33219,7 +33413,7 @@ var RegisterForm = ({
33219
33413
  onFieldChange
33220
33414
  }) => {
33221
33415
  var _a2, _b, _c, _d, _e, _f;
33222
- const t = useMemo43(() => createTranslator({ locale }), [locale]);
33416
+ const t = useMemo44(() => createTranslator({ locale }), [locale]);
33223
33417
  const [values2, setValues] = useState59(
33224
33418
  () => emptyRegistration(initialEmail)
33225
33419
  );
@@ -33227,22 +33421,22 @@ var RegisterForm = ({
33227
33421
  const [refreshingProof, setRefreshingProof] = useState59(false);
33228
33422
  const [refreshCode, setRefreshCode] = useState59("");
33229
33423
  const countriesQuery = hooks_exports.useCountries();
33230
- const countries = useMemo43(() => {
33424
+ const countries = useMemo44(() => {
33231
33425
  var _a3;
33232
33426
  return (_a3 = countriesQuery.data) != null ? _a3 : [];
33233
33427
  }, [countriesQuery.data]);
33234
33428
  const statesQuery = hooks_exports.useStates(values2.countryId, {
33235
33429
  enabled: requireAddress && Boolean(values2.countryId)
33236
33430
  });
33237
- const states = useMemo43(() => {
33431
+ const states = useMemo44(() => {
33238
33432
  var _a3;
33239
33433
  return (_a3 = statesQuery.data) != null ? _a3 : [];
33240
33434
  }, [statesQuery.data]);
33241
- useEffect39(() => {
33435
+ useEffect40(() => {
33242
33436
  if (initialEmail && !values2.email)
33243
33437
  setValues((current5) => ({ ...current5, email: initialEmail }));
33244
33438
  }, [initialEmail, values2.email]);
33245
- useEffect39(() => {
33439
+ useEffect40(() => {
33246
33440
  var _a3;
33247
33441
  if (!requireAddress || values2.countryId || countries.length === 0) return;
33248
33442
  const preferred = (_a3 = countries.find((country) => {
@@ -33263,11 +33457,11 @@ var RegisterForm = ({
33263
33457
  setValues((current5) => ({ ...current5, [field]: value6 }));
33264
33458
  onFieldChange == null ? void 0 : onFieldChange(field);
33265
33459
  };
33266
- const countryOptions = useMemo43(
33460
+ const countryOptions = useMemo44(
33267
33461
  () => countries.map((country) => ({ label: country.name, value: String(country.id) })),
33268
33462
  [countries]
33269
33463
  );
33270
- const stateOptions = useMemo43(
33464
+ const stateOptions = useMemo44(
33271
33465
  () => states.map((state) => ({ label: state.name, value: String(state.id) })),
33272
33466
  [states]
33273
33467
  );
@@ -33866,7 +34060,7 @@ function AccountEmailEnrichment({
33866
34060
  }
33867
34061
 
33868
34062
  // src/auth/AuthModal.tsx
33869
- import { useCallback as useCallback16, useEffect as useEffect40, useRef as useRef39 } from "react";
34063
+ import { useCallback as useCallback17, useEffect as useEffect41, useRef as useRef39 } from "react";
33870
34064
  import { Image as Image8, Modal as Modal7, Pressable as Pressable26, ScrollView as ScrollView4, StyleSheet as StyleSheet42, Text as Text34, View as View55 } from "react-native";
33871
34065
  import { jsx as jsx60, jsxs as jsxs56 } from "react/jsx-runtime";
33872
34066
  var Tab = ({
@@ -33901,7 +34095,7 @@ var CredentialAuthModal = ({
33901
34095
  }) => {
33902
34096
  const theme = useTheme();
33903
34097
  const t = useAccountT();
33904
- const closeAfterAuth = useCallback16(
34098
+ const closeAfterAuth = useCallback17(
33905
34099
  (profile) => {
33906
34100
  onAuthenticated == null ? void 0 : onAuthenticated(profile);
33907
34101
  onClose();
@@ -34094,7 +34288,7 @@ var PhoneAccountModal = ({
34094
34288
  onCancelled: onClose
34095
34289
  });
34096
34290
  const prepared = useRef39(false);
34097
- useEffect40(() => {
34291
+ useEffect41(() => {
34098
34292
  if (prepared.current) return;
34099
34293
  prepared.current = true;
34100
34294
  if (initialEmail) flow.emailAuth.showLogin(initialEmail);
@@ -34184,7 +34378,7 @@ var styles20 = StyleSheet42.create({
34184
34378
  });
34185
34379
 
34186
34380
  // src/auth/ResetPasswordForm.tsx
34187
- import { useMemo as useMemo44, useState as useState60 } from "react";
34381
+ import { useMemo as useMemo45, useState as useState60 } from "react";
34188
34382
  import { StyleSheet as StyleSheet43, Text as Text35, View as View56 } from "react-native";
34189
34383
  import { jsx as jsx61, jsxs as jsxs57 } from "react/jsx-runtime";
34190
34384
  var ResetPasswordForm = ({
@@ -34197,7 +34391,7 @@ var ResetPasswordForm = ({
34197
34391
  const [confirmation, setConfirmation] = useState60("");
34198
34392
  const [submitted, setSubmitted] = useState60(false);
34199
34393
  const [success, setSuccess] = useState60(false);
34200
- const validation = useMemo44(() => {
34394
+ const validation = useMemo45(() => {
34201
34395
  if (!submitted)
34202
34396
  return {};
34203
34397
  return {
@@ -34256,7 +34450,7 @@ var styles21 = StyleSheet43.create({
34256
34450
  });
34257
34451
 
34258
34452
  // src/EmbeddedCheckout.tsx
34259
- import { useEffect as useEffect41, useRef as useRef40, useState as useState61 } from "react";
34453
+ import { useEffect as useEffect42, useRef as useRef40, useState as useState61 } from "react";
34260
34454
  import { Pressable as Pressable27, ScrollView as ScrollView5, StyleSheet as StyleSheet44, Text as Text36, View as View57 } from "react-native";
34261
34455
  import { Fragment as Fragment32, jsx as jsx62, jsxs as jsxs58 } from "react/jsx-runtime";
34262
34456
  var Flow = ({
@@ -34303,7 +34497,7 @@ var Flow = ({
34303
34497
  orderFixed: checkout.orderFixed
34304
34498
  });
34305
34499
  const leaveAllowed = canLeavePayment(checkout);
34306
- useEffect41(() => {
34500
+ useEffect42(() => {
34307
34501
  if (visibleView === view) return;
34308
34502
  if (visibleView === "checkout") setView("checkout");
34309
34503
  else {
@@ -34311,7 +34505,7 @@ var Flow = ({
34311
34505
  setSelectionView("tickets");
34312
34506
  }
34313
34507
  }, [view, visibleView]);
34314
- useEffect41(() => {
34508
+ useEffect42(() => {
34315
34509
  onViewChange == null ? void 0 : onViewChange(visibleView);
34316
34510
  }, [onViewChange, visibleView]);
34317
34511
  const enterCheckout = (from) => {
@@ -34703,6 +34897,7 @@ export {
34703
34897
  bundleSubmitAction,
34704
34898
  bundleSubmitState,
34705
34899
  bundlesFromCatalog,
34900
+ calendarTicketRows,
34706
34901
  callHost,
34707
34902
  canLeavePayment,
34708
34903
  captureSessionAction,
@@ -34711,6 +34906,8 @@ export {
34711
34906
  cardFormShouldPrepare,
34712
34907
  cartTicketCount,
34713
34908
  cartTicketSlots,
34909
+ catalogDate,
34910
+ catalogQuantities,
34714
34911
  changeBillingEmail,
34715
34912
  changeBillingField,
34716
34913
  changeBillingPhone,