@getmicdrop/venue-calendar 4.0.82 → 4.0.83
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/CartView-DBrUqLSR.js +2365 -0
- package/dist/CartView-DBrUqLSR.js.map +1 -0
- package/dist/{Checkout-B15JygVy.js → Checkout-BAtOdBIM.js} +466 -470
- package/dist/Checkout-BAtOdBIM.js.map +1 -0
- package/dist/Checkout-BEcmGOZm.js +789 -0
- package/dist/Checkout-BEcmGOZm.js.map +1 -0
- package/dist/{CheckoutTimer-qLOtPDt3.js → CheckoutTimer-CayvrAa9.js} +13 -13
- package/dist/{CheckoutTimer-qLOtPDt3.js.map → CheckoutTimer-CayvrAa9.js.map} +1 -1
- package/dist/CollectionView-kk90OMFq.js +299 -0
- package/dist/CollectionView-kk90OMFq.js.map +1 -0
- package/dist/{Event-DZpU-Ec1.js → Event-N959l6uT.js} +1875 -1249
- package/dist/Event-N959l6uT.js.map +1 -0
- package/dist/EventPage-DaEMiLjY.js +529 -0
- package/dist/EventPage-DaEMiLjY.js.map +1 -0
- package/dist/{Heading-5CT9Nk0b.js → Heading-A_nixT3L.js} +2 -2
- package/dist/{Heading-5CT9Nk0b.js.map → Heading-A_nixT3L.js.map} +1 -1
- package/dist/{ModalHeader-CGaXzdcs.js → ModalHeader-CxMVzApa.js} +2 -2
- package/dist/{ModalHeader-CGaXzdcs.js.map → ModalHeader-CxMVzApa.js.map} +1 -1
- package/dist/ScarcityBadge-CiF-JsPl.js +90 -0
- package/dist/ScarcityBadge-CiF-JsPl.js.map +1 -0
- package/dist/SeriesPage-CQJHrpTH.js +33 -0
- package/dist/SeriesPage-CQJHrpTH.js.map +1 -0
- package/dist/Success-R-1NhLjx.js +729 -0
- package/dist/{Success-B4CM_cy1.js.map → Success-R-1NhLjx.js.map} +1 -1
- package/dist/{Text-WY42WIKI.js → Text-F6D2QvI6.js} +16 -16
- package/dist/{Text-WY42WIKI.js.map → Text-F6D2QvI6.js.map} +1 -1
- package/dist/{VenueCalendar-DMSeDRSN.js → VenueCalendar-DdRkxjxd.js} +3821 -4111
- package/dist/VenueCalendar-DdRkxjxd.js.map +1 -0
- package/dist/{ViewTicketsEmbed-AlVzNvxE.js → ViewTicketsEmbed-BwvS8VgE.js} +31 -31
- package/dist/{ViewTicketsEmbed-AlVzNvxE.js.map → ViewTicketsEmbed-BwvS8VgE.js.map} +1 -1
- package/dist/api/api.cjs.map +1 -1
- package/dist/api/api.mjs +3 -6
- package/dist/api/api.mjs.map +1 -1
- package/dist/{data-toggle-store.svelte-CtW4s3Vw.js → data-toggle-store.svelte-D9XyVwDW.js} +2 -2
- package/dist/{data-toggle-store.svelte-CtW4s3Vw.js.map → data-toggle-store.svelte-D9XyVwDW.js.map} +1 -1
- package/dist/{labels-BB1JG19g.js → labels-DG5wh_vD.js} +29 -30
- package/dist/{labels-BB1JG19g.js.map → labels-DG5wh_vD.js.map} +1 -1
- package/dist/seo/seo.cjs +1 -1
- package/dist/seo/seo.cjs.map +1 -1
- package/dist/seo/seo.mjs +79 -58
- package/dist/seo/seo.mjs.map +1 -1
- package/dist/{transform-BlXf-shc.js → transform-C5S2acqv.js} +2 -4
- package/dist/{transform-BlXf-shc.js.map → transform-C5S2acqv.js.map} +1 -1
- package/dist/venue-calendar.css +1 -1
- package/dist/venue-calendar.es.js +18 -18
- package/dist/venue-calendar.iife.js +31 -41
- package/dist/venue-calendar.iife.js.map +1 -1
- package/dist/venue-calendar.umd.js +24 -34
- package/dist/venue-calendar.umd.js.map +1 -1
- package/package.json +171 -170
- package/dist/CarouselView.legacy-DAixPl6l.js +0 -65
- package/dist/CarouselView.legacy-DAixPl6l.js.map +0 -1
- package/dist/CartView-CsdqWB24.js +0 -1744
- package/dist/CartView-CsdqWB24.js.map +0 -1
- package/dist/Checkout-B15JygVy.js.map +0 -1
- package/dist/Checkout-CUwOrErt.js +0 -831
- package/dist/Checkout-CUwOrErt.js.map +0 -1
- package/dist/Checkout.legacy-CrFgAYYe.js +0 -1156
- package/dist/Checkout.legacy-CrFgAYYe.js.map +0 -1
- package/dist/CollectionView-D2bRelLR.js +0 -338
- package/dist/CollectionView-D2bRelLR.js.map +0 -1
- package/dist/CollectionView.legacy-DLb5fzi-.js +0 -241
- package/dist/CollectionView.legacy-DLb5fzi-.js.map +0 -1
- package/dist/Event-DZpU-Ec1.js.map +0 -1
- package/dist/EventPage-CL0yuKWZ.js +0 -577
- package/dist/EventPage-CL0yuKWZ.js.map +0 -1
- package/dist/EventPage.legacy-EujdNc3A.js +0 -1324
- package/dist/EventPage.legacy-EujdNc3A.js.map +0 -1
- package/dist/FeaturedView.legacy-CbLBD-tn.js +0 -128
- package/dist/FeaturedView.legacy-CbLBD-tn.js.map +0 -1
- package/dist/GalleryCard-BcIcYghD.js +0 -93
- package/dist/GalleryCard-BcIcYghD.js.map +0 -1
- package/dist/GalleryView.legacy-XpQUg-5_.js +0 -52
- package/dist/GalleryView.legacy-XpQUg-5_.js.map +0 -1
- package/dist/GroupedListView.legacy-qvwIV5Qm.js +0 -145
- package/dist/GroupedListView.legacy-qvwIV5Qm.js.map +0 -1
- package/dist/OrderSummarySkeleton-pqfhjvKT.js +0 -632
- package/dist/OrderSummarySkeleton-pqfhjvKT.js.map +0 -1
- package/dist/ScarcityBadge-BkRFHRif.js +0 -77
- package/dist/ScarcityBadge-BkRFHRif.js.map +0 -1
- package/dist/SeriesPage-NWCA_Aez.js +0 -54
- package/dist/SeriesPage-NWCA_Aez.js.map +0 -1
- package/dist/SeriesPage.legacy-BXSwM5jV.js +0 -193
- package/dist/SeriesPage.legacy-BXSwM5jV.js.map +0 -1
- package/dist/Success-B4CM_cy1.js +0 -748
- package/dist/Success.legacy-BWAmPmZz.js +0 -192
- package/dist/Success.legacy-BWAmPmZz.js.map +0 -1
- package/dist/VenueCalendar-DMSeDRSN.js.map +0 -1
- package/dist/__SKIP_NAVIGATION__-CmipjatL.js +0 -18
- package/dist/__SKIP_NAVIGATION__-CmipjatL.js.map +0 -1
- package/dist/api-ChzBkXfo.js +0 -6
- package/dist/api-ChzBkXfo.js.map +0 -1
- package/dist/colors-CmP-sSZD.js +0 -56
- package/dist/colors-CmP-sSZD.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventPage.legacy-EujdNc3A.js","sources":["../node_modules/@getmicdrop/svelte-components/dist/schemas/wire.js","../node_modules/@getmicdrop/svelte-components/dist/utils/performerName.js","../src/lib/utils/performerDisplay.ts","../src/assets/images/default-avatar.png","../src/components/DateSelector/DateSelectorGrouped.svelte","../src/components/Events/EventMeta.svelte","../src/components/Modals/WaitlistModal.svelte","../src/components/Views/EventPage.legacy.svelte"],"sourcesContent":["/**\n * Thin wire-shape readers — the casing-defensive field/envelope/id primitives\n * every Micdrop frontend hand-rolls against raw backend JSON.\n *\n * The backend speaks two dialects: the older V1 join shape uses PascalCase keys\n * (`{ Event: {...} }`, `ID`, `EventID`) and the newer V2 shape uses camelCase\n * (`{ event: {...} }`, `id`, `eventId`). Consumers that touch the raw wire have\n * to read across both casings, and today they do it inline ~30 times across MF,\n * VC and PP — `x.event || x.Event`, `x.id || x.ID`,\n * `x.eventId ?? x.EventId ?? x.EventID ?? x.id ?? x.ID`. This module is the one\n * canonical home for that idiom: a couple of typed readers, no framework.\n *\n * It sits beside {@link getWireField} (the single-field unwrap primitive in\n * `wireMapper.ts`) and is built on it, so the V1/V2 casing rule lives in exactly\n * one place. Boundary policy mirrors `wireMapper.ts`/`types/brands.ts`: these run\n * at the API/DB boundary only — everything above the boundary works in the\n * domain shape and never sees the wire form.\n *\n * Two read semantics are offered deliberately, matching the real hand-roll sites:\n *\n * - **Truthy (`||`)** — {@link pick}. Skips falsy values (empty string, `0`,\n * `false`), so an empty-string canonical field falls through to the next\n * casing. This matches the envelope/timezone chains\n * (`venue.timeZone || venue.TimeZone || …`).\n * - **Nullish (`??`)** — {@link firstDefined}. Keeps `''` and `0`, skips only\n * `null`/`undefined`. This matches the id-coercion ladders\n * (`event.eventId ?? event.EventId ?? … ?? event.id ?? event.ID`), where a\n * numeric `0` id is a real value the caller filters itself.\n */\nimport { getWireField } from './wireMapper.js';\n/**\n * Read the first **truthy** value across the given keys (`||` semantics). Empty\n * string, `0` and `false` fall through to the next key; returns `undefined` if\n * none match. Generalizes the `a.x || a.X || …` casing idiom.\n */\nexport function pick(obj, ...keys) {\n if (obj == null)\n return undefined;\n for (const key of keys) {\n const value = obj[key];\n if (value)\n return value;\n }\n return undefined;\n}\n/**\n * Read the first **non-nullish** value across the given keys (`??` semantics).\n * Keeps `''`, `0` and `false`; skips only `null`/`undefined`; returns `undefined`\n * if none are present. Generalizes the `a.x ?? a.X ?? …` casing idiom.\n */\nexport function firstDefined(obj, ...keys) {\n if (obj == null)\n return undefined;\n for (const key of keys) {\n const value = obj[key];\n if (value != null)\n return value;\n }\n return undefined;\n}\n/**\n * Unwrap a nested `event` entity from a wire wrapper, tolerating the\n * V1 `Event` / V2 `event` casing drift; returns the wrapper itself when neither\n * envelope key is present (it may already be the unwrapped event). Undefined-safe\n * and `?.`-chainable. Generalizes `x.event ?? x.Event ?? x`.\n */\nexport function unwrapEvent(wrapper) {\n if (wrapper == null)\n return undefined;\n return getWireField(wrapper, 'event') ?? wrapper;\n}\n/**\n * Unwrap a nested `venue` entity from a wire wrapper, tolerating the\n * V1 `Venue` / V2 `venue` casing drift; returns the wrapper itself when neither\n * envelope key is present. Undefined-safe and `?.`-chainable. Generalizes\n * `x.venue ?? x.Venue ?? x`.\n */\nexport function unwrapVenue(wrapper) {\n if (wrapper == null)\n return undefined;\n return getWireField(wrapper, 'venue') ?? wrapper;\n}\n/** The id keys `readId` reads, in precedence order (V2 camel → V1 Pascal). */\nconst ID_KEYS = ['eventId', 'EventId', 'EventID', 'id', 'ID'];\n/**\n * Read an entity's id across the V1/V2 casing union\n * (`eventId → EventId → EventID → id → ID`) with nullish (`??`) precedence, so a\n * numeric `0` id is preserved; returns `undefined` when none are present.\n * Generalizes `x.eventId ?? x.EventId ?? x.EventID ?? x.id ?? x.ID`.\n */\nexport function readId(obj) {\n return firstDefined(obj, ...ID_KEYS);\n}\n","/**\n * Performer display-name resolver — the casing-defensive\n * displayName → legal name → fallback chain every Micdrop frontend hand-rolls.\n *\n * A performer's name can arrive on the wire under several shapes and casings:\n * a flat profile (`{ displayName, firstName, lastName }`, VC's case), or nested\n * inside a roster/user/profile envelope with V1 PascalCase keys\n * (`DisplayName`/`FirstName`) drifting against V2 camelCase (MF's case). On top\n * of that, an org-managed `rosterPerformerProfile` carries the real name for\n * unclaimed performers whose `user.performerProfile` fields are still empty.\n *\n * This module is the one canonical home for resolving that to a display string:\n *\n * - {@link getPerformerDisplayName} — the resolved name string\n * (`displayName` → `firstName`+`lastName` via {@link formatFullName} → fallback).\n * The reconciled union of MF's primary-text logic and VC's simpler variant.\n * - {@link getPerformerNameParts} — the richer `{ primaryText, secondaryText }`\n * split (MF's `getPerformerNameParts`), where the legal name is surfaced as\n * secondary text only when it differs from a custom display name.\n *\n * Both read across casings via {@link pick} from `schemas/wire` and compose names\n * with the canonical {@link formatFullName}, so the V1/V2 rule lives in one place.\n * Domain-pure: no framework, no IO.\n */\nimport { pick } from '../schemas/wire.js';\nimport { formatFullName } from './formatters.js';\n/**\n * Reads a string field across the camelCase/PascalCase casing union from the\n * first source that has a truthy value; empty/missing falls through. (`||`.)\n */\nfunction readName(sources, camelKey, pascalKey) {\n for (const source of sources) {\n const value = pick(source ?? undefined, camelKey, pascalKey);\n if (value)\n return value;\n }\n return '';\n}\n/**\n * Unwraps the nested roster/user/profile envelopes a performer can arrive in,\n * tolerating V1 PascalCase / V2 camelCase drift, into the flat list of sources\n * to read name fields from (org-managed profile first — it holds the real data\n * for unclaimed performers).\n */\nfunction collectNameSources(performer) {\n const data = (performer ?? {});\n const rosterPerformer = pick((data.originalItem ?? undefined), 'RosterPerformer', 'rosterPerformer') ??\n pick(data, 'RosterPerformer', 'rosterPerformer') ??\n null;\n const user = pick(rosterPerformer ?? undefined, 'User', 'user') ??\n pick(data, 'User', 'user') ??\n rosterPerformer ??\n {};\n const profile = pick(user, 'performerProfile', 'PerformerProfile') ??\n pick(data, 'performerProfile', 'PerformerProfile') ??\n {};\n const rosterPerformerProfile = pick(data, 'rosterPerformerProfile', 'RosterPerformerProfile') ?? {};\n // Priority: org-managed profile → performer profile → user → top-level row.\n return [rosterPerformerProfile, profile, user, data];\n}\n/**\n * Resolves a performer's display name across name shapes/casings:\n * `displayName` → `firstName`+`lastName` (via {@link formatFullName}) → fallback.\n */\nexport function getPerformerDisplayName(performer, options) {\n const fallback = options?.fallback ?? '';\n if (performer == null)\n return fallback;\n const sources = collectNameSources(performer);\n const displayName = readName(sources, 'displayName', 'DisplayName').trim();\n if (displayName)\n return displayName;\n const firstName = readName(sources, 'firstName', 'FirstName');\n const lastName = readName(sources, 'lastName', 'LastName');\n const legalName = formatFullName(firstName, lastName).trim();\n if (legalName)\n return legalName;\n return fallback;\n}\n/**\n * Splits a performer's name into `{ primaryText, secondaryText }`, surfacing the\n * legal name as secondary text only when a custom display name differs from it.\n */\nexport function getPerformerNameParts(performer, options) {\n const fallback = options?.fallback ?? '';\n const sources = collectNameSources(performer);\n const displayName = readName(sources, 'displayName', 'DisplayName').trim();\n const firstName = readName(sources, 'firstName', 'FirstName');\n const lastName = readName(sources, 'lastName', 'LastName');\n const legalName = formatFullName(firstName, lastName).trim();\n const primaryText = displayName || legalName || fallback;\n // Show the legal name as a subtitle only when a distinct display name exists.\n const hasCustomDisplayName = displayName &&\n legalName &&\n displayName.toLowerCase() !== legalName.toLowerCase();\n const secondaryText = hasCustomDisplayName ? legalName : '';\n return { primaryText, secondaryText };\n}\n","/**\r\n * Performer display utilities: avatar path/URL resolution.\r\n *\r\n * `getPerformerDisplayName` now lives in @getmicdrop/svelte-components (its\r\n * canonical home reconciles MF + VC's display-name logic); VC's local copy was\r\n * deleted in the SC 6.24.75 migration. Re-exported here so existing import\r\n * sites (`$lib/utils/utils.js`) keep resolving it from this module.\r\n */\r\nimport { CDN_BASE_URL, getImageUrl } from './imageUrl';\r\n\r\nexport { getPerformerDisplayName } from '@getmicdrop/svelte-components';\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","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==\"","<!-- native-element-exception: VC is an embeddable widget — native <button>s are intentional here (widget-controlled styling on calendar cells, date selectors, checkout/nav CTAs). -->\r\n<script>\r\n import { getDefaultTimezone } from '@getmicdrop/svelte-components/utils/timezones';\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>","<script>\r\n import { getDefaultTimezone } from '@getmicdrop/svelte-components/utils/timezones';\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 import { ModalRoot, ModalOverlay, ModalPanel, ModalBody, ModalFooter, Button, Input, isEmailAddress } from '@getmicdrop/svelte-components';\r\n import { Time, Email, Phone, CheckmarkFilled } from 'carbon-icons-svelte';\r\n import { joinWaitlist } from '$lib/api';\r\n\r\n let {\r\n show = $bindable(false),\r\n eventId,\r\n eventName = 'this event',\r\n onClose = () => {},\r\n labels = {},\r\n } = $props();\r\n\r\n // Form state\r\n let email = $state('');\r\n let phone = $state('');\r\n let smsOptIn = $state(false);\r\n let loading = $state(false);\r\n let error = $state('');\r\n let success = $state(false);\r\n\r\n // Validation\r\n let emailError = $derived(email && !isValidEmail(email) ? (labels.pleaseEnterValidEmail || 'Please enter a valid email') : '');\r\n let phoneError = $derived(phone && smsOptIn && !isValidPhone(phone) ? (labels.pleaseEnterValidPhone || 'Please enter a valid phone number') : '');\r\n\r\n function isValidEmail(email) {\r\n return isEmailAddress(email);\r\n }\r\n\r\n function isValidPhone(phone) {\r\n // Allow various phone formats\r\n const cleaned = phone.replace(/\\D/g, '');\r\n return cleaned.length >= 10 && cleaned.length <= 15;\r\n }\r\n\r\n async function handleSubmit() {\r\n error = '';\r\n\r\n if (!email || !isValidEmail(email)) {\r\n error = labels.pleaseEnterValidEmailAddress || 'Please enter a valid email address';\r\n return;\r\n }\r\n\r\n if (smsOptIn && phone && !isValidPhone(phone)) {\r\n error = labels.pleaseEnterValidPhone || 'Please enter a valid phone number';\r\n return;\r\n }\r\n\r\n loading = true;\r\n\r\n const result = await joinWaitlist(\r\n eventId,\r\n email,\r\n smsOptIn ? phone : null,\r\n smsOptIn\r\n );\r\n\r\n loading = false;\r\n\r\n if (result.success) {\r\n success = true;\r\n } else {\r\n error = result.error;\r\n }\r\n }\r\n\r\n function handleClose() {\r\n // Reset state when closing\r\n email = '';\r\n phone = '';\r\n smsOptIn = false;\r\n error = '';\r\n success = false;\r\n show = false;\r\n onClose();\r\n }\r\n</script>\r\n\r\n<ModalRoot\r\n bind:open={show}\r\n size=\"sm\"\r\n>\r\n <ModalOverlay />\r\n <ModalPanel>\r\n <ModalBody>\r\n {#if success}\r\n <!-- Success State -->\r\n <div class=\"flex flex-col items-center text-center pt-6 px-4 pb-4\">\r\n <div class=\"w-16 h-16 rounded-full flex items-center justify-center mb-4 bg-accent-success/10 text-accent-success\" aria-hidden=\"true\">\r\n <CheckmarkFilled size={32} aria-hidden=\"true\" />\r\n </div>\r\n <h3 id=\"waitlist-title\" class=\"text-xl font-semibold text-text-primary mb-2\">\r\n {labels.youreOnTheList || \"You're on the waitlist\"}\r\n </h3>\r\n <p id=\"waitlist-description\" class=\"text-sm text-text-secondary leading-relaxed max-w-72\">\r\n {labels.waitlistNotifyByEmail || \"We'll let you know if tickets become available.\"}\r\n </p>\r\n {#if smsOptIn && phone}\r\n <p class=\"text-xs text-muted-foreground mt-2\">\r\n {labels.waitlistSmsAlerts || \"You'll also receive SMS alerts.\"}\r\n </p>\r\n {/if}\r\n </div>\r\n {:else}\r\n <!-- Form State -->\r\n <div class=\"flex flex-col pt-6 px-4 pb-4\">\r\n <div class=\"flex items-center justify-center mb-4\">\r\n <div class=\"w-12 h-12 rounded-full flex items-center justify-center bg-brand-primary/10 text-brand-primary\" aria-hidden=\"true\">\r\n <Time size={24} aria-hidden=\"true\" />\r\n </div>\r\n </div>\r\n <h3 id=\"waitlist-title\" class=\"text-xl font-semibold text-text-primary mb-2 text-center\">\r\n {labels.waitlistTitle || 'This show is sold out.'}\r\n </h3>\r\n <p id=\"waitlist-description\" class=\"text-sm text-text-secondary leading-relaxed text-center mb-6\">\r\n {labels.waitlistDescription || 'Want to be notified if tickets become available?'}\r\n </p>\r\n\r\n <form onsubmit={(e) => { e.preventDefault(); handleSubmit(); }} class=\"space-y-4\">\r\n <!-- Email Input -->\r\n <div>\r\n <label for=\"waitlist-email\" class=\"block text-sm font-medium text-text-secondary mb-1\">\r\n {labels.waitlistEmailLabel || 'Email address'}\r\n </label>\r\n <div class=\"relative\">\r\n <Input\r\n id=\"waitlist-email\"\r\n type=\"email\"\r\n bind:value={email}\r\n placeholder={labels.waitlistEmailPlaceholder || \"you@example.com\"}\r\n required\r\n disabled={loading}\r\n class={emailError ? 'border-status-error-border' : ''}\r\n />\r\n </div>\r\n {#if emailError}\r\n <p class=\"text-xs text-accent-danger mt-1\">{emailError}</p>\r\n {/if}\r\n </div>\r\n\r\n <!-- SMS Opt-in -->\r\n <div class=\"space-y-2\">\r\n <label class=\"flex items-start gap-3 cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n name=\"smsOptIn\"\r\n aria-label={labels.smsOptIn || 'Text me when tickets are available'}\r\n bind:checked={smsOptIn}\r\n disabled={loading}\r\n class=\"mt-0.5 w-4 h-4 text-brand-primary border-stroke-primary rounded focus:ring-focus-ring\"\r\n />\r\n <span class=\"text-sm text-text-secondary\">\r\n {labels.smsOptIn || 'Text me when tickets are available'}\r\n </span>\r\n </label>\r\n\r\n {#if smsOptIn}\r\n <div class=\"ml-7\">\r\n <Input\r\n id=\"waitlist-phone\"\r\n type=\"tel\"\r\n bind:value={phone}\r\n placeholder={labels.waitlistPhonePlaceholder || \"(555) 123-4567\"}\r\n disabled={loading}\r\n class={phoneError ? 'border-status-error-border' : ''}\r\n />\r\n {#if phoneError}\r\n <p class=\"text-xs text-accent-danger mt-1\">{phoneError}</p>\r\n {/if}\r\n <p class=\"text-xs text-muted-foreground mt-1\">\r\n {labels.smsDisclaimer || 'Message & data rates may apply. Reply STOP to unsubscribe.'}\r\n </p>\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n {#if error}\r\n <div class=\"p-3 bg-status-error-bg border border-status-error-border rounded-lg\">\r\n <p class=\"text-sm text-accent-danger\">{error}</p>\r\n </div>\r\n {/if}\r\n </form>\r\n </div>\r\n {/if}\r\n </ModalBody>\r\n <ModalFooter>\r\n <div class=\"flex gap-3 w-full\" role=\"group\" aria-label={labels.dialogActions || \"Dialog actions\"}>\r\n {#if success}\r\n <Button size=\"full\" variant=\"default\" onclick={handleClose}>\r\n {labels.done || 'Done'}\r\n </Button>\r\n {:else}\r\n <Button size=\"full\" variant=\"alternative\" onclick={handleClose} disabled={loading}>\r\n {labels.cancel || 'Cancel'}\r\n </Button>\r\n <Button\r\n size=\"full\"\r\n variant=\"default\"\r\n onclick={handleSubmit}\r\n {loading}\r\n disabled={!email || !!emailError || (smsOptIn && phone && !!phoneError)}\r\n >\r\n {loading ? (labels.joining || 'Joining...') : (labels.notifyMe || 'Notify Me')}\r\n </Button>\r\n {/if}\r\n </div>\r\n </ModalFooter>\r\n </ModalPanel>\r\n</ModalRoot>\r\n","<!-- native-element-exception: VC is an embeddable widget — native <button>s are intentional here (widget-controlled styling on calendar cells, date selectors, checkout/nav CTAs). -->\r\n<!-- @style-escape: widget-intentional. -->\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 } 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, formatCurrency, formatDateRaw, getPerformerDisplayName } from '@getmicdrop/svelte-components';\r\n import { getDefaultTimezone } from '@getmicdrop/svelte-components/utils/timezones';\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 // The public API strips the real password (auth models/Event.go json:\"-\") and\r\n // exposes only a boolean `hasPassword`. Gate on that flag — NOT the stripped\r\n // `rawEvent.password`, which is always undefined on the public payload and\r\n // left every protected event unlocked. Keep an admin-shaped `password`\r\n // fallback for non-public callers.\r\n let requiresPassword = $derived(\r\n rawEvent?.hasPassword === true ||\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 // @datetime-escape: custom composite format \"${weekday} ${month} ${day} · ${time}\" for legacy compactDateTime — no <Time> preset matches this layout\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>"],"names":["pick","obj","keys","key","value","readName","sources","camelKey","pascalKey","source","collectNameSources","performer","data","rosterPerformer","user","profile","getPerformerDisplayName","options","fallback","displayName","firstName","lastName","legalName","formatFullName","getDisplayAvatarPath","getDisplayAvatarUrl","baseUrl","CDN_BASE_URL","path","getImageUrl","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_8","h2","div","$$anchor","$$item","groupIndex","$$array","showtimes","div_1","root_7","h3","fragment_1","div_2","showtime","btnDisabled","button","root","span","classes_1","$0","div_3","root_5","h3_1","div_4","comingSoon","soldOut","div_5","root_4","button_1","span_1","span_2","root_3","span_3","span_4","root_2","text_6","$$render","consequent_1","text_5","consequent_2","classes_2","div_6","root_6","h3_2","div_7","button_2","span_5","classes_3","consequent","consequent_3","consequent_4","classes","consequent_5","venue","venueAddressLines","googleMapsUrl","showStage","eventStageName","showStartTime","showEndTime","showDoorsTime","dateDisplay","formatFullDateCompact","Calendar","node","Time","node_2","formatTimeRange","root_1","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","show","onClose","email","phone","smsOptIn","loading","error","success","emailError","isValidEmail","phoneError","isValidPhone","isEmailAddress","cleaned","handleSubmit","result","joinWaitlist","handleClose","ModalRoot","$$value","ModalOverlay","ModalPanel","ModalBody","CheckmarkFilled","p","p_1","p_2","form","Input","p_3","label_1","input","div_8","p_4","p_5","node_11","div_9","p_6","e","ModalFooter","node_13","div_10","Button","node_15","node_16","consequent_6","alternate_1","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","stateZipMatch","state","zip","city","lines","address","parsedVenueDisclaimer","s","confirmedPerformers","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","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","text","Locked","node_3","img","ArrowLeft","h1","EventMeta","DateSelectorGrouped","EmptyState","consequent_7","consequent_8","h2_1","div_11","text_8","consequent_9","section_1","h2_2","div_12","avatarUrl","div_13","img_1","consequent_10","section_2","root_11","h2_3","div_14","faq","div_15","root_10","root_9","text_12","consequent_11","text_13","consequent_12","section_3","root_12","h2_4","consequent_13","PoweredByMicdrop","node_17","aside","div_16","h1_1","text_17","consequent_14","node_19","div_17","div_18","root_13","ScarcityBadge","node_21","consequent_15","div_19","fragment_4","div_20","consequent_16","button_3","node_22","div_21","root_15","consequent_17","div_22","root_17","button_4","ChevronDown","div_23","root_16","p_7","p_8","p_9","consequent_18","classes_4","consequent_19","consequent_20","consequent_21","div_24","div_25","root_20","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_21","p_10","p_11","p_12","consequent_24","classes_7","button_8","root_23","span_12","consequent_25","text_16","classes_5","consequent_26","InputModal","node_32","WaitlistModal","node_33"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import "svelte/internal/disclose-version";
|
|
2
|
-
import * as e from "svelte/internal/client";
|
|
3
|
-
import { aI as G, P as H, a9 as D, O as Z } from "./VenueCalendar-DMSeDRSN.js";
|
|
4
|
-
var M = 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), z = e.from_html('<span class="text-muted-foreground">·</span> ', 1), J = e.from_html('<p class="text-base text-text-secondary font-medium"> <!></p>'), K = 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>'), Q = e.from_html('<span class="text-muted-foreground mx-1">·</span> ', 1), U = e.from_html('<p class="hero-description text-sm text-text-secondary mt-2 svelte-ndk2q7"> </p>'), W = 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>'), X = 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
|
-
function te(F, u) {
|
|
6
|
-
e.push(u, !0);
|
|
7
|
-
let I = e.prop(u, "events", 19, () => []), o = e.prop(u, "featuredItem", 3, null), T = e.derived(() => G(I())), r = e.derived(() => e.get(T).length > 0 ? e.get(T)[0] : null);
|
|
8
|
-
function E() {
|
|
9
|
-
e.get(r) && u.oneventClick?.(e.get(r));
|
|
10
|
-
}
|
|
11
|
-
var b = Y(), A = e.child(b);
|
|
12
|
-
{
|
|
13
|
-
var L = (d) => {
|
|
14
|
-
var s = K(), n = e.child(s);
|
|
15
|
-
{
|
|
16
|
-
var w = (t) => {
|
|
17
|
-
var a = M(), f = e.child(a);
|
|
18
|
-
e.reset(a), e.template_effect(() => e.set_attribute(f, "src", o().image)), e.append(t, a);
|
|
19
|
-
}, h = (t) => {
|
|
20
|
-
var a = R();
|
|
21
|
-
e.append(t, a);
|
|
22
|
-
};
|
|
23
|
-
e.if(n, (t) => {
|
|
24
|
-
o().image ? t(w) : t(h, -1);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
var v = e.sibling(n, 2), c = e.child(v), m = e.child(c);
|
|
28
|
-
{
|
|
29
|
-
var x = (t) => {
|
|
30
|
-
var a = S();
|
|
31
|
-
e.next(), e.append(t, a);
|
|
32
|
-
}, y = (t) => {
|
|
33
|
-
var a = V();
|
|
34
|
-
e.next(), e.append(t, a);
|
|
35
|
-
};
|
|
36
|
-
e.if(m, (t) => {
|
|
37
|
-
o().type === "series" ? t(x) : t(y, -1);
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
var k = e.sibling(m, 2);
|
|
41
|
-
{
|
|
42
|
-
var q = (t) => {
|
|
43
|
-
var a = z(), f = e.sibling(e.first_child(a));
|
|
44
|
-
e.template_effect(() => e.set_text(f, ` ${o().subtitle ?? ""}`)), e.append(t, a);
|
|
45
|
-
};
|
|
46
|
-
e.if(k, (t) => {
|
|
47
|
-
o().subtitle && t(q);
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
e.reset(c);
|
|
51
|
-
var p = e.sibling(c, 2), i = e.child(p, !0);
|
|
52
|
-
e.reset(p);
|
|
53
|
-
var l = e.sibling(p, 2);
|
|
54
|
-
{
|
|
55
|
-
var g = (t) => {
|
|
56
|
-
var a = J(), f = e.child(a), N = e.sibling(f);
|
|
57
|
-
{
|
|
58
|
-
var O = (_) => {
|
|
59
|
-
var C = e.text();
|
|
60
|
-
e.template_effect((B) => e.set_text(C, `at ${B ?? ""}`), [
|
|
61
|
-
() => Z(e.get(r).startDateTime, e.get(r).timeZone)
|
|
62
|
-
]), e.append(_, C);
|
|
63
|
-
};
|
|
64
|
-
e.if(N, (_) => {
|
|
65
|
-
e.get(r).startDateTime && _(O);
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
e.reset(a), e.template_effect((_) => e.set_text(f, `Next: ${_ ?? ""} `), [
|
|
69
|
-
() => D(e.get(r).startDateTime, e.get(r).timeZone)
|
|
70
|
-
]), e.append(t, a);
|
|
71
|
-
};
|
|
72
|
-
e.if(l, (t) => {
|
|
73
|
-
e.get(r) && t(g);
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
e.reset(v), e.reset(s), e.template_effect(() => e.set_text(i, o().title)), e.append(d, s);
|
|
77
|
-
}, P = (d) => {
|
|
78
|
-
var s = W(), n = e.child(s), w = e.child(n);
|
|
79
|
-
e.reset(n);
|
|
80
|
-
var h = e.sibling(n, 2), v = e.child(h), c = e.child(v, !0);
|
|
81
|
-
e.reset(v);
|
|
82
|
-
var m = e.sibling(v, 2), x = e.child(m), y = e.sibling(x);
|
|
83
|
-
{
|
|
84
|
-
var k = (i) => {
|
|
85
|
-
var l = Q(), g = e.sibling(e.first_child(l));
|
|
86
|
-
e.template_effect((t) => e.set_text(g, ` ${t ?? ""}`), [
|
|
87
|
-
() => Z(e.get(r).startDateTime, e.get(r).timeZone)
|
|
88
|
-
]), e.append(i, l);
|
|
89
|
-
};
|
|
90
|
-
e.if(y, (i) => {
|
|
91
|
-
e.get(r).startDateTime && i(k);
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
e.reset(m);
|
|
95
|
-
var q = e.sibling(m, 2);
|
|
96
|
-
{
|
|
97
|
-
var p = (i) => {
|
|
98
|
-
var l = U(), g = e.child(l, !0);
|
|
99
|
-
e.reset(l), e.template_effect(() => e.set_text(g, e.get(r).description)), e.append(i, l);
|
|
100
|
-
};
|
|
101
|
-
e.if(q, (i) => {
|
|
102
|
-
e.get(r).description && i(p);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
e.reset(h), e.reset(s), e.template_effect(
|
|
106
|
-
(i, l) => {
|
|
107
|
-
e.set_attribute(s, "aria-label", `${e.get(r).name ?? ""}, ${i ?? ""}. Press Enter to view details.`), e.set_attribute(w, "src", e.get(r).image || H), e.set_text(c, e.get(r).name), e.set_text(x, `${l ?? ""} `);
|
|
108
|
-
},
|
|
109
|
-
[
|
|
110
|
-
() => D(e.get(r).startDateTime, e.get(r).timeZone),
|
|
111
|
-
() => D(e.get(r).startDateTime, e.get(r).timeZone)
|
|
112
|
-
]
|
|
113
|
-
), e.delegated("click", s, E), e.delegated("keydown", s, (i) => (i.key === "Enter" || i.key === " ") && E()), e.append(d, s);
|
|
114
|
-
}, j = (d) => {
|
|
115
|
-
var s = X();
|
|
116
|
-
e.append(d, s);
|
|
117
|
-
};
|
|
118
|
-
e.if(A, (d) => {
|
|
119
|
-
o() ? d(L) : e.get(r) ? d(P, 1) : d(j, -1);
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
e.reset(b), e.append(F, b), e.pop();
|
|
123
|
-
}
|
|
124
|
-
e.delegate(["click", "keydown"]);
|
|
125
|
-
export {
|
|
126
|
-
te as default
|
|
127
|
-
};
|
|
128
|
-
//# sourceMappingURL=FeaturedView.legacy-CbLBD-tn.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FeaturedView.legacy-CbLBD-tn.js","sources":["../src/components/Calendar/FeaturedView.legacy.svelte"],"sourcesContent":["<script>\r\n // @ts-nocheck legacy fallback (legacy=1 path), slated for deletion after VC finalization — not type-maintained\r\n import { formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\r\n import { PLACEHOLDER_IMAGE } from \"$lib/utils/constants.js\";\r\n import { filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\r\n\r\n let {\r\n events = [],\r\n featuredItem = null,\r\n oneventClick,\r\n } = $props();\r\n\r\n // Filter to today and future, sorted chronologically\r\n let futureEvents = $derived(filterTodayAndFuture(events));\r\n\r\n let heroEvent = $derived(futureEvents.length > 0 ? futureEvents[0] : null);\r\n\r\n function handleClick() {\r\n if (heroEvent) {\r\n oneventClick?.(heroEvent);\r\n }\r\n }\r\n</script>\r\n\r\n<section class=\"w-full\" aria-label=\"Featured event\">\r\n {#if featuredItem}\r\n <!-- Series or Collection hero -->\r\n <div class=\"featured-hero rounded-lg border border-border bg-card overflow-hidden\">\r\n {#if featuredItem.image}\r\n <div class=\"hero-image-container relative w-full bg-muted overflow-hidden\">\r\n <img\r\n src={featuredItem.image}\r\n alt=\"\"\r\n class=\"hero-image\"\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n {:else}\r\n <div class=\"hero-image-container relative w-full bg-muted overflow-hidden flex items-center justify-center\">\r\n <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\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/><path d=\"m21 15-5-5L5 21\"/></svg>\r\n </div>\r\n {/if}\r\n\r\n <div class=\"p-4 sm:p-5\">\r\n <div class=\"inline-flex items-center gap-1.5 text-xs font-semibold text-brand-primary uppercase tracking-wide mb-2\">\r\n {#if featuredItem.type === 'series'}\r\n <span class=\"w-1.5 h-1.5 rounded-full bg-brand-primary\"></span>\r\n Series\r\n {:else}\r\n <span class=\"w-1.5 h-1.5 rounded-full bg-brand-primary\"></span>\r\n Collection\r\n {/if}\r\n {#if featuredItem.subtitle}\r\n <span class=\"text-muted-foreground\">·</span>\r\n {featuredItem.subtitle}\r\n {/if}\r\n </div>\r\n\r\n <h2 class=\"hero-title text-xl sm:text-2xl font-bold text-text-primary mb-2\">{featuredItem.title}</h2>\r\n\r\n {#if heroEvent}\r\n <p class=\"text-base text-text-secondary font-medium\">\r\n Next: {formatFullDate(heroEvent.startDateTime, heroEvent.timeZone)}\r\n {#if heroEvent.startDateTime}\r\n at {formatEventTime(heroEvent.startDateTime, heroEvent.timeZone)}\r\n {/if}\r\n </p>\r\n {/if}\r\n </div>\r\n </div>\r\n {:else if heroEvent}\r\n <!-- Single event hero -->\r\n <div\r\n 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\"\r\n onclick={handleClick}\r\n onkeydown={(e) => (e.key === 'Enter' || e.key === ' ') && handleClick()}\r\n tabindex=\"0\"\r\n role=\"button\"\r\n aria-label=\"{heroEvent.name}, {formatFullDate(heroEvent.startDateTime, heroEvent.timeZone)}. Press Enter to view details.\"\r\n >\r\n <div class=\"hero-image-container relative w-full bg-muted overflow-hidden\">\r\n <img\r\n src={heroEvent.image || PLACEHOLDER_IMAGE}\r\n alt=\"\"\r\n class=\"hero-image\"\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n\r\n <div class=\"p-4 sm:p-5\" aria-hidden=\"true\">\r\n <h2 class=\"hero-title text-xl sm:text-2xl font-bold text-text-primary mb-2\">{heroEvent.name}</h2>\r\n\r\n <p class=\"text-base text-text-secondary font-medium\">\r\n {formatFullDate(heroEvent.startDateTime, heroEvent.timeZone)}\r\n {#if heroEvent.startDateTime}\r\n <span class=\"text-muted-foreground mx-1\">·</span>\r\n {formatEventTime(heroEvent.startDateTime, heroEvent.timeZone)}\r\n {/if}\r\n </p>\r\n\r\n {#if heroEvent.description}\r\n <p class=\"hero-description text-sm text-text-secondary mt-2\">{heroEvent.description}</p>\r\n {/if}\r\n </div>\r\n </div>\r\n {:else}\r\n <!-- Empty state -->\r\n <div class=\"flex items-center justify-center py-12 rounded-lg border border-border bg-bg-secondary\">\r\n <p class=\"text-sm text-muted-foreground\">No upcoming events to feature</p>\r\n </div>\r\n {/if}\r\n</section>\r\n\r\n<style>\r\n .hero-image-container {\r\n aspect-ratio: 16 / 9;\r\n }\r\n\r\n .hero-image {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: contain;\r\n }\r\n\r\n .hero-title {\r\n line-height: 1.3;\r\n }\r\n\r\n .featured-hero-clickable {\r\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\r\n }\r\n\r\n .featured-hero-clickable:hover {\r\n box-shadow: 0 4px 12px color-mix(in srgb, black 10%, transparent);\r\n }\r\n\r\n .featured-hero-clickable:focus {\r\n outline: none;\r\n }\r\n\r\n .hero-description {\r\n display: -webkit-box;\r\n -webkit-line-clamp: 2;\r\n line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n }\r\n\r\n /* Reduced motion */\r\n @media (prefers-reduced-motion: reduce) {\r\n .featured-hero-clickable {\r\n transition: none;\r\n }\r\n }\r\n</style>\r\n"],"names":["events","$","$$props","featuredItem","futureEvents","filterTodayAndFuture","heroEvent","handleClick","section","root_11","div","root_6","div_1","root","img","div_2","root_1","$$render","consequent","alternate","div_3","node_1","div_4","consequent_1","alternate_1","text","consequent_2","h2","p","root_5","formatEventTime","consequent_3","formatFullDate","consequent_4","text_1","div_5","root_9","div_6","img_1","div_7","h2_1","p_1","consequent_6","p_2","root_8","text_7","consequent_7","$0","PLACEHOLDER_IMAGE","text_4","e","div_8","root_10","consequent_8","alternate_2"],"mappings":"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"}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import "svelte/internal/disclose-version";
|
|
2
|
-
import * as e from "svelte/internal/client";
|
|
3
|
-
import { S as O } from "./ScarcityBadge-BkRFHRif.js";
|
|
4
|
-
import { b1 as Z, b2 as A, P as B, b3 as C, a9 as G, O as _, N as L } from "./VenueCalendar-DMSeDRSN.js";
|
|
5
|
-
var P = e.from_html('<div class="badge-overlay svelte-18a25gb" aria-hidden="true"><span> </span></div>'), R = e.from_html('<div class="badge-overlay svelte-18a25gb" aria-hidden="true"><!></div>'), H = e.from_html("<time> </time>"), U = e.from_html('<span class="meta-separator svelte-18a25gb" aria-hidden="true">•</span> <span> </span>', 1), j = e.from_html('<a><div class="card-image-container svelte-18a25gb"><img alt="" class="card-image svelte-18a25gb" loading="lazy" aria-hidden="true"/> <!></div> <div class="card-content svelte-18a25gb" aria-hidden="true"><h3 class="card-title svelte-18a25gb"> </h3> <div class="card-meta svelte-18a25gb"><!> <!></div></div></a>');
|
|
6
|
-
function M(h, i) {
|
|
7
|
-
e.push(i, !0);
|
|
8
|
-
let v = e.prop(i, "labels", 19, () => ({})), n = e.derived(() => Z(i.event)), D = e.derived(() => A(e.get(n)));
|
|
9
|
-
function T(t) {
|
|
10
|
-
const a = [t.name];
|
|
11
|
-
return t.startDateTime && a.push(`on ${G(t.startDateTime, t.timeZone)}`), t.startDateTime && a.push(`at ${_(t.startDateTime, t.timeZone)}`), e.get(n) ? a.push(e.get(n).text) : t.status && t.status !== (v().statusOnSale || "On Sale") && a.push(t.status), a.push(v().pressEnterToView || "Press Enter to view details"), a.join(", ");
|
|
12
|
-
}
|
|
13
|
-
var s = j();
|
|
14
|
-
let g;
|
|
15
|
-
var d = e.child(s), o = e.child(d), x = e.sibling(o, 2);
|
|
16
|
-
{
|
|
17
|
-
var E = (t) => {
|
|
18
|
-
var a = P(), r = e.child(a), l = e.child(r, !0);
|
|
19
|
-
e.reset(r), e.reset(a), e.template_effect(() => {
|
|
20
|
-
e.set_class(r, 1, `status-badge status-${e.get(n).type ?? ""}`, "svelte-18a25gb"), e.set_text(l, e.get(n).text);
|
|
21
|
-
}), e.append(t, a);
|
|
22
|
-
}, k = (t) => {
|
|
23
|
-
var a = R(), r = e.child(a);
|
|
24
|
-
{
|
|
25
|
-
let l = e.derived(() => i.event.ticketsRemaining ?? 0), c = e.derived(() => i.event.ticketsTotal ?? 0);
|
|
26
|
-
O(r, {
|
|
27
|
-
get remaining() {
|
|
28
|
-
return e.get(l);
|
|
29
|
-
},
|
|
30
|
-
get total() {
|
|
31
|
-
return e.get(c);
|
|
32
|
-
},
|
|
33
|
-
context: "browse",
|
|
34
|
-
get labels() {
|
|
35
|
-
return v();
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
e.reset(a), e.append(t, a);
|
|
40
|
-
};
|
|
41
|
-
e.if(x, (t) => {
|
|
42
|
-
e.get(n) ? t(E) : (i.event.ticketsTotal > 0 || i.event.ticketsRemaining === 0) && t(k, 1);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
e.reset(d);
|
|
46
|
-
var u = e.sibling(d, 2), m = e.child(u), y = e.child(m, !0);
|
|
47
|
-
e.reset(m);
|
|
48
|
-
var f = e.sibling(m, 2), b = e.child(f);
|
|
49
|
-
{
|
|
50
|
-
var w = (t) => {
|
|
51
|
-
var a = H(), r = e.child(a, !0);
|
|
52
|
-
e.reset(a), e.template_effect(
|
|
53
|
-
(l) => {
|
|
54
|
-
e.set_attribute(a, "datetime", i.event.startDateTime), e.set_text(r, l);
|
|
55
|
-
},
|
|
56
|
-
[
|
|
57
|
-
() => L(i.event.startDateTime, i.event.timeZone)
|
|
58
|
-
]
|
|
59
|
-
), e.append(t, a);
|
|
60
|
-
};
|
|
61
|
-
e.if(b, (t) => {
|
|
62
|
-
i.event.startDateTime && t(w);
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
var S = e.sibling(b, 2);
|
|
66
|
-
{
|
|
67
|
-
var p = (t) => {
|
|
68
|
-
var a = U(), r = e.sibling(e.first_child(a), 2), l = e.child(r, !0);
|
|
69
|
-
e.reset(r), e.template_effect((c) => e.set_text(l, c), [
|
|
70
|
-
() => _(i.event.startDateTime, i.event.timeZone)
|
|
71
|
-
]), e.append(t, a);
|
|
72
|
-
};
|
|
73
|
-
e.if(S, (t) => {
|
|
74
|
-
i.event.startDateTime && t(p);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
e.reset(f), e.reset(u), e.reset(s), e.template_effect(
|
|
78
|
-
(t, a) => {
|
|
79
|
-
e.set_attribute(s, "href", t), g = e.set_class(s, 1, "gallery-card svelte-18a25gb", null, g, { "card-unavailable": e.get(D) }), e.set_attribute(s, "aria-label", a), e.set_attribute(o, "src", i.event.image || B), e.set_text(y, i.event.name);
|
|
80
|
-
},
|
|
81
|
-
[
|
|
82
|
-
() => C(i.event),
|
|
83
|
-
() => T(i.event)
|
|
84
|
-
]
|
|
85
|
-
), e.delegated("click", s, (t) => {
|
|
86
|
-
t.preventDefault(), i.oneventClick?.(i.event);
|
|
87
|
-
}), e.append(h, s), e.pop();
|
|
88
|
-
}
|
|
89
|
-
e.delegate(["click"]);
|
|
90
|
-
export {
|
|
91
|
-
M as G
|
|
92
|
-
};
|
|
93
|
-
//# sourceMappingURL=GalleryCard-BcIcYghD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GalleryCard-BcIcYghD.js","sources":["../src/components/Calendar/GalleryCard.svelte"],"sourcesContent":["<script>\r\n import ScarcityBadge from \"../ScarcityBadge.svelte\";\r\n import { formatBrowseDate, formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\r\n import { PLACEHOLDER_IMAGE } from \"$lib/utils/constants.js\";\r\n import { getBrowseStatus, isEventUnavailable } from \"$lib/utils/browse-status.js\";\r\n import { buildEventHref } from \"$lib/url-manager/params\";\r\n\r\n let { event, oneventClick, labels = {} } = $props();\r\n\r\n let browseStatus = $derived(getBrowseStatus(event));\r\n let isUnavailable = $derived(isEventUnavailable(browseStatus));\r\n\r\n // Build comprehensive aria-label for event card\r\n function getEventAriaLabel(event) {\r\n const parts = [event.name];\r\n if (event.startDateTime) {\r\n parts.push(`on ${formatFullDate(event.startDateTime, event.timeZone)}`);\r\n }\r\n if (event.startDateTime) {\r\n parts.push(`at ${formatEventTime(event.startDateTime, event.timeZone)}`);\r\n }\r\n if (browseStatus) {\r\n parts.push(browseStatus.text);\r\n } else if (event.status && event.status !== (labels.statusOnSale || 'On Sale')) {\r\n parts.push(event.status);\r\n }\r\n parts.push(labels.pressEnterToView || 'Press Enter to view details');\r\n return parts.join(', ');\r\n }\r\n</script>\r\n\r\n<a\r\n href={buildEventHref(event)}\r\n class=\"gallery-card\"\r\n class:card-unavailable={isUnavailable}\r\n onclick={(e) => { e.preventDefault(); oneventClick?.(event); }}\r\n aria-label={getEventAriaLabel(event)}\r\n>\r\n <!-- Fixed height image container -->\r\n <div class=\"card-image-container\">\r\n <!-- @component-image-escape: scoped-CSS selector targets this img; aria-hidden not supported by SC Image -->\r\n <img\r\n src={event.image || PLACEHOLDER_IMAGE}\r\n alt=\"\"\r\n class=\"card-image\"\r\n loading=\"lazy\"\r\n aria-hidden=\"true\"\r\n />\r\n <!-- Status Badge overlay -->\r\n {#if browseStatus}\r\n <div class=\"badge-overlay\" aria-hidden=\"true\">\r\n <span class=\"status-badge status-{browseStatus.type}\">{browseStatus.text}</span>\r\n </div>\r\n {:else if event.ticketsTotal > 0 || event.ticketsRemaining === 0}\r\n <div class=\"badge-overlay\" aria-hidden=\"true\">\r\n <ScarcityBadge\r\n remaining={event.ticketsRemaining ?? 0}\r\n total={event.ticketsTotal ?? 0}\r\n context=\"browse\"\r\n {labels}\r\n />\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n <!-- Event Details -->\r\n <div class=\"card-content\" aria-hidden=\"true\">\r\n <h3 class=\"card-title\">{event.name}</h3>\r\n <div class=\"card-meta\">\r\n {#if event.startDateTime}\r\n <time datetime={event.startDateTime}>\r\n {formatBrowseDate(event.startDateTime, event.timeZone)}\r\n </time>\r\n {/if}\r\n {#if event.startDateTime}\r\n <span class=\"meta-separator\" aria-hidden=\"true\">•</span>\r\n <span>{formatEventTime(event.startDateTime, event.timeZone)}</span>\r\n {/if}\r\n </div>\r\n </div>\r\n</a>\r\n\r\n<style>\r\n /* @apply-escape: GalleryCard's component-scoped <style> block uses\r\n * @apply to extract repeated Tailwind utility combinations into\r\n * named component classes (card root, image wrapper, content\r\n * sections, hover/focus states). This is the canonical Tailwind v4\r\n * component-layer pattern — same shape as VC src/lib/styles/components.css.\r\n * Atlas css-style-cheats — file-level exempt per filterByFileLevelMarker.\r\n */\r\n @reference \"../../app.css\";\r\n\r\n .gallery-card {\r\n @apply rounded-lg border bg-card border-border;\r\n @apply overflow-hidden cursor-pointer block;\r\n\r\n text-decoration: none;\r\n color: inherit;\r\n transition: transform var(--motion-fast) var(--ease-out), box-shadow var(--motion-fast) var(--ease-out), border-color var(--motion-fast) var(--ease-out);\r\n }\r\n\r\n .gallery-card:hover {\r\n @apply border-stroke-primary;\r\n\r\n transform: translateY(-2px);\r\n box-shadow: 0 4px 12px color-mix(in srgb, black 10%, transparent);\r\n }\r\n\r\n .gallery-card:focus {\r\n @apply outline-none;\r\n }\r\n\r\n .gallery-card:focus-visible {\r\n @apply outline-2 outline-focus-ring outline-offset-2;\r\n }\r\n\r\n .gallery-card:active {\r\n transform: translateY(0);\r\n }\r\n\r\n /* Fixed height image container */\r\n .card-image-container {\r\n @apply relative w-full bg-muted overflow-hidden;\r\n\r\n height: 200px;\r\n }\r\n\r\n @media (width <= 639px) {\r\n .card-image-container {\r\n height: 220px;\r\n }\r\n }\r\n\r\n @media (width >= 1024px) {\r\n .card-image-container {\r\n height: 180px;\r\n }\r\n }\r\n\r\n .card-image {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: contain;\r\n }\r\n\r\n .badge-overlay {\r\n position: absolute;\r\n top: 8px;\r\n left: 8px;\r\n }\r\n\r\n .card-content {\r\n @apply p-3;\r\n }\r\n\r\n @media (width >= 640px) {\r\n .card-content {\r\n @apply p-3.5;\r\n }\r\n }\r\n\r\n .card-title {\r\n @apply text-base font-semibold text-text-primary mb-1.5;\r\n\r\n line-height: 1.3;\r\n display: -webkit-box;\r\n -webkit-line-clamp: 2;\r\n line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n }\r\n\r\n @media (width <= 639px) {\r\n .card-title {\r\n @apply text-lg;\r\n }\r\n }\r\n\r\n .card-meta {\r\n @apply text-sm text-text-secondary font-medium;\r\n }\r\n\r\n @media (width <= 639px) {\r\n .card-meta {\r\n @apply text-base;\r\n }\r\n }\r\n\r\n .meta-separator {\r\n @apply text-muted-foreground mx-1;\r\n }\r\n\r\n /* Unavailable event dimming */\r\n .card-unavailable {\r\n @apply opacity-60;\r\n }\r\n\r\n .card-unavailable .card-image {\r\n filter: grayscale(0.5);\r\n }\r\n\r\n /* Status badges — distinct visual treatments for each status */\r\n .status-badge {\r\n @apply inline-flex items-center text-xs font-bold px-2.5 py-1 rounded;\r\n\r\n box-shadow: 0 2px 6px color-mix(in srgb, black 25%, transparent);\r\n letter-spacing: 0.02em;\r\n }\r\n\r\n .status-cancelled {\r\n @apply text-white bg-gradient-to-br from-rose-900 to-red-700;\r\n\r\n text-decoration: line-through;\r\n text-decoration-thickness: 1.5px;\r\n }\r\n\r\n .status-past {\r\n @apply text-muted-foreground bg-overlay-bg;\r\n\r\n backdrop-filter: blur(4px);\r\n }\r\n\r\n .status-sold_out {\r\n @apply text-white uppercase tracking-wider bg-gradient-to-br from-red-600 to-red-400;\r\n\r\n font-size: 0.65rem;\r\n }\r\n\r\n .status-sales_ended {\r\n @apply text-muted-foreground bg-bg-secondary/90 border border-stroke-primary/30;\r\n\r\n backdrop-filter: blur(4px);\r\n }\r\n\r\n .status-coming_soon {\r\n @apply text-white bg-gradient-to-br from-blue-600 to-indigo-500;\r\n }\r\n\r\n /* Reduced motion */\r\n @media (prefers-reduced-motion: reduce) {\r\n .gallery-card {\r\n transition: none;\r\n }\r\n\r\n .gallery-card:hover {\r\n transform: none;\r\n }\r\n }\r\n</style>\r\n"],"names":["labels","$","$$props","browseStatus","getBrowseStatus","isUnavailable","isEventUnavailable","getEventAriaLabel","event","parts","formatFullDate","formatEventTime","a","root_4","div","img","div_1","root","span","text","div_2","root_1","$0","$1","ScarcityBadge","node_1","$$render","consequent_1","div_3","h3","div_4","time","root_2","formatBrowseDate","consequent_2","span_1","fragment","consequent_3","classes","PLACEHOLDER_IMAGE","buildEventHref","e"],"mappings":";;;;;iBAAA;;AAOE,MAAIA,IAA6BC,EAAA,KAAAC,GAAA,UAAA,IAAA,OAAA,CAAA,EAAA,GAE7BC,oBAAwBC,EAAeF,EAAA,KAAA,CAAA,GACvCG,IAAaJ,EAAA,QAAA,MAAYK,EAAkBL,EAAA,IAACE,CAAY,CAAA,CAAA;AAG5D,WAASI,EAAkBC,GAAO;AAChC,UAAMC,IAAK,CAAID,EAAM,IAAI;AACzB,WAAIA,EAAM,iBACRC,EAAM,KAAI,MAAOC,EAAeF,EAAM,eAAeA,EAAM,QAAQ,CAAA,EAAA,GAEjEA,EAAM,iBACRC,EAAM,KAAI,MAAOE,EAAgBH,EAAM,eAAeA,EAAM,QAAQ,CAAA,EAAA,GAEpEP,EAAA,IAAEE,CAAY,IACdM,EAAM,KAAIR,EAAA,IAACE,CAAY,EAAC,IAAI,IACnBK,EAAM,UAAUA,EAAM,YAAYR,EAAM,EAAC,gBAAgB,cAClES,EAAM,KAAKD,EAAM,MAAM,GAEzBC,EAAM,KAAKT,IAAO,oBAAoB,6BAA6B,GAC5DS,EAAM,KAAK,IAAI;AAAA,EACxB;MAGDG,IAACC,EAAA;;AAQC,MAAAC,YARFF,CAAC,GAUGG,YAFFD,CAAG,iBAEDC,GAAG,CAAA;;;UASDC,IAAGC,EAAA,GACDC,YADFF,CAAG,eACDE,GAAI,EAAA;cAAJA,CAAI,WADNF,CAAG;oBACDE,GAAI,GAAA,uBAAAjB,EAAA,IAA6BE,CAAY,EAAC,QAAI,EAAA,IAAA,gBAAA,GAAIF,EAAA,SAAAkB,GAAAlB,EAAA,IAAAE,CAAY,EAAC,IAAI;AAAA,sBADzEa,CAAG;AAAA;UAIHI,IAAGC,EAAA,eAAHD,CAAG;;AAEiB,YAAAE,IAAArB,EAAA,QAAA,MAAAC,EAAA,MAAA,oBAAoB,CAAC,GACzBqB,IAAAtB,EAAA,QAAA,MAAAC,EAAA,MAAA,gBAAgB,CAAC;AAF/B,QAAAsB,EAAaC,GAAA;AAAA;;;;;;;;mBAIXzB,EAAM;AAAA;;;cALVoB,CAAG,eAAHA,CAAG;AAAA;;AALD,MAAAnB,EAAA,IAAAE,CAAY,oBAID,eAAe,KAACD,EAAA,MAAU,qBAAqB,MAACwB,EAAAC,GAAA,CAAA;AAAA;;UAdjEb,CAAG;AA2BH,MAAAc,cA3BAd,GAAG,CAAA,GA4BDe,YADFD,CAAG,eACDC,GAAE,EAAA;UAAFA,CAAE;AACF,MAAAC,cADAD,GAAE,CAAA,eACFC,CAAG;;;UAECC,IAAIC,EAAA,eAAJD,GAAI,EAAA;cAAJA,CAAI;;AAAJ,UAAA9B,EAAA,cAAA8B,uBAAqB,aAAa;;;gBAChCE,EAAgB/B,EAAA,MAAO,eAAaA,EAAA,MAAQ,QAAQ;AAAA;qBADtD6B,CAAI;AAAA;;cADI,iBAAaL,EAAAQ,CAAA;AAAA;;;;;mBAOrBC,IAAIlC,EAAA,QAAAA,EAAA,YAAAmC,CAAA,GAAA,CAAA,eAAJD,GAAI,EAAA;cAAJA,CAAI;cAAExB,EAAeT,EAAA,MAAO,eAAaA,EAAA,MAAQ,QAAQ;AAAA;;;cAFjD,iBAAawB,EAAAW,CAAA;AAAA;;UANzBP,CAAG,WAFLF,CAAG,WAnCLhB,CAAC;;sBAADA,GAAC,QAAAU,CAAA,GAADgB,IAAArC,EAAA,UAAAW,0EAGyBP,CAAa,EAAA,CAAA,mBAHtCO,GAAC,cAAAW,CAAA,mBAUGR,GAAG,OAAAb,EAAA,MACS,SAASqC,CAAiB,yBAyBT,IAAI;AAAA;;YAnC9BC,EAActC,EAAA,KAAA;AAAA,YAIRK,EAAiBL,EAAA,KAAA;AAAA;0BAL9BU,GAAC,CAIU6B,MAAM;AAAE,IAAAA,EAAE,eAAc;EAA2B,CAAC,eAJ/D7B,CAAC;AAFM;;"}
|