@getmicdrop/venue-calendar 4.0.64 → 4.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{CarouselView.legacy-CHlVZ-nC.js → CarouselView.legacy-DwyJJIav.js} +3 -3
- package/dist/{CarouselView.legacy-CHlVZ-nC.js.map → CarouselView.legacy-DwyJJIav.js.map} +1 -1
- package/dist/{CartView-BAeAbkEa.js → CartView-C9EUV8-X.js} +3 -3
- package/dist/{CartView-BAeAbkEa.js.map → CartView-C9EUV8-X.js.map} +1 -1
- package/dist/{Checkout-BbAroeeC.js → Checkout-BpqHdIxi.js} +62 -62
- package/dist/Checkout-BpqHdIxi.js.map +1 -0
- package/dist/{Checkout-2oWblXIZ.js → Checkout-Q0ZAQ-H5.js} +5 -5
- package/dist/{Checkout-2oWblXIZ.js.map → Checkout-Q0ZAQ-H5.js.map} +1 -1
- package/dist/{Checkout.legacy-Caboro1G.js → Checkout.legacy-CKEzImRg.js} +5 -5
- package/dist/{Checkout.legacy-Caboro1G.js.map → Checkout.legacy-CKEzImRg.js.map} +1 -1
- package/dist/{CheckoutTimer-Cz5G7vxK.js → CheckoutTimer-OaGZBWkq.js} +2 -2
- package/dist/{CheckoutTimer-Cz5G7vxK.js.map → CheckoutTimer-OaGZBWkq.js.map} +1 -1
- package/dist/{CollectionView-DEKutvzz.js → CollectionView-Cu1tSX98.js} +5 -5
- package/dist/{CollectionView-DEKutvzz.js.map → CollectionView-Cu1tSX98.js.map} +1 -1
- package/dist/{CollectionView.legacy-BTwbPnx9.js → CollectionView.legacy-CfXW9Hs2.js} +3 -3
- package/dist/{CollectionView.legacy-BTwbPnx9.js.map → CollectionView.legacy-CfXW9Hs2.js.map} +1 -1
- package/dist/{Event-CjaJ5o3v.js → Event-gWjWmwBL.js} +4 -4
- package/dist/{Event-CjaJ5o3v.js.map → Event-gWjWmwBL.js.map} +1 -1
- package/dist/{EventDetailsView-DXnhlk3-.js → EventDetailsView-z8iE9m25.js} +6 -6
- package/dist/{EventDetailsView-DXnhlk3-.js.map → EventDetailsView-z8iE9m25.js.map} +1 -1
- package/dist/{EventPage-C0lONi_3.js → EventPage-BuM5a5jv.js} +5 -5
- package/dist/{EventPage-C0lONi_3.js.map → EventPage-BuM5a5jv.js.map} +1 -1
- package/dist/{EventPage.legacy-BEKcjbI4.js → EventPage.legacy-BFMUEm7m.js} +5 -5
- package/dist/{EventPage.legacy-BEKcjbI4.js.map → EventPage.legacy-BFMUEm7m.js.map} +1 -1
- package/dist/{FeaturedView.legacy-BkepqGg3.js → FeaturedView.legacy-BsGMp211.js} +2 -2
- package/dist/{FeaturedView.legacy-BkepqGg3.js.map → FeaturedView.legacy-BsGMp211.js.map} +1 -1
- package/dist/{GalleryCard-DceWAls1.js → GalleryCard-D4kI6OPh.js} +2 -2
- package/dist/{GalleryCard-DceWAls1.js.map → GalleryCard-D4kI6OPh.js.map} +1 -1
- package/dist/{GalleryView.legacy-CA95oQGJ.js → GalleryView.legacy-BxueLwgD.js} +3 -3
- package/dist/{GalleryView.legacy-CA95oQGJ.js.map → GalleryView.legacy-BxueLwgD.js.map} +1 -1
- package/dist/{GroupedListView.legacy-oOoTwXPq.js → GroupedListView.legacy-DLRzoXJO.js} +2 -2
- package/dist/{GroupedListView.legacy-oOoTwXPq.js.map → GroupedListView.legacy-DLRzoXJO.js.map} +1 -1
- package/dist/{OrderSummary-DRXcg2M_.js → OrderSummary-OMzQwWpd.js} +2 -2
- package/dist/{OrderSummary-DRXcg2M_.js.map → OrderSummary-OMzQwWpd.js.map} +1 -1
- package/dist/{PromoCodeInput-wPJjGt_v.js → PromoCodeInput-DqZLWySx.js} +3 -3
- package/dist/{PromoCodeInput-wPJjGt_v.js.map → PromoCodeInput-DqZLWySx.js.map} +1 -1
- package/dist/{SeriesPage-BRrpv4-3.js → SeriesPage-Df8RQrHs.js} +5 -5
- package/dist/{SeriesPage-BRrpv4-3.js.map → SeriesPage-Df8RQrHs.js.map} +1 -1
- package/dist/{SeriesPage.legacy-BIKd6SYo.js → SeriesPage.legacy-B1YH-fxL.js} +2 -2
- package/dist/{SeriesPage.legacy-BIKd6SYo.js.map → SeriesPage.legacy-B1YH-fxL.js.map} +1 -1
- package/dist/{Success-fMTg0QHe.js → Success-C5qdC9Br.js} +7 -7
- package/dist/Success-C5qdC9Br.js.map +1 -0
- package/dist/{Success.legacy-DwLdwq_g.js → Success.legacy-DxyhNRyc.js} +2 -2
- package/dist/{Success.legacy-DwLdwq_g.js.map → Success.legacy-DxyhNRyc.js.map} +1 -1
- package/dist/{VenueCalendar-ySqncMTn.js → VenueCalendar-B5CwsNGf.js} +272 -253
- package/dist/{VenueCalendar-ySqncMTn.js.map → VenueCalendar-B5CwsNGf.js.map} +1 -1
- package/dist/{ViewTicketsEmbed-1X1K2UGI.js → ViewTicketsEmbed-CT8a3M7e.js} +3 -3
- package/dist/{ViewTicketsEmbed-1X1K2UGI.js.map → ViewTicketsEmbed-CT8a3M7e.js.map} +1 -1
- package/dist/{WaitlistModal-DqPbCdOl.js → WaitlistModal-BO61UvHP.js} +107 -107
- package/dist/WaitlistModal-BO61UvHP.js.map +1 -0
- package/dist/{api-ohGBZw0r.js → api-DgNDXvfr.js} +2 -2
- package/dist/{api-ohGBZw0r.js.map → api-DgNDXvfr.js.map} +1 -1
- package/dist/{data-toggle-store.svelte-CxjHrCmm.js → data-toggle-store.svelte-CG8qrFd9.js} +2 -2
- package/dist/{data-toggle-store.svelte-CxjHrCmm.js.map → data-toggle-store.svelte-CG8qrFd9.js.map} +1 -1
- package/dist/seo/helpers.d.ts +23 -0
- package/dist/seo/index.d.ts +2 -1
- package/dist/seo/seo.cjs +1 -1
- package/dist/seo/seo.cjs.map +1 -1
- package/dist/seo/seo.mjs +197 -177
- package/dist/seo/seo.mjs.map +1 -1
- package/dist/seo/types.d.ts +150 -137
- package/dist/{transform-CmXbkRWL.js → transform-BBzZumfP.js} +78 -78
- package/dist/transform-BBzZumfP.js.map +1 -0
- package/dist/venue-calendar.css +1 -1
- package/dist/venue-calendar.es.js +2 -2
- package/dist/venue-calendar.iife.js +43 -43
- package/dist/venue-calendar.iife.js.map +1 -1
- package/dist/venue-calendar.umd.js +27 -27
- package/dist/venue-calendar.umd.js.map +1 -1
- package/package.json +1 -1
- package/dist/Checkout-BbAroeeC.js.map +0 -1
- package/dist/Success-fMTg0QHe.js.map +0 -1
- package/dist/WaitlistModal-DqPbCdOl.js.map +0 -1
- package/dist/transform-CmXbkRWL.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventPage.legacy-BEKcjbI4.js","sources":["../src/lib/utils/performerDisplay.ts","../src/assets/images/default-avatar.png","../src/components/DateSelector/DateSelectorGrouped.svelte","../src/components/Events/EventMeta.svelte","../src/components/Views/EventPage.legacy.svelte"],"sourcesContent":["import { formatFullName } from '@getmicdrop/svelte-components';\r\n/**\r\n * Performer display utilities: avatar path/URL resolution, display name\r\n */\r\nimport { CDN_BASE_URL, getImageUrl } from './imageUrl';\r\n\r\ninterface PerformerProfile {\r\n profileImageSource?: string;\r\n profileImage?: string;\r\n avatarPosition1?: string;\r\n avatarPosition2?: string;\r\n avatarPosition3?: string;\r\n avatarPosition4?: string;\r\n avatarPosition5?: string;\r\n avatarPosition6?: string;\r\n displayName?: string;\r\n firstName?: string;\r\n lastName?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Get the display avatar path for a performer based on their profileImageSource setting.\r\n * This mirrors the backend logic in auth/utils/avatar.go\r\n */\r\nexport function getDisplayAvatarPath(profile: PerformerProfile | null | undefined): string {\r\n if (!profile) return \"\";\r\n\r\n const source = profile.profileImageSource || \"1\";\r\n\r\n // Map source number to the corresponding avatar field\r\n switch (source) {\r\n case \"1\":\r\n return profile.avatarPosition1 || profile.profileImage || \"\";\r\n case \"2\":\r\n return profile.avatarPosition2 || \"\";\r\n case \"3\":\r\n return profile.avatarPosition3 || \"\";\r\n case \"4\":\r\n return profile.avatarPosition4 || \"\";\r\n case \"5\":\r\n return profile.avatarPosition5 || \"\";\r\n case \"6\":\r\n return profile.avatarPosition6 || \"\";\r\n default:\r\n // Fallback to position 1 or profileImage\r\n return profile.avatarPosition1 || profile.profileImage || \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Get the full display avatar URL for a performer.\r\n * Combines getDisplayAvatarPath with CDN URL resolution.\r\n */\r\nexport function getDisplayAvatarUrl(\r\n profile: PerformerProfile | null | undefined,\r\n baseUrl: string = CDN_BASE_URL\r\n): string {\r\n const path = getDisplayAvatarPath(profile);\r\n if (!path) return \"\";\r\n return getImageUrl(path, baseUrl);\r\n}\r\n\r\n/**\r\n * Get the performer display name based on their profile settings.\r\n * This mirrors the backend logic in auth/utils/avatar.go\r\n */\r\nexport function getPerformerDisplayName(profile: PerformerProfile | null | undefined): string {\r\n if (!profile) return \"\";\r\n\r\n // If displayName is set, use it\r\n if (profile.displayName) {\r\n return profile.displayName;\r\n }\r\n\r\n // Otherwise use first + last name\r\n const firstName = profile.firstName || \"\";\r\n const lastName = profile.lastName || \"\";\r\n const fullName = formatFullName(firstName, lastName).trim();\r\n\r\n return fullName || \"\";\r\n}\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAxCAYAAABznEEcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANTSURBVHgB1ZpNayJBEIZLM4lJ2CXLJiQYdsNCYEkguYSAIF780149imcFJSiKF2ExBzF+JDq69Q5bwQyuM9Ndo/GBtv0c663urq7ungQFUCgUUrRFjo6O3Hw+P1v3nYT/jWKx6KTT6XPHcb5Pp9OtCvAx4PJ8e3v77P/gg4hKpXKRSqXSruvu0eflbTgcNh8fH0fyxruIer1+uVgs0rQDsJPdyWTyJEKSeKjVaqe7IgDsMYeHh7/ZZq/HJP+9f0k7BoSw88/xPMnd6CvXBxQTHBwoLubz+QVaw+EnXxKJBGnR6/Wo0+l49bKAk5MTr1xfX9Px8TFpgNYolUoHCW6SX/z6lCzp9/uIbl4dxNXVlaaYtkMKwPMQEOX7aKlMJqMiJEmWdLvdSAKE0WhE5XLZq22xEgEDODCQKfi9iQP8WImAAFtPoluh2GAsAsajK2nQbDbJBmMRYaJQWPzhOCrGImy7gB+bbmksQnsmtmlZ6xCrxf7+PpliLMLmT7WvZyyCV3+kCfIqU4xF4E+1WgMO2Vp3QiKnge11rAa2RiYKAWdnZ2SDlQi0xsPDg3FXgANubm7IFusQi7FhklLL7zTGlco8IQaFiVgwGt7P5XJqKzyVRRGAQehaSB+Q0KFeTiVkeYoxoD3HqIkQIOb+/p42SaxpB/IrjZVbECotAWNlcYNEDoavShBlgkSNsGobWgWr3Q4YLas7k6wWXQ9CLOebtpEIMV5zYWSxjRNtywbehvHYctEG18RyF0JQohBahOYWy/8QJ6GOMpOHik6bELAM5pkoWzmBIuCVTQoQ0L3C7mkFioBHNi1AQIuE2RZaKwJRSGtvyRQ4MSh8rxURRxSKCgQEOXJtdJJQh+6kOSeEQWZ2mRDXsVYELoLMFMAjELJcNMeKZLnLJSyh5wl4xp/viDCMHUk9/Cm4/xriYdTwshhsmp7zKarr8I9H/OdGudMqYctAFIrW4mcV4/H41ZnNZmOKCfF8XPCh42s2mx0neXrH7QYD2k28WyS8EMunp9udDAxAK1Sr1T94/n7222g0zrn//qQdAAL46Prp7u7uDa8/HGC3Wq1vPFB+cMt8prtr/Axc122LALDyFB73enB1yoMytjsNojIYDF7Ynh4b/+L/7C+YasWK9TsWIAAAAABJRU5ErkJggg==\"","<script>\r\n import { getDefaultTimezone } from '@getmicdrop/svelte-components';\r\nimport { formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\r\n\r\n let {\r\n occurrences = [],\r\n currentEventId = null,\r\n venueTimeZone = getDefaultTimezone(),\r\n variant = 'A', // A, B, or C for different layouts\r\n onbuyTickets,\r\n labels = {},\r\n } = $props();\r\n\r\n // Filter to only future occurrences\r\n let futureOccurrences = $derived(occurrences.filter(occ => {\r\n const occDate = new Date(occ.startDateTime);\r\n return occDate > new Date();\r\n }));\r\n\r\n // Group occurrences by date\r\n let groupedByDate = $derived.by(() => {\r\n const groups = new Map();\r\n\r\n for (const occ of futureOccurrences) {\r\n const dateKey = formatFullDate(occ.startDateTime, venueTimeZone);\r\n\r\n if (!groups.has(dateKey)) {\r\n groups.set(dateKey, []);\r\n }\r\n groups.get(dateKey).push(occ);\r\n }\r\n\r\n return Array.from(groups.entries());\r\n });\r\n\r\n // Check if we have dates to show\r\n let hasShowtimes = $derived(futureOccurrences.length > 0);\r\n\r\n // Format time for button display (e.g., \"7:00 PM\")\r\n function formatTime(dateStr) {\r\n return formatEventTime(dateStr, venueTimeZone);\r\n }\r\n\r\n // Navigate directly to tickets page for this occurrence\r\n function selectShowtime(occurrence) {\r\n if (occurrence.ctaState?.disabled) return;\r\n\r\n onbuyTickets?.({\r\n eventId: occurrence.id,\r\n slug: occurrence.slug,\r\n startDateTime: occurrence.startDateTime\r\n });\r\n }\r\n\r\n // Check if button should be disabled\r\n function isButtonDisabled(occurrence) {\r\n return occurrence.ctaState?.disabled || false;\r\n }\r\n\r\n // Get the sublabel for a showtime button\r\n // Returns { line1, line2? } or null\r\n function getSublabel(occurrence) {\r\n const ctaState = occurrence.ctaState;\r\n if (!ctaState) return null;\r\n\r\n // Sold out - check multiple indicators\r\n if (ctaState.reason === 'sold_out' || ctaState.text === 'Sold out') {\r\n return { line1: labels.statusSoldOut || 'Sold out' };\r\n }\r\n\r\n // Coming soon - show \"On sale\" on line 1, date/time on line 2\r\n // ctaState.text is like \"On sale Dec 15\" or \"On sale Sat 12:04 PM\"\r\n if (ctaState.reason === 'coming_soon' && ctaState.text) {\r\n const dateTime = ctaState.text.replace('On sale ', '');\r\n return { line1: labels.onSale || 'On sale', line2: dateTime };\r\n }\r\n\r\n // Sales ended or no tickets - no sublabel needed (just gray)\r\n return null;\r\n }\r\n\r\n // Check if showtime is coming soon (for different styling)\r\n function isComingSoon(occurrence) {\r\n return occurrence.ctaState?.reason === 'coming_soon';\r\n }\r\n\r\n // Check if showtime is sold out\r\n function isSoldOut(occurrence) {\r\n return occurrence.ctaState?.reason === 'sold_out' || occurrence.ctaState?.text === 'Sold out';\r\n }\r\n\r\n // Get aria-label for a time button\r\n function getTimeButtonAriaLabel(occurrence, dateKey) {\r\n const time = formatTime(occurrence.startDateTime);\r\n const sublabel = getSublabel(occurrence);\r\n const isCurrent = occurrence.id === currentEventId;\r\n\r\n let label = `${time} on ${dateKey}`;\r\n\r\n if (isCurrent) {\r\n label += ', currently selected';\r\n }\r\n\r\n if (sublabel) {\r\n if (sublabel.line2) {\r\n label += `, ${sublabel.line1} ${sublabel.line2}`;\r\n } else {\r\n label += `, ${sublabel.line1}`;\r\n }\r\n } else if (!isButtonDisabled(occurrence)) {\r\n label += `. ${labels.pressEnterToGetTicketsForDate || 'Press Enter to get tickets'}`;\r\n }\r\n\r\n return label;\r\n }\r\n</script>\r\n\r\n{#if hasShowtimes}\r\n <section class=\"bg-card border border-border rounded-lg p-6\" class:variant-a={variant === 'A'} class:variant-b={variant === 'B'} class:variant-c={variant === 'C'} aria-labelledby=\"showtimes-grouped-heading\">\r\n <h2 id=\"showtimes-grouped-heading\" class=\"text-xl font-semibold text-text-primary mb-4\">{labels.showtimes || 'Showtimes'}</h2>\r\n\r\n <div class=\"flex flex-col gap-4\" role=\"list\">\r\n {#each groupedByDate as [dateKey, showtimes], groupIndex}\r\n <div class=\"date-group\" role=\"listitem\" aria-label=\"Showtimes for {dateKey}\">\r\n {#if variant === 'A'}\r\n <!-- Variant A: Date as prominent header, times below -->\r\n <h3 class=\"date-header-a\" id=\"date-group-{groupIndex}\">{dateKey}</h3>\r\n <div class=\"flex flex-wrap gap-2\" role=\"group\" aria-labelledby=\"date-group-{groupIndex}\">\r\n {#each showtimes as showtime}\r\n {@const isCurrent = showtime.id === currentEventId}\r\n {@const btnDisabled = isButtonDisabled(showtime)}\r\n <button\r\n type=\"button\"\r\n class=\"time-btn\"\r\n class:current={isCurrent}\r\n class:disabled={btnDisabled}\r\n onclick={() => selectShowtime(showtime)}\r\n disabled={btnDisabled}\r\n aria-label={getTimeButtonAriaLabel(showtime, dateKey)}\r\n aria-pressed={isCurrent}\r\n >\r\n <span aria-hidden=\"true\">{formatTime(showtime.startDateTime)}</span>\r\n </button>\r\n {/each}\r\n </div>\r\n {:else if variant === 'B'}\r\n <!-- Variant B: Date same size as times, sublabels below buttons -->\r\n <div class=\"date-row-b\">\r\n <h3 class=\"date-label-b\" id=\"date-group-b-{groupIndex}\">{dateKey}</h3>\r\n <div class=\"flex flex-wrap gap-2\" role=\"group\" aria-labelledby=\"date-group-b-{groupIndex}\">\r\n {#each showtimes as showtime}\r\n {@const isCurrent = showtime.id === currentEventId}\r\n {@const btnDisabled = isButtonDisabled(showtime)}\r\n {@const sublabel = getSublabel(showtime)}\r\n {@const comingSoon = isComingSoon(showtime)}\r\n {@const soldOut = isSoldOut(showtime)}\r\n <div class=\"time-slot\">\r\n <button\r\n type=\"button\"\r\n class=\"time-btn\"\r\n class:current={isCurrent}\r\n class:disabled={btnDisabled}\r\n class:coming-soon={comingSoon}\r\n class:sold-out={soldOut}\r\n onclick={() => selectShowtime(showtime)}\r\n disabled={btnDisabled}\r\n aria-label={getTimeButtonAriaLabel(showtime, dateKey)}\r\n aria-pressed={isCurrent}\r\n >\r\n <span aria-hidden=\"true\">{formatTime(showtime.startDateTime)}</span>\r\n </button>\r\n {#if sublabel}\r\n <span class=\"btn-sublabel\" aria-hidden=\"true\">\r\n <span class=\"sublabel-line1\">{sublabel.line1}</span>\r\n {#if sublabel.line2}\r\n <span class=\"sublabel-line2\">{sublabel.line2}</span>\r\n {/if}\r\n </span>\r\n {/if}\r\n </div>\r\n {/each}\r\n </div>\r\n </div>\r\n {:else if variant === 'C'}\r\n <!-- Variant C: Compact card style, date and times together -->\r\n <div class=\"date-card-c\">\r\n <h3 class=\"date-badge-c\" id=\"date-group-c-{groupIndex}\">{dateKey}</h3>\r\n <div class=\"times-row-c\" role=\"group\" aria-labelledby=\"date-group-c-{groupIndex}\">\r\n {#each showtimes as showtime}\r\n {@const isCurrent = showtime.id === currentEventId}\r\n {@const btnDisabled = isButtonDisabled(showtime)}\r\n <button\r\n type=\"button\"\r\n class=\"time-btn-c\"\r\n class:current={isCurrent}\r\n class:disabled={btnDisabled}\r\n onclick={() => selectShowtime(showtime)}\r\n disabled={btnDisabled}\r\n aria-label={getTimeButtonAriaLabel(showtime, dateKey)}\r\n aria-pressed={isCurrent}\r\n >\r\n <span aria-hidden=\"true\">{formatTime(showtime.startDateTime)}</span>\r\n </button>\r\n {/each}\r\n </div>\r\n </div>\r\n {/if}\r\n </div>\r\n {/each}\r\n </div>\r\n </section>\r\n{/if}\r\n\r\n<style>\r\n /* ========================================\r\n VARIANT A: Big date header, times below\r\n ======================================== */\r\n .variant-a .date-header-a {\r\n font-size: 1rem;\r\n line-height: 1.5rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary));\r\n margin-bottom: 0.625rem;\r\n }\r\n\r\n \r\n\r\n .variant-a .time-btn {\r\n padding: 0.625rem 1.25rem;\r\n font-size: 0.875rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary));\r\n background-color: hsl(var(--bg-secondary));\r\n border: 1px solid hsl(var(--border));\r\n border-radius: 0.5rem;\r\n cursor: pointer;\r\n transition: all 150ms;\r\n }\r\n\r\n \r\n\r\n .variant-a .time-btn:hover:not(:disabled) {\r\n background-color: hsl(var(--bg-quaternary));\r\n border-color: hsl(var(--stroke-primary));\r\n }\r\n\r\n \r\n\r\n .variant-a .time-btn.current {\r\n color: hsl(var(--bg-primary));\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-a .time-btn.disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n text-decoration: line-through;\r\n }\r\n\r\n /* ========================================\r\n VARIANT B: Date matches Event Info styling\r\n ======================================== */\r\n .variant-b .date-row-b {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.625rem;\r\n }\r\n\r\n .variant-b .date-label-b {\r\n font-size: 0.875rem;\r\n font-weight: 500;\r\n color: hsl(var(--text-secondary));\r\n }\r\n\r\n \r\n\r\n .variant-b .time-slot {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 0.25rem;\r\n }\r\n\r\n .variant-b .time-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 5rem;\r\n height: 2.5rem;\r\n padding-left: 0.875rem;\r\n padding-right: 0.875rem;\r\n font-size: 0.875rem;\r\n font-weight: 600;\r\n color: hsl(var(--bg-primary));\r\n border: none;\r\n border-radius: 0.5rem;\r\n cursor: pointer;\r\n transition: all 150ms;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-b .btn-sublabel {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n font-size: 0.75rem;\r\n font-weight: 500;\r\n text-transform: uppercase;\r\n letter-spacing: 0.025em;\r\n color: hsl(var(--text-tertiary));\r\n text-align: center;\r\n line-height: 1.25;\r\n }\r\n\r\n \r\n\r\n .variant-b .btn-sublabel .sublabel-line2 {\r\n font-weight: 600;\r\n }\r\n\r\n .variant-b .time-btn:hover:not(:disabled) {\r\n opacity: 0.9;\r\n }\r\n\r\n .variant-b .time-btn.current {\r\n cursor: default;\r\n pointer-events: none;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%) / 15%);\r\n color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-b .time-btn.current:hover {\r\n opacity: 1;\r\n }\r\n\r\n .variant-b .time-btn.disabled {\r\n background-color: hsl(var(--bg-quaternary));\r\n color: hsl(var(--text-tertiary));\r\n cursor: not-allowed;\r\n }\r\n\r\n \r\n\r\n .variant-b .time-btn.sold-out {\r\n background-color: hsl(var(--bg-quaternary));\r\n color: hsl(var(--text-tertiary));\r\n cursor: not-allowed;\r\n }\r\n\r\n \r\n\r\n .variant-b .time-btn.coming-soon {\r\n background-color: hsl(var(--bg-quaternary));\r\n color: hsl(var(--text-tertiary));\r\n cursor: not-allowed;\r\n }\r\n\r\n \r\n\r\n /* ========================================\r\n VARIANT C: Compact card with badge date\r\n ======================================== */\r\n .variant-c .date-card-c {\r\n background-color: hsl(var(--bg-secondary));\r\n border-radius: 0.5rem;\r\n padding: 1rem;\r\n }\r\n\r\n \r\n\r\n .variant-c .date-badge-c {\r\n display: inline-block;\r\n font-size: 0.75rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-secondary));\r\n text-transform: uppercase;\r\n letter-spacing: 0.025em;\r\n margin-bottom: 0.75rem;\r\n }\r\n\r\n \r\n\r\n .variant-c .times-row-c {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 0.5rem;\r\n }\r\n\r\n .variant-c .time-btn-c {\r\n padding: 0.5rem 1rem;\r\n font-size: 0.875rem;\r\n font-weight: 500;\r\n color: hsl(var(--text-primary));\r\n background-color: hsl(var(--bg-primary));\r\n border: 1px solid hsl(var(--border));\r\n border-radius: 0.375rem;\r\n cursor: pointer;\r\n transition: all 150ms;\r\n }\r\n\r\n \r\n\r\n .variant-c .time-btn-c:hover:not(:disabled) {\r\n border-color: hsl(var(--brand-primary, 224 76% 48%));\r\n color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-c .time-btn-c.current {\r\n color: hsl(var(--bg-primary));\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-c .time-btn-c.disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n }\r\n\r\n /* Focus visible styles for all variants */\r\n .time-btn:focus-visible,\r\n .time-btn-c:focus-visible {\r\n outline: hsl(var(--brand-primary)) solid 2px;\r\n outline-offset: 2px;\r\n }\r\n\r\n</style>\r\n","<script>\r\n import { getDefaultTimezone } from '@getmicdrop/svelte-components';\r\nimport { Calendar, Location, Time, User, Theater } from \"carbon-icons-svelte\";\r\n import {\r\n formatFullDate,\r\n formatFullDateCompact,\r\n formatEventTime,\r\n formatTimeRange,\r\n formatDoorsTime,\r\n } from \"$lib/utils/datetime.js\";\r\n\r\n let {\r\n event,\r\n venue = {},\r\n venueTimeZone = getDefaultTimezone(),\r\n venueAddressLines = [],\r\n googleMapsUrl = '',\r\n showStage = false,\r\n eventStageName = '',\r\n showStartTime = true,\r\n showEndTime = false,\r\n showDoorsTime = false,\r\n variant = 'default', // 'default' or 'sidebar'\r\n labels = {},\r\n } = $props();\r\n\r\n let dateDisplay = $derived(variant === 'sidebar'\r\n ? formatFullDateCompact(event?.startDateTime, venueTimeZone)\r\n : formatFullDate(event?.startDateTime, venueTimeZone));\r\n</script>\r\n\r\n<div class=\"flex flex-col gap-4\">\r\n <div class=\"flex items-start gap-3\">\r\n <Calendar size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n <span class=\"body-md font-medium\">{dateDisplay}</span>\r\n </div>\r\n {#if showStartTime || showDoorsTime}\r\n <div class=\"flex items-start gap-3\">\r\n <Time size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n <div class=\"flex flex-col gap-0.5\">\r\n {#if showStartTime}\r\n <span class=\"body-md font-medium\">{showEndTime && event?.endDateTime ? formatTimeRange(event?.startDateTime, event?.endDateTime, venueTimeZone) : formatEventTime(event?.startDateTime, venueTimeZone)}</span>\r\n {/if}\r\n {#if showDoorsTime && event?.doorsOpenTime}\r\n <span class=\"caption\">{(labels.doorsOpen || 'Doors open {time}').replace('{time}', formatDoorsTime(event?.doorsOpenTime, venueTimeZone))}</span>\r\n {/if}\r\n </div>\r\n </div>\r\n {/if}\r\n <div class=\"flex items-start gap-3\">\r\n <Location size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n {#if googleMapsUrl}\r\n <a href={googleMapsUrl} target=\"_blank\" rel=\"noopener noreferrer\" class=\"link-unstyled flex flex-col gap-0.5\" aria-label=\"{venue.name || (labels.venue || 'Venue')}, {venueAddressLines.join(', ')} (opens in Google Maps)\">\r\n <span class=\"body-md font-medium\" aria-hidden=\"true\">{venue.name || (labels.venue || 'Venue')}</span>\r\n {#each venueAddressLines as line}\r\n <span class=\"caption\" aria-hidden=\"true\">{line}</span>\r\n {/each}\r\n </a>\r\n {:else}\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span class=\"body-md font-medium\">{venue.name || (labels.venue || 'Venue')}</span>\r\n {#each venueAddressLines as line}\r\n <span class=\"caption\">{line}</span>\r\n {/each}\r\n </div>\r\n {/if}\r\n </div>\r\n {#if showStage}\r\n <div class=\"flex items-start gap-3\">\r\n <Theater size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n <span class=\"body-md font-medium\">{eventStageName}</span>\r\n </div>\r\n {/if}\r\n {#if event?.displayAgeRestriction}\r\n <div class=\"flex items-start gap-3\">\r\n <User size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n <span class=\"body-md font-medium\">{event?.hasAgeRestriction && event?.ageRequirement ? (labels.agesPlus || 'Ages {age}+').replace('{age}', String(event.ageRequirement)) : (labels.allAges || 'All ages')}</span>\r\n </div>\r\n {/if}\r\n</div>\r\n","<script>\r\n // @ts-nocheck legacy fallback (legacy=1 path), slated for deletion after VC finalization — not type-maintained\r\n import { onMount } from 'svelte';\r\n import {\r\n transformEvent,\r\n getImageUrl,\r\n getVenueDetails,\r\n getDisplayAvatarUrl,\r\n getPerformerDisplayName,\r\n } from '$lib/utils/utils.js';\r\n import { ArrowLeft, ChevronDown, Locked } from 'carbon-icons-svelte';\r\n import defaultAvatar from '../../assets/images/default-avatar.png';\r\n import DateSelectorGrouped from '../DateSelector/DateSelectorGrouped.svelte';\r\n import {\r\n fetchSeriesOccurrences,\r\n fetchEventDetails,\r\n checkEventPassword,\r\n computeCtaState,\r\n } from '$lib/utils/api.js';\r\n import { createLogger } from '@getmicdrop/svelte-components/utils/logger';\r\n const logger = createLogger('VC');\r\n import SkeletonLoader from '../SkeletonLoader/SkeletonLoader.svelte';\r\n import EventMeta from '../Events/EventMeta.svelte';\r\n import PoweredByMicdrop from '../PoweredByMicdrop.svelte';\r\n import ScarcityBadge from '../ScarcityBadge.svelte';\r\n import WaitlistModal from '../Modals/WaitlistModal.svelte';\r\n import { InputModal, EmptyState, getDefaultTimezone, formatCurrency, formatDateRaw } from '@getmicdrop/svelte-components';\r\n\r\n let {\r\n // Pre-fetched event data (from route server load)\r\n rawEvent: rawEventProp = undefined,\r\n // Event ID for self-fetch mode (color preview, widget embedding)\r\n eventId: eventIdProp = undefined,\r\n // Event slug (from route params)\r\n slug: slugProp = '',\r\n // For series: which occurrence to highlight. undefined = use eventId. null = series home (no highlight).\r\n currentEventId: currentEventIdProp = undefined,\r\n // Navigation callbacks\r\n onNavigateBack = undefined,\r\n onBuyTickets = undefined,\r\n // Context\r\n organizationId = '',\r\n // i18n labels\r\n labels = {},\r\n } = $props();\r\n\r\n // Data state\r\n let rawEvent = $state(rawEventProp || null);\r\n let dataLoading = $state(!rawEventProp && !!eventIdProp);\r\n let dataError = $state(null);\r\n\r\n // Page ready state - wait for hero image AND series data to load\r\n let imageRendered = $state(false);\r\n let seriesDataLoaded = $state(false);\r\n let showSkeleton = $state(true);\r\n let heroImageRef = $state();\r\n\r\n let pageReady = $derived(imageRendered && seriesDataLoaded);\r\n\r\n $effect(() => {\r\n if (pageReady) {\r\n showSkeleton = false;\r\n }\r\n });\r\n\r\n function handleImageLoad() {\r\n imageRendered = true;\r\n }\r\n\r\n function handleImageError() {\r\n imageRendered = true;\r\n }\r\n\r\n $effect(() => {\r\n if (\r\n heroImageRef &&\r\n heroImageRef.complete &&\r\n heroImageRef.naturalHeight > 0\r\n ) {\r\n imageRendered = true;\r\n }\r\n });\r\n\r\n // Derived event data\r\n let event = $derived(rawEvent ? transformEvent(rawEvent) : null);\r\n let id = $derived(eventIdProp || rawEvent?.id || rawEvent?.ID || '');\r\n let slug = $derived(slugProp || rawEvent?.slug || '');\r\n\r\n // Filter out unpublished series events from showtimes\r\n function filterPublishedShowtimes(rawShowtimes) {\r\n if (!Array.isArray(rawShowtimes)) return [];\r\n return rawShowtimes.filter(showtime => {\r\n if (\r\n showtime.published === undefined &&\r\n showtime.isPublished === undefined\r\n ) {\r\n return true;\r\n }\r\n return showtime.published === true || showtime.isPublished === true;\r\n });\r\n }\r\n\r\n let showtimes = $derived(filterPublishedShowtimes(rawEvent?.showtimes || []));\r\n\r\n // Event series occurrences for date selector\r\n let seriesOccurrences = $state([]);\r\n let eventSeriesId = $derived(rawEvent?.eventSeriesId || 0);\r\n let venueId = $derived(\r\n rawEvent?.venueID || rawEvent?.venueId || venue?.id || 0\r\n );\r\n let hasEventSeries = $derived(eventSeriesId > 0);\r\n\r\n // Effective currentEventId for DateSelectorGrouped\r\n // undefined prop = default to this event's ID\r\n // null prop = series home mode (no highlight)\r\n let effectiveCurrentEventId = $derived(\r\n currentEventIdProp === null\r\n ? null\r\n : (currentEventIdProp ?? parseInt(String(id)))\r\n );\r\n\r\n onMount(async () => {\r\n // Self-fetch mode\r\n if (!rawEvent && eventIdProp) {\r\n try {\r\n const fetched = await fetchEventDetails(eventIdProp);\r\n rawEvent = fetched;\r\n } catch (err) {\r\n dataError =\r\n err.message || labels.failedToLoadEvent || 'Failed to load event';\r\n dataLoading = false;\r\n return;\r\n }\r\n dataLoading = false;\r\n }\r\n\r\n if (!rawEvent) {\r\n imageRendered = true;\r\n seriesDataLoaded = true;\r\n return;\r\n }\r\n\r\n // Handle image loading\r\n const imageUrl = getImageUrl(\r\n rawEvent.coverImage || rawEvent.image || rawEvent.ShowImage\r\n );\r\n if (!imageUrl) {\r\n imageRendered = true;\r\n }\r\n\r\n // Fetch series data\r\n const seriesId = rawEvent.eventSeriesId || 0;\r\n const vId = rawEvent.venueID || rawEvent.venueId || 0;\r\n\r\n if (seriesId > 0 && vId > 0) {\r\n fetchSeriesOccurrences(seriesId, vId)\r\n .then(occurrences => {\r\n seriesOccurrences = occurrences;\r\n seriesDataLoaded = true;\r\n })\r\n .catch(err => {\r\n logger.error('Failed to fetch series occurrences:', err);\r\n seriesOccurrences = [];\r\n seriesDataLoaded = true;\r\n });\r\n } else {\r\n seriesDataLoaded = true;\r\n }\r\n\r\n // Fetch venue details for stages\r\n if (vId > 0) {\r\n getVenueDetails(vId)\r\n .then(venueData => {\r\n venueStages = venueData?.stages || [];\r\n })\r\n .catch(err => {\r\n logger.error('Failed to fetch venue details:', err);\r\n venueStages = [];\r\n });\r\n }\r\n\r\n // Check password protection\r\n if (rawEvent?.password && rawEvent.password.trim() !== '') {\r\n const evtId = rawEvent.id || rawEvent.ID || eventIdProp;\r\n if (!isEventAuthenticated(evtId)) {\r\n showPasswordModal = true;\r\n } else {\r\n isPasswordVerified = true;\r\n }\r\n }\r\n });\r\n\r\n // Handle buy tickets on occurrence\r\n function handleBuyTickets(event) {\r\n const { eventId, slug: occSlug } = event.detail;\r\n if (onBuyTickets) {\r\n onBuyTickets(eventId, occSlug || slug);\r\n }\r\n }\r\n\r\n // FAQ and venue data\r\n const toFaqArray = src => {\r\n if (!src) return [];\r\n if (Array.isArray(src)) {\r\n return src.map(item =>\r\n typeof item === 'string' ? { question: '', answer: item.trim() } : item\r\n );\r\n }\r\n return [{ question: '', answer: String(src).trim() }];\r\n };\r\n\r\n let venue = $derived(rawEvent?.venue || {});\r\n let venueFAQs = $derived(toFaqArray(venue.faq));\r\n let venueDisclaimer = $derived(venue.disclaimer || '');\r\n\r\n // Stage display\r\n let venueStages = $state([]);\r\n let eventStageName = $derived(rawEvent?.stage?.name || '');\r\n let showStage = $derived(venueStages.length > 1 && eventStageName);\r\n\r\n // Parse address\r\n function parseAddress(addressStr) {\r\n if (!addressStr) return [];\r\n const parts = addressStr.split(',').map(p => p.trim());\r\n if (parts.length < 2) return [addressStr];\r\n const lastPart = parts[parts.length - 1];\r\n const stateZipMatch = lastPart.match(/^([A-Z]{2})\\s+(\\d{5}(-\\d{4})?)$/);\r\n if (stateZipMatch && parts.length >= 3) {\r\n const state = stateZipMatch[1];\r\n const zip = stateZipMatch[2];\r\n const city = parts[parts.length - 2];\r\n const streetParts = parts.slice(0, -2);\r\n const lines = streetParts;\r\n lines.push(`${city}, ${state} ${zip}`);\r\n return lines;\r\n }\r\n return [parts[0], parts.slice(1).join(', ')];\r\n }\r\n\r\n let venueAddressLines = $derived(\r\n parseAddress(venue.address || venue.googleLocationNameCache || '')\r\n );\r\n\r\n let googleMapsUrl = $derived.by(() => {\r\n const address = venue.address || venue.googleLocationNameCache || '';\r\n if (address) {\r\n return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`;\r\n }\r\n return '';\r\n });\r\n\r\n let parsedVenueDisclaimer = $derived(\r\n venueDisclaimer\r\n ? venueDisclaimer\r\n .split(/(?<=[.?!])\\s+(?=[A-Z])/g)\r\n .map(s => s.trim())\r\n .filter(Boolean)\r\n : []\r\n );\r\n\r\n // Filter performers: only show Confirmed (acceptedState === 2) and not hidden\r\n let confirmedPerformers = $derived(\r\n (event?.performers || [])\r\n .filter(performer => {\r\n const isConfirmed = performer.acceptedState === 2;\r\n const isNotHidden = !performer.shouldBeHidden;\r\n const profile = performer.RosterPerformer?.User?.performerProfile;\r\n const hasName =\r\n profile?.firstName || profile?.lastName || profile?.displayName;\r\n return isConfirmed && isNotHidden && hasName;\r\n })\r\n .sort((a, b) => (a.listPosition || 0) - (b.listPosition || 0))\r\n );\r\n\r\n let hasPerformers = $derived(confirmedPerformers.length > 0);\r\n\r\n let ticketType = $derived(\r\n event?.eventTicketingType ?? event?.ticketType ?? 0\r\n );\r\n let isRegistrationEvent = $derived(ticketType === 1);\r\n let availableTickets = $derived(event?.availableTickets || []);\r\n\r\n // Filter tickets for public website\r\n let publicAvailableTickets = $derived(\r\n availableTickets.filter(ticket => ticket.salesChannel !== 2)\r\n );\r\n let hasAvailableTickets = $derived(publicAvailableTickets.length > 0);\r\n\r\n // Scarcity\r\n let totalTicketsRemaining = $derived(\r\n publicAvailableTickets.reduce((sum, t) => {\r\n const remaining =\r\n t.remainingCapacity ?? t.quantityRemaining ?? t.quantity ?? 0;\r\n return sum + remaining;\r\n }, 0)\r\n );\r\n let totalTicketsCapacity = $derived(\r\n publicAvailableTickets.reduce((sum, t) => {\r\n const capacity =\r\n t.totalCapacity ??\r\n t.quantity ??\r\n t.remainingCapacity ??\r\n t.quantityRemaining ??\r\n 0;\r\n return sum + capacity;\r\n }, 0)\r\n );\r\n\r\n // Cancelled\r\n let isCancelled = $derived(\r\n rawEvent?.status?.toLowerCase() === 'cancelled' ||\r\n rawEvent?.status?.toLowerCase() === 'canceled'\r\n );\r\n let showCancelledInfo = $state(false);\r\n\r\n // Password protection\r\n let showPasswordModal = $state(false);\r\n let passwordValue = $state('');\r\n let passwordError = $state('');\r\n let passwordLoading = $state(false);\r\n let isPasswordVerified = $state(false);\r\n\r\n // Waitlist\r\n let showWaitlistModal = $state(false);\r\n let waitlistEnabled = $derived(rawEvent?.waitlistEnabled === true);\r\n\r\n function isEventAuthenticated(evtId) {\r\n if (typeof window === 'undefined') return false;\r\n const authedEvents = JSON.parse(\r\n sessionStorage.getItem('authedEvents') || '[]' // @storage-escape: authedEvents session-auth state (intentional raw sessionStorage)\r\n );\r\n return authedEvents.includes(String(evtId));\r\n }\r\n\r\n function setEventAuthenticated(evtId) {\r\n if (typeof window === 'undefined') return;\r\n const authedEvents = JSON.parse(\r\n sessionStorage.getItem('authedEvents') || '[]' // @storage-escape: authedEvents session-auth state (intentional raw sessionStorage)\r\n );\r\n const evtIdStr = String(evtId);\r\n if (!authedEvents.includes(evtIdStr)) {\r\n authedEvents.push(evtIdStr);\r\n sessionStorage.setItem('authedEvents', JSON.stringify(authedEvents)); // @storage-escape: authedEvents session-auth state (intentional raw sessionStorage)\r\n }\r\n }\r\n\r\n async function handlePasswordSubmit(e) {\r\n const password = e.detail?.value || passwordValue;\r\n if (!password || !id) return;\r\n passwordLoading = true;\r\n passwordError = '';\r\n try {\r\n const result = await checkEventPassword(id, password);\r\n if (result.valid) {\r\n setEventAuthenticated(id);\r\n isPasswordVerified = true;\r\n showPasswordModal = false;\r\n passwordValue = '';\r\n } else {\r\n passwordError =\r\n labels.incorrectPassword || 'Incorrect password. Please try again.';\r\n }\r\n } catch (err) {\r\n passwordError =\r\n labels.unableToVerifyPassword ||\r\n 'Unable to verify password. Please try again.';\r\n } finally {\r\n passwordLoading = false;\r\n }\r\n }\r\n\r\n function handlePasswordCancel() {\r\n showPasswordModal = false;\r\n if (onNavigateBack) onNavigateBack();\r\n }\r\n\r\n let requiresPassword = $derived(\r\n rawEvent?.password && rawEvent.password.trim() !== ''\r\n );\r\n let isLocked = $derived(\r\n requiresPassword && !isPasswordVerified && !isEventAuthenticated(id)\r\n );\r\n\r\n // CTA button state — delegates to shared computeCtaState()\r\n let ctaState = $derived(\r\n event\r\n ? computeCtaState(event, publicAvailableTickets, {\r\n cancelled: isCancelled,\r\n isRegistration: isRegistrationEvent,\r\n waitlistEnabled,\r\n })\r\n : {\r\n text: labels.loading || 'Loading...',\r\n disabled: true,\r\n reason: 'loading',\r\n }\r\n );\r\n\r\n let ctaButtonText = $derived(ctaState.text);\r\n let ctaDisabled = $derived(ctaState.disabled);\r\n\r\n function goBack() {\r\n if (onNavigateBack) onNavigateBack();\r\n }\r\n\r\n function goToCheckout() {\r\n if (onBuyTickets) {\r\n onBuyTickets(id, slug);\r\n }\r\n }\r\n\r\n let venueTimeZone = $derived(event?.timeZone || getDefaultTimezone());\r\n\r\n let showStartTime = $derived(\r\n hasEventSeries || event?.displayStartTime !== false\r\n );\r\n let showEndTime = $derived(event?.displayEndTime === true);\r\n let showDoorsTime = $derived(event?.displayDoorsTime === true);\r\n\r\n // Lowest price\r\n function getLowestPrice(tickets) {\r\n if (!tickets || tickets.length === 0)\r\n return { price: null, hasDonation: false };\r\n const visibleTickets = tickets.filter(t => {\r\n const visibility = t.visibility ?? 0;\r\n const isVisible = visibility === 0;\r\n const isPublic = t.salesChannel !== 2;\r\n return isVisible && isPublic;\r\n });\r\n const hasDonation = visibleTickets.some(t => t.type === 2);\r\n const pricedTickets = visibleTickets.filter(t => {\r\n const hasPrice = t.price !== undefined && t.price !== null;\r\n const isDonation = t.type === 2;\r\n return hasPrice && !isDonation;\r\n });\r\n const prices = pricedTickets.map(t => parseFloat(t.price));\r\n const price = prices.length === 0 ? null : Math.min(...prices);\r\n return { price, hasDonation };\r\n }\r\n\r\n let lowestPriceInfo = $derived(getLowestPrice(availableTickets));\r\n\r\n let priceLabel = $derived.by(() => {\r\n if (ctaDisabled) return '';\r\n if (lowestPriceInfo.hasDonation) return '';\r\n if (lowestPriceInfo.price === 0) return '';\r\n return labels.from || 'From';\r\n });\r\n\r\n let priceDisplay = $derived.by(() => {\r\n if (ctaDisabled) return '';\r\n if (lowestPriceInfo.hasDonation) return 'Any amount';\r\n if (lowestPriceInfo.price === null) {\r\n if (!availableTickets || availableTickets.length === 0) return '';\r\n return '';\r\n }\r\n if (lowestPriceInfo.price === 0) return labels.free || 'Free';\r\n return `${formatCurrency(lowestPriceInfo.price /* FIXME(canonical-cleanup:toFixed): heuristic guess — verify this is USD (not cents); when migrating to TS, add `as USD` brand cast at the API-response-transform layer. */)}`;\r\n });\r\n\r\n function formatCompactDateTime(startDateTime, tz) {\r\n if (!startDateTime) return '';\r\n const date = new Date(startDateTime);\r\n const weekday = formatDateRaw(date, {\r\n weekday: 'short',\r\n timeZone: tz,\r\n }, 'en-US');\r\n const month = formatDateRaw(date, {\r\n month: 'short',\r\n timeZone: tz,\r\n }, 'en-US');\r\n const day = formatDateRaw(date, {\r\n day: 'numeric',\r\n timeZone: tz,\r\n }, 'en-US');\r\n const time = date\r\n .toLocaleTimeString('en-US', {\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n timeZone: tz,\r\n })\r\n .replace(' ', '');\r\n return `${weekday} ${month} ${day} · ${time}`;\r\n }\r\n\r\n let compactDateTime = $derived(\r\n formatCompactDateTime(event?.startDateTime, venueTimeZone)\r\n );\r\n</script>\r\n\r\n<div class=\"event-page\">\r\n {#if dataLoading}\r\n <SkeletonLoader type=\"event\" />\r\n {:else if dataError}\r\n <div class=\"error-container\">\r\n <p class=\"error-text\">{labels.errorPrefix || 'Error:'} {dataError}</p>\r\n {#if onNavigateBack}\r\n <button class=\"go-back-btn\" onclick={goBack}\r\n >{labels.goBack || 'Go back'}</button\r\n >\r\n {/if}\r\n </div>\r\n {:else if event}\r\n {#if showSkeleton}\r\n <SkeletonLoader type=\"event\" />\r\n {/if}\r\n\r\n <div class=\"content-wrapper\" class:content-hidden={showSkeleton}>\r\n {#if isLocked}\r\n <div class=\"locked-overlay\">\r\n <div class=\"locked-content\">\r\n <div class=\"locked-icon-wrapper\">\r\n <Locked size={16} />\r\n </div>\r\n <h2 class=\"locked-title\">\r\n {labels.passwordProtectedTitle ||\r\n 'This event is password protected'}\r\n </h2>\r\n <p class=\"locked-description\">\r\n {labels.passwordProtectedDescription ||\r\n 'Enter the event password to view details and purchase tickets.'}\r\n </p>\r\n <button\r\n class=\"unlock-btn\"\r\n onclick={() => (showPasswordModal = true)}\r\n >\r\n {labels.enterPassword || 'Enter password'}\r\n </button>\r\n </div>\r\n </div>\r\n {/if}\r\n\r\n <!-- Main Content -->\r\n <div class=\"main-content\" class:blur-content={isLocked}>\r\n <!-- Hero Image -->\r\n <div class=\"hero-card\">\r\n <img\r\n bind:this={heroImageRef}\r\n src={getImageUrl(\r\n event.coverImage || event.image || event.ShowImage\r\n )}\r\n alt={event.name || 'Event'}\r\n class=\"hero-image\"\r\n onload={handleImageLoad}\r\n onerror={handleImageError}\r\n />\r\n {#if onNavigateBack}\r\n <button\r\n class=\"back-button\"\r\n onclick={goBack}\r\n aria-label={labels.goBack || 'Go back'}\r\n >\r\n <ArrowLeft size={20} />\r\n </button>\r\n {/if}\r\n </div>\r\n\r\n <!-- Event Header Card -->\r\n <div class=\"event-header\">\r\n <h1 class=\"event-title\">{event.name}</h1>\r\n {#if event.eventSummary}\r\n <p class=\"event-subtitle\">{event.eventSummary}</p>\r\n {/if}\r\n\r\n <EventMeta\r\n {event}\r\n {venue}\r\n {venueTimeZone}\r\n {venueAddressLines}\r\n {googleMapsUrl}\r\n {showStage}\r\n {eventStageName}\r\n {showStartTime}\r\n {showEndTime}\r\n {showDoorsTime}\r\n />\r\n </div>\r\n\r\n <!-- Showtimes Section - Mobile Only -->\r\n {#if hasEventSeries && seriesOccurrences.length > 0}\r\n <div class=\"mobile-showtimes\">\r\n <DateSelectorGrouped\r\n occurrences={seriesOccurrences}\r\n currentEventId={effectiveCurrentEventId}\r\n {venueTimeZone}\r\n variant=\"B\"\r\n onbuyTickets={handleBuyTickets}\r\n />\r\n </div>\r\n {:else if hasEventSeries && seriesDataLoaded && seriesOccurrences.length === 0}\r\n <div class=\"mobile-showtimes\">\r\n <EmptyState\r\n message={labels.noUpcomingEvents || 'No upcoming shows'}\r\n subtext={labels.noUpcomingEventsSubtext ||\r\n 'There are no upcoming dates for this series right now. Check back soon!'}\r\n />\r\n </div>\r\n {/if}\r\n\r\n <!-- About Section -->\r\n {#if event.description}\r\n <section class=\"content-section\">\r\n <h2 class=\"section-header\">{labels.tabAboutTheShow || 'About'}</h2>\r\n <div class=\"description\">\r\n {event.description}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- Featuring Section -->\r\n {#if hasPerformers}\r\n <section class=\"content-section\">\r\n <h2 class=\"section-header\">{labels.tabFeaturing || 'Featuring'}</h2>\r\n <div class=\"performers-grid\">\r\n {#each confirmedPerformers as performer}\r\n {@const profile =\r\n performer.RosterPerformer?.User?.performerProfile}\r\n {@const displayName = getPerformerDisplayName(profile)}\r\n {@const avatarUrl = getDisplayAvatarUrl(profile)}\r\n\r\n <div class=\"performer-card\">\r\n <img\r\n src={avatarUrl || defaultAvatar}\r\n alt={displayName}\r\n class=\"performer-avatar\"\r\n />\r\n <span class=\"performer-name\">{displayName}</span>\r\n </div>\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- FAQs Section -->\r\n {#if venueFAQs.length > 0}\r\n <section class=\"content-section\">\r\n <h2 class=\"section-header\">{labels.tabFAQs || 'FAQs'}</h2>\r\n <div class=\"faq-list\">\r\n {#each venueFAQs as faq}\r\n <div class=\"faq-item\">\r\n {#if faq.question}\r\n <h3 class=\"faq-question-text\">{faq.question}</h3>\r\n {/if}\r\n <p class=\"faq-answer-text\">{faq.answer}</p>\r\n </div>\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- Disclaimer Section -->\r\n {#if parsedVenueDisclaimer.length > 0}\r\n <section class=\"content-section\">\r\n <h2 class=\"section-header\">{labels.disclaimer || 'Disclaimer'}</h2>\r\n <p class=\"disclaimer-text\">{parsedVenueDisclaimer.join(' ')}</p>\r\n </section>\r\n {/if}\r\n\r\n <PoweredByMicdrop />\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <aside class=\"sidebar\" class:blur-content={isLocked}>\r\n <div class=\"event-header sidebar-event-header\">\r\n <h1 class=\"event-title\">{event.name}</h1>\r\n {#if event.eventSummary}\r\n <p class=\"event-subtitle\">{event.eventSummary}</p>\r\n {/if}\r\n\r\n <EventMeta\r\n {event}\r\n {venue}\r\n {venueTimeZone}\r\n {venueAddressLines}\r\n {googleMapsUrl}\r\n {showStage}\r\n {eventStageName}\r\n {showStartTime}\r\n {showEndTime}\r\n {showDoorsTime}\r\n variant=\"sidebar\"\r\n />\r\n </div>\r\n\r\n <div class=\"price-card\">\r\n {#if totalTicketsCapacity > 0 && !ctaDisabled}\r\n <div class=\"scarcity-badge-wrapper\">\r\n <ScarcityBadge\r\n remaining={totalTicketsRemaining}\r\n total={totalTicketsCapacity}\r\n context=\"event\"\r\n />\r\n </div>\r\n {/if}\r\n\r\n {#if hasAvailableTickets && ctaState.reason !== 'sales_ended' && ctaState.reason !== 'event_past' && ctaState.reason !== 'sold_out'}\r\n <div class=\"price-label\">{priceLabel}</div>\r\n <div class=\"price-amount\">{priceDisplay}</div>\r\n {/if}\r\n\r\n <button\r\n class=\"cta-button\"\r\n class:cta-disabled={ctaDisabled}\r\n class:cta-waitlist={ctaState.reason === 'sold_out_waitlist'}\r\n onclick={ctaState.reason === 'sold_out_waitlist'\r\n ? () => (showWaitlistModal = true)\r\n : ctaDisabled\r\n ? null\r\n : goToCheckout}\r\n disabled={ctaDisabled}\r\n >\r\n <span translate=\"no\">{ctaButtonText}</span>\r\n </button>\r\n {#if ctaState.reason === 'sold_out_waitlist'}\r\n <div class=\"waitlist-info\">\r\n {labels.getNotifiedWhenAvailable ||\r\n 'Get notified when tickets are available'}\r\n </div>\r\n {/if}\r\n\r\n <!-- Cancelled event info accordion -->\r\n {#if isCancelled}\r\n <div class=\"cancelled-info-section\">\r\n <button\r\n class=\"cancelled-learn-more\"\r\n onclick={() => (showCancelledInfo = !showCancelledInfo)}\r\n aria-expanded={showCancelledInfo}\r\n >\r\n <span>{labels.learnMore || 'Learn more'}</span>\r\n <span class=\"chevron\" class:expanded={showCancelledInfo}>\r\n <ChevronDown size={16} />\r\n </span>\r\n </button>\r\n {#if showCancelledInfo}\r\n <div class=\"cancelled-info-content\">\r\n <p>\r\n {labels.cancelledRefundAuto ||\r\n \"If your event is cancelled, we'll automatically refund the credit card used for purchase* (usually within 30 business days of the cancellation announcement).\"}\r\n </p>\r\n <p>\r\n {labels.cancelledRefundBoxOffice ||\r\n \"Bought your tickets at the venue's box office? Please take the tickets directly to the box office for a refund.\"}\r\n </p>\r\n <p class=\"cancelled-footnote\">\r\n {labels.cancelledRefundFootnote ||\r\n '*Please note that we cannot submit the refund to an alternate card. If your credit card number has changed since you made the purchase this should not impact your ability to receive the refund.'}\r\n </p>\r\n </div>\r\n {/if}\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n <!-- Showtimes (Variant B) -->\r\n {#if hasEventSeries && seriesOccurrences.length > 0}\r\n <DateSelectorGrouped\r\n occurrences={seriesOccurrences}\r\n currentEventId={effectiveCurrentEventId}\r\n {venueTimeZone}\r\n variant=\"B\"\r\n onbuyTickets={handleBuyTickets}\r\n />\r\n {:else if hasEventSeries && seriesDataLoaded && seriesOccurrences.length === 0}\r\n <EmptyState\r\n message={labels.noUpcomingEvents || 'No upcoming shows'}\r\n subtext={labels.noUpcomingEventsSubtext ||\r\n 'There are no upcoming dates for this series right now. Check back soon!'}\r\n />\r\n {/if}\r\n </aside>\r\n </div>\r\n\r\n <!-- Mobile Sticky CTA -->\r\n <div\r\n class=\"mobile-cta-bar\"\r\n class:mobile-cta-disabled={ctaDisabled}\r\n class:mobile-cta-cancelled={isCancelled}\r\n class:mobile-cta-hidden={isLocked}\r\n class:mobile-cta-waitlist={ctaState.reason === 'sold_out_waitlist'}\r\n >\r\n {#if !ctaDisabled}\r\n <div class=\"mobile-cta-content\">\r\n <div class=\"mobile-cta-left\">\r\n {#if ctaState.reason === 'sold_out_waitlist'}\r\n <span class=\"mobile-waitlist-label\"\r\n >{labels.soldOut || 'Sold out'}</span\r\n >\r\n <span class=\"mobile-date-label\"\r\n >{labels.getNotifiedWhenAvailable ||\r\n 'Get notified when available'}</span\r\n >\r\n {:else}\r\n <div class=\"mobile-price-line\">\r\n <span class=\"mobile-price-label\">{priceLabel}</span>\r\n <span class=\"mobile-price-amount\">{priceDisplay}</span>\r\n </div>\r\n <span class=\"mobile-date-label\">{compactDateTime}</span>\r\n {/if}\r\n </div>\r\n <button\r\n class=\"mobile-cta-button\"\r\n class:mobile-cta-waitlist-button={ctaState.reason ===\r\n 'sold_out_waitlist'}\r\n onclick={ctaState.reason === 'sold_out_waitlist'\r\n ? () => (showWaitlistModal = true)\r\n : goToCheckout}\r\n >\r\n <span translate=\"no\">{ctaButtonText}</span>\r\n </button>\r\n </div>\r\n {:else if isCancelled}\r\n <div class=\"mobile-cancelled-section\">\r\n <button class=\"mobile-cta-button mobile-cta-button-disabled\" disabled>\r\n {ctaButtonText}\r\n </button>\r\n <button\r\n class=\"mobile-cancelled-learn-more\"\r\n onclick={() => (showCancelledInfo = !showCancelledInfo)}\r\n aria-expanded={showCancelledInfo}\r\n >\r\n <span>{labels.learnMore || 'Learn more'}</span>\r\n <span class=\"chevron\" class:expanded={showCancelledInfo}>\r\n <ChevronDown size={16} />\r\n </span>\r\n </button>\r\n </div>\r\n {#if showCancelledInfo}\r\n <div class=\"mobile-cancelled-info-content\">\r\n <p>\r\n {labels.cancelledRefundAuto ||\r\n \"If your event is cancelled, we'll automatically refund the credit card used for purchase* (usually within 30 business days of the cancellation announcement).\"}\r\n </p>\r\n <p>\r\n {labels.cancelledRefundBoxOffice ||\r\n \"Bought your tickets at the venue's box office? Please take the tickets directly to the box office for a refund.\"}\r\n </p>\r\n <p class=\"cancelled-footnote\">\r\n {labels.cancelledRefundFootnote ||\r\n '*Please note that we cannot submit the refund to an alternate card. If your credit card number has changed since you made the purchase this should not impact your ability to receive the refund.'}\r\n </p>\r\n </div>\r\n {/if}\r\n {:else}\r\n <button class=\"mobile-cta-button mobile-cta-button-disabled\" disabled>\r\n <span translate=\"no\">{ctaButtonText}</span>\r\n </button>\r\n {/if}\r\n </div>\r\n {/if}\r\n</div>\r\n\r\n<!-- Password Protection Modal -->\r\n<InputModal\r\n bind:open={showPasswordModal}\r\n size=\"md\"\r\n title={labels.enterEventPassword || 'Enter event password'}\r\n description={labels.passwordModalDescription ||\r\n 'This event requires a password to view. Please enter the password provided by the event organizer.'}\r\n inputLabel={labels.passwordLabel || 'Password'}\r\n inputType=\"password\"\r\n bind:inputValue={passwordValue}\r\n inputRequired={true}\r\n errorMessage={passwordError}\r\n showError={!!passwordError}\r\n primaryButtonText={labels.unlockEvent || 'Unlock event'}\r\n secondaryButtonText={labels.goBack || 'Go back'}\r\n loading={passwordLoading}\r\n onconfirm={handlePasswordSubmit}\r\n oncancel={handlePasswordCancel}\r\n onclose={handlePasswordCancel}\r\n/>\r\n\r\n<!-- Waitlist Modal -->\r\n<WaitlistModal\r\n bind:show={showWaitlistModal}\r\n eventId={parseInt(String(id))}\r\n eventName={event?.name || 'this event'}\r\n onClose={() => (showWaitlistModal = false)}\r\n/>\r\n\r\n<style>\r\n .event-page {\r\n min-height: 100vh;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n touch-action: pan-x pan-y;\r\n -webkit-touch-callout: none;\r\n }\r\n\r\n .content-hidden {\r\n position: absolute;\r\n left: -9999px;\r\n opacity: 0;\r\n pointer-events: none;\r\n }\r\n\r\n .error-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding-top: 3rem;\r\n padding-bottom: 3rem;\r\n text-align: center;\r\n gap: 1rem;\r\n }\r\n\r\n .error-text {\r\n color: hsl(var(--status-sold-out, 0 72% 51%));\r\n }\r\n\r\n .go-back-btn {\r\n padding: 0.5rem 1rem;\r\n border-radius: 0.5rem;\r\n color: hsl(var(--bg-primary));\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n /* Hero Image */\r\n .hero-card {\r\n position: relative;\r\n border-radius: 0.5rem;\r\n overflow: hidden;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .hero-image {\r\n width: 100%;\r\n object-fit: contain;\r\n max-height: 37.5rem;\r\n }\r\n\r\n .back-button {\r\n position: absolute;\r\n top: 0.75rem;\r\n left: 0.75rem;\r\n width: 2.5rem;\r\n height: 2.5rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: rgb(0 0 0 / 60%);\r\n backdrop-filter: blur(4px);\r\n border: none;\r\n border-radius: 9999px;\r\n color: hsl(var(--bg-primary));\r\n cursor: pointer;\r\n z-index: var(--z-sticky);\r\n transition: background 0.15s ease;\r\n }\r\n\r\n .back-button:hover {\r\n background-color: rgb(0 0 0 / 75%);\r\n }\r\n\r\n /* Content Layout */\r\n .content-wrapper {\r\n max-width: 80rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n padding: 1.5rem;\r\n display: grid;\r\n gap: 2rem;\r\n align-items: start;\r\n grid-template-columns: 1fr 360px;\r\n position: relative;\r\n }\r\n\r\n .main-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1.5rem;\r\n }\r\n\r\n /* Event Header Card */\r\n .event-header {\r\n padding: 1.5rem;\r\n border-radius: 0.5rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .event-title {\r\n font-size: 1.875rem;\r\n line-height: 1.2;\r\n font-weight: 700;\r\n margin-bottom: 0.5rem;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .event-subtitle {\r\n font-size: 1rem;\r\n line-height: 1.5rem;\r\n margin-bottom: 1.25rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n /* Content Sections */\r\n .content-section {\r\n border-radius: 0.5rem;\r\n padding: 1.5rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .section-header {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 600;\r\n margin-bottom: 1rem;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .description {\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n line-height: 1.7;\r\n white-space: pre-line;\r\n }\r\n\r\n .disclaimer-text {\r\n margin: 0;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n line-height: 1.7;\r\n white-space: pre-line;\r\n }\r\n\r\n /* Performers Grid */\r\n .performers-grid {\r\n display: grid;\r\n grid-template-columns: repeat(3, 1fr);\r\n gap: 12px;\r\n }\r\n\r\n @media (width >= 640px) {\r\n .performers-grid {\r\n grid-template-columns: repeat(4, 1fr);\r\n }\r\n }\r\n\r\n @media (width >= 768px) {\r\n .performers-grid {\r\n grid-template-columns: repeat(5, 1fr);\r\n }\r\n }\r\n\r\n .performer-card {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.75rem;\r\n border-radius: 0.5rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .performer-avatar {\r\n width: 100%;\r\n aspect-ratio: 1 / 1;\r\n max-width: 6rem;\r\n border-radius: 0.5rem;\r\n object-fit: cover;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n }\r\n\r\n .performer-name {\r\n font-size: 0.875rem;\r\n line-height: 1.3;\r\n font-weight: 500;\r\n text-align: center;\r\n overflow-wrap: break-word;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n /* FAQs */\r\n .faq-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1rem;\r\n }\r\n\r\n .faq-question-text {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 500;\r\n margin-bottom: 0.25rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n .faq-answer-text {\r\n margin: 0;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n line-height: 1.7;\r\n }\r\n\r\n /* Mobile Showtimes */\r\n .mobile-showtimes {\r\n display: none;\r\n }\r\n\r\n /* Sidebar */\r\n .sidebar {\r\n position: sticky;\r\n top: 1.5rem;\r\n height: fit-content;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1rem;\r\n }\r\n\r\n .sidebar-event-header {\r\n display: block;\r\n }\r\n\r\n .main-content > .event-header {\r\n display: none;\r\n }\r\n\r\n .price-card {\r\n border-radius: 0.5rem;\r\n padding: 1.5rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .scarcity-badge-wrapper {\r\n margin-bottom: 1rem;\r\n }\r\n\r\n .price-label {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n margin-bottom: 0.25rem;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .price-amount {\r\n font-size: 1.5rem;\r\n line-height: 2rem;\r\n font-weight: 700;\r\n margin-bottom: 0.75rem;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .cta-button {\r\n width: 100%;\r\n padding: 1rem 1.5rem;\r\n color: hsl(var(--bg-primary));\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n cursor: pointer;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border: none;\r\n transition: opacity 0.15s ease;\r\n }\r\n\r\n .cta-button:hover:not(:disabled) {\r\n opacity: 0.9;\r\n }\r\n\r\n .cta-button.cta-disabled,\r\n .cta-button:disabled {\r\n cursor: not-allowed;\r\n background-color: hsl(var(--bg-secondary, 220 14% 96%));\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .cta-button.cta-waitlist {\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .waitlist-info {\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n text-align: center;\r\n margin-top: 0.5rem;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .mobile-waitlist-label {\r\n font-size: 1rem;\r\n line-height: 1.5rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .mobile-cta-waitlist-button {\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n /* Mobile Sticky CTA */\r\n .mobile-cta-bar {\r\n display: none;\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n padding: 16px;\r\n padding-bottom: max(16px, calc(env(safe-area-inset-bottom) + 8px));\r\n z-index: var(--z-critical);\r\n box-shadow: 0 -4px 20px color-mix(in srgb, black 10%, transparent);\r\n touch-action: manipulation;\r\n -webkit-tap-highlight-color: transparent;\r\n user-select: none;\r\n user-select: none;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border-top: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .mobile-cta-content {\r\n display: flex;\r\n align-items: stretch;\r\n gap: 0.75rem;\r\n }\r\n\r\n .mobile-cta-left {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n flex-shrink: 0;\r\n white-space: nowrap;\r\n }\r\n\r\n .mobile-date-label {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 400;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .mobile-price-line {\r\n display: flex;\r\n align-items: baseline;\r\n gap: 0.375rem;\r\n }\r\n\r\n .mobile-price-label {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 400;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .mobile-price-amount {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 700;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .mobile-cta-button {\r\n flex: 1 1 0%;\r\n min-width: 9rem;\r\n height: 3rem;\r\n color: hsl(var(--bg-primary));\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n cursor: pointer;\r\n border: 0;\r\n user-select: none;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n touch-action: manipulation;\r\n -webkit-tap-highlight-color: transparent;\r\n }\r\n\r\n .mobile-cta-button:hover:not(:disabled) {\r\n opacity: 0.9;\r\n }\r\n\r\n .mobile-cta-button.mobile-cta-button-disabled,\r\n .mobile-cta-button:disabled {\r\n cursor: not-allowed;\r\n width: 100%;\r\n height: 3rem;\r\n background-color: hsl(var(--bg-secondary, 220 14% 96%));\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n flex: none;\r\n }\r\n\r\n /* Responsive */\r\n @media (width <= 871px) {\r\n .event-page {\r\n padding-bottom: 80px;\r\n }\r\n\r\n .content-wrapper {\r\n grid-template-columns: 1fr;\r\n padding: 16px;\r\n }\r\n\r\n .sidebar {\r\n position: static;\r\n display: none;\r\n }\r\n\r\n .main-content > .event-header {\r\n display: block;\r\n }\r\n\r\n .sidebar-event-header {\r\n display: none;\r\n }\r\n\r\n .mobile-showtimes {\r\n display: block;\r\n }\r\n\r\n .mobile-cta-bar {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: stretch;\r\n gap: 12px;\r\n }\r\n\r\n .event-title {\r\n font-size: 24px;\r\n }\r\n }\r\n\r\n @media (width <= 480px) {\r\n .content-wrapper {\r\n padding: 12px;\r\n }\r\n\r\n .event-header,\r\n .content-section,\r\n .hero-card {\r\n border-radius: 8px;\r\n }\r\n\r\n .event-title {\r\n font-size: 20px;\r\n }\r\n\r\n .mobile-cta-bar {\r\n padding: 10px 12px;\r\n }\r\n\r\n .mobile-cta-button {\r\n height: 48px;\r\n font-size: 15px;\r\n }\r\n }\r\n\r\n /* Cancelled Event Styles */\r\n .cancelled-info-section {\r\n margin-top: 1rem;\r\n padding-top: 1rem;\r\n border-top: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .cancelled-learn-more {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n width: 100%;\r\n padding: 0;\r\n background: transparent;\r\n border: none;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 500;\r\n cursor: pointer;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .cancelled-learn-more:hover {\r\n color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .cancelled-learn-more .chevron {\r\n display: flex;\r\n transition: transform 0.2s;\r\n }\r\n\r\n .cancelled-learn-more .chevron.expanded {\r\n transform: rotate(180deg);\r\n }\r\n\r\n .cancelled-info-content {\r\n margin-top: 0.75rem;\r\n padding: 0.75rem;\r\n border-radius: 0.5rem;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n }\r\n\r\n .cancelled-info-content p {\r\n font-size: 0.875rem;\r\n line-height: 1.5;\r\n margin-bottom: 0.75rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n .cancelled-info-content p:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n .cancelled-footnote {\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n font-style: italic;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n /* Mobile cancelled styles */\r\n .mobile-cta-cancelled {\r\n flex-direction: column;\r\n }\r\n\r\n .mobile-cancelled-section {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.75rem;\r\n width: 100%;\r\n }\r\n\r\n .mobile-cancelled-section .mobile-cta-button {\r\n flex: 1;\r\n }\r\n\r\n .mobile-cancelled-learn-more {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n padding: 0.75rem 1rem;\r\n background: transparent;\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 500;\r\n cursor: pointer;\r\n white-space: nowrap;\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .mobile-cancelled-learn-more:hover {\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n }\r\n\r\n .mobile-cancelled-learn-more .chevron {\r\n display: flex;\r\n transition: transform 0.2s;\r\n }\r\n\r\n .mobile-cancelled-learn-more .chevron.expanded {\r\n transform: rotate(180deg);\r\n }\r\n\r\n .mobile-cancelled-info-content {\r\n padding: 0.75rem;\r\n border-radius: 0.5rem;\r\n margin-top: 0.5rem;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n }\r\n\r\n .mobile-cancelled-info-content p {\r\n font-size: 0.875rem;\r\n line-height: 1.5;\r\n margin-bottom: 0.75rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n .mobile-cancelled-info-content p:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n /* Password protection styles */\r\n .blur-content {\r\n filter: blur(8px);\r\n pointer-events: none;\r\n user-select: none;\r\n }\r\n\r\n .locked-overlay {\r\n position: absolute;\r\n inset: 0;\r\n z-index: var(--z-navigation);\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 0.5rem;\r\n min-height: 24rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%) / 95%);\r\n }\r\n\r\n .locked-content {\r\n text-align: center;\r\n padding: 2rem;\r\n }\r\n\r\n .locked-icon-wrapper {\r\n width: 5rem;\r\n height: 5rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-bottom: 1rem;\r\n border-radius: 9999px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .locked-title {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 600;\r\n margin-bottom: 0.5rem;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .locked-description {\r\n font-size: 0.875rem;\r\n line-height: 1.625;\r\n max-width: 20rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-bottom: 1.5rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n .unlock-btn {\r\n padding: 0.75rem 1.5rem;\r\n color: hsl(var(--bg-primary));\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n cursor: pointer;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border: none;\r\n transition: background-color 0.2s ease;\r\n }\r\n\r\n .unlock-btn:hover {\r\n opacity: 0.9;\r\n }\r\n\r\n .mobile-cta-hidden {\r\n display: none !important;\r\n }\r\n</style>\r\n"],"names":["getDisplayAvatarPath","profile","getDisplayAvatarUrl","baseUrl","CDN_BASE_URL","path","getImageUrl","getPerformerDisplayName","firstName","lastName","formatFullName","defaultAvatar","occurrences","$","$$props","currentEventId","venueTimeZone","getDefaultTimezone","variant","labels","futureOccurrences","occ","groupedByDate","groups","dateKey","formatFullDate","hasShowtimes","formatTime","dateStr","formatEventTime","selectShowtime","occurrence","isButtonDisabled","getSublabel","ctaState","dateTime","isComingSoon","isSoldOut","getTimeButtonAriaLabel","time","sublabel","isCurrent","label","section","root_1","h2","div","$$anchor","$$item","groupIndex","$$array","showtimes","div_1","root_2","h3","fragment_1","div_2","showtime","btnDisabled","button","root_4","span","classes_1","$0","div_3","root_5","h3_1","div_4","comingSoon","soldOut","div_5","root_6","button_1","span_1","span_2","root_7","span_3","span_4","root_8","text_6","$$render","consequent_1","text_5","consequent_2","classes_2","div_6","root_9","h3_2","div_7","button_2","root_10","span_5","classes_3","consequent","consequent_3","consequent_4","classes","consequent_5","venue","venueAddressLines","googleMapsUrl","showStage","eventStageName","showStartTime","showEndTime","showDoorsTime","dateDisplay","formatFullDateCompact","root","Calendar","node","Time","node_2","formatTimeRange","root_3","formatDoorsTime","node_1","Location","a","node_7","line","text_3","node_8","span_6","alternate","Theater","span_7","node_10","User","span_8","node_12","logger","createLogger","rawEventProp","eventIdProp","slugProp","currentEventIdProp","onNavigateBack","onBuyTickets","rawEvent","dataLoading","dataError","imageRendered","seriesDataLoaded","showSkeleton","heroImageRef","pageReady","handleImageLoad","handleImageError","event","transformEvent","id","slug","filterPublishedShowtimes","rawShowtimes","seriesOccurrences","eventSeriesId","hasEventSeries","effectiveCurrentEventId","onMount","fetched","fetchEventDetails","err","seriesId","vId","fetchSeriesOccurrences","getVenueDetails","venueData","venueStages","evtId","isEventAuthenticated","isPasswordVerified","showPasswordModal","handleBuyTickets","eventId","occSlug","toFaqArray","src","item","venueFAQs","venueDisclaimer","parseAddress","addressStr","parts","p","stateZipMatch","state","zip","city","lines","address","parsedVenueDisclaimer","s","confirmedPerformers","performer","isConfirmed","isNotHidden","hasName","b","hasPerformers","ticketType","isRegistrationEvent","availableTickets","publicAvailableTickets","ticket","hasAvailableTickets","totalTicketsRemaining","sum","t","remaining","totalTicketsCapacity","capacity","isCancelled","showCancelledInfo","passwordValue","passwordError","passwordLoading","showWaitlistModal","waitlistEnabled","setEventAuthenticated","authedEvents","evtIdStr","handlePasswordSubmit","e","password","checkEventPassword","handlePasswordCancel","requiresPassword","isLocked","computeCtaState","ctaButtonText","ctaDisabled","goBack","goToCheckout","getLowestPrice","tickets","visibleTickets","isVisible","isPublic","hasDonation","prices","hasPrice","isDonation","lowestPriceInfo","priceLabel","priceDisplay","formatCurrency","formatCompactDateTime","startDateTime","tz","date","weekday","formatDateRaw","month","day","compactDateTime","fragment","SkeletonLoader","p_1","text","Locked","p_2","node_3","img","$$value","ArrowLeft","div_8","h1","p_3","consequent_6","EventMeta","div_9","DateSelectorGrouped","div_10","EmptyState","node_11","consequent_7","consequent_8","root_11","h2_1","div_11","text_8","consequent_9","section_1","root_12","h2_2","div_12","displayName","avatarUrl","div_13","root_13","img_1","consequent_10","section_2","root_14","h2_3","div_14","faq","div_15","root_15","root_16","text_12","consequent_11","p_4","node_15","text_13","consequent_12","section_3","root_17","h2_4","p_5","consequent_13","PoweredByMicdrop","node_17","aside","div_16","h1_1","p_6","root_18","text_17","consequent_14","node_19","div_17","div_18","root_19","ScarcityBadge","node_21","consequent_15","div_19","fragment_4","div_20","consequent_16","button_3","node_22","div_21","root_21","consequent_17","div_22","root_22","button_4","ChevronDown","div_23","root_23","p_7","p_8","p_9","consequent_18","classes_4","consequent_19","consequent_20","consequent_21","div_24","div_25","root_26","div_26","fragment_7","div_27","fragment_8","consequent_22","button_5","span_9","classes_6","$$args","div_28","fragment_9","button_6","button_7","span_10","span_11","div_29","root_30","p_10","p_11","p_12","consequent_24","classes_7","button_8","root_31","span_12","consequent_25","alternate_1","text_16","classes_5","consequent_26","InputModal","node_32","WaitlistModal","node_33"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EventPage.legacy-BFMUEm7m.js","sources":["../src/lib/utils/performerDisplay.ts","../src/assets/images/default-avatar.png","../src/components/DateSelector/DateSelectorGrouped.svelte","../src/components/Events/EventMeta.svelte","../src/components/Views/EventPage.legacy.svelte"],"sourcesContent":["import { formatFullName } from '@getmicdrop/svelte-components';\r\n/**\r\n * Performer display utilities: avatar path/URL resolution, display name\r\n */\r\nimport { CDN_BASE_URL, getImageUrl } from './imageUrl';\r\n\r\ninterface PerformerProfile {\r\n profileImageSource?: string;\r\n profileImage?: string;\r\n avatarPosition1?: string;\r\n avatarPosition2?: string;\r\n avatarPosition3?: string;\r\n avatarPosition4?: string;\r\n avatarPosition5?: string;\r\n avatarPosition6?: string;\r\n displayName?: string;\r\n firstName?: string;\r\n lastName?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Get the display avatar path for a performer based on their profileImageSource setting.\r\n * This mirrors the backend logic in auth/utils/avatar.go\r\n */\r\nexport function getDisplayAvatarPath(profile: PerformerProfile | null | undefined): string {\r\n if (!profile) return \"\";\r\n\r\n const source = profile.profileImageSource || \"1\";\r\n\r\n // Map source number to the corresponding avatar field\r\n switch (source) {\r\n case \"1\":\r\n return profile.avatarPosition1 || profile.profileImage || \"\";\r\n case \"2\":\r\n return profile.avatarPosition2 || \"\";\r\n case \"3\":\r\n return profile.avatarPosition3 || \"\";\r\n case \"4\":\r\n return profile.avatarPosition4 || \"\";\r\n case \"5\":\r\n return profile.avatarPosition5 || \"\";\r\n case \"6\":\r\n return profile.avatarPosition6 || \"\";\r\n default:\r\n // Fallback to position 1 or profileImage\r\n return profile.avatarPosition1 || profile.profileImage || \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Get the full display avatar URL for a performer.\r\n * Combines getDisplayAvatarPath with CDN URL resolution.\r\n */\r\nexport function getDisplayAvatarUrl(\r\n profile: PerformerProfile | null | undefined,\r\n baseUrl: string = CDN_BASE_URL\r\n): string {\r\n const path = getDisplayAvatarPath(profile);\r\n if (!path) return \"\";\r\n return getImageUrl(path, baseUrl);\r\n}\r\n\r\n/**\r\n * Get the performer display name based on their profile settings.\r\n * This mirrors the backend logic in auth/utils/avatar.go\r\n */\r\nexport function getPerformerDisplayName(profile: PerformerProfile | null | undefined): string {\r\n if (!profile) return \"\";\r\n\r\n // If displayName is set, use it\r\n if (profile.displayName) {\r\n return profile.displayName;\r\n }\r\n\r\n // Otherwise use first + last name\r\n const firstName = profile.firstName || \"\";\r\n const lastName = profile.lastName || \"\";\r\n const fullName = formatFullName(firstName, lastName).trim();\r\n\r\n return fullName || \"\";\r\n}\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAxCAYAAABznEEcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANTSURBVHgB1ZpNayJBEIZLM4lJ2CXLJiQYdsNCYEkguYSAIF780149imcFJSiKF2ExBzF+JDq69Q5bwQyuM9Ndo/GBtv0c663urq7ungQFUCgUUrRFjo6O3Hw+P1v3nYT/jWKx6KTT6XPHcb5Pp9OtCvAx4PJ8e3v77P/gg4hKpXKRSqXSruvu0eflbTgcNh8fH0fyxruIer1+uVgs0rQDsJPdyWTyJEKSeKjVaqe7IgDsMYeHh7/ZZq/HJP+9f0k7BoSw88/xPMnd6CvXBxQTHBwoLubz+QVaw+EnXxKJBGnR6/Wo0+l49bKAk5MTr1xfX9Px8TFpgNYolUoHCW6SX/z6lCzp9/uIbl4dxNXVlaaYtkMKwPMQEOX7aKlMJqMiJEmWdLvdSAKE0WhE5XLZq22xEgEDODCQKfi9iQP8WImAAFtPoluh2GAsAsajK2nQbDbJBmMRYaJQWPzhOCrGImy7gB+bbmksQnsmtmlZ6xCrxf7+PpliLMLmT7WvZyyCV3+kCfIqU4xF4E+1WgMO2Vp3QiKnge11rAa2RiYKAWdnZ2SDlQi0xsPDg3FXgANubm7IFusQi7FhklLL7zTGlco8IQaFiVgwGt7P5XJqKzyVRRGAQehaSB+Q0KFeTiVkeYoxoD3HqIkQIOb+/p42SaxpB/IrjZVbECotAWNlcYNEDoavShBlgkSNsGobWgWr3Q4YLas7k6wWXQ9CLOebtpEIMV5zYWSxjRNtywbehvHYctEG18RyF0JQohBahOYWy/8QJ6GOMpOHik6bELAM5pkoWzmBIuCVTQoQ0L3C7mkFioBHNi1AQIuE2RZaKwJRSGtvyRQ4MSh8rxURRxSKCgQEOXJtdJJQh+6kOSeEQWZ2mRDXsVYELoLMFMAjELJcNMeKZLnLJSyh5wl4xp/viDCMHUk9/Cm4/xriYdTwshhsmp7zKarr8I9H/OdGudMqYctAFIrW4mcV4/H41ZnNZmOKCfF8XPCh42s2mx0neXrH7QYD2k28WyS8EMunp9udDAxAK1Sr1T94/n7222g0zrn//qQdAAL46Prp7u7uDa8/HGC3Wq1vPFB+cMt8prtr/Axc122LALDyFB73enB1yoMytjsNojIYDF7Ynh4b/+L/7C+YasWK9TsWIAAAAABJRU5ErkJggg==\"","<script>\r\n import { getDefaultTimezone } from '@getmicdrop/svelte-components';\r\nimport { formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\r\n\r\n let {\r\n occurrences = [],\r\n currentEventId = null,\r\n venueTimeZone = getDefaultTimezone(),\r\n variant = 'A', // A, B, or C for different layouts\r\n onbuyTickets,\r\n labels = {},\r\n } = $props();\r\n\r\n // Filter to only future occurrences\r\n let futureOccurrences = $derived(occurrences.filter(occ => {\r\n const occDate = new Date(occ.startDateTime);\r\n return occDate > new Date();\r\n }));\r\n\r\n // Group occurrences by date\r\n let groupedByDate = $derived.by(() => {\r\n const groups = new Map();\r\n\r\n for (const occ of futureOccurrences) {\r\n const dateKey = formatFullDate(occ.startDateTime, venueTimeZone);\r\n\r\n if (!groups.has(dateKey)) {\r\n groups.set(dateKey, []);\r\n }\r\n groups.get(dateKey).push(occ);\r\n }\r\n\r\n return Array.from(groups.entries());\r\n });\r\n\r\n // Check if we have dates to show\r\n let hasShowtimes = $derived(futureOccurrences.length > 0);\r\n\r\n // Format time for button display (e.g., \"7:00 PM\")\r\n function formatTime(dateStr) {\r\n return formatEventTime(dateStr, venueTimeZone);\r\n }\r\n\r\n // Navigate directly to tickets page for this occurrence\r\n function selectShowtime(occurrence) {\r\n if (occurrence.ctaState?.disabled) return;\r\n\r\n onbuyTickets?.({\r\n eventId: occurrence.id,\r\n slug: occurrence.slug,\r\n startDateTime: occurrence.startDateTime\r\n });\r\n }\r\n\r\n // Check if button should be disabled\r\n function isButtonDisabled(occurrence) {\r\n return occurrence.ctaState?.disabled || false;\r\n }\r\n\r\n // Get the sublabel for a showtime button\r\n // Returns { line1, line2? } or null\r\n function getSublabel(occurrence) {\r\n const ctaState = occurrence.ctaState;\r\n if (!ctaState) return null;\r\n\r\n // Sold out - check multiple indicators\r\n if (ctaState.reason === 'sold_out' || ctaState.text === 'Sold out') {\r\n return { line1: labels.statusSoldOut || 'Sold out' };\r\n }\r\n\r\n // Coming soon - show \"On sale\" on line 1, date/time on line 2\r\n // ctaState.text is like \"On sale Dec 15\" or \"On sale Sat 12:04 PM\"\r\n if (ctaState.reason === 'coming_soon' && ctaState.text) {\r\n const dateTime = ctaState.text.replace('On sale ', '');\r\n return { line1: labels.onSale || 'On sale', line2: dateTime };\r\n }\r\n\r\n // Sales ended or no tickets - no sublabel needed (just gray)\r\n return null;\r\n }\r\n\r\n // Check if showtime is coming soon (for different styling)\r\n function isComingSoon(occurrence) {\r\n return occurrence.ctaState?.reason === 'coming_soon';\r\n }\r\n\r\n // Check if showtime is sold out\r\n function isSoldOut(occurrence) {\r\n return occurrence.ctaState?.reason === 'sold_out' || occurrence.ctaState?.text === 'Sold out';\r\n }\r\n\r\n // Get aria-label for a time button\r\n function getTimeButtonAriaLabel(occurrence, dateKey) {\r\n const time = formatTime(occurrence.startDateTime);\r\n const sublabel = getSublabel(occurrence);\r\n const isCurrent = occurrence.id === currentEventId;\r\n\r\n let label = `${time} on ${dateKey}`;\r\n\r\n if (isCurrent) {\r\n label += ', currently selected';\r\n }\r\n\r\n if (sublabel) {\r\n if (sublabel.line2) {\r\n label += `, ${sublabel.line1} ${sublabel.line2}`;\r\n } else {\r\n label += `, ${sublabel.line1}`;\r\n }\r\n } else if (!isButtonDisabled(occurrence)) {\r\n label += `. ${labels.pressEnterToGetTicketsForDate || 'Press Enter to get tickets'}`;\r\n }\r\n\r\n return label;\r\n }\r\n</script>\r\n\r\n{#if hasShowtimes}\r\n <section class=\"bg-card border border-border rounded-lg p-6\" class:variant-a={variant === 'A'} class:variant-b={variant === 'B'} class:variant-c={variant === 'C'} aria-labelledby=\"showtimes-grouped-heading\">\r\n <h2 id=\"showtimes-grouped-heading\" class=\"text-xl font-semibold text-text-primary mb-4\">{labels.showtimes || 'Showtimes'}</h2>\r\n\r\n <div class=\"flex flex-col gap-4\" role=\"list\">\r\n {#each groupedByDate as [dateKey, showtimes], groupIndex}\r\n <div class=\"date-group\" role=\"listitem\" aria-label=\"Showtimes for {dateKey}\">\r\n {#if variant === 'A'}\r\n <!-- Variant A: Date as prominent header, times below -->\r\n <h3 class=\"date-header-a\" id=\"date-group-{groupIndex}\">{dateKey}</h3>\r\n <div class=\"flex flex-wrap gap-2\" role=\"group\" aria-labelledby=\"date-group-{groupIndex}\">\r\n {#each showtimes as showtime}\r\n {@const isCurrent = showtime.id === currentEventId}\r\n {@const btnDisabled = isButtonDisabled(showtime)}\r\n <button\r\n type=\"button\"\r\n class=\"time-btn\"\r\n class:current={isCurrent}\r\n class:disabled={btnDisabled}\r\n onclick={() => selectShowtime(showtime)}\r\n disabled={btnDisabled}\r\n aria-label={getTimeButtonAriaLabel(showtime, dateKey)}\r\n aria-pressed={isCurrent}\r\n >\r\n <span aria-hidden=\"true\">{formatTime(showtime.startDateTime)}</span>\r\n </button>\r\n {/each}\r\n </div>\r\n {:else if variant === 'B'}\r\n <!-- Variant B: Date same size as times, sublabels below buttons -->\r\n <div class=\"date-row-b\">\r\n <h3 class=\"date-label-b\" id=\"date-group-b-{groupIndex}\">{dateKey}</h3>\r\n <div class=\"flex flex-wrap gap-2\" role=\"group\" aria-labelledby=\"date-group-b-{groupIndex}\">\r\n {#each showtimes as showtime}\r\n {@const isCurrent = showtime.id === currentEventId}\r\n {@const btnDisabled = isButtonDisabled(showtime)}\r\n {@const sublabel = getSublabel(showtime)}\r\n {@const comingSoon = isComingSoon(showtime)}\r\n {@const soldOut = isSoldOut(showtime)}\r\n <div class=\"time-slot\">\r\n <button\r\n type=\"button\"\r\n class=\"time-btn\"\r\n class:current={isCurrent}\r\n class:disabled={btnDisabled}\r\n class:coming-soon={comingSoon}\r\n class:sold-out={soldOut}\r\n onclick={() => selectShowtime(showtime)}\r\n disabled={btnDisabled}\r\n aria-label={getTimeButtonAriaLabel(showtime, dateKey)}\r\n aria-pressed={isCurrent}\r\n >\r\n <span aria-hidden=\"true\">{formatTime(showtime.startDateTime)}</span>\r\n </button>\r\n {#if sublabel}\r\n <span class=\"btn-sublabel\" aria-hidden=\"true\">\r\n <span class=\"sublabel-line1\">{sublabel.line1}</span>\r\n {#if sublabel.line2}\r\n <span class=\"sublabel-line2\">{sublabel.line2}</span>\r\n {/if}\r\n </span>\r\n {/if}\r\n </div>\r\n {/each}\r\n </div>\r\n </div>\r\n {:else if variant === 'C'}\r\n <!-- Variant C: Compact card style, date and times together -->\r\n <div class=\"date-card-c\">\r\n <h3 class=\"date-badge-c\" id=\"date-group-c-{groupIndex}\">{dateKey}</h3>\r\n <div class=\"times-row-c\" role=\"group\" aria-labelledby=\"date-group-c-{groupIndex}\">\r\n {#each showtimes as showtime}\r\n {@const isCurrent = showtime.id === currentEventId}\r\n {@const btnDisabled = isButtonDisabled(showtime)}\r\n <button\r\n type=\"button\"\r\n class=\"time-btn-c\"\r\n class:current={isCurrent}\r\n class:disabled={btnDisabled}\r\n onclick={() => selectShowtime(showtime)}\r\n disabled={btnDisabled}\r\n aria-label={getTimeButtonAriaLabel(showtime, dateKey)}\r\n aria-pressed={isCurrent}\r\n >\r\n <span aria-hidden=\"true\">{formatTime(showtime.startDateTime)}</span>\r\n </button>\r\n {/each}\r\n </div>\r\n </div>\r\n {/if}\r\n </div>\r\n {/each}\r\n </div>\r\n </section>\r\n{/if}\r\n\r\n<style>\r\n /* ========================================\r\n VARIANT A: Big date header, times below\r\n ======================================== */\r\n .variant-a .date-header-a {\r\n font-size: 1rem;\r\n line-height: 1.5rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary));\r\n margin-bottom: 0.625rem;\r\n }\r\n\r\n \r\n\r\n .variant-a .time-btn {\r\n padding: 0.625rem 1.25rem;\r\n font-size: 0.875rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary));\r\n background-color: hsl(var(--bg-secondary));\r\n border: 1px solid hsl(var(--border));\r\n border-radius: 0.5rem;\r\n cursor: pointer;\r\n transition: all 150ms;\r\n }\r\n\r\n \r\n\r\n .variant-a .time-btn:hover:not(:disabled) {\r\n background-color: hsl(var(--bg-quaternary));\r\n border-color: hsl(var(--stroke-primary));\r\n }\r\n\r\n \r\n\r\n .variant-a .time-btn.current {\r\n color: hsl(var(--bg-primary));\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-a .time-btn.disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n text-decoration: line-through;\r\n }\r\n\r\n /* ========================================\r\n VARIANT B: Date matches Event Info styling\r\n ======================================== */\r\n .variant-b .date-row-b {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.625rem;\r\n }\r\n\r\n .variant-b .date-label-b {\r\n font-size: 0.875rem;\r\n font-weight: 500;\r\n color: hsl(var(--text-secondary));\r\n }\r\n\r\n \r\n\r\n .variant-b .time-slot {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 0.25rem;\r\n }\r\n\r\n .variant-b .time-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 5rem;\r\n height: 2.5rem;\r\n padding-left: 0.875rem;\r\n padding-right: 0.875rem;\r\n font-size: 0.875rem;\r\n font-weight: 600;\r\n color: hsl(var(--bg-primary));\r\n border: none;\r\n border-radius: 0.5rem;\r\n cursor: pointer;\r\n transition: all 150ms;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-b .btn-sublabel {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n font-size: 0.75rem;\r\n font-weight: 500;\r\n text-transform: uppercase;\r\n letter-spacing: 0.025em;\r\n color: hsl(var(--text-tertiary));\r\n text-align: center;\r\n line-height: 1.25;\r\n }\r\n\r\n \r\n\r\n .variant-b .btn-sublabel .sublabel-line2 {\r\n font-weight: 600;\r\n }\r\n\r\n .variant-b .time-btn:hover:not(:disabled) {\r\n opacity: 0.9;\r\n }\r\n\r\n .variant-b .time-btn.current {\r\n cursor: default;\r\n pointer-events: none;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%) / 15%);\r\n color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-b .time-btn.current:hover {\r\n opacity: 1;\r\n }\r\n\r\n .variant-b .time-btn.disabled {\r\n background-color: hsl(var(--bg-quaternary));\r\n color: hsl(var(--text-tertiary));\r\n cursor: not-allowed;\r\n }\r\n\r\n \r\n\r\n .variant-b .time-btn.sold-out {\r\n background-color: hsl(var(--bg-quaternary));\r\n color: hsl(var(--text-tertiary));\r\n cursor: not-allowed;\r\n }\r\n\r\n \r\n\r\n .variant-b .time-btn.coming-soon {\r\n background-color: hsl(var(--bg-quaternary));\r\n color: hsl(var(--text-tertiary));\r\n cursor: not-allowed;\r\n }\r\n\r\n \r\n\r\n /* ========================================\r\n VARIANT C: Compact card with badge date\r\n ======================================== */\r\n .variant-c .date-card-c {\r\n background-color: hsl(var(--bg-secondary));\r\n border-radius: 0.5rem;\r\n padding: 1rem;\r\n }\r\n\r\n \r\n\r\n .variant-c .date-badge-c {\r\n display: inline-block;\r\n font-size: 0.75rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-secondary));\r\n text-transform: uppercase;\r\n letter-spacing: 0.025em;\r\n margin-bottom: 0.75rem;\r\n }\r\n\r\n \r\n\r\n .variant-c .times-row-c {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 0.5rem;\r\n }\r\n\r\n .variant-c .time-btn-c {\r\n padding: 0.5rem 1rem;\r\n font-size: 0.875rem;\r\n font-weight: 500;\r\n color: hsl(var(--text-primary));\r\n background-color: hsl(var(--bg-primary));\r\n border: 1px solid hsl(var(--border));\r\n border-radius: 0.375rem;\r\n cursor: pointer;\r\n transition: all 150ms;\r\n }\r\n\r\n \r\n\r\n .variant-c .time-btn-c:hover:not(:disabled) {\r\n border-color: hsl(var(--brand-primary, 224 76% 48%));\r\n color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-c .time-btn-c.current {\r\n color: hsl(var(--bg-primary));\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .variant-c .time-btn-c.disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n }\r\n\r\n /* Focus visible styles for all variants */\r\n .time-btn:focus-visible,\r\n .time-btn-c:focus-visible {\r\n outline: hsl(var(--brand-primary)) solid 2px;\r\n outline-offset: 2px;\r\n }\r\n\r\n</style>\r\n","<script>\r\n import { getDefaultTimezone } from '@getmicdrop/svelte-components';\r\nimport { Calendar, Location, Time, User, Theater } from \"carbon-icons-svelte\";\r\n import {\r\n formatFullDate,\r\n formatFullDateCompact,\r\n formatEventTime,\r\n formatTimeRange,\r\n formatDoorsTime,\r\n } from \"$lib/utils/datetime.js\";\r\n\r\n let {\r\n event,\r\n venue = {},\r\n venueTimeZone = getDefaultTimezone(),\r\n venueAddressLines = [],\r\n googleMapsUrl = '',\r\n showStage = false,\r\n eventStageName = '',\r\n showStartTime = true,\r\n showEndTime = false,\r\n showDoorsTime = false,\r\n variant = 'default', // 'default' or 'sidebar'\r\n labels = {},\r\n } = $props();\r\n\r\n let dateDisplay = $derived(variant === 'sidebar'\r\n ? formatFullDateCompact(event?.startDateTime, venueTimeZone)\r\n : formatFullDate(event?.startDateTime, venueTimeZone));\r\n</script>\r\n\r\n<div class=\"flex flex-col gap-4\">\r\n <div class=\"flex items-start gap-3\">\r\n <Calendar size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n <span class=\"body-md font-medium\">{dateDisplay}</span>\r\n </div>\r\n {#if showStartTime || showDoorsTime}\r\n <div class=\"flex items-start gap-3\">\r\n <Time size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n <div class=\"flex flex-col gap-0.5\">\r\n {#if showStartTime}\r\n <span class=\"body-md font-medium\">{showEndTime && event?.endDateTime ? formatTimeRange(event?.startDateTime, event?.endDateTime, venueTimeZone) : formatEventTime(event?.startDateTime, venueTimeZone)}</span>\r\n {/if}\r\n {#if showDoorsTime && event?.doorsOpenTime}\r\n <span class=\"caption\">{(labels.doorsOpen || 'Doors open {time}').replace('{time}', formatDoorsTime(event?.doorsOpenTime, venueTimeZone))}</span>\r\n {/if}\r\n </div>\r\n </div>\r\n {/if}\r\n <div class=\"flex items-start gap-3\">\r\n <Location size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n {#if googleMapsUrl}\r\n <a href={googleMapsUrl} target=\"_blank\" rel=\"noopener noreferrer\" class=\"link-unstyled flex flex-col gap-0.5\" aria-label=\"{venue.name || (labels.venue || 'Venue')}, {venueAddressLines.join(', ')} (opens in Google Maps)\">\r\n <span class=\"body-md font-medium\" aria-hidden=\"true\">{venue.name || (labels.venue || 'Venue')}</span>\r\n {#each venueAddressLines as line}\r\n <span class=\"caption\" aria-hidden=\"true\">{line}</span>\r\n {/each}\r\n </a>\r\n {:else}\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span class=\"body-md font-medium\">{venue.name || (labels.venue || 'Venue')}</span>\r\n {#each venueAddressLines as line}\r\n <span class=\"caption\">{line}</span>\r\n {/each}\r\n </div>\r\n {/if}\r\n </div>\r\n {#if showStage}\r\n <div class=\"flex items-start gap-3\">\r\n <Theater size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n <span class=\"body-md font-medium\">{eventStageName}</span>\r\n </div>\r\n {/if}\r\n {#if event?.displayAgeRestriction}\r\n <div class=\"flex items-start gap-3\">\r\n <User size={20} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n <span class=\"body-md font-medium\">{event?.hasAgeRestriction && event?.ageRequirement ? (labels.agesPlus || 'Ages {age}+').replace('{age}', String(event.ageRequirement)) : (labels.allAges || 'All ages')}</span>\r\n </div>\r\n {/if}\r\n</div>\r\n","<script>\r\n // @ts-nocheck legacy fallback (legacy=1 path), slated for deletion after VC finalization — not type-maintained\r\n import { onMount } from 'svelte';\r\n import {\r\n transformEvent,\r\n getImageUrl,\r\n getVenueDetails,\r\n getDisplayAvatarUrl,\r\n getPerformerDisplayName,\r\n } from '$lib/utils/utils.js';\r\n import { ArrowLeft, ChevronDown, Locked } from 'carbon-icons-svelte';\r\n import defaultAvatar from '../../assets/images/default-avatar.png';\r\n import DateSelectorGrouped from '../DateSelector/DateSelectorGrouped.svelte';\r\n import {\r\n fetchSeriesOccurrences,\r\n fetchEventDetails,\r\n checkEventPassword,\r\n computeCtaState,\r\n } from '$lib/utils/api.js';\r\n import { createLogger } from '@getmicdrop/svelte-components/utils/logger';\r\n const logger = createLogger('VC');\r\n import SkeletonLoader from '../SkeletonLoader/SkeletonLoader.svelte';\r\n import EventMeta from '../Events/EventMeta.svelte';\r\n import PoweredByMicdrop from '../PoweredByMicdrop.svelte';\r\n import ScarcityBadge from '../ScarcityBadge.svelte';\r\n import WaitlistModal from '../Modals/WaitlistModal.svelte';\r\n import { InputModal, EmptyState, getDefaultTimezone, formatCurrency, formatDateRaw } from '@getmicdrop/svelte-components';\r\n\r\n let {\r\n // Pre-fetched event data (from route server load)\r\n rawEvent: rawEventProp = undefined,\r\n // Event ID for self-fetch mode (color preview, widget embedding)\r\n eventId: eventIdProp = undefined,\r\n // Event slug (from route params)\r\n slug: slugProp = '',\r\n // For series: which occurrence to highlight. undefined = use eventId. null = series home (no highlight).\r\n currentEventId: currentEventIdProp = undefined,\r\n // Navigation callbacks\r\n onNavigateBack = undefined,\r\n onBuyTickets = undefined,\r\n // Context\r\n organizationId = '',\r\n // i18n labels\r\n labels = {},\r\n } = $props();\r\n\r\n // Data state\r\n let rawEvent = $state(rawEventProp || null);\r\n let dataLoading = $state(!rawEventProp && !!eventIdProp);\r\n let dataError = $state(null);\r\n\r\n // Page ready state - wait for hero image AND series data to load\r\n let imageRendered = $state(false);\r\n let seriesDataLoaded = $state(false);\r\n let showSkeleton = $state(true);\r\n let heroImageRef = $state();\r\n\r\n let pageReady = $derived(imageRendered && seriesDataLoaded);\r\n\r\n $effect(() => {\r\n if (pageReady) {\r\n showSkeleton = false;\r\n }\r\n });\r\n\r\n function handleImageLoad() {\r\n imageRendered = true;\r\n }\r\n\r\n function handleImageError() {\r\n imageRendered = true;\r\n }\r\n\r\n $effect(() => {\r\n if (\r\n heroImageRef &&\r\n heroImageRef.complete &&\r\n heroImageRef.naturalHeight > 0\r\n ) {\r\n imageRendered = true;\r\n }\r\n });\r\n\r\n // Derived event data\r\n let event = $derived(rawEvent ? transformEvent(rawEvent) : null);\r\n let id = $derived(eventIdProp || rawEvent?.id || rawEvent?.ID || '');\r\n let slug = $derived(slugProp || rawEvent?.slug || '');\r\n\r\n // Filter out unpublished series events from showtimes\r\n function filterPublishedShowtimes(rawShowtimes) {\r\n if (!Array.isArray(rawShowtimes)) return [];\r\n return rawShowtimes.filter(showtime => {\r\n if (\r\n showtime.published === undefined &&\r\n showtime.isPublished === undefined\r\n ) {\r\n return true;\r\n }\r\n return showtime.published === true || showtime.isPublished === true;\r\n });\r\n }\r\n\r\n let showtimes = $derived(filterPublishedShowtimes(rawEvent?.showtimes || []));\r\n\r\n // Event series occurrences for date selector\r\n let seriesOccurrences = $state([]);\r\n let eventSeriesId = $derived(rawEvent?.eventSeriesId || 0);\r\n let venueId = $derived(\r\n rawEvent?.venueID || rawEvent?.venueId || venue?.id || 0\r\n );\r\n let hasEventSeries = $derived(eventSeriesId > 0);\r\n\r\n // Effective currentEventId for DateSelectorGrouped\r\n // undefined prop = default to this event's ID\r\n // null prop = series home mode (no highlight)\r\n let effectiveCurrentEventId = $derived(\r\n currentEventIdProp === null\r\n ? null\r\n : (currentEventIdProp ?? parseInt(String(id)))\r\n );\r\n\r\n onMount(async () => {\r\n // Self-fetch mode\r\n if (!rawEvent && eventIdProp) {\r\n try {\r\n const fetched = await fetchEventDetails(eventIdProp);\r\n rawEvent = fetched;\r\n } catch (err) {\r\n dataError =\r\n err.message || labels.failedToLoadEvent || 'Failed to load event';\r\n dataLoading = false;\r\n return;\r\n }\r\n dataLoading = false;\r\n }\r\n\r\n if (!rawEvent) {\r\n imageRendered = true;\r\n seriesDataLoaded = true;\r\n return;\r\n }\r\n\r\n // Handle image loading\r\n const imageUrl = getImageUrl(\r\n rawEvent.coverImage || rawEvent.image || rawEvent.ShowImage\r\n );\r\n if (!imageUrl) {\r\n imageRendered = true;\r\n }\r\n\r\n // Fetch series data\r\n const seriesId = rawEvent.eventSeriesId || 0;\r\n const vId = rawEvent.venueID || rawEvent.venueId || 0;\r\n\r\n if (seriesId > 0 && vId > 0) {\r\n fetchSeriesOccurrences(seriesId, vId)\r\n .then(occurrences => {\r\n seriesOccurrences = occurrences;\r\n seriesDataLoaded = true;\r\n })\r\n .catch(err => {\r\n logger.error('Failed to fetch series occurrences:', err);\r\n seriesOccurrences = [];\r\n seriesDataLoaded = true;\r\n });\r\n } else {\r\n seriesDataLoaded = true;\r\n }\r\n\r\n // Fetch venue details for stages\r\n if (vId > 0) {\r\n getVenueDetails(vId)\r\n .then(venueData => {\r\n venueStages = venueData?.stages || [];\r\n })\r\n .catch(err => {\r\n logger.error('Failed to fetch venue details:', err);\r\n venueStages = [];\r\n });\r\n }\r\n\r\n // Check password protection\r\n if (rawEvent?.password && rawEvent.password.trim() !== '') {\r\n const evtId = rawEvent.id || rawEvent.ID || eventIdProp;\r\n if (!isEventAuthenticated(evtId)) {\r\n showPasswordModal = true;\r\n } else {\r\n isPasswordVerified = true;\r\n }\r\n }\r\n });\r\n\r\n // Handle buy tickets on occurrence\r\n function handleBuyTickets(event) {\r\n const { eventId, slug: occSlug } = event.detail;\r\n if (onBuyTickets) {\r\n onBuyTickets(eventId, occSlug || slug);\r\n }\r\n }\r\n\r\n // FAQ and venue data\r\n const toFaqArray = src => {\r\n if (!src) return [];\r\n if (Array.isArray(src)) {\r\n return src.map(item =>\r\n typeof item === 'string' ? { question: '', answer: item.trim() } : item\r\n );\r\n }\r\n return [{ question: '', answer: String(src).trim() }];\r\n };\r\n\r\n let venue = $derived(rawEvent?.venue || {});\r\n let venueFAQs = $derived(toFaqArray(venue.faq));\r\n let venueDisclaimer = $derived(venue.disclaimer || '');\r\n\r\n // Stage display\r\n let venueStages = $state([]);\r\n let eventStageName = $derived(rawEvent?.stage?.name || '');\r\n let showStage = $derived(venueStages.length > 1 && eventStageName);\r\n\r\n // Parse address\r\n function parseAddress(addressStr) {\r\n if (!addressStr) return [];\r\n const parts = addressStr.split(',').map(p => p.trim());\r\n if (parts.length < 2) return [addressStr];\r\n const lastPart = parts[parts.length - 1];\r\n const stateZipMatch = lastPart.match(/^([A-Z]{2})\\s+(\\d{5}(-\\d{4})?)$/);\r\n if (stateZipMatch && parts.length >= 3) {\r\n const state = stateZipMatch[1];\r\n const zip = stateZipMatch[2];\r\n const city = parts[parts.length - 2];\r\n const streetParts = parts.slice(0, -2);\r\n const lines = streetParts;\r\n lines.push(`${city}, ${state} ${zip}`);\r\n return lines;\r\n }\r\n return [parts[0], parts.slice(1).join(', ')];\r\n }\r\n\r\n let venueAddressLines = $derived(\r\n parseAddress(venue.address || venue.googleLocationNameCache || '')\r\n );\r\n\r\n let googleMapsUrl = $derived.by(() => {\r\n const address = venue.address || venue.googleLocationNameCache || '';\r\n if (address) {\r\n return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`;\r\n }\r\n return '';\r\n });\r\n\r\n let parsedVenueDisclaimer = $derived(\r\n venueDisclaimer\r\n ? venueDisclaimer\r\n .split(/(?<=[.?!])\\s+(?=[A-Z])/g)\r\n .map(s => s.trim())\r\n .filter(Boolean)\r\n : []\r\n );\r\n\r\n // Filter performers: only show Confirmed (acceptedState === 2) and not hidden\r\n let confirmedPerformers = $derived(\r\n (event?.performers || [])\r\n .filter(performer => {\r\n const isConfirmed = performer.acceptedState === 2;\r\n const isNotHidden = !performer.shouldBeHidden;\r\n const profile = performer.RosterPerformer?.User?.performerProfile;\r\n const hasName =\r\n profile?.firstName || profile?.lastName || profile?.displayName;\r\n return isConfirmed && isNotHidden && hasName;\r\n })\r\n .sort((a, b) => (a.listPosition || 0) - (b.listPosition || 0))\r\n );\r\n\r\n let hasPerformers = $derived(confirmedPerformers.length > 0);\r\n\r\n let ticketType = $derived(\r\n event?.eventTicketingType ?? event?.ticketType ?? 0\r\n );\r\n let isRegistrationEvent = $derived(ticketType === 1);\r\n let availableTickets = $derived(event?.availableTickets || []);\r\n\r\n // Filter tickets for public website\r\n let publicAvailableTickets = $derived(\r\n availableTickets.filter(ticket => ticket.salesChannel !== 2)\r\n );\r\n let hasAvailableTickets = $derived(publicAvailableTickets.length > 0);\r\n\r\n // Scarcity\r\n let totalTicketsRemaining = $derived(\r\n publicAvailableTickets.reduce((sum, t) => {\r\n const remaining =\r\n t.remainingCapacity ?? t.quantityRemaining ?? t.quantity ?? 0;\r\n return sum + remaining;\r\n }, 0)\r\n );\r\n let totalTicketsCapacity = $derived(\r\n publicAvailableTickets.reduce((sum, t) => {\r\n const capacity =\r\n t.totalCapacity ??\r\n t.quantity ??\r\n t.remainingCapacity ??\r\n t.quantityRemaining ??\r\n 0;\r\n return sum + capacity;\r\n }, 0)\r\n );\r\n\r\n // Cancelled\r\n let isCancelled = $derived(\r\n rawEvent?.status?.toLowerCase() === 'cancelled' ||\r\n rawEvent?.status?.toLowerCase() === 'canceled'\r\n );\r\n let showCancelledInfo = $state(false);\r\n\r\n // Password protection\r\n let showPasswordModal = $state(false);\r\n let passwordValue = $state('');\r\n let passwordError = $state('');\r\n let passwordLoading = $state(false);\r\n let isPasswordVerified = $state(false);\r\n\r\n // Waitlist\r\n let showWaitlistModal = $state(false);\r\n let waitlistEnabled = $derived(rawEvent?.waitlistEnabled === true);\r\n\r\n function isEventAuthenticated(evtId) {\r\n if (typeof window === 'undefined') return false;\r\n const authedEvents = JSON.parse(\r\n sessionStorage.getItem('authedEvents') || '[]' // @storage-escape: authedEvents session-auth state (intentional raw sessionStorage)\r\n );\r\n return authedEvents.includes(String(evtId));\r\n }\r\n\r\n function setEventAuthenticated(evtId) {\r\n if (typeof window === 'undefined') return;\r\n const authedEvents = JSON.parse(\r\n sessionStorage.getItem('authedEvents') || '[]' // @storage-escape: authedEvents session-auth state (intentional raw sessionStorage)\r\n );\r\n const evtIdStr = String(evtId);\r\n if (!authedEvents.includes(evtIdStr)) {\r\n authedEvents.push(evtIdStr);\r\n sessionStorage.setItem('authedEvents', JSON.stringify(authedEvents)); // @storage-escape: authedEvents session-auth state (intentional raw sessionStorage)\r\n }\r\n }\r\n\r\n async function handlePasswordSubmit(e) {\r\n const password = e.detail?.value || passwordValue;\r\n if (!password || !id) return;\r\n passwordLoading = true;\r\n passwordError = '';\r\n try {\r\n const result = await checkEventPassword(id, password);\r\n if (result.valid) {\r\n setEventAuthenticated(id);\r\n isPasswordVerified = true;\r\n showPasswordModal = false;\r\n passwordValue = '';\r\n } else {\r\n passwordError =\r\n labels.incorrectPassword || 'Incorrect password. Please try again.';\r\n }\r\n } catch (err) {\r\n passwordError =\r\n labels.unableToVerifyPassword ||\r\n 'Unable to verify password. Please try again.';\r\n } finally {\r\n passwordLoading = false;\r\n }\r\n }\r\n\r\n function handlePasswordCancel() {\r\n showPasswordModal = false;\r\n if (onNavigateBack) onNavigateBack();\r\n }\r\n\r\n let requiresPassword = $derived(\r\n rawEvent?.password && rawEvent.password.trim() !== ''\r\n );\r\n let isLocked = $derived(\r\n requiresPassword && !isPasswordVerified && !isEventAuthenticated(id)\r\n );\r\n\r\n // CTA button state — delegates to shared computeCtaState()\r\n let ctaState = $derived(\r\n event\r\n ? computeCtaState(event, publicAvailableTickets, {\r\n cancelled: isCancelled,\r\n isRegistration: isRegistrationEvent,\r\n waitlistEnabled,\r\n })\r\n : {\r\n text: labels.loading || 'Loading...',\r\n disabled: true,\r\n reason: 'loading',\r\n }\r\n );\r\n\r\n let ctaButtonText = $derived(ctaState.text);\r\n let ctaDisabled = $derived(ctaState.disabled);\r\n\r\n function goBack() {\r\n if (onNavigateBack) onNavigateBack();\r\n }\r\n\r\n function goToCheckout() {\r\n if (onBuyTickets) {\r\n onBuyTickets(id, slug);\r\n }\r\n }\r\n\r\n let venueTimeZone = $derived(event?.timeZone || getDefaultTimezone());\r\n\r\n let showStartTime = $derived(\r\n hasEventSeries || event?.displayStartTime !== false\r\n );\r\n let showEndTime = $derived(event?.displayEndTime === true);\r\n let showDoorsTime = $derived(event?.displayDoorsTime === true);\r\n\r\n // Lowest price\r\n function getLowestPrice(tickets) {\r\n if (!tickets || tickets.length === 0)\r\n return { price: null, hasDonation: false };\r\n const visibleTickets = tickets.filter(t => {\r\n const visibility = t.visibility ?? 0;\r\n const isVisible = visibility === 0;\r\n const isPublic = t.salesChannel !== 2;\r\n return isVisible && isPublic;\r\n });\r\n const hasDonation = visibleTickets.some(t => t.type === 2);\r\n const pricedTickets = visibleTickets.filter(t => {\r\n const hasPrice = t.price !== undefined && t.price !== null;\r\n const isDonation = t.type === 2;\r\n return hasPrice && !isDonation;\r\n });\r\n const prices = pricedTickets.map(t => parseFloat(t.price));\r\n const price = prices.length === 0 ? null : Math.min(...prices);\r\n return { price, hasDonation };\r\n }\r\n\r\n let lowestPriceInfo = $derived(getLowestPrice(availableTickets));\r\n\r\n let priceLabel = $derived.by(() => {\r\n if (ctaDisabled) return '';\r\n if (lowestPriceInfo.hasDonation) return '';\r\n if (lowestPriceInfo.price === 0) return '';\r\n return labels.from || 'From';\r\n });\r\n\r\n let priceDisplay = $derived.by(() => {\r\n if (ctaDisabled) return '';\r\n if (lowestPriceInfo.hasDonation) return 'Any amount';\r\n if (lowestPriceInfo.price === null) {\r\n if (!availableTickets || availableTickets.length === 0) return '';\r\n return '';\r\n }\r\n if (lowestPriceInfo.price === 0) return labels.free || 'Free';\r\n return `${formatCurrency(lowestPriceInfo.price /* FIXME(canonical-cleanup:toFixed): heuristic guess — verify this is USD (not cents); when migrating to TS, add `as USD` brand cast at the API-response-transform layer. */)}`;\r\n });\r\n\r\n function formatCompactDateTime(startDateTime, tz) {\r\n if (!startDateTime) return '';\r\n const date = new Date(startDateTime);\r\n const weekday = formatDateRaw(date, {\r\n weekday: 'short',\r\n timeZone: tz,\r\n }, 'en-US');\r\n const month = formatDateRaw(date, {\r\n month: 'short',\r\n timeZone: tz,\r\n }, 'en-US');\r\n const day = formatDateRaw(date, {\r\n day: 'numeric',\r\n timeZone: tz,\r\n }, 'en-US');\r\n const time = date\r\n .toLocaleTimeString('en-US', {\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n timeZone: tz,\r\n })\r\n .replace(' ', '');\r\n return `${weekday} ${month} ${day} · ${time}`;\r\n }\r\n\r\n let compactDateTime = $derived(\r\n formatCompactDateTime(event?.startDateTime, venueTimeZone)\r\n );\r\n</script>\r\n\r\n<div class=\"event-page\">\r\n {#if dataLoading}\r\n <SkeletonLoader type=\"event\" />\r\n {:else if dataError}\r\n <div class=\"error-container\">\r\n <p class=\"error-text\">{labels.errorPrefix || 'Error:'} {dataError}</p>\r\n {#if onNavigateBack}\r\n <button class=\"go-back-btn\" onclick={goBack}\r\n >{labels.goBack || 'Go back'}</button\r\n >\r\n {/if}\r\n </div>\r\n {:else if event}\r\n {#if showSkeleton}\r\n <SkeletonLoader type=\"event\" />\r\n {/if}\r\n\r\n <div class=\"content-wrapper\" class:content-hidden={showSkeleton}>\r\n {#if isLocked}\r\n <div class=\"locked-overlay\">\r\n <div class=\"locked-content\">\r\n <div class=\"locked-icon-wrapper\">\r\n <Locked size={16} />\r\n </div>\r\n <h2 class=\"locked-title\">\r\n {labels.passwordProtectedTitle ||\r\n 'This event is password protected'}\r\n </h2>\r\n <p class=\"locked-description\">\r\n {labels.passwordProtectedDescription ||\r\n 'Enter the event password to view details and purchase tickets.'}\r\n </p>\r\n <button\r\n class=\"unlock-btn\"\r\n onclick={() => (showPasswordModal = true)}\r\n >\r\n {labels.enterPassword || 'Enter password'}\r\n </button>\r\n </div>\r\n </div>\r\n {/if}\r\n\r\n <!-- Main Content -->\r\n <div class=\"main-content\" class:blur-content={isLocked}>\r\n <!-- Hero Image -->\r\n <div class=\"hero-card\">\r\n <img\r\n bind:this={heroImageRef}\r\n src={getImageUrl(\r\n event.coverImage || event.image || event.ShowImage\r\n )}\r\n alt={event.name || 'Event'}\r\n class=\"hero-image\"\r\n onload={handleImageLoad}\r\n onerror={handleImageError}\r\n />\r\n {#if onNavigateBack}\r\n <button\r\n class=\"back-button\"\r\n onclick={goBack}\r\n aria-label={labels.goBack || 'Go back'}\r\n >\r\n <ArrowLeft size={20} />\r\n </button>\r\n {/if}\r\n </div>\r\n\r\n <!-- Event Header Card -->\r\n <div class=\"event-header\">\r\n <h1 class=\"event-title\">{event.name}</h1>\r\n {#if event.eventSummary}\r\n <p class=\"event-subtitle\">{event.eventSummary}</p>\r\n {/if}\r\n\r\n <EventMeta\r\n {event}\r\n {venue}\r\n {venueTimeZone}\r\n {venueAddressLines}\r\n {googleMapsUrl}\r\n {showStage}\r\n {eventStageName}\r\n {showStartTime}\r\n {showEndTime}\r\n {showDoorsTime}\r\n />\r\n </div>\r\n\r\n <!-- Showtimes Section - Mobile Only -->\r\n {#if hasEventSeries && seriesOccurrences.length > 0}\r\n <div class=\"mobile-showtimes\">\r\n <DateSelectorGrouped\r\n occurrences={seriesOccurrences}\r\n currentEventId={effectiveCurrentEventId}\r\n {venueTimeZone}\r\n variant=\"B\"\r\n onbuyTickets={handleBuyTickets}\r\n />\r\n </div>\r\n {:else if hasEventSeries && seriesDataLoaded && seriesOccurrences.length === 0}\r\n <div class=\"mobile-showtimes\">\r\n <EmptyState\r\n message={labels.noUpcomingEvents || 'No upcoming shows'}\r\n subtext={labels.noUpcomingEventsSubtext ||\r\n 'There are no upcoming dates for this series right now. Check back soon!'}\r\n />\r\n </div>\r\n {/if}\r\n\r\n <!-- About Section -->\r\n {#if event.description}\r\n <section class=\"content-section\">\r\n <h2 class=\"section-header\">{labels.tabAboutTheShow || 'About'}</h2>\r\n <div class=\"description\">\r\n {event.description}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- Featuring Section -->\r\n {#if hasPerformers}\r\n <section class=\"content-section\">\r\n <h2 class=\"section-header\">{labels.tabFeaturing || 'Featuring'}</h2>\r\n <div class=\"performers-grid\">\r\n {#each confirmedPerformers as performer}\r\n {@const profile =\r\n performer.RosterPerformer?.User?.performerProfile}\r\n {@const displayName = getPerformerDisplayName(profile)}\r\n {@const avatarUrl = getDisplayAvatarUrl(profile)}\r\n\r\n <div class=\"performer-card\">\r\n <img\r\n src={avatarUrl || defaultAvatar}\r\n alt={displayName}\r\n class=\"performer-avatar\"\r\n />\r\n <span class=\"performer-name\">{displayName}</span>\r\n </div>\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- FAQs Section -->\r\n {#if venueFAQs.length > 0}\r\n <section class=\"content-section\">\r\n <h2 class=\"section-header\">{labels.tabFAQs || 'FAQs'}</h2>\r\n <div class=\"faq-list\">\r\n {#each venueFAQs as faq}\r\n <div class=\"faq-item\">\r\n {#if faq.question}\r\n <h3 class=\"faq-question-text\">{faq.question}</h3>\r\n {/if}\r\n <p class=\"faq-answer-text\">{faq.answer}</p>\r\n </div>\r\n {/each}\r\n </div>\r\n </section>\r\n {/if}\r\n\r\n <!-- Disclaimer Section -->\r\n {#if parsedVenueDisclaimer.length > 0}\r\n <section class=\"content-section\">\r\n <h2 class=\"section-header\">{labels.disclaimer || 'Disclaimer'}</h2>\r\n <p class=\"disclaimer-text\">{parsedVenueDisclaimer.join(' ')}</p>\r\n </section>\r\n {/if}\r\n\r\n <PoweredByMicdrop />\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <aside class=\"sidebar\" class:blur-content={isLocked}>\r\n <div class=\"event-header sidebar-event-header\">\r\n <h1 class=\"event-title\">{event.name}</h1>\r\n {#if event.eventSummary}\r\n <p class=\"event-subtitle\">{event.eventSummary}</p>\r\n {/if}\r\n\r\n <EventMeta\r\n {event}\r\n {venue}\r\n {venueTimeZone}\r\n {venueAddressLines}\r\n {googleMapsUrl}\r\n {showStage}\r\n {eventStageName}\r\n {showStartTime}\r\n {showEndTime}\r\n {showDoorsTime}\r\n variant=\"sidebar\"\r\n />\r\n </div>\r\n\r\n <div class=\"price-card\">\r\n {#if totalTicketsCapacity > 0 && !ctaDisabled}\r\n <div class=\"scarcity-badge-wrapper\">\r\n <ScarcityBadge\r\n remaining={totalTicketsRemaining}\r\n total={totalTicketsCapacity}\r\n context=\"event\"\r\n />\r\n </div>\r\n {/if}\r\n\r\n {#if hasAvailableTickets && ctaState.reason !== 'sales_ended' && ctaState.reason !== 'event_past' && ctaState.reason !== 'sold_out'}\r\n <div class=\"price-label\">{priceLabel}</div>\r\n <div class=\"price-amount\">{priceDisplay}</div>\r\n {/if}\r\n\r\n <button\r\n class=\"cta-button\"\r\n class:cta-disabled={ctaDisabled}\r\n class:cta-waitlist={ctaState.reason === 'sold_out_waitlist'}\r\n onclick={ctaState.reason === 'sold_out_waitlist'\r\n ? () => (showWaitlistModal = true)\r\n : ctaDisabled\r\n ? null\r\n : goToCheckout}\r\n disabled={ctaDisabled}\r\n >\r\n <span translate=\"no\">{ctaButtonText}</span>\r\n </button>\r\n {#if ctaState.reason === 'sold_out_waitlist'}\r\n <div class=\"waitlist-info\">\r\n {labels.getNotifiedWhenAvailable ||\r\n 'Get notified when tickets are available'}\r\n </div>\r\n {/if}\r\n\r\n <!-- Cancelled event info accordion -->\r\n {#if isCancelled}\r\n <div class=\"cancelled-info-section\">\r\n <button\r\n class=\"cancelled-learn-more\"\r\n onclick={() => (showCancelledInfo = !showCancelledInfo)}\r\n aria-expanded={showCancelledInfo}\r\n >\r\n <span>{labels.learnMore || 'Learn more'}</span>\r\n <span class=\"chevron\" class:expanded={showCancelledInfo}>\r\n <ChevronDown size={16} />\r\n </span>\r\n </button>\r\n {#if showCancelledInfo}\r\n <div class=\"cancelled-info-content\">\r\n <p>\r\n {labels.cancelledRefundAuto ||\r\n \"If your event is cancelled, we'll automatically refund the credit card used for purchase* (usually within 30 business days of the cancellation announcement).\"}\r\n </p>\r\n <p>\r\n {labels.cancelledRefundBoxOffice ||\r\n \"Bought your tickets at the venue's box office? Please take the tickets directly to the box office for a refund.\"}\r\n </p>\r\n <p class=\"cancelled-footnote\">\r\n {labels.cancelledRefundFootnote ||\r\n '*Please note that we cannot submit the refund to an alternate card. If your credit card number has changed since you made the purchase this should not impact your ability to receive the refund.'}\r\n </p>\r\n </div>\r\n {/if}\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n <!-- Showtimes (Variant B) -->\r\n {#if hasEventSeries && seriesOccurrences.length > 0}\r\n <DateSelectorGrouped\r\n occurrences={seriesOccurrences}\r\n currentEventId={effectiveCurrentEventId}\r\n {venueTimeZone}\r\n variant=\"B\"\r\n onbuyTickets={handleBuyTickets}\r\n />\r\n {:else if hasEventSeries && seriesDataLoaded && seriesOccurrences.length === 0}\r\n <EmptyState\r\n message={labels.noUpcomingEvents || 'No upcoming shows'}\r\n subtext={labels.noUpcomingEventsSubtext ||\r\n 'There are no upcoming dates for this series right now. Check back soon!'}\r\n />\r\n {/if}\r\n </aside>\r\n </div>\r\n\r\n <!-- Mobile Sticky CTA -->\r\n <div\r\n class=\"mobile-cta-bar\"\r\n class:mobile-cta-disabled={ctaDisabled}\r\n class:mobile-cta-cancelled={isCancelled}\r\n class:mobile-cta-hidden={isLocked}\r\n class:mobile-cta-waitlist={ctaState.reason === 'sold_out_waitlist'}\r\n >\r\n {#if !ctaDisabled}\r\n <div class=\"mobile-cta-content\">\r\n <div class=\"mobile-cta-left\">\r\n {#if ctaState.reason === 'sold_out_waitlist'}\r\n <span class=\"mobile-waitlist-label\"\r\n >{labels.soldOut || 'Sold out'}</span\r\n >\r\n <span class=\"mobile-date-label\"\r\n >{labels.getNotifiedWhenAvailable ||\r\n 'Get notified when available'}</span\r\n >\r\n {:else}\r\n <div class=\"mobile-price-line\">\r\n <span class=\"mobile-price-label\">{priceLabel}</span>\r\n <span class=\"mobile-price-amount\">{priceDisplay}</span>\r\n </div>\r\n <span class=\"mobile-date-label\">{compactDateTime}</span>\r\n {/if}\r\n </div>\r\n <button\r\n class=\"mobile-cta-button\"\r\n class:mobile-cta-waitlist-button={ctaState.reason ===\r\n 'sold_out_waitlist'}\r\n onclick={ctaState.reason === 'sold_out_waitlist'\r\n ? () => (showWaitlistModal = true)\r\n : goToCheckout}\r\n >\r\n <span translate=\"no\">{ctaButtonText}</span>\r\n </button>\r\n </div>\r\n {:else if isCancelled}\r\n <div class=\"mobile-cancelled-section\">\r\n <button class=\"mobile-cta-button mobile-cta-button-disabled\" disabled>\r\n {ctaButtonText}\r\n </button>\r\n <button\r\n class=\"mobile-cancelled-learn-more\"\r\n onclick={() => (showCancelledInfo = !showCancelledInfo)}\r\n aria-expanded={showCancelledInfo}\r\n >\r\n <span>{labels.learnMore || 'Learn more'}</span>\r\n <span class=\"chevron\" class:expanded={showCancelledInfo}>\r\n <ChevronDown size={16} />\r\n </span>\r\n </button>\r\n </div>\r\n {#if showCancelledInfo}\r\n <div class=\"mobile-cancelled-info-content\">\r\n <p>\r\n {labels.cancelledRefundAuto ||\r\n \"If your event is cancelled, we'll automatically refund the credit card used for purchase* (usually within 30 business days of the cancellation announcement).\"}\r\n </p>\r\n <p>\r\n {labels.cancelledRefundBoxOffice ||\r\n \"Bought your tickets at the venue's box office? Please take the tickets directly to the box office for a refund.\"}\r\n </p>\r\n <p class=\"cancelled-footnote\">\r\n {labels.cancelledRefundFootnote ||\r\n '*Please note that we cannot submit the refund to an alternate card. If your credit card number has changed since you made the purchase this should not impact your ability to receive the refund.'}\r\n </p>\r\n </div>\r\n {/if}\r\n {:else}\r\n <button class=\"mobile-cta-button mobile-cta-button-disabled\" disabled>\r\n <span translate=\"no\">{ctaButtonText}</span>\r\n </button>\r\n {/if}\r\n </div>\r\n {/if}\r\n</div>\r\n\r\n<!-- Password Protection Modal -->\r\n<InputModal\r\n bind:open={showPasswordModal}\r\n size=\"md\"\r\n title={labels.enterEventPassword || 'Enter event password'}\r\n description={labels.passwordModalDescription ||\r\n 'This event requires a password to view. Please enter the password provided by the event organizer.'}\r\n inputLabel={labels.passwordLabel || 'Password'}\r\n inputType=\"password\"\r\n bind:inputValue={passwordValue}\r\n inputRequired={true}\r\n errorMessage={passwordError}\r\n showError={!!passwordError}\r\n primaryButtonText={labels.unlockEvent || 'Unlock event'}\r\n secondaryButtonText={labels.goBack || 'Go back'}\r\n loading={passwordLoading}\r\n onconfirm={handlePasswordSubmit}\r\n oncancel={handlePasswordCancel}\r\n onclose={handlePasswordCancel}\r\n/>\r\n\r\n<!-- Waitlist Modal -->\r\n<WaitlistModal\r\n bind:show={showWaitlistModal}\r\n eventId={parseInt(String(id))}\r\n eventName={event?.name || 'this event'}\r\n onClose={() => (showWaitlistModal = false)}\r\n/>\r\n\r\n<style>\r\n .event-page {\r\n min-height: 100vh;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n touch-action: pan-x pan-y;\r\n -webkit-touch-callout: none;\r\n }\r\n\r\n .content-hidden {\r\n position: absolute;\r\n left: -9999px;\r\n opacity: 0;\r\n pointer-events: none;\r\n }\r\n\r\n .error-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding-top: 3rem;\r\n padding-bottom: 3rem;\r\n text-align: center;\r\n gap: 1rem;\r\n }\r\n\r\n .error-text {\r\n color: hsl(var(--status-sold-out, 0 72% 51%));\r\n }\r\n\r\n .go-back-btn {\r\n padding: 0.5rem 1rem;\r\n border-radius: 0.5rem;\r\n color: hsl(var(--bg-primary));\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n /* Hero Image */\r\n .hero-card {\r\n position: relative;\r\n border-radius: 0.5rem;\r\n overflow: hidden;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .hero-image {\r\n width: 100%;\r\n object-fit: contain;\r\n max-height: 37.5rem;\r\n }\r\n\r\n .back-button {\r\n position: absolute;\r\n top: 0.75rem;\r\n left: 0.75rem;\r\n width: 2.5rem;\r\n height: 2.5rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: rgb(0 0 0 / 60%);\r\n backdrop-filter: blur(4px);\r\n border: none;\r\n border-radius: 9999px;\r\n color: hsl(var(--bg-primary));\r\n cursor: pointer;\r\n z-index: var(--z-sticky);\r\n transition: background 0.15s ease;\r\n }\r\n\r\n .back-button:hover {\r\n background-color: rgb(0 0 0 / 75%);\r\n }\r\n\r\n /* Content Layout */\r\n .content-wrapper {\r\n max-width: 80rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n padding: 1.5rem;\r\n display: grid;\r\n gap: 2rem;\r\n align-items: start;\r\n grid-template-columns: 1fr 360px;\r\n position: relative;\r\n }\r\n\r\n .main-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1.5rem;\r\n }\r\n\r\n /* Event Header Card */\r\n .event-header {\r\n padding: 1.5rem;\r\n border-radius: 0.5rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .event-title {\r\n font-size: 1.875rem;\r\n line-height: 1.2;\r\n font-weight: 700;\r\n margin-bottom: 0.5rem;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .event-subtitle {\r\n font-size: 1rem;\r\n line-height: 1.5rem;\r\n margin-bottom: 1.25rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n /* Content Sections */\r\n .content-section {\r\n border-radius: 0.5rem;\r\n padding: 1.5rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .section-header {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 600;\r\n margin-bottom: 1rem;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .description {\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n line-height: 1.7;\r\n white-space: pre-line;\r\n }\r\n\r\n .disclaimer-text {\r\n margin: 0;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n line-height: 1.7;\r\n white-space: pre-line;\r\n }\r\n\r\n /* Performers Grid */\r\n .performers-grid {\r\n display: grid;\r\n grid-template-columns: repeat(3, 1fr);\r\n gap: 12px;\r\n }\r\n\r\n @media (width >= 640px) {\r\n .performers-grid {\r\n grid-template-columns: repeat(4, 1fr);\r\n }\r\n }\r\n\r\n @media (width >= 768px) {\r\n .performers-grid {\r\n grid-template-columns: repeat(5, 1fr);\r\n }\r\n }\r\n\r\n .performer-card {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.75rem;\r\n border-radius: 0.5rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .performer-avatar {\r\n width: 100%;\r\n aspect-ratio: 1 / 1;\r\n max-width: 6rem;\r\n border-radius: 0.5rem;\r\n object-fit: cover;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n }\r\n\r\n .performer-name {\r\n font-size: 0.875rem;\r\n line-height: 1.3;\r\n font-weight: 500;\r\n text-align: center;\r\n overflow-wrap: break-word;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n /* FAQs */\r\n .faq-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1rem;\r\n }\r\n\r\n .faq-question-text {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 500;\r\n margin-bottom: 0.25rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n .faq-answer-text {\r\n margin: 0;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n line-height: 1.7;\r\n }\r\n\r\n /* Mobile Showtimes */\r\n .mobile-showtimes {\r\n display: none;\r\n }\r\n\r\n /* Sidebar */\r\n .sidebar {\r\n position: sticky;\r\n top: 1.5rem;\r\n height: fit-content;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1rem;\r\n }\r\n\r\n .sidebar-event-header {\r\n display: block;\r\n }\r\n\r\n .main-content > .event-header {\r\n display: none;\r\n }\r\n\r\n .price-card {\r\n border-radius: 0.5rem;\r\n padding: 1.5rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .scarcity-badge-wrapper {\r\n margin-bottom: 1rem;\r\n }\r\n\r\n .price-label {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n margin-bottom: 0.25rem;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .price-amount {\r\n font-size: 1.5rem;\r\n line-height: 2rem;\r\n font-weight: 700;\r\n margin-bottom: 0.75rem;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .cta-button {\r\n width: 100%;\r\n padding: 1rem 1.5rem;\r\n color: hsl(var(--bg-primary));\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n cursor: pointer;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border: none;\r\n transition: opacity 0.15s ease;\r\n }\r\n\r\n .cta-button:hover:not(:disabled) {\r\n opacity: 0.9;\r\n }\r\n\r\n .cta-button.cta-disabled,\r\n .cta-button:disabled {\r\n cursor: not-allowed;\r\n background-color: hsl(var(--bg-secondary, 220 14% 96%));\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .cta-button.cta-waitlist {\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .waitlist-info {\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n text-align: center;\r\n margin-top: 0.5rem;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .mobile-waitlist-label {\r\n font-size: 1rem;\r\n line-height: 1.5rem;\r\n font-weight: 600;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .mobile-cta-waitlist-button {\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n /* Mobile Sticky CTA */\r\n .mobile-cta-bar {\r\n display: none;\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n padding: 16px;\r\n padding-bottom: max(16px, calc(env(safe-area-inset-bottom) + 8px));\r\n z-index: var(--z-critical);\r\n box-shadow: 0 -4px 20px color-mix(in srgb, black 10%, transparent);\r\n touch-action: manipulation;\r\n -webkit-tap-highlight-color: transparent;\r\n user-select: none;\r\n user-select: none;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%));\r\n border-top: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .mobile-cta-content {\r\n display: flex;\r\n align-items: stretch;\r\n gap: 0.75rem;\r\n }\r\n\r\n .mobile-cta-left {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n flex-shrink: 0;\r\n white-space: nowrap;\r\n }\r\n\r\n .mobile-date-label {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 400;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .mobile-price-line {\r\n display: flex;\r\n align-items: baseline;\r\n gap: 0.375rem;\r\n }\r\n\r\n .mobile-price-label {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 400;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .mobile-price-amount {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 700;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .mobile-cta-button {\r\n flex: 1 1 0%;\r\n min-width: 9rem;\r\n height: 3rem;\r\n color: hsl(var(--bg-primary));\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n cursor: pointer;\r\n border: 0;\r\n user-select: none;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n touch-action: manipulation;\r\n -webkit-tap-highlight-color: transparent;\r\n }\r\n\r\n .mobile-cta-button:hover:not(:disabled) {\r\n opacity: 0.9;\r\n }\r\n\r\n .mobile-cta-button.mobile-cta-button-disabled,\r\n .mobile-cta-button:disabled {\r\n cursor: not-allowed;\r\n width: 100%;\r\n height: 3rem;\r\n background-color: hsl(var(--bg-secondary, 220 14% 96%));\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n flex: none;\r\n }\r\n\r\n /* Responsive */\r\n @media (width <= 871px) {\r\n .event-page {\r\n padding-bottom: 80px;\r\n }\r\n\r\n .content-wrapper {\r\n grid-template-columns: 1fr;\r\n padding: 16px;\r\n }\r\n\r\n .sidebar {\r\n position: static;\r\n display: none;\r\n }\r\n\r\n .main-content > .event-header {\r\n display: block;\r\n }\r\n\r\n .sidebar-event-header {\r\n display: none;\r\n }\r\n\r\n .mobile-showtimes {\r\n display: block;\r\n }\r\n\r\n .mobile-cta-bar {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: stretch;\r\n gap: 12px;\r\n }\r\n\r\n .event-title {\r\n font-size: 24px;\r\n }\r\n }\r\n\r\n @media (width <= 480px) {\r\n .content-wrapper {\r\n padding: 12px;\r\n }\r\n\r\n .event-header,\r\n .content-section,\r\n .hero-card {\r\n border-radius: 8px;\r\n }\r\n\r\n .event-title {\r\n font-size: 20px;\r\n }\r\n\r\n .mobile-cta-bar {\r\n padding: 10px 12px;\r\n }\r\n\r\n .mobile-cta-button {\r\n height: 48px;\r\n font-size: 15px;\r\n }\r\n }\r\n\r\n /* Cancelled Event Styles */\r\n .cancelled-info-section {\r\n margin-top: 1rem;\r\n padding-top: 1rem;\r\n border-top: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n }\r\n\r\n .cancelled-learn-more {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n width: 100%;\r\n padding: 0;\r\n background: transparent;\r\n border: none;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 500;\r\n cursor: pointer;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .cancelled-learn-more:hover {\r\n color: hsl(var(--brand-primary, 224 76% 48%));\r\n }\r\n\r\n .cancelled-learn-more .chevron {\r\n display: flex;\r\n transition: transform 0.2s;\r\n }\r\n\r\n .cancelled-learn-more .chevron.expanded {\r\n transform: rotate(180deg);\r\n }\r\n\r\n .cancelled-info-content {\r\n margin-top: 0.75rem;\r\n padding: 0.75rem;\r\n border-radius: 0.5rem;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n }\r\n\r\n .cancelled-info-content p {\r\n font-size: 0.875rem;\r\n line-height: 1.5;\r\n margin-bottom: 0.75rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n .cancelled-info-content p:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n .cancelled-footnote {\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n font-style: italic;\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n /* Mobile cancelled styles */\r\n .mobile-cta-cancelled {\r\n flex-direction: column;\r\n }\r\n\r\n .mobile-cancelled-section {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.75rem;\r\n width: 100%;\r\n }\r\n\r\n .mobile-cancelled-section .mobile-cta-button {\r\n flex: 1;\r\n }\r\n\r\n .mobile-cancelled-learn-more {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n padding: 0.75rem 1rem;\r\n background: transparent;\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 500;\r\n cursor: pointer;\r\n white-space: nowrap;\r\n border: 1px solid hsl(var(--stroke-primary, 220 13% 91%));\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .mobile-cancelled-learn-more:hover {\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n }\r\n\r\n .mobile-cancelled-learn-more .chevron {\r\n display: flex;\r\n transition: transform 0.2s;\r\n }\r\n\r\n .mobile-cancelled-learn-more .chevron.expanded {\r\n transform: rotate(180deg);\r\n }\r\n\r\n .mobile-cancelled-info-content {\r\n padding: 0.75rem;\r\n border-radius: 0.5rem;\r\n margin-top: 0.5rem;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n }\r\n\r\n .mobile-cancelled-info-content p {\r\n font-size: 0.875rem;\r\n line-height: 1.5;\r\n margin-bottom: 0.75rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n .mobile-cancelled-info-content p:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n /* Password protection styles */\r\n .blur-content {\r\n filter: blur(8px);\r\n pointer-events: none;\r\n user-select: none;\r\n }\r\n\r\n .locked-overlay {\r\n position: absolute;\r\n inset: 0;\r\n z-index: var(--z-navigation);\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 0.5rem;\r\n min-height: 24rem;\r\n background-color: hsl(var(--bg-primary, 0 0% 100%) / 95%);\r\n }\r\n\r\n .locked-content {\r\n text-align: center;\r\n padding: 2rem;\r\n }\r\n\r\n .locked-icon-wrapper {\r\n width: 5rem;\r\n height: 5rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-bottom: 1rem;\r\n border-radius: 9999px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: hsl(var(--bg-secondary, 210 20% 98%));\r\n color: hsl(var(--text-tertiary, 220 9% 46%));\r\n }\r\n\r\n .locked-title {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 600;\r\n margin-bottom: 0.5rem;\r\n color: hsl(var(--text-primary, 222 47% 11%));\r\n }\r\n\r\n .locked-description {\r\n font-size: 0.875rem;\r\n line-height: 1.625;\r\n max-width: 20rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-bottom: 1.5rem;\r\n color: hsl(var(--text-secondary, 215 16% 47%));\r\n }\r\n\r\n .unlock-btn {\r\n padding: 0.75rem 1.5rem;\r\n color: hsl(var(--bg-primary));\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n cursor: pointer;\r\n background-color: hsl(var(--brand-primary, 224 76% 48%));\r\n border: none;\r\n transition: background-color 0.2s ease;\r\n }\r\n\r\n .unlock-btn:hover {\r\n opacity: 0.9;\r\n }\r\n\r\n .mobile-cta-hidden {\r\n display: none !important;\r\n }\r\n</style>\r\n"],"names":["getDisplayAvatarPath","profile","getDisplayAvatarUrl","baseUrl","CDN_BASE_URL","path","getImageUrl","getPerformerDisplayName","firstName","lastName","formatFullName","defaultAvatar","occurrences","$","$$props","currentEventId","venueTimeZone","getDefaultTimezone","variant","labels","futureOccurrences","occ","groupedByDate","groups","dateKey","formatFullDate","hasShowtimes","formatTime","dateStr","formatEventTime","selectShowtime","occurrence","isButtonDisabled","getSublabel","ctaState","dateTime","isComingSoon","isSoldOut","getTimeButtonAriaLabel","time","sublabel","isCurrent","label","section","root_1","h2","div","$$anchor","$$item","groupIndex","$$array","showtimes","div_1","root_2","h3","fragment_1","div_2","showtime","btnDisabled","button","root_4","span","classes_1","$0","div_3","root_5","h3_1","div_4","comingSoon","soldOut","div_5","root_6","button_1","span_1","span_2","root_7","span_3","span_4","root_8","text_6","$$render","consequent_1","text_5","consequent_2","classes_2","div_6","root_9","h3_2","div_7","button_2","root_10","span_5","classes_3","consequent","consequent_3","consequent_4","classes","consequent_5","venue","venueAddressLines","googleMapsUrl","showStage","eventStageName","showStartTime","showEndTime","showDoorsTime","dateDisplay","formatFullDateCompact","root","Calendar","node","Time","node_2","formatTimeRange","root_3","formatDoorsTime","node_1","Location","a","node_7","line","text_3","node_8","span_6","alternate","Theater","span_7","node_10","User","span_8","node_12","logger","createLogger","rawEventProp","eventIdProp","slugProp","currentEventIdProp","onNavigateBack","onBuyTickets","rawEvent","dataLoading","dataError","imageRendered","seriesDataLoaded","showSkeleton","heroImageRef","pageReady","handleImageLoad","handleImageError","event","transformEvent","id","slug","filterPublishedShowtimes","rawShowtimes","seriesOccurrences","eventSeriesId","hasEventSeries","effectiveCurrentEventId","onMount","fetched","fetchEventDetails","err","seriesId","vId","fetchSeriesOccurrences","getVenueDetails","venueData","venueStages","evtId","isEventAuthenticated","isPasswordVerified","showPasswordModal","handleBuyTickets","eventId","occSlug","toFaqArray","src","item","venueFAQs","venueDisclaimer","parseAddress","addressStr","parts","p","stateZipMatch","state","zip","city","lines","address","parsedVenueDisclaimer","s","confirmedPerformers","performer","isConfirmed","isNotHidden","hasName","b","hasPerformers","ticketType","isRegistrationEvent","availableTickets","publicAvailableTickets","ticket","hasAvailableTickets","totalTicketsRemaining","sum","t","remaining","totalTicketsCapacity","capacity","isCancelled","showCancelledInfo","passwordValue","passwordError","passwordLoading","showWaitlistModal","waitlistEnabled","setEventAuthenticated","authedEvents","evtIdStr","handlePasswordSubmit","e","password","checkEventPassword","handlePasswordCancel","requiresPassword","isLocked","computeCtaState","ctaButtonText","ctaDisabled","goBack","goToCheckout","getLowestPrice","tickets","visibleTickets","isVisible","isPublic","hasDonation","prices","hasPrice","isDonation","lowestPriceInfo","priceLabel","priceDisplay","formatCurrency","formatCompactDateTime","startDateTime","tz","date","weekday","formatDateRaw","month","day","compactDateTime","fragment","SkeletonLoader","p_1","text","Locked","p_2","node_3","img","$$value","ArrowLeft","div_8","h1","p_3","consequent_6","EventMeta","div_9","DateSelectorGrouped","div_10","EmptyState","node_11","consequent_7","consequent_8","root_11","h2_1","div_11","text_8","consequent_9","section_1","root_12","h2_2","div_12","displayName","avatarUrl","div_13","root_13","img_1","consequent_10","section_2","root_14","h2_3","div_14","faq","div_15","root_15","root_16","text_12","consequent_11","p_4","node_15","text_13","consequent_12","section_3","root_17","h2_4","p_5","consequent_13","PoweredByMicdrop","node_17","aside","div_16","h1_1","p_6","root_18","text_17","consequent_14","node_19","div_17","div_18","root_19","ScarcityBadge","node_21","consequent_15","div_19","fragment_4","div_20","consequent_16","button_3","node_22","div_21","root_21","consequent_17","div_22","root_22","button_4","ChevronDown","div_23","root_23","p_7","p_8","p_9","consequent_18","classes_4","consequent_19","consequent_20","consequent_21","div_24","div_25","root_26","div_26","fragment_7","div_27","fragment_8","consequent_22","button_5","span_9","classes_6","$$args","div_28","fragment_9","button_6","button_7","span_10","span_11","div_29","root_30","p_10","p_11","p_12","consequent_24","classes_7","button_8","root_31","span_12","consequent_25","alternate_1","text_16","classes_5","consequent_26","InputModal","node_32","WaitlistModal","node_33"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "svelte/internal/disclose-version";
|
|
2
2
|
import * as e from "svelte/internal/client";
|
|
3
|
-
import { aX as H, aT as M, ah as q, a0 as Z } from "./VenueCalendar-
|
|
3
|
+
import { aX as H, aT as M, ah as q, a0 as Z } from "./VenueCalendar-B5CwsNGf.js";
|
|
4
4
|
var O = e.from_html('<div class="hero-image-container relative w-full bg-muted overflow-hidden svelte-ndk2q7"><img alt="" class="hero-image svelte-ndk2q7" aria-hidden="true"/></div>'), R = e.from_html('<div class="hero-image-container relative w-full bg-muted overflow-hidden flex items-center justify-center svelte-ndk2q7"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="w-16 h-16 text-muted-foreground"><rect x="2" y="2" width="20" height="20" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><path d="m21 15-5-5L5 21"></path></svg></div>'), S = e.from_html('<span class="w-1.5 h-1.5 rounded-full bg-brand-primary"></span> Series', 1), V = e.from_html('<span class="w-1.5 h-1.5 rounded-full bg-brand-primary"></span> Collection', 1), X = e.from_html('<span class="text-muted-foreground">·</span> ', 1), z = e.from_html('<p class="text-base text-text-secondary font-medium"> <!></p>'), J = e.from_html('<div class="featured-hero rounded-lg border border-border bg-card overflow-hidden"><!> <div class="p-4 sm:p-5"><div class="inline-flex items-center gap-1.5 text-xs font-semibold text-brand-primary uppercase tracking-wide mb-2"><!> <!></div> <h2 class="hero-title text-xl sm:text-2xl font-bold text-text-primary mb-2 svelte-ndk2q7"> </h2> <!></div></div>'), K = e.from_html('<span class="text-muted-foreground mx-1">·</span> ', 1), Q = e.from_html('<p class="hero-description text-sm text-text-secondary mt-2 svelte-ndk2q7"> </p>'), U = e.from_html('<div class="featured-hero featured-hero-clickable rounded-lg border border-border bg-card overflow-hidden cursor-pointer hover:border-stroke-primary focus-visible:outline-2 focus-visible:outline-brand-primary:outline-brand-primary focus-visible:outline-offset-2 svelte-ndk2q7" tabindex="0" role="button"><div class="hero-image-container relative w-full bg-muted overflow-hidden svelte-ndk2q7"><img alt="" class="hero-image svelte-ndk2q7" aria-hidden="true"/></div> <div class="p-4 sm:p-5" aria-hidden="true"><h2 class="hero-title text-xl sm:text-2xl font-bold text-text-primary mb-2 svelte-ndk2q7"> </h2> <p class="text-base text-text-secondary font-medium"> <!></p> <!></div></div>'), W = e.from_html('<div class="flex items-center justify-center py-12 rounded-lg border border-border bg-bg-secondary"><p class="text-sm text-muted-foreground">No upcoming events to feature</p></div>'), Y = e.from_html('<section class="w-full" aria-label="Featured event"><!></section>');
|
|
5
5
|
function te(F, u) {
|
|
6
6
|
e.push(u, !0);
|
|
@@ -125,4 +125,4 @@ e.delegate(["click", "keydown"]);
|
|
|
125
125
|
export {
|
|
126
126
|
te as default
|
|
127
127
|
};
|
|
128
|
-
//# sourceMappingURL=FeaturedView.legacy-
|
|
128
|
+
//# sourceMappingURL=FeaturedView.legacy-BsGMp211.js.map
|