@getmicdrop/venue-calendar 4.0.5 → 4.0.6

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 (84) hide show
  1. package/README.md +700 -700
  2. package/dist/{AirbnbSplitMain-BVNtTJc-.js → AirbnbSplitMain-CCv3Iffq.js} +4 -4
  3. package/dist/AirbnbSplitMain-CCv3Iffq.js.map +1 -0
  4. package/dist/{CarouselView.legacy-B6HtvF8d.js → CarouselView.legacy-CrRZOj_r.js} +3 -3
  5. package/dist/CarouselView.legacy-CrRZOj_r.js.map +1 -0
  6. package/dist/{CartView-DrOhr4Qi.js → CartView-iQo98Gz9.js} +92 -86
  7. package/dist/CartView-iQo98Gz9.js.map +1 -0
  8. package/dist/{Checkout-DB1Aocl-.js → Checkout-B5cpBC_C.js} +4 -4
  9. package/dist/Checkout-B5cpBC_C.js.map +1 -0
  10. package/dist/{Checkout.legacy-DpcjjHQu.js → Checkout.legacy-BbnADZBS.js} +4 -4
  11. package/dist/Checkout.legacy-BbnADZBS.js.map +1 -0
  12. package/dist/{CheckoutMain-D0_1xfR8.js → CheckoutMain-Cucw7O5q.js} +4 -4
  13. package/dist/CheckoutMain-Cucw7O5q.js.map +1 -0
  14. package/dist/{CheckoutTimer-r1HaN6b6.js → CheckoutTimer-CA8JRNNX.js} +2 -2
  15. package/dist/CheckoutTimer-CA8JRNNX.js.map +1 -0
  16. package/dist/{CollectionView-5OzqEVQg.js → CollectionView-B9vBgPTn.js} +5 -5
  17. package/dist/CollectionView-B9vBgPTn.js.map +1 -0
  18. package/dist/{CollectionView.legacy-CabEI40i.js → CollectionView.legacy-lSUeA4gS.js} +3 -3
  19. package/dist/CollectionView.legacy-lSUeA4gS.js.map +1 -0
  20. package/dist/{EventDetailsView-CiGPGPz5.js → EventDetailsView-xfnj-hRQ.js} +2 -2
  21. package/dist/EventDetailsView-xfnj-hRQ.js.map +1 -0
  22. package/dist/{FeaturedView.legacy-tTPbRxSf.js → FeaturedView.legacy-BnqQQ1Hx.js} +2 -2
  23. package/dist/FeaturedView.legacy-BnqQQ1Hx.js.map +1 -0
  24. package/dist/{GalleryCard-CBMPmdrM.js → GalleryCard-CfQenZ6B.js} +2 -2
  25. package/dist/GalleryCard-CfQenZ6B.js.map +1 -0
  26. package/dist/{GalleryView.legacy-4QPpX22O.js → GalleryView.legacy-DTSxVx10.js} +3 -3
  27. package/dist/GalleryView.legacy-DTSxVx10.js.map +1 -0
  28. package/dist/{GroupedListView.legacy-CPJRLePS.js → GroupedListView.legacy-B4a7OzQZ.js} +2 -2
  29. package/dist/GroupedListView.legacy-B4a7OzQZ.js.map +1 -0
  30. package/dist/OrderSummarySkeleton-dDKUH741.js.map +1 -1
  31. package/dist/{SeriesPage-IZWQ53xg.js → SeriesPage-BudI30aC.js} +5 -5
  32. package/dist/SeriesPage-BudI30aC.js.map +1 -0
  33. package/dist/{SeriesPage.legacy-4jSF2g-n.js → SeriesPage.legacy-Bv0HHWbw.js} +2 -2
  34. package/dist/SeriesPage.legacy-Bv0HHWbw.js.map +1 -0
  35. package/dist/{Success-DTSn26bg.js → Success-BGNZH5BM.js} +5 -5
  36. package/dist/Success-BGNZH5BM.js.map +1 -0
  37. package/dist/{Success.legacy--ABrtyII.js → Success.legacy-CRUwkdEm.js} +2 -2
  38. package/dist/Success.legacy-CRUwkdEm.js.map +1 -0
  39. package/dist/{VenueCalendar-DpZ70okH.js → VenueCalendar-DO07BAoR.js} +18 -15
  40. package/dist/{VenueCalendar-DpZ70okH.js.map → VenueCalendar-DO07BAoR.js.map} +1 -1
  41. package/dist/{ViewTicketsEmbed-CgHcn-qh.js → ViewTicketsEmbed-HD3tu9Yo.js} +2 -2
  42. package/dist/ViewTicketsEmbed-HD3tu9Yo.js.map +1 -0
  43. package/dist/api/api.cjs +1 -1
  44. package/dist/api/api.cjs.map +1 -1
  45. package/dist/api/api.mjs +4 -1
  46. package/dist/api/api.mjs.map +1 -1
  47. package/dist/api/types.d.ts +357 -353
  48. package/dist/colors-BZoMuXdh.js.map +1 -1
  49. package/dist/{labels-ClcIxHAF.js → labels-CuX0_TVA.js} +2 -2
  50. package/dist/labels-CuX0_TVA.js.map +1 -0
  51. package/dist/seo/seo.cjs.map +1 -1
  52. package/dist/seo/seo.mjs.map +1 -1
  53. package/dist/seo/types.d.ts +137 -137
  54. package/dist/{transform-DW3JR-t5.js → transform-B0K6j8y8.js} +2 -2
  55. package/dist/transform-B0K6j8y8.js.map +1 -0
  56. package/dist/types/index.d.ts +387 -387
  57. package/dist/venue-calendar.es.js +1 -1
  58. package/dist/venue-calendar.iife.js +13 -13
  59. package/dist/venue-calendar.iife.js.map +1 -1
  60. package/dist/venue-calendar.umd.js +13 -13
  61. package/dist/venue-calendar.umd.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/lib/theme.js +222 -222
  64. package/dist/AirbnbSplitMain-BVNtTJc-.js.map +0 -1
  65. package/dist/CarouselView.legacy-B6HtvF8d.js.map +0 -1
  66. package/dist/CartView-DrOhr4Qi.js.map +0 -1
  67. package/dist/Checkout-DB1Aocl-.js.map +0 -1
  68. package/dist/Checkout.legacy-DpcjjHQu.js.map +0 -1
  69. package/dist/CheckoutMain-D0_1xfR8.js.map +0 -1
  70. package/dist/CheckoutTimer-r1HaN6b6.js.map +0 -1
  71. package/dist/CollectionView-5OzqEVQg.js.map +0 -1
  72. package/dist/CollectionView.legacy-CabEI40i.js.map +0 -1
  73. package/dist/EventDetailsView-CiGPGPz5.js.map +0 -1
  74. package/dist/FeaturedView.legacy-tTPbRxSf.js.map +0 -1
  75. package/dist/GalleryCard-CBMPmdrM.js.map +0 -1
  76. package/dist/GalleryView.legacy-4QPpX22O.js.map +0 -1
  77. package/dist/GroupedListView.legacy-CPJRLePS.js.map +0 -1
  78. package/dist/SeriesPage-IZWQ53xg.js.map +0 -1
  79. package/dist/SeriesPage.legacy-4jSF2g-n.js.map +0 -1
  80. package/dist/Success-DTSn26bg.js.map +0 -1
  81. package/dist/Success.legacy--ABrtyII.js.map +0 -1
  82. package/dist/ViewTicketsEmbed-CgHcn-qh.js.map +0 -1
  83. package/dist/labels-ClcIxHAF.js.map +0 -1
  84. package/dist/transform-DW3JR-t5.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"CartView-DrOhr4Qi.js","sources":["../src/lib/utils/quantity-clamp.ts","../src/components/Events/Tickets/TicketBlock.svelte","../src/components/Events/Tickets/TicketSkeleton.svelte","../src/components/Events/Tickets/TicketsGroup.svelte","../src/components/Events/Tickets/PromocodeInput.svelte","../src/components/Events/Tickets/EventInfoHeader.svelte","../src/components/Views/CartView.svelte"],"sourcesContent":["/**\n * Quantity-clamp utility (MIC-946).\n *\n * Cookie-restored cart quantities can become stale when a ticket's\n * `remainingCapacity` drops or its per-order `maxQuantity` is reduced\n * between sessions. The submit-time oversell modal still catches a\n * runtime race, but we should not start the user with an over-cap\n * selection in the first place.\n *\n * `clampQuantitiesToCapacity` reduces each quantity entry to\n * `min(requested, max(0, remainingCapacity ?? Infinity), maxQuantity || Infinity)`\n * and removes entries that fall to 0 or below. It is a pure helper —\n * no state mutation, returns a fresh object so Svelte 5 runes pick up\n * the change.\n */\n\ninterface CapacityTicket {\n ID: number | string;\n remainingCapacity?: number | null;\n maxQuantity?: number | null;\n [key: string]: unknown;\n}\n\nexport function clampQuantitiesToCapacity(\n quantities: Record<string, number> | null | undefined,\n tickets: CapacityTicket[] | null | undefined\n): Record<string, number> {\n if (!quantities || typeof quantities !== \"object\") return {};\n if (!Array.isArray(tickets) || tickets.length === 0) {\n // No tickets to validate against — preserve only positive integers.\n const passthrough: Record<string, number> = {};\n for (const [id, qty] of Object.entries(quantities)) {\n if (typeof qty === \"number\" && qty > 0) passthrough[id] = qty;\n }\n return passthrough;\n }\n\n const ticketById = new Map<string, CapacityTicket>();\n for (const t of tickets) {\n if (t && t.ID !== undefined && t.ID !== null) {\n ticketById.set(String(t.ID), t);\n }\n }\n\n const clamped: Record<string, number> = {};\n for (const [id, requestedRaw] of Object.entries(quantities)) {\n if (typeof requestedRaw !== \"number\" || !Number.isFinite(requestedRaw)) continue;\n if (requestedRaw <= 0) continue;\n\n const ticket = ticketById.get(String(id));\n let cap = requestedRaw;\n\n if (ticket) {\n const remaining = ticket.remainingCapacity;\n if (typeof remaining === \"number\" && Number.isFinite(remaining)) {\n cap = Math.min(cap, Math.max(0, remaining));\n }\n const perOrderMax = ticket.maxQuantity;\n if (\n typeof perOrderMax === \"number\" &&\n Number.isFinite(perOrderMax) &&\n perOrderMax > 0\n ) {\n cap = Math.min(cap, perOrderMax);\n }\n }\n\n if (cap > 0) clamped[id] = cap;\n }\n\n return clamped;\n}\n","<script>\n import { Add, Subtract, Fire } from 'carbon-icons-svelte';\n import {\n Input,\n Button,\n formatDateTime,\n formatTime,\n formatCurrency,\n } from '@getmicdrop/svelte-components';\n import { GRAY } from '$lib/constants/colors.ts';\n import ScarcityBadge from '../../ScarcityBadge.svelte';\n\n let {\n title,\n description,\n price,\n fee = '0.00',\n quantity = 0,\n soldOut = false,\n status = null,\n salesBegin = null,\n salesEnd = null,\n remainingCapacity = null,\n totalCapacity = null, // Total ticket capacity for percentage calculation\n minQuantity = 1, // Minimum quantity per order (default 1)\n maxQuantity = null, // Maximum quantity per order (null = unlimited)\n discountedPrice = null, // Discounted price when promo applied\n isRevealed = false, // Badge: Unlocked via promo\n isDiscounted = false, // Badge: Discount applied\n ticketType = 0, // 0 = paid/standard, 1 = registration/free, 2 = donation\n donationAmount = '', // User-entered donation amount (string for input binding)\n onincrement,\n ondecrement,\n ondonationchange, // Callback when donation amount changes\n labels = {},\n } = $props();\n\n // Donation ticket logic\n const isDonation = $derived(ticketType === 2);\n const donationValue = $derived(parseFloat(donationAmount) || 0);\n const donationError = $derived(\n isDonation && donationAmount !== '' && donationValue < 1\n ? labels.minimumDonation || 'Minimum $1.00'\n : ''\n );\n const isDonationValid = $derived(\n !isDonation || (donationAmount !== '' && donationValue >= 1)\n );\n\n const priceValue = $derived(parseFloat(price) || 0);\n const feeValue = $derived(priceValue === 0 ? 0 : parseFloat(fee) || 0);\n const totalPrice = $derived(formatCurrency(priceValue + feeValue));\n const formattedFee = $derived(formatCurrency(feeValue));\n\n // Calculate discounted totals\n const discountedPriceValue = $derived(\n discountedPrice ? parseFloat(discountedPrice) : null\n );\n const discountedFeeValue = $derived(\n discountedPriceValue === null\n ? 0\n : discountedPriceValue === 0\n ? 0\n : parseFloat(fee) || 0\n );\n const discountedTotalPrice = $derived(\n discountedPriceValue !== null\n ? formatCurrency(discountedPriceValue + discountedFeeValue)\n : null\n );\n\n // Calculate effective total capacity (use totalCapacity if provided, otherwise use remainingCapacity as fallback)\n const effectiveTotalCapacity = $derived(\n totalCapacity ?? remainingCapacity ?? 0\n );\n\n // Scarcity thresholds (from canonical status.ts defaults)\n const URGENT_PCT = 10;\n const LOW_PCT = 15;\n const ABSOLUTE_CAP = 30;\n const ABSOLUTE_FLOOR = 5;\n const MAX_EXACT_COUNT = 20;\n\n function effectiveThreshold(basePct, total) {\n if (total === 0) return 0;\n const capPct = (ABSOLUTE_CAP / total) * 100;\n const floorPct = (ABSOLUTE_FLOOR / total) * 100;\n return Math.max(Math.min(basePct, capPct), floorPct);\n }\n\n const scarcityInfo = $derived.by(() => {\n const remaining = remainingCapacity ?? 0;\n const total = effectiveTotalCapacity;\n if (total === 0 || status === 'scheduled' || status === 'sales_ended')\n return null;\n if (remaining <= 0) return { text: 'Sold out', type: 'sold-out' };\n if (priceValue === 0) return null; // no scarcity on free tickets\n\n const pct = (remaining / total) * 100;\n const urgentThreshold = effectiveThreshold(URGENT_PCT, total);\n const lowThreshold = effectiveThreshold(LOW_PCT, total);\n\n if (pct <= urgentThreshold && remaining <= MAX_EXACT_COUNT) {\n return {\n text: `Only ${remaining} left`,\n type: 'scarcity',\n showFlame: true,\n };\n }\n if (pct <= lowThreshold) {\n return { text: 'Few tickets left', type: 'scarcity', showFlame: true };\n }\n return null;\n });\n\n const showScarcityBadge = $derived(\n scarcityInfo != null && scarcityInfo.type === 'scarcity'\n );\n\n function formatDate(dateString) {\n if (!dateString) return '';\n return formatDateTime(dateString, { year: undefined, timeZone: 'UTC' });\n }\n\n // Check if a date is tomorrow (next calendar day)\n function isTomorrow(date) {\n const now = new Date();\n const tomorrow = new Date(now);\n tomorrow.setDate(tomorrow.getDate() + 1);\n return date.toDateString() === tomorrow.toDateString();\n }\n\n // Check if a date is within the next 7 days (for showing day name)\n function isWithinWeek(date) {\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n const diffDays = diffMs / (1000 * 60 * 60 * 24);\n return diffDays > 0 && diffDays <= 7;\n }\n\n // Smart time formatting with thresholds:\n // < 1 hour: \"in X minutes\"\n // 1-24 hours: \"in X hours\"\n // Tomorrow: \"tomorrow at X:XX AM/PM\"\n // 2-7 days: \"on [Day] at X:XX\" (e.g., \"on Friday at 10:00 AM\")\n // > 7 days: \"on [Month Day]\" (e.g., \"on Dec 10\")\n function formatSmartTime(dateString) {\n if (!dateString) return { text: '', preposition: '' };\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n const diffMinutes = Math.round(diffMs / (1000 * 60));\n const diffHours = diffMs / (1000 * 60 * 60);\n const locale = labels.locale || 'en-US';\n\n // Less than 1 hour: \"in X minutes\"\n if (diffMinutes > 0 && diffMinutes < 60) {\n const mins = Math.max(1, diffMinutes);\n const template =\n mins === 1\n ? labels.inNMinute || 'in {n} minute'\n : labels.inNMinutes || 'in {n} minutes';\n return { text: template.replace('{n}', String(mins)), preposition: '' };\n }\n\n // 1-24 hours: \"in X hours\"\n if (diffHours > 0 && diffHours < 24) {\n const hours = Math.max(1, Math.round(diffHours));\n const template =\n hours === 1\n ? labels.inNHour || 'in {n} hour'\n : labels.inNHours || 'in {n} hours';\n return { text: template.replace('{n}', String(hours)), preposition: '' };\n }\n\n // Tomorrow: \"tomorrow at X:XX AM/PM\"\n if (isTomorrow(date)) {\n const timeStr = formatTime(dateString, { timeZone: 'UTC' });\n return {\n text: (labels.tomorrowAtTime || 'tomorrow at {time}').replace(\n '{time}',\n timeStr\n ),\n preposition: '',\n };\n }\n\n // 2-7 days: \"on [Day] at X:XX\"\n if (isWithinWeek(date)) {\n const dayName = new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n }).format(date);\n const timeStr = formatTime(dateString, { timeZone: 'UTC' });\n return {\n text: (labels.onDayAtTime || 'on {day} at {time}')\n .replace('{day}', dayName)\n .replace('{time}', timeStr),\n preposition: '',\n };\n }\n\n // > 7 days: \"on [Month Day]\"\n const dateStr = new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n }).format(date);\n return {\n text: (labels.onDate || 'on {date}').replace('{date}', dateStr),\n preposition: '',\n };\n }\n\n // Format sales start with smart thresholds\n function formatSalesStart(dateString) {\n const { text } = formatSmartTime(dateString);\n return text;\n }\n\n // Format sales end with smart thresholds\n function formatSalesEnd(dateString) {\n return formatSmartTime(dateString);\n }\n\n // Check if sales end is imminent (within 24 hours) for styling urgency\n function isSalesEndingSoon(dateString) {\n if (!dateString) return false;\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n const diffHours = diffMs / (1000 * 60 * 60);\n return diffHours > 0 && diffHours <= 24;\n }\n\n const statusInfo = $derived(\n (() => {\n if (!status) return null;\n\n switch (status) {\n case 'scheduled':\n return {\n showAsMessage: true, // Display as inline message instead of badge\n message: (labels.salesStart || 'Sales start {salesStart}').replace(\n '{salesStart}',\n formatSalesStart(salesBegin)\n ),\n };\n case 'on_sale':\n return null; // Don't show badge for normal on-sale status\n case 'sales_ended':\n return {\n badge: labels.statusSalesEnded || 'Sales ended',\n badgeClass: 'badge-ended',\n label: 'Ended',\n date: formatDate(salesEnd),\n };\n default:\n return null;\n }\n })()\n );\n</script>\n\n<article\n class=\"ticket-block rounded-lg border transition-all {quantity > 0\n ? 'shadow-sm'\n : ''}\"\n class:selected={quantity > 0}\n class:disabled-ticket={soldOut ||\n status === 'scheduled' ||\n status === 'sales_ended'}\n aria-label=\"{(labels.ticketAriaLabel || '{title} ticket').replace(\n '{title}',\n title\n )}{soldOut ? labels.ticketSoldOutSuffix || ', sold out' : ''}{status ===\n 'scheduled'\n ? labels.ticketSalesNotStartedSuffix || ', sales not yet started'\n : ''}{status === 'sales_ended'\n ? labels.ticketSalesEndedSuffix || ', sales ended'\n : ''}\"\n>\n <div class=\"p-4 pb-0\">\n <!-- Header row: title + stepper -->\n <div class=\"vc-flex-between-start gap-4\">\n <div class=\"flex-1 min-w-0\">\n <h3\n class=\"font-medium text-primary\"\n id=\"ticket-title-{title?.replace(/\\s+/g, '-').toLowerCase() ||\n 'ticket'}\"\n >\n {title}\n </h3>\n </div>\n\n <!-- Quantity selector (top right) - or sales start message for scheduled tickets -->\n {#if !soldOut && status !== 'scheduled' && status !== 'sales_ended'}\n <div\n class=\"flex items-center quantity-selector\"\n class:active={quantity > 0}\n role=\"group\"\n aria-label={(\n labels.quantitySelector || 'Quantity selector for {title}'\n ).replace('{title}', title)}\n >\n <Button\n iconbtn\n strokebtn\n onclick={() => ondecrement?.()}\n disabled={quantity === 0}\n aria-label={(\n labels.decreaseQuantity || 'Decrease quantity for {title}'\n ).replace('{title}', title)}\n class=\"qty-btn\"\n >\n <Subtract size={20} aria-hidden=\"true\" />\n </Button>\n <span\n class=\"qty-display\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n role=\"status\"\n >\n <span class=\"sr-only\">{labels.quantity || 'Quantity:'}</span>\n {quantity}\n </span>\n <Button\n iconbtn\n onclick={() => onincrement?.()}\n disabled={(maxQuantity !== null && quantity >= maxQuantity) ||\n (remainingCapacity !== null && quantity >= remainingCapacity) ||\n !isDonationValid}\n aria-label={(\n labels.increaseQuantity || 'Increase quantity for {title}'\n ).replace('{title}', title)}\n class=\"qty-btn\"\n >\n <Add size={20} aria-hidden=\"true\" />\n </Button>\n </div>\n {:else if soldOut}\n <span\n class=\"sold-out-pill text-xs whitespace-nowrap\"\n role=\"status\"\n aria-label={labels.statusSoldOut || 'Sold out'}\n >\n {labels.statusSoldOut || 'Sold out'}\n </span>\n {:else if status === 'scheduled' && statusInfo?.message}\n <span\n class=\"sales-start-badge text-xs text-secondary whitespace-nowrap\"\n role=\"status\"\n >\n {statusInfo.message}\n </span>\n {/if}\n </div>\n </div>\n\n <!-- Horizontal solid divider (touches card edges) -->\n <hr class=\"divider-line my-3\" aria-hidden=\"true\" />\n\n <div class=\"p-4 pt-0\">\n <!-- Price (left aligned, below title) -->\n <div\n class=\"flex-row-2 mb-2\"\n id=\"ticket-price-{title?.replace(/\\s+/g, '-').toLowerCase() || 'ticket'}\"\n >\n {#if isDonation}\n <!-- Donation ticket: show amount input -->\n <div class=\"donation-input-wrapper\">\n <Input\n label={labels.donationAmountLabel || 'Donation amount in dollars'}\n size=\"full\"\n type=\"text\"\n inputmode=\"decimal\"\n placeholder=\"0.00\"\n value={donationAmount}\n oninput={e => ondonationchange?.(e.target.value)}\n disabled={soldOut ||\n status === 'scheduled' ||\n status === 'sales_ended'}\n displayErrorText={donationError}\n touched={donationAmount !== ''}\n aria-describedby={donationError\n ? 'donation-error-' + title?.replace(/\\s+/g, '-').toLowerCase()\n : undefined}\n />\n {#if donationError}\n <span\n id=\"donation-error-{title?.replace(/\\s+/g, '-').toLowerCase()}\"\n class=\"sr-only\"\n role=\"alert\"\n >\n {donationError}\n </span>\n {/if}\n </div>\n {:else if discountedTotalPrice !== null}\n <span\n class=\"price-lg text-primary\"\n aria-label=\"Discounted price {discountedTotalPrice}\"\n >{discountedTotalPrice}</span\n >\n <span\n class=\"price-strikethrough\"\n aria-label=\"Original price {totalPrice}\"\n ><span class=\"sr-only\"\n >{labels.originalPrice || 'Original price:'}\n </span>{totalPrice}</span\n >\n <span class=\"price-fee\" aria-hidden=\"true\"\n >{(labels.inclFee || 'incl. {fee} fee').replace(\n '{fee}',\n formattedFee\n )}</span\n >\n <span class=\"sr-only\"\n >{(labels.includingFee || 'including {fee} service fee').replace(\n '{fee}',\n formattedFee\n )}</span\n >\n {:else if priceValue === 0}\n <span class=\"price-lg text-primary\">{labels.free || 'Free'}</span>\n {:else}\n <span class=\"price-lg text-primary\" aria-label=\"Price {totalPrice}\"\n >{totalPrice}</span\n >\n <span class=\"price-fee\" aria-hidden=\"true\"\n >{(labels.inclFee || 'incl. {fee} fee').replace(\n '{fee}',\n formattedFee\n )}</span\n >\n <span class=\"sr-only\"\n >{(labels.includingFee || 'including {fee} service fee').replace(\n '{fee}',\n formattedFee\n )}</span\n >\n {/if}\n </div>\n\n <!-- Discount/Unlocked badges (below price, above description) -->\n {#if isDiscounted || isRevealed}\n <div class=\"flex-row-2 mb-2 flex-wrap\" role=\"status\" aria-live=\"polite\">\n {#if isDiscounted}\n <span class=\"badge badge-discount\">\n {labels.discountApplied || 'Discount applied'}\n </span>\n {/if}\n {#if isRevealed}\n <span class=\"badge badge-unlocked\">\n {labels.unlocked || 'Unlocked'}\n </span>\n {/if}\n </div>\n {/if}\n\n <!-- Description if present -->\n {#if description}\n <p\n class=\"text-sm text-secondary mb-3\"\n id=\"ticket-desc-{title?.replace(/\\s+/g, '-').toLowerCase() || 'ticket'}\"\n >\n {description}\n </p>\n {/if}\n\n <!-- Status badges and scarcity -->\n <div class=\"flex-row-2 mb-2 flex-wrap\" role=\"status\">\n {#if statusInfo && statusInfo.badge}\n <span\n class=\"badge {statusInfo.badgeClass}\"\n aria-label=\"{labels.statusLabel || 'Status:'} {statusInfo.badge}\"\n >\n {statusInfo.badge}\n </span>\n {/if}\n {#if showScarcityBadge}\n <ScarcityBadge\n remaining={remainingCapacity ?? 0}\n total={effectiveTotalCapacity}\n context=\"ticket\"\n {labels}\n />\n {/if}\n </div>\n\n <!-- Sales end date (hide for scheduled tickets - sales start shown in header) -->\n {#if salesEnd && status !== 'sales_ended' && status !== 'scheduled'}\n {@const endTime = formatSalesEnd(salesEnd)}\n <p class=\"sales-end-text text-xs\" role=\"status\">\n {labels.salesEndPrefix || 'Sales end'}\n {endTime.text}\n </p>\n {/if}\n </div>\n</article>\n\n<style>\n /* Theme-responsive colors using CSS variables with page-specific overrides */\n .ticket-block {\n border-color: hsl(var(--stroke-secondary));\n background-color: hsl(var(--ts-card-bg, var(--bg-primary)));\n }\n\n .ticket-block:hover:not(.selected) {\n border-color: hsl(var(--stroke-primary));\n }\n\n .ticket-block.selected {\n border-color: hsl(var(--brand-primary));\n background-color: hsl(var(--ts-card-bg, var(--bg-primary)));\n box-shadow: 0 1px 2px 0 color-mix(in srgb, black 5%, transparent);\n }\n\n /* Disabled state for sold out, scheduled, or sales ended tickets */\n .ticket-block.disabled-ticket {\n opacity: 0.6 !important;\n }\n\n .ticket-block.disabled-ticket:hover {\n border-color: hsl(var(--stroke-secondary));\n }\n\n .text-primary {\n color: hsl(var(--text-primary));\n }\n\n .text-secondary {\n color: hsl(var(--text-secondary));\n }\n\n .text-tertiary {\n color: hsl(var(--text-tertiary, 220 9% 46%));\n }\n\n /* Status badges */\n .badge-scheduled {\n background-color: hsl(var(--status-selling-fast) / 15%);\n color: hsl(var(--status-selling-fast));\n }\n\n .badge-ended {\n background-color: hsl(var(--stroke-secondary));\n color: hsl(var(--text-secondary));\n }\n\n /* Sold-out pill (header right slot when stepper is hidden) */\n .sold-out-pill {\n display: inline-flex;\n align-items: center;\n padding: 0.25rem 0.625rem;\n border-radius: 9999px;\n font-weight: 600;\n background-color: hsl(var(--stroke-secondary));\n color: hsl(var(--text-secondary));\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n /* Quantity selector */\n .quantity-selector {\n gap: 0.5rem;\n user-select: none;\n user-select: none;\n }\n\n /* Ensure Button components in quantity selector have consistent sizing */\n .quantity-selector :global(.qty-btn) {\n width: 2.25rem !important;\n height: 2.25rem !important;\n min-width: 2.25rem !important;\n padding: 0 !important;\n }\n\n .qty-display {\n min-width: 2rem;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.25rem;\n font-weight: 600;\n color: hsl(var(--text-primary));\n user-select: none;\n user-select: none;\n }\n\n /* Divider line */\n .divider-line {\n height: 1px;\n border: none;\n background-color: hsl(var(--stroke-secondary));\n margin-left: 0;\n margin-right: 0;\n }\n\n /* Sales end date */\n .sales-end-text {\n color: hsl(var(--text-tertiary, 220 9% 46%));\n }\n\n /* Donation input wrapper - contains design system Input */\n .donation-input-wrapper {\n min-width: 10rem;\n }\n</style>\n","<script>\n let { labels = {} } = $props();\n</script>\n\n<div\n class=\"rounded-lg overflow-hidden animate-pulse bg-surface-primary border-default\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label={labels.loadingTicketInfo || \"Loading ticket information\"}\n>\n <span class=\"sr-only\">Loading ticket...</span>\n <div class=\"px-3 py-2.5 rounded-t-lg border-t border-l border-r border-border\" aria-hidden=\"true\">\n <div class=\"skeleton h-4 w-2/3 mb-2\"></div>\n <div class=\"skeleton h-3 w-1/2\"></div>\n </div>\n\n <div class=\"flex items-center gap-2\" aria-hidden=\"true\">\n <div class=\"border w-6 rounded-full h-6 -ml-3 -mt-0.5 bg-card border-border\"></div>\n <hr class=\"skeleton-divider w-full my-3\" />\n <div class=\"border w-6 rounded-full h-6 -mr-3 -mt-0.5 bg-card border-border\"></div>\n </div>\n\n <div class=\"flex justify-between items-center px-3 py-2.5 rounded-b-lg -mt-0.5 border-b border-l border-r border-border\" aria-hidden=\"true\">\n <div class=\"space-y-1\">\n <div class=\"h-4 rounded w-16 bg-bg-tertiary\"></div>\n <div class=\"h-3 rounded w-20 bg-muted\"></div>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <div class=\"w-10 h-10 rounded-md bg-bg-tertiary\"></div>\n <div class=\"w-10 h-10 rounded-md bg-muted\"></div>\n <div class=\"w-10 h-10 rounded-md bg-bg-tertiary\"></div>\n </div>\n </div>\n</div>\n\n<style>\n .skeleton-divider {\n height: 1px;\n border: none;\n background-image: repeating-linear-gradient(\n to right,\n hsl(var(--border)) 0,\n hsl(var(--border)) 12px,\n transparent 10px,\n transparent 20px\n );\n \n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\n background-image: repeating-linear-gradient(\n to right,\n hsl(var(--text-secondary)) 0,\n hsl(var(--text-secondary)) 12px,\n transparent 10px,\n transparent 20px\n );\n }\n }\n\n /* Screen reader only text */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n</style>\n","<script>\n import { formatCurrency } from '@getmicdrop/svelte-components';\nimport TicketBlock from './TicketBlock.svelte';\n import TicketSkeleton from './TicketSkeleton.svelte';\n\n let {\n venueFeesReady = false,\n tickets = [],\n quantities = {},\n donationAmounts = {}, // Map of ticketId -> donation amount string\n handleQuantityChange,\n handleDonationChange, // Callback when donation amount changes: (ticketId, amount) => void\n revealHiddenTickets = false,\n revealTicketIds = [],\n currentPromoRule = null, // Current applied promo code rule\n labels = {},\n } = $props();\n\n // Compute ticket status based on salesBegin and salesEnd dates\n function computeTicketStatus(ticket) {\n // If ticket already has a computed status (not from API), use it\n // But ignore API status if we have date fields to check\n const now = new Date();\n\n // Try multiple possible field names for sales begin date\n const salesBeginValue = ticket.salesBegin || ticket.salesStart || ticket.saleBegin || ticket.saleStart || ticket.onSaleStart;\n // Try multiple possible field names for sales end date\n const salesEndValue = ticket.salesEnd || ticket.saleEnd || ticket.onSaleEnd;\n\n // Check if sales haven't started yet\n if (salesBeginValue) {\n const salesBeginDate = new Date(salesBeginValue);\n if (salesBeginDate > now) {\n return 'scheduled';\n }\n }\n\n // Check if sales have ended\n if (salesEndValue) {\n const salesEndDate = new Date(salesEndValue);\n if (salesEndDate < now) {\n return 'sales_ended';\n }\n }\n\n // Default to on_sale\n return 'on_sale';\n }\n\n // Get sales begin date from ticket (handles multiple field names)\n function getSalesBegin(ticket) {\n return ticket.salesBegin || ticket.salesStart || ticket.saleBegin || ticket.saleStart || ticket.onSaleStart || null;\n }\n\n\n const visibleTickets = $derived(tickets.filter(t => {\n // visibility 0 = always visible to customers\n if (t.visibility === 0) return true;\n // visibility 1+ = hidden (only show if promo code reveals)\n if (revealHiddenTickets) return true;\n return revealTicketIds?.includes(t.ID);\n }));\n\n // Sort tickets: on-sale first (preserving backend order), then unavailable at bottom\n function sortTicketsByAvailability(ticketList) {\n // Compute status for each ticket and partition into available/unavailable\n const available = [];\n const unavailable = [];\n\n for (const ticket of ticketList) {\n const status = computeTicketStatus(ticket);\n const minQty = ticket.minQuantity ?? 1;\n const remaining = ticket.remainingCapacity;\n // Ticket is effectively sold out if minQuantity > remainingCapacity\n const effectivelySoldOut = ticket.soldOut || (remaining !== null && remaining !== undefined && minQty > remaining);\n\n if (status === 'on_sale' && !effectivelySoldOut) {\n available.push(ticket);\n } else {\n unavailable.push(ticket);\n }\n }\n\n // Return available tickets in original order, then unavailable in original order\n return [...available, ...unavailable];\n }\n\n function groupTicketsBySection(tickets) {\n const groups = {};\n for (const ticket of tickets) {\n const sectionName = ticket.TicketSection?.name || (labels.other || 'Other');\n if (!groups[sectionName]) {\n groups[sectionName] = [];\n }\n groups[sectionName].push(ticket);\n }\n // Sort tickets within each section: on-sale first, unavailable at bottom\n for (const sectionName of Object.keys(groups)) {\n groups[sectionName] = sortTicketsByAvailability(groups[sectionName]);\n }\n return groups;\n }\n\n const groupedTickets = $derived(groupTicketsBySection(visibleTickets));\n const otherLabel = $derived(labels.other || 'Other');\n const hasMultipleGroups = $derived(\n Object.keys(groupedTickets).filter(n => n !== otherLabel).length > 0\n );\n</script>\n\n{#if venueFeesReady && visibleTickets.length === 0}\n <div class=\"empty-state flex flex-col items-center justify-center py-12 px-6 text-center\" role=\"status\" aria-label={labels.noTicketsAvailable || \"No tickets available\"}>\n <div class=\"empty-state-icon text-muted-foreground mb-4\" aria-hidden=\"true\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z\"/>\n <path d=\"M13 5v2\"/>\n <path d=\"M13 17v2\"/>\n <path d=\"M13 11v2\"/>\n </svg>\n </div>\n <h3 class=\"text-lg font-semibold text-text-primary mb-2\">{labels.noTicketsAvailable || 'No tickets available'}</h3>\n <p class=\"text-sm text-text-secondary max-w-72\">{labels.noTicketsAvailableDescription || 'There are currently no tickets available for this event.'}</p>\n </div>\n{:else}\n <section aria-label={labels.availableTickets || \"Available tickets\"}>\n {#each Object.entries(groupedTickets) as [sectionName, sectionTickets]}\n <div\n class={hasMultipleGroups && sectionName !== otherLabel\n ? 'ticket-section-group border border-border rounded-lg overflow-hidden'\n : ''}\n role=\"group\"\n aria-labelledby={hasMultipleGroups && sectionName !== otherLabel ? `section-${sectionName.replace(/\\s+/g, '-').toLowerCase()}` : undefined}\n >\n {#if hasMultipleGroups && sectionName !== otherLabel}\n <div class=\"section-header bg-bg-secondary px-5 py-3\">\n <h2 class=\"text-text-primary text-md font-semibold\" id=\"section-{sectionName.replace(/\\s+/g, '-').toLowerCase()}\">{sectionName}</h2>\n </div>\n {/if}\n\n <div\n class=\"space-y-4 {hasMultipleGroups && sectionName !== otherLabel\n ? 'p-4'\n : ''}\"\n role=\"list\"\n aria-label={(labels.ticketsInSection || 'Tickets in {section}').replace('{section}', sectionName)}\n >\n {#if venueFeesReady}\n {#each sectionTickets as ticket}\n {@const isRevealed = (ticket.visibility >= 2 && revealHiddenTickets) || revealTicketIds.includes(ticket.ID)}\n {@const discountTicketIds = currentPromoRule?.discountTicketIds || []}\n {@const ticketEligibleForDiscount = discountTicketIds.length === 0 || discountTicketIds.includes(ticket.ID)}\n {@const hasDiscount = currentPromoRule?.provideDiscount && ticketEligibleForDiscount && (currentPromoRule?.discountType === '%' || currentPromoRule?.discountType === '$')}\n {@const discountedPrice = (() => {\n if (!hasDiscount) return null;\n const basePrice = parseFloat(ticket.price) || 0;\n const discountAmount = parseFloat(currentPromoRule?.amount || '0') || 0;\n if (currentPromoRule.discountType === '%') {\n return (basePrice * (1 - discountAmount / 100)).toFixed(2);\n } else if (currentPromoRule.discountType === '$') {\n return Math.max(0, basePrice - formatCurrency(discountAmount) /* FIXME(canonical-cleanup:toFixed): heuristic guess — verify this is USD (not cents); when migrating to TS, add `as USD` brand cast at the API-response-transform layer. */);\n }\n return null;\n })()}\n {@const computedStatus = computeTicketStatus(ticket)}\n {@const salesBeginDate = getSalesBegin(ticket)}\n {@const minQty = ticket.minQuantity ?? 1}\n {@const remaining = ticket.remainingCapacity}\n {@const effectivelySoldOut = ticket.soldOut || (remaining !== null && remaining !== undefined && minQty > remaining)}\n {@const ticketType = ticket.type ?? 0}\n {@const isDonation = ticketType === 2}\n <TicketBlock\n {labels}\n title={ticket.name}\n description={ticket.description}\n price={ticket.price}\n discountedPrice={discountedPrice}\n quantity={quantities[ticket.ID] ?? 0}\n soldOut={effectivelySoldOut}\n status={computedStatus}\n salesBegin={salesBeginDate}\n salesEnd={ticket.salesEnd}\n remainingCapacity={ticket.remainingCapacity}\n totalCapacity={ticket.totalCapacity ?? ticket.quantity ?? ticket.remainingCapacity}\n minQuantity={ticket.minQuantity ?? 1}\n maxQuantity={ticket.maxQuantity ?? null}\n isRevealed={isRevealed}\n isDiscounted={hasDiscount}\n {ticketType}\n donationAmount={donationAmounts[ticket.ID] ?? ''}\n onincrement={() => handleQuantityChange(ticket.ID, 1)}\n ondecrement={() => handleQuantityChange(ticket.ID, -1)}\n ondonationchange={(amount) => handleDonationChange?.(ticket.ID, amount)}\n />\n {/each}\n {:else}\n {#each Array(2) as _}\n <TicketSkeleton />\n {/each}\n {/if}\n </div>\n </div>\n {/each}\n </section>\n{/if}\n\n","<script module>\n\timport { createLogger, formatCurrency } from '@getmicdrop/svelte-components';\n\tconst logger = createLogger('PromocodeInput');\n</script>\n\n<script>\n import { onMount } from 'svelte';\n import { Input, Button } from '@getmicdrop/svelte-components';\n import { getCookie, setCookie } from '$lib/utils/utils';\n import { validatePromoCode } from '$lib/api';\n\n let {\n eventID = '',\n onpromoChange,\n labels = {},\n } = $props();\n\n let inputValue = $state('');\n let touched = $state(false);\n let isFocused = $state(false);\n let displayErrorText = $state('');\n let hintText = $state('');\n let isApplied = $state(false);\n let isValidating = $state(false);\n\n // Validate and apply promo code via API\n const applyPromocode = async () => {\n const trimmedCode = inputValue.trim().toUpperCase();\n\n displayErrorText = '';\n hintText = '';\n isApplied = false;\n\n if (!trimmedCode) {\n displayErrorText = labels.pleaseEnterPromoCode || 'Please enter a promo code.';\n touched = true;\n return;\n }\n\n isValidating = true;\n\n try {\n const result = await validatePromoCode(eventID, trimmedCode);\n\n if (result.valid) {\n isApplied = true;\n let discount = 0;\n\n // Build hint text based on what the promo provides\n const hints = [];\n\n // Reveal hidden tickets\n if (result.revealHiddenTickets) {\n hints.push(labels.hiddenTicketsVisible || 'Hidden tickets are now visible.');\n }\n\n // Calculate discount\n if (result.provideDiscount) {\n const amt = parseFloat(result.amount || '0') || 0;\n discount = amt;\n\n if (result.discountType === '$') {\n hints.push((labels.dollarDiscountAvailable || 'A ${amount} discount is available.').replace('{amount}', formatCurrency(amt /* FIXME(canonical-cleanup:toFixed): heuristic guess — verify this is USD (not cents); when migrating to TS, add `as USD` brand cast at the API-response-transform layer. */)));\n } else if (result.discountType === '%') {\n hints.push((labels.percentDiscountAvailable || 'A {amount}% discount is available.').replace('{amount}', String(amt)));\n }\n }\n\n hintText = hints.length > 0\n ? `${(labels.promoApplied || '{code} applied.').replace('{code}', trimmedCode)} ${hints.join(' ')}`\n : (labels.promoApplied || '{code} applied.').replace('{code}', trimmedCode);\n\n // Save to cookies - store full promo data for other pages\n setCookie(`checkout-promocode-${eventID}`, trimmedCode, 1);\n setCookie('checkout-promo-discount', discount.toString(), 1);\n setCookie(`checkout-promo-reveal-${eventID}`, result.revealHiddenTickets ? '1' : '0', 1);\n setCookie(`checkout-promo-reveal-ids-${eventID}`, JSON.stringify(result.revealTicketIds || []), 1);\n setCookie(`checkout-promo-discount-type-${eventID}`, result.discountType || '', 1);\n\n onpromoChange?.({\n code: trimmedCode,\n error: '',\n hint: hintText,\n discount,\n provideDiscount: result.provideDiscount || false,\n discountType: result.discountType || '',\n discountTicketIds: result.discountTicketIds || [], // Which tickets the discount applies to\n revealHiddenTickets: result.revealHiddenTickets || false,\n revealTicketIds: result.revealTicketIds || [],\n isApplied: true,\n });\n } else {\n displayErrorText = labels.invalidOrExpiredPromoCode || 'Invalid or expired promo code.';\n touched = true;\n\n onpromoChange?.({\n code: trimmedCode,\n error: displayErrorText,\n hint: '',\n discount: 0,\n provideDiscount: false,\n discountType: '',\n discountTicketIds: [],\n revealHiddenTickets: false,\n revealTicketIds: [],\n isApplied: false,\n });\n }\n } catch (error) {\n logger.error('Error validating promo code:', error);\n displayErrorText = labels.unableToValidatePromoCode || 'Unable to validate promo code. Please try again.';\n touched = true;\n } finally {\n isValidating = false;\n }\n };\n\n // Clear promo code\n const clearPromocode = () => {\n inputValue = '';\n displayErrorText = '';\n hintText = '';\n isApplied = false;\n touched = false;\n\n document.cookie = `checkout-promocode-${eventID}=; Max-Age=0; path=/`;\n document.cookie = 'checkout-promo-discount=; Max-Age=0; path=/';\n document.cookie = `checkout-promo-reveal-${eventID}=; Max-Age=0; path=/`;\n document.cookie = `checkout-promo-reveal-ids-${eventID}=; Max-Age=0; path=/`;\n document.cookie = `checkout-promo-discount-type-${eventID}=; Max-Age=0; path=/`;\n\n onpromoChange?.({\n code: '',\n error: '',\n hint: '',\n discount: 0,\n provideDiscount: false,\n discountType: '',\n discountTicketIds: [],\n revealHiddenTickets: false,\n revealTicketIds: [],\n isApplied: false,\n });\n };\n\n // Handle input\n const handleInput = (e) => {\n inputValue = e.target.value;\n if (displayErrorText) displayErrorText = '';\n };\n\n // Handle Enter key\n const handleKeydown = (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n applyPromocode();\n }\n };\n\n // Load saved promo code on mount\n onMount(() => {\n const saved = getCookie(`checkout-promocode-${eventID}`);\n if (saved) {\n inputValue = saved;\n applyPromocode();\n }\n });\n</script>\n\n<div class=\"promo-section p-4 md:p-5\" role=\"group\" aria-labelledby=\"promo-label\">\n <span id=\"promo-label\" class=\"sr-only\">{labels.promoCodeEntry || 'Promo code entry'}</span>\n <div class=\"promo-input-wrapper flex gap-2 items-start\">\n <div class=\"flex-1\">\n <Input\n label={labels.promoCode || \"Promo code\"}\n size=\"full\"\n type=\"text\"\n bind:value={inputValue}\n oninput={handleInput}\n onkeydown={handleKeydown}\n onblur={() => touched = true}\n disabled={isApplied || isValidating}\n displayErrorText={touched ? displayErrorText : ''}\n {touched}\n aria-describedby={hintText ? 'promo-hint' : displayErrorText ? 'promo-error' : undefined}\n />\n </div>\n\n {#if isApplied}\n <Button strokebtn onclick={clearPromocode} class=\"h-10 self-start mt-5\" aria-label=\"{labels.removePromoCode || 'Remove promo code'} {inputValue}\">\n {labels.remove || 'Remove'}\n </Button>\n {:else}\n <Button onclick={applyPromocode} disabled={isValidating} class=\"h-10 self-start mt-5\" aria-label={isValidating ? (labels.checkingPromoCode || 'Checking promo code') : (labels.applyPromoCode || 'Apply promo code')}>\n {isValidating ? (labels.checking || 'Checking...') : (labels.apply || 'Apply')}\n </Button>\n {/if}\n </div>\n\n {#if hintText}\n <p id=\"promo-hint\" class=\"promo-message success mt-2 body-sm text-accent-success\" role=\"status\" aria-live=\"polite\">{hintText}</p>\n {/if}\n {#if displayErrorText && touched}\n <p id=\"promo-error\" class=\"sr-only\" role=\"alert\">{displayErrorText}</p>\n {/if}\n</div>\n\n<style>\n /* Screen reader only text */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n</style>\n","<script>\n import { getDefaultTimezone, formatCurrency } from '@getmicdrop/svelte-components';\nimport { ArrowLeft, Information } from 'carbon-icons-svelte';\n import {\n formatFullDate,\n formatEventTime,\n formatTimeRange,\n formatDoorsTime,\n } from \"$lib/utils/datetime.js\";\n\n let {\n event,\n variant = 'tickets',\n total = 0,\n onCancel = () => {},\n onInfoClick = () => {},\n labels = {},\n } = $props();\n\n // Get timezone from event, default to LA\n let timeZone = $derived(event.timeZone || getDefaultTimezone());\n\n let showEndTime = $derived(event.displayEndTime === true);\n let showDoorsTime = $derived(event.displayDoorsTime === true);\n\n let isCheckout = $derived(variant === 'checkout');\n let priceDisplay = $derived(total > 0 ? `${formatCurrency(total /* FIXME(canonical-cleanup:toFixed): heuristic guess — verify this is USD (not cents); when migrating to TS, add `as USD` brand cast at the API-response-transform layer. */)}` : (labels.free || 'Free'));\n</script>\n\n<header class=\"flex items-center gap-3 px-4 md:px-5 py-4 border-b border-border\">\n <button\n type=\"button\"\n class=\"p-2 -ml-2 rounded-full transition-colors shrink-0 text-text-secondary hover:bg-bg-secondary\"\n onclick={onCancel}\n aria-label={isCheckout ? (labels.goBackToTicketSelection || \"Go back to ticket selection\") : (labels.goBackToEventDetails || \"Go back to event details\")}\n >\n <ArrowLeft size={20} aria-hidden=\"true\" />\n </button>\n\n {#if event.image}\n <div class=\"w-14 h-14 shrink-0 rounded-md overflow-hidden bg-bg-secondary\" aria-hidden=\"true\">\n <img\n src={event.image}\n alt=\"\"\n class=\"w-full h-full object-contain\"\n />\n </div>\n {/if}\n\n <div class=\"flex-1 min-w-0\">\n <h1 class=\"heading-lg break-words\">{event.name}</h1>\n <div class=\"body-sm text-text-secondary\" aria-label={labels.ariaEventDateTime || \"Event date and time\"}>\n <p><time datetime={event.startDateTime}>{formatFullDate(event.startDateTime, timeZone)}</time></p>\n <p>{showEndTime && event.endDateTime ? formatTimeRange(event.startDateTime, event.endDateTime, timeZone) : formatEventTime(event.startDateTime, timeZone)}</p>\n {#if showDoorsTime && event.doorsOpenTime}\n <p>{(labels.doorsOpen || 'Doors open {time}').replace('{time}', formatDoorsTime(event.doorsOpenTime, timeZone))}</p>\n {/if}\n </div>\n </div>\n\n {#if isCheckout}\n <div class=\"flex-row-2 shrink-0\">\n <span class=\"price-md\" aria-label={(labels.ariaOrderTotal || 'Order total: {total}').replace('{total}', priceDisplay)}>{priceDisplay}</span>\n <button\n type=\"button\"\n class=\"sc-btn-icon btn-icon-ghost w-7 h-7\"\n onclick={onInfoClick}\n aria-label={labels.viewOrderDetails || \"View order details\"}\n >\n <Information size={18} aria-hidden=\"true\" />\n </button>\n </div>\n {/if}\n</header>\n\n<style>\n /* Hide info button on desktop - order summary is always visible */\n @media (width >= 872px) {\n .info-btn {\n display: none;\n }\n }\n</style>\n","<script module>\n import { createLogger, formatCurrency } from '@getmicdrop/svelte-components';\n const logger = createLogger('CartView');\n</script>\n\n<script>\n import { onMount, onDestroy } from 'svelte';\n import { goto } from '$app/navigation';\n import {\n trackUTMSource,\n initiateOrder,\n loadCheckoutStateFromCookies,\n clearCheckoutCookies,\n persistCheckoutState,\n ensureOrderIdExists,\n transformEvent,\n getCookie,\n } from '$lib/utils/utils.js';\n import {\n fetchEventDetails,\n fetchEventTickets,\n hasPromoCodes,\n getSessionStatus,\n } from '$lib/api';\n import { clampQuantitiesToCapacity } from '$lib/utils/quantity-clamp';\n import TicketsGroup from '../Events/Tickets/TicketsGroup.svelte';\n import PromocodeInput from '../Events/Tickets/PromocodeInput.svelte';\n import OrderSummarySkeleton from '../Events/Tickets/OrderSummarySkeleton.svelte';\n import CheckoutTimer from '$lib/premium-ticket-experience/variants/v3-airbnb-split/CheckoutTimer.svelte';\n import { OrderSummary, Modal, Button } from '@getmicdrop/svelte-components';\n import { roundCurrency } from '$lib/utils/currency.js';\n import EventInfoHeader from '../Events/Tickets/EventInfoHeader.svelte';\n\n let {\n eventId,\n organizationId = '',\n venueId = '',\n initialEventData = null,\n onNavigateBack,\n onNavigateToCheckout,\n labels = {},\n } = $props();\n\n let venueFeesReady = $state(false);\n\n let event = $state(null);\n let rawEvent = $state(null);\n let tickets = $state([]);\n let isLoading = $state(false);\n let isLoadingEvent = $state(true);\n let error = $state(null);\n let isMounted = $state(false);\n\n let isMobile = $state(false);\n let isSticky = $state(false);\n let sidebarLeft = $state(0);\n let containerRef = $state();\n let stickyRef = $state();\n\n let quantities = $state({});\n let promocode = $state('');\n let promocodeHint = $state('');\n let promocodeError = $state('');\n let promoDiscountAmount = $state(0);\n let showPromoInput = $state(false);\n\n // Cart session timer\n let timerSeconds = $state(0);\n let timerActive = $state(false);\n let timerInterval = null;\n let showCartExpiredModal = $state(false);\n\n // Network error modal states\n let showErrorModal = $state(false);\n let errorModalType = $state('cart_failed'); // 'cart_failed' | 'cart_success_network_error'\n let cartCreatedSuccessfully = $state(false);\n\n // Partial availability modal states\n let showAvailabilityModal = $state(false);\n let availabilityChanges = $state([]); // Array of {ticketId, ticketName, requestedQty, availableQty}\n\n let lowestPrice = $state(0);\n let highestPrice = $state(0);\n\n // Subtotal is calculated client-side (just ticket prices × quantities).\n // Service fee + tax are calculated server-side and returned in the cart response.\n let subtotal = $derived(\n isEventFree\n ? 0\n : roundCurrency(\n Object.entries(quantities).reduce((sum, [id, qty]) => {\n const ticket = event?.availableTickets?.find(t => t.ID == id);\n return ticket ? sum + roundCurrency(qty * ticket.price) : sum;\n }, 0)\n )\n );\n\n // Fee/tax/total come from the server after cart creation — not calculated client-side\n let fees = $state(0);\n let taxes = $state(0);\n let taxAmount = $state(0);\n let taxLoading = $state(false);\n let taxAbortController = null;\n let total = $derived(roundCurrency(subtotal + fees + taxes));\n\n let cartCreating = false;\n let cartJustCreated = false; // Flag to distinguish new carts from stale ones\n\n function handleQuantityChange(id, delta) {\n quantities = {\n ...quantities,\n [id]: Math.max(0, (quantities[id] ?? 0) + delta),\n };\n if (event) {\n persistCheckoutState({\n eventID: event.eventID,\n quantities,\n promocode,\n tickets: event.availableTickets,\n });\n }\n\n // Create cart and start timer when first ticket is selected\n const totalQty = Object.values(quantities).reduce((sum, q) => sum + q, 0);\n if (totalQty > 0 && !timerActive && !cartCreating) {\n createCartAndStartTimer();\n }\n }\n\n async function createCartAndStartTimer() {\n if (cartCreating || timerActive) return;\n cartCreating = true;\n\n try {\n const result = await initiateOrder({\n eventID: event.eventID,\n quantities,\n promoCode: promocode || undefined,\n });\n\n if (result?.success && result.uuid) {\n // Cart created — timer starts from server session\n cartJustCreated = true;\n startTimer();\n }\n } catch (err) {\n logger.error('Error creating cart on ticket select:', err);\n } finally {\n cartCreating = false;\n }\n }\n\n function findPriceRange() {\n if (!event?.availableTickets) return;\n\n const visibleTickets = event.availableTickets.filter(\n t => t.visibility === 0\n );\n\n const totalPrices = visibleTickets.map(t => parseFloat(t.price) || 0);\n\n if (totalPrices.length === 0) {\n lowestPrice = highestPrice = 0;\n return;\n }\n\n lowestPrice = formatCurrency(\n Math.min(\n ...totalPrices\n ) /* FIXME(canonical-cleanup:toFixed): heuristic guess — verify this is USD (not cents); when migrating to TS, add `as USD` brand cast at the API-response-transform layer. */\n );\n highestPrice = formatCurrency(\n Math.max(\n ...totalPrices\n ) /* FIXME(canonical-cleanup:toFixed): heuristic guess — verify this is USD (not cents); when migrating to TS, add `as USD` brand cast at the API-response-transform layer. */\n );\n }\n\n /**\n * Fetch server-authoritative tax preview from Stripe Tax API.\n * Debounced via AbortController -- only the latest request completes.\n */\n async function fetchTaxPreview() {\n // Build line items from current quantities\n const lineItems = [];\n for (const [id, qty] of Object.entries(quantities)) {\n if (qty <= 0) continue;\n const ticket = event?.availableTickets?.find(t => t.ID == id);\n if (!ticket || ticket.price === 0) continue;\n lineItems.push({\n amountCents: Math.round(ticket.price * 100) * qty,\n reference: `ticket-${id}`,\n quantity: qty,\n });\n }\n\n // No taxable items -- reset to 0\n if (lineItems.length === 0) {\n taxAmount = 0;\n taxes = 0;\n taxLoading = false;\n return;\n }\n\n // Abort any in-flight request\n if (taxAbortController) {\n taxAbortController.abort();\n }\n taxAbortController = new AbortController();\n taxLoading = true;\n\n try {\n const res = await fetch(\n 'https://get-micdrop.com/api/v2/public/tax-preview',\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n signal: taxAbortController.signal,\n body: JSON.stringify({\n venueId: Number(event.venueID),\n lineItems,\n }),\n }\n );\n\n if (!res.ok) {\n // 422 is the documented fallback path: the venue has no\n // address configured for Stripe Tax, so the backend returns\n // `{ error: 'venue_no_address', fallback: true }` and we\n // display $0 tax. This is not an error condition — log at\n // debug level so it doesn't flood production consoles for\n // every event hosted by an address-less venue (e.g. test\n // series events). Genuine failures (5xx, network) still log\n // at error level below.\n if (res.status === 422) {\n logger.debug(\n 'Tax preview: venue has no tax address, falling back to 0'\n );\n } else {\n logger.error('Tax preview failed:', res.status);\n }\n taxAmount = 0;\n taxes = 0;\n taxLoading = false;\n return;\n }\n\n const data = await res.json();\n // taxTotal is in cents from the API\n taxAmount = (data.taxTotal ?? 0) / 100;\n taxes = taxAmount;\n } catch (err) {\n if (err.name === 'AbortError') return; // Expected on rapid changes\n logger.error('Tax preview error:', err);\n taxAmount = 0;\n taxes = 0;\n } finally {\n if (!taxAbortController?.signal?.aborted) {\n taxLoading = false;\n }\n }\n }\n\n function applyStoredPromocode() {\n if (!event) return;\n promocode = getCookie(`checkout-promocode-${event.eventID}`) || '';\n const discount = parseFloat(getCookie('checkout-promo-discount') || 0);\n\n promocodeHint = promocode ? `${promocode} applied.` : '';\n promoDiscountAmount = discount;\n }\n\n /**\n * Check if ticket availability has changed since user selected quantities\n * Returns array of changes if any tickets have reduced availability\n */\n async function checkTicketAvailability() {\n try {\n const freshTickets = await fetchEventTickets(eventId);\n const changes = [];\n\n for (const [ticketId, requestedQty] of Object.entries(quantities)) {\n if (requestedQty <= 0) continue;\n\n const freshTicket = freshTickets.find(\n t => String(t.ID) === String(ticketId)\n );\n if (!freshTicket) continue;\n\n const availableQty =\n freshTicket.remainingCapacity ?? freshTicket.quantity ?? Infinity;\n\n if (availableQty < requestedQty) {\n // Find the ticket name from our stored tickets\n const storedTicket = event?.availableTickets?.find(\n t => String(t.ID) === String(ticketId)\n );\n changes.push({\n ticketId,\n ticketName: storedTicket?.name || freshTicket?.name || 'Ticket',\n requestedQty,\n availableQty: Math.max(0, availableQty),\n });\n }\n }\n\n return changes;\n } catch (err) {\n logger.error('Error checking ticket availability:', err);\n // On error, proceed with checkout - backend will validate\n return [];\n }\n }\n\n async function goToCheckout() {\n if (!event) return;\n\n isLoading = true;\n cartCreatedSuccessfully = false;\n\n // Check for availability changes before proceeding\n const changes = await checkTicketAvailability();\n if (changes.length > 0) {\n // Some tickets have reduced availability\n isLoading = false;\n availabilityChanges = changes;\n showAvailabilityModal = true;\n return;\n }\n\n await proceedToCheckout();\n }\n\n async function proceedToCheckout() {\n isLoading = true;\n\n persistCheckoutState({\n eventID: event.eventID,\n quantities,\n promocode,\n promoDiscountAmount,\n tickets: event.availableTickets,\n });\n\n try {\n const result = await initiateOrder({\n eventID: event.eventID,\n quantities,\n promoCode: promocode || undefined,\n });\n\n if (!result || !result.success) {\n // Cart creation failed - show error modal\n isLoading = false;\n errorModalType = 'cart_failed';\n showErrorModal = true;\n return;\n }\n\n // Use server-calculated service fee\n fees = result.serviceFee ?? 0;\n\n cartCreatedSuccessfully = true;\n } catch (err) {\n logger.error('Order initiation failed:', err);\n isLoading = false;\n errorModalType = 'cart_failed';\n showErrorModal = true;\n return;\n }\n\n // Cart created successfully, now try to navigate\n try {\n if (onNavigateToCheckout) {\n onNavigateToCheckout(eventId, event);\n isLoading = false;\n return;\n }\n\n const params = new URLSearchParams();\n if (organizationId) params.set('orgId', organizationId);\n if (venueId) params.set('venueId', venueId);\n params.set('event_id', eventId);\n params.set('subroute', 'checkout');\n const url = `/?${params.toString()}`;\n goto(url, { noScroll: false });\n isLoading = false;\n } catch (navErr) {\n // Cart was created but navigation failed - tickets are held\n logger.error('Navigation failed after cart creation:', navErr);\n isLoading = false;\n errorModalType = 'cart_success_network_error';\n showErrorModal = true;\n }\n }\n\n function handleAcceptReducedQuantities() {\n // Update quantities to available amounts\n for (const change of availabilityChanges) {\n if (change.availableQty > 0) {\n quantities[change.ticketId] = change.availableQty;\n } else {\n delete quantities[change.ticketId];\n }\n }\n quantities = { ...quantities }; // Trigger reactivity\n\n showAvailabilityModal = false;\n availabilityChanges = [];\n\n // Check if any tickets remain\n const totalTickets = Object.values(quantities).reduce(\n (sum, qty) => sum + qty,\n 0\n );\n if (totalTickets > 0) {\n proceedToCheckout();\n } else {\n // No tickets left, go back\n goBack();\n }\n }\n\n function handleDeclineReducedQuantities() {\n showAvailabilityModal = false;\n availabilityChanges = [];\n goBack();\n }\n\n function handleErrorModalClose() {\n showErrorModal = false;\n if (errorModalType === 'cart_failed') {\n // Go back to event page on cart failure\n goBack();\n }\n }\n\n function handleRefreshPage() {\n showErrorModal = false;\n window.location.reload();\n }\n\n function updateScreenSize() {\n isMobile = window.innerWidth < 767;\n }\n\n let ticking = false;\n\n function handleScroll() {\n if (!ticking) {\n window.requestAnimationFrame(() => {\n updateStickyState();\n ticking = false;\n });\n ticking = true;\n }\n }\n\n function updateStickyState() {\n if (isMobile || !stickyRef || !containerRef) {\n isSticky = false;\n return;\n }\n\n const rect = stickyRef.getBoundingClientRect();\n isSticky = rect.top <= 20;\n\n if (isSticky) {\n const bounds = containerRef.getBoundingClientRect();\n sidebarLeft = bounds.left + bounds.width - 340 - 40;\n }\n }\n\n function goBack() {\n if (event) {\n clearCheckoutCookies(event.eventID);\n }\n if (onNavigateBack) {\n onNavigateBack();\n } else {\n const params = new URLSearchParams(window.location.search);\n params.set('subroute', 'details');\n const url = `/?${params.toString()}`;\n goto(url, { noScroll: false });\n }\n }\n\n // Track the active cart ID for timer persistence\n let activeCartId = null;\n\n async function handleExpiredCart() {\n // Clear stale state\n if (activeCartId) {\n localStorage.removeItem(`checkout-expiry-${activeCartId}`);\n }\n document.cookie = 'checkout-cartid=; Max-Age=0; path=/';\n activeCartId = null;\n timerActive = false;\n timerSeconds = 0;\n\n // Show expired alert, then auto-recover\n showCartExpiredModal = true;\n }\n\n async function startTimer() {\n if (timerActive) return;\n timerActive = true;\n\n activeCartId =\n typeof document !== 'undefined'\n ? document.cookie.match(/checkout-cartid=([^;]+)/)?.[1] || null\n : null;\n\n timerSeconds = 15 * 60;\n\n if (activeCartId) {\n const storedExpiry = localStorage.getItem(\n `checkout-expiry-${activeCartId}`\n );\n\n if (storedExpiry) {\n // We have localStorage — use it\n const remaining = Math.max(\n 0,\n Math.floor((parseInt(storedExpiry, 10) - Date.now()) / 1000)\n );\n if (remaining > 0) {\n timerSeconds = remaining;\n } else {\n await handleExpiredCart();\n return;\n }\n } else if (cartJustCreated) {\n // Cart was just created in this session — set 15 min\n timerSeconds = 15 * 60;\n localStorage.setItem(\n `checkout-expiry-${activeCartId}`,\n String(Date.now() + 15 * 60 * 1000)\n );\n } else {\n // Stale cookie, no localStorage — this is a leftover from a previous session.\n // Show expired and let user start fresh.\n await handleExpiredCart();\n return;\n }\n }\n\n // Tick every second, persist every 10s\n timerInterval = setInterval(() => {\n if (timerSeconds > 0) {\n timerSeconds -= 1;\n if (timerSeconds % 10 === 0 && activeCartId) {\n localStorage.setItem(\n `checkout-expiry-${activeCartId}`,\n String(Date.now() + timerSeconds * 1000)\n );\n }\n } else {\n clearInterval(timerInterval);\n timerActive = false;\n showCartExpiredModal = true;\n if (activeCartId)\n localStorage.removeItem(`checkout-expiry-${activeCartId}`);\n }\n }, 1000);\n\n // Sync from server every 60s to stay accurate with extensions\n const syncInterval = setInterval(async () => {\n if (!timerActive || !activeCartId) {\n clearInterval(syncInterval);\n return;\n }\n try {\n const status = await getSessionStatus(activeCartId);\n if (!status.error && status.expiresAt) {\n const remaining = Math.max(\n 0,\n Math.floor((new Date(status.expiresAt) - new Date()) / 1000)\n );\n timerSeconds = remaining;\n localStorage.setItem(\n `checkout-expiry-${activeCartId}`,\n String(new Date(status.expiresAt).getTime())\n );\n }\n } catch {\n /* ignore */\n }\n }, 60000);\n }\n\n async function handlePromoChange(data) {\n // PromocodeInput calls this directly with the data object (no .detail wrapper)\n const detail = data?.detail ?? data;\n const { code, discount } = detail;\n promocode = code || '';\n promoDiscountAmount = discount || 0;\n promocodeHint = code ? `${code} applied.` : '';\n\n // Update reveal state from promo event\n if (detail.revealHiddenTickets !== undefined && event) {\n document.cookie = `checkout-promo-reveal-${event.eventID}=${detail.revealHiddenTickets ? '1' : '0'}; path=/`;\n if (detail.revealTicketIds?.length) {\n document.cookie = `checkout-promo-reveal-ids-${event.eventID}=${JSON.stringify(detail.revealTicketIds)}; path=/`;\n }\n\n // Re-fetch tickets with promo code so backend includes revealed hidden tickets\n if (code && detail.revealHiddenTickets) {\n try {\n const freshTickets = await fetchEventTickets(eventId, code);\n if (freshTickets.length > 0 && event) {\n event = { ...event, availableTickets: freshTickets };\n }\n } catch (err) {\n logger.error('Error re-fetching tickets with promo:', err);\n }\n }\n }\n }\n\n // Read promo data from cookies (set by PromocodeInput on tickets page)\n let revealHiddenTickets = $derived(\n event ? getCookie(`checkout-promo-reveal-${event.eventID}`) === '1' : false\n );\n let revealTicketIds = $derived.by(() => {\n if (!event) return [];\n try {\n const ids = getCookie(`checkout-promo-reveal-ids-${event.eventID}`);\n return ids ? JSON.parse(ids) : [];\n } catch {\n return [];\n }\n });\n\n let isEventFree = $derived(\n event?.availableTickets\n ?.filter(t => t.visibility === 0)\n ?.every(t => t.price === 0)\n );\n\n let isEventEnded = $derived.by(() => {\n if (!event) return false;\n const eventEnd = event.endDateTime || event.startDateTime;\n return eventEnd ? new Date(eventEnd) < new Date() : false;\n });\n\n function getTestEventData(eventId) {\n if (eventId) {\n const today = new Date();\n const testDate = new Date(today);\n testDate.setDate(today.getDate() + 7);\n\n return {\n id: String(eventId),\n ID: String(eventId),\n eventID: String(eventId),\n title: 'Test Comedy Show',\n name: 'Test Comedy Show',\n description:\n 'This is a test event for development and testing purposes.',\n coverImage:\n 'https://images.unsplash.com/photo-1492684223066-81342ee5ff30?w=1200&h=800&fit=crop',\n startDateTime: testDate.toISOString(),\n endDateTime: new Date(\n testDate.getTime() + 2 * 60 * 60 * 1000\n ).toISOString(),\n venueID: 'test-venue-1',\n eventTicketingType: 0,\n ticketType: 0,\n availableTickets: [\n {\n ID: 'ticket-1',\n name: 'General Admission',\n price: 25,\n remainingCapacity: 50,\n visibility: 0,\n },\n {\n ID: 'ticket-2',\n name: 'VIP',\n price: 50,\n remainingCapacity: 10,\n visibility: 0,\n },\n ],\n };\n }\n return null;\n }\n\n async function loadEventData() {\n if (!isMounted) {\n return;\n }\n if (!eventId) {\n error = labels.noEventIdProvided || 'No event ID provided';\n isLoadingEvent = false;\n return;\n }\n\n isLoadingEvent = true;\n error = null;\n\n try {\n if (initialEventData) {\n // Use server-provided data — skip client-side fetch\n rawEvent = initialEventData;\n if (!isMounted) return;\n event = transformEvent(rawEvent);\n tickets = event.availableTickets || [];\n } else {\n try {\n rawEvent = await fetchEventDetails(eventId);\n if (!isMounted) return;\n event = transformEvent(rawEvent);\n } catch (apiErr) {\n logger.error('Event fetch failed:', apiErr);\n error = labels.failedToLoadEvent || 'Failed to load event';\n isLoadingEvent = false;\n return;\n }\n\n try {\n tickets = await fetchEventTickets(eventId);\n if (!isMounted) return;\n if (tickets.length > 0) {\n event.availableTickets = tickets;\n }\n } catch (ticketErr) {\n if (!isMounted) return;\n logger.error('Error fetching tickets:', ticketErr);\n tickets = event.availableTickets || [];\n }\n }\n\n if (event.availableTickets) {\n event.availableTickets.forEach(t => (quantities[t.ID] = 0));\n }\n\n const cookieState = loadCheckoutStateFromCookies(event.eventID);\n // MIC-946: clamp cookie-restored quantities against current\n // remainingCapacity / maxQuantity so a returning user never starts\n // with an over-cap selection. Submit-time oversell modal still\n // catches any race after this point.\n quantities = clampQuantitiesToCapacity(\n cookieState.quantities || {},\n event.availableTickets\n );\n promocode = cookieState.promocode || '';\n promoDiscountAmount = cookieState.promoDiscountAmount || 0;\n\n if (event.eventID) {\n await trackUTMSource(event.eventID);\n if (!isMounted) return;\n }\n\n venueFeesReady = true;\n findPriceRange();\n\n // Start timer if tickets were already selected (page refresh)\n const totalQty = Object.values(quantities).reduce((sum, q) => sum + q, 0);\n if (totalQty > 0) {\n startTimer();\n }\n\n applyStoredPromocode();\n await ensureOrderIdExists({ eventID: event.eventID });\n } catch (err) {\n if (isMounted) {\n logger.error('Error loading event:', err);\n error =\n err.message || labels.failedToLoadEvent || 'Failed to load event';\n }\n } finally {\n if (isMounted) {\n isLoadingEvent = false;\n }\n }\n }\n\n onMount(async () => {\n isMounted = true;\n updateScreenSize();\n window.addEventListener('resize', updateScreenSize);\n window.addEventListener('scroll', handleScroll);\n\n await loadEventData();\n\n // Check promo codes outside reactive tracking to avoid effect loops\n hasPromoCodes(eventId)\n .then(has => {\n showPromoInput = has;\n })\n .catch(() => {\n showPromoInput = true;\n });\n\n return () => {\n window.removeEventListener('resize', updateScreenSize);\n window.removeEventListener('scroll', handleScroll);\n };\n });\n\n onDestroy(() => {\n isMounted = false;\n if (timerInterval) clearInterval(timerInterval);\n if (taxAbortController) {\n taxAbortController.abort();\n }\n });\n\n // Re-load event data if eventId changes (e.g., navigating between events).\n // Guard with a ref to prevent re-triggering on unrelated state changes.\n let lastLoadedEventId = null;\n $effect(() => {\n if (isMounted && eventId && eventId !== lastLoadedEventId) {\n lastLoadedEventId = eventId;\n loadEventData();\n }\n });\n\n // Fetch tax preview whenever quantities change and venue data is ready\n $effect(() => {\n // Access quantities to register as dependency\n const totalQty = Object.values(quantities).reduce(\n (sum, qty) => sum + qty,\n 0\n );\n if (venueFeesReady && event && totalQty > 0) {\n fetchTaxPreview();\n } else if (totalQty === 0) {\n taxAmount = 0;\n taxes = 0;\n taxLoading = false;\n }\n });\n</script>\n\n<div class=\"px-5 md:px-10 py-12 bg-card\" bind:this={containerRef}>\n {#if isLoadingEvent}\n <div\n class=\"flex items-center justify-center py-12\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <p class=\"text-text-secondary\">\n {labels.loadingEvent || 'Loading event...'}\n </p>\n </div>\n {:else if error}\n <div class=\"text-center py-8\" role=\"alert\">\n <p class=\"text-accent-danger mb-2\">\n {labels.errorPrefix || 'Error:'}\n {error}\n </p>\n <button\n class=\"go-back-btn text-white mt-4 px-4 py-2 rounded-lg\"\n onclick={goBack}\n aria-label={labels.goBackToEventDetails || 'Go back to event details'}\n >\n {labels.goBack || 'Go back'}\n </button>\n </div>\n {:else if event && isEventEnded}\n <div class=\"text-center py-12\" role=\"alert\">\n <p class=\"text-xl font-semibold text-text-primary mb-2\">\n {labels.thisEventHasEnded || 'This event has ended'}\n </p>\n <p class=\"text-text-secondary mb-6\">\n {labels.ticketsNoLongerAvailable ||\n 'Tickets are no longer available for this event.'}\n </p>\n <button\n class=\"go-back-btn text-white px-4 py-2 rounded-lg\"\n onclick={goBack}\n aria-label={labels.goBackToEventDetails || 'Go back to event details'}\n >\n {labels.goBack || 'Go back'}\n </button>\n </div>\n {:else if event && isEventEnded}\n <div class=\"text-center py-12\" role=\"alert\">\n <p class=\"text-xl font-semibold text-text-primary mb-2\">\n This event has ended\n </p>\n <p class=\"text-text-secondary mb-6\">\n Tickets are no longer available for this event.\n </p>\n <button\n class=\"go-back-btn px-4 py-2 rounded-lg\"\n onclick={goBack}\n aria-label=\"Go back to event details\"\n >\n Go back\n </button>\n </div>\n {:else if event}\n <div class=\"w-full flex md:gap-5 flex-wrap\" bind:this={stickyRef}>\n <div class=\"flex-1 pb-16 md:pb-0\">\n <div class=\"bg-card border-border rounded-lg md:shadow md:border py-3\">\n <EventInfoHeader\n {event}\n {lowestPrice}\n {highestPrice}\n onCancel={goBack}\n {venueFeesReady}\n {labels}\n />\n\n {#if timerActive && timerSeconds > 0}\n <div class=\"px-4 md:px-5 pt-3\">\n <CheckoutTimer\n seconds={timerSeconds}\n isUrgent={timerSeconds <= 5 * 60}\n {labels}\n />\n </div>\n {/if}\n\n {#if showPromoInput}\n <div class=\"px-4 md:px-5 pt-3\">\n <PromocodeInput\n eventID={eventId}\n onpromoChange={handlePromoChange}\n {labels}\n />\n </div>\n {/if}\n\n <div class=\"space-y-4 md:px-5\">\n <TicketsGroup\n tickets={event.availableTickets}\n {quantities}\n {handleQuantityChange}\n {revealHiddenTickets}\n {revealTicketIds}\n {venueFeesReady}\n {labels}\n />\n </div>\n </div>\n </div>\n\n {#if isSticky && !isMobile}\n <!-- svelte-ignore element_invalid_self_closing_tag -->\n <div class=\"hidden md:block w-80 h-[calc(100vh-40px)]\" />\n {/if}\n\n <div\n class=\"w-full md:w-80 flex flex-col transition-all will-change-[left]\"\n class:is-sticky={isSticky}\n style:left={isSticky ? `${sidebarLeft}px` : 'auto'}\n >\n {#if !venueFeesReady}\n <OrderSummarySkeleton />\n {:else if event && event.availableTickets?.length}\n <OrderSummary\n btnText={labels.checkout || 'Checkout'}\n loading={isLoading}\n checkoutTicket={goToCheckout}\n {quantities}\n eventTickets={event.availableTickets}\n promoApplied={!!promocodeHint}\n promoDiscount={promoDiscountAmount}\n {subtotal}\n {fees}\n {taxes}\n {total}\n />\n {/if}\n </div>\n </div>\n {/if}\n</div>\n\n<!-- Network Error Modal -->\n<Modal\n bind:open={showErrorModal}\n size=\"sm\"\n oncancel={handleErrorModalClose}\n role=\"alertdialog\"\n aria-labelledby=\"error-modal-title\"\n aria-describedby=\"error-modal-description\"\n>\n {#snippet header()}\n <h3 id=\"error-modal-title\" class=\"heading-lg\">\n {#if errorModalType === 'cart_failed'}\n {labels.unableToReserveTickets || 'Unable to Reserve Tickets'}\n {:else}\n {labels.connectionIssue || 'Connection Issue'}\n {/if}\n </h3>\n {/snippet}\n\n {#snippet body()}\n <div id=\"error-modal-description\">\n {#if errorModalType === 'cart_failed'}\n <p class=\"body-sm\">\n {labels.cartFailedMessage ||\n \"We couldn't reserve your tickets. This may be due to a network issue or the tickets may no longer be available.\"}\n </p>\n <p class=\"text-text-secondary mt-2\">\n {labels.pleaseGoBackAndTryAgain || 'Please go back and try again.'}\n </p>\n {:else}\n <p class=\"body-sm\">\n {labels.cartSuccessMessage ||\n 'Good news! Your tickets have been reserved and are being held for you.'}\n </p>\n <p class=\"text-text-secondary mt-2\">\n {labels.cartSuccessNetworkError ||\n 'However, we encountered a connection issue. Please refresh the page to continue to checkout.'}\n </p>\n {/if}\n </div>\n {/snippet}\n\n {#snippet footer()}\n <div role=\"group\" aria-label=\"Error modal actions\">\n {#if errorModalType === 'cart_failed'}\n <Button\n variant=\"default\"\n onclick={handleErrorModalClose}\n aria-label={labels.goBack || 'Go back'}\n >\n {labels.goBack || 'Go back'}\n </Button>\n {:else}\n <Button\n variant=\"alternative\"\n onclick={handleErrorModalClose}\n aria-label={labels.cancel || 'Cancel'}\n >\n {labels.cancel || 'Cancel'}\n </Button>\n <Button\n variant=\"default\"\n onclick={handleRefreshPage}\n aria-label={labels.refreshPage || 'Refresh Page'}\n >\n {labels.refreshPage || 'Refresh Page'}\n </Button>\n {/if}\n </div>\n {/snippet}\n</Modal>\n\n<!-- Cart Expired Overlay -->\n{#if showCartExpiredModal}\n <div\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n role=\"alertdialog\"\n aria-labelledby=\"expired-modal-title\"\n aria-describedby=\"expired-modal-description\"\n >\n <div class=\"bg-card rounded-xl shadow-lg p-6 max-w-sm mx-4 text-center\">\n <h3\n id=\"expired-modal-title\"\n class=\"text-lg font-semibold text-text-primary mb-2\"\n >\n {labels.cartExpiredTitle || 'Your cart has expired'}\n </h3>\n <p\n id=\"expired-modal-description\"\n class=\"text-text-secondary text-sm mb-6\"\n >\n {labels.cartExpiredMessage ||\n 'Your cart has expired. Please start your purchase again.'}\n </p>\n <button\n class=\"px-6 py-2.5 bg-brand-primary text-white rounded-lg font-medium hover:opacity-90 transition-opacity\"\n onclick={() => {\n showCartExpiredModal = false;\n document.cookie = 'checkout-cartid=; Max-Age=0; path=/';\n window.location.reload();\n }}\n >\n {labels.startOver || 'Start over'}\n </button>\n </div>\n </div>\n{/if}\n\n<!-- Partial Availability Modal -->\n<Modal\n bind:open={showAvailabilityModal}\n size=\"sm\"\n oncancel={handleDeclineReducedQuantities}\n role=\"alertdialog\"\n aria-labelledby=\"availability-modal-title\"\n aria-describedby=\"availability-modal-description\"\n>\n {#snippet header()}\n <h3 id=\"availability-modal-title\" class=\"heading-lg\">\n {labels.limitedAvailability || 'Limited Availability'}\n </h3>\n {/snippet}\n\n {#snippet body()}\n <div id=\"availability-modal-description\">\n <p class=\"text-text-secondary mb-4\">\n {labels.ticketsNoLongerAvailableMessage ||\n 'Some tickets you selected are no longer available in the requested quantities:'}\n </p>\n <ul\n class=\"space-y-2\"\n aria-label={labels.ticketAvailabilityChanges ||\n 'Ticket availability changes'}\n >\n {#each availabilityChanges as change}\n <li class=\"text-text-secondary text-sm\">\n <span class=\"font-medium\">{change.ticketName}:</span>\n {#if change.availableQty > 0}\n {(\n labels.onlyNAvailable ||\n 'Only {available} available (you selected {requested})'\n )\n .replace('{available}', String(change.availableQty))\n .replace('{requested}', String(change.requestedQty))}\n {:else}\n {(\n labels.soldOutYouSelected ||\n 'Sold out (you selected {requested})'\n ).replace('{requested}', String(change.requestedQty))}\n {/if}\n </li>\n {/each}\n </ul>\n {#if availabilityChanges.some(c => c.availableQty > 0)}\n <p class=\"text-text-secondary mt-4\">\n {labels.partialAvailabilityContinue ||\n 'Would you like to continue with the available tickets?'}\n </p>\n {:else}\n <p class=\"text-text-secondary mt-4\">\n {labels.allTicketsSoldOut ||\n 'Unfortunately, all the tickets you selected have sold out.'}\n </p>\n {/if}\n </div>\n {/snippet}\n\n {#snippet footer()}\n <div role=\"group\" aria-label=\"Availability modal actions\">\n <Button\n variant=\"alternative\"\n onclick={handleDeclineReducedQuantities}\n aria-label={labels.goBack || 'Go back'}\n >\n {labels.goBack || 'Go back'}\n </Button>\n {#if availabilityChanges.some(c => c.availableQty > 0)}\n <Button\n variant=\"default\"\n onclick={handleAcceptReducedQuantities}\n aria-label={labels.continueWithAvailable || 'Continue with available'}\n >\n {labels.continueWithAvailable || 'Continue with available'}\n </Button>\n {/if}\n </div>\n {/snippet}\n</Modal>\n\n<style>\n .is-sticky {\n position: fixed !important;\n top: 20px;\n transition: left 0.2s ease;\n }\n\n .go-back-btn {\n background-color: hsl(var(--brand-primary, 224 76% 48%));\n }\n\n .go-back-btn:hover {\n filter: brightness(0.9);\n }\n</style>\n"],"names":["clampQuantitiesToCapacity","quantities","tickets","passthrough","id","qty","ticketById","t","clamped","requestedRaw","ticket","cap","remaining","perOrderMax","fee","quantity","soldOut","status","salesBegin","salesEnd","remainingCapacity","totalCapacity","maxQuantity","discountedPrice","isRevealed","isDiscounted","ticketType","donationAmount","labels","$","$$props","isDonation","donationValue","donationError","isDonationValid","priceValue","feeValue","totalPrice","formatCurrency","formattedFee","discountedPriceValue","discountedFeeValue","discountedTotalPrice","effectiveTotalCapacity","URGENT_PCT","LOW_PCT","ABSOLUTE_CAP","ABSOLUTE_FLOOR","MAX_EXACT_COUNT","effectiveThreshold","basePct","total","capPct","floorPct","scarcityInfo","pct","urgentThreshold","lowThreshold","showScarcityBadge","formatDate","dateString","formatDateTime","isTomorrow","date","now","tomorrow","isWithinWeek","diffDays","formatSmartTime","diffMs","diffMinutes","diffHours","locale","mins","hours","timeStr","formatTime","dayName","dateStr","formatSalesStart","text","formatSalesEnd","statusInfo","article","root","div","div_1","div_2","h3","div_3","root_1","$0","$1","Button","node_1","Subtract","span","span_1","node_2","Add","classes_1","span_2","root_4","span_3","root_5","text_5","$$render","consequent","consequent_2","div_4","div_5","div_6","root_6","$2","Input","node_4","e","span_4","root_7","consequent_3","span_5","fragment_2","span_6","span_7","span_8","span_9","span_10","root_9","span_11","fragment_3","span_12","span_13","consequent_5","consequent_6","alternate","div_7","root_11","span_14","root_12","consequent_7","span_15","root_13","consequent_8","consequent_9","p","root_14","text_18","$$anchor","div_8","node_9","span_16","root_15","text_19","consequent_11","ScarcityBadge","consequent_12","endTime","p_1","root_17","consequent_13","classes","venueFeesReady","donationAmounts","revealHiddenTickets","revealTicketIds","currentPromoRule","computeTicketStatus","salesBeginValue","salesEndValue","getSalesBegin","visibleTickets","sortTicketsByAvailability","ticketList","available","unavailable","minQty","effectivelySoldOut","groupTicketsBySection","groups","sectionName","groupedTickets","otherLabel","hasMultipleGroups","n","section","root_2","$$item","$$array","sectionTickets","root_3","h2","consequent_1","node_3","discountTicketIds","ticketEligibleForDiscount","hasDiscount","basePrice","discountAmount","computedStatus","salesBeginDate","$4","TicketBlock","amount","TicketSkeleton","alternate_1","logger","createLogger","eventID","inputValue","touched","displayErrorText","hintText","isApplied","isValidating","applyPromocode","trimmedCode","result","validatePromoCode","discount","hints","amt","setCookie","error","clearPromocode","handleInput","handleKeydown","onMount","saved","getCookie","node","$$value","variant","onCancel","onInfoClick","timeZone","getDefaultTimezone","showEndTime","showDoorsTime","isCheckout","priceDisplay","header","button","ArrowLeft","img","h1","time","p_2","formatDoorsTime","button_1","Information","$$args","formatFullDate","formatTimeRange","formatEventTime","organizationId","venueId","initialEventData","event","rawEvent","isLoading","isLoadingEvent","isMounted","isMobile","isSticky","sidebarLeft","containerRef","stickyRef","promocode","promocodeHint","promoDiscountAmount","showPromoInput","timerSeconds","timerActive","timerInterval","showCartExpiredModal","showErrorModal","errorModalType","cartCreatedSuccessfully","showAvailabilityModal","availabilityChanges","lowestPrice","highestPrice","subtotal","isEventFree","roundCurrency","sum","fees","taxes","taxAmount","taxLoading","taxAbortController","cartCreating","cartJustCreated","handleQuantityChange","delta","persistCheckoutState","q","createCartAndStartTimer","initiateOrder","startTimer","err","findPriceRange","totalPrices","fetchTaxPreview","lineItems","res","data","applyStoredPromocode","checkTicketAvailability","freshTickets","fetchEventTickets","changes","ticketId","requestedQty","freshTicket","availableQty","storedTicket","goToCheckout","proceedToCheckout","params","url","goto","navErr","handleAcceptReducedQuantities","change","goBack","handleDeclineReducedQuantities","handleErrorModalClose","handleRefreshPage","updateScreenSize","ticking","handleScroll","updateStickyState","rect","bounds","clearCheckoutCookies","activeCartId","handleExpiredCart","storedExpiry","syncInterval","getSessionStatus","handlePromoChange","detail","code","ids","isEventEnded","eventEnd","loadEventData","transformEvent","fetchEventDetails","apiErr","ticketErr","cookieState","loadCheckoutStateFromCookies","trackUTMSource","ensureOrderIdExists","hasPromoCodes","has","onDestroy","lastLoadedEventId","totalQty","fragment","p_3","button_2","EventInfoHeader","CheckoutTimer","consequent_4","div_9","PromocodeInput","node_5","div_10","TicketsGroup","node_6","div_11","root_8","div_12","node_7","OrderSummarySkeleton","OrderSummary","styles","Modal","consequent_10","div_13","p_4","fragment_5","p_5","p_6","fragment_6","p_7","div_14","node_13","node_14","alternate_2","div_15","root_23","div_16","h3_1","p_8","text_16","button_3","node_16","h3_2","root_24","div_17","root_25","p_9","ul","li","root_26","consequent_14","alternate_3","text_20","p_10","root_29","c","p_11","root_30","div_18","root_31","node_19"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Checkout-DB1Aocl-.js","sources":["../node_modules/@stripe/stripe-js/dist/index.mjs","../src/lib/utils/stripe-errors.ts","../src/components/Events/Checkout/GiftCardInput.svelte","../src/components/Views/Checkout.svelte"],"sourcesContent":["function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar RELEASE_TRAIN = 'clover';\n\nvar runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion(version) {\n return version === 3 ? 'v3' : version;\n};\n\nvar ORIGIN = 'https://js.stripe.com';\nvar STRIPE_JS_URL = \"\".concat(ORIGIN, \"/\").concat(RELEASE_TRAIN, \"/stripe.js\");\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar STRIPE_JS_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/(v3|[a-z]+)\\/stripe\\.js(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\n\nvar isStripeJSURL = function isStripeJSURL(url) {\n return V3_URL_REGEX.test(url) || STRIPE_JS_URL_REGEX.test(url);\n};\n\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(ORIGIN, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!isStripeJSURL(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(STRIPE_JS_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"8.8.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise$1 = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n return function (cause) {\n reject(new Error('Failed to load Stripe.js', {\n cause: cause\n }));\n };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n return function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n };\n};\n\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise$1 !== null) {\n return stripePromise$1;\n }\n\n stripePromise$1 = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n } else if (script && onLoadListener !== null && onErrorListener !== null) {\n var _script$parentNode;\n\n // remove event listeners\n script.removeEventListener('load', onLoadListener);\n script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n // reload script to trigger 'load' event\n\n (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n script = injectScript(params);\n }\n\n onLoadListener = onLoad(resolve, reject);\n onErrorListener = onError(reject);\n script.addEventListener('load', onLoadListener);\n script.addEventListener('error', onErrorListener);\n } catch (error) {\n reject(error);\n return;\n }\n }); // Resets stripePromise on error\n\n return stripePromise$1[\"catch\"](function (error) {\n stripePromise$1 = null;\n return Promise.reject(error);\n });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var pk = args[0];\n\n if (typeof pk !== 'string') {\n throw new Error(\"Expected publishable key to be of type string, got type \".concat(_typeof(pk), \" instead.\"));\n }\n\n var isTestKey = pk.match(/^pk_test/); // @ts-expect-error this is not publicly typed\n\n var version = runtimeVersionToUrlVersion(maybeStripe.version);\n var expectedVersion = RELEASE_TRAIN;\n\n if (isTestKey && version !== expectedVersion) {\n console.warn(\"Stripe.js@\".concat(version, \" was loaded on the page, but @stripe/stripe-js@\").concat(\"8.8.0\", \" expected Stripe.js@\").concat(expectedVersion, \". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning\"));\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar stripePromise;\nvar loadCalled = false;\n\nvar getStripePromise = function getStripePromise() {\n if (stripePromise) {\n return stripePromise;\n }\n\n stripePromise = loadScript(null)[\"catch\"](function (error) {\n // clear cache on error\n stripePromise = null;\n return Promise.reject(error);\n });\n return stripePromise;\n}; // Execute our own script injection after a tick to give users time to do their\n// own script injection.\n\n\nPromise.resolve().then(function () {\n return getStripePromise();\n})[\"catch\"](function (error) {\n if (!loadCalled) {\n console.warn(error);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now(); // if previous attempts are unsuccessful, will re-load script\n\n return getStripePromise().then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","// Stripe error code to user-friendly message mapping.\n// Extracted from Views/Checkout.svelte for reuse across checkout implementations.\n\nexport interface PaymentErrorDetails {\n\ttype: string; // 'card_declined', 'network', 'validation', 'general', 'rate_limit'\n\ttitle: string;\n\tmessage: string;\n\tsuggestion: string;\n\tretryable: boolean;\n}\n\n/**\n * Maps a Stripe error object to user-friendly error details.\n * Handles card_declined (insufficient_funds, lost_card, stolen_card, expired_card),\n * api_connection_error/network, rate_limit, incorrect_number/invalid_cvc/invalid_expiry,\n * and a default fallback.\n */\nexport function getPaymentErrorDetails(error: any): PaymentErrorDetails {\n\tconst errorCode = error?.code || error?.decline_code || '';\n\tconst errorType = error?.type || '';\n\tconst errorMessage = error?.message || '';\n\n\t// Card declined errors\n\tif (errorCode === 'card_declined' || errorType === 'card_error') {\n\t\tconst declineCode = error?.decline_code || '';\n\n\t\tif (declineCode === 'insufficient_funds') {\n\t\t\treturn {\n\t\t\t\ttype: 'card_declined',\n\t\t\t\ttitle: 'Insufficient funds',\n\t\t\t\tmessage: 'Your card has insufficient funds to complete this purchase.',\n\t\t\t\tsuggestion: 'Please try a different payment method or contact your bank.',\n\t\t\t\tretryable: true,\n\t\t\t};\n\t\t}\n\n\t\tif (declineCode === 'lost_card' || declineCode === 'stolen_card') {\n\t\t\treturn {\n\t\t\t\ttype: 'card_declined',\n\t\t\t\ttitle: 'Card cannot be used',\n\t\t\t\tmessage: 'This card cannot be used for this transaction.',\n\t\t\t\tsuggestion: 'Please use a different payment method.',\n\t\t\t\tretryable: true,\n\t\t\t};\n\t\t}\n\n\t\tif (declineCode === 'expired_card') {\n\t\t\treturn {\n\t\t\t\ttype: 'card_declined',\n\t\t\t\ttitle: 'Card expired',\n\t\t\t\tmessage: 'Your card has expired.',\n\t\t\t\tsuggestion: 'Please use a different card or update your card details.',\n\t\t\t\tretryable: true,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'card_declined',\n\t\t\ttitle: 'Card declined',\n\t\t\tmessage: 'Your card was declined by your bank.',\n\t\t\tsuggestion: 'Please try a different card or contact your bank for more information.',\n\t\t\tretryable: true,\n\t\t};\n\t}\n\n\t// Network/connection errors\n\tif (\n\t\terrorType === 'api_connection_error' ||\n\t\terrorMessage.includes('network') ||\n\t\terrorMessage.includes('connection')\n\t) {\n\t\treturn {\n\t\t\ttype: 'network',\n\t\t\ttitle: 'Connection error',\n\t\t\tmessage: \"We couldn't connect to the payment server.\",\n\t\t\tsuggestion: 'Please check your internet connection and try again.',\n\t\t\tretryable: true,\n\t\t};\n\t}\n\n\t// Rate limiting\n\tif (errorCode === 'rate_limit') {\n\t\treturn {\n\t\t\ttype: 'rate_limit',\n\t\t\ttitle: 'Too many attempts',\n\t\t\tmessage: 'Too many payment attempts. Please wait a moment.',\n\t\t\tsuggestion: 'Wait 30 seconds before trying again.',\n\t\t\tretryable: true,\n\t\t};\n\t}\n\n\t// Invalid card details\n\tif (errorCode === 'incorrect_number' || errorCode === 'invalid_number') {\n\t\treturn {\n\t\t\ttype: 'validation',\n\t\t\ttitle: 'Invalid card number',\n\t\t\tmessage: 'The card number you entered is invalid.',\n\t\t\tsuggestion: 'Please check your card number and try again.',\n\t\t\tretryable: true,\n\t\t};\n\t}\n\n\tif (errorCode === 'incorrect_cvc' || errorCode === 'invalid_cvc') {\n\t\treturn {\n\t\t\ttype: 'validation',\n\t\t\ttitle: 'Invalid security code',\n\t\t\tmessage: 'The security code (CVC) is incorrect.',\n\t\t\tsuggestion: 'Please check the 3-digit code on the back of your card.',\n\t\t\tretryable: true,\n\t\t};\n\t}\n\n\tif (errorCode === 'invalid_expiry_month' || errorCode === 'invalid_expiry_year') {\n\t\treturn {\n\t\t\ttype: 'validation',\n\t\t\ttitle: 'Invalid expiration date',\n\t\t\tmessage: 'The expiration date is invalid.',\n\t\t\tsuggestion: \"Please check your card's expiration date.\",\n\t\t\tretryable: true,\n\t\t};\n\t}\n\n\t// Default error\n\treturn {\n\t\ttype: 'general',\n\t\ttitle: 'Payment failed',\n\t\tmessage: errorMessage || 'Something went wrong with your payment.',\n\t\tsuggestion: 'Please try again or use a different payment method.',\n\t\tretryable: true,\n\t};\n}\n","<script module>\n\timport { createLogger } from '@getmicdrop/svelte-components';\n\tconst logger = createLogger('GiftCardInput');\n</script>\n\n<script>\n import { slide } from 'svelte/transition';\n import { Gift, Close, Checkmark, Warning } from 'carbon-icons-svelte';\n import { formatCurrency } from '@getmicdrop/svelte-components';\n import { applyGiftCard, removeGiftCard } from '$lib/api';\n\n let {\n cartId,\n onApplied = () => {},\n onRemoved = () => {},\n disabled = false,\n labels = {},\n } = $props();\n\n let code = $state('');\n let loading = $state(false);\n let error = $state('');\n let appliedCard = $state(null);\n let showInput = $state(false);\n\n\n\n async function handleApply() {\n if (!code.trim() || loading || !cartId) return;\n\n loading = true;\n error = '';\n\n try {\n const result = await applyGiftCard(cartId, code.trim().toUpperCase());\n\n if (result.valid) {\n appliedCard = {\n code: result.giftCardCode || code.trim().toUpperCase(),\n giftCardAmount: result.giftCardAmount,\n giftCardBalance: result.giftCardBalance,\n paymentType: result.paymentType,\n stripeAmount: result.stripeAmount,\n orderTotal: result.orderTotal,\n requiresStripe: result.requiresStripe,\n };\n code = '';\n showInput = false;\n onApplied(appliedCard);\n } else {\n error = result.error || (labels.invalidGiftCardCode || 'Invalid gift card code');\n }\n } catch (err) {\n logger.error('Error applying gift card:', err);\n error = labels.failedToApplyGiftCard || 'Failed to apply gift card. Please try again.';\n }\n\n loading = false;\n }\n\n async function handleRemove() {\n if (loading || !cartId) return;\n\n loading = true;\n error = '';\n\n try {\n const result = await removeGiftCard(cartId);\n\n if (!result.error) {\n const previousCard = appliedCard;\n appliedCard = null;\n showInput = false;\n onRemoved(previousCard);\n } else {\n error = result.error;\n }\n } catch (err) {\n logger.error('Error removing gift card:', err);\n error = labels.failedToRemoveGiftCard || 'Failed to remove gift card. Please try again.';\n }\n\n loading = false;\n }\n\n function handleKeydown(e) {\n if (e.key === 'Enter' && !loading) {\n handleApply();\n }\n }\n\n function toggleInput() {\n if (!appliedCard) {\n showInput = !showInput;\n if (!showInput) {\n code = '';\n error = '';\n }\n }\n }\n</script>\n\n<div class=\"mb-4\">\n {#if appliedCard}\n <!-- Applied gift card display -->\n <div class=\"applied-card\" transition:slide={{ duration: 200 }}>\n <div class=\"flex items-center gap-3\">\n <div class=\"applied-icon\">\n <Checkmark size={16} />\n </div>\n <div class=\"flex flex-col flex-1\">\n <span class=\"text-xs text-status-success-text font-medium\">{labels.giftCardApplied || 'Gift card applied'}</span>\n <span class=\"text-sm font-mono text-text-primary\">{appliedCard.code}</span>\n </div>\n <button\n class=\"remove-btn\"\n onclick={handleRemove}\n disabled={loading || disabled}\n aria-label={labels.removeGiftCard || \"Remove gift card\"}\n >\n {#if loading}\n <span class=\"gc-spinner gc-spinner-sm\"></span>\n {:else}\n <Close size={16} />\n {/if}\n </button>\n </div>\n <div class=\"applied-details\">\n <div class=\"flex justify-between items-center text-sm\">\n <span class=\"text-text-secondary\">{labels.appliedToOrder || 'Applied to order'}</span>\n <span class=\"font-medium text-accent-success\">-{formatCurrency(appliedCard.giftCardAmount)}</span>\n </div>\n {#if appliedCard.paymentType === 'gift_card_only'}\n <div class=\"full-coverage-badge\">\n <Checkmark size={14} />\n <span>{labels.fullyCoveredByGiftCard || 'Fully covered by gift card'}</span>\n </div>\n {:else if appliedCard.paymentType === 'split'}\n <div class=\"flex justify-between items-center text-sm mt-1.5\">\n <span class=\"text-text-secondary\">{labels.remainingToPay || 'Remaining to pay'}</span>\n <span class=\"font-medium text-text-primary\">{formatCurrency(appliedCard.stripeAmount)}</span>\n </div>\n {/if}\n </div>\n </div>\n {:else}\n <!-- Gift card input toggle -->\n <button\n class=\"gift-card-toggle\"\n onclick={toggleInput}\n disabled={disabled}\n aria-expanded={showInput}\n >\n <Gift size={18} class=\"gift-icon\" />\n <span>{labels.haveAGiftCard || 'Have a gift card?'}</span>\n <span class=\"toggle-indicator\">{showInput ? '-' : '+'}</span>\n </button>\n\n {#if showInput}\n <div class=\"input-section\" transition:slide={{ duration: 200 }}>\n <div class=\"flex gap-2\">\n <input\n type=\"text\"\n bind:value={code}\n onkeydown={handleKeydown}\n placeholder={labels.enterGiftCardCode || \"Enter gift card code\"}\n disabled={loading || disabled}\n class=\"gift-input\"\n class:has-error={!!error}\n autocomplete=\"off\"\n autocapitalize=\"characters\"\n />\n <button\n class=\"apply-btn\"\n onclick={handleApply}\n disabled={!code.trim() || loading || disabled}\n >\n {#if loading}\n <span class=\"gc-spinner\"></span>\n {:else}\n {labels.apply || 'Apply'}\n {/if}\n </button>\n </div>\n {#if error}\n <div class=\"flex items-center gap-1.5 mt-2 text-sm text-accent-danger\" transition:slide={{ duration: 150 }}>\n <Warning size={14} />\n <span>{error}</span>\n </div>\n {/if}\n </div>\n {/if}\n {/if}\n</div>\n\n<style>\n .gift-card-toggle {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.75rem 1rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 500;\n background-color: hsl(var(--bg-secondary));\n border-radius: 0.5rem;\n border: 1px solid hsl(var(--border));\n color: hsl(var(--text-secondary));\n cursor: pointer;\n transition-property: background-color, color;\n transition-duration: 150ms;\n }\n\n .gift-card-toggle:hover:not(:disabled) {\n background-color: hsl(var(--bg-tertiary));\n\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\n background-color: hsl(var(--muted));\n }\n }\n\n .gift-card-toggle:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .gift-card-toggle :global(.gift-icon) {\n color: hsl(var(--text-tertiary));\n\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\n color: hsl(var(--text-head));\n }\n }\n\n .toggle-indicator {\n margin-left: auto;\n color: hsl(var(--text-head));\n font-size: 1.125rem;\n font-weight: 300;\n }\n\n .input-section {\n margin-top: 0.75rem;\n padding: 1rem;\n background-color: hsl(var(--bg-secondary));\n border-radius: 0.5rem;\n border: 1px solid hsl(var(--border));\n }\n\n .gift-input {\n width: 100%;\n padding: 0.5rem 0.75rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n border-radius: 0.5rem;\n border: 1px solid hsl(var(--stroke-primary));\n background-color: hsl(var(--bg-primary));\n color: hsl(var(--text-primary));\n flex: 1;\n text-transform: uppercase;\n transition-property: border-color;\n transition-duration: 150ms;\n }\n\n .gift-input::placeholder {\n color: hsl(var(--text-head));\n\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\n color: hsl(var(--text-tertiary));\n }\n }\n\n .gift-input:focus {\n outline: none;\n box-shadow: 0 0 0 2px hsl(var(--brand-primary));\n border-color: transparent;\n }\n\n .gift-input.has-error {\n border-color: hsl(var(--accent-danger));\n }\n\n .gift-input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .apply-btn {\n padding: 0.5rem 1rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 500;\n border-radius: 0.5rem;\n color: hsl(var(--bg-primary));\n border: none;\n transition-property: background-color;\n transition-duration: 150ms;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 4rem;\n cursor: pointer;\n background-color: hsl(var(--brand-primary, 224 76% 48%));\n }\n\n .apply-btn:hover:not(:disabled) {\n filter: brightness(0.9);\n }\n\n .apply-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Applied card styles */\n .applied-card {\n padding: 1rem;\n background-color: hsl(var(--accent-success) / 8%);\n border-radius: 0.5rem;\n border: 1px solid hsl(var(--accent-success) / 30%);\n }\n\n .applied-icon {\n width: 2rem;\n height: 2rem;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: hsl(var(--accent-success) / 15%);\n color: hsl(var(--accent-success));\n }\n\n .remove-btn {\n padding: 0.5rem;\n border-radius: 9999px;\n border: none;\n background: none;\n transition-property: background-color, color;\n transition-duration: 150ms;\n color: hsl(var(--text-tertiary));\n cursor: pointer;\n }\n\n .remove-btn:hover {\n background-color: hsl(var(--accent-danger) / 10%);\n color: hsl(var(--accent-danger));\n }\n\n .remove-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .applied-details {\n margin-top: 0.75rem;\n padding-top: 0.75rem;\n border-top: 1px solid hsl(var(--accent-success) / 30%);\n }\n\n .full-coverage-badge {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n margin-top: 0.5rem;\n padding: 0.375rem 0.625rem;\n border-radius: 0.375rem;\n background-color: hsl(var(--accent-success) / 15%);\n color: hsl(var(--accent-success));\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n }\n\n /* Loading spinner */\n .gc-spinner {\n width: 1.5rem;\n height: 1.5rem;\n border: 2px solid hsl(var(--border));\n border-radius: 9999px;\n border-top-color: hsl(var(--brand-primary));\n animation: spin 0.8s linear infinite;\n }\n\n .gc-spinner-sm {\n width: 1rem;\n height: 1rem;\n }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n</style>\n","<script module>\n\timport { createLogger } from '@getmicdrop/svelte-components';\n\tconst logger = createLogger('Checkout');\n</script>\n\n<script>\n import { getDefaultTimezone } from '@getmicdrop/svelte-components';\nimport Cookies from 'js-cookie';\n import { onMount } from 'svelte';\n import { loadStripe } from '@stripe/stripe-js';\n import {\n transformEvent,\n loadCheckoutStateFromCookies,\n getVenueDetails,\n } from '$lib/utils/utils.js';\n import {\n createPaymentIntent,\n completeGiftCardPayment,\n extendCheckoutSession,\n getSessionStatus,\n } from '$lib/api';\n import { validatePaymentIntent } from '$lib/utils/utils.js';\n import { getPaymentErrorDetails } from '$lib/utils/stripe-errors';\n import { roundCurrency } from '$lib/utils/currency.js';\n import CheckoutMain from '$lib/premium-ticket-experience/variants/v3-airbnb-split/CheckoutMain.svelte';\n import GiftCardInput from '../Events/Checkout/GiftCardInput.svelte';\n\n // --- Legacy fallback ---\n // RETIREMENT: 2026-08-13 — see docs/LEGACY_RETIREMENT.md.\n let useLegacy = $state(false);\n let LegacyComponent = $state(null);\n\n if (typeof window !== 'undefined') {\n const params = new URLSearchParams(window.location.search);\n if (params.get('legacy') === '1') {\n useLegacy = true;\n }\n }\n\n $effect(() => {\n if (useLegacy && !LegacyComponent) {\n logger.warn(\n '[VC] DEPRECATED: ?legacy=1 fallback for Checkout retires on 2026-08-13. See docs/LEGACY_RETIREMENT.md.'\n );\n import('./Checkout.legacy.svelte')\n .then(m => {\n LegacyComponent = m.default;\n })\n .catch(() => {\n useLegacy = false;\n });\n }\n });\n\n let {\n data,\n availableTickets = [],\n value = '',\n venueId = '',\n organizationId = '',\n onNavigateToSuccess,\n initialError = undefined,\n labels = {},\n } = $props();\n\n // --- Derive event from data prop ---\n let id = $derived((data || {}).id);\n let orgSlug = $derived((data || {}).orgSlug);\n let slug = $derived((data || {}).slug);\n let rawEvent = $derived((data || {}).event);\n let event = $derived(\n rawEvent\n ? transformEvent(rawEvent)\n : data && (data.id || id)\n ? {\n id: data.id || id,\n eventID: data.id || id,\n venueID: data.venueID ?? data.venueId ?? null,\n venueId: data.venueId ?? data.venueID ?? null,\n eventTicketingType: 0,\n ticketType: 0,\n availableTickets: [],\n }\n : null\n );\n\n // --- Core state ---\n let cartId = $state('');\n let quantities = $state({});\n let donationAmounts = $state({});\n let tickets = $state([]);\n let promocode = $state('');\n let promoDiscountAmount = $state(0);\n let processing = $state(false);\n\n // Stripe state\n let stripe = $state(null);\n let paymentIntent = $state('');\n let elements = $state(undefined);\n\n // Error state\n let paymentErrorMessage = $state('');\n let showError = $state(false);\n let errorMessage = $state('');\n\n // Gift card state\n let giftCardApplied = $state(null);\n\n // CheckoutConfig for CheckoutMain\n let checkoutConfig = $state(null);\n\n // --- Initialize on mount ---\n onMount(async () => {\n cartId = Cookies.get('checkout-cartid');\n\n if (!cartId) {\n showError = true;\n errorMessage =\n labels.noCheckoutSession ||\n 'No checkout session found. Please select tickets first.';\n return;\n }\n\n // Load checkout state from cookies/localStorage\n try {\n const checkoutState = loadCheckoutStateFromCookies(\n event?.eventID || event?.id || id\n );\n quantities = checkoutState.quantities || {};\n donationAmounts = checkoutState.donationAmounts || {};\n promocode = checkoutState.promocode || '';\n promoDiscountAmount = checkoutState.promoDiscountAmount || 0;\n tickets = checkoutState.tickets || [];\n } catch (err) {\n logger.error('Error loading checkout state:', err);\n quantities = {};\n tickets = [];\n }\n\n if (tickets.length > 0 && event) {\n event.availableTickets = tickets;\n availableTickets = tickets;\n }\n\n // Fetch venue details for fee calculations\n let venueServiceCharge = {\n serviceFeeCents: 0,\n serviceFeePercentage: 0,\n serviceFeeChargeType: 'both',\n maxServiceFeeCents: 0,\n taxPercentage: 0,\n };\n\n try {\n const venueData = await getVenueDetails(\n event?.venueID || event?.venueId || venueId\n );\n venueServiceCharge = {\n serviceFeeCents: venueData?.serviceFeeCents ?? 0,\n serviceFeePercentage: venueData?.serviceFeePercentage ?? 0,\n serviceFeeChargeType: venueData?.serviceFeeChargeType ?? 'both',\n maxServiceFeeCents: venueData?.maxServiceFeeCents ?? 0,\n taxPercentage: venueData?.taxPercentage ?? 0,\n };\n } catch (err) {\n logger.error('Error fetching venue data:', err);\n }\n\n // Build OrderLine[] from quantities + tickets + venue fees\n const lines = buildOrderLines(quantities, tickets, venueServiceCharge);\n\n // Initialize Stripe ONLY when there is a non-zero amount that\n // could plausibly be charged via card. Skipping the call for\n // $0 orders (free events, fully-comp'd carts) prevents the\n // backend from creating a Stripe PaymentIntent that will never\n // be consumed.\n //\n // Gift-card application happens AFTER mount, so we still init\n // Stripe here for paid carts; if the user later applies a\n // gift card that covers the whole amount, handleGiftCardApplied\n // clears the elements. The unused PaymentIntent is benign on\n // Stripe's side (auto-expires) and avoids a UI race where the\n // card form has no PI to mount against on the common\n // pay-by-card path.\n const totalCents = lines.reduce(\n (acc, l) =>\n acc + Math.round((l.unitPrice ?? 0) * 100) * (l.quantity ?? 0),\n 0\n );\n if (Object.keys(quantities).length > 0 && totalCents > 0) {\n await initializeStripePayment();\n }\n\n // Resolve timer from: 1) server session, 2) localStorage, 3) default 15 min\n let timerStart = 15 * 60;\n if (cartId) {\n // Always check localStorage first (set by tickets page timer)\n const storedExpiry = typeof localStorage !== 'undefined'\n ? localStorage.getItem(`checkout-expiry-${cartId}`)\n : null;\n if (storedExpiry) {\n const remaining = Math.max(0, Math.floor((parseInt(storedExpiry, 10) - Date.now()) / 1000));\n if (remaining > 0) timerStart = remaining;\n }\n\n // Then try server (overrides localStorage if available)\n try {\n const status = await getSessionStatus(cartId);\n if (!status.error && status.expiresAt) {\n const remaining = Math.max(0, Math.floor((new Date(status.expiresAt) - new Date()) / 1000));\n timerStart = remaining;\n localStorage.setItem(`checkout-expiry-${cartId}`, String(new Date(status.expiresAt).getTime()));\n }\n // If status.error (404), timerStart keeps the localStorage value\n } catch {\n // Network error — timerStart keeps the localStorage value\n }\n }\n\n // Build CheckoutConfig for CheckoutMain\n checkoutConfig = {\n event: buildEventData(event, venueServiceCharge),\n lines,\n timerStart,\n promoApplied: !!promocode,\n promoDiscount: promoDiscountAmount,\n forceExpired: false,\n };\n\n // Apply initial error if provided (for showcase/preview)\n if (initialError) {\n const details = getPaymentErrorDetails(\n typeof initialError === 'object'\n ? initialError\n : {\n code: 'card_declined',\n message:\n 'Your card was declined. Please try a different payment method.',\n }\n );\n paymentErrorMessage = details.message;\n }\n });\n\n // --- Stripe initialization (uses API-provided key, NO hardcoded key) ---\n async function initializeStripePayment() {\n if (!cartId) {\n logger.error('Missing cartId!');\n return;\n }\n\n const filteredQuantities = Object.fromEntries(\n Object.entries(quantities).filter(([_, val]) => val > 0)\n );\n\n try {\n // Convert donationAmounts to numeric keys/values for the API\n const numericDonationAmounts = Object.fromEntries(\n Object.entries(donationAmounts)\n .filter(([, v]) => parseFloat(String(v)) > 0)\n .map(([k, v]) => [parseInt(k, 10), parseFloat(String(v))])\n );\n const paymentData = await createPaymentIntent(\n cartId,\n filteredQuantities,\n Object.keys(numericDonationAmounts).length > 0\n ? numericDonationAmounts\n : undefined\n );\n\n if (!paymentData) {\n paymentErrorMessage =\n labels.failedToCreatePaymentIntent ||\n 'Failed to create payment intent. Please try again.';\n return;\n }\n\n // Use the Stripe publishable key from the API response -- NEVER hardcoded\n const stripeKey = paymentData.stripe_publishable_key;\n if (!stripeKey) {\n logger.error('No Stripe publishable key in payment intent response');\n paymentErrorMessage =\n labels.paymentConfigError ||\n 'Payment configuration error. Please try again.';\n return;\n }\n\n stripe = await loadStripe(stripeKey);\n\n if (paymentData.client_secret) {\n paymentIntent = paymentData.client_secret;\n } else {\n paymentErrorMessage =\n labels.failedToInitPayment ||\n 'Failed to initialize payment. Please try again.';\n }\n } catch (err) {\n logger.error('Failed to initialize Stripe payment:', err);\n paymentErrorMessage =\n err.message ||\n labels.failedToInitPayment ||\n 'Failed to initialize payment. Please try again.';\n }\n }\n\n // --- Build EventData shape for CheckoutMain ---\n function buildEventData(evt, venueCharge) {\n if (!evt) return null;\n return {\n id: evt.id || evt.eventID,\n title: evt.name || evt.title || '',\n slug: evt.slug || slug || '',\n description: evt.description || '',\n date: evt.date || '',\n startDateTime: evt.startDateTime || '',\n endDateTime: evt.endDateTime || '',\n doorsOpenTime: evt.doorsOpenTime || '',\n timezone: evt.timeZone || evt.timezone || getDefaultTimezone(),\n imageUrl: evt.imageUrl || evt.image || '',\n venue: {\n id: evt.venueID || evt.venueId || 0,\n name: evt.venueName || '',\n address: evt.venueAddress || '',\n timezone: evt.timeZone || evt.timezone || getDefaultTimezone(),\n serviceFeePercentage: venueCharge.serviceFeePercentage,\n serviceFeeCents: venueCharge.serviceFeeCents,\n taxPercentage: venueCharge.taxPercentage,\n serviceFeeChargeType: venueCharge.serviceFeeChargeType,\n maxServiceFeeCents: venueCharge.maxServiceFeeCents,\n },\n performers: evt.performers || [],\n tickets: (evt.availableTickets || []).map(t => ({\n id: t.ID || t.id,\n name: t.name || '',\n description: t.description || '',\n price: (t.price || 0) / 100,\n fee: 0,\n quantityAvailable: t.quantityAvailable || 0,\n quantityTotal: t.quantityTotal || 0,\n minPerOrder: t.minPerOrder || 1,\n maxPerOrder: t.maxPerOrder || 10,\n status: 'on_sale',\n isDonation: t.type === 2,\n isHidden: false,\n })),\n faqs: evt.faqs || [],\n status: 'on_sale',\n isPasswordProtected: false,\n isRegistrationEvent: evt.eventTicketingType === 1 || evt.ticketType === 1,\n totalTicketsRemaining: 100,\n totalTicketsCapacity: 100,\n };\n }\n\n // --- Build OrderLine[] from cookie data + venue fees ---\n function buildOrderLines(qtys, ticketList, venueCharge) {\n const lines = [];\n for (const [ticketId, quantity] of Object.entries(qtys)) {\n if (quantity <= 0) continue;\n const ticket = ticketList.find(\n t => String(t.ID) === ticketId || String(t.id) === ticketId\n );\n if (!ticket) continue;\n\n const unitPrice = ticket.price || 0;\n const fee = calculateTicketFee(unitPrice, venueCharge);\n\n lines.push({\n ticketId: parseInt(ticketId),\n ticketName: ticket.name || '',\n quantity,\n unitPrice,\n fee,\n subtotal: roundCurrency(unitPrice * quantity),\n });\n }\n return lines;\n }\n\n // --- Calculate fee per ticket based on venue charge settings ---\n function calculateTicketFee(unitPrice, venueCharge) {\n if (unitPrice === 0) return 0;\n\n const {\n serviceFeePercentage = 0,\n serviceFeeCents = 0,\n serviceFeeChargeType = 'both',\n maxServiceFeeCents = 0,\n } = venueCharge;\n\n let fee = 0;\n if (\n serviceFeeChargeType === 'percentage' ||\n serviceFeeChargeType === 'both'\n ) {\n fee += unitPrice * (serviceFeePercentage / 100);\n }\n if (serviceFeeChargeType === 'flat' || serviceFeeChargeType === 'both') {\n fee += serviceFeeCents / 100;\n }\n\n if (maxServiceFeeCents > 0) {\n fee = Math.min(fee, maxServiceFeeCents / 100);\n }\n\n return roundCurrency(fee);\n }\n\n // --- Compute whether order is free (for hiding gift card section) ---\n let isFreeOrder = $derived(\n checkoutConfig ? checkoutConfig.lines.every(l => l.unitPrice === 0) : true\n );\n\n // --- Place order handler: 3-step Stripe flow ---\n async function handlePlaceOrder(formData) {\n if (processing) return;\n processing = true;\n paymentErrorMessage = '';\n\n try {\n // Gift-card-only purchase: skip Stripe entirely\n if (giftCardApplied && !giftCardApplied.requiresStripe) {\n await executeGiftCardOnlyPurchase(formData);\n return;\n }\n\n // Step 1: Validate card via Stripe elements\n if (!elements) {\n paymentErrorMessage =\n labels.paymentFormNotReady ||\n 'Payment form is not ready. Please wait a moment and try again.';\n processing = false;\n return;\n }\n\n if (!stripe) {\n paymentErrorMessage =\n labels.paymentSystemNotInitialized ||\n 'Payment system is not initialized. Please refresh the page.';\n processing = false;\n return;\n }\n\n const { error: submitError } = await elements.submit();\n if (submitError) {\n const details = getPaymentErrorDetails(submitError);\n paymentErrorMessage = details.message;\n processing = false;\n return;\n }\n\n // Step 2: Confirm payment with Stripe\n const result = await stripe.confirmPayment({\n elements,\n redirect: 'if_required',\n });\n\n if (result.error) {\n const details = getPaymentErrorDetails(result.error);\n paymentErrorMessage = details.message;\n processing = false;\n return;\n }\n\n // Step 3: Validate payment on backend\n const paymentPayload = {\n id: cartId,\n paymentIntentId: result.paymentIntent.id,\n tickets: quantities,\n firstName: formData.firstName,\n lastName: formData.lastName,\n email: formData.email,\n paymentMethod: 'credit-card',\n mailingList: formData.keepMeUpdated,\n saleType: 'online',\n };\n\n const response = await validatePaymentIntent(cartId, paymentPayload);\n\n if (response?.status === 'Payment succeeded') {\n const successData = {\n orderId: cartId,\n eventId: event?.id || event?.eventID || null,\n event: event || null,\n venueId: venueId || event?.venueId || null,\n organizationId: organizationId || event?.organizationId || null,\n };\n\n if (onNavigateToSuccess) {\n onNavigateToSuccess(successData);\n }\n } else if (\n response?.status === 'Payment amount does not match the total price'\n ) {\n paymentErrorMessage =\n labels.paymentAmountMismatch ||\n 'Payment amount mismatch. Please refresh and try again.';\n } else {\n paymentErrorMessage =\n labels.paymentValidationFailed ||\n 'Payment validation failed. Please try again.';\n }\n } catch (err) {\n logger.error('Payment execution error:', err);\n const details = getPaymentErrorDetails(err);\n paymentErrorMessage = details.message;\n } finally {\n processing = false;\n }\n }\n\n // --- Gift card only purchase ---\n async function executeGiftCardOnlyPurchase(formData) {\n try {\n const result = await completeGiftCardPayment(cartId, {\n firstName: formData.firstName,\n lastName: formData.lastName,\n email: formData.email,\n phoneNumber: null,\n mailingList: formData.keepMeUpdated,\n });\n\n if (result?.success) {\n const successData = {\n orderId: result.orderId || cartId,\n eventId: event?.id || event?.eventID || null,\n event: event || null,\n venueId: venueId || event?.venueId || null,\n organizationId: organizationId || event?.organizationId || null,\n paymentType: 'gift_card_only',\n };\n\n if (onNavigateToSuccess) {\n onNavigateToSuccess(successData);\n }\n } else {\n paymentErrorMessage =\n result?.error ||\n labels.failedToCompleteOrder ||\n 'Failed to complete order. Please try again.';\n }\n } catch (err) {\n logger.error('Gift card payment error:', err);\n const details = getPaymentErrorDetails(err);\n paymentErrorMessage = details.message;\n } finally {\n processing = false;\n }\n }\n\n // --- Gift card handlers ---\n function handleGiftCardApplied(appliedCard) {\n giftCardApplied = appliedCard;\n if (!appliedCard.requiresStripe) {\n // Gift card covers full amount -- clear Stripe\n elements = undefined;\n stripe = null;\n paymentIntent = '';\n }\n }\n\n function handleGiftCardRemoved() {\n giftCardApplied = null;\n // Re-initialize Stripe payment\n if (cartId && Object.keys(quantities).length > 0) {\n initializeStripePayment();\n }\n }\n\n // --- Navigation handlers ---\n function handleBack() {\n window.history.back();\n }\n\n function handleRetryExpired() {\n window.history.back();\n }\n\n async function handleExtendSession() {\n if (!cartId) return null;\n\n try {\n const result = await extendCheckoutSession(cartId);\n if (result.success) {\n return {\n newExpiryTime: result.newExpiryTime,\n remainingExtensions: result.remainingExtensions,\n };\n } else {\n logger.error('Failed to extend session:', result.error);\n return null;\n }\n } catch (err) {\n logger.error('Error extending checkout session:', err);\n return null;\n }\n }\n</script>\n\n{#if useLegacy && LegacyComponent}\n <LegacyComponent\n {data}\n {availableTickets}\n {value}\n {venueId}\n {organizationId}\n {onNavigateToSuccess}\n {initialError}\n {labels}\n />\n{:else if checkoutConfig}\n <CheckoutMain\n config={checkoutConfig}\n onPlaceOrder={handlePlaceOrder}\n onBack={handleBack}\n onRetryExpired={handleRetryExpired}\n onExtendSession={handleExtendSession}\n {stripe}\n {paymentIntent}\n bind:elements\n paymentError={paymentErrorMessage}\n />\n\n {#if !isFreeOrder}\n <div class=\"max-w-6xl mx-auto px-4 md:px-6 -mt-4 mb-8\">\n <GiftCardInput\n {cartId}\n onApplied={handleGiftCardApplied}\n onRemoved={handleGiftCardRemoved}\n disabled={processing}\n />\n </div>\n {/if}\n{:else if showError}\n <div class=\"p-8 text-center\">\n <p class=\"text-accent-danger\">{errorMessage}</p>\n </div>\n{:else}\n <div class=\"p-8 text-center\">\n <p class=\"text-muted-foreground\">\n {labels.loadingSecurePaymentForm || 'Loading secure payment form...'}\n </p>\n </div>\n{/if}\n"],"names":["_typeof","obj","RELEASE_TRAIN","runtimeVersionToUrlVersion","version","ORIGIN","STRIPE_JS_URL","V3_URL_REGEX","STRIPE_JS_URL_REGEX","isStripeJSURL","url","findScript","scripts","i","script","injectScript","params","queryString","headOrBody","registerWrapper","stripe","startTime","stripePromise$1","onErrorListener","onLoadListener","onError","reject","cause","onLoad","resolve","loadScript","_script$parentNode","error","initStripe","maybeStripe","args","pk","isTestKey","expectedVersion","stripePromise","loadCalled","getStripePromise","loadStripe","_len","_key","getPaymentErrorDetails","errorCode","errorType","errorMessage","declineCode","logger","createLogger","onApplied","$","$$props","onRemoved","disabled","labels","code","loading","appliedCard","showInput","handleApply","result","applyGiftCard","err","handleRemove","removeGiftCard","previousCard","handleKeydown","e","toggleInput","div","root","div_1","root_1","div_2","div_3","Checkmark","div_4","span","span_1","button","span_2","root_2","Close","$$render","consequent","alternate","div_5","div_6","span_3","span_4","div_7","root_4","span_5","node_4","div_8","root_5","span_6","span_7","formatCurrency","consequent_2","text_1","slide","button_1","fragment_1","Gift","span_8","node_5","span_9","div_9","root_7","div_10","input","button_2","span_10","root_8","consequent_4","alternate_1","div_11","root_10","Warning","span_11","node_9","consequent_5","classes","$0","$$value","consequent_6","consequent_3","alternate_2","useLegacy","LegacyComponent","m","availableTickets","value","venueId","organizationId","initialError","id","slug","rawEvent","event","transformEvent","cartId","quantities","donationAmounts","tickets","promocode","promoDiscountAmount","processing","paymentIntent","elements","paymentErrorMessage","showError","giftCardApplied","checkoutConfig","onMount","Cookies","checkoutState","loadCheckoutStateFromCookies","venueServiceCharge","venueData","getVenueDetails","lines","buildOrderLines","totalCents","acc","initializeStripePayment","timerStart","storedExpiry","remaining","status","getSessionStatus","buildEventData","details","filteredQuantities","_","val","numericDonationAmounts","v","k","paymentData","createPaymentIntent","stripeKey","evt","venueCharge","getDefaultTimezone","t","qtys","ticketList","ticketId","quantity","ticket","unitPrice","fee","calculateTicketFee","roundCurrency","serviceFeePercentage","serviceFeeCents","serviceFeeChargeType","maxServiceFeeCents","isFreeOrder","l","handlePlaceOrder","formData","executeGiftCardOnlyPurchase","submitError","paymentPayload","response","validatePaymentIntent","successData","completeGiftCardPayment","handleGiftCardApplied","handleGiftCardRemoved","handleBack","handleRetryExpired","handleExtendSession","extendCheckoutSession","LegacyComponent_1","$$anchor","CheckoutMain","node_2","root_3","GiftCardInput","consequent_1","p","p_1"],"mappings":"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","x_google_ignoreList":[0]}