@getmicdrop/venue-calendar 3.5.5 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{CarouselView.legacy-C9QYS3av.js → CarouselView.legacy-BlEK9ibf.js} +2 -2
- package/dist/{CarouselView.legacy-C9QYS3av.js.map → CarouselView.legacy-BlEK9ibf.js.map} +1 -1
- package/dist/{Checkout.legacy-CyiqW4Im.js → Checkout.legacy-JgPexoEK.js} +250 -246
- package/dist/Checkout.legacy-JgPexoEK.js.map +1 -0
- package/dist/{CollectionView.legacy-CQeXXMOU.js → CollectionView.legacy-DjkJR8wk.js} +30 -29
- package/dist/{CollectionView.legacy-CQeXXMOU.js.map → CollectionView.legacy-DjkJR8wk.js.map} +1 -1
- package/dist/{FeaturedView.legacy-C3td2GLq.js → FeaturedView.legacy-DGMa1Vyw.js} +2 -2
- package/dist/{FeaturedView.legacy-C3td2GLq.js.map → FeaturedView.legacy-DGMa1Vyw.js.map} +1 -1
- package/dist/{GalleryView.legacy-BJwdUDNJ.js → GalleryView.legacy-CkQf1VnC.js} +2 -2
- package/dist/{GalleryView.legacy-BJwdUDNJ.js.map → GalleryView.legacy-CkQf1VnC.js.map} +1 -1
- package/dist/{GroupedListView.legacy-DWU0K8XY.js → GroupedListView.legacy-B4Z6bJko.js} +2 -2
- package/dist/{GroupedListView.legacy-DWU0K8XY.js.map → GroupedListView.legacy-B4Z6bJko.js.map} +1 -1
- package/dist/{SeriesPage.legacy-D-ZoVrPE.js → SeriesPage.legacy-BaM8SV_6.js} +83 -80
- package/dist/SeriesPage.legacy-BaM8SV_6.js.map +1 -0
- package/dist/{Success.legacy-D9zlNOn7.js → Success.legacy-C2GzVE67.js} +24 -21
- package/dist/Success.legacy-C2GzVE67.js.map +1 -0
- package/dist/{VenueCalendar-DX2HF1GE.js → VenueCalendar-B1uxQvwR.js} +12629 -12328
- package/dist/VenueCalendar-B1uxQvwR.js.map +1 -0
- package/dist/api/api.cjs +1 -1
- package/dist/api/api.cjs.map +1 -1
- package/dist/api/api.mjs +278 -266
- package/dist/api/api.mjs.map +1 -1
- package/dist/seo/seo.cjs +1 -1
- package/dist/seo/seo.cjs.map +1 -1
- package/dist/seo/seo.mjs +52 -40
- package/dist/seo/seo.mjs.map +1 -1
- package/dist/seo/types.d.ts +1 -0
- package/dist/venue-calendar.css +1 -1
- package/dist/venue-calendar.es.js +2 -2
- package/dist/venue-calendar.iife.js +49 -47
- package/dist/venue-calendar.iife.js.map +1 -1
- package/dist/venue-calendar.umd.js +49 -47
- package/dist/venue-calendar.umd.js.map +1 -1
- package/package.json +125 -112
- package/src/lib/theme.js +209 -209
- package/dist/Checkout.legacy-CyiqW4Im.js.map +0 -1
- package/dist/SeriesPage.legacy-D-ZoVrPE.js.map +0 -1
- package/dist/Success.legacy-D9zlNOn7.js.map +0 -1
- package/dist/VenueCalendar-DX2HF1GE.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Checkout.legacy-CyiqW4Im.js","sources":["../src/components/Events/Checkout/PersonalDetails.svelte","../src/components/Events/Checkout/TermsAndConditions.svelte","../src/components/Events/Checkout/PaymentSection.svelte","../src/components/Views/Checkout.legacy.svelte"],"sourcesContent":["<script>\r\n import { Input, Checkbox } from '@getmicdrop/svelte-components';\r\n\r\n let {\r\n firstName = $bindable(''),\r\n lastName = $bindable(''),\r\n email = $bindable(''),\r\n phoneNumber = $bindable(''),\r\n keepMeUpdated = $bindable(false),\r\n termsAgreed = $bindable(false),\r\n ticketsInfo = [],\r\n ticketType = 0,\r\n updateTicketDetails,\r\n updateTicketField,\r\n firstNameError = $bindable(''),\r\n lastNameError = $bindable(''),\r\n emailError = $bindable(''),\r\n phoneError = $bindable(''),\r\n termsError = $bindable(''),\r\n firstNameTouched = $bindable(false),\r\n lastNameTouched = $bindable(false),\r\n emailTouched = $bindable(false),\r\n phoneTouched = $bindable(false),\r\n labels = {},\r\n } = $props();\r\n</script>\r\n\r\n<form aria-label={labels.checkoutFormLabel || \"Checkout form\"}>\r\n <section class=\"p-4 md:p-5\" aria-labelledby=\"billing-section-title\">\r\n <div class=\"space-y-4\">\r\n <h2 id=\"billing-section-title\" class=\"section-title text-lg font-semibold text-text-primary mb-4\">\r\n {labels.billingInformation || 'Billing information'}\r\n </h2>\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <Input\r\n label={labels.firstName || \"First name\"}\r\n size=\"full\"\r\n type=\"text\"\r\n required\r\n autocomplete=\"given-name\"\r\n bind:value={firstName}\r\n bind:displayErrorText={firstNameError}\r\n bind:touched={firstNameTouched}\r\n />\r\n <Input\r\n label={labels.lastName || \"Last name\"}\r\n size=\"full\"\r\n type=\"text\"\r\n required\r\n autocomplete=\"family-name\"\r\n bind:value={lastName}\r\n bind:displayErrorText={lastNameError}\r\n bind:touched={lastNameTouched}\r\n />\r\n <div class=\"col-span-2\">\r\n <Input\r\n label={labels.emailAddress || \"Email address\"}\r\n size=\"full\"\r\n type=\"email\"\r\n required\r\n autocomplete=\"email\"\r\n bind:value={email}\r\n bind:displayErrorText={emailError}\r\n bind:touched={emailTouched}\r\n />\r\n </div>\r\n <div class=\"col-span-2\">\r\n <Input\r\n label={labels.phoneNumber || \"Phone number\"}\r\n size=\"full\"\r\n type=\"phoneNumber\"\r\n autocomplete=\"tel\"\r\n bind:value={phoneNumber}\r\n bind:displayErrorText={phoneError}\r\n bind:touched={phoneTouched}\r\n />\r\n </div>\r\n </div>\r\n <Checkbox bind:checked={keepMeUpdated} class=\"mailing-list-checkbox\" aria-describedby=\"mailing-list-description\">\r\n {labels.keepMeUpdated || 'Keep me updated on more events and news'}\r\n </Checkbox>\r\n <span id=\"mailing-list-description\" class=\"sr-only\">{labels.subscribeToUpdates || 'Subscribe to event updates and news'}</span>\r\n </div>\r\n </section>\r\n\r\n <!-- Ticket-wise Attendee Details (Only if ticketType === 1) -->\r\n {#if ticketType === 1}\r\n {#each ticketsInfo as ticket, index (ticket.ticketId + '-' + index)}\r\n <section class=\"p-4 md:p-5\" aria-labelledby=\"ticket-section-{index}\">\r\n <div class=\"grid grid-row-3 gap-3\">\r\n <h2 id=\"ticket-section-{index}\" class=\"text-base font-medium leading-6 text-text-primary mb-4\">\r\n {(labels.ticketN || 'Ticket {index} - {name}').replace('{index}', String(index + 1)).replace('{name}', ticket.ticketName)}\r\n </h2>\r\n <Checkbox\r\n checked={ticket.sameAsPersonal}\r\n onchange={e => updateTicketDetails(index, e.detail.checked)}\r\n class=\"same-as-personal-checkbox\"\r\n >\r\n {labels.sameAsPersonalDetails || 'Same as personal details'}\r\n </Checkbox>\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <Input\r\n label={labels.firstName || \"First name\"}\r\n size=\"full\"\r\n type=\"text\"\r\n value={ticket.firstName}\r\n oninput={e => updateTicketField(index, 'firstName', e.target.value)}\r\n displayErrorText={ticket.touched && ticket.errors.firstName ? ticket.errors.firstName : ''}\r\n touched={ticket.touched}\r\n />\r\n <Input\r\n label={labels.lastName || \"Last name\"}\r\n size=\"full\"\r\n type=\"text\"\r\n value={ticket.lastName}\r\n oninput={e => updateTicketField(index, 'lastName', e.target.value)}\r\n displayErrorText={ticket.touched && ticket.errors.lastName ? ticket.errors.lastName : ''}\r\n touched={ticket.touched}\r\n />\r\n <div class=\"col-span-2\">\r\n <Input\r\n label={labels.emailAddress || \"Email address\"}\r\n size=\"full\"\r\n type=\"email\"\r\n value={ticket.email}\r\n oninput={e => updateTicketField(index, 'email', e.target.value)}\r\n displayErrorText={ticket.touched && ticket.errors.email ? ticket.errors.email : ''}\r\n touched={ticket.touched}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n {/each}\r\n {/if}\r\n</form>\r\n\r\n<style>\r\n /* Checkbox label styling for shared component */\r\n :global(.mailing-list-checkbox .checkbox__label),\r\n :global(.same-as-personal-checkbox .checkbox__label) {\r\n color: hsl(var(--text-tertiary)); /* gray-500 */\r\n font-weight: 400; /* normal */\r\n font-size: 0.875rem; /* text-sm */\r\n line-height: 1.25rem;\r\n }\r\n :global(.dark .mailing-list-checkbox .checkbox__label),\r\n :global(.dark .same-as-personal-checkbox .checkbox__label) {\r\n color: hsl(var(--text-head)); /* gray-400 */\r\n }\r\n\r\n /* Screen reader only text */\r\n .sr-only {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border: 0;\r\n }\r\n</style>\r\n","<script>\r\n import { Checkbox } from '@getmicdrop/svelte-components';\r\n\r\n let {\r\n InputValue = $bindable(false),\r\n terms = [],\r\n showScrollbar = false,\r\n scrollContainer,\r\n handleScroll = () => {},\r\n checkScrollable = () => {},\r\n termsError = '',\r\n labels = {},\r\n } = $props();\r\n</script>\r\n\r\n<section class=\"space-y-4\" aria-labelledby=\"terms-section-title\">\r\n <h2 id=\"terms-section-title\" class=\"heading-md text-color-primary\">\r\n {labels.termsAndConditions || 'Terms and conditions'}\r\n </h2>\r\n\r\n <Checkbox\r\n bind:checked={InputValue}\r\n class=\"terms-checkbox\"\r\n aria-required=\"true\"\r\n aria-describedby={termsError ? 'terms-error' : undefined}\r\n >\r\n {labels.agreeToTerms || 'I agree to the'} <a href=\"https://get-micdrop.com/tos\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-brand-primary underline hover:opacity-80\">{labels.termsAndConditionsLink || 'terms and conditions'}<span class=\"sr-only\"> (opens in new tab)</span></a>\r\n </Checkbox>\r\n\r\n {#if termsError}\r\n <p id=\"terms-error\" class=\"body-sm mt-1 text-error\" role=\"alert\" aria-live=\"assertive\">{termsError}</p>\r\n {/if}\r\n</section>\r\n\r\n<style>\r\n :global(.terms-checkbox .checkbox__label) {\r\n color: hsl(var(--text-secondary)); /* gray-600 */\r\n }\r\n :global(.dark .terms-checkbox .checkbox__label) {\r\n color: hsl(var(--text-head)); /* gray-300 */\r\n }\r\n\r\n /* Screen reader only text */\r\n .sr-only {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border: 0;\r\n }\r\n</style>\r\n","<script>\r\n import { onMount } from 'svelte';\r\n import { slide } from 'svelte/transition';\r\n import { browser } from '$app/environment';\r\n import { useStripeTheme } from '@getmicdrop/svelte-components/stripe';\r\n import { GOOGLE_PAY } from '$lib/constants/colors.ts';\r\n\r\n let {\r\n selectedPayment = $bindable(), // Start with nothing selected\r\n stripe,\r\n paymentIntent,\r\n error = '',\r\n processing = false,\r\n executePurchase = () => {},\r\n elements = $bindable(),\r\n labels = {},\r\n } = $props();\r\n\r\n // Dynamic imports for Stripe components\r\n let StripeElementsComp = $state(null);\r\n let PaymentElementComp = $state(null);\r\n\r\n // Reactive Stripe theme - automatically updates on dark mode changes\r\n const stripeTheme = useStripeTheme({\r\n containerSelector: '.light, .dark, .micdrop, [data-theme]',\r\n });\r\n\r\n onMount(async () => {\r\n try {\r\n const mod = await import('svelte-stripe');\r\n StripeElementsComp = mod.Elements;\r\n PaymentElementComp = mod.PaymentElement;\r\n } catch (err) {\r\n console.error('Failed to load Stripe components:', err);\r\n }\r\n });\r\n\r\n function selectPayment(method) {\r\n selectedPayment = method;\r\n }\r\n</script>\r\n\r\n<section class=\"pay-with-section pt-2\" aria-labelledby=\"payment-section-title\">\r\n <h2 id=\"payment-section-title\" class=\"section-title text-lg font-semibold text-text-primary mb-4\">{labels.payWith || 'Pay with'}</h2>\r\n\r\n <div class=\"payment-options flex flex-col gap-3\" role=\"radiogroup\" aria-label={labels.paymentMethodSelection || \"Payment method selection\"}>\r\n <!-- Credit or Debit Card -->\r\n <div class=\"payment-option-wrapper flex flex-col\">\r\n <button\r\n type=\"button\"\r\n class=\"payment-option\"\r\n class:selected={selectedPayment === 'card'}\r\n onclick={() => selectPayment('card')}\r\n role=\"radio\"\r\n aria-checked={selectedPayment === 'card'}\r\n aria-label={labels.payWithCard || \"Pay with credit or debit card\"}\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <svg class=\"payment-icon w-6 h-6 shrink-0 text-text-primary\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n <rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\"/>\r\n <line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\"/>\r\n </svg>\r\n <span class=\"payment-label\">{labels.creditOrDebitCard || 'Credit or debit card'}</span>\r\n <img src=\"/stripe-logo.png\" alt=\"\" class=\"stripe-logo h-9 w-auto ml-auto opacity-60\" aria-hidden=\"true\" />\r\n </div>\r\n </button>\r\n\r\n {#if selectedPayment === 'card'}\r\n <div class=\"card-form\" transition:slide={{ duration: 200 }} role=\"region\" aria-label={labels.cardPaymentForm || \"Card payment form\"}>\r\n {#if browser && stripe && paymentIntent}\r\n {#if StripeElementsComp && PaymentElementComp}\r\n <StripeElementsComp\r\n appearance={{ theme: stripeTheme.current }}\r\n {stripe}\r\n clientSecret={paymentIntent}\r\n bind:elements\r\n >\r\n <PaymentElementComp />\r\n </StripeElementsComp>\r\n {:else}\r\n <p class=\"text-sm text-muted-foreground py-2\" role=\"status\" aria-live=\"polite\">Loading secure payment form...</p>\r\n {/if}\r\n {:else}\r\n <p class=\"text-sm text-muted-foreground py-2\" role=\"status\" aria-live=\"polite\">Loading secure payment form...</p>\r\n {/if}\r\n\r\n {#if error}\r\n <p class=\"error-text text-sm text-accent-danger mt-2\" role=\"alert\" aria-live=\"assertive\">{error}</p>\r\n {/if}\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n <!-- Apple Pay -->\r\n <button\r\n type=\"button\"\r\n class=\"payment-option standalone rounded-lg\"\r\n class:selected={selectedPayment === 'apple'}\r\n onclick={() => selectPayment('apple')}\r\n role=\"radio\"\r\n aria-checked={selectedPayment === 'apple'}\r\n aria-label={labels.payWithApplePay || \"Pay with Apple Pay\"}\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <svg class=\"apple-icon w-6 h-6 shrink-0 text-text-primary\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path d=\"M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z\"/>\r\n </svg>\r\n <span class=\"payment-label\">{labels.applePay || 'Apple Pay'}</span>\r\n </div>\r\n </button>\r\n\r\n <!-- Google Pay -->\r\n <button\r\n type=\"button\"\r\n class=\"payment-option standalone rounded-lg\"\r\n class:selected={selectedPayment === 'google'}\r\n onclick={() => selectPayment('google')}\r\n role=\"radio\"\r\n aria-checked={selectedPayment === 'google'}\r\n aria-label={labels.payWithGooglePay || \"Pay with Google Pay\"}\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <svg class=\"google-icon w-6 h-6 shrink-0\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n <path fill={GOOGLE_PAY.blue} d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"/>\r\n <path fill={GOOGLE_PAY.green} d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"/>\r\n <path fill={GOOGLE_PAY.yellow} d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"/>\r\n <path fill={GOOGLE_PAY.red} d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"/>\r\n </svg>\r\n <span class=\"payment-label\">{labels.googlePay || 'Google Pay'}</span>\r\n </div>\r\n </button>\r\n\r\n </div>\r\n</section>\r\n\r\n<style>\r\n .payment-option {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n padding: 1rem;\r\n border-radius: 0.5rem;\r\n cursor: pointer;\r\n text-align: left;\r\n background-color: hsl(var(--bg-primary));\r\n border: 1px solid hsl(var(--border));\r\n transition: all 0.15s ease;\r\n }\r\n\r\n .payment-option.selected {\r\n z-index: 10;\r\n position: relative;\r\n border-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border-radius: 8px 8px 0 0;\r\n\r\n &:where(.dark, .dark *) {\r\n background-color: hsl(var(--bg-primary));\r\n }\r\n }\r\n\r\n .payment-option:not(.selected):hover {\r\n background-color: hsl(var(--bg-secondary));\r\n\r\n &:where(.dark, .dark *) {\r\n background-color: hsl(var(--bg-primary));\r\n }\r\n }\r\n\r\n .payment-label {\r\n font-size: 1rem;\r\n line-height: 1.5rem;\r\n font-weight: 400;\r\n color: hsl(var(--text-primary));\r\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;\r\n }\r\n\r\n /* Card form styling */\r\n .card-form {\r\n padding: 1rem;\r\n background-color: hsl(var(--bg-primary));\r\n border: 1px solid hsl(var(--brand-primary, 224 76% 48%));\r\n border-top: 0;\r\n border-radius: 0 0 8px 8px;\r\n }\r\n</style>\r\n","<script>\r\n import Cookies from 'js-cookie';\r\n import { onMount } from 'svelte';\r\n import { goto } from '$app/navigation';\r\n import { Close, WarningFilled, ErrorFilled, Renew } from 'carbon-icons-svelte';\r\n import { transformEvent, loadCheckoutStateFromCookies, getVenueDetails, createPaymentIntent, validatePaymentIntent } from '$lib/utils/utils.js';\r\n import { completeGiftCardPayment } from '$lib/utils/api.js';\r\n import OrderSummarySkeleton from \"../Events/Tickets/OrderSummarySkeleton.svelte\";\r\n import PersonalDetails from \"../Events/Checkout/PersonalDetails.svelte\";\r\n import TermsAndConditions from \"../Events/Checkout/TermsAndConditions.svelte\";\r\n import PaymentSection from \"../Events/Checkout/PaymentSection.svelte\";\r\n import GiftCardInput from \"../Events/Checkout/GiftCardInput.svelte\";\r\n import { OrderSummary, Button } from '@getmicdrop/svelte-components';\r\n import { loadStripe } from '@stripe/stripe-js';\r\n import { ACCENT } from '$lib/constants/colors.ts';\r\n\r\n let {\r\n data,\r\n availableTickets = [],\r\n value = '',\r\n venueId = '',\r\n organizationId = '',\r\n onNavigateToSuccess,\r\n initialError = undefined,\r\n labels = {},\r\n } = $props();\r\n\r\n const { id, orgSlug, slug, event: rawEvent } = data || {};\r\n let event = $derived(\r\n rawEvent\r\n ? transformEvent(rawEvent)\r\n : data && (data.id || id)\r\n ? {\r\n id: data.id || id,\r\n eventID: data.id || id,\r\n venueID: data.venueID ?? data.venueId ?? null,\r\n venueId: data.venueId ?? data.venueID ?? null,\r\n eventTicketingType: 0,\r\n ticketType: 0,\r\n availableTickets: [],\r\n }\r\n : null\r\n );\r\n \r\n let venueFeesReady = $state(false);\r\n\r\n let quantities = $state({});\r\n let promocode = $state('');\r\n let promoDiscountAmount = $state(0);\r\n let tickets = $state([]);\r\n\r\n let ticketsInfo = $state([]);\r\n\r\n let firstNameTouched = $state(false);\r\n let lastNameTouched = $state(false);\r\n let emailTouched = $state(false);\r\n let confirmEmailTouched = $state(false);\r\n\r\n let InputValue = $state(false);\r\n let selectedPayment = $state('card');\r\n let firstName = $state('');\r\n let lastName = $state('');\r\n let email = $state('');\r\n let confirmEmail = $state('');\r\n let phoneNumber = $state('');\r\n let keepMeUpdated = $state(false);\r\n let scrollContainer = $state();\r\n let showScrollbar = $state(false);\r\n let heading = $derived(' ' + (labels.checkout || 'Checkout'));\r\n let timerDuration = $state(15 * 60);\r\n let Timing = $state(`${labels.timeLeft || 'Time left'} ${formatTime(15 * 60)}`);\r\n let feePerTicket = 4.48;\r\n\r\n // Session extension popup state\r\n let showExtendSessionPopup = $state(false);\r\n let sessionExtensionOffered = false;\r\n const SESSION_WARNING_THRESHOLD = 2 * 60; // 2 minutes\r\n const SESSION_EXTENSION_AMOUNT = 5 * 60; // 5 minutes extension\r\n \r\n let inputValue = value;\r\n \r\n const terms = [\r\n 'All ticket sales are final and non-refundable unless the event is canceled or rescheduled by the organizer.',\r\n 'Tickets are valid only for the event, date, time, and venue specified. Unauthorized resale of tickets is prohibited.',\r\n 'The event organizer reserves the right to refuse entry or remove any individual from the venue without refund.',\r\n 'Attendees must comply with all venue rules and regulations, including any age restrictions or dress codes.',\r\n 'Photography and recording policies may vary; please check the event details for specific guidelines.',\r\n ];\r\n \r\n let error = $state(null);\r\n\r\n let isMobile = $state(false);\r\n let containerRef = $state();\r\n let stickyRef = $state();\r\n let isSticky = $state(false);\r\n let stickyTop = $state(0);\r\n let sidebarLeft = $state(0);\r\n let cartId = $state('');\r\n let isScrollable = $state(false);\r\n\r\n // Gift card state\r\n let giftCardApplied = $state(null); // { code, giftCardAmount, giftCardBalance, paymentType, stripeAmount, requiresStripe }\r\n \r\n let elements = $state();\r\n\r\n let stripe = $state(null);\r\n let calculatedTax = $state(0);\r\n let calculatedServiceFee = $state(0);\r\n let calculatedTotal = $state(0);\r\n let processing = $state(false);\r\n let paymentIntent = $state('');\r\n let isCompleteOrder = $state(false);\r\n let isInCompleteOrder = $state(false);\r\n\r\n async function initializeStripePayment() {\r\n if (!cartId) {\r\n console.error('Missing cartId!');\r\n return;\r\n }\r\n\r\n const filteredQuantities = Object.fromEntries(\r\n Object.entries(quantities).filter(([_, val]) => val > 0)\r\n );\r\n\r\n try {\r\n const paymentData = await createPaymentIntent(cartId, filteredQuantities);\r\n\r\n if (paymentData && paymentData.client_secret) {\r\n stripe = await loadStripe(\r\n 'pk_test_51RJLygPlXDynGkUGKI0vaVT0DXCDdf2wLp3BVNGtdulddY8jG5qBlDUuQuArbTW1dPh19wfZngGeABvH35XIjjMz00NwnD7ydB'\r\n );\r\n \r\n if (stripe) {\r\n paymentIntent = paymentData.client_secret;\r\n \r\n elements = stripe.elements({\r\n appearance: {\r\n theme: 'stripe',\r\n variables: {\r\n colorDanger: ACCENT.red[600],\r\n fontSizeBase: '16px',\r\n },\r\n },\r\n clientSecret: paymentData.client_secret,\r\n });\r\n\r\n calculatedTax = (paymentData.tax_amount_exclusive || 0) / 100;\r\n calculatedServiceFee = (paymentData.service_fee || 0) / 100;\r\n calculatedTotal = (paymentData.amount_total || 0) / 100;\r\n }\r\n } else {\r\n stripeError = labels.failedToCreatePaymentIntent || 'Failed to create payment intent. Please try again.';\r\n }\r\n } catch (err) {\r\n console.error('Failed to initialize Stripe payment:', err);\r\n stripeError = err.message || labels.failedToInitPayment || 'Failed to initialize payment. Please check your connection and try again.';\r\n }\r\n }\r\n\r\n let venueServiceCharge = $state({\r\n serviceFeeCents: 0,\r\n serviceFeePercentage: 0,\r\n serviceFeeChargeType: 'both',\r\n maxServiceFeeCents: 0,\r\n taxPercentage: 0,\r\n });\r\n\r\n // Gift card event handlers\r\n function handleGiftCardApplied(appliedCard) {\r\n giftCardApplied = appliedCard;\r\n // If gift card covers full amount, no need for Stripe\r\n if (!appliedCard.requiresStripe) {\r\n // Clear Stripe elements if they exist\r\n elements = null;\r\n stripe = null;\r\n }\r\n }\r\n\r\n function handleGiftCardRemoved() {\r\n giftCardApplied = null;\r\n // Re-initialize Stripe payment if needed\r\n if (cartId && Object.keys(quantities).length > 0) {\r\n initializeStripePayment();\r\n }\r\n }\r\n\r\n function formatTime(seconds) {\r\n const minutes = Math.floor(seconds / 60);\r\n const remainingSeconds = seconds % 60;\r\n return `${String(minutes).padStart(2, '0')}:${String(remainingSeconds).padStart(2, '0')}`;\r\n }\r\n\r\n function extendSession() {\r\n timerDuration += SESSION_EXTENSION_AMOUNT;\r\n Timing = `${labels.timeLeft || 'Time left'} ${formatTime(timerDuration)}`;\r\n showExtendSessionPopup = false;\r\n // Allow extending again if time runs low again\r\n sessionExtensionOffered = false;\r\n }\r\n\r\n function dismissExtendPopup() {\r\n showExtendSessionPopup = false;\r\n // Don't offer again for this session\r\n sessionExtensionOffered = true;\r\n }\r\n\r\n function checkScrollable() {\r\n if (scrollContainer) {\r\n isScrollable =\r\n scrollContainer.scrollHeight > scrollContainer.clientHeight;\r\n showScrollbar = isScrollable;\r\n }\r\n }\r\n \r\n let firstNameError = $state('');\r\n let lastNameError = $state('');\r\n let emailError = $state('');\r\n let confirmEmailError = $state('');\r\n let termsError = $state('');\r\n let attendeeError = $state('');\r\n let stripeError = $state('');\r\n\r\n // Enhanced error state for better UX\r\n let paymentErrorType = $state(''); // 'card_declined', 'network', 'validation', 'general'\r\n let paymentErrorDetails = $state({\r\n title: '',\r\n message: '',\r\n suggestion: '',\r\n retryable: true\r\n });\r\n\r\n // Map Stripe error codes to user-friendly messages\r\n function getPaymentErrorDetails(error) {\r\n const errorCode = error?.code || error?.decline_code || '';\r\n const errorType = error?.type || '';\r\n const errorMessage = error?.message || '';\r\n\r\n // Card declined errors\r\n if (errorCode === 'card_declined' || errorType === 'card_error') {\r\n const declineCode = error?.decline_code || '';\r\n\r\n if (declineCode === 'insufficient_funds') {\r\n return {\r\n type: 'card_declined',\r\n title: 'Insufficient funds',\r\n message: 'Your card has insufficient funds to complete this purchase.',\r\n suggestion: 'Please try a different payment method or contact your bank.',\r\n retryable: true\r\n };\r\n }\r\n\r\n if (declineCode === 'lost_card' || declineCode === 'stolen_card') {\r\n return {\r\n type: 'card_declined',\r\n title: 'Card cannot be used',\r\n message: 'This card cannot be used for this transaction.',\r\n suggestion: 'Please use a different payment method.',\r\n retryable: true\r\n };\r\n }\r\n\r\n if (declineCode === 'expired_card') {\r\n return {\r\n type: 'card_declined',\r\n title: 'Card expired',\r\n message: 'Your card has expired.',\r\n suggestion: 'Please use a different card or update your card details.',\r\n retryable: true\r\n };\r\n }\r\n\r\n return {\r\n type: 'card_declined',\r\n title: 'Card declined',\r\n message: 'Your card was declined by your bank.',\r\n suggestion: 'Please try a different card or contact your bank for more information.',\r\n retryable: true\r\n };\r\n }\r\n\r\n // Network/connection errors\r\n if (errorType === 'api_connection_error' || errorMessage.includes('network') || errorMessage.includes('connection')) {\r\n return {\r\n type: 'network',\r\n title: 'Connection error',\r\n message: 'We couldn\\'t connect to the payment server.',\r\n suggestion: 'Please check your internet connection and try again.',\r\n retryable: true\r\n };\r\n }\r\n\r\n // Rate limiting\r\n if (errorCode === 'rate_limit') {\r\n return {\r\n type: 'rate_limit',\r\n title: 'Too many attempts',\r\n message: 'Too many payment attempts. Please wait a moment.',\r\n suggestion: 'Wait 30 seconds before trying again.',\r\n retryable: true\r\n };\r\n }\r\n\r\n // Invalid card details\r\n if (errorCode === 'incorrect_number' || errorCode === 'invalid_number') {\r\n return {\r\n type: 'validation',\r\n title: 'Invalid card number',\r\n message: 'The card number you entered is invalid.',\r\n suggestion: 'Please check your card number and try again.',\r\n retryable: true\r\n };\r\n }\r\n\r\n if (errorCode === 'incorrect_cvc' || errorCode === 'invalid_cvc') {\r\n return {\r\n type: 'validation',\r\n title: 'Invalid security code',\r\n message: 'The security code (CVC) is incorrect.',\r\n suggestion: 'Please check the 3-digit code on the back of your card.',\r\n retryable: true\r\n };\r\n }\r\n\r\n if (errorCode === 'invalid_expiry_month' || errorCode === 'invalid_expiry_year') {\r\n return {\r\n type: 'validation',\r\n title: 'Invalid expiration date',\r\n message: 'The expiration date is invalid.',\r\n suggestion: 'Please check your card\\'s expiration date.',\r\n retryable: true\r\n };\r\n }\r\n\r\n // Default error\r\n return {\r\n type: 'general',\r\n title: 'Payment failed',\r\n message: errorMessage || 'Something went wrong with your payment.',\r\n suggestion: 'Please try again or use a different payment method.',\r\n retryable: true\r\n };\r\n }\r\n\r\n function clearPaymentError() {\r\n stripeError = '';\r\n paymentErrorType = '';\r\n paymentErrorDetails = {\r\n title: '',\r\n message: '',\r\n suggestion: '',\r\n retryable: true\r\n };\r\n }\r\n\r\n function setPaymentError(error) {\r\n const details = getPaymentErrorDetails(error);\r\n paymentErrorType = details.type;\r\n paymentErrorDetails = details;\r\n stripeError = details.message;\r\n }\r\n \r\n function validateBeforeSubmit() {\r\n let hasError = false;\r\n \r\n firstNameTouched =\r\n lastNameTouched =\r\n emailTouched =\r\n confirmEmailTouched =\r\n true;\r\n firstNameError =\r\n lastNameError =\r\n emailError =\r\n confirmEmailError =\r\n termsError =\r\n attendeeError =\r\n '';\r\n \r\n if (!firstName.trim()) {\r\n firstNameError = 'First name is required.';\r\n hasError = true;\r\n }\r\n \r\n if (!lastName.trim()) {\r\n lastNameError = 'Last name is required.';\r\n hasError = true;\r\n }\r\n \r\n if (!email.trim()) {\r\n emailError = 'Email is required.';\r\n hasError = true;\r\n }\r\n \r\n if (!confirmEmail.trim()) {\r\n confirmEmailError = 'Confirm email is required.';\r\n hasError = true;\r\n } else if (\r\n email.trim() &&\r\n confirmEmail.trim() &&\r\n email.trim() !== confirmEmail.trim()\r\n ) {\r\n confirmEmailError = 'Email addresses do not match.';\r\n hasError = true;\r\n }\r\n \r\n if (!isAgreed) {\r\n termsError = 'You must agree to the terms and conditions above.';\r\n hasError = true;\r\n }\r\n \r\n if (event.ticketType === 1) {\r\n let ticketErrorCount = 0;\r\n \r\n ticketsInfo = ticketsInfo.map((t, index) => {\r\n const errors = {\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n };\r\n \r\n if (!t.sameAsPersonal) {\r\n if (!t.firstName.trim()) {\r\n errors.firstName = 'First name is required.';\r\n ticketErrorCount++;\r\n }\r\n if (!t.lastName.trim()) {\r\n errors.lastName = 'Last name is required.';\r\n ticketErrorCount++;\r\n }\r\n if (!t.email.trim()) {\r\n errors.email = 'Email is required.';\r\n ticketErrorCount++;\r\n }\r\n }\r\n \r\n return {\r\n ...t,\r\n errors,\r\n qtouched: true,\r\n };\r\n });\r\n \r\n if (ticketErrorCount > 0) {\r\n attendeeError = 'Please fill in all attendee details.';\r\n hasError = true;\r\n }\r\n }\r\n \r\n return !hasError;\r\n }\r\n \r\n async function executePurchase(elementsParam) {\r\n if (processing) return;\r\n\r\n // Clear any previous errors before attempting\r\n clearPaymentError();\r\n\r\n const elementsToUse = elementsParam || elements;\r\n\r\n if (!elementsToUse) {\r\n setPaymentError({\r\n type: 'validation',\r\n message: labels.paymentFormNotReady || 'Payment form is not ready. Please wait a moment and try again.'\r\n });\r\n return;\r\n }\r\n\r\n if (!stripe) {\r\n setPaymentError({\r\n type: 'general',\r\n message: labels.paymentSystemNotInitialized || 'Payment system is not initialized. Please refresh the page.'\r\n });\r\n return;\r\n }\r\n\r\n processing = true;\r\n\r\n const isValid = validateBeforeSubmit();\r\n\r\n if (!isValid) {\r\n processing = false;\r\n return;\r\n }\r\n\r\n try {\r\n const { error: validationError } = await elementsToUse.submit();\r\n if (validationError) {\r\n setPaymentError(validationError);\r\n processing = false;\r\n return;\r\n }\r\n\r\n const result = await stripe.confirmPayment({\r\n elements: elementsToUse,\r\n redirect: 'if_required',\r\n });\r\n\r\n if (result.error) {\r\n setPaymentError(result.error);\r\n processing = false;\r\n return;\r\n }\r\n\r\n const paymentPayload = {\r\n id: cartId,\r\n paymentIntentId: result.paymentIntent.id,\r\n tickets: quantities,\r\n firstName,\r\n lastName,\r\n email: confirmEmail,\r\n phoneNumber: phoneNumber || null,\r\n paymentMethod: 'credit-card',\r\n mailingList: keepMeUpdated,\r\n saleType: 'online',\r\n };\r\n\r\n const response = await validatePaymentIntent(cartId, paymentPayload);\r\n\r\n if (response?.status === 'Payment succeeded') {\r\n isCompleteOrder = true;\r\n\r\n try {\r\n const successData = {\r\n orderId: cartId,\r\n eventId: event?.id || event?.eventID || null,\r\n event: event || null,\r\n venueId: venueId || event?.venueId || null,\r\n organizationId: organizationId || event?.organizationId || null\r\n };\r\n dispatch('success', successData);\r\n\r\n if (onNavigateToSuccess) {\r\n onNavigateToSuccess(successData);\r\n }\r\n } catch(e) {\r\n console.warn('Failed to dispatch success event', e);\r\n }\r\n } else if (\r\n response?.status === 'Payment amount does not match the total price'\r\n ) {\r\n isInCompleteOrder = true;\r\n setPaymentError({\r\n type: 'general',\r\n message: labels.paymentAmountMismatch || 'Payment amount mismatch. Please refresh and try again.'\r\n });\r\n }\r\n } catch (err) {\r\n console.error('Payment execution error:', err);\r\n setPaymentError(err);\r\n } finally {\r\n processing = false;\r\n }\r\n }\r\n\r\n async function executeGiftCardOnlyPurchase() {\r\n if (processing) return;\r\n\r\n processing = true;\r\n clearPaymentError();\r\n\r\n const isValid = validateBeforeSubmit();\r\n if (!isValid) {\r\n processing = false;\r\n return;\r\n }\r\n\r\n try {\r\n const result = await completeGiftCardPayment(cartId, {\r\n firstName,\r\n lastName,\r\n email: confirmEmail,\r\n phoneNumber: phoneNumber || null,\r\n mailingList: keepMeUpdated,\r\n });\r\n\r\n if (result?.success) {\r\n isCompleteOrder = true;\r\n\r\n const successData = {\r\n orderId: result.orderId || cartId,\r\n eventId: event?.id || event?.eventID || null,\r\n event: event || null,\r\n venueId: venueId || event?.venueId || null,\r\n organizationId: organizationId || event?.organizationId || null,\r\n paymentType: 'gift_card_only',\r\n };\r\n\r\n if (onNavigateToSuccess) {\r\n onNavigateToSuccess(successData);\r\n }\r\n } else {\r\n setPaymentError({\r\n type: 'general',\r\n message: result?.error || labels.failedToCompleteOrder || 'Failed to complete order. Please try again.',\r\n });\r\n }\r\n } catch (err) {\r\n console.error('Gift card payment error:', err);\r\n setPaymentError(err);\r\n } finally {\r\n processing = false;\r\n }\r\n }\r\n\r\n function goBack() {\r\n const params = new URLSearchParams(window.location.search);\r\n params.set(\"subroute\", \"cart\");\r\n const url = `/?${params.toString()}`;\r\n goto(url, { noScroll: false });\r\n }\r\n \r\n function updateScreenSize() {\r\n isMobile = window.innerWidth < 640;\r\n }\r\n \r\n function handleScroll() {\r\n if (isMobile) {\r\n isSticky = false;\r\n return;\r\n }\r\n \r\n const rect = stickyRef?.getBoundingClientRect();\r\n if (!rect) return;\r\n \r\n isSticky = rect.top <= 20;\r\n \r\n if (isSticky && containerRef) {\r\n const containerBounding = containerRef.getBoundingClientRect();\r\n sidebarLeft =\r\n containerBounding.left + containerRef.clientWidth - 340 - 40;\r\n }\r\n }\r\n \r\n function updateTicketField(index, field, value) {\r\n ticketsInfo = ticketsInfo.map((ticket, i) => {\r\n if (i === index) {\r\n if (field === 'touched') {\r\n return { ...ticket, touched: true };\r\n }\r\n const updatedTicket = {\r\n ...ticket,\r\n [field]: value,\r\n sameAsPersonal: false,\r\n errors: {\r\n ...ticket.errors,\r\n [field]: value.trim()\r\n ? ''\r\n : `${field[0].toUpperCase() + field.slice(1)} is required.`,\r\n },\r\n };\r\n \r\n return updatedTicket;\r\n }\r\n return ticket;\r\n });\r\n }\r\n \r\n function updateTicketDetails(index, checked) {\r\n ticketsInfo = ticketsInfo.map((ticket, i) => {\r\n if (i === index) {\r\n return {\r\n ...ticket,\r\n sameAsPersonal: checked,\r\n firstName: checked ? firstName : ticket.firstName,\r\n lastName: checked ? lastName : ticket.lastName,\r\n email: checked ? email : ticket.email,\r\n };\r\n }\r\n return ticket;\r\n });\r\n }\r\n \r\n function syncSameAsPersonalAttendees() {\r\n ticketsInfo = ticketsInfo.map(t =>\r\n t.sameAsPersonal ? { ...t, firstName, lastName, email } : t\r\n );\r\n }\r\n\r\n let normalizedEmail = $derived(email?.trim().toLowerCase());\r\n let normalizedConfirmEmail = $derived(confirmEmail?.trim().toLowerCase());\r\n\r\n let emailMatchError = $derived(\r\n normalizedEmail !== normalizedConfirmEmail && confirmEmail !== ''\r\n );\r\n\r\n let isAgreed = $derived(InputValue);\r\n\r\n $effect(() => {\r\n email = email?.trim();\r\n confirmEmail = confirmEmail?.trim();\r\n });\r\n\r\n $effect(() => {\r\n inputValue = value;\r\n });\r\n\r\n $effect(() => {\r\n processing = false;\r\n });\r\n\r\n $effect(() => {\r\n paymentIntent = '';\r\n });\r\n\r\n $effect(() => {\r\n if (tickets?.length > 0) {\r\n if (event) {\r\n event.availableTickets = tickets;\r\n }\r\n }\r\n });\r\n\r\n $effect(() => {\r\n isCompleteOrder = false;\r\n isInCompleteOrder = false;\r\n });\r\n \r\n $effect(() => {\r\n if (Object.keys(quantities).length > 0 && tickets.length > 0) {\r\n const info = [];\r\n let idx = 0;\r\n\r\n for (const [ticketId, quantity] of Object.entries(quantities)) {\r\n const ticketMeta = tickets.find(t => String(t.ID) === ticketId);\r\n for (let i = 0; i < quantity; i++) {\r\n info.push({\r\n name: `Ticket ${idx + 1}`,\r\n sameAsPersonal: false,\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n ticketId: ticketMeta?.ID || null,\r\n ticketName: ticketMeta?.name || '',\r\n touched: false,\r\n errors: {\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n },\r\n });\r\n idx++;\r\n }\r\n }\r\n\r\n ticketsInfo = info;\r\n }\r\n });\r\n\r\n $effect(() => {\r\n if (firstName || lastName || email) {\r\n syncSameAsPersonalAttendees();\r\n }\r\n });\r\n \r\n onMount(async () => {\r\n updateScreenSize();\r\n cartId = Cookies.get('checkout-cartid');\r\n \r\n try {\r\n const checkoutState = loadCheckoutStateFromCookies(event?.eventID || event?.id);\r\n quantities = checkoutState.quantities || {};\r\n promocode = checkoutState.promocode || '';\r\n promoDiscountAmount = checkoutState.promoDiscountAmount || 0;\r\n tickets = checkoutState.tickets || [];\r\n } catch (err) {\r\n console.error('Error loading checkout state:', err);\r\n quantities = {};\r\n tickets = [];\r\n }\r\n \r\n if (tickets.length > 0) {\r\n if (event) event.availableTickets = tickets;\r\n availableTickets = tickets;\r\n }\r\n \r\n if (cartId && Object.keys(quantities).length > 0) {\r\n initializeStripePayment();\r\n }\r\n \r\n const interval = setInterval(() => {\r\n if (timerDuration > 0) {\r\n timerDuration -= 1;\r\n Timing = `${labels.timeLeft || 'Time left'} ${formatTime(timerDuration)}`;\r\n\r\n // Show extension popup when time is running low\r\n if (timerDuration <= SESSION_WARNING_THRESHOLD && timerDuration > 0 && !sessionExtensionOffered && !showExtendSessionPopup) {\r\n showExtendSessionPopup = true;\r\n }\r\n } else {\r\n clearInterval(interval);\r\n goto('/', { noScroll: false });\r\n }\r\n }, 1000);\r\n \r\n try {\r\n const venueData = await getVenueDetails(event?.venueID || event?.venueId);\r\n venueServiceCharge = {\r\n serviceFeeCents: venueData?.serviceFeeCents ?? 0,\r\n serviceFeePercentage: venueData?.serviceFeePercentage ?? 0,\r\n serviceFeeChargeType: venueData?.serviceFeeChargeType ?? 'both',\r\n maxServiceFeeCents: venueData?.maxServiceFeeCents ?? 0,\r\n taxPercentage: venueData?.taxPercentage ?? 0,\r\n };\r\n venueFeesReady = true;\r\n } catch (err) {\r\n console.error('Error fetching venue data:', err);\r\n venueServiceCharge = {\r\n serviceFeeCents: 0,\r\n serviceFeePercentage: 0,\r\n serviceFeeChargeType: 'both',\r\n maxServiceFeeCents: 0,\r\n taxPercentage: 0,\r\n };\r\n venueFeesReady = true;\r\n }\r\n \r\n // Apply initial error state for showcase/preview rendering\r\n if (initialError) {\r\n setPaymentError(\r\n typeof initialError === 'object'\r\n ? initialError\r\n : { code: 'card_declined', message: 'Your card was declined. Please try a different payment method.' }\r\n );\r\n }\r\n\r\n window.addEventListener('resize', updateScreenSize);\r\n window.addEventListener('scroll', handleScroll);\r\n\r\n stickyTop = stickyRef?.getBoundingClientRect().top || 0;\r\n\r\n return () => {\r\n clearInterval(interval);\r\n window.removeEventListener('resize', updateScreenSize);\r\n window.removeEventListener('scroll', handleScroll);\r\n };\r\n });\r\n </script>\r\n \r\n <div class=\"px-5 md:px-10 pt-12 bg-card\" bind:this={containerRef}>\r\n <div class=\"w-full flex md:gap-5 flex-wrap\" bind:this={stickyRef}>\r\n <div class=\"flex-1 pb-16 md:pb-0\">\r\n <div class=\"checkout-card rounded-lg md:shadow md:border\">\r\n <header class=\"checkout-header flex justify-between py-5 md:p-5 border-b\" role=\"banner\">\r\n <div class=\"gap-1\">\r\n <h1 class=\"checkout-title text-lg font-semibold leading-relaxed\">\r\n {heading}\r\n </h1>\r\n <p class=\"timer-text pt-1 text-xs font-normal leading-normal\" role=\"timer\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {Timing}\r\n </p>\r\n </div>\r\n <button\r\n onclick={goBack}\r\n class=\"close-btn p-2 rounded-lg transition-colors\"\r\n aria-label={labels.goBackToTicketSelection || \"Go back to cart\"}\r\n >\r\n <Close size={24} class=\"close-icon\" aria-hidden=\"true\" />\r\n </button>\r\n </header>\r\n\r\n <!-- Payment Error Banner -->\r\n {#if paymentErrorType}\r\n <div class=\"error-banner p-4 md:p-5 border-b\" role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"error-banner-content flex items-start gap-3\">\r\n <div class=\"error-icon-wrapper shrink-0\" aria-hidden=\"true\">\r\n {#if paymentErrorType === 'card_declined'}\r\n <ErrorFilled size={24} class=\"error-icon\" />\r\n {:else if paymentErrorType === 'network'}\r\n <WarningFilled size={24} class=\"warning-icon\" />\r\n {:else}\r\n <WarningFilled size={24} class=\"warning-icon\" />\r\n {/if}\r\n </div>\r\n <div class=\"error-details flex-1\">\r\n <h2 class=\"error-title text-sm font-semibold mb-1\">\r\n {paymentErrorDetails.title}\r\n </h2>\r\n <p class=\"error-message text-sm mb-2\">\r\n {paymentErrorDetails.message}\r\n </p>\r\n {#if paymentErrorDetails.suggestion}\r\n <p class=\"error-suggestion text-xs\">\r\n {paymentErrorDetails.suggestion}\r\n </p>\r\n {/if}\r\n </div>\r\n <button\r\n onclick={clearPaymentError}\r\n class=\"error-dismiss p-1 rounded transition-colors\"\r\n aria-label={labels.close || \"Dismiss payment error\"}\r\n >\r\n <Close size={18} aria-hidden=\"true\" />\r\n </button>\r\n </div>\r\n {#if paymentErrorDetails.retryable}\r\n <div class=\"error-actions mt-3 flex gap-2\">\r\n <button\r\n onclick={() => { clearPaymentError(); initializeStripePayment(); }}\r\n class=\"retry-btn flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm font-medium transition-colors\"\r\n aria-label={labels.networkErrorRetry || \"Retry payment\"}\r\n >\r\n <Renew size={16} aria-hidden=\"true\" />\r\n {labels.networkErrorRetry || 'Try again'}\r\n </button>\r\n </div>\r\n {/if}\r\n </div>\r\n {/if}\r\n\r\n <PersonalDetails\r\n bind:firstName\r\n bind:lastName\r\n bind:email\r\n bind:confirmEmail\r\n bind:phoneNumber\r\n bind:keepMeUpdated\r\n bind:ticketsInfo\r\n {emailMatchError}\r\n {updateTicketDetails}\r\n ticketType={event?.eventTicketingType ?? event?.ticketType ?? 0}\r\n {firstNameError}\r\n {lastNameError}\r\n {emailError}\r\n {confirmEmailError}\r\n {attendeeError}\r\n {updateTicketField}\r\n bind:firstNameTouched\r\n bind:lastNameTouched\r\n bind:emailTouched\r\n bind:confirmEmailTouched\r\n />\r\n \r\n <div class=\"py-5 md:p-5\">\r\n <TermsAndConditions\r\n bind:InputValue\r\n {terms}\r\n bind:showScrollbar\r\n bind:scrollContainer\r\n {handleScroll}\r\n {checkScrollable}\r\n {termsError}\r\n />\r\n </div>\r\n\r\n <div class=\"py-5 md:p-5\">\r\n <GiftCardInput\r\n {cartId}\r\n onApplied={handleGiftCardApplied}\r\n onRemoved={handleGiftCardRemoved}\r\n disabled={processing}\r\n />\r\n </div>\r\n\r\n {#if !giftCardApplied || giftCardApplied.requiresStripe}\r\n <div class=\"py-5 md:p-5\">\r\n <PaymentSection\r\n bind:selectedPayment\r\n {stripe}\r\n {paymentIntent}\r\n {processing}\r\n {executePurchase}\r\n bind:elements\r\n error={stripeError}\r\n />\r\n </div>\r\n {:else}\r\n <!-- Zero-payment: Gift card covers full amount -->\r\n <div class=\"py-5 md:p-5\">\r\n <div class=\"gift-card-complete-section p-4 bg-status-success-bg rounded-lg border border-status-success-border\">\r\n <div class=\"flex items-center gap-3 mb-3\">\r\n <div class=\"w-10 h-10 rounded-full bg-status-success-bg flex items-center justify-center\">\r\n <svg class=\"w-5 h-5 text-accent-success\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n </svg>\r\n </div>\r\n <div>\r\n <p class=\"text-sm font-semibold text-status-success-text\">{labels.giftCardNoPaymentRequired || 'No payment required'}</p>\r\n <p class=\"text-xs text-accent-success\">{labels.fullyCoveredByGiftCard || 'Your gift card covers the full order'}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n {/if}\r\n </div>\r\n </div>\r\n \r\n {#if isSticky}\r\n <!-- svelte-ignore element_invalid_self_closing_tag -->\r\n <div class=\"w-full sm:w-80 flex flex-col\" />\r\n {/if}\r\n\r\n <div\r\n class=\"w-full sm:w-80 sm:flex flex-col transition-all {isSticky ? 'fixed top-5' : 'static'}\"\r\n class:is-sticky={isSticky}\r\n style:left={isSticky ? `${sidebarLeft}px` : 'auto'}\r\n >\r\n {#if !venueFeesReady}\r\n <OrderSummarySkeleton />\r\n {:else}\r\n <OrderSummary\r\n btnText={giftCardApplied?.paymentType === 'gift_card_only' ? (labels.giftCardCompleteOrder || 'Complete Order') : (labels.placeOrder || 'Place order')}\r\n eventTickets={availableTickets}\r\n {quantities}\r\n {venueServiceCharge}\r\n {isAgreed}\r\n {feePerTicket}\r\n promoApplied={!!promocode}\r\n promoDiscount={promoDiscountAmount}\r\n loading={processing}\r\n executePurchase={giftCardApplied?.paymentType === 'gift_card_only' ? executeGiftCardOnlyPurchase : executePurchase}\r\n {elements}\r\n {giftCardApplied}\r\n />\r\n {/if}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Session Extension Popup -->\r\n {#if showExtendSessionPopup}\r\n <div\r\n class=\"session-popup-overlay\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby=\"extend-session-title\"\r\n aria-describedby=\"extend-session-description\"\r\n data-testid=\"session-extension-popup\"\r\n >\r\n <div class=\"session-popup\">\r\n <div class=\"session-popup-icon\" aria-hidden=\"true\">\r\n <WarningFilled size={32} class=\"warning-icon-large\" />\r\n </div>\r\n <h2 id=\"extend-session-title\" class=\"session-popup-title\">\r\n {labels.sessionExpiringSoon || 'Session Expiring Soon'}\r\n </h2>\r\n <p id=\"extend-session-description\" class=\"session-popup-message\">\r\n {labels.sessionExpireMessage || 'Your session will expire in'} <span class=\"time-remaining\">{formatTime(timerDuration)}</span>.\r\n {labels.sessionExtendQuestion || 'Would you like to extend your time to complete your purchase?'}\r\n </p>\r\n <div class=\"session-popup-actions\" data-testid=\"session-popup-actions\">\r\n <Button\r\n variant=\"default\"\r\n onclick={extendSession}\r\n data-testid=\"extend-session-btn\"\r\n aria-label={labels.sessionExtendAria || \"Extend session by 5 minutes\"}\r\n fullWidth\r\n >\r\n {labels.sessionExtendButton || 'Extend Time (+5 min)'}\r\n </Button>\r\n <Button\r\n variant=\"alternative\"\r\n onclick={dismissExtendPopup}\r\n data-testid=\"dismiss-session-popup-btn\"\r\n aria-label={labels.sessionDismissAria || \"Dismiss and continue without extending\"}\r\n fullWidth\r\n >\r\n {labels.sessionNoThanks || 'No Thanks'}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n {/if}\r\n\r\n<style>\r\n /* Theme-responsive checkout styles */\r\n .checkout-card {\r\n background-color: hsl(var(--bg-primary));\r\n border-color: hsl(var(--border));\r\n }\r\n\r\n .checkout-header {\r\n border-color: hsl(var(--border));\r\n }\r\n\r\n .checkout-title {\r\n color: hsl(var(--text-primary));\r\n }\r\n\r\n .timer-text {\r\n color: hsl(var(--accent-danger));\r\n }\r\n\r\n .close-btn:hover {\r\n background-color: hsl(var(--bg-tertiary));\r\n }\r\n\r\n .close-icon {\r\n color: hsl(var(--text-secondary));\r\n }\r\n\r\n /* Error Banner Styles */\r\n .error-banner {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.75rem;\r\n border-radius: 0.5rem;\r\n background-color: hsl(var(--accent-danger) / 0.05);\r\n color: hsl(var(--accent-danger));\r\n border-color: hsl(var(--accent-danger) / 0.2);\r\n }\r\n\r\n .error-icon-wrapper {\r\n margin-top: 0.125rem;\r\n }\r\n\r\n .error-icon {\r\n color: hsl(var(--accent-danger));\r\n }\r\n\r\n .warning-icon {\r\n color: hsl(var(--accent-warning));\r\n }\r\n\r\n .error-title {\r\n font-size: 1.125rem;\r\n line-height: 1.75rem;\r\n font-weight: 600;\r\n color: hsl(var(--accent-danger));\r\n margin-bottom: 0.5rem;\r\n }\r\n\r\n .error-message {\r\n font-size: 0.875rem;\r\n line-height: 1.625;\r\n color: hsl(var(--accent-danger));\r\n }\r\n\r\n .error-suggestion {\r\n color: hsl(var(--accent-danger));\r\n font-style: italic;\r\n }\r\n\r\n .error-dismiss {\r\n color: hsl(var(--accent-danger));\r\n }\r\n\r\n .error-dismiss:hover {\r\n background-color: hsl(var(--accent-danger) / 0.1);\r\n }\r\n\r\n .retry-btn {\r\n color: hsl(var(--bg-primary));\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .retry-btn:hover {\r\n filter: brightness(0.9);\r\n }\r\n\r\n /* Gift card complete section */\r\n .gift-card-complete-section {\r\n text-align: center;\r\n }\r\n\r\n /* Network error uses amber/warning colors */\r\n .error-banner:has(.warning-icon) {\r\n background-color: hsl(var(--accent-warning) / 0.08);\r\n border-color: hsl(var(--accent-warning) / 0.3);\r\n }\r\n\r\n .error-banner:has(.warning-icon) .error-title {\r\n color: hsl(var(--accent-warning));\r\n }\r\n\r\n .error-banner:has(.warning-icon) .error-message {\r\n color: hsl(var(--accent-warning));\r\n }\r\n\r\n .error-banner:has(.warning-icon) .error-suggestion {\r\n color: hsl(var(--accent-warning));\r\n }\r\n\r\n .error-banner:has(.warning-icon) .error-dismiss {\r\n color: hsl(var(--accent-warning));\r\n }\r\n\r\n .error-banner:has(.warning-icon) .error-dismiss:hover {\r\n background-color: hsl(var(--accent-warning) / 0.15);\r\n }\r\n\r\n /* Session Extension Popup Styles */\r\n .session-popup-overlay {\r\n position: fixed;\r\n inset: 0;\r\n background-color: rgb(0 0 0 / 0.5);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 50;\r\n padding: 1rem;\r\n animation: fadeIn 0.2s ease-out;\r\n \r\n &:where(.dark, .dark *) {\r\n background-color: rgb(0 0 0 / 0.7);\r\n }\r\n }\r\n\r\n .session-popup {\r\n background-color: hsl(var(--bg-primary));\r\n border-radius: 0.75rem;\r\n box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\r\n padding: 1.5rem;\r\n max-width: 24rem;\r\n width: 100%;\r\n text-align: center;\r\n animation: slideUp 0.3s ease-out;\r\n }\r\n\r\n .session-popup-icon {\r\n margin-bottom: 1rem;\r\n }\r\n\r\n .warning-icon-large {\r\n color: hsl(var(--accent-warning));\r\n margin-left: auto;\r\n margin-right: auto;\r\n }\r\n\r\n .session-popup-title {\r\n font-size: 1.125rem;\r\n line-height: 1.75rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary));\r\n margin-bottom: 0.5rem;\r\n }\r\n\r\n .session-popup-message {\r\n font-size: 0.875rem;\r\n line-height: 1.625;\r\n color: hsl(var(--text-secondary));\r\n margin-bottom: 1.5rem;\r\n }\r\n\r\n .time-remaining {\r\n font-weight: 600;\r\n color: hsl(var(--accent-danger));\r\n }\r\n\r\n .session-popup-actions {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.75rem;\r\n }\r\n\r\n @keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n @keyframes slideUp {\r\n from {\r\n opacity: 0;\r\n transform: translateY(20px) scale(0.95);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n }\r\n</style>\r\n"],"names":["firstName","lastName","email","phoneNumber","keepMeUpdated","ticketsInfo","$","$$props","ticketType","firstNameError","lastNameError","emailError","phoneError","firstNameTouched","lastNameTouched","emailTouched","phoneTouched","labels","form","root","section","div","h2","div_1","Input","node","$$value","node_1","div_2","node_2","div_3","node_3","Checkbox","node_4","span","ticket","index","$$anchor","section_1","root_3","div_4","h2_1","node_7","e","div_5","$1","node_8","node_9","div_6","node_10","$$render","consequent","InputValue","termsError","a","text_1","p","root_2","selectedPayment","error","elements","StripeElementsComp","PaymentElementComp","stripeTheme","useStripeTheme","onMount","mod","err","selectPayment","method","button","root_1","StripeElementsComp_1","PaymentElementComp_1","root_5","alternate","p_1","root_6","browser","consequent_1","alternate_1","p_2","root_7","consequent_2","slide","consequent_3","button_1","span_1","button_2","svg","path","path_1","path_2","path_3","span_2","classes","classes_1","classes_2","GOOGLE_PAY","availableTickets","value","venueId","organizationId","initialError","id","orgSlug","slug","rawEvent","event","transformEvent","venueFeesReady","quantities","promocode","promoDiscountAmount","tickets","confirmEmailTouched","confirmEmail","scrollContainer","showScrollbar","heading","timerDuration","Timing","formatTime","feePerTicket","showExtendSessionPopup","sessionExtensionOffered","SESSION_WARNING_THRESHOLD","SESSION_EXTENSION_AMOUNT","terms","isMobile","containerRef","stickyRef","isSticky","stickyTop","sidebarLeft","cartId","isScrollable","giftCardApplied","stripe","calculatedTax","calculatedServiceFee","calculatedTotal","processing","paymentIntent","isCompleteOrder","isInCompleteOrder","initializeStripePayment","filteredQuantities","_","val","paymentData","createPaymentIntent","loadStripe","ACCENT","stripeError","venueServiceCharge","handleGiftCardApplied","appliedCard","handleGiftCardRemoved","seconds","minutes","remainingSeconds","extendSession","dismissExtendPopup","checkScrollable","confirmEmailError","attendeeError","paymentErrorType","paymentErrorDetails","getPaymentErrorDetails","errorCode","errorType","errorMessage","declineCode","clearPaymentError","setPaymentError","details","validateBeforeSubmit","hasError","isAgreed","ticketErrorCount","t","errors","executePurchase","elementsParam","elementsToUse","validationError","result","paymentPayload","response","validatePaymentIntent","successData","executeGiftCardOnlyPurchase","completeGiftCardPayment","goBack","params","url","goto","updateScreenSize","handleScroll","rect","containerBounding","updateTicketField","field","i","updateTicketDetails","checked","syncSameAsPersonalAttendees","normalizedEmail","normalizedConfirmEmail","emailMatchError","info","idx","ticketId","quantity","ticketMeta","Cookies","checkoutState","loadCheckoutStateFromCookies","interval","venueData","getVenueDetails","fragment","header","h1","Close","div_7","ErrorFilled","WarningFilled","div_8","text_4","div_9","Renew","text_2","text_3","consequent_4","$0","PersonalDetails","div_10","TermsAndConditions","div_11","GiftCardInput","div_12","PaymentSection","node_11","div_13","root_8","div_14","div_15","div_16","p_3","p_4","consequent_5","div_17","root_9","consequent_6","div_18","node_12","OrderSummarySkeleton","$2","OrderSummary","alternate_2","consequent_7","div_19","root_12","div_20","div_21","p_5","text_9","div_22","Button","node_16","node_17","consequent_8","styles"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SeriesPage.legacy-D-ZoVrPE.js","sources":["../src/components/Views/SeriesPage.legacy.svelte"],"sourcesContent":["<script>\r\n import { getImageUrl } from '$lib/utils/utils.js';\r\n import { formatEventDate, formatEventTime, formatTimeRange } from '$lib/utils/datetime.js';\r\n import { PLACEHOLDER_IMAGE } from '$lib/utils/constants.js';\r\n\r\n let {\r\n series,\r\n onNavigateToOccurrence,\r\n } = $props();\r\n\r\n let imageLoaded = $state(false);\r\n\r\n let seriesImage = $derived(\r\n series?.image\r\n ? getImageUrl(series.image)\r\n : PLACEHOLDER_IMAGE\r\n );\r\n\r\n let tz = $derived(series?.timeZone || 'America/Los_Angeles');\r\n\r\n function formatDate(iso) {\r\n return formatEventDate(iso, tz);\r\n }\r\n\r\n function formatTime(iso) {\r\n return formatEventTime(iso, tz);\r\n }\r\n\r\n function handleOccurrenceClick(occurrence) {\r\n if (!occurrence.ctaState?.disabled && onNavigateToOccurrence) {\r\n onNavigateToOccurrence(occurrence.id, occurrence.slug || '', occurrence.name || '');\r\n }\r\n }\r\n</script>\r\n\r\n{#if series}\r\n <div class=\"series-page\">\r\n <!-- Hero Image -->\r\n <div class=\"hero\">\r\n <div class=\"hero-skeleton\" class:hidden={imageLoaded}></div>\r\n <img\r\n src={seriesImage}\r\n alt={series.title}\r\n class=\"hero-image\"\r\n onload={() => (imageLoaded = true)}\r\n />\r\n <div class=\"hero-overlay\">\r\n <div class=\"hero-content\">\r\n <span class=\"series-badge\">Recurring Event</span>\r\n <h1 class=\"series-title\">{series.title}</h1>\r\n <div class=\"series-venue\">\r\n <span>{series.venue?.name}</span>\r\n {#if series.venue?.googleLocationNameCache}\r\n <span class=\"venue-separator\">·</span>\r\n <span class=\"venue-location\">{series.venue.googleLocationNameCache}</span>\r\n {/if}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Content Grid -->\r\n <div class=\"content-grid\">\r\n <!-- Main Column -->\r\n <div class=\"main-column\">\r\n <!-- About Section -->\r\n <section class=\"section\">\r\n <h2 class=\"section-heading\">About this Series</h2>\r\n {#if series.eventSummary}\r\n <p class=\"series-summary\">{series.eventSummary}</p>\r\n {/if}\r\n {#if series.description}\r\n <div class=\"series-description\">{series.description}</div>\r\n {/if}\r\n </section>\r\n\r\n <!-- Upcoming Dates -->\r\n <section class=\"section\">\r\n <div class=\"dates-header\">\r\n <h2 class=\"section-heading\">Upcoming Dates</h2>\r\n <span class=\"dates-count\">{series.occurrences?.length || 0} events</span>\r\n </div>\r\n\r\n {#if !series.occurrences?.length}\r\n <div class=\"empty-dates\">\r\n <p class=\"empty-text\">No upcoming dates scheduled at this time.</p>\r\n <p class=\"empty-subtext\">Check back soon for new announcements.</p>\r\n </div>\r\n {:else}\r\n <div class=\"dates-list\">\r\n {#each series.occurrences as occurrence}\r\n <div class=\"occurrence-card\">\r\n <div class=\"occurrence-info\">\r\n <div class=\"occurrence-date\">{formatDate(occurrence.startDateTime)}</div>\r\n <div class=\"occurrence-time\">\r\n {formatTime(occurrence.startDateTime)} - {formatTime(occurrence.endDateTime)}\r\n </div>\r\n </div>\r\n <div class=\"occurrence-action\">\r\n <button\r\n class=\"cta-button\"\r\n class:cta-disabled={occurrence.ctaState?.disabled}\r\n disabled={occurrence.ctaState?.disabled}\r\n onclick={() => handleOccurrenceClick(occurrence)}\r\n >\r\n {occurrence.ctaState?.text || 'Get tickets'}\r\n </button>\r\n </div>\r\n </div>\r\n {/each}\r\n </div>\r\n {/if}\r\n </section>\r\n\r\n <!-- Performers -->\r\n {#if series.performers?.length}\r\n <section class=\"section\">\r\n <h2 class=\"section-heading\">Performers</h2>\r\n <div class=\"performers-grid\">\r\n {#each series.performers as performer}\r\n <div class=\"performer-card\">\r\n <div class=\"performer-avatar\">\r\n {#if performer.profileImage}\r\n <img\r\n src={getImageUrl(performer.profileImage)}\r\n alt={performer.displayName || `${performer.firstName} ${performer.lastName}`}\r\n class=\"performer-image\"\r\n />\r\n {:else}\r\n <div class=\"performer-placeholder\">\r\n <svg class=\"placeholder-icon\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\r\n </svg>\r\n </div>\r\n {/if}\r\n </div>\r\n <h3 class=\"performer-name\">\r\n {performer.displayName || `${performer.firstName} ${performer.lastName}`}\r\n </h3>\r\n </div>\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <div class=\"sidebar\">\r\n <div class=\"sidebar-sticky\">\r\n {#if series.venue?.faq || series.venue?.disclaimer}\r\n <div class=\"sidebar-card\">\r\n {#if series.venue.faq}\r\n <div class=\"sidebar-section\">\r\n <h3 class=\"sidebar-heading\">FAQ</h3>\r\n <div class=\"faq-content\">\r\n {#if Array.isArray(series.venue.faq)}\r\n {#each series.venue.faq as item}\r\n <div class=\"faq-item\">\r\n <p class=\"faq-question\">{item.question}</p>\r\n <p class=\"faq-answer\">{item.answer}</p>\r\n </div>\r\n {/each}\r\n {:else}\r\n <p>{series.venue.faq}</p>\r\n {/if}\r\n </div>\r\n </div>\r\n {/if}\r\n\r\n {#if series.venue.disclaimer}\r\n <div class=\"sidebar-section\">\r\n <h3 class=\"sidebar-heading\">Important Info</h3>\r\n <div class=\"disclaimer-text\">{series.venue.disclaimer}</div>\r\n </div>\r\n {/if}\r\n </div>\r\n {/if}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n{/if}\r\n\r\n<style>\r\n .series-page {\r\n min-height: 100vh;\r\n padding-bottom: 5rem;\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n /* Hero */\r\n .hero {\r\n position: relative;\r\n width: 100%;\r\n overflow: hidden;\r\n height: 500px;\r\n }\r\n\r\n @media (max-width: 768px) {\r\n .hero {\r\n height: 256px;\r\n }\r\n }\r\n\r\n .hero-skeleton {\r\n position: absolute;\r\n inset: 0;\r\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\r\n background: hsl(var(--surface-secondary, 0 0% 96%));\r\n }\r\n\r\n @keyframes pulse {\r\n 0%, 100% { opacity: 1; }\r\n 50% { opacity: 0.5; }\r\n }\r\n\r\n .hero-image {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n transition: transform 0.7s ease;\r\n }\r\n\r\n .hero:hover .hero-image {\r\n transform: scale(1.05);\r\n }\r\n\r\n .hero-overlay {\r\n position: absolute;\r\n inset: 0;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n padding: 1.5rem;\r\n background: linear-gradient(to top, color-mix(in srgb, black 90%, transparent), color-mix(in srgb, black 50%, transparent), transparent);\r\n }\r\n\r\n @media (min-width: 768px) {\r\n .hero-overlay {\r\n padding: 3rem;\r\n }\r\n }\r\n\r\n .hero-content {\r\n max-width: 64rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n width: 100%;\r\n }\r\n\r\n .series-badge {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 0.25rem 0.75rem;\r\n margin-bottom: 1rem;\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n border-radius: 9999px;\r\n box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\r\n background: hsl(var(--brand-primary, 224 76% 48%));\r\n color: hsl(var(--text-on-primary, 0 0% 100%));\r\n }\r\n\r\n .series-title {\r\n font-size: 2.25rem;\r\n line-height: 1.1;\r\n font-weight: 700;\r\n margin-bottom: 0.75rem;\r\n letter-spacing: -0.025em;\r\n color: hsl(var(--bg-primary));\r\n text-shadow: 0 2px 8px color-mix(in srgb, black 30%, transparent);\r\n }\r\n\r\n @media (min-width: 768px) {\r\n .series-title {\r\n font-size: 3.75rem;\r\n line-height: 1;\r\n }\r\n }\r\n\r\n .series-venue {\r\n font-size: 1.125rem;\r\n line-height: 1.75rem;\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: 0.5rem;\r\n font-weight: 500;\r\n color: color-mix(in srgb, white 90%, transparent);\r\n }\r\n\r\n @media (min-width: 768px) {\r\n .series-venue {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n }\r\n }\r\n\r\n .venue-separator {\r\n display: none;\r\n opacity: 0.6;\r\n }\r\n\r\n @media (min-width: 768px) {\r\n .venue-separator {\r\n display: inline;\r\n }\r\n }\r\n\r\n .venue-location {\r\n opacity: 0.75;\r\n }\r\n\r\n /* Content Grid */\r\n .content-grid {\r\n max-width: 64rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n padding: 3rem 1.5rem;\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n gap: 3rem;\r\n }\r\n\r\n @media (min-width: 768px) {\r\n .content-grid {\r\n padding-top: 5rem;\r\n padding-bottom: 5rem;\r\n }\r\n }\r\n\r\n @media (min-width: 1024px) {\r\n .content-grid {\r\n grid-template-columns: repeat(3, 1fr);\r\n }\r\n }\r\n\r\n .main-column {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4rem;\r\n }\r\n\r\n @media (min-width: 1024px) {\r\n .main-column {\r\n grid-column: span 2 / span 2;\r\n }\r\n }\r\n\r\n .section {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1.5rem;\r\n }\r\n\r\n .section-heading {\r\n font-size: 1.875rem;\r\n line-height: 2.25rem;\r\n font-weight: 700;\r\n letter-spacing: -0.025em;\r\n padding-bottom: 1rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n border-bottom: 1px solid hsl(var(--stroke-secondary, 0 0% 90%));\r\n }\r\n\r\n .series-summary {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 500;\r\n line-height: 1.625;\r\n color: hsl(var(--text-primary, 0 0% 20%));\r\n }\r\n\r\n .series-description {\r\n max-width: none;\r\n white-space: pre-line;\r\n line-height: 1.625;\r\n color: hsl(var(--text-secondary, 0 0% 40%));\r\n }\r\n\r\n /* Upcoming Dates */\r\n .dates-header {\r\n display: flex;\r\n align-items: baseline;\r\n justify-content: space-between;\r\n padding-bottom: 1rem;\r\n border-bottom: 1px solid hsl(var(--stroke-secondary, 0 0% 90%));\r\n }\r\n\r\n .dates-count {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 500;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .empty-dates {\r\n padding: 3rem;\r\n border-radius: 1rem;\r\n text-align: center;\r\n background: hsl(var(--surface-secondary, 0 0% 96%));\r\n border: 2px dashed hsl(var(--stroke-secondary, 0 0% 85%));\r\n }\r\n\r\n .empty-text {\r\n font-size: 1.125rem;\r\n line-height: 1.75rem;\r\n font-weight: 500;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .empty-subtext {\r\n margin-top: 0.5rem;\r\n color: hsl(var(--text-secondary, 0 0% 55%));\r\n }\r\n\r\n .dates-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1rem;\r\n }\r\n\r\n .occurrence-card {\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n padding: 1.5rem;\r\n border-radius: 1rem;\r\n transition: all 0.2s;\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 90%));\r\n }\r\n\r\n @media (min-width: 640px) {\r\n .occurrence-card {\r\n flex-direction: row;\r\n align-items: center;\r\n }\r\n }\r\n\r\n .occurrence-card:hover {\r\n border-color: hsl(var(--brand-primary, 224 76% 48%));\r\n box-shadow: 0 4px 12px color-mix(in srgb, black 8%, transparent);\r\n }\r\n\r\n .occurrence-info {\r\n margin-bottom: 1rem;\r\n }\r\n\r\n @media (min-width: 640px) {\r\n .occurrence-info {\r\n margin-bottom: 0;\r\n }\r\n }\r\n\r\n .occurrence-date {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 700;\r\n margin-bottom: 0.25rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .occurrence-time {\r\n font-weight: 500;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .occurrence-action {\r\n padding-left: 0;\r\n }\r\n\r\n @media (min-width: 640px) {\r\n .occurrence-action {\r\n padding-left: 1.5rem;\r\n }\r\n }\r\n\r\n .cta-button {\r\n width: 100%;\r\n padding: 0.75rem 1.5rem;\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n transition: transform 0.15s;\r\n background: hsl(var(--brand-primary, 224 76% 48%));\r\n color: hsl(var(--text-on-primary, 0 0% 100%));\r\n }\r\n\r\n @media (min-width: 640px) {\r\n .cta-button {\r\n width: auto;\r\n }\r\n }\r\n\r\n .cta-button:hover:not(:disabled) {\r\n transform: scale(1.05);\r\n }\r\n\r\n .cta-disabled {\r\n cursor: not-allowed;\r\n background: hsl(var(--surface-secondary, 0 0% 90%));\r\n color: hsl(var(--text-secondary, 0 0% 55%));\r\n }\r\n\r\n /* Performers */\r\n .performers-grid {\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n gap: 2rem;\r\n }\r\n\r\n @media (min-width: 640px) {\r\n .performers-grid {\r\n grid-template-columns: repeat(3, 1fr);\r\n }\r\n }\r\n\r\n .performer-card {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n padding: 1rem;\r\n border-radius: 0.75rem;\r\n transition: background-color 0.15s;\r\n }\r\n\r\n .performer-card:hover {\r\n background: hsl(var(--surface-secondary, 0 0% 96%));\r\n }\r\n\r\n .performer-avatar {\r\n width: 7rem;\r\n height: 7rem;\r\n margin-bottom: 1rem;\r\n border-radius: 9999px;\r\n overflow: hidden;\r\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\r\n background: hsl(var(--surface-secondary, 0 0% 92%));\r\n }\r\n\r\n .performer-image {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n transition: transform 0.5s ease;\r\n }\r\n\r\n .performer-card:hover .performer-image {\r\n transform: scale(1.1);\r\n }\r\n\r\n .performer-placeholder {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: hsl(var(--text-secondary, 0 0% 60%));\r\n }\r\n\r\n .placeholder-icon {\r\n width: 3rem;\r\n height: 3rem;\r\n opacity: 0.5;\r\n }\r\n\r\n .performer-name {\r\n font-size: 1.125rem;\r\n line-height: 1.75rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n /* Sidebar */\r\n .sidebar {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2rem;\r\n }\r\n\r\n @media (min-width: 1024px) {\r\n .sidebar {\r\n grid-column: span 1 / span 1;\r\n }\r\n }\r\n\r\n .sidebar-sticky {\r\n position: sticky;\r\n top: 6rem;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2rem;\r\n }\r\n\r\n .sidebar-card {\r\n border-radius: 1rem;\r\n padding: 2rem;\r\n background: hsl(var(--surface-secondary, 0 0% 96%));\r\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 92%));\r\n }\r\n\r\n .sidebar-section {\r\n margin-bottom: 2rem;\r\n }\r\n\r\n .sidebar-section:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n .sidebar-heading {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n letter-spacing: 0.1em;\r\n margin-bottom: 1rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .faq-content {\r\n color: hsl(var(--text-secondary, 0 0% 40%));\r\n }\r\n\r\n .faq-item {\r\n margin-bottom: 0.75rem;\r\n }\r\n\r\n .faq-question {\r\n font-weight: 700;\r\n color: hsl(var(--text-primary, 0 0% 20%));\r\n }\r\n\r\n .faq-answer {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n }\r\n\r\n .disclaimer-text {\r\n font-size: 0.875rem;\r\n line-height: 1.625;\r\n padding: 1rem;\r\n border-radius: 0.5rem;\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n color: hsl(var(--text-secondary, 0 0% 40%));\r\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 90%));\r\n }\r\n</style>\r\n"],"names":["imageLoaded","$","seriesImage","getImageUrl","$$props","PLACEHOLDER_IMAGE","tz","formatDate","iso","formatEventDate","formatTime","formatEventTime","handleOccurrenceClick","occurrence","div","root_1","div_1","div_2","img","div_3","div_4","h1","div_5","span","span_1","fragment_1","text_2","$$render","consequent","div_6","div_7","section","p","root_3","consequent_1","div_8","root_4","consequent_2","section_1","div_9","span_2","div_10","root_5","div_11","root_6","$$anchor","div_12","root_7","div_13","div_14","div_15","div_16","button","classes_1","text_8","alternate","consequent_3","section_2","root_8","div_17","performer","div_18","root_9","div_19","img_1","root_10","$0","div_20","root_11","consequent_4","alternate_1","h3","consequent_5","div_21","div_22","div_23","root_12","div_24","root_13","div_25","item","div_26","root_15","p_1","p_2","text_10","text_11","d","p_3","root_16","text_12","consequent_7","div_27","root_17","div_28","text_13","consequent_8","consequent_9","classes","text_1"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Success.legacy-D9zlNOn7.js","sources":["../src/components/Views/Success.legacy.svelte"],"sourcesContent":["<script>\r\n import { onMount } from \"svelte\";\r\n import { transformEvent, getOrder } from \"$lib/utils/utils.js\";\r\n import { formatConfirmationDateTime } from \"$lib/utils/datetime.js\";\r\n import { CheckmarkFilled } from \"carbon-icons-svelte\";\r\n import { ACCENT, DARK } from \"$lib/constants/colors.ts\";\r\n\r\n let {\r\n data = {},\r\n eventUrl = '',\r\n browseUrl = '/',\r\n } = $props();\r\n\r\n const {\r\n organizationID,\r\n orgSlug,\r\n slug,\r\n event: rawEvent,\r\n orderId: providedOrderId,\r\n customerEmail: providedCustomerEmail,\r\n eventName: providedEventName,\r\n eventDateTime: providedEventDateTime,\r\n eventLocation: providedEventLocation,\r\n } = data || {};\r\n\r\n let event = null;\r\n if (rawEvent) {\r\n try {\r\n event = transformEvent(rawEvent);\r\n } catch (e) {\r\n console.warn(\"transformEvent failed in Success component:\", e);\r\n event = rawEvent;\r\n }\r\n }\r\n\r\n let order = null;\r\n let error = null;\r\n let Email = $state(\"\");\r\n let id = $state(\"\");\r\n let name = $state(\"\");\r\n let time = $state(\"\");\r\n let Location = $state(\"\");\r\n let orderId = providedOrderId || data?.orderId || \"\";\r\n\r\n // Animation states\r\n let showConfetti = $state(false);\r\n let showTicket = $state(false);\r\n let showDetails = $state(false);\r\n\r\n function formatDateTime(dateTimeString) {\r\n if (!dateTimeString) return \"\";\r\n // Use event timezone if available, otherwise fall back to UTC\r\n const tz = event?.timeZone || 'UTC';\r\n return formatConfirmationDateTime(dateTimeString, tz);\r\n }\r\n\r\n // Generate confetti particles\r\n const confettiColors = [\r\n ACCENT.coral,\r\n ACCENT.sky.light,\r\n ACCENT.sky[400],\r\n ACCENT.mint[600],\r\n ACCENT.yellow[300],\r\n ACCENT.plum,\r\n ACCENT.mint[500],\r\n ACCENT.yellow[500]\r\n ];\r\n const confettiParticles = Array.from({ length: 50 }, (_, i) => ({\r\n id: i,\r\n color: confettiColors[Math.floor(Math.random() * confettiColors.length)],\r\n left: Math.random() * 100,\r\n delay: Math.random() * 0.5,\r\n duration: 2 + Math.random() * 2,\r\n size: 6 + Math.random() * 8,\r\n rotation: Math.random() * 360\r\n }));\r\n\r\n onMount(async () => {\r\n // Start animations\r\n setTimeout(() => {\r\n showConfetti = true;\r\n }, 100);\r\n\r\n setTimeout(() => {\r\n showTicket = true;\r\n }, 300);\r\n\r\n setTimeout(() => {\r\n showDetails = true;\r\n }, 800);\r\n\r\n try {\r\n let orderData = null;\r\n try {\r\n if (typeof getOrder === \"function\" && orderId) {\r\n orderData = await getOrder(orderId);\r\n }\r\n } catch (e) {\r\n console.warn(\r\n \"getOrder failed in Success component, falling back to provided data:\",\r\n e\r\n );\r\n }\r\n\r\n if (orderData) {\r\n order = orderData;\r\n Email = orderData.customerEmail || providedCustomerEmail || \"\";\r\n id = orderData.id || orderId;\r\n name = orderData.eventName || event?.name || providedEventName || \"\";\r\n time = formatDateTime(\r\n orderData.eventDateTime ||\r\n event?.startDateTime ||\r\n providedEventDateTime\r\n );\r\n Location =\r\n orderData.eventLocation ||\r\n event?.location ||\r\n providedEventLocation ||\r\n \"\";\r\n } else {\r\n Email = providedCustomerEmail || \"\";\r\n id = orderId;\r\n name = providedEventName || event?.name || \"\";\r\n time = formatDateTime(providedEventDateTime || event?.startDateTime);\r\n Location = providedEventLocation || event?.location || \"\";\r\n }\r\n } catch (err) {\r\n console.error(\"Error fetching order data:\", err);\r\n error = err.message;\r\n Email = providedCustomerEmail || \"your-email@example.com\";\r\n id = orderId;\r\n name = event?.name || providedEventName || \"\";\r\n time = formatDateTime(event?.startDateTime || providedEventDateTime);\r\n Location = event?.location || providedEventLocation || \"\";\r\n }\r\n });\r\n</script>\r\n\r\n<div class=\"success-container\" role=\"main\" aria-labelledby=\"success-title\">\r\n <!-- Confetti -->\r\n {#if showConfetti}\r\n <div class=\"confetti-container\" aria-hidden=\"true\">\r\n {#each confettiParticles as particle (particle.id)}\r\n <div\r\n class=\"confetti\"\r\n style=\"\r\n left: {particle.left}%;\r\n background-color: {particle.color};\r\n animation-delay: {particle.delay}s;\r\n animation-duration: {particle.duration}s;\r\n width: {particle.size}px;\r\n height: {particle.size}px;\r\n transform: rotate({particle.rotation}deg);\r\n \"\r\n ></div>\r\n {/each}\r\n </div>\r\n {/if}\r\n\r\n <div class=\"content-wrapper\">\r\n <!-- Ticket Machine Animation -->\r\n <div class=\"ticket-machine\" class:animate={showTicket}>\r\n <!-- Machine slot -->\r\n <div class=\"machine-slot\">\r\n <div class=\"slot-inner\"></div>\r\n </div>\r\n\r\n <!-- Ticket coming out -->\r\n <div class=\"ticket\" class:slide-out={showTicket}>\r\n <div class=\"ticket-content\">\r\n <div class=\"ticket-header\">\r\n <div class=\"success-badge\" aria-hidden=\"true\">\r\n <CheckmarkFilled class=\"check-icon\" />\r\n </div>\r\n <h1 id=\"success-title\" class=\"success-title\">You're all set!</h1>\r\n <p class=\"success-subtitle\">Your tickets have been confirmed</p>\r\n </div>\r\n\r\n <div class=\"ticket-divider\">\r\n <div class=\"divider-notch left\"></div>\r\n <div class=\"divider-line\"></div>\r\n <div class=\"divider-notch right\"></div>\r\n </div>\r\n\r\n <dl class=\"ticket-details\" class:fade-in={showDetails} aria-label=\"Order details\">\r\n <div class=\"detail-row\">\r\n <dt class=\"detail-label\">Email</dt>\r\n <dd class=\"detail-value\">{Email || 'Loading...'}</dd>\r\n </div>\r\n\r\n {#if id}\r\n <div class=\"detail-row\">\r\n <dt class=\"detail-label\">Order ID</dt>\r\n <dd class=\"detail-value order-id\">#{id}</dd>\r\n </div>\r\n {/if}\r\n\r\n {#if name}\r\n <div class=\"detail-row\">\r\n <dt class=\"detail-label\">Event</dt>\r\n <dd class=\"detail-value event-name\">{name}</dd>\r\n </div>\r\n {/if}\r\n\r\n {#if time}\r\n <div class=\"detail-row\">\r\n <dt class=\"detail-label\">When</dt>\r\n <dd class=\"detail-value\"><time>{time}</time></dd>\r\n </div>\r\n {/if}\r\n\r\n {#if Location}\r\n <div class=\"detail-row\">\r\n <dt class=\"detail-label\">Where</dt>\r\n <dd class=\"detail-value\">{Location}</dd>\r\n </div>\r\n {/if}\r\n </dl>\r\n\r\n <div class=\"ticket-footer\">\r\n <p class=\"footer-text\">Check your email for your tickets</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Ticket stub pattern -->\r\n <div class=\"ticket-stub\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Navigation CTAs -->\r\n {#if eventUrl || browseUrl}\r\n <nav class=\"nav-ctas\" class:fade-in={showDetails} aria-label=\"Next steps\">\r\n {#if eventUrl}\r\n <a href={eventUrl} class=\"nav-link secondary\">Back to event</a>\r\n {/if}\r\n {#if browseUrl}\r\n <a href={browseUrl} class=\"nav-link primary\">Browse more events</a>\r\n {/if}\r\n </nav>\r\n {/if}\r\n </div>\r\n</div>\r\n\r\n<style>\r\n .success-container {\r\n position: relative;\r\n min-height: 100vh;\r\n overflow: hidden;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 1.25rem;\r\n background: linear-gradient(180deg, hsl(var(--bg-primary)) 0%, hsl(var(--bg-secondary)) 100%);\r\n \r\n &:where(.dark, .dark *) {\r\n background: linear-gradient(180deg, hsl(var(--bg-primary)) 0%, hsl(var(--bg-primary)) 100%);\r\n }\r\n }\r\n\r\n /* Confetti */\r\n .confetti-container {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n height: 100%;\r\n pointer-events: none;\r\n overflow: hidden;\r\n }\r\n\r\n .confetti {\r\n position: absolute;\r\n top: -20px;\r\n border-radius: 2px;\r\n animation: confetti-fall linear forwards;\r\n }\r\n\r\n @keyframes confetti-fall {\r\n 0% {\r\n transform: translateY(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n 100% {\r\n transform: translateY(100vh) rotate(720deg);\r\n opacity: 0;\r\n }\r\n }\r\n\r\n /* Content wrapper */\r\n .content-wrapper {\r\n position: relative;\r\n z-index: 10;\r\n width: 100%;\r\n max-width: 380px;\r\n }\r\n\r\n /* Ticket machine */\r\n .ticket-machine {\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n }\r\n\r\n .machine-slot {\r\n width: 100%;\r\n height: 16px;\r\n background: linear-gradient(180deg, hsl(var(--muted)) 0%, hsl(var(--bg-primary)) 100%);\r\n border-radius: 8px 8px 0 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n box-shadow: 0 4px 12px color-mix(in srgb, black 20%, transparent);\r\n position: relative;\r\n z-index: 5;\r\n }\r\n\r\n .slot-inner {\r\n width: 80%;\r\n height: 4px;\r\n background: hsl(var(--bg-primary));\r\n border-radius: 2px;\r\n }\r\n\r\n /* Ticket */\r\n .ticket {\r\n width: 100%;\r\n background: hsl(var(--bg-primary));\r\n border-radius: 0 0 16px 16px;\r\n box-shadow: 0 8px 32px color-mix(in srgb, black 12%, transparent);\r\n overflow: hidden;\r\n transform: translateY(-100%);\r\n opacity: 0;\r\n transition: transform 0.8s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.3s ease;\r\n }\r\n\r\n .ticket.slide-out {\r\n transform: translateY(0);\r\n opacity: 1;\r\n }\r\n\r\n .ticket-content {\r\n padding: 32px 24px 24px;\r\n }\r\n\r\n .ticket-header {\r\n text-align: center;\r\n margin-bottom: 24px;\r\n }\r\n\r\n .success-badge {\r\n width: 64px;\r\n height: 64px;\r\n background: linear-gradient(135deg, hsl(var(--accent-success)) 0%, hsl(var(--accent-success)) 100%);\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin: 0 auto 16px;\r\n animation: badge-pop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 0.5s both;\r\n }\r\n\r\n @keyframes badge-pop {\r\n 0% {\r\n transform: scale(0);\r\n }\r\n 100% {\r\n transform: scale(1);\r\n }\r\n }\r\n\r\n .success-badge :global(.check-icon) {\r\n width: 32px;\r\n height: 32px;\r\n color: hsl(var(--bg-primary));\r\n }\r\n\r\n .success-title {\r\n font-size: 1.5rem;\r\n line-height: 2rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary));\r\n margin-bottom: 0.5rem;\r\n }\r\n\r\n .success-subtitle {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n color: hsl(var(--text-secondary));\r\n margin: 0;\r\n }\r\n\r\n /* Ticket divider */\r\n .ticket-divider {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n margin: 0 -24px 24px;\r\n padding: 0 24px;\r\n }\r\n\r\n .divider-notch {\r\n width: 1rem;\r\n height: 1rem;\r\n border-radius: 9999px;\r\n position: absolute;\r\n background-color: hsl(var(--bg-primary));\r\n }\r\n\r\n .divider-notch.left {\r\n left: -8px;\r\n }\r\n\r\n .divider-notch.right {\r\n right: -8px;\r\n }\r\n\r\n .divider-line {\r\n flex: 1 1 0%;\r\n height: 0.125rem;\r\n background: repeating-linear-gradient(\r\n 90deg,\r\n hsl(var(--stroke-primary)) 0,\r\n hsl(var(--stroke-primary)) 8px,\r\n transparent 8px,\r\n transparent 16px\r\n );\r\n \r\n &:where(.dark, .dark *) {\r\n background: repeating-linear-gradient(\r\n 90deg,\r\n hsl(var(--text-secondary)) 0,\r\n hsl(var(--text-secondary)) 8px,\r\n transparent 8px,\r\n transparent 16px\r\n );\r\n }\r\n }\r\n\r\n /* Ticket details */\r\n .ticket-details {\r\n opacity: 0;\r\n transform: translateY(10px);\r\n transition: opacity 0.4s ease, transform 0.4s ease;\r\n }\r\n\r\n .ticket-details.fade-in {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n\r\n .detail-row {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.25rem;\r\n padding-top: 0.75rem;\r\n padding-bottom: 0.75rem;\r\n border-bottom: 1px solid hsl(var(--stroke-primary) / 0.5);\r\n }\r\n\r\n .detail-row:last-child {\r\n border-bottom: 0;\r\n }\r\n\r\n .detail-label {\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-tertiary));\r\n text-transform: uppercase;\r\n letter-spacing: 0.025em;\r\n }\r\n\r\n .detail-value {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 500;\r\n color: hsl(var(--text-primary));\r\n overflow-wrap: break-word;\r\n }\r\n\r\n .detail-value.order-id {\r\n color: hsl(var(--brand-primary));\r\n font-family: 'SF Mono', 'Consolas', monospace;\r\n }\r\n\r\n .detail-value.event-name {\r\n font-size: 1rem;\r\n line-height: 1.5rem;\r\n font-weight: 600;\r\n }\r\n\r\n /* Ticket footer */\r\n .ticket-footer {\r\n margin-top: 1.5rem;\r\n padding: 1rem;\r\n border-radius: 0.5rem;\r\n text-align: center;\r\n background-color: hsl(var(--bg-secondary) / 0.5);\r\n }\r\n\r\n .footer-text {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n color: hsl(var(--text-secondary));\r\n margin: 0;\r\n }\r\n\r\n /* Ticket stub pattern */\r\n .ticket-stub {\r\n height: 1.5rem;\r\n background: linear-gradient(\r\n 90deg,\r\n transparent 0,\r\n transparent 8px,\r\n hsl(var(--stroke-primary) / 0.3) 8px,\r\n hsl(var(--stroke-primary) / 0.3) 16px\r\n );\r\n background-size: 16px 100%;\r\n }\r\n\r\n /* Navigation CTAs */\r\n .nav-ctas {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.75rem;\r\n margin-top: 1.5rem;\r\n opacity: 0;\r\n transform: translateY(10px);\r\n transition: opacity 0.4s ease 0.2s, transform 0.4s ease 0.2s;\r\n }\r\n\r\n .nav-ctas.fade-in {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n\r\n .nav-link {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 0.75rem 1rem;\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n text-decoration: none;\r\n transition: background-color 0.15s, color 0.15s;\r\n }\r\n\r\n .nav-link.primary {\r\n background: hsl(var(--brand-primary, 220 90% 56%));\r\n color: hsl(var(--text-on-primary, 0 0% 100%));\r\n }\r\n\r\n .nav-link.primary:hover {\r\n filter: brightness(0.95);\r\n }\r\n\r\n .nav-link.secondary {\r\n background-color: hsl(var(--bg-tertiary));\r\n color: hsl(var(--text-secondary));\r\n }\r\n\r\n .nav-link.secondary:hover {\r\n background-color: hsl(var(--bg-quaternary));\r\n }\r\n\r\n /* Responsive */\r\n @media (max-width: 480px) {\r\n .success-container {\r\n padding: 16px;\r\n }\r\n\r\n .ticket-content {\r\n padding: 24px 20px 20px;\r\n }\r\n\r\n .success-title {\r\n font-size: 20px;\r\n }\r\n\r\n .success-badge {\r\n width: 56px;\r\n height: 56px;\r\n }\r\n\r\n .success-badge :global(.check-icon) {\r\n width: 28px;\r\n height: 28px;\r\n }\r\n }\r\n</style>\r\n"],"names":["data","$","$$props","eventUrl","browseUrl","organizationID","orgSlug","slug","rawEvent","providedOrderId","providedCustomerEmail","providedEventName","providedEventDateTime","providedEventLocation","event","transformEvent","e","order","Email","id","name","time","Location","orderId","showConfetti","showTicket","showDetails","formatDateTime","dateTimeString","tz","formatConfirmationDateTime","confettiColors","ACCENT","confettiParticles","_","i","onMount","orderData","getOrder","err","div","root","div_1","root_1","particle","$$anchor","div_2","root_2","$$render","consequent","div_3","node","div_4","div_5","div_6","div_7","div_8","CheckmarkFilled","node_1","dl","div_9","dd","div_10","root_3","dd_1","consequent_1","div_11","root_4","dd_2","consequent_2","div_12","root_5","dd_3","time_1","consequent_3","div_13","root_6","dd_4","consequent_4","nav","root_7","a","root_8","consequent_5","a_1","root_9","consequent_6","classes_3","consequent_7","classes","classes_1","classes_2","text"],"mappings":"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"}
|