@getmicdrop/venue-calendar 4.0.22 → 4.0.24
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/{AirbnbSplitMain-CE2rBjZM.js → AirbnbSplitMain-FWhPcWnh.js} +4 -4
- package/dist/{AirbnbSplitMain-CE2rBjZM.js.map → AirbnbSplitMain-FWhPcWnh.js.map} +1 -1
- package/dist/{CarouselView.legacy-ZnaYAHEQ.js → CarouselView.legacy-BwDTyQwB.js} +3 -3
- package/dist/{CarouselView.legacy-ZnaYAHEQ.js.map → CarouselView.legacy-BwDTyQwB.js.map} +1 -1
- package/dist/{CartView-DBK6MSU7.js → CartView-ChaweZl_.js} +548 -527
- package/dist/CartView-ChaweZl_.js.map +1 -0
- package/dist/{Checkout-BVjHIlYz.js → Checkout-m7_6RcDl.js} +4 -4
- package/dist/{Checkout-BVjHIlYz.js.map → Checkout-m7_6RcDl.js.map} +1 -1
- package/dist/{Checkout.legacy-BLA7J-cQ.js → Checkout.legacy-UwQUvuTo.js} +4 -4
- package/dist/{Checkout.legacy-BLA7J-cQ.js.map → Checkout.legacy-UwQUvuTo.js.map} +1 -1
- package/dist/{CheckoutMain-CboXAOe4.js → CheckoutMain-yf7JFCQH.js} +4 -4
- package/dist/{CheckoutMain-CboXAOe4.js.map → CheckoutMain-yf7JFCQH.js.map} +1 -1
- package/dist/{CheckoutTimer-B-gOH5yN.js → CheckoutTimer-C3GG3JXX.js} +2 -2
- package/dist/{CheckoutTimer-B-gOH5yN.js.map → CheckoutTimer-C3GG3JXX.js.map} +1 -1
- package/dist/CollectionView-C0dqTs4Z.js +147 -0
- package/dist/CollectionView-C0dqTs4Z.js.map +1 -0
- package/dist/CollectionView.legacy-C6qph1gT.js +382 -0
- package/dist/CollectionView.legacy-C6qph1gT.js.map +1 -0
- package/dist/{EventDetailsView-CzhqFvLf.js → EventDetailsView-D_OtZy7f.js} +2 -2
- package/dist/{EventDetailsView-CzhqFvLf.js.map → EventDetailsView-D_OtZy7f.js.map} +1 -1
- package/dist/{FeaturedView.legacy-Bt1cBZUk.js → FeaturedView.legacy-CaZvi9Ef.js} +19 -19
- package/dist/{FeaturedView.legacy-Bt1cBZUk.js.map → FeaturedView.legacy-CaZvi9Ef.js.map} +1 -1
- package/dist/{GalleryCard-ESP86jPc.js → GalleryCard-DAg-MMat.js} +8 -8
- package/dist/{GalleryCard-ESP86jPc.js.map → GalleryCard-DAg-MMat.js.map} +1 -1
- package/dist/{GalleryView.legacy-Bt3fy-jM.js → GalleryView.legacy-BfdEZNzy.js} +9 -9
- package/dist/{GalleryView.legacy-Bt3fy-jM.js.map → GalleryView.legacy-BfdEZNzy.js.map} +1 -1
- package/dist/{GroupedListView.legacy-XHcYPBe5.js → GroupedListView.legacy-B4WLRLto.js} +7 -7
- package/dist/{GroupedListView.legacy-XHcYPBe5.js.map → GroupedListView.legacy-B4WLRLto.js.map} +1 -1
- package/dist/{SeriesPage-JWCvBgsz.js → SeriesPage-BocPD2j4.js} +5 -5
- package/dist/{SeriesPage-JWCvBgsz.js.map → SeriesPage-BocPD2j4.js.map} +1 -1
- package/dist/{SeriesPage.legacy-uELzSOeL.js → SeriesPage.legacy-2h6fMKlK.js} +22 -22
- package/dist/{SeriesPage.legacy-uELzSOeL.js.map → SeriesPage.legacy-2h6fMKlK.js.map} +1 -1
- package/dist/{Success-BuS0I7Qz.js → Success-TrKJrZEt.js} +5 -5
- package/dist/{Success-BuS0I7Qz.js.map → Success-TrKJrZEt.js.map} +1 -1
- package/dist/{Success.legacy-BgXt7Gag.js → Success.legacy-C5HEdOfL.js} +2 -2
- package/dist/{Success.legacy-BgXt7Gag.js.map → Success.legacy-C5HEdOfL.js.map} +1 -1
- package/dist/{VenueCalendar-Cto5MXq5.js → VenueCalendar-DDc5rhjI.js} +4256 -4027
- package/dist/VenueCalendar-DDc5rhjI.js.map +1 -0
- package/dist/{ViewTicketsEmbed-DtSudcev.js → ViewTicketsEmbed-Dw50Pq6E.js} +2 -2
- package/dist/{ViewTicketsEmbed-DtSudcev.js.map → ViewTicketsEmbed-Dw50Pq6E.js.map} +1 -1
- package/dist/{labels-D-RnOtxY.js → labels-CAgJ2yP_.js} +2 -2
- package/dist/{labels-D-RnOtxY.js.map → labels-CAgJ2yP_.js.map} +1 -1
- package/dist/{transform-D6gi-DRk.js → transform-BMKoz7cg.js} +2 -2
- package/dist/{transform-D6gi-DRk.js.map → transform-BMKoz7cg.js.map} +1 -1
- package/dist/venue-calendar.css +1 -1
- package/dist/venue-calendar.es.js +11 -11
- package/dist/venue-calendar.iife.js +44 -44
- package/dist/venue-calendar.iife.js.map +1 -1
- package/dist/venue-calendar.umd.js +44 -44
- package/dist/venue-calendar.umd.js.map +1 -1
- package/package.json +1 -1
- package/dist/CartView-DBK6MSU7.js.map +0 -1
- package/dist/CollectionView-DhPZ1KLe.js +0 -142
- package/dist/CollectionView-DhPZ1KLe.js.map +0 -1
- package/dist/CollectionView.legacy-Db0ZxDE4.js +0 -376
- package/dist/CollectionView.legacy-Db0ZxDE4.js.map +0 -1
- package/dist/VenueCalendar-Cto5MXq5.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AirbnbSplitMain-CE2rBjZM.js","sources":["../src/lib/premium-ticket-experience/variants/v3-airbnb-split/HeroImage.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/EventHeader.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/TicketCard.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/BookingWidget.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/AboutSection.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/PerformerGrid.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/FaqAccordion.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/MobileCta.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/DataToggle.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/PromoCodeInput.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/ShowtimeDesigns.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/AirbnbSplitMain.svelte"],"sourcesContent":["<script lang=\"ts\">\r\n\tinterface Props {\r\n\t\tsrc: string;\r\n\t\talt: string;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { src, alt, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n<div class=\"hero-container relative w-full overflow-hidden rounded-xl bg-surface-secondary\">\r\n\t<img\r\n\t\t{src}\r\n\t\talt=\"\"\r\n\t\tclass=\"hero-blur\"\r\n\t\tloading=\"eager\"\r\n\t\taria-hidden=\"true\"\r\n\t/>\r\n\t<img\r\n\t\t{src}\r\n\t\t{alt}\r\n\t\tclass=\"hero-image\"\r\n\t\tloading=\"eager\"\r\n\t/>\r\n</div>\r\n\r\n<style>\r\n\t.hero-container {\r\n\t\tmax-height: 37.5rem;\r\n\t\tmin-height: 12rem;\r\n\t}\r\n\r\n\t/* Blurred zoomed copy as backdrop */\r\n\t.hero-blur {\r\n\t\tposition: absolute;\r\n\t\tinset: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t\tobject-fit: cover;\r\n\t\ttransform: scale(1.15);\r\n\t\tfilter: blur(16px) saturate(1.2);\r\n\t}\r\n\r\n\t/* Main image on top, contained */\r\n\t.hero-image {\r\n\t\tposition: relative;\r\n\t\twidth: 100%;\r\n\t\tobject-fit: contain;\r\n\t\tmax-height: 37.5rem;\r\n\t\tmin-height: 12rem;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Calendar, Location, Share, Theater, Time, User } from 'carbon-icons-svelte';\r\n\timport { Heading } from '@getmicdrop/svelte-components';\r\n\timport { toast } from '@getmicdrop/svelte-components/toast';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { EventData, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tformatFullDateCompact,\r\n\t\tformatEventTime,\r\n\t\tformatTimeRange,\r\n\t\tformatDoorsTime,\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\thideDateTime?: boolean;\r\n\t\thideVenue?: boolean;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, hideDateTime = false, hideVenue = false, labels = {}, }: Props = $props();\r\n\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(event.totalTicketsRemaining, event.totalTicketsCapacity)\r\n\t);\r\n\tlet scarcityText = $derived(\r\n\t\tgetScarcityText(scarcityLevel, event.totalTicketsRemaining, 'event')\r\n\t);\r\n\r\n\tlet ageText = $derived((() => {\r\n\t\tif (!event.displayAgeRestriction) return null;\r\n\t\tif (event.ageRestriction && event.ageRestriction > 0) {\r\n\t\t\treturn `Ages ${event.ageRestriction}+`;\r\n\t\t}\r\n\t\treturn 'All ages';\r\n\t})());\r\n\r\n\tasync function shareEvent() {\r\n\t\tconst url = typeof window !== 'undefined'\r\n\t\t\t? `${window.location.origin}/e/${event.id}-${event.slug}`\r\n\t\t\t: '#';\r\n\t\tconst shareData = { url };\r\n\r\n\t\tif (navigator.share) {\r\n\t\t\ttry {\r\n\t\t\t\tawait navigator.share(shareData);\r\n\t\t\t} catch (err: unknown) {\r\n\t\t\t\tif (err instanceof Error && err.name !== 'AbortError') {\r\n\t\t\t\t\tfallbackShare(url);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfallbackShare(url);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fallbackShare(url: string) {\r\n\t\tnavigator.clipboard.writeText(url).then(() => {\r\n\t\t\ttoast.success('Link copied to clipboard!');\r\n\t\t}).catch(() => {\r\n\t\t\t// duration: Infinity keeps the URL visible so users can still copy\r\n\t\t\t// it manually after clipboard API failure (Codex review of #103)\r\n\t\t\ttoast.error('Could not copy link — select the URL below to copy', {\r\n\t\t\t\tdescription: url,\r\n\t\t\t\tduration: Infinity,\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n</script>\r\n\r\n<div class=\"flex flex-col gap-4\">\r\n\t<div class=\"flex items-start gap-3 flex-wrap\">\r\n\t\t<Heading level={1} size=\"xl\" weight=\"bold\" class=\"sm:text-2xl leading-tight\">\r\n\t\t\t{event.title}\r\n\t\t</Heading>\r\n\t\t{#if scarcityText && event.status === 'on_sale'}\r\n\t\t\t<ScarcityBadge\r\n\t\t\t\tremaining={event.totalTicketsRemaining}\r\n\t\t\t\ttotal={event.totalTicketsCapacity}\r\n\t\t\t\tcontext=\"event\"\r\n\t\t\t/>\r\n\t\t{/if}\r\n\t</div>\r\n\r\n\t<!-- Share -->\r\n\t<button type=\"button\" class=\"share-btn text-color-muted hover:text-color-secondary\" onclick={shareEvent}>\r\n\t\t<Share size={16} class=\"shrink-0\" />\r\n\t\tShare\r\n\t</button>\r\n\r\n\t{#if !hideDateTime}\r\n\t\t<!-- Date -->\r\n\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t<Calendar size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t<span class=\"body-md font-medium\">{formatFullDateCompact(event.startDateTime, event.timezone)}</span>\r\n\t\t</div>\r\n\r\n\t\t<!-- Time + doors -->\r\n\t\t{#if event.displayStartTime !== false}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Time size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<div class=\"flex flex-col gap-0.5\">\r\n\t\t\t\t\t{#if event.displayEndTime !== false}\r\n\t\t\t\t\t\t<span class=\"body-md font-medium\">{formatTimeRange(event.startDateTime, event.endDateTime, event.timezone)}</span>\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t<span class=\"body-md font-medium\">{formatEventTime(event.startDateTime, event.timezone)}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{#if event.displayDoorsTime !== false && event.doorsOpenTime}\r\n\t\t\t\t\t\t<span class=\"caption\">Doors open {formatDoorsTime(event.doorsOpenTime, event.timezone)}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{:else if event.displayDoorsTime !== false && event.doorsOpenTime}\r\n\t\t\t<!-- No start/end time, but doors time is shown -->\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Time size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">Doors open {formatDoorsTime(event.doorsOpenTime, event.timezone)}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t{/if}\r\n\r\n\t{#if !hideVenue}\r\n\t\t<!-- Venue + address -->\r\n\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t<Location size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t<div class=\"flex flex-col gap-0.5\">\r\n\t\t\t\t<span class=\"body-md font-medium\">{event.venue.name}</span>\r\n\t\t\t\t{#if event.venue.address}\r\n\t\t\t\t\t<span class=\"caption\">{event.venue.address}</span>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<!-- Stage name -->\r\n\t\t{#if event.stageName}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Theater size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">{event.stageName}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\r\n\t\t<!-- Age restriction -->\r\n\t\t{#if ageText}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<User size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">{ageText}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.share-btn {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tgap: 0.375rem;\r\n\t\tfont-size: 0.75rem;\r\n\t\tline-height: 1rem;\r\n\t\ttransition-property: color;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { Add, Subtract } from 'carbon-icons-svelte';\r\n\timport { Badge, Button, Heading, Input, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { TicketTypeData, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText,\r\n\t\tformatSmartSalesDate,\r\n\t\tDURATION\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tticket: TicketTypeData;\r\n\t\tquantity: number;\r\n\t\tonQuantityChange: (ticketId: number, quantity: number) => void;\r\n\t\tdonationAmount?: string;\r\n\t\tonDonationChange?: (ticketId: number, amount: string) => void;\r\n\t\tisRevealedByPromo?: boolean;\r\n\t\tisDiscountedByPromo?: boolean;\r\n\t\tdiscountedPrice?: number | null;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet {\r\n\t\tticket,\r\n\t\tquantity,\r\n\t\tonQuantityChange,\r\n\t\tdonationAmount = '',\r\n\t\tonDonationChange,\r\n\t\tisRevealedByPromo = false,\r\n\t\tisDiscountedByPromo = false,\r\n\t\tdiscountedPrice = null,\r\n\t\tlabels = {},\r\n\t}: Props = $props();\r\n\r\n\t// --- State detection ---\r\n\tlet isDonation = $derived(ticket.isDonation || ticket.ticketType === 2);\r\n\tlet isSoldOut = $derived(ticket.status === 'sold_out' || ticket.quantityAvailable === 0);\r\n\tlet isComingSoon = $derived(ticket.status === 'coming_soon');\r\n\tlet isSalesEnded = $derived(ticket.status === 'sales_ended');\r\n\tlet isDisabled = $derived(isSoldOut || isComingSoon || isSalesEnded);\r\n\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(ticket.quantityAvailable, ticket.quantityTotal)\r\n\t);\r\n\tlet scarcityText = $derived(getScarcityText(scarcityLevel, ticket.quantityAvailable, 'ticket'));\r\n\tlet isSelected = $derived(quantity > 0);\r\n\r\n\t// Donation validation\r\n\tlet donationValue = $derived(parseFloat(donationAmount) || 0);\r\n\tlet donationError = $derived(\r\n\t\tisDonation && donationAmount !== '' && donationValue < 1 ? 'Minimum $1.00' : ''\r\n\t);\r\n\tlet isDonationValid = $derived(!isDonation || (donationAmount !== '' && donationValue >= 1));\r\n\r\n\tlet canDecrement = $derived(quantity > 0);\r\n\tlet canIncrement = $derived(\r\n\t\t!isDisabled &&\r\n\t\tquantity < ticket.maxPerOrder &&\r\n\t\tquantity < ticket.quantityAvailable &&\r\n\t\tisDonationValid\r\n\t);\r\n\r\n\tfunction decrement() {\r\n\t\tif (canDecrement) {\r\n\t\t\t// If decrementing would go below minimum, jump to 0 (remove from cart)\r\n\t\t\tconst newQty = quantity - 1;\r\n\t\t\tonQuantityChange(ticket.id, newQty < ticket.minPerOrder ? 0 : newQty);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction increment() {\r\n\t\tif (canIncrement) {\r\n\t\t\t// If at 0, jump to minimum purchase quantity\r\n\t\t\tconst newQty = quantity === 0 ? ticket.minPerOrder : quantity + 1;\r\n\t\t\tonQuantityChange(ticket.id, newQty);\r\n\t\t}\r\n\t}\r\n\r\n\tlet donationInputValue = $state(donationAmount);\r\n\r\n\t// Sync external donationAmount prop to local state\r\n\t$effect(() => {\r\n\t\tdonationInputValue = donationAmount;\r\n\t});\r\n\r\n\t// Push local changes upstream\r\n\tfunction syncDonation() {\r\n\t\tif (donationInputValue !== donationAmount) {\r\n\t\t\tonDonationChange?.(ticket.id, donationInputValue);\r\n\t\t}\r\n\t}\r\n\r\n\t// Price display — show total inclusive of fees (matching production TicketBlock.svelte)\r\n\tlet totalPrice = $derived(isDonation ? 0 : ticket.price + (ticket.price === 0 ? 0 : ticket.fee));\r\n\tlet priceDisplay = $derived(\r\n\t\tisDonation ? '' : ticket.price === 0 ? (labels.free || 'Free') : `{formatCurrency(totalPrice as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}`\r\n\t);\r\n\tlet feeCaption = $derived(\r\n\t\t!isDonation && ticket.fee > 0 && ticket.price > 0 ? `incl. {formatCurrency(ticket.fee as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)} ${labels.fee || 'fee'}` : ''\r\n\t);\r\n\r\n\t// Sales start display for coming soon tickets\r\n\tlet salesStartDisplay = $derived(\r\n\t\tisComingSoon && ticket.salesStartDate\r\n\t\t\t? `Sales start ${formatSmartSalesDate(ticket.salesStartDate)}`\r\n\t\t\t: isComingSoon\r\n\t\t\t\t? 'Coming soon'\r\n\t\t\t\t: ''\r\n\t);\r\n</script>\r\n\r\n<article\r\n\tclass=\"ticket-card rounded-lg border p-4 transition-all\"\r\n\tclass:selected={isSelected}\r\n\tclass:disabled-ticket={isDisabled}\r\n\tclass:revealed={isRevealedByPromo && !isDisabled}\r\n\tstyle=\"transition-duration: {DURATION.normal}ms;\"\r\n>\r\n\t<div class=\"vc-flex-between-start gap-4\">\r\n\t\t<!-- Ticket info -->\r\n\t\t<div class=\"flex-1 min-w-0\">\r\n\t\t\t<div class=\"flex-row-2 flex-wrap\">\r\n\t\t\t\t<Heading level={4} size=\"sm\" weight=\"semibold\">\r\n\t\t\t\t\t{ticket.name}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t{#if isSoldOut}\r\n\t\t\t\t\t<Badge variant=\"error\">{labels.soldOut || 'Sold out'}</Badge>\r\n\t\t\t\t{:else if isSalesEnded}\r\n\t\t\t\t\t<Badge variant=\"neutral\">Sales ended</Badge>\r\n\t\t\t\t{:else if isRevealedByPromo}\r\n\t\t\t\t\t<Badge variant=\"success\">Unlocked</Badge>\r\n\t\t\t\t{:else if isDiscountedByPromo}\r\n\t\t\t\t\t<Badge variant=\"green\">Discount applied</Badge>\r\n\t\t\t\t{:else if scarcityText && !isComingSoon}\r\n\t\t\t\t\t<ScarcityBadge\r\n\t\t\t\t\t\tremaining={ticket.quantityAvailable}\r\n\t\t\t\t\t\ttotal={ticket.quantityTotal}\r\n\t\t\t\t\t\tcontext=\"ticket\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t{#if ticket.description}\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block mt-1 line-clamp-2\">\r\n\t\t\t\t\t{ticket.description}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Price row -->\r\n\t\t\t<div class=\"flex-row-2 mt-2\">\r\n\t\t\t\t{#if isDonation}\r\n\t\t\t\t\t<!-- Donation: $ input -->\r\n\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t\t\t<div class=\"donation-input-wrapper\" oninput={syncDonation}>\r\n\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\tlabel=\"Donation amount\"\r\n\t\t\t\t\t\t\tsize=\"md\"\r\n\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\tplaceholder=\"0.00\"\r\n\t\t\t\t\t\t\tbind:value={donationInputValue}\r\n\t\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\t\terrorText={donationError}\r\n\t\t\t\t\t\t\tcolor={donationError ? 'red' : 'base'}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t{:else if isDiscountedByPromo && discountedPrice !== null}\r\n\t\t\t\t\t<!-- Discounted: strikethrough original total + discounted total (both inclusive of fee) -->\r\n\t\t\t\t\t{@const discountedTotal = discountedPrice + (discountedPrice === 0 ? 0 : ticket.fee)}\r\n\t\t\t\t\t<span class=\"price-strikethrough\">{formatCurrency(totalPrice as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}</span>\r\n\t\t\t\t\t<span class=\"price-discounted\">{formatCurrency(discountedTotal as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}</span>\r\n\t\t\t\t\t{#if feeCaption}\r\n\t\t\t\t\t\t<span class=\"price-fee\">{feeCaption}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t{:else if isComingSoon}\r\n\t\t\t\t\t<!-- Coming soon: show price dimmed -->\r\n\t\t\t\t\t<span class=\"price-lg text-color-muted\">{priceDisplay}</span>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<!-- Standard price -->\r\n\t\t\t\t\t<span class=\"price-lg text-color-primary\">{priceDisplay}</span>\r\n\t\t\t\t\t{#if feeCaption}\r\n\t\t\t\t\t\t<span class=\"price-fee\">{feeCaption}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- Coming soon / sales ended message -->\r\n\t\t\t{#if salesStartDisplay}\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block mt-1.5\">\r\n\t\t\t\t\t{salesStartDisplay}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\r\n\t\t<!-- Quantity controls -->\r\n\t\t<div class=\"flex items-center quantity-selector\" class:active={isSelected}>\r\n\t\t\t{#if isSoldOut || isComingSoon || isSalesEnded}\r\n\t\t\t\t<!-- No controls for coming soon / sales ended -->\r\n\t\t\t{:else}\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"alternative\"\r\n\t\t\t\t\tsize=\"icon-lg\"\r\n\t\t\t\t\tonclick={decrement}\r\n\t\t\t\t\tdisabled={!canDecrement}\r\n\t\t\t\t\taria-label=\"{labels.decrease || 'Decrease'} {ticket.name} {labels.quantity || 'quantity'}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Subtract size={16} />\r\n\t\t\t\t</Button>\r\n\r\n\t\t\t\t<span\r\n\t\t\t\t\tclass=\"qty-display\"\r\n\t\t\t\t\taria-live=\"polite\"\r\n\t\t\t\t\taria-label=\"{ticket.name} {labels.quantity || 'quantity'}: {quantity}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{quantity}\r\n\t\t\t\t</span>\r\n\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"alternative\"\r\n\t\t\t\t\tsize=\"icon-lg\"\r\n\t\t\t\t\tonclick={increment}\r\n\t\t\t\t\tdisabled={!canIncrement}\r\n\t\t\t\t\taria-label=\"{labels.increase || 'Increase'} {ticket.name} {labels.quantity || 'quantity'}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Add size={16} />\r\n\t\t\t\t</Button>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t</div>\r\n</article>\r\n\r\n<style>\r\n\t/* Card states using HSL CSS variables (matching TicketBlock.svelte) */\r\n\t.ticket-card {\r\n\t\tborder-color: hsl(var(--stroke-secondary, 220 13% 91%));\r\n\t\tbackground-color: hsl(var(--ts-card-bg, var(--bg-primary, 0 0% 100%)));\r\n\t}\r\n\r\n\t.ticket-card.selected {\r\n\t\tborder-color: hsl(var(--brand-primary, 211 100% 50%));\r\n\t\tbox-shadow: 0 0 0 1px hsl(var(--brand-primary, 211 100% 50%));\r\n\t}\r\n\r\n\t.ticket-card.revealed {\r\n\t\tborder-color: hsl(var(--accent-success) / 50%);\r\n\t\tbackground-color: hsl(var(--accent-success) / 8%);\r\n\t}\r\n\r\n\t.ticket-card.disabled-ticket {\r\n\t\topacity: 0.5;\r\n\t}\r\n\r\n\t/* Quantity selector */\r\n\t.quantity-selector {\r\n\t\tgap: 0.5rem;\r\n\t\tuser-select: none;\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t.qty-display {\r\n\t\tmin-width: 2rem;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\tfont-size: 1.125rem;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: hsl(var(--text-primary, 222 47% 11%));\r\n\t\tuser-select: none;\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t/* Discounted price green text */\r\n\t.price-discounted {\r\n\t\tfont-size: 0.875rem;\r\n\t\tline-height: 1.25rem;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: hsl(var(--accent-success)); /* green-600 */\r\n\t}\r\n\r\n\t/* Donation input wrapper */\r\n\t.donation-input-wrapper {\r\n\t\tmin-width: 10rem;\r\n\t}\r\n\r\n .ticket-card {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--stroke-secondary, 215 19% 35%));\r\n\t\tbackground-color: hsl(var(--ts-card-bg, var(--bg-primary, 222 47% 11%)));\r\n\t }\r\n }\r\n\r\n .ticket-card.revealed {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--accent-success)); /* green-700 */\r\n\t\tbackground-color: hsl(var(--accent-success));\r\n\t }\r\n }\r\n\r\n .qty-display {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tcolor: hsl(var(--text-primary, 0 0% 100%));\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n import type { USD } from '@getmicdrop/svelte-components';\r\n import { Calendar } from 'carbon-icons-svelte';\r\n import {\r\n Badge,\r\n Button,\r\n Card,\r\n Heading,\r\n Text,\r\n formatCurrency,\r\n } from '@getmicdrop/svelte-components';\r\n import ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n import type {\r\n EventData,\r\n OrderTotals,\r\n CtaConfig,\r\n ScarcityLevel,\r\n } from '$lib/premium-ticket-experience/types';\r\n import {\r\n getCtaConfig,\r\n getPriceDisplay,\r\n getScarcityLevel,\r\n getScarcityText,\r\n formatBrowseDate,\r\n formatEventTime,\r\n DURATION,\r\n } from '$lib/premium-ticket-experience/defaults';\r\n import OrderSummary from './OrderSummary.svelte';\r\n\r\n interface Props {\r\n event: EventData;\r\n orderTotals: OrderTotals;\r\n hasSelectedTickets: boolean;\r\n onCheckout: () => void;\r\n promoApplied?: boolean;\r\n labels?: Record<string, string>;\r\n }\r\n\r\n let {\r\n event,\r\n orderTotals,\r\n hasSelectedTickets,\r\n onCheckout,\r\n promoApplied = false,\r\n labels = {},\r\n }: Props = $props();\r\n\r\n let ctaConfig: CtaConfig = $derived(getCtaConfig(event));\r\n let priceDisplay = $derived(getPriceDisplay(event));\r\n let scarcityLevel: ScarcityLevel = $derived(\r\n getScarcityLevel(event.totalTicketsRemaining, event.totalTicketsCapacity)\r\n );\r\n let scarcityText = $derived(\r\n getScarcityText(scarcityLevel, event.totalTicketsRemaining, 'event')\r\n );\r\n let isFreeEvent = $derived(\r\n (() => {\r\n const visible = event.tickets.filter(\r\n t => t.status === 'on_sale' && !t.isHidden\r\n );\r\n return visible.length > 0 && visible.every(t => t.price === 0);\r\n })()\r\n );\r\n\r\n function scrollToTickets() {\r\n if (typeof document === 'undefined') return;\r\n const section = document.getElementById('desktop-ticket-section');\r\n if (section) {\r\n section.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n }\r\n }\r\n</script>\r\n\r\n<!--\r\n BookingWidget: Airbnb-style sticky sidebar card.\r\n Transitions from \"informational\" to \"cart\" mode with no skeleton placeholders.\r\n Password protection is handled at the widget/browse level, not on the event page.\r\n-->\r\n{#if event.status === 'on_sale' && hasSelectedTickets}\r\n <!--\r\n FILLED STATE: cap the card to the viewport so a long order summary\r\n can't push the Checkout button below the fold. Body scrolls; button\r\n stays pinned at the bottom of the card.\r\n -->\r\n <Card\r\n border\r\n padding={false}\r\n class=\"flex flex-col max-h-[calc(100vh-3rem)] rounded-xl shadow-lg overflow-hidden bg-surface-secondary\"\r\n >\r\n <div\r\n class=\"flex flex-col flex-1 min-h-0\"\r\n style=\"animation: widgetFadeIn {DURATION.normal}ms ease-out;\"\r\n >\r\n <div class=\"p-5 flex-1 overflow-y-auto min-h-0\">\r\n <OrderSummary {orderTotals} />\r\n </div>\r\n <div class=\"p-5 pt-3 shrink-0 border-t border-default\">\r\n <Button variant=\"default\" size=\"lg\" class=\"w-full\" onclick={onCheckout}>\r\n {#if isFreeEvent}\r\n {event.isRegistrationEvent\r\n ? labels.reserveASpot || 'Reserve a spot'\r\n : labels.getTickets || 'Get tickets'} · Free\r\n {:else}\r\n {labels.checkout || 'Checkout'} · {formatCurrency(\r\n orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */\r\n )}\r\n {/if}\r\n </Button>\r\n </div>\r\n </div>\r\n </Card>\r\n{:else}\r\n <Card\r\n border\r\n padding={false}\r\n class=\"rounded-xl shadow-lg overflow-hidden bg-surface-secondary\"\r\n >\r\n <div class=\"p-5\">\r\n {#if event.status === 'on_sale'}\r\n <!-- ON SALE: informational empty state (filled state handled in the sibling branch above) -->\r\n <div class=\"space-y-3\">\r\n <!-- Price display -->\r\n <div class=\"flex items-baseline gap-2\">\r\n {#if priceDisplay}\r\n <span class=\"price-lg text-color-primary text-xl\">\r\n {priceDisplay}\r\n </span>\r\n {:else if isFreeEvent}\r\n <span class=\"price-lg text-color-primary text-xl\"> Free </span>\r\n {/if}\r\n </div>\r\n\r\n <!-- Event date/time summary (compact) -->\r\n <div class=\"flex items-center gap-2\">\r\n <Calendar size={16} class=\"shrink-0 icon-muted\" />\r\n {#if event.displayStartTime !== false}\r\n <span class=\"body-sm\"\r\n >{formatBrowseDate(event.startDateTime, event.timezone)} ·\r\n {formatEventTime(event.startDateTime, event.timezone)}</span\r\n >\r\n {:else}\r\n <span class=\"body-sm\"\r\n >{formatBrowseDate(event.startDateTime, event.timezone)}</span\r\n >\r\n {/if}\r\n </div>\r\n\r\n <!-- Scarcity badge -->\r\n {#if scarcityText}\r\n <div>\r\n <ScarcityBadge\r\n remaining={event.totalTicketsRemaining}\r\n total={event.totalTicketsCapacity}\r\n context=\"event\"\r\n />\r\n </div>\r\n {/if}\r\n\r\n <!-- Promo applied badge -->\r\n {#if promoApplied}\r\n <div>\r\n <Badge variant=\"success\"\r\n >{labels.promoApplied || 'Promo applied'}</Badge\r\n >\r\n </div>\r\n {/if}\r\n\r\n <!-- Divider -->\r\n <div class=\"divider\"></div>\r\n\r\n <!-- CTA: scroll to ticket section -->\r\n <Button\r\n variant=\"default\"\r\n size=\"lg\"\r\n class=\"w-full\"\r\n onclick={scrollToTickets}\r\n >\r\n {#if event.isRegistrationEvent}\r\n Reserve a spot\r\n {:else}\r\n Get tickets\r\n {/if}\r\n </Button>\r\n </div>\r\n {:else if event.status === 'sold_out'}\r\n <!-- SOLD OUT: just the disabled CTA, tickets still shown in left column -->\r\n <div class=\"space-y-3\">\r\n <Button variant=\"default\" size=\"lg\" class=\"w-full\" disabled={true}>\r\n Sold out\r\n </Button>\r\n </div>\r\n {:else}\r\n <!-- OTHER DISABLED STATES: cancelled, past, sales_ended, coming_soon -->\r\n <div class=\"space-y-3\">\r\n <Heading weight=\"semibold\">\r\n {ctaConfig.text}\r\n </Heading>\r\n {#if ctaConfig.reason}\r\n <Text size=\"sm\" color=\"secondary\" class=\"block\">\r\n {ctaConfig.reason}\r\n </Text>\r\n {/if}\r\n <Button variant=\"default\" size=\"lg\" class=\"w-full\" disabled={true}>\r\n {ctaConfig.text}\r\n </Button>\r\n </div>\r\n {/if}\r\n </div>\r\n </Card>\r\n{/if}\r\n\r\n<style>\r\n @keyframes widgetFadeIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(-4px);\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n\r\n /*\r\n * The filled-state card uses max-h-[calc(100vh-3rem)] inline (see Card\r\n * class above) to cap height to the viewport so the Checkout button\r\n * never falls below the fold when many ticket types are selected.\r\n * 3rem reserves the sticky top-6 offset (1.5rem) and an equal bottom gap.\r\n */\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Heading, Text } from '@getmicdrop/svelte-components';\r\n\r\n\tinterface Props {\r\n\t\tdescription: string;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { description, labels = {}, }: Props = $props();\r\n\r\n\tlet paragraphs = $derived(\r\n\t\tdescription.split('\\n\\n').filter((p) => p.trim().length > 0)\r\n\t);\r\n</script>\r\n\r\n<section>\r\n\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-3\">About</Heading>\r\n\t<div class=\"space-y-4\">\r\n\t\t{#each paragraphs as paragraph}\r\n\t\t\t<Text size=\"sm\" color=\"secondary\" leading=\"relaxed\" class=\"block\">\r\n\t\t\t\t{paragraph}\r\n\t\t\t</Text>\r\n\t\t{/each}\r\n\t</div>\r\n</section>\r\n","<script lang=\"ts\">\r\n\timport { Avatar, Card, Heading } from '@getmicdrop/svelte-components';\r\n\timport type { PerformerData } from '$lib/premium-ticket-experience/types';\r\n\r\n\tinterface Props {\r\n\t\tperformers: PerformerData[];\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { performers, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n{#if performers.length > 0}\r\n\t<section>\r\n\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Performers</Heading>\r\n\t\t<div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n\t\t\t{#each performers as performer (performer.id)}\r\n\t\t\t\t<Card padding={false} class=\"flex items-center gap-3 p-3 bg-surface-secondary shadow-none\">\r\n\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\tsrc={performer.profileImage || ''}\r\n\t\t\t\t\t\talt={performer.displayName}\r\n\t\t\t\t\t\tinitials={performer.displayName.charAt(0)}\r\n\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\tclass=\"shrink-0 rounded-lg\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div class=\"min-w-0\">\r\n\t\t\t\t\t\t<Heading level={4} size=\"sm\" weight=\"semibold\" class=\"truncate\">\r\n\t\t\t\t\t\t\t{performer.displayName}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Card>\r\n\t\t\t{/each}\r\n\t\t</div>\r\n\t</section>\r\n{/if}\r\n\r\n","<script lang=\"ts\">\r\n\timport { Accordion, AccordionItem, Heading } from '@getmicdrop/svelte-components';\r\n\timport type { FAQItem } from '$lib/premium-ticket-experience/types';\r\n\r\n\tinterface Props {\r\n\t\tfaqs: FAQItem[];\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { faqs, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n{#if faqs.length > 0}\r\n\t<section class=\"faq-section\">\r\n\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-3\">\r\n\t\t\tFrequently asked questions\r\n\t\t</Heading>\r\n\t\t<Accordion flush>\r\n\t\t\t{#each faqs as faq (faq.question)}\r\n\t\t\t\t<AccordionItem>\r\n\t\t\t\t\t{#snippet header()}{faq.question}{/snippet}\r\n\t\t\t\t\t{faq.answer}\r\n\t\t\t\t</AccordionItem>\r\n\t\t\t{/each}\r\n\t\t</Accordion>\r\n\t</section>\r\n{/if}\r\n\r\n<style>\r\n\t/* Override AccordionItem's hardcoded gray background — FAQ headers should be transparent */\r\n\t.faq-section :global(button) {\r\n\t\tbackground-color: transparent !important;\r\n\t}\r\n\r\n\t.faq-section :global(button:hover) {\r\n\t\tbackground-color: hsl(var(--bg-secondary, 210 20% 98%)) !important;\r\n\t}\r\n\r\n\t/* Fix chevron direction: point DOWN when closed, UP when open.\r\n\t AccordionItem uses ChevronUpOutline (points up by default) and adds rotate-180 when open.\r\n\t We invert it: rotate 180° by default (down), remove rotation when open (up). */\r\n\t.faq-section :global(button svg) {\r\n\t\ttransform: rotate(180deg) !important;\r\n\t\ttransition: transform 200ms ease;\r\n\t}\r\n\r\n\t.faq-section :global(button[aria-expanded=\"true\"] svg) {\r\n\t\ttransform: rotate(0deg) !important;\r\n\t}\r\n\r\n .faq-section :global(button:hover) {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tbackground-color: hsl(var(--bg-secondary, 217 33% 17%)) !important;\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n import type { USD } from '@getmicdrop/svelte-components';\r\n import { ChevronUp, ChevronDown } from 'carbon-icons-svelte';\r\n import {\r\n Button,\r\n Text,\r\n Heading,\r\n formatCurrency,\r\n } from '@getmicdrop/svelte-components';\r\n import type {\r\n EventData,\r\n OrderTotals,\r\n CtaConfig,\r\n } from '$lib/premium-ticket-experience/types';\r\n import {\r\n getCtaConfig,\r\n getPriceDisplay,\r\n DURATION,\r\n } from '$lib/premium-ticket-experience/defaults';\r\n import OrderSummary from './OrderSummary.svelte';\r\n\r\n interface Props {\r\n event: EventData;\r\n orderTotals: OrderTotals;\r\n hasSelectedTickets: boolean;\r\n onCheckout: () => void;\r\n labels?: Record<string, string>;\r\n }\r\n\r\n let {\r\n event,\r\n orderTotals,\r\n hasSelectedTickets,\r\n onCheckout,\r\n labels = {},\r\n }: Props = $props();\r\n\r\n let ctaConfig: CtaConfig = $derived(getCtaConfig(event));\r\n let priceDisplay = $derived(getPriceDisplay(event));\r\n let totalTicketCount = $derived(\r\n orderTotals.lines.reduce((sum, l) => sum + l.quantity, 0)\r\n );\r\n let isFreeEvent = $derived(\r\n (() => {\r\n const visible = event.tickets.filter(\r\n t => t.status === 'on_sale' && !t.isHidden\r\n );\r\n return visible.length > 0 && visible.every(t => t.price === 0);\r\n })()\r\n );\r\n\r\n // Drawer state\r\n let drawerOpen = $state(false);\r\n\r\n function scrollToTickets() {\r\n if (typeof document === 'undefined') return;\r\n const section = document.getElementById('mobile-ticket-section');\r\n if (section) {\r\n section.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n }\r\n }\r\n\r\n function handleCtaClick() {\r\n if (ctaConfig.disabled) return;\r\n\r\n if (hasSelectedTickets) {\r\n onCheckout();\r\n } else {\r\n scrollToTickets();\r\n }\r\n }\r\n\r\n function toggleDrawer() {\r\n drawerOpen = !drawerOpen;\r\n }\r\n\r\n function closeDrawer() {\r\n drawerOpen = false;\r\n }\r\n</script>\r\n\r\n<!-- Backdrop (when drawer open) -->\r\n{#if drawerOpen}\r\n <button\r\n type=\"button\"\r\n class=\"drawer-backdrop\"\r\n onclick={closeDrawer}\r\n aria-label=\"Close order summary\"\r\n ></button>\r\n{/if}\r\n\r\n<!-- Fixed bottom CTA bar for mobile (DICE-style) -->\r\n<div\r\n class=\"fixed bottom-0 left-0 right-0 z-40 md:hidden bg-surface-primary border-t border-default shadow-lg\"\r\n style=\"padding-bottom: env(safe-area-inset-bottom, 0);\"\r\n>\r\n <!-- Slide-up drawer (order summary) -->\r\n {#if hasSelectedTickets}\r\n <div\r\n class=\"drawer-panel border-default bg-surface-secondary\"\r\n class:drawer-open={drawerOpen}\r\n >\r\n <div class=\"px-4 pt-4 pb-3\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <Heading level={3} size=\"sm\" weight=\"semibold\">Order Summary</Heading>\r\n <Button\r\n variant=\"icon\"\r\n size=\"icon-sm\"\r\n onclick={toggleDrawer}\r\n aria-label=\"Close order summary\"\r\n >\r\n <ChevronDown size={20} />\r\n </Button>\r\n </div>\r\n <OrderSummary {orderTotals} />\r\n </div>\r\n </div>\r\n {/if}\r\n\r\n <!-- CTA bar -->\r\n <div\r\n class=\"flex items-center justify-between gap-3 px-4 py-3 transition-all\"\r\n style=\"transition-duration: {DURATION.normal}ms;\"\r\n >\r\n <!-- Left: dynamic info (tappable when tickets selected) -->\r\n <div class=\"flex-1 min-w-0\">\r\n {#if hasSelectedTickets}\r\n <!-- Has tickets: count + total — tappable to open drawer -->\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center gap-1.5 text-left\"\r\n onclick={toggleDrawer}\r\n >\r\n <Text size=\"sm\" class=\"font-semibold tabular-nums\">\r\n {totalTicketCount}\r\n {totalTicketCount === 1 ? 'ticket' : 'tickets'} ·\r\n {#if isFreeEvent}\r\n Free\r\n {:else}\r\n {formatCurrency(\r\n orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */\r\n )}\r\n {/if}\r\n </Text>\r\n <ChevronUp\r\n size={16}\r\n class=\"shrink-0 text-color-muted transition-transform {drawerOpen\r\n ? 'rotate-180'\r\n : ''}\"\r\n />\r\n </button>\r\n {:else if priceDisplay && !ctaConfig.disabled}\r\n <!-- No tickets yet, on sale: \"From $X\" -->\r\n <Text size=\"sm\" color=\"secondary\" class=\"font-medium block\">\r\n {priceDisplay}\r\n </Text>\r\n {:else if ctaConfig.reason}\r\n <!-- Disabled: show reason -->\r\n <Text size=\"xs\" color=\"muted\" class=\"block\">\r\n {ctaConfig.reason}\r\n </Text>\r\n {/if}\r\n </div>\r\n\r\n <!-- Right: CTA button -->\r\n <Button\r\n variant=\"default\"\r\n size=\"lg\"\r\n disabled={ctaConfig.disabled}\r\n onclick={handleCtaClick}\r\n class=\"shrink-0 min-w-32\"\r\n >\r\n {#if hasSelectedTickets}\r\n Checkout\r\n {:else}\r\n {ctaConfig.text}\r\n {/if}\r\n </Button>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n /* Drawer backdrop */\r\n .drawer-backdrop {\r\n position: fixed;\r\n inset: 0;\r\n z-index: var(--z-dropdown);\r\n background-color: rgb(0 0 0 / 40%);\r\n -webkit-tap-highlight-color: transparent;\r\n }\r\n\r\n @media (width >= 768px) {\r\n .drawer-backdrop {\r\n display: none;\r\n }\r\n }\r\n\r\n /* Drawer panel — slides up from above the CTA bar */\r\n .drawer-panel {\r\n border-top-width: 1px;\r\n border-top-style: solid;\r\n max-height: 0;\r\n overflow: hidden;\r\n opacity: 0;\r\n transition:\r\n max-height 300ms cubic-bezier(0.4, 0, 0.2, 1),\r\n opacity 200ms ease;\r\n }\r\n\r\n .drawer-panel.drawer-open {\r\n max-height: 400px;\r\n opacity: 1;\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n /**\r\n * Mock data toggle — horizontal bar matching the showcase variant nav.\r\n */\r\n import { Button } from '@getmicdrop/svelte-components';\r\n\r\n // Password removed: handled at widget/browse level, not event page\r\n type DataVariant =\r\n | 'default'\r\n | 'sold_out'\r\n | 'free'\r\n | 'registration'\r\n | 'series'\r\n | 'series_instance'\r\n | 'collection'\r\n | 'donation'\r\n | 'mixed'\r\n | 'sections'\r\n | 'promo'\r\n | 'hidden_only'\r\n | 'multi_stage'\r\n | 'long'\r\n | 'wide';\r\n\r\n interface Props {\r\n current: DataVariant;\r\n onChange: (variant: DataVariant) => void;\r\n }\r\n\r\n let { current, onChange }: Props = $props();\r\n\r\n const options: { value: DataVariant; label: string; color: string }[] = [\r\n { value: 'default', label: 'On sale', color: 'bg-accent-success' },\r\n { value: 'sold_out', label: 'Sold out', color: 'bg-muted-foreground' },\r\n { value: 'free', label: 'Free', color: 'bg-sky-500' },\r\n { value: 'registration', label: 'Registration', color: 'bg-brand-primary' },\r\n { value: 'series', label: 'Series', color: 'bg-brand-primary' },\r\n { value: 'series_instance', label: 'Instance', color: 'bg-violet-500' },\r\n { value: 'collection', label: 'Collection', color: 'bg-fuchsia-500' },\r\n { value: 'donation', label: 'Donation', color: 'bg-accent-danger' },\r\n { value: 'mixed', label: 'Mixed', color: 'bg-status-warning-bg0' },\r\n { value: 'sections', label: 'Sections', color: 'bg-brand-primary' },\r\n { value: 'promo', label: 'Promo codes', color: 'bg-accent-success' },\r\n { value: 'hidden_only', label: 'Hidden only', color: 'bg-accent-success' },\r\n { value: 'multi_stage', label: 'Multi-stage', color: 'bg-accent-danger' },\r\n { value: 'long', label: 'Long name', color: 'bg-accent-warning' },\r\n { value: 'wide', label: 'Wide image', color: 'bg-teal-500' },\r\n ];\r\n</script>\r\n\r\n<div class=\"toggle-bar bg-surface-primary border-default\">\r\n <span class=\"toggle-label text-color-muted\">Data</span>\r\n {#each options as option}\r\n {@const isActive = current === option.value}\r\n <Button\r\n variant=\"ghost\"\r\n active={isActive}\r\n onclick={() => onChange(option.value)}\r\n class=\"toggle-btn {isActive\r\n ? 'active bg-surface-secondary text-color-primary font-medium'\r\n : 'text-color-tertiary hover:bg-surface-secondary hover:text-color-secondary'}\"\r\n >\r\n <span class=\"w-1.5 h-1.5 rounded-full {option.color} shrink-0\"></span>\r\n {option.label}\r\n </Button>\r\n {/each}\r\n</div>\r\n\r\n<style>\r\n .toggle-bar {\r\n position: sticky;\r\n top: 0;\r\n z-index: var(--z-dropdown);\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n padding: 0.5rem 0.75rem;\r\n overflow-x: auto;\r\n border-bottom-width: 1px;\r\n border-bottom-style: solid;\r\n }\r\n\r\n .toggle-label {\r\n padding-left: 0.375rem;\r\n padding-right: 0.375rem;\r\n flex-shrink: 0;\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n font-size: 0.625rem;\r\n }\r\n\r\n .toggle-btn {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.375rem;\r\n padding: 0.25rem 0.5rem;\r\n border-radius: 0.375rem;\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n white-space: nowrap;\r\n transition-property: all;\r\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n transition-duration: 150ms;\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Input, Button } from '@getmicdrop/svelte-components';\r\n\timport type { PromoCodeState } from '$lib/premium-ticket-experience/types';\r\n\timport { DURATION } from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tpromoState: PromoCodeState;\r\n\t\tonApply: (code: string) => void;\r\n\t\tonRemove: () => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { promoState, onApply, onRemove, labels = {}, }: Props = $props();\r\n\r\n\tlet isExpanded = $state(false);\r\n\tlet inputValue = $state('');\r\n\r\n\tfunction handleApply() {\r\n\t\tconst trimmed = inputValue.trim();\r\n\t\tif (!trimmed) return;\r\n\t\tonApply(trimmed);\r\n\t}\r\n\r\n\tfunction handleRemove() {\r\n\t\tinputValue = '';\r\n\t\tonRemove();\r\n\t}\r\n\r\n\tfunction handleKeydown(e: KeyboardEvent) {\r\n\t\tif (e.key === 'Enter') {\r\n\t\t\te.preventDefault();\r\n\t\t\thandleApply();\r\n\t\t}\r\n\t}\r\n\r\n\t// Auto-expand when promo is applied (e.g. on restore)\r\n\tlet shouldExpand = $derived(promoState.isApplied || isExpanded);\r\n</script>\r\n\r\n<div class=\"promo-section\" role=\"group\" aria-labelledby=\"promo-label\">\r\n\t<span id=\"promo-label\" class=\"sr-only\">Promo code entry</span>\r\n\t{#if !shouldExpand}\r\n\t\t<Button variant=\"link\" onclick={() => (isExpanded = true)}>\r\n\t\t\t{labels.havePromoCode || 'Have a promo code?'}\r\n\t\t</Button>\r\n\t{:else}\r\n\t\t<div\r\n\t\t\tclass=\"space-y-2\"\r\n\t\t\tstyle=\"animation: promoSlideIn {DURATION.normal}ms ease-out;\"\r\n\t\t>\r\n\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t<div class=\"promo-input-wrapper\" onkeydown={handleKeydown}>\r\n\t\t\t\t<div class=\"flex-1\">\r\n\t\t\t\t\t<Input\r\n\t\t\t\t\t\tlabel={labels.promoCode || 'Promo code'}\r\n\t\t\t\t\t\tplaceholder={labels.enterCode || 'Enter code'}\r\n\t\t\t\t\t\tsize=\"md\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tbind:value={inputValue}\r\n\t\t\t\t\t\tdisabled={promoState.isApplied || promoState.isValidating}\r\n\t\t\t\t\t\terrorText={promoState.error || ''}\r\n\t\t\t\t\t\tcolor={promoState.error ? 'red' : 'base'}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{#if promoState.isApplied}\r\n\t\t\t\t\t<Button strokebtn onclick={handleRemove} class=\"h-10 self-start mt-5\" aria-label={labels.removePromoCode || 'Remove promo code'}>\r\n\t\t\t\t\t\t{labels.remove || 'Remove'}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tonclick={handleApply}\r\n\t\t\t\t\t\tdisabled={promoState.isValidating || !inputValue.trim()}\r\n\t\t\t\t\t\tclass=\"h-10 self-start mt-5\"\r\n\t\t\t\t\t\taria-label={promoState.isValidating ? (labels.checkingPromoCode || 'Checking promo code') : (labels.applyPromoCode || 'Apply promo code')}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{promoState.isValidating ? (labels.checking || 'Checking...') : (labels.apply || 'Apply')}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- Success hint -->\r\n\t\t\t{#if promoState.hint}\r\n\t\t\t\t<p class=\"promo-message success body-sm\" role=\"status\" aria-live=\"polite\">\r\n\t\t\t\t\t{promoState.hint}\r\n\t\t\t\t</p>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.promo-section {\r\n\t\tmargin-top: 1rem;\r\n\t}\r\n\r\n\t.promo-input-wrapper {\r\n\t\tdisplay: flex;\r\n\t\tgap: 0.5rem;\r\n\t\talign-items: flex-start;\r\n\t}\r\n\r\n\t.promo-message {\r\n\t\tmargin-top: 0.5rem;\r\n\t}\r\n\r\n\t.promo-message.success {\r\n\t\tcolor: hsl(var(--accent-success)); /* green-600 */\r\n\t}\r\n\r\n\t@keyframes promoSlideIn {\r\n\t\tfrom {\r\n\t\t\topacity: 0;\r\n\t\t\ttransform: translateY(-4px);\r\n\t\t}\r\n\r\n\t\tto {\r\n\t\t\topacity: 1;\r\n\t\t\ttransform: translateY(0);\r\n\t\t}\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Button, Text } from '@getmicdrop/svelte-components';\r\n\timport type { EventData } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tformatFullDateCompact,\r\n\t\tformatEventTime,\r\n\t\tformatBrowseDate\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\tonShowtimeClick?: (occurrence: { id: number; slug: string }) => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, onShowtimeClick = undefined, labels = {}, }: Props = $props();\r\n\r\n\t// --- Data ---\r\n\ttype GroupedOccurrences = {\r\n\t\tdateLabel: string;\r\n\t\tdateKey: string;\r\n\t\toccurrences: NonNullable<EventData['seriesOccurrences']>;\r\n\t}[];\r\n\r\n\tlet groupedOccurrences: GroupedOccurrences = $derived((() => {\r\n\t\tif (!event.seriesOccurrences) return [];\r\n\t\tconst groups: Map<string, { dateLabel: string; occurrences: NonNullable<EventData['seriesOccurrences']> }> = new Map();\r\n\t\tfor (const occ of event.seriesOccurrences) {\r\n\t\t\tconst dateKey = formatBrowseDate(occ.startDateTime, event.timezone);\r\n\t\t\tif (!groups.has(dateKey)) {\r\n\t\t\t\tgroups.set(dateKey, {\r\n\t\t\t\t\tdateLabel: formatFullDateCompact(occ.startDateTime, event.timezone),\r\n\t\t\t\t\toccurrences: []\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tgroups.get(dateKey)!.occurrences.push(occ);\r\n\t\t}\r\n\t\treturn [...groups.entries()].map(([dateKey, g]) => ({\r\n\t\t\tdateKey,\r\n\t\t\tdateLabel: g.dateLabel,\r\n\t\t\toccurrences: g.occurrences\r\n\t\t}));\r\n\t})());\r\n\r\n\tfunction handleShowtimeClick(occ: { id: number; slug: string }) {\r\n\t\tif (onShowtimeClick) {\r\n\t\t\tonShowtimeClick(occ);\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<section>\r\n\t<div class=\"space-y-4\">\r\n\t\t{#each groupedOccurrences as group (group.dateKey)}\r\n\t\t\t<div>\r\n\t\t\t\t<Text size=\"sm\" class=\"font-semibold block mb-2\">\r\n\t\t\t\t\t{group.dateLabel}\r\n\t\t\t\t</Text>\r\n\t\t\t\t<div class=\"space-y-2\">\r\n\t\t\t\t\t{#each group.occurrences as occ (occ.id)}\r\n\t\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclass=\"row-a border-default bg-surface-primary hover:bg-surface-secondary\"\r\n\t\t\t\t\t\t\tclass:row-disabled={occ.ctaDisabled}\r\n\t\t\t\t\t\t\tonclick={() => !occ.ctaDisabled && handleShowtimeClick({ id: occ.id, slug: occ.slug })}\r\n\t\t\t\t\t\t\tonkeydown={(e: KeyboardEvent) => e.key === 'Enter' && !occ.ctaDisabled && handleShowtimeClick({ id: occ.id, slug: occ.slug })}\r\n\t\t\t\t\t\t\ttabindex={occ.ctaDisabled ? -1 : 0}\r\n\t\t\t\t\t\t\trole=\"link\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{#if event.displayStartTime !== false}\r\n\t\t\t\t\t\t\t\t<Text size=\"sm\" class=\"font-medium\">\r\n\t\t\t\t\t\t\t\t\t{formatEventTime(occ.startDateTime, event.timezone)}\r\n\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\tvariant={occ.ctaDisabled ? 'alternative' : 'default'}\r\n\t\t\t\t\t\t\t\tdisabled={occ.ctaDisabled}\r\n\t\t\t\t\t\t\t\tclass=\"shrink-0 pointer-events-none\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{occ.ctaText}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/each}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{/each}\r\n\t</div>\r\n</section>\r\n\r\n<style>\r\n\t/* === Shared === */\r\n\t.row-disabled {\r\n\t\topacity: 0.5;\r\n\t\tcursor: default;\r\n\t}\r\n\r\n\t/* === Design A: Full-width rows === */\r\n\t.row-a {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 0.75rem;\r\n\t\tpadding: 0.75rem;\r\n\t\tborder-radius: 0.5rem;\r\n\t\tborder-width: 1px;\r\n\t\tborder-style: solid;\r\n\t\tcursor: pointer;\r\n\t\ttransition-property: all;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n\r\n\t.row-a:hover:not(.row-disabled) {\r\n\t\tborder-color: hsl(var(--stroke-primary)); /* gray-300 */\r\n\t}\r\n\r\n .row-a:hover:not(.row-disabled) {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--stroke-primary)); /* gray-600 */\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n import type { USD } from '@getmicdrop/svelte-components';\r\n import { Heading, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n import { toast } from '@getmicdrop/svelte-components/toast';\r\n import type {\r\n EventData,\r\n OrderTotals,\r\n OrderLine,\r\n PromoCodeState,\r\n } from '$lib/premium-ticket-experience/types';\r\n import {\r\n mockEvent,\r\n mockSoldOutEvent,\r\n mockFreeEvent,\r\n mockSeriesEvent,\r\n mockSeriesInstanceEvent,\r\n mockCollectionEvent,\r\n mockRegistrationEvent,\r\n mockDonationEvent,\r\n mockMixedEvent,\r\n mockSectionedEvent,\r\n mockPromoEvent,\r\n mockHiddenOnlyEvent,\r\n mockMultiStageEvent,\r\n mockLongNameEvent,\r\n mockWideImageEvent,\r\n } from '$lib/premium-ticket-experience/mock-data';\r\n import {\r\n calculateTax,\r\n createDefaultPromoState,\r\n DURATION,\r\n } from '$lib/premium-ticket-experience/defaults';\r\n\r\n import HeroImage from './HeroImage.svelte';\r\n import EventHeader from './EventHeader.svelte';\r\n import TicketCard from './TicketCard.svelte';\r\n import BookingWidget from './BookingWidget.svelte';\r\n import AboutSection from './AboutSection.svelte';\r\n import PerformerGrid from './PerformerGrid.svelte';\r\n import FaqAccordion from './FaqAccordion.svelte';\r\n import MobileCta from './MobileCta.svelte';\r\n import DataToggle from './DataToggle.svelte';\r\n import PromoCodeInput from './PromoCodeInput.svelte';\r\n import ShowtimeDesigns from './ShowtimeDesigns.svelte';\r\n import GalleryCard from '../../../../components/Calendar/GalleryCard.svelte';\r\n import { mergeLabels } from '$lib/premium-ticket-experience/i18n/labels.js';\r\n\r\n // --- Props (dual-mode: showcase vs production) ---\r\n interface Props {\r\n /** Real event data from production route. Absence = showcase mode. */\r\n event?: EventData;\r\n /** Production checkout handler. Called with OrderTotals. */\r\n onCheckout?: (orderTotals: OrderTotals) => void;\r\n /** Production promo validation. Must return PromoCodeState from API. */\r\n onPromoApply?: (code: string) => Promise<PromoCodeState>;\r\n /** Production promo removal. */\r\n onPromoRemove?: () => void;\r\n /** Production collection event navigation. */\r\n onCollectionEventClick?: (event: {\r\n id?: number | string;\r\n slug: string;\r\n }) => void;\r\n /** Production showtime navigation for series events. */\r\n onShowtimeClick?: (occurrence: { id: number; slug: string }) => void;\r\n labels?: Record<string, string>;\r\n }\r\n\r\n let {\r\n event: eventProp = undefined,\r\n onCheckout: onCheckoutProp = undefined,\r\n onPromoApply: onPromoApplyProp = undefined,\r\n onPromoRemove: onPromoRemoveProp = undefined,\r\n onCollectionEventClick: onCollectionEventClickProp = undefined,\r\n onShowtimeClick: onShowtimeClickProp = undefined,\r\n labels = {},\r\n }: Props = $props();\r\n\r\n const mergedLabels = $derived(mergeLabels(labels));\r\n\r\n let isShowcaseMode = $derived(!eventProp);\r\n\r\n // --- State ---\r\n // Password removed: password protection is handled at the widget/browse level, not the event page\r\n type DataVariant =\r\n | 'default'\r\n | 'sold_out'\r\n | 'free'\r\n | 'registration'\r\n | 'series'\r\n | 'series_instance'\r\n | 'collection'\r\n | 'donation'\r\n | 'mixed'\r\n | 'sections'\r\n | 'promo'\r\n | 'hidden_only'\r\n | 'multi_stage'\r\n | 'long'\r\n | 'wide';\r\n let dataVariant = $state<DataVariant>('default');\r\n\r\n // Ticket quantities keyed by ticket ID\r\n let quantities: Record<number, number> = $state({});\r\n\r\n // Promo code state\r\n let promoState = $state<PromoCodeState>(createDefaultPromoState());\r\n\r\n // Donation amounts keyed by ticket ID\r\n let donationAmounts: Record<number, string> = $state({});\r\n\r\n // --- Derived: event selection ---\r\n let event: EventData = $derived(\r\n isShowcaseMode\r\n ? (() => {\r\n switch (dataVariant) {\r\n case 'sold_out':\r\n return mockSoldOutEvent;\r\n case 'free':\r\n return mockFreeEvent;\r\n case 'registration':\r\n return mockRegistrationEvent;\r\n case 'series':\r\n return mockSeriesEvent;\r\n case 'series_instance':\r\n return mockSeriesInstanceEvent;\r\n case 'collection':\r\n return mockCollectionEvent;\r\n case 'donation':\r\n return mockDonationEvent;\r\n case 'mixed':\r\n return mockMixedEvent;\r\n case 'sections':\r\n return mockSectionedEvent;\r\n case 'promo':\r\n return mockPromoEvent;\r\n case 'hidden_only':\r\n return mockHiddenOnlyEvent;\r\n case 'multi_stage':\r\n return mockMultiStageEvent;\r\n case 'long':\r\n return mockLongNameEvent;\r\n case 'wide':\r\n return mockWideImageEvent;\r\n default:\r\n return mockEvent;\r\n }\r\n })()\r\n : eventProp!\r\n );\r\n\r\n // Reset all state when variant changes\r\n $effect(() => {\r\n const _v = dataVariant;\r\n quantities = {};\r\n promoState = createDefaultPromoState();\r\n donationAmounts = {};\r\n });\r\n\r\n // Visible tickets (account for promo reveals)\r\n let visibleTickets = $derived(\r\n event.tickets.filter(t => {\r\n if (!t.isHidden) return true;\r\n if (promoState.revealHiddenTickets) return true;\r\n return promoState.revealTicketIds.includes(t.id);\r\n })\r\n );\r\n\r\n // MIC-1039 — hidden-only state. When the only purchasable tickets are\r\n // hidden behind a promo code, swap the ticket list for the PromoCodeInput\r\n // so the user has a way in instead of seeing nothing.\r\n let hasPurchasableHiddenTickets = $derived(\r\n event.tickets.some(t => t.isHidden && t.status === 'on_sale')\r\n );\r\n let isHiddenOnlyState = $derived(\r\n visibleTickets.length === 0 && hasPurchasableHiddenTickets\r\n );\r\n\r\n // Group tickets by section\r\n let groupedTickets = $derived(\r\n (() => {\r\n const groups: Record<string, typeof visibleTickets> = {};\r\n for (const ticket of visibleTickets) {\r\n const section = ticket.sectionName || '_default';\r\n if (!groups[section]) groups[section] = [];\r\n groups[section].push(ticket);\r\n }\r\n return groups;\r\n })()\r\n );\r\n\r\n let hasMultipleSections = $derived(\r\n Object.keys(groupedTickets).filter(k => k !== '_default').length > 0\r\n );\r\n\r\n // Show tickets for on_sale AND sold_out events (sold out shows them as disabled)\r\n let isOnSale = $derived(event.status === 'on_sale');\r\n let showTicketCards = $derived(\r\n (event.status === 'on_sale' || event.status === 'sold_out') &&\r\n visibleTickets.length > 0\r\n );\r\n\r\n // Calculate order totals (with donation amounts and promo discounts)\r\n let orderTotals: OrderTotals = $derived(\r\n (() => {\r\n const lines: OrderLine[] = [];\r\n let subtotal = 0;\r\n let fees = 0;\r\n let promoDiscount = 0;\r\n\r\n for (const ticket of event.tickets) {\r\n const qty = quantities[ticket.id] ?? 0;\r\n if (qty <= 0) continue;\r\n\r\n const isDonation = ticket.isDonation || ticket.ticketType === 2;\r\n const basePrice = isDonation\r\n ? parseFloat(donationAmounts[ticket.id]) || 0\r\n : ticket.price;\r\n const ticketFee = isDonation ? 0 : ticket.fee;\r\n\r\n // Calculate promo discount for this ticket\r\n let ticketDiscount = 0;\r\n if (\r\n promoState.isApplied &&\r\n promoState.discountAmount > 0 &&\r\n !isDonation\r\n ) {\r\n const eligible =\r\n promoState.discountTicketIds.length === 0 ||\r\n promoState.discountTicketIds.includes(ticket.id);\r\n if (eligible) {\r\n if (promoState.discountType === '%') {\r\n ticketDiscount = basePrice * (promoState.discountAmount / 100);\r\n } else if (promoState.discountType === '$') {\r\n ticketDiscount = Math.min(promoState.discountAmount, basePrice);\r\n }\r\n }\r\n }\r\n\r\n const effectivePrice = Math.max(0, basePrice - ticketDiscount);\r\n const ticketSubtotal = effectivePrice * qty;\r\n const totalTicketFee = ticketFee * qty;\r\n\r\n lines.push({\r\n ticketId: ticket.id,\r\n ticketName: ticket.name,\r\n quantity: qty,\r\n unitPrice: effectivePrice,\r\n fee: ticketFee,\r\n subtotal: ticketSubtotal,\r\n });\r\n\r\n subtotal += ticketSubtotal;\r\n fees += totalTicketFee;\r\n promoDiscount += ticketDiscount * qty;\r\n }\r\n\r\n const taxes = calculateTax(subtotal + fees, event.venue.taxPercentage);\r\n\r\n return {\r\n lines,\r\n subtotal,\r\n fees,\r\n taxes,\r\n total: subtotal + fees + taxes,\r\n promoDiscount,\r\n giftCardAmount: 0,\r\n };\r\n })()\r\n );\r\n\r\n let hasSelectedTickets = $derived(orderTotals.lines.length > 0);\r\n\r\n // Series occurrences — group by date for same-day shows\r\n let isSeries = $derived(!!event.eventSeriesId);\r\n\r\n // Collection — loose grouping of different events\r\n let isCollection = $derived(!!event.collectionId);\r\n\r\n // Full-width layout mode (no sidebar)\r\n let isFullWidth = $derived(isSeries || isCollection);\r\n\r\n // Collection events transformed to GalleryCard shape\r\n let galleryEvents = $derived(\r\n (event.collectionEvents ?? []).map(ce => ({\r\n ...ce,\r\n timeZone: event.timezone,\r\n }))\r\n );\r\n\r\n function handleCollectionEventClick(galleryEvent: { slug: string }) {\r\n if (onCollectionEventClickProp) {\r\n onCollectionEventClickProp(galleryEvent);\r\n } else {\r\n console.log('Navigate to collection event:', galleryEvent.slug);\r\n }\r\n }\r\n\r\n // --- Handlers ---\r\n function handleQuantityChange(ticketId: number, qty: number) {\r\n quantities = { ...quantities, [ticketId]: qty };\r\n }\r\n\r\n function handleDonationChange(ticketId: number, amount: string) {\r\n donationAmounts = { ...donationAmounts, [ticketId]: amount };\r\n }\r\n\r\n function handleCheckout() {\r\n if (onCheckoutProp) {\r\n onCheckoutProp(orderTotals);\r\n } else {\r\n console.log('Checkout:', orderTotals);\r\n const count = orderTotals.lines.reduce((s, l) => s + l.quantity, 0);\r\n toast.success(\r\n `Proceeding to checkout with ${count} ticket(s) totaling ${formatCurrency(orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}`\r\n );\r\n }\r\n }\r\n\r\n function handleDataVariantChange(v: DataVariant) {\r\n dataVariant = v;\r\n }\r\n\r\n // --- Promo handlers ---\r\n // Showcase test codes: REVEAL (unlocks hidden tickets), DISCOUNT10 (10% off), VIP20 ($20 off + reveal)\r\n function handlePromoApply(code: string) {\r\n if (onPromoApplyProp) {\r\n // Production mode: async API validation\r\n promoState = { ...promoState, isValidating: true, error: '', hint: '' };\r\n onPromoApplyProp(code)\r\n .then(result => {\r\n promoState = result;\r\n })\r\n .catch(() => {\r\n promoState = {\r\n ...createDefaultPromoState(),\r\n code: code.toUpperCase(),\r\n error: 'Failed to validate promo code',\r\n };\r\n });\r\n return;\r\n }\r\n\r\n // Showcase mode: mock validation\r\n const upper = code.toUpperCase();\r\n promoState = { ...promoState, isValidating: true, error: '', hint: '' };\r\n\r\n // Simulate async validation\r\n setTimeout(() => {\r\n if (upper === 'REVEAL') {\r\n promoState = {\r\n code: upper,\r\n isApplied: true,\r\n isValidating: false,\r\n error: '',\r\n hint: `${upper} applied. Hidden tickets are now visible.`,\r\n discountAmount: 0,\r\n discountType: '',\r\n discountTicketIds: [],\r\n revealHiddenTickets: true,\r\n revealTicketIds: [],\r\n };\r\n } else if (upper === 'DISCOUNT10') {\r\n promoState = {\r\n code: upper,\r\n isApplied: true,\r\n isValidating: false,\r\n error: '',\r\n hint: `${upper} applied. 10% off all tickets.`,\r\n discountAmount: 10,\r\n discountType: '%',\r\n discountTicketIds: [],\r\n revealHiddenTickets: false,\r\n revealTicketIds: [],\r\n };\r\n } else if (upper === 'VIP20') {\r\n promoState = {\r\n code: upper,\r\n isApplied: true,\r\n isValidating: false,\r\n error: '',\r\n hint: `${upper} applied. $20 off + hidden tickets revealed.`,\r\n discountAmount: 20,\r\n discountType: '$',\r\n discountTicketIds: [],\r\n revealHiddenTickets: true,\r\n revealTicketIds: [],\r\n };\r\n } else {\r\n promoState = {\r\n ...createDefaultPromoState(),\r\n code: upper,\r\n error: 'Invalid promo code',\r\n };\r\n }\r\n }, 800);\r\n }\r\n\r\n function handlePromoRemove() {\r\n // Always clean up hidden ticket quantities locally\r\n const hiddenIds = event.tickets.filter(t => t.isHidden).map(t => t.id);\r\n const newQuantities = { ...quantities };\r\n for (const id of hiddenIds) {\r\n delete newQuantities[id];\r\n }\r\n quantities = newQuantities;\r\n promoState = createDefaultPromoState();\r\n\r\n // Notify production caller\r\n if (onPromoRemoveProp) {\r\n onPromoRemoveProp();\r\n }\r\n }\r\n\r\n // Compute per-ticket promo info\r\n function getTicketPromoInfo(\r\n ticketId: number,\r\n ticket: {\r\n price: number;\r\n isDonation: boolean;\r\n isHidden: boolean;\r\n ticketType?: number;\r\n }\r\n ) {\r\n const isDonation = ticket.isDonation || ticket.ticketType === 2;\r\n const isRevealed =\r\n ticket.isHidden &&\r\n (promoState.revealHiddenTickets ||\r\n promoState.revealTicketIds.includes(ticketId));\r\n\r\n let isDiscounted = false;\r\n let discountedPrice: number | null = null;\r\n\r\n if (promoState.isApplied && promoState.discountAmount > 0 && !isDonation) {\r\n const eligible =\r\n promoState.discountTicketIds.length === 0 ||\r\n promoState.discountTicketIds.includes(ticketId);\r\n if (eligible) {\r\n isDiscounted = true;\r\n if (promoState.discountType === '%') {\r\n discountedPrice =\r\n ticket.price * (1 - promoState.discountAmount / 100);\r\n } else if (promoState.discountType === '$') {\r\n discountedPrice = Math.max(\r\n 0,\r\n ticket.price - promoState.discountAmount\r\n );\r\n }\r\n }\r\n }\r\n\r\n return { isRevealed, isDiscounted, discountedPrice };\r\n }\r\n</script>\r\n\r\n<div class=\"w-full min-h-screen bg-surface-primary text-color-primary\">\r\n <!-- Dev: mock data toggle (showcase mode only) -->\r\n {#if isShowcaseMode}\r\n <DataToggle current={dataVariant} onChange={handleDataVariantChange} />\r\n {/if}\r\n\r\n <div class=\"max-w-6xl mx-auto px-4 py-6 md:px-6 md:py-8\">\r\n <!-- Shared desktop content (rendered via snippet to avoid duplication) -->\r\n {#snippet desktopContent()}\r\n <!-- Hero image -->\r\n <HeroImage src={event.imageUrl} alt={event.title} labels={mergedLabels} />\r\n\r\n <!-- Event header (title, date, venue, stage, age, scarcity badge) -->\r\n <EventHeader\r\n {event}\r\n hideDateTime={isFullWidth}\r\n hideVenue={isCollection}\r\n labels={mergedLabels}\r\n />\r\n\r\n <!-- MIC-1039 — hidden-only state: just the promo input, no ticket scaffolding -->\r\n {#if isHiddenOnlyState && !isFullWidth}\r\n <section id=\"desktop-ticket-section\">\r\n <PromoCodeInput\r\n {promoState}\r\n onApply={handlePromoApply}\r\n onRemove={handlePromoRemove}\r\n labels={mergedLabels}\r\n />\r\n </section>\r\n <!-- INLINE TICKET SELECTION (hidden for series/collection — no single-event tickets) -->\r\n {:else if showTicketCards && !isFullWidth}\r\n <section id=\"desktop-ticket-section\">\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">\r\n {isOnSale\r\n ? labels.selectTickets || 'Select tickets'\r\n : labels.ticketsTab || 'Tickets'}\r\n </Heading>\r\n\r\n {#if hasMultipleSections}\r\n <!-- Sectioned tickets -->\r\n {#each Object.entries(groupedTickets) as [sectionName, sectionTickets] (sectionName)}\r\n <div class=\"mb-6 last:mb-0\">\r\n {#if sectionName !== '_default'}\r\n <Heading level={3} size=\"sm\" weight=\"semibold\" class=\"mb-3\">\r\n {sectionName}\r\n </Heading>\r\n {/if}\r\n <div class=\"space-y-3\">\r\n {#each sectionTickets as ticket (ticket.id)}\r\n {@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n <TicketCard\r\n {ticket}\r\n quantity={quantities[ticket.id] ?? 0}\r\n onQuantityChange={handleQuantityChange}\r\n donationAmount={donationAmounts[ticket.id] ?? ''}\r\n onDonationChange={handleDonationChange}\r\n isRevealedByPromo={promoInfo.isRevealed}\r\n isDiscountedByPromo={promoInfo.isDiscounted}\r\n discountedPrice={promoInfo.discountedPrice}\r\n labels={mergedLabels}\r\n />\r\n {/each}\r\n </div>\r\n </div>\r\n {/each}\r\n {:else}\r\n <!-- Flat ticket list -->\r\n <div class=\"space-y-3\">\r\n {#each visibleTickets as ticket (ticket.id)}\r\n {@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n <TicketCard\r\n {ticket}\r\n quantity={quantities[ticket.id] ?? 0}\r\n onQuantityChange={handleQuantityChange}\r\n donationAmount={donationAmounts[ticket.id] ?? ''}\r\n onDonationChange={handleDonationChange}\r\n isRevealedByPromo={promoInfo.isRevealed}\r\n isDiscountedByPromo={promoInfo.isDiscounted}\r\n discountedPrice={promoInfo.discountedPrice}\r\n labels={mergedLabels}\r\n />\r\n {/each}\r\n </div>\r\n {/if}\r\n\r\n <!-- Promo code input: only show when event is on sale -->\r\n {#if isOnSale}\r\n <PromoCodeInput\r\n {promoState}\r\n onApply={handlePromoApply}\r\n onRemove={handlePromoRemove}\r\n labels={mergedLabels}\r\n />\r\n {/if}\r\n </section>\r\n {/if}\r\n\r\n <!-- Showtimes (series — primary content, before About) -->\r\n {#if isSeries}\r\n <section>\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\"\r\n >Upcoming Shows</Heading\r\n >\r\n <ShowtimeDesigns\r\n {event}\r\n onShowtimeClick={onShowtimeClickProp}\r\n labels={mergedLabels}\r\n />\r\n </section>\r\n {/if}\r\n\r\n <!-- Collection: About goes above event widgets -->\r\n {#if isCollection}\r\n <AboutSection description={event.description} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Collection events grid (widgets) -->\r\n {#if isCollection}\r\n <section>\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Events</Heading>\r\n <div class=\"collection-grid\">\r\n {#each galleryEvents as ce (ce.id)}\r\n <GalleryCard\r\n event={ce}\r\n oneventClick={handleCollectionEventClick}\r\n />\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- About section (non-collection) -->\r\n {#if !isCollection}\r\n <AboutSection description={event.description} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Performers (hidden for series/collection) -->\r\n {#if !isFullWidth}\r\n <PerformerGrid performers={event.performers} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- FAQs (hidden for collection — FAQs are per-venue, not per-collection) -->\r\n {#if event.faqs.length > 0 && !isCollection}\r\n <FaqAccordion faqs={event.faqs} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Disclaimer -->\r\n {#if event.disclaimer}\r\n <section class=\"pt-4 border-t border-default\">\r\n <Text size=\"xs\" color=\"muted\" leading=\"relaxed\" class=\"block\">\r\n {event.disclaimer}\r\n </Text>\r\n </section>\r\n {/if}\r\n {/snippet}\r\n\r\n <!-- ============================================== -->\r\n <!-- DESKTOP LAYOUT -->\r\n <!-- ============================================== -->\r\n {#if isFullWidth}\r\n <!-- Series/Collection: full-width single column (no sidebar) -->\r\n <div class=\"hidden md:block space-y-8\">\r\n {@render desktopContent()}\r\n </div>\r\n {:else}\r\n <!-- Regular: two-column Airbnb split (1fr 360px) -->\r\n <!-- @tokens-px-escape: 360px is a structural sidebar column width with no token equivalent; CSS grid-template-columns cannot use Tailwind spacing classes -->\r\n <div\r\n class=\"hidden md:grid gap-8 items-start\"\r\n style=\"grid-template-columns: 1fr 360px;\"\r\n >\r\n <div class=\"space-y-8\">\r\n {@render desktopContent()}\r\n </div>\r\n <div class=\"sticky top-6\">\r\n <BookingWidget\r\n {event}\r\n {orderTotals}\r\n {hasSelectedTickets}\r\n onCheckout={handleCheckout}\r\n promoApplied={promoState.isApplied}\r\n labels={mergedLabels}\r\n />\r\n </div>\r\n </div>\r\n {/if}\r\n\r\n <!-- ============================================== -->\r\n <!-- MOBILE: Single column with fixed bottom CTA -->\r\n <!-- ============================================== -->\r\n <div class=\"md:hidden space-y-6\" class:pb-24={!isFullWidth}>\r\n <!-- Hero image -->\r\n <HeroImage src={event.imageUrl} alt={event.title} labels={mergedLabels} />\r\n\r\n <!-- Event header -->\r\n <EventHeader\r\n {event}\r\n hideDateTime={isFullWidth}\r\n hideVenue={isCollection}\r\n labels={mergedLabels}\r\n />\r\n\r\n <!-- MIC-1039 — hidden-only state (mobile) -->\r\n {#if isHiddenOnlyState && !isFullWidth}\r\n <section id=\"mobile-ticket-section\">\r\n <PromoCodeInput\r\n {promoState}\r\n onApply={handlePromoApply}\r\n onRemove={handlePromoRemove}\r\n labels={mergedLabels}\r\n />\r\n </section>\r\n <!-- Inline ticket selection (mobile — hidden for series/collection) -->\r\n {:else if showTicketCards && !isFullWidth}\r\n <section id=\"mobile-ticket-section\">\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">\r\n {isOnSale\r\n ? labels.selectTickets || 'Select tickets'\r\n : labels.ticketsTab || 'Tickets'}\r\n </Heading>\r\n\r\n {#if hasMultipleSections}\r\n {#each Object.entries(groupedTickets) as [sectionName, sectionTickets] (sectionName)}\r\n <div class=\"mb-6 last:mb-0\">\r\n {#if sectionName !== '_default'}\r\n <Heading level={3} size=\"sm\" weight=\"semibold\" class=\"mb-3\">\r\n {sectionName}\r\n </Heading>\r\n {/if}\r\n <div class=\"space-y-3\">\r\n {#each sectionTickets as ticket (ticket.id)}\r\n {@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n <TicketCard\r\n {ticket}\r\n quantity={quantities[ticket.id] ?? 0}\r\n onQuantityChange={handleQuantityChange}\r\n donationAmount={donationAmounts[ticket.id] ?? ''}\r\n onDonationChange={handleDonationChange}\r\n isRevealedByPromo={promoInfo.isRevealed}\r\n isDiscountedByPromo={promoInfo.isDiscounted}\r\n discountedPrice={promoInfo.discountedPrice}\r\n labels={mergedLabels}\r\n />\r\n {/each}\r\n </div>\r\n </div>\r\n {/each}\r\n {:else}\r\n <div class=\"space-y-3\">\r\n {#each visibleTickets as ticket (ticket.id)}\r\n {@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n <TicketCard\r\n {ticket}\r\n quantity={quantities[ticket.id] ?? 0}\r\n onQuantityChange={handleQuantityChange}\r\n donationAmount={donationAmounts[ticket.id] ?? ''}\r\n onDonationChange={handleDonationChange}\r\n isRevealedByPromo={promoInfo.isRevealed}\r\n isDiscountedByPromo={promoInfo.isDiscounted}\r\n discountedPrice={promoInfo.discountedPrice}\r\n labels={mergedLabels}\r\n />\r\n {/each}\r\n </div>\r\n {/if}\r\n\r\n <!-- Promo code input: only show when event is on sale -->\r\n {#if isOnSale}\r\n <PromoCodeInput\r\n {promoState}\r\n onApply={handlePromoApply}\r\n onRemove={handlePromoRemove}\r\n labels={mergedLabels}\r\n />\r\n {/if}\r\n </section>\r\n\r\n <!-- Mobile order summary: now in slide-up drawer from MobileCta -->\r\n {/if}\r\n\r\n <!-- Showtimes (mobile — primary content for series) -->\r\n {#if isSeries}\r\n <section>\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\"\r\n >Upcoming Shows</Heading\r\n >\r\n <ShowtimeDesigns\r\n {event}\r\n onShowtimeClick={onShowtimeClickProp}\r\n labels={mergedLabels}\r\n />\r\n </section>\r\n {/if}\r\n\r\n <!-- Collection: About goes above event widgets -->\r\n {#if isCollection}\r\n <AboutSection description={event.description} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Collection events grid (mobile) -->\r\n {#if isCollection}\r\n <section>\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Events</Heading>\r\n <div class=\"collection-grid\">\r\n {#each galleryEvents as ce (ce.id)}\r\n <GalleryCard\r\n event={ce}\r\n oneventClick={handleCollectionEventClick}\r\n />\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- About section (non-collection) -->\r\n {#if !isCollection}\r\n <AboutSection description={event.description} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Performers (hidden for series/collection) -->\r\n {#if !isFullWidth}\r\n <PerformerGrid performers={event.performers} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- FAQs (hidden for collection) -->\r\n {#if !isCollection}\r\n <FaqAccordion faqs={event.faqs} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Disclaimer -->\r\n {#if event.disclaimer}\r\n <section class=\"pt-4 border-t border-default\">\r\n <Text size=\"xs\" color=\"muted\" leading=\"relaxed\" class=\"block\">\r\n {event.disclaimer}\r\n </Text>\r\n </section>\r\n {/if}\r\n </div>\r\n\r\n <!-- Mobile: Fixed bottom CTA bar (DICE-style) — hidden for series/collection -->\r\n {#if !isFullWidth}\r\n <div class=\"md:hidden\">\r\n <MobileCta\r\n {event}\r\n {orderTotals}\r\n {hasSelectedTickets}\r\n onCheckout={handleCheckout}\r\n labels={mergedLabels}\r\n />\r\n </div>\r\n {/if}\r\n </div>\r\n</div>\r\n\r\n<style>\r\n .collection-grid {\r\n display: grid;\r\n gap: 1.5rem;\r\n /* @tokens-px-escape: 240px is a CSS grid minmax breakpoint with no token equivalent; auto-fill layout cannot use Tailwind spacing classes */\r\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\r\n }\r\n</style>\r\n"],"names":["$","$$props","div","root","img","img_1","hideDateTime","hideVenue","scarcityLevel","getScarcityLevel","scarcityText","getScarcityText","ageText","shareEvent","url","shareData","err","fallbackShare","toast","div_1","Heading","node","ScarcityBadge","$$anchor","$$render","consequent","button","Share","div_2","fragment_2","Calendar","span","node_4","div_3","root_4","Time","div_4","node_6","span_1","root_5","formatTimeRange","span_2","root_6","formatEventTime","consequent_1","alternate","span_3","root_7","formatDoorsTime","consequent_2","div_5","root_8","span_4","node_9","consequent_3","consequent_4","formatFullDateCompact","consequent_5","div_6","fragment_3","Location","div_7","node_11","span_5","span_6","root_10","text_7","consequent_6","div_8","root_11","Theater","span_7","node_14","consequent_7","div_9","root_12","User","span_8","node_16","consequent_8","text_6","consequent_9","donationAmount","isRevealedByPromo","isDiscountedByPromo","discountedPrice","labels","isDonation","isSoldOut","isComingSoon","isSalesEnded","isDisabled","isSelected","donationValue","donationError","isDonationValid","canDecrement","canIncrement","decrement","newQty","increment","donationInputValue","syncDonation","totalPrice","priceDisplay","feeCaption","salesStartDisplay","formatSmartSalesDate","article","Badge","Text","node_2","root_13","Input","$$value","discountedTotal","fragment_9","root_15","formatCurrency","root_16","fragment_10","root_18","consequent_10","consequent_11","Button","Subtract","node_10","Add","consequent_12","alternate_1","classes","DURATION","classes_1","promoApplied","ctaConfig","getCtaConfig","getPriceDisplay","isFreeEvent","visible","t","scrollToTickets","section","Card","root_2","OrderSummary","node_1","$0","text_1","root_9","formatBrowseDate","root_14","node_12","alternate_2","root_19","div_10","root_21","node_15","text_9","text_10","node_17","text_11","alternate_3","alternate_4","paragraphs","p","paragraph","root_1","performer","$1","Avatar","node_3","Accordion","faq","AccordionItem","text_2","totalTicketCount","sum","l","drawerOpen","handleCtaClick","toggleDrawer","closeDrawer","ChevronDown","button_1","text_3","ChevronUp","node_8","text_5","options","option","isActive","fragment_1","text","isExpanded","inputValue","handleApply","trimmed","handleRemove","handleKeydown","e","shouldExpand","root_3","$2","$3","onShowtimeClick","groupedOccurrences","groups","occ","dateKey","g","handleShowtimeClick","group","eventProp","onCheckoutProp","onPromoApplyProp","onPromoRemoveProp","onCollectionEventClickProp","onShowtimeClickProp","mergedLabels","mergeLabels","isShowcaseMode","dataVariant","quantities","promoState","createDefaultPromoState","donationAmounts","event","mockSoldOutEvent","mockFreeEvent","mockRegistrationEvent","mockSeriesEvent","mockSeriesInstanceEvent","mockCollectionEvent","mockDonationEvent","mockMixedEvent","mockSectionedEvent","mockPromoEvent","mockHiddenOnlyEvent","mockMultiStageEvent","mockLongNameEvent","mockWideImageEvent","mockEvent","visibleTickets","hasPurchasableHiddenTickets","isHiddenOnlyState","groupedTickets","ticket","hasMultipleSections","k","isOnSale","showTicketCards","orderTotals","lines","subtotal","fees","promoDiscount","qty","basePrice","ticketFee","ticketDiscount","effectivePrice","ticketSubtotal","totalTicketFee","taxes","calculateTax","hasSelectedTickets","isSeries","isCollection","isFullWidth","galleryEvents","ce","handleCollectionEventClick","galleryEvent","handleQuantityChange","ticketId","handleDonationChange","amount","handleCheckout","count","s","handleDataVariantChange","v","handlePromoApply","code","result","upper","handlePromoRemove","hiddenIds","newQuantities","id","getTicketPromoInfo","isRevealed","isDiscounted","DataToggle","desktopContent","HeroImage","EventHeader","section_1","PromoCodeInput","section_2","node_5","sectionName","sectionTickets","$$item","$$array","promoInfo","TicketCard","section_3","ShowtimeDesigns","AboutSection","section_4","root_17","GalleryCard","PerformerGrid","FaqAccordion","section_5","root_23","node_20","text_4","root_25","node_22","root_26","node_23","BookingWidget","node_24","consequent_13","node_21","node_25","node_26","section_6","root_27","node_28","section_7","root_28","node_29","$$array_1","div_11","root_31","consequent_15","div_12","node_32","div_13","root_35","consequent_16","consequent_17","consequent_14","consequent_18","section_8","root_38","node_35","node_36","consequent_19","consequent_20","section_9","root_41","node_39","div_14","consequent_21","consequent_22","consequent_23","consequent_24","section_10","root_47","node_44","consequent_25","div_15","root_49","MobileCta","node_46","consequent_26"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AirbnbSplitMain-FWhPcWnh.js","sources":["../src/lib/premium-ticket-experience/variants/v3-airbnb-split/HeroImage.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/EventHeader.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/TicketCard.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/BookingWidget.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/AboutSection.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/PerformerGrid.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/FaqAccordion.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/MobileCta.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/DataToggle.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/PromoCodeInput.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/ShowtimeDesigns.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/AirbnbSplitMain.svelte"],"sourcesContent":["<script lang=\"ts\">\r\n\tinterface Props {\r\n\t\tsrc: string;\r\n\t\talt: string;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { src, alt, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n<div class=\"hero-container relative w-full overflow-hidden rounded-xl bg-surface-secondary\">\r\n\t<img\r\n\t\t{src}\r\n\t\talt=\"\"\r\n\t\tclass=\"hero-blur\"\r\n\t\tloading=\"eager\"\r\n\t\taria-hidden=\"true\"\r\n\t/>\r\n\t<img\r\n\t\t{src}\r\n\t\t{alt}\r\n\t\tclass=\"hero-image\"\r\n\t\tloading=\"eager\"\r\n\t/>\r\n</div>\r\n\r\n<style>\r\n\t.hero-container {\r\n\t\tmax-height: 37.5rem;\r\n\t\tmin-height: 12rem;\r\n\t}\r\n\r\n\t/* Blurred zoomed copy as backdrop */\r\n\t.hero-blur {\r\n\t\tposition: absolute;\r\n\t\tinset: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t\tobject-fit: cover;\r\n\t\ttransform: scale(1.15);\r\n\t\tfilter: blur(16px) saturate(1.2);\r\n\t}\r\n\r\n\t/* Main image on top, contained */\r\n\t.hero-image {\r\n\t\tposition: relative;\r\n\t\twidth: 100%;\r\n\t\tobject-fit: contain;\r\n\t\tmax-height: 37.5rem;\r\n\t\tmin-height: 12rem;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Calendar, Location, Share, Theater, Time, User } from 'carbon-icons-svelte';\r\n\timport { Heading } from '@getmicdrop/svelte-components';\r\n\timport { toast } from '@getmicdrop/svelte-components/toast';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { EventData, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tformatFullDateCompact,\r\n\t\tformatEventTime,\r\n\t\tformatTimeRange,\r\n\t\tformatDoorsTime,\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\thideDateTime?: boolean;\r\n\t\thideVenue?: boolean;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, hideDateTime = false, hideVenue = false, labels = {}, }: Props = $props();\r\n\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(event.totalTicketsRemaining, event.totalTicketsCapacity)\r\n\t);\r\n\tlet scarcityText = $derived(\r\n\t\tgetScarcityText(scarcityLevel, event.totalTicketsRemaining, 'event')\r\n\t);\r\n\r\n\tlet ageText = $derived((() => {\r\n\t\tif (!event.displayAgeRestriction) return null;\r\n\t\tif (event.ageRestriction && event.ageRestriction > 0) {\r\n\t\t\treturn `Ages ${event.ageRestriction}+`;\r\n\t\t}\r\n\t\treturn 'All ages';\r\n\t})());\r\n\r\n\tasync function shareEvent() {\r\n\t\tconst url = typeof window !== 'undefined'\r\n\t\t\t? `${window.location.origin}/e/${event.id}-${event.slug}`\r\n\t\t\t: '#';\r\n\t\tconst shareData = { url };\r\n\r\n\t\tif (navigator.share) {\r\n\t\t\ttry {\r\n\t\t\t\tawait navigator.share(shareData);\r\n\t\t\t} catch (err: unknown) {\r\n\t\t\t\tif (err instanceof Error && err.name !== 'AbortError') {\r\n\t\t\t\t\tfallbackShare(url);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfallbackShare(url);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fallbackShare(url: string) {\r\n\t\tnavigator.clipboard.writeText(url).then(() => {\r\n\t\t\ttoast.success('Link copied to clipboard!');\r\n\t\t}).catch(() => {\r\n\t\t\t// duration: Infinity keeps the URL visible so users can still copy\r\n\t\t\t// it manually after clipboard API failure (Codex review of #103)\r\n\t\t\ttoast.error('Could not copy link — select the URL below to copy', {\r\n\t\t\t\tdescription: url,\r\n\t\t\t\tduration: Infinity,\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n</script>\r\n\r\n<div class=\"flex flex-col gap-4\">\r\n\t<div class=\"flex items-start gap-3 flex-wrap\">\r\n\t\t<Heading level={1} size=\"xl\" weight=\"bold\" class=\"sm:text-2xl leading-tight\">\r\n\t\t\t{event.title}\r\n\t\t</Heading>\r\n\t\t{#if scarcityText && event.status === 'on_sale'}\r\n\t\t\t<ScarcityBadge\r\n\t\t\t\tremaining={event.totalTicketsRemaining}\r\n\t\t\t\ttotal={event.totalTicketsCapacity}\r\n\t\t\t\tcontext=\"event\"\r\n\t\t\t/>\r\n\t\t{/if}\r\n\t</div>\r\n\r\n\t<!-- Share -->\r\n\t<button type=\"button\" class=\"share-btn text-color-muted hover:text-color-secondary\" onclick={shareEvent}>\r\n\t\t<Share size={16} class=\"shrink-0\" />\r\n\t\tShare\r\n\t</button>\r\n\r\n\t{#if !hideDateTime}\r\n\t\t<!-- Date -->\r\n\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t<Calendar size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t<span class=\"body-md font-medium\">{formatFullDateCompact(event.startDateTime, event.timezone)}</span>\r\n\t\t</div>\r\n\r\n\t\t<!-- Time + doors -->\r\n\t\t{#if event.displayStartTime !== false}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Time size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<div class=\"flex flex-col gap-0.5\">\r\n\t\t\t\t\t{#if event.displayEndTime !== false}\r\n\t\t\t\t\t\t<span class=\"body-md font-medium\">{formatTimeRange(event.startDateTime, event.endDateTime, event.timezone)}</span>\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t<span class=\"body-md font-medium\">{formatEventTime(event.startDateTime, event.timezone)}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{#if event.displayDoorsTime !== false && event.doorsOpenTime}\r\n\t\t\t\t\t\t<span class=\"caption\">Doors open {formatDoorsTime(event.doorsOpenTime, event.timezone)}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{:else if event.displayDoorsTime !== false && event.doorsOpenTime}\r\n\t\t\t<!-- No start/end time, but doors time is shown -->\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Time size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">Doors open {formatDoorsTime(event.doorsOpenTime, event.timezone)}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t{/if}\r\n\r\n\t{#if !hideVenue}\r\n\t\t<!-- Venue + address -->\r\n\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t<Location size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t<div class=\"flex flex-col gap-0.5\">\r\n\t\t\t\t<span class=\"body-md font-medium\">{event.venue.name}</span>\r\n\t\t\t\t{#if event.venue.address}\r\n\t\t\t\t\t<span class=\"caption\">{event.venue.address}</span>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<!-- Stage name -->\r\n\t\t{#if event.stageName}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Theater size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">{event.stageName}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\r\n\t\t<!-- Age restriction -->\r\n\t\t{#if ageText}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<User size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">{ageText}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.share-btn {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tgap: 0.375rem;\r\n\t\tfont-size: 0.75rem;\r\n\t\tline-height: 1rem;\r\n\t\ttransition-property: color;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { Add, Subtract } from 'carbon-icons-svelte';\r\n\timport { Badge, Button, Heading, Input, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { TicketTypeData, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText,\r\n\t\tformatSmartSalesDate,\r\n\t\tDURATION\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tticket: TicketTypeData;\r\n\t\tquantity: number;\r\n\t\tonQuantityChange: (ticketId: number, quantity: number) => void;\r\n\t\tdonationAmount?: string;\r\n\t\tonDonationChange?: (ticketId: number, amount: string) => void;\r\n\t\tisRevealedByPromo?: boolean;\r\n\t\tisDiscountedByPromo?: boolean;\r\n\t\tdiscountedPrice?: number | null;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet {\r\n\t\tticket,\r\n\t\tquantity,\r\n\t\tonQuantityChange,\r\n\t\tdonationAmount = '',\r\n\t\tonDonationChange,\r\n\t\tisRevealedByPromo = false,\r\n\t\tisDiscountedByPromo = false,\r\n\t\tdiscountedPrice = null,\r\n\t\tlabels = {},\r\n\t}: Props = $props();\r\n\r\n\t// --- State detection ---\r\n\tlet isDonation = $derived(ticket.isDonation || ticket.ticketType === 2);\r\n\tlet isSoldOut = $derived(ticket.status === 'sold_out' || ticket.quantityAvailable === 0);\r\n\tlet isComingSoon = $derived(ticket.status === 'coming_soon');\r\n\tlet isSalesEnded = $derived(ticket.status === 'sales_ended');\r\n\tlet isDisabled = $derived(isSoldOut || isComingSoon || isSalesEnded);\r\n\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(ticket.quantityAvailable, ticket.quantityTotal)\r\n\t);\r\n\tlet scarcityText = $derived(getScarcityText(scarcityLevel, ticket.quantityAvailable, 'ticket'));\r\n\tlet isSelected = $derived(quantity > 0);\r\n\r\n\t// Donation validation\r\n\tlet donationValue = $derived(parseFloat(donationAmount) || 0);\r\n\tlet donationError = $derived(\r\n\t\tisDonation && donationAmount !== '' && donationValue < 1 ? 'Minimum $1.00' : ''\r\n\t);\r\n\tlet isDonationValid = $derived(!isDonation || (donationAmount !== '' && donationValue >= 1));\r\n\r\n\tlet canDecrement = $derived(quantity > 0);\r\n\tlet canIncrement = $derived(\r\n\t\t!isDisabled &&\r\n\t\tquantity < ticket.maxPerOrder &&\r\n\t\tquantity < ticket.quantityAvailable &&\r\n\t\tisDonationValid\r\n\t);\r\n\r\n\tfunction decrement() {\r\n\t\tif (canDecrement) {\r\n\t\t\t// If decrementing would go below minimum, jump to 0 (remove from cart)\r\n\t\t\tconst newQty = quantity - 1;\r\n\t\t\tonQuantityChange(ticket.id, newQty < ticket.minPerOrder ? 0 : newQty);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction increment() {\r\n\t\tif (canIncrement) {\r\n\t\t\t// If at 0, jump to minimum purchase quantity\r\n\t\t\tconst newQty = quantity === 0 ? ticket.minPerOrder : quantity + 1;\r\n\t\t\tonQuantityChange(ticket.id, newQty);\r\n\t\t}\r\n\t}\r\n\r\n\tlet donationInputValue = $state(donationAmount);\r\n\r\n\t// Sync external donationAmount prop to local state\r\n\t$effect(() => {\r\n\t\tdonationInputValue = donationAmount;\r\n\t});\r\n\r\n\t// Push local changes upstream\r\n\tfunction syncDonation() {\r\n\t\tif (donationInputValue !== donationAmount) {\r\n\t\t\tonDonationChange?.(ticket.id, donationInputValue);\r\n\t\t}\r\n\t}\r\n\r\n\t// Price display — show total inclusive of fees (matching production TicketBlock.svelte)\r\n\tlet totalPrice = $derived(isDonation ? 0 : ticket.price + (ticket.price === 0 ? 0 : ticket.fee));\r\n\tlet priceDisplay = $derived(\r\n\t\tisDonation ? '' : ticket.price === 0 ? (labels.free || 'Free') : `{formatCurrency(totalPrice as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}`\r\n\t);\r\n\tlet feeCaption = $derived(\r\n\t\t!isDonation && ticket.fee > 0 && ticket.price > 0 ? `incl. {formatCurrency(ticket.fee as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)} ${labels.fee || 'fee'}` : ''\r\n\t);\r\n\r\n\t// Sales start display for coming soon tickets\r\n\tlet salesStartDisplay = $derived(\r\n\t\tisComingSoon && ticket.salesStartDate\r\n\t\t\t? `Sales start ${formatSmartSalesDate(ticket.salesStartDate)}`\r\n\t\t\t: isComingSoon\r\n\t\t\t\t? 'Coming soon'\r\n\t\t\t\t: ''\r\n\t);\r\n</script>\r\n\r\n<article\r\n\tclass=\"ticket-card rounded-lg border p-4 transition-all\"\r\n\tclass:selected={isSelected}\r\n\tclass:disabled-ticket={isDisabled}\r\n\tclass:revealed={isRevealedByPromo && !isDisabled}\r\n\tstyle=\"transition-duration: {DURATION.normal}ms;\"\r\n>\r\n\t<div class=\"vc-flex-between-start gap-4\">\r\n\t\t<!-- Ticket info -->\r\n\t\t<div class=\"flex-1 min-w-0\">\r\n\t\t\t<div class=\"flex-row-2 flex-wrap\">\r\n\t\t\t\t<Heading level={4} size=\"sm\" weight=\"semibold\">\r\n\t\t\t\t\t{ticket.name}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t{#if isSoldOut}\r\n\t\t\t\t\t<Badge variant=\"error\">{labels.soldOut || 'Sold out'}</Badge>\r\n\t\t\t\t{:else if isSalesEnded}\r\n\t\t\t\t\t<Badge variant=\"neutral\">Sales ended</Badge>\r\n\t\t\t\t{:else if isRevealedByPromo}\r\n\t\t\t\t\t<Badge variant=\"success\">Unlocked</Badge>\r\n\t\t\t\t{:else if isDiscountedByPromo}\r\n\t\t\t\t\t<Badge variant=\"green\">Discount applied</Badge>\r\n\t\t\t\t{:else if scarcityText && !isComingSoon}\r\n\t\t\t\t\t<ScarcityBadge\r\n\t\t\t\t\t\tremaining={ticket.quantityAvailable}\r\n\t\t\t\t\t\ttotal={ticket.quantityTotal}\r\n\t\t\t\t\t\tcontext=\"ticket\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t{#if ticket.description}\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block mt-1 line-clamp-2\">\r\n\t\t\t\t\t{ticket.description}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Price row -->\r\n\t\t\t<div class=\"flex-row-2 mt-2\">\r\n\t\t\t\t{#if isDonation}\r\n\t\t\t\t\t<!-- Donation: $ input -->\r\n\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t\t\t<div class=\"donation-input-wrapper\" oninput={syncDonation}>\r\n\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\tlabel=\"Donation amount\"\r\n\t\t\t\t\t\t\tsize=\"md\"\r\n\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\tplaceholder=\"0.00\"\r\n\t\t\t\t\t\t\tbind:value={donationInputValue}\r\n\t\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\t\terrorText={donationError}\r\n\t\t\t\t\t\t\tcolor={donationError ? 'red' : 'base'}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t{:else if isDiscountedByPromo && discountedPrice !== null}\r\n\t\t\t\t\t<!-- Discounted: strikethrough original total + discounted total (both inclusive of fee) -->\r\n\t\t\t\t\t{@const discountedTotal = discountedPrice + (discountedPrice === 0 ? 0 : ticket.fee)}\r\n\t\t\t\t\t<span class=\"price-strikethrough\">{formatCurrency(totalPrice as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}</span>\r\n\t\t\t\t\t<span class=\"price-discounted\">{formatCurrency(discountedTotal as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}</span>\r\n\t\t\t\t\t{#if feeCaption}\r\n\t\t\t\t\t\t<span class=\"price-fee\">{feeCaption}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t{:else if isComingSoon}\r\n\t\t\t\t\t<!-- Coming soon: show price dimmed -->\r\n\t\t\t\t\t<span class=\"price-lg text-color-muted\">{priceDisplay}</span>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<!-- Standard price -->\r\n\t\t\t\t\t<span class=\"price-lg text-color-primary\">{priceDisplay}</span>\r\n\t\t\t\t\t{#if feeCaption}\r\n\t\t\t\t\t\t<span class=\"price-fee\">{feeCaption}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- Coming soon / sales ended message -->\r\n\t\t\t{#if salesStartDisplay}\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block mt-1.5\">\r\n\t\t\t\t\t{salesStartDisplay}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\r\n\t\t<!-- Quantity controls -->\r\n\t\t<div class=\"flex items-center quantity-selector\" class:active={isSelected}>\r\n\t\t\t{#if isSoldOut || isComingSoon || isSalesEnded}\r\n\t\t\t\t<!-- No controls for coming soon / sales ended -->\r\n\t\t\t{:else}\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"alternative\"\r\n\t\t\t\t\tsize=\"icon-lg\"\r\n\t\t\t\t\tonclick={decrement}\r\n\t\t\t\t\tdisabled={!canDecrement}\r\n\t\t\t\t\taria-label=\"{labels.decrease || 'Decrease'} {ticket.name} {labels.quantity || 'quantity'}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Subtract size={16} />\r\n\t\t\t\t</Button>\r\n\r\n\t\t\t\t<span\r\n\t\t\t\t\tclass=\"qty-display\"\r\n\t\t\t\t\taria-live=\"polite\"\r\n\t\t\t\t\taria-label=\"{ticket.name} {labels.quantity || 'quantity'}: {quantity}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{quantity}\r\n\t\t\t\t</span>\r\n\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"alternative\"\r\n\t\t\t\t\tsize=\"icon-lg\"\r\n\t\t\t\t\tonclick={increment}\r\n\t\t\t\t\tdisabled={!canIncrement}\r\n\t\t\t\t\taria-label=\"{labels.increase || 'Increase'} {ticket.name} {labels.quantity || 'quantity'}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Add size={16} />\r\n\t\t\t\t</Button>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t</div>\r\n</article>\r\n\r\n<style>\r\n\t/* Card states using HSL CSS variables (matching TicketBlock.svelte) */\r\n\t.ticket-card {\r\n\t\tborder-color: hsl(var(--stroke-secondary, 220 13% 91%));\r\n\t\tbackground-color: hsl(var(--ts-card-bg, var(--bg-primary, 0 0% 100%)));\r\n\t}\r\n\r\n\t.ticket-card.selected {\r\n\t\tborder-color: hsl(var(--brand-primary, 211 100% 50%));\r\n\t\tbox-shadow: 0 0 0 1px hsl(var(--brand-primary, 211 100% 50%));\r\n\t}\r\n\r\n\t.ticket-card.revealed {\r\n\t\tborder-color: hsl(var(--accent-success) / 50%);\r\n\t\tbackground-color: hsl(var(--accent-success) / 8%);\r\n\t}\r\n\r\n\t.ticket-card.disabled-ticket {\r\n\t\topacity: 0.5;\r\n\t}\r\n\r\n\t/* Quantity selector */\r\n\t.quantity-selector {\r\n\t\tgap: 0.5rem;\r\n\t\tuser-select: none;\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t.qty-display {\r\n\t\tmin-width: 2rem;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\tfont-size: 1.125rem;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: hsl(var(--text-primary, 222 47% 11%));\r\n\t\tuser-select: none;\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t/* Discounted price green text */\r\n\t.price-discounted {\r\n\t\tfont-size: 0.875rem;\r\n\t\tline-height: 1.25rem;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: hsl(var(--accent-success)); /* green-600 */\r\n\t}\r\n\r\n\t/* Donation input wrapper */\r\n\t.donation-input-wrapper {\r\n\t\tmin-width: 10rem;\r\n\t}\r\n\r\n .ticket-card {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--stroke-secondary, 215 19% 35%));\r\n\t\tbackground-color: hsl(var(--ts-card-bg, var(--bg-primary, 222 47% 11%)));\r\n\t }\r\n }\r\n\r\n .ticket-card.revealed {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--accent-success)); /* green-700 */\r\n\t\tbackground-color: hsl(var(--accent-success));\r\n\t }\r\n }\r\n\r\n .qty-display {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tcolor: hsl(var(--text-primary, 0 0% 100%));\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n import type { USD } from '@getmicdrop/svelte-components';\r\n import { Calendar } from 'carbon-icons-svelte';\r\n import {\r\n Badge,\r\n Button,\r\n Card,\r\n Heading,\r\n Text,\r\n formatCurrency,\r\n } from '@getmicdrop/svelte-components';\r\n import ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n import type {\r\n EventData,\r\n OrderTotals,\r\n CtaConfig,\r\n ScarcityLevel,\r\n } from '$lib/premium-ticket-experience/types';\r\n import {\r\n getCtaConfig,\r\n getPriceDisplay,\r\n getScarcityLevel,\r\n getScarcityText,\r\n formatBrowseDate,\r\n formatEventTime,\r\n DURATION,\r\n } from '$lib/premium-ticket-experience/defaults';\r\n import OrderSummary from './OrderSummary.svelte';\r\n\r\n interface Props {\r\n event: EventData;\r\n orderTotals: OrderTotals;\r\n hasSelectedTickets: boolean;\r\n onCheckout: () => void;\r\n promoApplied?: boolean;\r\n labels?: Record<string, string>;\r\n }\r\n\r\n let {\r\n event,\r\n orderTotals,\r\n hasSelectedTickets,\r\n onCheckout,\r\n promoApplied = false,\r\n labels = {},\r\n }: Props = $props();\r\n\r\n let ctaConfig: CtaConfig = $derived(getCtaConfig(event));\r\n let priceDisplay = $derived(getPriceDisplay(event));\r\n let scarcityLevel: ScarcityLevel = $derived(\r\n getScarcityLevel(event.totalTicketsRemaining, event.totalTicketsCapacity)\r\n );\r\n let scarcityText = $derived(\r\n getScarcityText(scarcityLevel, event.totalTicketsRemaining, 'event')\r\n );\r\n let isFreeEvent = $derived(\r\n (() => {\r\n const visible = event.tickets.filter(\r\n t => t.status === 'on_sale' && !t.isHidden\r\n );\r\n return visible.length > 0 && visible.every(t => t.price === 0);\r\n })()\r\n );\r\n\r\n function scrollToTickets() {\r\n if (typeof document === 'undefined') return;\r\n const section = document.getElementById('desktop-ticket-section');\r\n if (section) {\r\n section.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n }\r\n }\r\n</script>\r\n\r\n<!--\r\n BookingWidget: Airbnb-style sticky sidebar card.\r\n Transitions from \"informational\" to \"cart\" mode with no skeleton placeholders.\r\n Password protection is handled at the widget/browse level, not on the event page.\r\n-->\r\n{#if event.status === 'on_sale' && hasSelectedTickets}\r\n <!--\r\n FILLED STATE: cap the card to the viewport so a long order summary\r\n can't push the Checkout button below the fold. Body scrolls; button\r\n stays pinned at the bottom of the card.\r\n -->\r\n <Card\r\n border\r\n padding={false}\r\n class=\"flex flex-col max-h-[calc(100vh-3rem)] rounded-xl shadow-lg overflow-hidden bg-surface-secondary\"\r\n >\r\n <div\r\n class=\"flex flex-col flex-1 min-h-0\"\r\n style=\"animation: widgetFadeIn {DURATION.normal}ms ease-out;\"\r\n >\r\n <div class=\"p-5 flex-1 overflow-y-auto min-h-0\">\r\n <OrderSummary {orderTotals} />\r\n </div>\r\n <div class=\"p-5 pt-3 shrink-0 border-t border-default\">\r\n <Button variant=\"default\" size=\"lg\" class=\"w-full\" onclick={onCheckout}>\r\n {#if isFreeEvent}\r\n {event.isRegistrationEvent\r\n ? labels.reserveASpot || 'Reserve a spot'\r\n : labels.getTickets || 'Get tickets'} · Free\r\n {:else}\r\n {labels.checkout || 'Checkout'} · {formatCurrency(\r\n orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */\r\n )}\r\n {/if}\r\n </Button>\r\n </div>\r\n </div>\r\n </Card>\r\n{:else}\r\n <Card\r\n border\r\n padding={false}\r\n class=\"rounded-xl shadow-lg overflow-hidden bg-surface-secondary\"\r\n >\r\n <div class=\"p-5\">\r\n {#if event.status === 'on_sale'}\r\n <!-- ON SALE: informational empty state (filled state handled in the sibling branch above) -->\r\n <div class=\"space-y-3\">\r\n <!-- Price display -->\r\n <div class=\"flex items-baseline gap-2\">\r\n {#if priceDisplay}\r\n <span class=\"price-lg text-color-primary text-xl\">\r\n {priceDisplay}\r\n </span>\r\n {:else if isFreeEvent}\r\n <span class=\"price-lg text-color-primary text-xl\"> Free </span>\r\n {/if}\r\n </div>\r\n\r\n <!-- Event date/time summary (compact) -->\r\n <div class=\"flex items-center gap-2\">\r\n <Calendar size={16} class=\"shrink-0 icon-muted\" />\r\n {#if event.displayStartTime !== false}\r\n <span class=\"body-sm\"\r\n >{formatBrowseDate(event.startDateTime, event.timezone)} ·\r\n {formatEventTime(event.startDateTime, event.timezone)}</span\r\n >\r\n {:else}\r\n <span class=\"body-sm\"\r\n >{formatBrowseDate(event.startDateTime, event.timezone)}</span\r\n >\r\n {/if}\r\n </div>\r\n\r\n <!-- Scarcity badge -->\r\n {#if scarcityText}\r\n <div>\r\n <ScarcityBadge\r\n remaining={event.totalTicketsRemaining}\r\n total={event.totalTicketsCapacity}\r\n context=\"event\"\r\n />\r\n </div>\r\n {/if}\r\n\r\n <!-- Promo applied badge -->\r\n {#if promoApplied}\r\n <div>\r\n <Badge variant=\"success\"\r\n >{labels.promoApplied || 'Promo applied'}</Badge\r\n >\r\n </div>\r\n {/if}\r\n\r\n <!-- Divider -->\r\n <div class=\"divider\"></div>\r\n\r\n <!-- CTA: scroll to ticket section -->\r\n <Button\r\n variant=\"default\"\r\n size=\"lg\"\r\n class=\"w-full\"\r\n onclick={scrollToTickets}\r\n >\r\n {#if event.isRegistrationEvent}\r\n Reserve a spot\r\n {:else}\r\n Get tickets\r\n {/if}\r\n </Button>\r\n </div>\r\n {:else if event.status === 'sold_out'}\r\n <!-- SOLD OUT: just the disabled CTA, tickets still shown in left column -->\r\n <div class=\"space-y-3\">\r\n <Button variant=\"default\" size=\"lg\" class=\"w-full\" disabled={true}>\r\n Sold out\r\n </Button>\r\n </div>\r\n {:else}\r\n <!-- OTHER DISABLED STATES: cancelled, past, sales_ended, coming_soon -->\r\n <div class=\"space-y-3\">\r\n <Heading weight=\"semibold\">\r\n {ctaConfig.text}\r\n </Heading>\r\n {#if ctaConfig.reason}\r\n <Text size=\"sm\" color=\"secondary\" class=\"block\">\r\n {ctaConfig.reason}\r\n </Text>\r\n {/if}\r\n <Button variant=\"default\" size=\"lg\" class=\"w-full\" disabled={true}>\r\n {ctaConfig.text}\r\n </Button>\r\n </div>\r\n {/if}\r\n </div>\r\n </Card>\r\n{/if}\r\n\r\n<style>\r\n @keyframes widgetFadeIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(-4px);\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n\r\n /*\r\n * The filled-state card uses max-h-[calc(100vh-3rem)] inline (see Card\r\n * class above) to cap height to the viewport so the Checkout button\r\n * never falls below the fold when many ticket types are selected.\r\n * 3rem reserves the sticky top-6 offset (1.5rem) and an equal bottom gap.\r\n */\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Heading, Text } from '@getmicdrop/svelte-components';\r\n\r\n\tinterface Props {\r\n\t\tdescription: string;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { description, labels = {}, }: Props = $props();\r\n\r\n\tlet paragraphs = $derived(\r\n\t\tdescription.split('\\n\\n').filter((p) => p.trim().length > 0)\r\n\t);\r\n</script>\r\n\r\n<section>\r\n\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-3\">About</Heading>\r\n\t<div class=\"space-y-4\">\r\n\t\t{#each paragraphs as paragraph}\r\n\t\t\t<Text size=\"sm\" color=\"secondary\" leading=\"relaxed\" class=\"block\">\r\n\t\t\t\t{paragraph}\r\n\t\t\t</Text>\r\n\t\t{/each}\r\n\t</div>\r\n</section>\r\n","<script lang=\"ts\">\r\n\timport { Avatar, Card, Heading } from '@getmicdrop/svelte-components';\r\n\timport type { PerformerData } from '$lib/premium-ticket-experience/types';\r\n\r\n\tinterface Props {\r\n\t\tperformers: PerformerData[];\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { performers, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n{#if performers.length > 0}\r\n\t<section>\r\n\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Performers</Heading>\r\n\t\t<div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n\t\t\t{#each performers as performer (performer.id)}\r\n\t\t\t\t<Card padding={false} class=\"flex items-center gap-3 p-3 bg-surface-secondary shadow-none\">\r\n\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\tsrc={performer.profileImage || ''}\r\n\t\t\t\t\t\talt={performer.displayName}\r\n\t\t\t\t\t\tinitials={performer.displayName.charAt(0)}\r\n\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\tclass=\"shrink-0 rounded-lg\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div class=\"min-w-0\">\r\n\t\t\t\t\t\t<Heading level={4} size=\"sm\" weight=\"semibold\" class=\"truncate\">\r\n\t\t\t\t\t\t\t{performer.displayName}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Card>\r\n\t\t\t{/each}\r\n\t\t</div>\r\n\t</section>\r\n{/if}\r\n\r\n","<script lang=\"ts\">\r\n\timport { Accordion, AccordionItem, Heading } from '@getmicdrop/svelte-components';\r\n\timport type { FAQItem } from '$lib/premium-ticket-experience/types';\r\n\r\n\tinterface Props {\r\n\t\tfaqs: FAQItem[];\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { faqs, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n{#if faqs.length > 0}\r\n\t<section class=\"faq-section\">\r\n\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-3\">\r\n\t\t\tFrequently asked questions\r\n\t\t</Heading>\r\n\t\t<Accordion flush>\r\n\t\t\t{#each faqs as faq (faq.question)}\r\n\t\t\t\t<AccordionItem>\r\n\t\t\t\t\t{#snippet header()}{faq.question}{/snippet}\r\n\t\t\t\t\t{faq.answer}\r\n\t\t\t\t</AccordionItem>\r\n\t\t\t{/each}\r\n\t\t</Accordion>\r\n\t</section>\r\n{/if}\r\n\r\n<style>\r\n\t/* Override AccordionItem's hardcoded gray background — FAQ headers should be transparent */\r\n\t.faq-section :global(button) {\r\n\t\tbackground-color: transparent !important;\r\n\t}\r\n\r\n\t.faq-section :global(button:hover) {\r\n\t\tbackground-color: hsl(var(--bg-secondary, 210 20% 98%)) !important;\r\n\t}\r\n\r\n\t/* Fix chevron direction: point DOWN when closed, UP when open.\r\n\t AccordionItem uses ChevronUpOutline (points up by default) and adds rotate-180 when open.\r\n\t We invert it: rotate 180° by default (down), remove rotation when open (up). */\r\n\t.faq-section :global(button svg) {\r\n\t\ttransform: rotate(180deg) !important;\r\n\t\ttransition: transform 200ms ease;\r\n\t}\r\n\r\n\t.faq-section :global(button[aria-expanded=\"true\"] svg) {\r\n\t\ttransform: rotate(0deg) !important;\r\n\t}\r\n\r\n .faq-section :global(button:hover) {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tbackground-color: hsl(var(--bg-secondary, 217 33% 17%)) !important;\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n import type { USD } from '@getmicdrop/svelte-components';\r\n import { ChevronUp, ChevronDown } from 'carbon-icons-svelte';\r\n import {\r\n Button,\r\n Text,\r\n Heading,\r\n formatCurrency,\r\n } from '@getmicdrop/svelte-components';\r\n import type {\r\n EventData,\r\n OrderTotals,\r\n CtaConfig,\r\n } from '$lib/premium-ticket-experience/types';\r\n import {\r\n getCtaConfig,\r\n getPriceDisplay,\r\n DURATION,\r\n } from '$lib/premium-ticket-experience/defaults';\r\n import OrderSummary from './OrderSummary.svelte';\r\n\r\n interface Props {\r\n event: EventData;\r\n orderTotals: OrderTotals;\r\n hasSelectedTickets: boolean;\r\n onCheckout: () => void;\r\n labels?: Record<string, string>;\r\n }\r\n\r\n let {\r\n event,\r\n orderTotals,\r\n hasSelectedTickets,\r\n onCheckout,\r\n labels = {},\r\n }: Props = $props();\r\n\r\n let ctaConfig: CtaConfig = $derived(getCtaConfig(event));\r\n let priceDisplay = $derived(getPriceDisplay(event));\r\n let totalTicketCount = $derived(\r\n orderTotals.lines.reduce((sum, l) => sum + l.quantity, 0)\r\n );\r\n let isFreeEvent = $derived(\r\n (() => {\r\n const visible = event.tickets.filter(\r\n t => t.status === 'on_sale' && !t.isHidden\r\n );\r\n return visible.length > 0 && visible.every(t => t.price === 0);\r\n })()\r\n );\r\n\r\n // Drawer state\r\n let drawerOpen = $state(false);\r\n\r\n function scrollToTickets() {\r\n if (typeof document === 'undefined') return;\r\n const section = document.getElementById('mobile-ticket-section');\r\n if (section) {\r\n section.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n }\r\n }\r\n\r\n function handleCtaClick() {\r\n if (ctaConfig.disabled) return;\r\n\r\n if (hasSelectedTickets) {\r\n onCheckout();\r\n } else {\r\n scrollToTickets();\r\n }\r\n }\r\n\r\n function toggleDrawer() {\r\n drawerOpen = !drawerOpen;\r\n }\r\n\r\n function closeDrawer() {\r\n drawerOpen = false;\r\n }\r\n</script>\r\n\r\n<!-- Backdrop (when drawer open) -->\r\n{#if drawerOpen}\r\n <button\r\n type=\"button\"\r\n class=\"drawer-backdrop\"\r\n onclick={closeDrawer}\r\n aria-label=\"Close order summary\"\r\n ></button>\r\n{/if}\r\n\r\n<!-- Fixed bottom CTA bar for mobile (DICE-style) -->\r\n<div\r\n class=\"fixed bottom-0 left-0 right-0 z-40 md:hidden bg-surface-primary border-t border-default shadow-lg\"\r\n style=\"padding-bottom: env(safe-area-inset-bottom, 0);\"\r\n>\r\n <!-- Slide-up drawer (order summary) -->\r\n {#if hasSelectedTickets}\r\n <div\r\n class=\"drawer-panel border-default bg-surface-secondary\"\r\n class:drawer-open={drawerOpen}\r\n >\r\n <div class=\"px-4 pt-4 pb-3\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <Heading level={3} size=\"sm\" weight=\"semibold\">Order Summary</Heading>\r\n <Button\r\n variant=\"icon\"\r\n size=\"icon-sm\"\r\n onclick={toggleDrawer}\r\n aria-label=\"Close order summary\"\r\n >\r\n <ChevronDown size={20} />\r\n </Button>\r\n </div>\r\n <OrderSummary {orderTotals} />\r\n </div>\r\n </div>\r\n {/if}\r\n\r\n <!-- CTA bar -->\r\n <div\r\n class=\"flex items-center justify-between gap-3 px-4 py-3 transition-all\"\r\n style=\"transition-duration: {DURATION.normal}ms;\"\r\n >\r\n <!-- Left: dynamic info (tappable when tickets selected) -->\r\n <div class=\"flex-1 min-w-0\">\r\n {#if hasSelectedTickets}\r\n <!-- Has tickets: count + total — tappable to open drawer -->\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center gap-1.5 text-left\"\r\n onclick={toggleDrawer}\r\n >\r\n <Text size=\"sm\" class=\"font-semibold tabular-nums\">\r\n {totalTicketCount}\r\n {totalTicketCount === 1 ? 'ticket' : 'tickets'} ·\r\n {#if isFreeEvent}\r\n Free\r\n {:else}\r\n {formatCurrency(\r\n orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */\r\n )}\r\n {/if}\r\n </Text>\r\n <ChevronUp\r\n size={16}\r\n class=\"shrink-0 text-color-muted transition-transform {drawerOpen\r\n ? 'rotate-180'\r\n : ''}\"\r\n />\r\n </button>\r\n {:else if priceDisplay && !ctaConfig.disabled}\r\n <!-- No tickets yet, on sale: \"From $X\" -->\r\n <Text size=\"sm\" color=\"secondary\" class=\"font-medium block\">\r\n {priceDisplay}\r\n </Text>\r\n {:else if ctaConfig.reason}\r\n <!-- Disabled: show reason -->\r\n <Text size=\"xs\" color=\"muted\" class=\"block\">\r\n {ctaConfig.reason}\r\n </Text>\r\n {/if}\r\n </div>\r\n\r\n <!-- Right: CTA button -->\r\n <Button\r\n variant=\"default\"\r\n size=\"lg\"\r\n disabled={ctaConfig.disabled}\r\n onclick={handleCtaClick}\r\n class=\"shrink-0 min-w-32\"\r\n >\r\n {#if hasSelectedTickets}\r\n Checkout\r\n {:else}\r\n {ctaConfig.text}\r\n {/if}\r\n </Button>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n /* Drawer backdrop */\r\n .drawer-backdrop {\r\n position: fixed;\r\n inset: 0;\r\n z-index: var(--z-dropdown);\r\n background-color: rgb(0 0 0 / 40%);\r\n -webkit-tap-highlight-color: transparent;\r\n }\r\n\r\n @media (width >= 768px) {\r\n .drawer-backdrop {\r\n display: none;\r\n }\r\n }\r\n\r\n /* Drawer panel — slides up from above the CTA bar */\r\n .drawer-panel {\r\n border-top-width: 1px;\r\n border-top-style: solid;\r\n max-height: 0;\r\n overflow: hidden;\r\n opacity: 0;\r\n transition:\r\n max-height 300ms cubic-bezier(0.4, 0, 0.2, 1),\r\n opacity 200ms ease;\r\n }\r\n\r\n .drawer-panel.drawer-open {\r\n max-height: 400px;\r\n opacity: 1;\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n /**\r\n * Mock data toggle — horizontal bar matching the showcase variant nav.\r\n */\r\n import { Button } from '@getmicdrop/svelte-components';\r\n\r\n // Password removed: handled at widget/browse level, not event page\r\n type DataVariant =\r\n | 'default'\r\n | 'sold_out'\r\n | 'free'\r\n | 'registration'\r\n | 'series'\r\n | 'series_instance'\r\n | 'collection'\r\n | 'donation'\r\n | 'mixed'\r\n | 'sections'\r\n | 'promo'\r\n | 'hidden_only'\r\n | 'multi_stage'\r\n | 'long'\r\n | 'wide';\r\n\r\n interface Props {\r\n current: DataVariant;\r\n onChange: (variant: DataVariant) => void;\r\n }\r\n\r\n let { current, onChange }: Props = $props();\r\n\r\n const options: { value: DataVariant; label: string; color: string }[] = [\r\n { value: 'default', label: 'On sale', color: 'bg-accent-success' },\r\n { value: 'sold_out', label: 'Sold out', color: 'bg-muted-foreground' },\r\n { value: 'free', label: 'Free', color: 'bg-sky-500' },\r\n { value: 'registration', label: 'Registration', color: 'bg-brand-primary' },\r\n { value: 'series', label: 'Series', color: 'bg-brand-primary' },\r\n { value: 'series_instance', label: 'Instance', color: 'bg-violet-500' },\r\n { value: 'collection', label: 'Collection', color: 'bg-fuchsia-500' },\r\n { value: 'donation', label: 'Donation', color: 'bg-accent-danger' },\r\n { value: 'mixed', label: 'Mixed', color: 'bg-status-warning-bg0' },\r\n { value: 'sections', label: 'Sections', color: 'bg-brand-primary' },\r\n { value: 'promo', label: 'Promo codes', color: 'bg-accent-success' },\r\n { value: 'hidden_only', label: 'Hidden only', color: 'bg-accent-success' },\r\n { value: 'multi_stage', label: 'Multi-stage', color: 'bg-accent-danger' },\r\n { value: 'long', label: 'Long name', color: 'bg-accent-warning' },\r\n { value: 'wide', label: 'Wide image', color: 'bg-teal-500' },\r\n ];\r\n</script>\r\n\r\n<div class=\"toggle-bar bg-surface-primary border-default\">\r\n <span class=\"toggle-label text-color-muted\">Data</span>\r\n {#each options as option}\r\n {@const isActive = current === option.value}\r\n <Button\r\n variant=\"ghost\"\r\n active={isActive}\r\n onclick={() => onChange(option.value)}\r\n class=\"toggle-btn {isActive\r\n ? 'active bg-surface-secondary text-color-primary font-medium'\r\n : 'text-color-tertiary hover:bg-surface-secondary hover:text-color-secondary'}\"\r\n >\r\n <span class=\"w-1.5 h-1.5 rounded-full {option.color} shrink-0\"></span>\r\n {option.label}\r\n </Button>\r\n {/each}\r\n</div>\r\n\r\n<style>\r\n .toggle-bar {\r\n position: sticky;\r\n top: 0;\r\n z-index: var(--z-dropdown);\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n padding: 0.5rem 0.75rem;\r\n overflow-x: auto;\r\n border-bottom-width: 1px;\r\n border-bottom-style: solid;\r\n }\r\n\r\n .toggle-label {\r\n padding-left: 0.375rem;\r\n padding-right: 0.375rem;\r\n flex-shrink: 0;\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n font-size: 0.625rem;\r\n }\r\n\r\n .toggle-btn {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.375rem;\r\n padding: 0.25rem 0.5rem;\r\n border-radius: 0.375rem;\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n white-space: nowrap;\r\n transition-property: all;\r\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n transition-duration: 150ms;\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Input, Button } from '@getmicdrop/svelte-components';\r\n\timport type { PromoCodeState } from '$lib/premium-ticket-experience/types';\r\n\timport { DURATION } from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tpromoState: PromoCodeState;\r\n\t\tonApply: (code: string) => void;\r\n\t\tonRemove: () => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { promoState, onApply, onRemove, labels = {}, }: Props = $props();\r\n\r\n\tlet isExpanded = $state(false);\r\n\tlet inputValue = $state('');\r\n\r\n\tfunction handleApply() {\r\n\t\tconst trimmed = inputValue.trim();\r\n\t\tif (!trimmed) return;\r\n\t\tonApply(trimmed);\r\n\t}\r\n\r\n\tfunction handleRemove() {\r\n\t\tinputValue = '';\r\n\t\tonRemove();\r\n\t}\r\n\r\n\tfunction handleKeydown(e: KeyboardEvent) {\r\n\t\tif (e.key === 'Enter') {\r\n\t\t\te.preventDefault();\r\n\t\t\thandleApply();\r\n\t\t}\r\n\t}\r\n\r\n\t// Auto-expand when promo is applied (e.g. on restore)\r\n\tlet shouldExpand = $derived(promoState.isApplied || isExpanded);\r\n</script>\r\n\r\n<div class=\"promo-section\" role=\"group\" aria-labelledby=\"promo-label\">\r\n\t<span id=\"promo-label\" class=\"sr-only\">Promo code entry</span>\r\n\t{#if !shouldExpand}\r\n\t\t<Button variant=\"link\" onclick={() => (isExpanded = true)}>\r\n\t\t\t{labels.havePromoCode || 'Have a promo code?'}\r\n\t\t</Button>\r\n\t{:else}\r\n\t\t<div\r\n\t\t\tclass=\"space-y-2\"\r\n\t\t\tstyle=\"animation: promoSlideIn {DURATION.normal}ms ease-out;\"\r\n\t\t>\r\n\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t<div class=\"promo-input-wrapper\" onkeydown={handleKeydown}>\r\n\t\t\t\t<div class=\"flex-1\">\r\n\t\t\t\t\t<Input\r\n\t\t\t\t\t\tlabel={labels.promoCode || 'Promo code'}\r\n\t\t\t\t\t\tplaceholder={labels.enterCode || 'Enter code'}\r\n\t\t\t\t\t\tsize=\"md\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tbind:value={inputValue}\r\n\t\t\t\t\t\tdisabled={promoState.isApplied || promoState.isValidating}\r\n\t\t\t\t\t\terrorText={promoState.error || ''}\r\n\t\t\t\t\t\tcolor={promoState.error ? 'red' : 'base'}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{#if promoState.isApplied}\r\n\t\t\t\t\t<Button strokebtn onclick={handleRemove} class=\"h-10 self-start mt-5\" aria-label={labels.removePromoCode || 'Remove promo code'}>\r\n\t\t\t\t\t\t{labels.remove || 'Remove'}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tonclick={handleApply}\r\n\t\t\t\t\t\tdisabled={promoState.isValidating || !inputValue.trim()}\r\n\t\t\t\t\t\tclass=\"h-10 self-start mt-5\"\r\n\t\t\t\t\t\taria-label={promoState.isValidating ? (labels.checkingPromoCode || 'Checking promo code') : (labels.applyPromoCode || 'Apply promo code')}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{promoState.isValidating ? (labels.checking || 'Checking...') : (labels.apply || 'Apply')}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- Success hint -->\r\n\t\t\t{#if promoState.hint}\r\n\t\t\t\t<p class=\"promo-message success body-sm\" role=\"status\" aria-live=\"polite\">\r\n\t\t\t\t\t{promoState.hint}\r\n\t\t\t\t</p>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.promo-section {\r\n\t\tmargin-top: 1rem;\r\n\t}\r\n\r\n\t.promo-input-wrapper {\r\n\t\tdisplay: flex;\r\n\t\tgap: 0.5rem;\r\n\t\talign-items: flex-start;\r\n\t}\r\n\r\n\t.promo-message {\r\n\t\tmargin-top: 0.5rem;\r\n\t}\r\n\r\n\t.promo-message.success {\r\n\t\tcolor: hsl(var(--accent-success)); /* green-600 */\r\n\t}\r\n\r\n\t@keyframes promoSlideIn {\r\n\t\tfrom {\r\n\t\t\topacity: 0;\r\n\t\t\ttransform: translateY(-4px);\r\n\t\t}\r\n\r\n\t\tto {\r\n\t\t\topacity: 1;\r\n\t\t\ttransform: translateY(0);\r\n\t\t}\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Button, Text } from '@getmicdrop/svelte-components';\r\n\timport type { EventData } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tformatFullDateCompact,\r\n\t\tformatEventTime,\r\n\t\tformatBrowseDate\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\tonShowtimeClick?: (occurrence: { id: number; slug: string }) => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, onShowtimeClick = undefined, labels = {}, }: Props = $props();\r\n\r\n\t// --- Data ---\r\n\ttype GroupedOccurrences = {\r\n\t\tdateLabel: string;\r\n\t\tdateKey: string;\r\n\t\toccurrences: NonNullable<EventData['seriesOccurrences']>;\r\n\t}[];\r\n\r\n\tlet groupedOccurrences: GroupedOccurrences = $derived((() => {\r\n\t\tif (!event.seriesOccurrences) return [];\r\n\t\tconst groups: Map<string, { dateLabel: string; occurrences: NonNullable<EventData['seriesOccurrences']> }> = new Map();\r\n\t\tfor (const occ of event.seriesOccurrences) {\r\n\t\t\tconst dateKey = formatBrowseDate(occ.startDateTime, event.timezone);\r\n\t\t\tif (!groups.has(dateKey)) {\r\n\t\t\t\tgroups.set(dateKey, {\r\n\t\t\t\t\tdateLabel: formatFullDateCompact(occ.startDateTime, event.timezone),\r\n\t\t\t\t\toccurrences: []\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tgroups.get(dateKey)!.occurrences.push(occ);\r\n\t\t}\r\n\t\treturn [...groups.entries()].map(([dateKey, g]) => ({\r\n\t\t\tdateKey,\r\n\t\t\tdateLabel: g.dateLabel,\r\n\t\t\toccurrences: g.occurrences\r\n\t\t}));\r\n\t})());\r\n\r\n\tfunction handleShowtimeClick(occ: { id: number; slug: string }) {\r\n\t\tif (onShowtimeClick) {\r\n\t\t\tonShowtimeClick(occ);\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<section>\r\n\t<div class=\"space-y-4\">\r\n\t\t{#each groupedOccurrences as group (group.dateKey)}\r\n\t\t\t<div>\r\n\t\t\t\t<Text size=\"sm\" class=\"font-semibold block mb-2\">\r\n\t\t\t\t\t{group.dateLabel}\r\n\t\t\t\t</Text>\r\n\t\t\t\t<div class=\"space-y-2\">\r\n\t\t\t\t\t{#each group.occurrences as occ (occ.id)}\r\n\t\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclass=\"row-a border-default bg-surface-primary hover:bg-surface-secondary\"\r\n\t\t\t\t\t\t\tclass:row-disabled={occ.ctaDisabled}\r\n\t\t\t\t\t\t\tonclick={() => !occ.ctaDisabled && handleShowtimeClick({ id: occ.id, slug: occ.slug })}\r\n\t\t\t\t\t\t\tonkeydown={(e: KeyboardEvent) => e.key === 'Enter' && !occ.ctaDisabled && handleShowtimeClick({ id: occ.id, slug: occ.slug })}\r\n\t\t\t\t\t\t\ttabindex={occ.ctaDisabled ? -1 : 0}\r\n\t\t\t\t\t\t\trole=\"link\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{#if event.displayStartTime !== false}\r\n\t\t\t\t\t\t\t\t<Text size=\"sm\" class=\"font-medium\">\r\n\t\t\t\t\t\t\t\t\t{formatEventTime(occ.startDateTime, event.timezone)}\r\n\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\tvariant={occ.ctaDisabled ? 'alternative' : 'default'}\r\n\t\t\t\t\t\t\t\tdisabled={occ.ctaDisabled}\r\n\t\t\t\t\t\t\t\tclass=\"shrink-0 pointer-events-none\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{occ.ctaText}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/each}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{/each}\r\n\t</div>\r\n</section>\r\n\r\n<style>\r\n\t/* === Shared === */\r\n\t.row-disabled {\r\n\t\topacity: 0.5;\r\n\t\tcursor: default;\r\n\t}\r\n\r\n\t/* === Design A: Full-width rows === */\r\n\t.row-a {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 0.75rem;\r\n\t\tpadding: 0.75rem;\r\n\t\tborder-radius: 0.5rem;\r\n\t\tborder-width: 1px;\r\n\t\tborder-style: solid;\r\n\t\tcursor: pointer;\r\n\t\ttransition-property: all;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n\r\n\t.row-a:hover:not(.row-disabled) {\r\n\t\tborder-color: hsl(var(--stroke-primary)); /* gray-300 */\r\n\t}\r\n\r\n .row-a:hover:not(.row-disabled) {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--stroke-primary)); /* gray-600 */\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n import type { USD } from '@getmicdrop/svelte-components';\r\n import { Heading, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n import { toast } from '@getmicdrop/svelte-components/toast';\r\n import type {\r\n EventData,\r\n OrderTotals,\r\n OrderLine,\r\n PromoCodeState,\r\n } from '$lib/premium-ticket-experience/types';\r\n import {\r\n mockEvent,\r\n mockSoldOutEvent,\r\n mockFreeEvent,\r\n mockSeriesEvent,\r\n mockSeriesInstanceEvent,\r\n mockCollectionEvent,\r\n mockRegistrationEvent,\r\n mockDonationEvent,\r\n mockMixedEvent,\r\n mockSectionedEvent,\r\n mockPromoEvent,\r\n mockHiddenOnlyEvent,\r\n mockMultiStageEvent,\r\n mockLongNameEvent,\r\n mockWideImageEvent,\r\n } from '$lib/premium-ticket-experience/mock-data';\r\n import {\r\n calculateTax,\r\n createDefaultPromoState,\r\n DURATION,\r\n } from '$lib/premium-ticket-experience/defaults';\r\n\r\n import HeroImage from './HeroImage.svelte';\r\n import EventHeader from './EventHeader.svelte';\r\n import TicketCard from './TicketCard.svelte';\r\n import BookingWidget from './BookingWidget.svelte';\r\n import AboutSection from './AboutSection.svelte';\r\n import PerformerGrid from './PerformerGrid.svelte';\r\n import FaqAccordion from './FaqAccordion.svelte';\r\n import MobileCta from './MobileCta.svelte';\r\n import DataToggle from './DataToggle.svelte';\r\n import PromoCodeInput from './PromoCodeInput.svelte';\r\n import ShowtimeDesigns from './ShowtimeDesigns.svelte';\r\n import GalleryCard from '../../../../components/Calendar/GalleryCard.svelte';\r\n import { mergeLabels } from '$lib/premium-ticket-experience/i18n/labels.js';\r\n\r\n // --- Props (dual-mode: showcase vs production) ---\r\n interface Props {\r\n /** Real event data from production route. Absence = showcase mode. */\r\n event?: EventData;\r\n /** Production checkout handler. Called with OrderTotals. */\r\n onCheckout?: (orderTotals: OrderTotals) => void;\r\n /** Production promo validation. Must return PromoCodeState from API. */\r\n onPromoApply?: (code: string) => Promise<PromoCodeState>;\r\n /** Production promo removal. */\r\n onPromoRemove?: () => void;\r\n /** Production collection event navigation. */\r\n onCollectionEventClick?: (event: {\r\n id?: number | string;\r\n slug: string;\r\n }) => void;\r\n /** Production showtime navigation for series events. */\r\n onShowtimeClick?: (occurrence: { id: number; slug: string }) => void;\r\n labels?: Record<string, string>;\r\n }\r\n\r\n let {\r\n event: eventProp = undefined,\r\n onCheckout: onCheckoutProp = undefined,\r\n onPromoApply: onPromoApplyProp = undefined,\r\n onPromoRemove: onPromoRemoveProp = undefined,\r\n onCollectionEventClick: onCollectionEventClickProp = undefined,\r\n onShowtimeClick: onShowtimeClickProp = undefined,\r\n labels = {},\r\n }: Props = $props();\r\n\r\n const mergedLabels = $derived(mergeLabels(labels));\r\n\r\n let isShowcaseMode = $derived(!eventProp);\r\n\r\n // --- State ---\r\n // Password removed: password protection is handled at the widget/browse level, not the event page\r\n type DataVariant =\r\n | 'default'\r\n | 'sold_out'\r\n | 'free'\r\n | 'registration'\r\n | 'series'\r\n | 'series_instance'\r\n | 'collection'\r\n | 'donation'\r\n | 'mixed'\r\n | 'sections'\r\n | 'promo'\r\n | 'hidden_only'\r\n | 'multi_stage'\r\n | 'long'\r\n | 'wide';\r\n let dataVariant = $state<DataVariant>('default');\r\n\r\n // Ticket quantities keyed by ticket ID\r\n let quantities: Record<number, number> = $state({});\r\n\r\n // Promo code state\r\n let promoState = $state<PromoCodeState>(createDefaultPromoState());\r\n\r\n // Donation amounts keyed by ticket ID\r\n let donationAmounts: Record<number, string> = $state({});\r\n\r\n // --- Derived: event selection ---\r\n let event: EventData = $derived(\r\n isShowcaseMode\r\n ? (() => {\r\n switch (dataVariant) {\r\n case 'sold_out':\r\n return mockSoldOutEvent;\r\n case 'free':\r\n return mockFreeEvent;\r\n case 'registration':\r\n return mockRegistrationEvent;\r\n case 'series':\r\n return mockSeriesEvent;\r\n case 'series_instance':\r\n return mockSeriesInstanceEvent;\r\n case 'collection':\r\n return mockCollectionEvent;\r\n case 'donation':\r\n return mockDonationEvent;\r\n case 'mixed':\r\n return mockMixedEvent;\r\n case 'sections':\r\n return mockSectionedEvent;\r\n case 'promo':\r\n return mockPromoEvent;\r\n case 'hidden_only':\r\n return mockHiddenOnlyEvent;\r\n case 'multi_stage':\r\n return mockMultiStageEvent;\r\n case 'long':\r\n return mockLongNameEvent;\r\n case 'wide':\r\n return mockWideImageEvent;\r\n default:\r\n return mockEvent;\r\n }\r\n })()\r\n : eventProp!\r\n );\r\n\r\n // Reset all state when variant changes\r\n $effect(() => {\r\n const _v = dataVariant;\r\n quantities = {};\r\n promoState = createDefaultPromoState();\r\n donationAmounts = {};\r\n });\r\n\r\n // Visible tickets (account for promo reveals)\r\n let visibleTickets = $derived(\r\n event.tickets.filter(t => {\r\n if (!t.isHidden) return true;\r\n if (promoState.revealHiddenTickets) return true;\r\n return promoState.revealTicketIds.includes(t.id);\r\n })\r\n );\r\n\r\n // MIC-1039 — hidden-only state. When the only purchasable tickets are\r\n // hidden behind a promo code, swap the ticket list for the PromoCodeInput\r\n // so the user has a way in instead of seeing nothing.\r\n let hasPurchasableHiddenTickets = $derived(\r\n event.tickets.some(t => t.isHidden && t.status === 'on_sale')\r\n );\r\n let isHiddenOnlyState = $derived(\r\n visibleTickets.length === 0 && hasPurchasableHiddenTickets\r\n );\r\n\r\n // Group tickets by section\r\n let groupedTickets = $derived(\r\n (() => {\r\n const groups: Record<string, typeof visibleTickets> = {};\r\n for (const ticket of visibleTickets) {\r\n const section = ticket.sectionName || '_default';\r\n if (!groups[section]) groups[section] = [];\r\n groups[section].push(ticket);\r\n }\r\n return groups;\r\n })()\r\n );\r\n\r\n let hasMultipleSections = $derived(\r\n Object.keys(groupedTickets).filter(k => k !== '_default').length > 0\r\n );\r\n\r\n // Show tickets for on_sale AND sold_out events (sold out shows them as disabled)\r\n let isOnSale = $derived(event.status === 'on_sale');\r\n let showTicketCards = $derived(\r\n (event.status === 'on_sale' || event.status === 'sold_out') &&\r\n visibleTickets.length > 0\r\n );\r\n\r\n // Calculate order totals (with donation amounts and promo discounts)\r\n let orderTotals: OrderTotals = $derived(\r\n (() => {\r\n const lines: OrderLine[] = [];\r\n let subtotal = 0;\r\n let fees = 0;\r\n let promoDiscount = 0;\r\n\r\n for (const ticket of event.tickets) {\r\n const qty = quantities[ticket.id] ?? 0;\r\n if (qty <= 0) continue;\r\n\r\n const isDonation = ticket.isDonation || ticket.ticketType === 2;\r\n const basePrice = isDonation\r\n ? parseFloat(donationAmounts[ticket.id]) || 0\r\n : ticket.price;\r\n const ticketFee = isDonation ? 0 : ticket.fee;\r\n\r\n // Calculate promo discount for this ticket\r\n let ticketDiscount = 0;\r\n if (\r\n promoState.isApplied &&\r\n promoState.discountAmount > 0 &&\r\n !isDonation\r\n ) {\r\n const eligible =\r\n promoState.discountTicketIds.length === 0 ||\r\n promoState.discountTicketIds.includes(ticket.id);\r\n if (eligible) {\r\n if (promoState.discountType === '%') {\r\n ticketDiscount = basePrice * (promoState.discountAmount / 100);\r\n } else if (promoState.discountType === '$') {\r\n ticketDiscount = Math.min(promoState.discountAmount, basePrice);\r\n }\r\n }\r\n }\r\n\r\n const effectivePrice = Math.max(0, basePrice - ticketDiscount);\r\n const ticketSubtotal = effectivePrice * qty;\r\n const totalTicketFee = ticketFee * qty;\r\n\r\n lines.push({\r\n ticketId: ticket.id,\r\n ticketName: ticket.name,\r\n quantity: qty,\r\n unitPrice: effectivePrice,\r\n fee: ticketFee,\r\n subtotal: ticketSubtotal,\r\n });\r\n\r\n subtotal += ticketSubtotal;\r\n fees += totalTicketFee;\r\n promoDiscount += ticketDiscount * qty;\r\n }\r\n\r\n const taxes = calculateTax(subtotal + fees, event.venue.taxPercentage);\r\n\r\n return {\r\n lines,\r\n subtotal,\r\n fees,\r\n taxes,\r\n total: subtotal + fees + taxes,\r\n promoDiscount,\r\n giftCardAmount: 0,\r\n };\r\n })()\r\n );\r\n\r\n let hasSelectedTickets = $derived(orderTotals.lines.length > 0);\r\n\r\n // Series occurrences — group by date for same-day shows\r\n let isSeries = $derived(!!event.eventSeriesId);\r\n\r\n // Collection — loose grouping of different events\r\n let isCollection = $derived(!!event.collectionId);\r\n\r\n // Full-width layout mode (no sidebar)\r\n let isFullWidth = $derived(isSeries || isCollection);\r\n\r\n // Collection events transformed to GalleryCard shape\r\n let galleryEvents = $derived(\r\n (event.collectionEvents ?? []).map(ce => ({\r\n ...ce,\r\n timeZone: event.timezone,\r\n }))\r\n );\r\n\r\n function handleCollectionEventClick(galleryEvent: { slug: string }) {\r\n if (onCollectionEventClickProp) {\r\n onCollectionEventClickProp(galleryEvent);\r\n } else {\r\n console.log('Navigate to collection event:', galleryEvent.slug);\r\n }\r\n }\r\n\r\n // --- Handlers ---\r\n function handleQuantityChange(ticketId: number, qty: number) {\r\n quantities = { ...quantities, [ticketId]: qty };\r\n }\r\n\r\n function handleDonationChange(ticketId: number, amount: string) {\r\n donationAmounts = { ...donationAmounts, [ticketId]: amount };\r\n }\r\n\r\n function handleCheckout() {\r\n if (onCheckoutProp) {\r\n onCheckoutProp(orderTotals);\r\n } else {\r\n console.log('Checkout:', orderTotals);\r\n const count = orderTotals.lines.reduce((s, l) => s + l.quantity, 0);\r\n toast.success(\r\n `Proceeding to checkout with ${count} ticket(s) totaling ${formatCurrency(orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}`\r\n );\r\n }\r\n }\r\n\r\n function handleDataVariantChange(v: DataVariant) {\r\n dataVariant = v;\r\n }\r\n\r\n // --- Promo handlers ---\r\n // Showcase test codes: REVEAL (unlocks hidden tickets), DISCOUNT10 (10% off), VIP20 ($20 off + reveal)\r\n function handlePromoApply(code: string) {\r\n if (onPromoApplyProp) {\r\n // Production mode: async API validation\r\n promoState = { ...promoState, isValidating: true, error: '', hint: '' };\r\n onPromoApplyProp(code)\r\n .then(result => {\r\n promoState = result;\r\n })\r\n .catch(() => {\r\n promoState = {\r\n ...createDefaultPromoState(),\r\n code: code.toUpperCase(),\r\n error: 'Failed to validate promo code',\r\n };\r\n });\r\n return;\r\n }\r\n\r\n // Showcase mode: mock validation\r\n const upper = code.toUpperCase();\r\n promoState = { ...promoState, isValidating: true, error: '', hint: '' };\r\n\r\n // Simulate async validation\r\n setTimeout(() => {\r\n if (upper === 'REVEAL') {\r\n promoState = {\r\n code: upper,\r\n isApplied: true,\r\n isValidating: false,\r\n error: '',\r\n hint: `${upper} applied. Hidden tickets are now visible.`,\r\n discountAmount: 0,\r\n discountType: '',\r\n discountTicketIds: [],\r\n revealHiddenTickets: true,\r\n revealTicketIds: [],\r\n };\r\n } else if (upper === 'DISCOUNT10') {\r\n promoState = {\r\n code: upper,\r\n isApplied: true,\r\n isValidating: false,\r\n error: '',\r\n hint: `${upper} applied. 10% off all tickets.`,\r\n discountAmount: 10,\r\n discountType: '%',\r\n discountTicketIds: [],\r\n revealHiddenTickets: false,\r\n revealTicketIds: [],\r\n };\r\n } else if (upper === 'VIP20') {\r\n promoState = {\r\n code: upper,\r\n isApplied: true,\r\n isValidating: false,\r\n error: '',\r\n hint: `${upper} applied. $20 off + hidden tickets revealed.`,\r\n discountAmount: 20,\r\n discountType: '$',\r\n discountTicketIds: [],\r\n revealHiddenTickets: true,\r\n revealTicketIds: [],\r\n };\r\n } else {\r\n promoState = {\r\n ...createDefaultPromoState(),\r\n code: upper,\r\n error: 'Invalid promo code',\r\n };\r\n }\r\n }, 800);\r\n }\r\n\r\n function handlePromoRemove() {\r\n // Always clean up hidden ticket quantities locally\r\n const hiddenIds = event.tickets.filter(t => t.isHidden).map(t => t.id);\r\n const newQuantities = { ...quantities };\r\n for (const id of hiddenIds) {\r\n delete newQuantities[id];\r\n }\r\n quantities = newQuantities;\r\n promoState = createDefaultPromoState();\r\n\r\n // Notify production caller\r\n if (onPromoRemoveProp) {\r\n onPromoRemoveProp();\r\n }\r\n }\r\n\r\n // Compute per-ticket promo info\r\n function getTicketPromoInfo(\r\n ticketId: number,\r\n ticket: {\r\n price: number;\r\n isDonation: boolean;\r\n isHidden: boolean;\r\n ticketType?: number;\r\n }\r\n ) {\r\n const isDonation = ticket.isDonation || ticket.ticketType === 2;\r\n const isRevealed =\r\n ticket.isHidden &&\r\n (promoState.revealHiddenTickets ||\r\n promoState.revealTicketIds.includes(ticketId));\r\n\r\n let isDiscounted = false;\r\n let discountedPrice: number | null = null;\r\n\r\n if (promoState.isApplied && promoState.discountAmount > 0 && !isDonation) {\r\n const eligible =\r\n promoState.discountTicketIds.length === 0 ||\r\n promoState.discountTicketIds.includes(ticketId);\r\n if (eligible) {\r\n isDiscounted = true;\r\n if (promoState.discountType === '%') {\r\n discountedPrice =\r\n ticket.price * (1 - promoState.discountAmount / 100);\r\n } else if (promoState.discountType === '$') {\r\n discountedPrice = Math.max(\r\n 0,\r\n ticket.price - promoState.discountAmount\r\n );\r\n }\r\n }\r\n }\r\n\r\n return { isRevealed, isDiscounted, discountedPrice };\r\n }\r\n</script>\r\n\r\n<div class=\"w-full min-h-screen bg-surface-primary text-color-primary\">\r\n <!-- Dev: mock data toggle (showcase mode only) -->\r\n {#if isShowcaseMode}\r\n <DataToggle current={dataVariant} onChange={handleDataVariantChange} />\r\n {/if}\r\n\r\n <div class=\"max-w-6xl mx-auto px-4 py-6 md:px-6 md:py-8\">\r\n <!-- Shared desktop content (rendered via snippet to avoid duplication) -->\r\n {#snippet desktopContent()}\r\n <!-- Hero image -->\r\n <HeroImage src={event.imageUrl} alt={event.title} labels={mergedLabels} />\r\n\r\n <!-- Event header (title, date, venue, stage, age, scarcity badge) -->\r\n <EventHeader\r\n {event}\r\n hideDateTime={isFullWidth}\r\n hideVenue={isCollection}\r\n labels={mergedLabels}\r\n />\r\n\r\n <!-- MIC-1039 — hidden-only state: just the promo input, no ticket scaffolding -->\r\n {#if isHiddenOnlyState && !isFullWidth}\r\n <section id=\"desktop-ticket-section\">\r\n <PromoCodeInput\r\n {promoState}\r\n onApply={handlePromoApply}\r\n onRemove={handlePromoRemove}\r\n labels={mergedLabels}\r\n />\r\n </section>\r\n <!-- INLINE TICKET SELECTION (hidden for series/collection — no single-event tickets) -->\r\n {:else if showTicketCards && !isFullWidth}\r\n <section id=\"desktop-ticket-section\">\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">\r\n {isOnSale\r\n ? labels.selectTickets || 'Select tickets'\r\n : labels.ticketsTab || 'Tickets'}\r\n </Heading>\r\n\r\n {#if hasMultipleSections}\r\n <!-- Sectioned tickets -->\r\n {#each Object.entries(groupedTickets) as [sectionName, sectionTickets] (sectionName)}\r\n <div class=\"mb-6 last:mb-0\">\r\n {#if sectionName !== '_default'}\r\n <Heading level={3} size=\"sm\" weight=\"semibold\" class=\"mb-3\">\r\n {sectionName}\r\n </Heading>\r\n {/if}\r\n <div class=\"space-y-3\">\r\n {#each sectionTickets as ticket (ticket.id)}\r\n {@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n <TicketCard\r\n {ticket}\r\n quantity={quantities[ticket.id] ?? 0}\r\n onQuantityChange={handleQuantityChange}\r\n donationAmount={donationAmounts[ticket.id] ?? ''}\r\n onDonationChange={handleDonationChange}\r\n isRevealedByPromo={promoInfo.isRevealed}\r\n isDiscountedByPromo={promoInfo.isDiscounted}\r\n discountedPrice={promoInfo.discountedPrice}\r\n labels={mergedLabels}\r\n />\r\n {/each}\r\n </div>\r\n </div>\r\n {/each}\r\n {:else}\r\n <!-- Flat ticket list -->\r\n <div class=\"space-y-3\">\r\n {#each visibleTickets as ticket (ticket.id)}\r\n {@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n <TicketCard\r\n {ticket}\r\n quantity={quantities[ticket.id] ?? 0}\r\n onQuantityChange={handleQuantityChange}\r\n donationAmount={donationAmounts[ticket.id] ?? ''}\r\n onDonationChange={handleDonationChange}\r\n isRevealedByPromo={promoInfo.isRevealed}\r\n isDiscountedByPromo={promoInfo.isDiscounted}\r\n discountedPrice={promoInfo.discountedPrice}\r\n labels={mergedLabels}\r\n />\r\n {/each}\r\n </div>\r\n {/if}\r\n\r\n <!-- Promo code input: only show when event is on sale -->\r\n {#if isOnSale}\r\n <PromoCodeInput\r\n {promoState}\r\n onApply={handlePromoApply}\r\n onRemove={handlePromoRemove}\r\n labels={mergedLabels}\r\n />\r\n {/if}\r\n </section>\r\n {/if}\r\n\r\n <!-- Showtimes (series — primary content, before About) -->\r\n {#if isSeries}\r\n <section>\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\"\r\n >Upcoming Shows</Heading\r\n >\r\n <ShowtimeDesigns\r\n {event}\r\n onShowtimeClick={onShowtimeClickProp}\r\n labels={mergedLabels}\r\n />\r\n </section>\r\n {/if}\r\n\r\n <!-- Collection: About goes above event widgets -->\r\n {#if isCollection}\r\n <AboutSection description={event.description} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Collection events grid (widgets) -->\r\n {#if isCollection}\r\n <section>\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Events</Heading>\r\n <div class=\"collection-grid\">\r\n {#each galleryEvents as ce (ce.id)}\r\n <GalleryCard\r\n event={ce}\r\n oneventClick={handleCollectionEventClick}\r\n />\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- About section (non-collection) -->\r\n {#if !isCollection}\r\n <AboutSection description={event.description} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Performers (hidden for series/collection) -->\r\n {#if !isFullWidth}\r\n <PerformerGrid performers={event.performers} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- FAQs (hidden for collection — FAQs are per-venue, not per-collection) -->\r\n {#if event.faqs.length > 0 && !isCollection}\r\n <FaqAccordion faqs={event.faqs} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Disclaimer -->\r\n {#if event.disclaimer}\r\n <section class=\"pt-4 border-t border-default\">\r\n <Text size=\"xs\" color=\"muted\" leading=\"relaxed\" class=\"block\">\r\n {event.disclaimer}\r\n </Text>\r\n </section>\r\n {/if}\r\n {/snippet}\r\n\r\n <!-- ============================================== -->\r\n <!-- DESKTOP LAYOUT -->\r\n <!-- ============================================== -->\r\n {#if isFullWidth}\r\n <!-- Series/Collection: full-width single column (no sidebar) -->\r\n <div class=\"hidden md:block space-y-8\">\r\n {@render desktopContent()}\r\n </div>\r\n {:else}\r\n <!-- Regular: two-column Airbnb split (1fr 360px) -->\r\n <!-- @tokens-px-escape: 360px is a structural sidebar column width with no token equivalent; CSS grid-template-columns cannot use Tailwind spacing classes -->\r\n <div\r\n class=\"hidden md:grid gap-8 items-start\"\r\n style=\"grid-template-columns: 1fr 360px;\"\r\n >\r\n <div class=\"space-y-8\">\r\n {@render desktopContent()}\r\n </div>\r\n <div class=\"sticky top-6\">\r\n <BookingWidget\r\n {event}\r\n {orderTotals}\r\n {hasSelectedTickets}\r\n onCheckout={handleCheckout}\r\n promoApplied={promoState.isApplied}\r\n labels={mergedLabels}\r\n />\r\n </div>\r\n </div>\r\n {/if}\r\n\r\n <!-- ============================================== -->\r\n <!-- MOBILE: Single column with fixed bottom CTA -->\r\n <!-- ============================================== -->\r\n <div class=\"md:hidden space-y-6\" class:pb-24={!isFullWidth}>\r\n <!-- Hero image -->\r\n <HeroImage src={event.imageUrl} alt={event.title} labels={mergedLabels} />\r\n\r\n <!-- Event header -->\r\n <EventHeader\r\n {event}\r\n hideDateTime={isFullWidth}\r\n hideVenue={isCollection}\r\n labels={mergedLabels}\r\n />\r\n\r\n <!-- MIC-1039 — hidden-only state (mobile) -->\r\n {#if isHiddenOnlyState && !isFullWidth}\r\n <section id=\"mobile-ticket-section\">\r\n <PromoCodeInput\r\n {promoState}\r\n onApply={handlePromoApply}\r\n onRemove={handlePromoRemove}\r\n labels={mergedLabels}\r\n />\r\n </section>\r\n <!-- Inline ticket selection (mobile — hidden for series/collection) -->\r\n {:else if showTicketCards && !isFullWidth}\r\n <section id=\"mobile-ticket-section\">\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">\r\n {isOnSale\r\n ? labels.selectTickets || 'Select tickets'\r\n : labels.ticketsTab || 'Tickets'}\r\n </Heading>\r\n\r\n {#if hasMultipleSections}\r\n {#each Object.entries(groupedTickets) as [sectionName, sectionTickets] (sectionName)}\r\n <div class=\"mb-6 last:mb-0\">\r\n {#if sectionName !== '_default'}\r\n <Heading level={3} size=\"sm\" weight=\"semibold\" class=\"mb-3\">\r\n {sectionName}\r\n </Heading>\r\n {/if}\r\n <div class=\"space-y-3\">\r\n {#each sectionTickets as ticket (ticket.id)}\r\n {@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n <TicketCard\r\n {ticket}\r\n quantity={quantities[ticket.id] ?? 0}\r\n onQuantityChange={handleQuantityChange}\r\n donationAmount={donationAmounts[ticket.id] ?? ''}\r\n onDonationChange={handleDonationChange}\r\n isRevealedByPromo={promoInfo.isRevealed}\r\n isDiscountedByPromo={promoInfo.isDiscounted}\r\n discountedPrice={promoInfo.discountedPrice}\r\n labels={mergedLabels}\r\n />\r\n {/each}\r\n </div>\r\n </div>\r\n {/each}\r\n {:else}\r\n <div class=\"space-y-3\">\r\n {#each visibleTickets as ticket (ticket.id)}\r\n {@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n <TicketCard\r\n {ticket}\r\n quantity={quantities[ticket.id] ?? 0}\r\n onQuantityChange={handleQuantityChange}\r\n donationAmount={donationAmounts[ticket.id] ?? ''}\r\n onDonationChange={handleDonationChange}\r\n isRevealedByPromo={promoInfo.isRevealed}\r\n isDiscountedByPromo={promoInfo.isDiscounted}\r\n discountedPrice={promoInfo.discountedPrice}\r\n labels={mergedLabels}\r\n />\r\n {/each}\r\n </div>\r\n {/if}\r\n\r\n <!-- Promo code input: only show when event is on sale -->\r\n {#if isOnSale}\r\n <PromoCodeInput\r\n {promoState}\r\n onApply={handlePromoApply}\r\n onRemove={handlePromoRemove}\r\n labels={mergedLabels}\r\n />\r\n {/if}\r\n </section>\r\n\r\n <!-- Mobile order summary: now in slide-up drawer from MobileCta -->\r\n {/if}\r\n\r\n <!-- Showtimes (mobile — primary content for series) -->\r\n {#if isSeries}\r\n <section>\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\"\r\n >Upcoming Shows</Heading\r\n >\r\n <ShowtimeDesigns\r\n {event}\r\n onShowtimeClick={onShowtimeClickProp}\r\n labels={mergedLabels}\r\n />\r\n </section>\r\n {/if}\r\n\r\n <!-- Collection: About goes above event widgets -->\r\n {#if isCollection}\r\n <AboutSection description={event.description} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Collection events grid (mobile) -->\r\n {#if isCollection}\r\n <section>\r\n <Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Events</Heading>\r\n <div class=\"collection-grid\">\r\n {#each galleryEvents as ce (ce.id)}\r\n <GalleryCard\r\n event={ce}\r\n oneventClick={handleCollectionEventClick}\r\n />\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- About section (non-collection) -->\r\n {#if !isCollection}\r\n <AboutSection description={event.description} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Performers (hidden for series/collection) -->\r\n {#if !isFullWidth}\r\n <PerformerGrid performers={event.performers} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- FAQs (hidden for collection) -->\r\n {#if !isCollection}\r\n <FaqAccordion faqs={event.faqs} labels={mergedLabels} />\r\n {/if}\r\n\r\n <!-- Disclaimer -->\r\n {#if event.disclaimer}\r\n <section class=\"pt-4 border-t border-default\">\r\n <Text size=\"xs\" color=\"muted\" leading=\"relaxed\" class=\"block\">\r\n {event.disclaimer}\r\n </Text>\r\n </section>\r\n {/if}\r\n </div>\r\n\r\n <!-- Mobile: Fixed bottom CTA bar (DICE-style) — hidden for series/collection -->\r\n {#if !isFullWidth}\r\n <div class=\"md:hidden\">\r\n <MobileCta\r\n {event}\r\n {orderTotals}\r\n {hasSelectedTickets}\r\n onCheckout={handleCheckout}\r\n labels={mergedLabels}\r\n />\r\n </div>\r\n {/if}\r\n </div>\r\n</div>\r\n\r\n<style>\r\n .collection-grid {\r\n display: grid;\r\n gap: 1.5rem;\r\n /* @tokens-px-escape: 240px is a CSS grid minmax breakpoint with no token equivalent; auto-fill layout cannot use Tailwind spacing classes */\r\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\r\n }\r\n</style>\r\n"],"names":["$","$$props","div","root","img","img_1","hideDateTime","hideVenue","scarcityLevel","getScarcityLevel","scarcityText","getScarcityText","ageText","shareEvent","url","shareData","err","fallbackShare","toast","div_1","Heading","node","ScarcityBadge","$$anchor","$$render","consequent","button","Share","div_2","fragment_2","Calendar","span","node_4","div_3","root_4","Time","div_4","node_6","span_1","root_5","formatTimeRange","span_2","root_6","formatEventTime","consequent_1","alternate","span_3","root_7","formatDoorsTime","consequent_2","div_5","root_8","span_4","node_9","consequent_3","consequent_4","formatFullDateCompact","consequent_5","div_6","fragment_3","Location","div_7","node_11","span_5","span_6","root_10","text_7","consequent_6","div_8","root_11","Theater","span_7","node_14","consequent_7","div_9","root_12","User","span_8","node_16","consequent_8","text_6","consequent_9","donationAmount","isRevealedByPromo","isDiscountedByPromo","discountedPrice","labels","isDonation","isSoldOut","isComingSoon","isSalesEnded","isDisabled","isSelected","donationValue","donationError","isDonationValid","canDecrement","canIncrement","decrement","newQty","increment","donationInputValue","syncDonation","totalPrice","priceDisplay","feeCaption","salesStartDisplay","formatSmartSalesDate","article","Badge","Text","node_2","root_13","Input","$$value","discountedTotal","fragment_9","root_15","formatCurrency","root_16","fragment_10","root_18","consequent_10","consequent_11","Button","Subtract","node_10","Add","consequent_12","alternate_1","classes","DURATION","classes_1","promoApplied","ctaConfig","getCtaConfig","getPriceDisplay","isFreeEvent","visible","t","scrollToTickets","section","Card","root_2","OrderSummary","node_1","$0","text_1","root_9","formatBrowseDate","root_14","node_12","alternate_2","root_19","div_10","root_21","node_15","text_9","text_10","node_17","text_11","alternate_3","alternate_4","paragraphs","p","paragraph","root_1","performer","$1","Avatar","node_3","Accordion","faq","AccordionItem","text_2","totalTicketCount","sum","l","drawerOpen","handleCtaClick","toggleDrawer","closeDrawer","ChevronDown","button_1","text_3","ChevronUp","node_8","text_5","options","option","isActive","fragment_1","text","isExpanded","inputValue","handleApply","trimmed","handleRemove","handleKeydown","e","shouldExpand","root_3","$2","$3","onShowtimeClick","groupedOccurrences","groups","occ","dateKey","g","handleShowtimeClick","group","eventProp","onCheckoutProp","onPromoApplyProp","onPromoRemoveProp","onCollectionEventClickProp","onShowtimeClickProp","mergedLabels","mergeLabels","isShowcaseMode","dataVariant","quantities","promoState","createDefaultPromoState","donationAmounts","event","mockSoldOutEvent","mockFreeEvent","mockRegistrationEvent","mockSeriesEvent","mockSeriesInstanceEvent","mockCollectionEvent","mockDonationEvent","mockMixedEvent","mockSectionedEvent","mockPromoEvent","mockHiddenOnlyEvent","mockMultiStageEvent","mockLongNameEvent","mockWideImageEvent","mockEvent","visibleTickets","hasPurchasableHiddenTickets","isHiddenOnlyState","groupedTickets","ticket","hasMultipleSections","k","isOnSale","showTicketCards","orderTotals","lines","subtotal","fees","promoDiscount","qty","basePrice","ticketFee","ticketDiscount","effectivePrice","ticketSubtotal","totalTicketFee","taxes","calculateTax","hasSelectedTickets","isSeries","isCollection","isFullWidth","galleryEvents","ce","handleCollectionEventClick","galleryEvent","handleQuantityChange","ticketId","handleDonationChange","amount","handleCheckout","count","s","handleDataVariantChange","v","handlePromoApply","code","result","upper","handlePromoRemove","hiddenIds","newQuantities","id","getTicketPromoInfo","isRevealed","isDiscounted","DataToggle","desktopContent","HeroImage","EventHeader","section_1","PromoCodeInput","section_2","node_5","sectionName","sectionTickets","$$item","$$array","promoInfo","TicketCard","section_3","ShowtimeDesigns","AboutSection","section_4","root_17","GalleryCard","PerformerGrid","FaqAccordion","section_5","root_23","node_20","text_4","root_25","node_22","root_26","node_23","BookingWidget","node_24","consequent_13","node_21","node_25","node_26","section_6","root_27","node_28","section_7","root_28","node_29","$$array_1","div_11","root_31","consequent_15","div_12","node_32","div_13","root_35","consequent_16","consequent_17","consequent_14","consequent_18","section_8","root_38","node_35","node_36","consequent_19","consequent_20","section_9","root_41","node_39","div_14","consequent_21","consequent_22","consequent_23","consequent_24","section_10","root_47","node_44","consequent_25","div_15","root_49","MobileCta","node_46","consequent_26"],"mappings":"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"}
|