@getmicdrop/venue-calendar 3.5.0 → 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CarouselView.legacy-CRHakGOL.js +64 -0
- package/dist/CarouselView.legacy-CRHakGOL.js.map +1 -0
- package/dist/{Checkout.legacy-DqNypQ8O.js → Checkout.legacy-Btt0uT61.js} +177 -173
- package/dist/Checkout.legacy-Btt0uT61.js.map +1 -0
- package/dist/CollectionView.legacy-Bxih-dA-.js +374 -0
- package/dist/CollectionView.legacy-Bxih-dA-.js.map +1 -0
- package/dist/FeaturedView.legacy-CVEXHJBx.js +128 -0
- package/dist/FeaturedView.legacy-CVEXHJBx.js.map +1 -0
- package/dist/GalleryView.legacy-Ci-IHtAe.js +51 -0
- package/dist/GalleryView.legacy-Ci-IHtAe.js.map +1 -0
- package/dist/GroupedListView.legacy-qisy7BOS.js +144 -0
- package/dist/GroupedListView.legacy-qisy7BOS.js.map +1 -0
- package/dist/SeriesPage.legacy-Ka81Mn73.js +187 -0
- package/dist/SeriesPage.legacy-Ka81Mn73.js.map +1 -0
- package/dist/Success.legacy-D72O08IB.js +191 -0
- package/dist/Success.legacy-D72O08IB.js.map +1 -0
- package/dist/{VenueCalendar-DsXtZNAR.js → VenueCalendar-B5Y29ZJD.js} +18089 -12388
- package/dist/VenueCalendar-B5Y29ZJD.js.map +1 -0
- package/dist/api/api.cjs +1 -1
- package/dist/api/api.cjs.map +1 -1
- package/dist/api/api.mjs +117 -120
- package/dist/api/api.mjs.map +1 -1
- package/dist/api/client.d.ts +1 -0
- package/dist/api/orders.d.ts +2 -1
- package/dist/colors-BZoMuXdh.js.map +1 -1
- package/dist/venue-calendar.css +1 -1
- package/dist/venue-calendar.es.js +25 -21
- package/dist/venue-calendar.iife.js +49 -34
- package/dist/venue-calendar.iife.js.map +1 -1
- package/dist/venue-calendar.umd.js +49 -34
- package/dist/venue-calendar.umd.js.map +1 -1
- package/package.json +4 -2
- package/src/lib/theme.js +38 -46
- package/dist/CarouselView.legacy-fAmsAKLi.js +0 -65
- package/dist/CarouselView.legacy-fAmsAKLi.js.map +0 -1
- package/dist/Checkout.legacy-DqNypQ8O.js.map +0 -1
- package/dist/FeaturedView.legacy-BNysXCtk.js +0 -128
- package/dist/FeaturedView.legacy-BNysXCtk.js.map +0 -1
- package/dist/GalleryCard-RBMkn3Va.js +0 -92
- package/dist/GalleryCard-RBMkn3Va.js.map +0 -1
- package/dist/GalleryView.legacy-BDKpD6lT.js +0 -52
- package/dist/GalleryView.legacy-BDKpD6lT.js.map +0 -1
- package/dist/GroupedListView.legacy-fL2kRm35.js +0 -148
- package/dist/GroupedListView.legacy-fL2kRm35.js.map +0 -1
- package/dist/Success.legacy-D9MZwTCk.js +0 -191
- package/dist/Success.legacy-D9MZwTCk.js.map +0 -1
- package/dist/VenueCalendar-DsXtZNAR.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionView.legacy-Bxih-dA-.js","sources":["../src/components/Calendar/GroupedListView.svelte","../src/components/Views/CollectionView.legacy.svelte"],"sourcesContent":["<script>\n import { onMount, onDestroy } from \"svelte\";\n import { PLACEHOLDER_IMAGE } from \"$lib/utils/constants.js\";\n import { getDateParts, formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\n import { getBrowseStatus, isEventUnavailable, filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\n import ScarcityBadge from \"../ScarcityBadge.svelte\";\n\n let {\n events = [],\n initialCount = 10,\n loadMoreCount = 10,\n showDateColumn = true,\n filterFutureOnly = true,\n oneventClick,\n labels = {},\n } = $props();\n\n let displayedCount = $state(initialCount);\n let loadMoreTrigger = $state();\n let observer;\n\n // Filter to today and future (if enabled), then group by date\n let filteredEvents = $derived(filterFutureOnly ? filterTodayAndFuture(events) : events);\n let groupedEvents = $derived(groupEventsByDate(filteredEvents.slice(0, displayedCount)));\n let hasMore = $derived(displayedCount < filteredEvents.length);\n\n function loadMore() {\n displayedCount += loadMoreCount;\n }\n\n onMount(() => {\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore) {\n loadMore();\n }\n },\n { rootMargin: '100px' }\n );\n\n if (loadMoreTrigger) {\n observer.observe(loadMoreTrigger);\n }\n });\n\n onDestroy(() => {\n if (observer) {\n observer.disconnect();\n }\n });\n\n // Re-observe when trigger element changes\n $effect(() => {\n if (observer && loadMoreTrigger) {\n observer.disconnect();\n observer.observe(loadMoreTrigger);\n }\n });\n\n function groupEventsByDate(eventList) {\n const groups = {};\n\n for (const event of eventList) {\n const dateKey = event.date; // YYYY-MM-DD format\n if (!groups[dateKey]) {\n groups[dateKey] = [];\n }\n groups[dateKey].push(event);\n }\n\n // Convert to array sorted by date\n return Object.entries(groups)\n .sort(([a], [b]) => new Date(a) - new Date(b))\n .map(([date, events]) => ({\n date,\n events,\n formattedDate: formatGroupDate(events),\n }));\n }\n\n function formatGroupDate(events) {\n // Use the first event in the group to get timezone-aware date parts\n const firstEvent = events[0];\n if (!firstEvent?.startDateTime) return { month: '', day: '', weekday: '' };\n const parts = getDateParts(firstEvent.startDateTime, firstEvent.timeZone);\n return {\n month: parts.month.toUpperCase(),\n day: String(parts.date).padStart(2, '0'),\n weekday: parts.day.toUpperCase(),\n };\n }\n\n function handleEventClick(event) {\n oneventClick?.(event);\n }\n\n function handleKeydown(e, event) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleEventClick(event);\n }\n }\n</script>\n\n<section class=\"flex flex-col gap-0\" class:no-date-column={!showDateColumn} aria-label={labels.eventListings || 'Event listings'}>\n <h2 class=\"sr-only\">{labels.eventListGroupedByDate || 'Event list grouped by date'}</h2>\n {#each groupedEvents as group}\n <div class=\"date-group flex border-b border-gray-200 dark:border-gray-700 last:border-b-0\" role=\"group\" aria-label=\"Events on {group.events[0]?.startDateTime ? formatFullDate(group.events[0].startDateTime, group.events[0].timeZone) : group.date}\">\n <!-- Date Column -->\n {#if showDateColumn}\n <div class=\"w-16 min-w-16 py-4 px-2.5 flex flex-col items-center justify-start bg-gray-50 dark:bg-gray-900 border-r border-gray-200 dark:border-gray-700 max-sm:w-12 max-sm:min-w-12 max-sm:py-2.5 max-sm:px-1.5\" aria-hidden=\"true\">\n <span class=\"text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight\">{group.formattedDate.month}</span>\n <span class=\"text-2xl max-sm:text-lg font-bold text-gray-900 dark:text-white leading-tight\">{group.formattedDate.day}</span>\n <span class=\"text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight\">{group.formattedDate.weekday}</span>\n </div>\n {/if}\n\n <!-- Events Column -->\n <ul class=\"events-column flex-1 flex flex-col list-none p-0 m-0\">\n {#each group.events as event, eventIndex}\n {@const eventStatus = getBrowseStatus(event)}\n {@const isUnavailable = isEventUnavailable(eventStatus)}\n <li class=\"list-none\">\n <div\n class=\"event-row flex gap-4 max-sm:gap-2.5 p-5 max-sm:p-3 cursor-pointer transition-colors duration-150 bg-white dark:bg-gray-800 border-b border-gray-200/50 dark:border-gray-700/50 last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-700 dark:focus:outline-blue-400 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-blue-700 dark:focus-visible:outline-blue-400 focus-visible:-outline-offset-2\"\n class:row-unavailable={isUnavailable}\n onclick={() => handleEventClick(event)}\n onkeydown={(e) => handleKeydown(e, event)}\n tabindex=\"0\"\n role=\"button\"\n aria-label={`${event.name} on ${event.startDateTime ? formatFullDate(event.startDateTime, event.timeZone) : group.date} at ${event.startDateTime ? formatEventTime(event.startDateTime, event.timeZone) : ''}, ${eventStatus?.text || event.status || labels.statusOnSale || 'On Sale'}. ${labels.pressEnterToView || 'Press Enter to view details'}`}\n >\n <!-- Event Image -->\n <div class=\"w-36 h-24 min-w-36 max-sm:w-20 max-sm:h-16 max-sm:min-w-20 rounded-lg overflow-hidden bg-gray-50 dark:bg-gray-900 flex items-center justify-center\" aria-hidden=\"true\">\n <img\n src={event.image || PLACEHOLDER_IMAGE}\n alt=\"\"\n class=\"w-full h-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n\n <!-- Event Details (visually shown but also in aria-label, so hide from SR) -->\n <div class=\"flex-1 flex flex-col gap-1.5 min-w-0\" aria-hidden=\"true\">\n <h3 class=\"text-lg max-sm:text-sm font-semibold text-gray-900 dark:text-white m-0 leading-snug\">{event.name}</h3>\n <time class=\"text-sm max-sm:text-xs font-medium text-gray-600 dark:text-gray-300\" datetime={event.startDateTime || group.date}>{event.startDateTime ? formatEventTime(event.startDateTime, event.timeZone) : ''}</time>\n {#if event.description}\n <p class=\"event-description text-sm text-gray-600 dark:text-gray-300 mt-1.5 mb-0 line-clamp-2 max-sm:hidden\">{event.description}</p>\n {/if}\n </div>\n\n <!-- Status / Scarcity Badge -->\n <div class=\"flex items-start pt-0.5\" aria-hidden=\"true\">\n {#if eventStatus}\n <span class=\"status-badge status-{eventStatus.type}\">{eventStatus.text}</span>\n {:else if event.ticketsTotal > 0 || event.ticketsRemaining === 0}\n <ScarcityBadge\n remaining={event.ticketsRemaining ?? 0}\n total={event.ticketsTotal ?? 0}\n context=\"browse\"\n {labels}\n />\n {/if}\n </div>\n </div>\n </li>\n {/each}\n </ul>\n </div>\n {/each}\n\n <!-- Infinite scroll trigger -->\n {#if hasMore}\n <div bind:this={loadMoreTrigger} class=\"flex justify-center items-center p-6 text-gray-600 dark:text-gray-300\" role=\"status\" aria-live=\"polite\">\n <span class=\"text-sm\">{labels.loadingMoreEvents || 'Loading more events...'}</span>\n </div>\n {/if}\n</section>\n\n<style>\n /* When no date column, remove left border styling */\n .no-date-column .date-group {\n border-bottom: 0;\n }\n\n .no-date-column .events-column {\n border-left: 0;\n }\n\n .event-description {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n /* Unavailable row dimming */\n .row-unavailable {\n opacity: 0.6;\n }\n\n .row-unavailable img {\n filter: grayscale(0.5);\n }\n\n /* Status badges -- distinct visual treatments matching gallery cards */\n .status-badge {\n display: inline-flex;\n align-items: center;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 700;\n padding: 0.25rem 0.625rem;\n border-radius: 0.25rem;\n white-space: nowrap;\n letter-spacing: 0.02em;\n }\n\n .status-cancelled {\n background-color: rgb(254 226 226);\n color: rgb(153 27 27);\n text-decoration: line-through;\n text-decoration-thickness: 1.5px;\n\n :global(.dark) & {\n background-color: rgb(127 29 29 / 0.4);\n color: rgb(252 165 165);\n }\n }\n\n .status-past {\n background-color: rgb(243 244 246);\n color: rgb(107 114 128);\n\n :global(.dark) & {\n background-color: rgb(31 41 55);\n color: rgb(156 163 175);\n }\n }\n\n .status-sold_out {\n background-color: rgb(254 226 226);\n color: rgb(185 28 28);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: 0.65rem;\n\n :global(.dark) & {\n background-color: rgb(127 29 29 / 0.4);\n color: rgb(248 113 113);\n }\n }\n\n .status-sales_ended {\n background-color: rgb(243 244 246);\n color: rgb(107 114 128);\n border: 1px solid rgb(209 213 219);\n\n :global(.dark) & {\n background-color: rgb(31 41 55);\n color: rgb(156 163 175);\n border-color: rgb(75 85 99);\n }\n }\n\n .status-coming_soon {\n background-color: rgb(224 231 255);\n color: rgb(67 56 202);\n\n :global(.dark) & {\n background-color: rgb(49 46 129 / 0.4);\n color: rgb(165 180 252);\n }\n }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .event-row {\n transition: none;\n }\n }\n\n /* Screen reader only text */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n</style>\n","<script>\n import { onMount, onDestroy } from 'svelte';\n import { fetchPublicCollection } from '../../lib/api/events.ts';\n import { getImageUrl } from '$lib/utils/utils.js';\n import { EmptyState } from '@getmicdrop/svelte-components';\n import GalleryCard from '../Calendar/GalleryCard.svelte';\n import GroupedListView from '../Calendar/GroupedListView.svelte';\n import SkeletonLoader from '../SkeletonLoader/SkeletonLoader.svelte';\n\n let {\n collectionId,\n organizationId = '',\n onNavigateToEvent,\n password: initialPassword = undefined,\n displayMode: initialDisplayMode = 'gallery',\n showViewSwitcher = true,\n labels = {},\n } = $props();\n\n let collection = $state(null);\n let isLoading = $state(true);\n let error = $state(null);\n let isMounted = $state(false);\n let passwordRequired = $state(false);\n let passwordInput = $state('');\n let passwordError = $state(false);\n let activeDisplayMode = $state(initialDisplayMode);\n\n // Transform collection events into the shape GalleryCard expects\n function toGalleryEvent(event) {\n return {\n id: event.id,\n name: event.title || event.name || '',\n date: event.startDateTime ? event.startDateTime.split('T')[0] : '',\n image: event.image ? getImageUrl(event.image) : '',\n timeline: event.startDateTime ? formatTimeline(event.startDateTime) : '',\n status: event.status || 'on_sale',\n slug: event.slug || '',\n ticketsRemaining: event.ticketsRemaining ?? event.ticketsAvailable,\n ticketsTotal: event.ticketsTotal ?? event.capacity,\n };\n }\n\n // Transform collection events into the shape GroupedListView expects\n function toListEvent(event) {\n return {\n id: event.id,\n name: event.title || event.name || '',\n date: event.startDateTime ? event.startDateTime.split('T')[0] : '',\n startDateTime: event.startDateTime || '',\n image: event.image ? getImageUrl(event.image) : '',\n status: event.status || 'on_sale',\n slug: event.slug || '',\n description: event.description || '',\n ticketsRemaining: event.ticketsRemaining ?? event.ticketsAvailable,\n ticketsTotal: event.ticketsTotal ?? event.capacity,\n };\n }\n\n function formatTimeline(iso) {\n if (!iso) return '';\n const date = new Date(iso);\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n }\n\n let displayEvents = $derived(\n collection ? sortByStartTime(collection.events || []) : []\n );\n\n let galleryEvents = $derived(displayEvents.map(toGalleryEvent));\n let listEvents = $derived(displayEvents.map(toListEvent));\n\n // Only show view switcher when there are 2+ events\n let canShowSwitcher = $derived(showViewSwitcher && displayEvents.length >= 2);\n\n function sortByStartTime(events) {\n return [...events].sort((a, b) => {\n if (!a.startDateTime && !b.startDateTime) return 0;\n if (!a.startDateTime) return 1;\n if (!b.startDateTime) return -1;\n return new Date(a.startDateTime).getTime() - new Date(b.startDateTime).getTime();\n });\n }\n\n function handleEventClick(galleryEvent) {\n if (onNavigateToEvent) {\n const eventData = galleryEvent.detail || galleryEvent;\n onNavigateToEvent(eventData.id, eventData.slug || '');\n }\n }\n\n async function loadCollection(pwd) {\n if (!isMounted) return;\n if (!collectionId) {\n error = labels.noCollectionIdProvided || 'No collection ID provided';\n isLoading = false;\n return;\n }\n\n isLoading = true;\n error = null;\n passwordError = false;\n\n try {\n const data = await fetchPublicCollection(collectionId, pwd);\n if (!isMounted) return;\n\n if (data) {\n // Check if the response indicates password is required\n if (data.passwordRequired || data.error?.code === 'PASSWORD_REQUIRED') {\n passwordRequired = true;\n isLoading = false;\n return;\n }\n collection = data;\n passwordRequired = false;\n } else {\n // A null response after providing a password likely means wrong password\n if (pwd) {\n passwordRequired = true;\n passwordError = true;\n isLoading = false;\n return;\n }\n error = labels.failedToLoadCollection || 'Failed to load collection';\n }\n } catch (err) {\n if (isMounted) {\n // Check for password-related error responses\n const msg = err.message || '';\n if (msg.includes('401') || msg.includes('403') || msg.includes('password')) {\n passwordRequired = true;\n } else {\n error = msg || 'Failed to load collection';\n }\n }\n } finally {\n if (isMounted) {\n isLoading = false;\n }\n }\n }\n\n function handlePasswordSubmit(e) {\n e.preventDefault();\n if (!passwordInput.trim()) return;\n loadCollection(passwordInput);\n }\n\n onMount(async () => {\n isMounted = true;\n await loadCollection(initialPassword);\n });\n\n onDestroy(() => {\n isMounted = false;\n });\n</script>\n\n<div class=\"collection-view\">\n {#if isLoading}\n <SkeletonLoader type=\"gallery\" />\n {:else if passwordRequired}\n <div class=\"password-container\">\n <div class=\"password-card\">\n <h2 class=\"password-title\">{labels.collectionPrivateTitle || 'This collection is private'}</h2>\n <p class=\"password-description\">{labels.collectionPrivateDescription || 'Please enter the password to view this collection.'}</p>\n <form onsubmit={handlePasswordSubmit} class=\"password-form\">\n <input\n type=\"password\"\n bind:value={passwordInput}\n placeholder={labels.enterPassword || \"Enter password\"}\n class=\"password-input\"\n class:password-input-error={passwordError}\n />\n {#if passwordError}\n <p class=\"password-error-text\">{labels.incorrectPassword || 'Incorrect password. Please try again.'}</p>\n {/if}\n <button type=\"submit\" class=\"password-submit\">{labels.viewCollection || 'View Collection'}</button>\n </form>\n </div>\n </div>\n {:else if error}\n <div class=\"error-container\">\n <p class=\"error-text\">{labels.errorPrefix || 'Error:'} {error}</p>\n </div>\n {:else if collection}\n <!-- Cover Image with Blur -->\n {#if collection.coverImage}\n {@const imageUrl = getImageUrl(collection.coverImage)}\n <div class=\"cover-image\">\n <div class=\"cover-blur\" style=\"background-image: url({imageUrl})\"></div>\n <img src={imageUrl} alt={collection.collectionTitle} />\n </div>\n {/if}\n\n <!-- Collection Header -->\n <div class=\"collection-header\">\n <h1 class=\"collection-title\">{collection.collectionTitle}</h1>\n {#if collection.summary}\n <p class=\"collection-summary\">{collection.summary}</p>\n {/if}\n {#if collection.description}\n <div class=\"collection-description\">{collection.description}</div>\n {/if}\n </div>\n\n <!-- Events Section -->\n <div class=\"events-section\">\n <div class=\"events-section-header\">\n <h2 class=\"events-heading\">Events ({displayEvents.length})</h2>\n\n {#if canShowSwitcher}\n <div class=\"view-switcher\" role=\"group\" aria-label={labels.viewOptions || \"Display mode\"}>\n <button\n type=\"button\"\n class=\"view-switcher-btn\"\n class:view-switcher-btn-active={activeDisplayMode === 'gallery'}\n onclick={() => activeDisplayMode = 'gallery'}\n aria-label={labels.galleryView || \"Gallery view\"}\n aria-pressed={activeDisplayMode === 'gallery'}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect>\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"view-switcher-btn\"\n class:view-switcher-btn-active={activeDisplayMode === 'list'}\n onclick={() => activeDisplayMode = 'list'}\n aria-label={labels.listView || \"List view\"}\n aria-pressed={activeDisplayMode === 'list'}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line>\n <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line>\n <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n {/if}\n </div>\n\n {#if displayEvents.length === 0}\n <EmptyState\n message={labels.noUpcomingEvents || \"No upcoming events\"}\n subtext={labels.noUpcomingEventsSubtext || \"There are no events in this collection right now. Check back soon!\"}\n />\n {:else if activeDisplayMode === 'list'}\n <GroupedListView\n events={listEvents}\n filterFutureOnly={false}\n oneventClick={handleEventClick}\n />\n {:else}\n <div class=\"events-grid\">\n {#each galleryEvents as event (event.id)}\n <GalleryCard {event} oneventClick={handleEventClick} />\n {/each}\n </div>\n {/if}\n </div>\n {/if}\n</div>\n\n<style>\n .collection-view {\n width: 100%;\n max-width: 64rem;\n margin-left: auto;\n margin-right: auto;\n padding-left: 1rem;\n padding-right: 1rem;\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n .error-container,\n .password-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 50vh;\n text-align: center;\n }\n\n .error-text {\n color: hsl(var(--status-sold-out, 0 72% 51%));\n }\n\n /* Password gate */\n .password-card {\n border-radius: 0.5rem;\n padding: 2rem;\n max-width: 24rem;\n width: 100%;\n background: hsl(var(--surface-primary, 0 0% 100%));\n box-shadow: 0 2px 10px color-mix(in srgb, black 10%, transparent);\n }\n\n .password-title {\n font-size: 1.25rem;\n line-height: 1.75rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n .password-description {\n font-size: 0.875rem;\n line-height: 1.25rem;\n margin-bottom: 1.5rem;\n color: hsl(var(--text-secondary, 0 0% 45%));\n }\n\n .password-form {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n }\n\n .password-input {\n width: 100%;\n padding: 0.5rem 0.75rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 85%));\n color: hsl(var(--text-primary, 0 0% 10%));\n background: hsl(var(--surface-primary, 0 0% 100%));\n }\n\n .password-input:focus {\n outline: none;\n border-color: hsl(var(--brand-primary, 220 90% 56%));\n box-shadow: 0 0 0 2px hsl(var(--brand-primary, 220 90% 56%) / 0.2);\n }\n\n .password-input-error {\n border-color: hsl(var(--status-sold-out, 0 72% 51%));\n }\n\n .password-error-text {\n font-size: 0.75rem;\n line-height: 1rem;\n color: hsl(var(--status-sold-out, 0 72% 51%));\n }\n\n .password-submit {\n padding: 0.5rem 1rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 600;\n background: hsl(var(--brand-primary, 220 90% 56%));\n color: hsl(var(--text-on-primary, 0 0% 100%));\n }\n\n .password-submit:hover {\n filter: brightness(0.95);\n }\n\n /* Cover Image with blur background */\n .cover-image {\n position: relative;\n width: 100%;\n overflow: hidden;\n border-radius: 0.5rem;\n margin-bottom: 2rem;\n height: 350px;\n }\n\n .cover-blur {\n position: absolute;\n inset: 0;\n background-size: cover;\n background-position: center;\n filter: blur(24px) saturate(1.2);\n transform: scale(1.15);\n }\n\n .cover-image img {\n position: relative;\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n /* Header */\n .collection-header {\n margin-bottom: 2rem;\n }\n\n .collection-title {\n font-size: 1.875rem;\n line-height: 2.25rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n .collection-summary {\n font-size: 1.125rem;\n line-height: 1.75rem;\n margin-bottom: 1rem;\n color: hsl(var(--text-secondary, 0 0% 45%));\n }\n\n .collection-description {\n line-height: 1.625;\n color: hsl(var(--text-secondary, 0 0% 35%));\n }\n\n /* Events Section */\n .events-section {\n margin-bottom: 2rem;\n }\n\n .events-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 1rem;\n }\n\n .events-heading {\n font-size: 1.5rem;\n line-height: 2rem;\n font-weight: 700;\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n /* View Switcher */\n .view-switcher {\n display: flex;\n gap: 0.25rem;\n padding: 0.25rem;\n border-radius: 0.5rem;\n background: hsl(var(--surface-secondary, 0 0% 96%));\n }\n\n .view-switcher-btn {\n padding: 0.375rem;\n border-radius: 0.375rem;\n transition: color 0.15s;\n color: hsl(var(--text-secondary, 0 0% 45%));\n }\n\n .view-switcher-btn:hover {\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n .view-switcher-btn-active {\n color: hsl(var(--text-primary, 0 0% 10%));\n background: hsl(var(--surface-primary, 0 0% 100%));\n box-shadow: 0 1px 2px color-mix(in srgb, black 8%, transparent);\n }\n\n .events-grid {\n display: grid;\n gap: 1.5rem;\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n }\n\n /* Responsive */\n @media (max-width: 640px) {\n .cover-image {\n height: 250px;\n }\n\n .collection-title {\n font-size: 1.5rem;\n line-height: 2rem;\n }\n\n .events-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n\n @media (max-width: 400px) {\n .events-grid {\n grid-template-columns: 1fr;\n }\n }\n</style>\n"],"names":["events","$","$$props","initialCount","loadMoreCount","showDateColumn","filterFutureOnly","labels","displayedCount","loadMoreTrigger","observer","filteredEvents","filterTodayAndFuture","groupedEvents","groupEventsByDate","hasMore","loadMore","onMount","entries","onDestroy","eventList","groups","event","dateKey","a","b","date","formatGroupDate","firstEvent","parts","getDateParts","handleEventClick","handleKeydown","e","section","root","h2","node","group","div","root_1","div_1","root_2","span","span_1","span_2","$$render","consequent","ul","node_1","eventStatus","getBrowseStatus","isUnavailable","isEventUnavailable","li","root_3","div_2","div_3","img","div_4","h3","time","p","root_4","text_6","consequent_1","div_5","span_3","root_5","text_7","ScarcityBadge","$$anchor","consequent_2","consequent_3","classes_1","$0","PLACEHOLDER_IMAGE","text_4","formatFullDate","formatEventTime","div_6","root_7","span_4","$$value","consequent_4","classes","initialPassword","initialDisplayMode","showViewSwitcher","collection","isLoading","error","isMounted","passwordRequired","passwordInput","passwordError","activeDisplayMode","toGalleryEvent","getImageUrl","formatTimeline","toListEvent","iso","displayEvents","sortByStartTime","galleryEvents","listEvents","canShowSwitcher","galleryEvent","eventData","loadCollection","pwd","data","fetchPublicCollection","err","msg","handlePasswordSubmit","SkeletonLoader","form","input","p_1","button","p_2","imageUrl","root_6","node_2","h1","p_3","consequent_5","div_7","root_8","consequent_6","div_8","div_9","h2_1","div_10","root_9","button_1","button_2","classes_2","consequent_7","EmptyState","GroupedListView","div_11","root_12","GalleryCard","consequent_8","consequent_9","alternate","text_5","text_8","consequent_10"],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import "svelte/internal/disclose-version";
|
|
2
|
+
import * as e from "svelte/internal/client";
|
|
3
|
+
import { f as H, P as M, b as D, c as Z } from "./VenueCalendar-B5Y29ZJD.js";
|
|
4
|
+
var O = e.from_html('<div class="hero-image-container relative w-full bg-gray-100 dark:bg-gray-700 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-gray-100 dark:bg-gray-700 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-gray-300 dark:text-gray-600"><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-blue-600 dark:bg-blue-400"></span> Series', 1), V = e.from_html('<span class="w-1.5 h-1.5 rounded-full bg-blue-600 dark:bg-blue-400"></span> Collection', 1), z = e.from_html('<span class="text-gray-400 dark:text-gray-500">·</span> ', 1), J = e.from_html('<p class="text-base text-gray-600 dark:text-gray-300 font-medium"> <!></p>'), K = e.from_html('<div class="featured-hero rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 overflow-hidden"><!> <div class="p-4 sm:p-5"><div class="inline-flex items-center gap-1.5 text-xs font-semibold text-blue-700 dark:text-blue-400 uppercase tracking-wide mb-2"><!> <!></div> <h2 class="hero-title text-xl sm:text-2xl font-bold text-gray-900 dark:text-white mb-2 svelte-ndk2q7"> </h2> <!></div></div>'), Q = e.from_html('<span class="text-gray-400 dark:text-gray-500 mx-1">·</span> ', 1), U = e.from_html('<p class="hero-description text-sm text-gray-600 dark:text-gray-400 mt-2 svelte-ndk2q7"> </p>'), W = e.from_html('<div class="featured-hero featured-hero-clickable rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 overflow-hidden cursor-pointer hover:border-gray-300 dark:hover:border-gray-600 focus-visible:outline-2 focus-visible:outline-blue-700 dark:focus-visible:outline-blue-500 focus-visible:outline-offset-2 svelte-ndk2q7" tabindex="0" role="button"><div class="hero-image-container relative w-full bg-gray-100 dark:bg-gray-700 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-gray-900 dark:text-white mb-2 svelte-ndk2q7"> </h2> <p class="text-base text-gray-600 dark:text-gray-300 font-medium"> <!></p> <!></div></div>'), X = e.from_html('<div class="flex items-center justify-center py-12 rounded-lg border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900"><p class="text-sm text-gray-500 dark:text-gray-400">No upcoming events to feature</p></div>'), Y = e.from_html('<section class="w-full" aria-label="Featured event"><!></section>');
|
|
5
|
+
function te(F, h) {
|
|
6
|
+
e.push(h, !0);
|
|
7
|
+
let A = e.prop(h, "events", 19, () => []), o = e.prop(h, "featuredItem", 3, null), T = e.derived(() => H(A())), r = e.derived(() => e.get(T).length > 0 ? e.get(T)[0] : null);
|
|
8
|
+
function E() {
|
|
9
|
+
e.get(r) && h.oneventClick?.(e.get(r));
|
|
10
|
+
}
|
|
11
|
+
var x = Y(), I = e.child(x);
|
|
12
|
+
{
|
|
13
|
+
var L = (d) => {
|
|
14
|
+
var l = K(), n = e.child(l);
|
|
15
|
+
{
|
|
16
|
+
var y = (t) => {
|
|
17
|
+
var a = O(), f = e.child(a);
|
|
18
|
+
e.reset(a), e.template_effect(() => e.set_attribute(f, "src", o().image)), e.append(t, a);
|
|
19
|
+
}, b = (t) => {
|
|
20
|
+
var a = R();
|
|
21
|
+
e.append(t, a);
|
|
22
|
+
};
|
|
23
|
+
e.if(n, (t) => {
|
|
24
|
+
o().image ? t(y) : t(b, !1);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
var v = e.sibling(n, 2), m = e.child(v), g = e.child(m);
|
|
28
|
+
{
|
|
29
|
+
var u = (t) => {
|
|
30
|
+
var a = S();
|
|
31
|
+
e.next(), e.append(t, a);
|
|
32
|
+
}, k = (t) => {
|
|
33
|
+
var a = V();
|
|
34
|
+
e.next(), e.append(t, a);
|
|
35
|
+
};
|
|
36
|
+
e.if(g, (t) => {
|
|
37
|
+
o().type === "series" ? t(u) : t(k, !1);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
var w = e.sibling(g, 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(w, (t) => {
|
|
47
|
+
o().subtitle && t(q);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
e.reset(m);
|
|
51
|
+
var c = e.sibling(m, 2), i = e.child(c, !0);
|
|
52
|
+
e.reset(c);
|
|
53
|
+
var s = e.sibling(c, 2);
|
|
54
|
+
{
|
|
55
|
+
var p = (t) => {
|
|
56
|
+
var a = J(), f = e.child(a), N = e.sibling(f);
|
|
57
|
+
{
|
|
58
|
+
var B = (_) => {
|
|
59
|
+
var C = e.text();
|
|
60
|
+
e.template_effect((G) => e.set_text(C, `at ${G ?? ""}`), [
|
|
61
|
+
() => Z(e.get(r).startDateTime, e.get(r).timeZone)
|
|
62
|
+
]), e.append(_, C);
|
|
63
|
+
};
|
|
64
|
+
e.if(N, (_) => {
|
|
65
|
+
e.get(r).startDateTime && _(B);
|
|
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(s, (t) => {
|
|
73
|
+
e.get(r) && t(p);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
e.reset(v), e.reset(l), e.template_effect(() => e.set_text(i, o().title)), e.append(d, l);
|
|
77
|
+
}, P = (d) => {
|
|
78
|
+
var l = W(), n = e.child(l), y = e.child(n);
|
|
79
|
+
e.reset(n);
|
|
80
|
+
var b = e.sibling(n, 2), v = e.child(b), m = e.child(v, !0);
|
|
81
|
+
e.reset(v);
|
|
82
|
+
var g = e.sibling(v, 2), u = e.child(g), k = e.sibling(u);
|
|
83
|
+
{
|
|
84
|
+
var w = (i) => {
|
|
85
|
+
var s = Q(), p = e.sibling(e.first_child(s));
|
|
86
|
+
e.template_effect((t) => e.set_text(p, ` ${t ?? ""}`), [
|
|
87
|
+
() => Z(e.get(r).startDateTime, e.get(r).timeZone)
|
|
88
|
+
]), e.append(i, s);
|
|
89
|
+
};
|
|
90
|
+
e.if(k, (i) => {
|
|
91
|
+
e.get(r).startDateTime && i(w);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
e.reset(g);
|
|
95
|
+
var q = e.sibling(g, 2);
|
|
96
|
+
{
|
|
97
|
+
var c = (i) => {
|
|
98
|
+
var s = U(), p = e.child(s, !0);
|
|
99
|
+
e.reset(s), e.template_effect(() => e.set_text(p, e.get(r).description)), e.append(i, s);
|
|
100
|
+
};
|
|
101
|
+
e.if(q, (i) => {
|
|
102
|
+
e.get(r).description && i(c);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
e.reset(b), e.reset(l), e.template_effect(
|
|
106
|
+
(i, s) => {
|
|
107
|
+
e.set_attribute(l, "aria-label", `${e.get(r).name ?? ""}, ${i ?? ""}. Press Enter to view details.`), e.set_attribute(y, "src", e.get(r).image || M), e.set_text(m, e.get(r).name), e.set_text(u, `${s ?? ""} `);
|
|
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", l, E), e.delegated("keydown", l, (i) => (i.key === "Enter" || i.key === " ") && E()), e.append(d, l);
|
|
114
|
+
}, j = (d) => {
|
|
115
|
+
var l = X();
|
|
116
|
+
e.append(d, l);
|
|
117
|
+
};
|
|
118
|
+
e.if(I, (d) => {
|
|
119
|
+
o() ? d(L) : e.get(r) ? d(P, 1) : d(j, !1);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
e.reset(x), e.append(F, x), e.pop();
|
|
123
|
+
}
|
|
124
|
+
e.delegate(["click", "keydown"]);
|
|
125
|
+
export {
|
|
126
|
+
te as default
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=FeaturedView.legacy-CVEXHJBx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeaturedView.legacy-CVEXHJBx.js","sources":["../src/components/Calendar/FeaturedView.legacy.svelte"],"sourcesContent":["<script>\n import { formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\n import { PLACEHOLDER_IMAGE } from \"$lib/utils/constants.js\";\n import { filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\n\n let {\n events = [],\n featuredItem = null,\n oneventClick,\n } = $props();\n\n // Filter to today and future, sorted chronologically\n let futureEvents = $derived(filterTodayAndFuture(events));\n\n let heroEvent = $derived(futureEvents.length > 0 ? futureEvents[0] : null);\n\n function handleClick() {\n if (heroEvent) {\n oneventClick?.(heroEvent);\n }\n }\n</script>\n\n<section class=\"w-full\" aria-label=\"Featured event\">\n {#if featuredItem}\n <!-- Series or Collection hero -->\n <div class=\"featured-hero rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 overflow-hidden\">\n {#if featuredItem.image}\n <div class=\"hero-image-container relative w-full bg-gray-100 dark:bg-gray-700 overflow-hidden\">\n <img\n src={featuredItem.image}\n alt=\"\"\n class=\"hero-image\"\n aria-hidden=\"true\"\n />\n </div>\n {:else}\n <div class=\"hero-image-container relative w-full bg-gray-100 dark:bg-gray-700 overflow-hidden flex items-center justify-center\">\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-gray-300 dark:text-gray-600\"><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>\n </div>\n {/if}\n\n <div class=\"p-4 sm:p-5\">\n <div class=\"inline-flex items-center gap-1.5 text-xs font-semibold text-blue-700 dark:text-blue-400 uppercase tracking-wide mb-2\">\n {#if featuredItem.type === 'series'}\n <span class=\"w-1.5 h-1.5 rounded-full bg-blue-600 dark:bg-blue-400\"></span>\n Series\n {:else}\n <span class=\"w-1.5 h-1.5 rounded-full bg-blue-600 dark:bg-blue-400\"></span>\n Collection\n {/if}\n {#if featuredItem.subtitle}\n <span class=\"text-gray-400 dark:text-gray-500\">·</span>\n {featuredItem.subtitle}\n {/if}\n </div>\n\n <h2 class=\"hero-title text-xl sm:text-2xl font-bold text-gray-900 dark:text-white mb-2\">{featuredItem.title}</h2>\n\n {#if heroEvent}\n <p class=\"text-base text-gray-600 dark:text-gray-300 font-medium\">\n Next: {formatFullDate(heroEvent.startDateTime, heroEvent.timeZone)}\n {#if heroEvent.startDateTime}\n at {formatEventTime(heroEvent.startDateTime, heroEvent.timeZone)}\n {/if}\n </p>\n {/if}\n </div>\n </div>\n {:else if heroEvent}\n <!-- Single event hero -->\n <div\n class=\"featured-hero featured-hero-clickable rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 overflow-hidden cursor-pointer hover:border-gray-300 dark:hover:border-gray-600 focus-visible:outline-2 focus-visible:outline-blue-700 dark:focus-visible:outline-blue-500 focus-visible:outline-offset-2\"\n onclick={handleClick}\n onkeydown={(e) => (e.key === 'Enter' || e.key === ' ') && handleClick()}\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"{heroEvent.name}, {formatFullDate(heroEvent.startDateTime, heroEvent.timeZone)}. Press Enter to view details.\"\n >\n <div class=\"hero-image-container relative w-full bg-gray-100 dark:bg-gray-700 overflow-hidden\">\n <img\n src={heroEvent.image || PLACEHOLDER_IMAGE}\n alt=\"\"\n class=\"hero-image\"\n aria-hidden=\"true\"\n />\n </div>\n\n <div class=\"p-4 sm:p-5\" aria-hidden=\"true\">\n <h2 class=\"hero-title text-xl sm:text-2xl font-bold text-gray-900 dark:text-white mb-2\">{heroEvent.name}</h2>\n\n <p class=\"text-base text-gray-600 dark:text-gray-300 font-medium\">\n {formatFullDate(heroEvent.startDateTime, heroEvent.timeZone)}\n {#if heroEvent.startDateTime}\n <span class=\"text-gray-400 dark:text-gray-500 mx-1\">·</span>\n {formatEventTime(heroEvent.startDateTime, heroEvent.timeZone)}\n {/if}\n </p>\n\n {#if heroEvent.description}\n <p class=\"hero-description text-sm text-gray-600 dark:text-gray-400 mt-2\">{heroEvent.description}</p>\n {/if}\n </div>\n </div>\n {:else}\n <!-- Empty state -->\n <div class=\"flex items-center justify-center py-12 rounded-lg border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900\">\n <p class=\"text-sm text-gray-500 dark:text-gray-400\">No upcoming events to feature</p>\n </div>\n {/if}\n</section>\n\n<style>\n .hero-image-container {\n aspect-ratio: 16 / 9;\n }\n\n .hero-image {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n .hero-title {\n line-height: 1.3;\n }\n\n .featured-hero-clickable {\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n }\n\n .featured-hero-clickable:hover {\n box-shadow: 0 4px 12px color-mix(in srgb, black 10%, transparent);\n }\n\n .featured-hero-clickable:focus {\n outline: none;\n }\n\n .hero-description {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .featured-hero-clickable {\n transition: none;\n }\n }\n</style>\n"],"names":["events","$","$$props","featuredItem","futureEvents","filterTodayAndFuture","heroEvent","handleClick","section","root","div","root_1","div_1","root_2","img","div_2","root_3","$$render","consequent","alternate","div_3","node_1","div_4","consequent_1","alternate_1","text","consequent_2","h2","p","root_7","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_11","text_7","consequent_7","$0","PLACEHOLDER_IMAGE","text_4","e","div_8","root_12","consequent_8","alternate_2"],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import "svelte/internal/disclose-version";
|
|
2
|
+
import * as e from "svelte/internal/client";
|
|
3
|
+
import { onMount as C, onDestroy as x } from "svelte";
|
|
4
|
+
import { f as M, G as k } from "./VenueCalendar-B5Y29ZJD.js";
|
|
5
|
+
var w = e.from_html('<li class="list-none"><!></li>'), E = e.from_html('<div class="flex items-center justify-center gap-2 py-2 p-6" role="status" aria-live="polite"><span class="text-sm text-gray-500 dark:text-gray-400">Loading more events...</span></div>'), G = e.from_html('<section class="w-full" aria-label="Events gallery"><h2 class="sr-only svelte-lb0ck7">Upcoming events</h2> <ul class="grid grid-cols-1 gap-4 bg-gray-50 dark:bg-gray-900 p-2 sm:grid-cols-2 sm:gap-4 sm:p-3 md:grid-cols-3 md:gap-5 md:p-4 lg:grid-cols-4 lg:gap-6 lg:p-5" role="list"></ul> <!></section>');
|
|
6
|
+
function A(v, l) {
|
|
7
|
+
e.push(l, !0);
|
|
8
|
+
let p = e.prop(l, "events", 19, () => []), u = e.prop(l, "initialCount", 3, 12), f = e.prop(l, "loadMoreCount", 3, 12), a = u(), i, t, g = e.derived(() => M(p())), m = e.derived(() => e.get(g).slice(0, a)), c = e.derived(() => a < e.get(g).length);
|
|
9
|
+
function y() {
|
|
10
|
+
a += f();
|
|
11
|
+
}
|
|
12
|
+
C(() => {
|
|
13
|
+
t = new IntersectionObserver(
|
|
14
|
+
(r) => {
|
|
15
|
+
r[0].isIntersecting && e.get(c) && y();
|
|
16
|
+
},
|
|
17
|
+
{ rootMargin: "100px" }
|
|
18
|
+
), i && t.observe(i);
|
|
19
|
+
}), x(() => {
|
|
20
|
+
t && t.disconnect();
|
|
21
|
+
}), e.user_effect(() => {
|
|
22
|
+
t && i && (t.disconnect(), t.observe(i));
|
|
23
|
+
});
|
|
24
|
+
var n = G(), d = e.sibling(e.child(n), 2);
|
|
25
|
+
e.each(d, 21, () => e.get(m), e.index, (r, s) => {
|
|
26
|
+
var o = w(), _ = e.child(o);
|
|
27
|
+
k(_, {
|
|
28
|
+
get event() {
|
|
29
|
+
return e.get(s);
|
|
30
|
+
},
|
|
31
|
+
get oneventClick() {
|
|
32
|
+
return l.oneventClick;
|
|
33
|
+
}
|
|
34
|
+
}), e.reset(o), e.append(r, o);
|
|
35
|
+
}), e.reset(d);
|
|
36
|
+
var h = e.sibling(d, 2);
|
|
37
|
+
{
|
|
38
|
+
var b = (r) => {
|
|
39
|
+
var s = E();
|
|
40
|
+
e.bind_this(s, (o) => i = o, () => i), e.append(r, s);
|
|
41
|
+
};
|
|
42
|
+
e.if(h, (r) => {
|
|
43
|
+
e.get(c) && r(b);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
e.reset(n), e.append(v, n), e.pop();
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
A as default
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=GalleryView.legacy-Ci-IHtAe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GalleryView.legacy-Ci-IHtAe.js","sources":["../src/components/Calendar/GalleryView.legacy.svelte"],"sourcesContent":["<script>\n import { onMount, onDestroy } from \"svelte\";\n import GalleryCard from \"./GalleryCard.svelte\";\n import { filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\n\n let { events = [], initialCount = 12, loadMoreCount = 12, oneventClick } = $props();\n\n let displayedCount = initialCount;\n let loadMoreTrigger;\n let observer;\n\n // Filter to today and future, sorted chronologically\n let futureEvents = $derived(filterTodayAndFuture(events));\n let displayedEvents = $derived(futureEvents.slice(0, displayedCount));\n let hasMore = $derived(displayedCount < futureEvents.length);\n\n function loadMore() {\n displayedCount += loadMoreCount;\n }\n\n onMount(() => {\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore) {\n loadMore();\n }\n },\n { rootMargin: '100px' }\n );\n\n if (loadMoreTrigger) {\n observer.observe(loadMoreTrigger);\n }\n });\n\n onDestroy(() => {\n if (observer) {\n observer.disconnect();\n }\n });\n\n // Re-observe when trigger element changes\n $effect(() => {\n if (observer && loadMoreTrigger) {\n observer.disconnect();\n observer.observe(loadMoreTrigger);\n }\n });\n</script>\n\n<section class=\"w-full\" aria-label=\"Events gallery\">\n <h2 class=\"sr-only\">Upcoming events</h2>\n <ul class=\"grid grid-cols-1 gap-4 bg-gray-50 dark:bg-gray-900 p-2 sm:grid-cols-2 sm:gap-4 sm:p-3 md:grid-cols-3 md:gap-5 md:p-4 lg:grid-cols-4 lg:gap-6 lg:p-5\" role=\"list\">\n {#each displayedEvents as event}\n <li class=\"list-none\">\n <GalleryCard {event} {oneventClick} />\n </li>\n {/each}\n </ul>\n\n <!-- Infinite scroll trigger -->\n {#if hasMore}\n <div bind:this={loadMoreTrigger} class=\"flex items-center justify-center gap-2 py-2 p-6\" role=\"status\" aria-live=\"polite\">\n <span class=\"text-sm text-gray-500 dark:text-gray-400\">Loading more events...</span>\n </div>\n {/if}\n</section>\n\n<style>\n /* Screen reader only text */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n</style>\n"],"names":["events","$","$$props","initialCount","loadMoreCount","displayedCount","loadMoreTrigger","observer","futureEvents","filterTodayAndFuture","displayedEvents","hasMore","loadMore","onMount","entries","onDestroy","section","root","ul","$$anchor","event","li","root_1","GalleryCard","node","div","root_2","$$value","$$render","consequent"],"mappings":";;;;;iBAAA;;MAKQA,IAAMC,EAAA,KAAAC,GAAA,UAAA,IAAA,MAAA,EAAA,GAAOC,iCAAe,EAAE,GAAEC,kCAAgB,EAAE,GAEpDC,IAAiBF,EAAY,GAC7BG,GACAC,GAGAC,IAAYP,EAAA,QAAA,MAAYQ,EAAqBT,EAAM,CAAA,CAAA,GACnDU,0BAA2BF,CAAY,EAAC,MAAM,GAAGH,CAAc,CAAA,GAC/DM,IAAOV,EAAA,QAAA,MAAYI,IAAcJ,EAAA,IAAGO,CAAY,EAAC,MAAM;AAElD,WAAAI,IAAW;AAClB,IAAAP,KAAkBD,EAAa;AAAA,EACjC;AAEA,EAAAS,EAAO,MAAO;AACZ,IAAAN,QAAe;AAAA,MACZ,CAAAO,MAAY;AACP,QAAAA,EAAQ,CAAC,EAAE,kBAAcb,EAAA,IAAIU,CAAO,KACtCC,EAAQ;AAAA,MAEZ;AAAA,MACE,EAAA,YAAY,QAAO;AAAA,OAGnBN,KACFC,EAAS,QAAQD,CAAe;AAAA,EAEpC,CAAC,GAEDS,EAAS,MAAO;AACV,IAAAR,KACFA,EAAS,WAAU;AAAA,EAEvB,CAAC,GAGDN,EAAA,YAAO,MAAO;IACRM,KAAYD,MACdC,EAAS,WAAU,GACnBA,EAAS,QAAQD,CAAe;AAAA,EAEpC,CAAC;MAGFU,IAAOC,EAAA,GAELC,sBAFFF,CAAO,GAAA,CAAA;SAELE,GAAE,IAAA,MAAAjB,EAAA,IACMS,CAAe,GAAAT,EAAA,OAAA,CAAAkB,GAAIC,MAAK;QAC5BC,IAAEC,EAAA,eAAFD,CAAE;AACA,IAAAE,EAAWC,GAAA;AAAA;qBAAEJ,CAAK;AAAA;;;;gBADpBC,CAAE,eAAFA,CAAE;AAAA,cAFNH,CAAE;oBAAFA,GAAE,CAAA;;;UAUAO,IAAGC,EAAA;kBAAHD,GAAG,CAAAE,MAAYrB,IAAeqB,GAAA,MAAfrB,CAAe,eAA9BmB,CAAG;AAAA;;YADDd,CAAO,KAAAiB,EAAAC,CAAA;AAAA;;UAXbb,CAAO,eAAPA,CAAO;AAFA;"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import "svelte/internal/disclose-version";
|
|
2
|
+
import * as e from "svelte/internal/client";
|
|
3
|
+
import { onMount as te, onDestroy as ae } from "svelte";
|
|
4
|
+
import { f as re, g as se, a as ie, i as le, P as oe, b as F, c as L, S as ne } from "./VenueCalendar-B5Y29ZJD.js";
|
|
5
|
+
var de = e.from_html('<div class="w-16 min-w-16 py-4 px-2.5 flex flex-col items-center justify-start bg-gray-50 dark:bg-gray-900 border-r border-gray-200 dark:border-gray-700 max-sm:w-12 max-sm:min-w-12 max-sm:py-2.5 max-sm:px-1.5" aria-hidden="true"><span class="text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight"> </span> <span class="text-2xl max-sm:text-lg font-bold text-gray-900 dark:text-white leading-tight"> </span> <span class="text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight"> </span></div>'), ge = e.from_html('<p class="event-description text-sm text-gray-600 dark:text-gray-300 mt-1.5 mb-0 line-clamp-2 max-sm:hidden svelte-r2wh13"> </p>'), me = e.from_html("<span> </span>"), ce = e.from_html('<li class="list-none"><div tabindex="0" role="button"><div class="w-36 h-24 min-w-36 max-sm:w-20 max-sm:h-16 max-sm:min-w-20 rounded-lg overflow-hidden bg-gray-50 dark:bg-gray-900 flex items-center justify-center" aria-hidden="true"><img alt="" class="w-full h-full object-contain svelte-r2wh13" loading="lazy"/></div> <div class="flex-1 flex flex-col gap-1.5 min-w-0" aria-hidden="true"><h3 class="text-lg max-sm:text-sm font-semibold text-gray-900 dark:text-white m-0 leading-snug"> </h3> <time class="text-sm max-sm:text-xs font-medium text-gray-600 dark:text-gray-300"> </time> <!></div> <div class="flex items-start pt-0.5" aria-hidden="true"><!></div></div></li>'), fe = e.from_html('<div class="date-group flex border-b border-gray-200 dark:border-gray-700 last:border-b-0 svelte-r2wh13" role="group"><!> <ul class="events-column flex-1 flex flex-col list-none p-0 m-0 svelte-r2wh13"></ul></div>'), ue = e.from_html('<div class="flex justify-center items-center p-6 text-gray-600 dark:text-gray-300" role="status" aria-live="polite"><span class="text-sm">Loading more events...</span></div>'), ve = e.from_html('<section aria-label="Event listings"><h2 class="sr-only svelte-r2wh13">Event list grouped by date</h2> <!> <!></section>');
|
|
6
|
+
function he(P, g) {
|
|
7
|
+
e.push(g, !0);
|
|
8
|
+
let D = e.prop(g, "events", 19, () => []), U = e.prop(g, "initialCount", 3, 10), A = e.prop(g, "loadMoreCount", 3, 10), T = e.prop(g, "showDateColumn", 3, !0), B = e.prop(g, "filterFutureOnly", 3, !0), _ = U(), u, m, E = e.derived(() => B() ? re(D()) : D()), G = e.derived(() => R(e.get(E).slice(0, _))), C = e.derived(() => _ < e.get(E).length);
|
|
9
|
+
function I() {
|
|
10
|
+
_ += A();
|
|
11
|
+
}
|
|
12
|
+
te(() => {
|
|
13
|
+
m = new IntersectionObserver(
|
|
14
|
+
(r) => {
|
|
15
|
+
r[0].isIntersecting && e.get(C) && I();
|
|
16
|
+
},
|
|
17
|
+
{ rootMargin: "100px" }
|
|
18
|
+
), u && m.observe(u);
|
|
19
|
+
}), ae(() => {
|
|
20
|
+
m && m.disconnect();
|
|
21
|
+
}), e.user_effect(() => {
|
|
22
|
+
m && u && (m.disconnect(), m.observe(u));
|
|
23
|
+
});
|
|
24
|
+
function R(r) {
|
|
25
|
+
const a = {};
|
|
26
|
+
for (const s of r) {
|
|
27
|
+
const o = s.date;
|
|
28
|
+
a[o] || (a[o] = []), a[o].push(s);
|
|
29
|
+
}
|
|
30
|
+
return Object.entries(a).sort(([s], [o]) => new Date(s) - new Date(o)).map(([s, o]) => ({ date: s, events: o, formattedDate: K(o) }));
|
|
31
|
+
}
|
|
32
|
+
function K(r) {
|
|
33
|
+
const a = r[0];
|
|
34
|
+
if (!a?.startDateTime) return { month: "", day: "", weekday: "" };
|
|
35
|
+
const s = se(a.startDateTime, a.timeZone);
|
|
36
|
+
return {
|
|
37
|
+
month: s.month.toUpperCase(),
|
|
38
|
+
day: String(s.date).padStart(2, "0"),
|
|
39
|
+
weekday: s.day.toUpperCase()
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function M(r) {
|
|
43
|
+
g.oneventClick?.(r);
|
|
44
|
+
}
|
|
45
|
+
function z(r, a) {
|
|
46
|
+
(r.key === "Enter" || r.key === " ") && (r.preventDefault(), M(a));
|
|
47
|
+
}
|
|
48
|
+
var b = ve();
|
|
49
|
+
let S;
|
|
50
|
+
var O = e.sibling(e.child(b), 2);
|
|
51
|
+
e.each(O, 17, () => e.get(G), e.index, (r, a) => {
|
|
52
|
+
var s = fe(), o = e.child(s);
|
|
53
|
+
{
|
|
54
|
+
var q = (c) => {
|
|
55
|
+
var t = de(), n = e.child(t), y = e.child(n, !0);
|
|
56
|
+
e.reset(n);
|
|
57
|
+
var f = e.sibling(n, 2), d = e.child(f, !0);
|
|
58
|
+
e.reset(f);
|
|
59
|
+
var v = e.sibling(f, 2), x = e.child(v, !0);
|
|
60
|
+
e.reset(v), e.reset(t), e.template_effect(() => {
|
|
61
|
+
e.set_text(y, e.get(a).formattedDate.month), e.set_text(d, e.get(a).formattedDate.day), e.set_text(x, e.get(a).formattedDate.weekday);
|
|
62
|
+
}), e.append(c, t);
|
|
63
|
+
};
|
|
64
|
+
e.if(o, (c) => {
|
|
65
|
+
T() && c(q);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
var j = e.sibling(o, 2);
|
|
69
|
+
e.each(j, 21, () => e.get(a).events, e.index, (c, t) => {
|
|
70
|
+
const n = e.derived(() => ie(e.get(t))), y = e.derived(() => le(e.get(n)));
|
|
71
|
+
var f = ce(), d = e.child(f);
|
|
72
|
+
let v;
|
|
73
|
+
var x = e.child(d), J = e.child(x);
|
|
74
|
+
e.reset(x);
|
|
75
|
+
var w = e.sibling(x, 2), k = e.child(w), N = e.child(k, !0);
|
|
76
|
+
e.reset(k);
|
|
77
|
+
var h = e.sibling(k, 2), Q = e.child(h, !0);
|
|
78
|
+
e.reset(h);
|
|
79
|
+
var W = e.sibling(h, 2);
|
|
80
|
+
{
|
|
81
|
+
var X = (i) => {
|
|
82
|
+
var l = ge(), p = e.child(l, !0);
|
|
83
|
+
e.reset(l), e.template_effect(() => e.set_text(p, e.get(t).description)), e.append(i, l);
|
|
84
|
+
};
|
|
85
|
+
e.if(W, (i) => {
|
|
86
|
+
e.get(t).description && i(X);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
e.reset(w);
|
|
90
|
+
var Z = e.sibling(w, 2), Y = e.child(Z);
|
|
91
|
+
{
|
|
92
|
+
var $ = (i) => {
|
|
93
|
+
var l = me(), p = e.child(l, !0);
|
|
94
|
+
e.reset(l), e.template_effect(() => {
|
|
95
|
+
e.set_class(l, 1, `status-badge status-${e.get(n).type ?? ""}`, "svelte-r2wh13"), e.set_text(p, e.get(n).text);
|
|
96
|
+
}), e.append(i, l);
|
|
97
|
+
}, ee = (i) => {
|
|
98
|
+
{
|
|
99
|
+
let l = e.derived(() => e.get(t).ticketsRemaining ?? 0), p = e.derived(() => e.get(t).ticketsTotal ?? 0);
|
|
100
|
+
ne(i, {
|
|
101
|
+
get remaining() {
|
|
102
|
+
return e.get(l);
|
|
103
|
+
},
|
|
104
|
+
get total() {
|
|
105
|
+
return e.get(p);
|
|
106
|
+
},
|
|
107
|
+
context: "browse"
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
e.if(Y, (i) => {
|
|
112
|
+
e.get(n) ? i($) : (e.get(t).ticketsTotal > 0 || e.get(t).ticketsRemaining === 0) && i(ee, 1);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
e.reset(Z), e.reset(d), e.reset(f), e.template_effect(
|
|
116
|
+
(i, l) => {
|
|
117
|
+
v = e.set_class(d, 1, "event-row flex gap-4 max-sm:gap-2.5 p-5 max-sm:p-3 cursor-pointer transition-colors duration-150 bg-white dark:bg-gray-800 border-b border-gray-200/50 dark:border-gray-700/50 last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-700 dark:focus:outline-blue-400 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-blue-700 dark:focus-visible:outline-blue-400 focus-visible:-outline-offset-2 svelte-r2wh13", null, v, { "row-unavailable": e.get(y) }), e.set_attribute(d, "aria-label", i), e.set_attribute(J, "src", e.get(t).image || oe), e.set_text(N, e.get(t).name), e.set_attribute(h, "datetime", e.get(t).startDateTime || e.get(a).date), e.set_text(Q, l);
|
|
118
|
+
},
|
|
119
|
+
[
|
|
120
|
+
() => `${e.get(t).name} on ${e.get(t).startDateTime ? F(e.get(t).startDateTime, e.get(t).timeZone) : e.get(a).date} at ${e.get(t).startDateTime ? L(e.get(t).startDateTime, e.get(t).timeZone) : ""}, ${e.get(n)?.text || e.get(t).status || "On Sale"}. Press Enter to view details.`,
|
|
121
|
+
() => e.get(t).startDateTime ? L(e.get(t).startDateTime, e.get(t).timeZone) : ""
|
|
122
|
+
]
|
|
123
|
+
), e.delegated("click", d, () => M(e.get(t))), e.delegated("keydown", d, (i) => z(i, e.get(t))), e.append(c, f);
|
|
124
|
+
}), e.reset(j), e.reset(s), e.template_effect((c) => e.set_attribute(s, "aria-label", `Events on ${c ?? ""}`), [
|
|
125
|
+
() => e.get(a).events[0]?.startDateTime ? F(e.get(a).events[0].startDateTime, e.get(a).events[0].timeZone) : e.get(a).date
|
|
126
|
+
]), e.append(r, s);
|
|
127
|
+
});
|
|
128
|
+
var H = e.sibling(O, 2);
|
|
129
|
+
{
|
|
130
|
+
var V = (r) => {
|
|
131
|
+
var a = ue();
|
|
132
|
+
e.bind_this(a, (s) => u = s, () => u), e.append(r, a);
|
|
133
|
+
};
|
|
134
|
+
e.if(H, (r) => {
|
|
135
|
+
e.get(C) && r(V);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
e.reset(b), e.template_effect(() => S = e.set_class(b, 1, "flex flex-col gap-0 svelte-r2wh13", null, S, { "no-date-column": !T() })), e.append(P, b), e.pop();
|
|
139
|
+
}
|
|
140
|
+
e.delegate(["click", "keydown"]);
|
|
141
|
+
export {
|
|
142
|
+
he as default
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=GroupedListView.legacy-qisy7BOS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupedListView.legacy-qisy7BOS.js","sources":["../src/components/Calendar/GroupedListView.legacy.svelte"],"sourcesContent":["<script>\n import { onMount, onDestroy } from \"svelte\";\n import { PLACEHOLDER_IMAGE } from \"$lib/utils/constants.js\";\n import { getDateParts, formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\n import { getBrowseStatus, isEventUnavailable, filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\n import ScarcityBadge from \"../ScarcityBadge.svelte\";\n\n let {\n events = [],\n initialCount = 10,\n loadMoreCount = 10,\n showDateColumn = true,\n filterFutureOnly = true,\n oneventClick\n } = $props();\n\n let displayedCount = initialCount;\n let loadMoreTrigger;\n let observer;\n\n // Filter to today and future (if enabled), then group by date\n let filteredEvents = $derived(filterFutureOnly ? filterTodayAndFuture(events) : events);\n let groupedEvents = $derived(groupEventsByDate(filteredEvents.slice(0, displayedCount)));\n let hasMore = $derived(displayedCount < filteredEvents.length);\n\n function loadMore() {\n displayedCount += loadMoreCount;\n }\n\n onMount(() => {\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore) {\n loadMore();\n }\n },\n { rootMargin: '100px' }\n );\n\n if (loadMoreTrigger) {\n observer.observe(loadMoreTrigger);\n }\n });\n\n onDestroy(() => {\n if (observer) {\n observer.disconnect();\n }\n });\n\n // Re-observe when trigger element changes\n $effect(() => {\n if (observer && loadMoreTrigger) {\n observer.disconnect();\n observer.observe(loadMoreTrigger);\n }\n });\n\n function groupEventsByDate(eventList) {\n const groups = {};\n\n for (const event of eventList) {\n const dateKey = event.date; // YYYY-MM-DD format\n if (!groups[dateKey]) {\n groups[dateKey] = [];\n }\n groups[dateKey].push(event);\n }\n\n // Convert to array sorted by date\n return Object.entries(groups)\n .sort(([a], [b]) => new Date(a) - new Date(b))\n .map(([date, events]) => ({\n date,\n events,\n formattedDate: formatGroupDate(events),\n }));\n }\n\n function formatGroupDate(events) {\n // Use the first event in the group to get timezone-aware date parts\n const firstEvent = events[0];\n if (!firstEvent?.startDateTime) return { month: '', day: '', weekday: '' };\n const parts = getDateParts(firstEvent.startDateTime, firstEvent.timeZone);\n return {\n month: parts.month.toUpperCase(),\n day: String(parts.date).padStart(2, '0'),\n weekday: parts.day.toUpperCase(),\n };\n }\n\n function handleEventClick(event) {\n oneventClick?.(event);\n }\n\n function handleKeydown(e, event) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleEventClick(event);\n }\n }\n</script>\n\n<section class=\"flex flex-col gap-0\" class:no-date-column={!showDateColumn} aria-label=\"Event listings\">\n <h2 class=\"sr-only\">Event list grouped by date</h2>\n {#each groupedEvents as group}\n <div class=\"date-group flex border-b border-gray-200 dark:border-gray-700 last:border-b-0\" role=\"group\" aria-label=\"Events on {group.events[0]?.startDateTime ? formatFullDate(group.events[0].startDateTime, group.events[0].timeZone) : group.date}\">\n <!-- Date Column -->\n {#if showDateColumn}\n <div class=\"w-16 min-w-16 py-4 px-2.5 flex flex-col items-center justify-start bg-gray-50 dark:bg-gray-900 border-r border-gray-200 dark:border-gray-700 max-sm:w-12 max-sm:min-w-12 max-sm:py-2.5 max-sm:px-1.5\" aria-hidden=\"true\">\n <span class=\"text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight\">{group.formattedDate.month}</span>\n <span class=\"text-2xl max-sm:text-lg font-bold text-gray-900 dark:text-white leading-tight\">{group.formattedDate.day}</span>\n <span class=\"text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight\">{group.formattedDate.weekday}</span>\n </div>\n {/if}\n\n <!-- Events Column -->\n <ul class=\"events-column flex-1 flex flex-col list-none p-0 m-0\">\n {#each group.events as event, eventIndex}\n {@const eventStatus = getBrowseStatus(event)}\n {@const isUnavailable = isEventUnavailable(eventStatus)}\n <li class=\"list-none\">\n <div\n class=\"event-row flex gap-4 max-sm:gap-2.5 p-5 max-sm:p-3 cursor-pointer transition-colors duration-150 bg-white dark:bg-gray-800 border-b border-gray-200/50 dark:border-gray-700/50 last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-700 dark:focus:outline-blue-400 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-blue-700 dark:focus-visible:outline-blue-400 focus-visible:-outline-offset-2\"\n class:row-unavailable={isUnavailable}\n onclick={() => handleEventClick(event)}\n onkeydown={(e) => handleKeydown(e, event)}\n tabindex=\"0\"\n role=\"button\"\n aria-label={`${event.name} on ${event.startDateTime ? formatFullDate(event.startDateTime, event.timeZone) : group.date} at ${event.startDateTime ? formatEventTime(event.startDateTime, event.timeZone) : ''}, ${eventStatus?.text || event.status || 'On Sale'}. Press Enter to view details.`}\n >\n <!-- Event Image -->\n <div class=\"w-36 h-24 min-w-36 max-sm:w-20 max-sm:h-16 max-sm:min-w-20 rounded-lg overflow-hidden bg-gray-50 dark:bg-gray-900 flex items-center justify-center\" aria-hidden=\"true\">\n <img\n src={event.image || PLACEHOLDER_IMAGE}\n alt=\"\"\n class=\"w-full h-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n\n <!-- Event Details (visually shown but also in aria-label, so hide from SR) -->\n <div class=\"flex-1 flex flex-col gap-1.5 min-w-0\" aria-hidden=\"true\">\n <h3 class=\"text-lg max-sm:text-sm font-semibold text-gray-900 dark:text-white m-0 leading-snug\">{event.name}</h3>\n <time class=\"text-sm max-sm:text-xs font-medium text-gray-600 dark:text-gray-300\" datetime={event.startDateTime || group.date}>{event.startDateTime ? formatEventTime(event.startDateTime, event.timeZone) : ''}</time>\n {#if event.description}\n <p class=\"event-description text-sm text-gray-600 dark:text-gray-300 mt-1.5 mb-0 line-clamp-2 max-sm:hidden\">{event.description}</p>\n {/if}\n </div>\n\n <!-- Status / Scarcity Badge -->\n <div class=\"flex items-start pt-0.5\" aria-hidden=\"true\">\n {#if eventStatus}\n <span class=\"status-badge status-{eventStatus.type}\">{eventStatus.text}</span>\n {:else if event.ticketsTotal > 0 || event.ticketsRemaining === 0}\n <ScarcityBadge\n remaining={event.ticketsRemaining ?? 0}\n total={event.ticketsTotal ?? 0}\n context=\"browse\"\n />\n {/if}\n </div>\n </div>\n </li>\n {/each}\n </ul>\n </div>\n {/each}\n\n <!-- Infinite scroll trigger -->\n {#if hasMore}\n <div bind:this={loadMoreTrigger} class=\"flex justify-center items-center p-6 text-gray-600 dark:text-gray-300\" role=\"status\" aria-live=\"polite\">\n <span class=\"text-sm\">Loading more events...</span>\n </div>\n {/if}\n</section>\n\n<style>\n /* When no date column, remove left border styling */\n .no-date-column .date-group {\n border-bottom: 0;\n }\n\n .no-date-column .events-column {\n border-left: 0;\n }\n\n .event-description {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n /* Unavailable row dimming */\n .row-unavailable {\n opacity: 0.6;\n }\n\n .row-unavailable img {\n filter: grayscale(0.5);\n }\n\n /* Status badges -- distinct visual treatments matching gallery cards */\n .status-badge {\n display: inline-flex;\n align-items: center;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 700;\n padding: 0.25rem 0.625rem;\n border-radius: 0.25rem;\n white-space: nowrap;\n letter-spacing: 0.02em;\n }\n\n .status-cancelled {\n background-color: rgb(254 226 226);\n color: rgb(153 27 27);\n text-decoration: line-through;\n text-decoration-thickness: 1.5px;\n\n :global(.dark) & {\n background-color: rgb(127 29 29 / 0.4);\n color: rgb(252 165 165);\n }\n }\n\n .status-past {\n background-color: rgb(243 244 246);\n color: rgb(107 114 128);\n\n :global(.dark) & {\n background-color: rgb(31 41 55);\n color: rgb(156 163 175);\n }\n }\n\n .status-sold_out {\n background-color: rgb(254 226 226);\n color: rgb(185 28 28);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: 0.65rem;\n\n :global(.dark) & {\n background-color: rgb(127 29 29 / 0.4);\n color: rgb(248 113 113);\n }\n }\n\n .status-sales_ended {\n background-color: rgb(243 244 246);\n color: rgb(107 114 128);\n border: 1px solid rgb(209 213 219);\n\n :global(.dark) & {\n background-color: rgb(31 41 55);\n color: rgb(156 163 175);\n border-color: rgb(75 85 99);\n }\n }\n\n .status-coming_soon {\n background-color: rgb(224 231 255);\n color: rgb(67 56 202);\n\n :global(.dark) & {\n background-color: rgb(49 46 129 / 0.4);\n color: rgb(165 180 252);\n }\n }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .event-row {\n transition: none;\n }\n }\n\n /* Screen reader only text */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n</style>\n"],"names":["events","$","$$props","initialCount","loadMoreCount","showDateColumn","filterFutureOnly","displayedCount","loadMoreTrigger","observer","filteredEvents","filterTodayAndFuture","groupedEvents","groupEventsByDate","hasMore","loadMore","onMount","entries","onDestroy","eventList","groups","event","dateKey","a","b","date","formatGroupDate","firstEvent","parts","getDateParts","handleEventClick","handleKeydown","e","section","root","node","group","div","root_1","div_1","root_2","span","span_1","span_2","$$render","consequent","ul","node_1","eventStatus","getBrowseStatus","isUnavailable","isEventUnavailable","li","root_3","div_2","div_3","img","div_4","h3","time","p","root_4","text_5","consequent_1","div_5","span_3","root_5","text_6","ScarcityBadge","$$anchor","consequent_2","consequent_3","classes_1","$0","PLACEHOLDER_IMAGE","text_3","formatFullDate","formatEventTime","div_6","root_7","$$value","consequent_4","classes"],"mappings":"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"}
|