@getmicdrop/venue-calendar 4.0.72 → 4.0.73

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.
Files changed (74) hide show
  1. package/dist/{CarouselView.legacy-CjlmBP53.js → CarouselView.legacy-D8292Vwd.js} +3 -3
  2. package/dist/{CarouselView.legacy-CjlmBP53.js.map → CarouselView.legacy-D8292Vwd.js.map} +1 -1
  3. package/dist/{CartView-B0WQYDRq.js → CartView-CLi2VVd0.js} +139 -139
  4. package/dist/{CartView-B0WQYDRq.js.map → CartView-CLi2VVd0.js.map} +1 -1
  5. package/dist/{Checkout-BjEyBaTq.js → Checkout-ByCnBt-G.js} +317 -316
  6. package/dist/{Checkout-BjEyBaTq.js.map → Checkout-ByCnBt-G.js.map} +1 -1
  7. package/dist/{Checkout-DTdGea04.js → Checkout-DvbhqCsh.js} +70 -70
  8. package/dist/Checkout-DvbhqCsh.js.map +1 -0
  9. package/dist/{Checkout.legacy-CAH2mvU8.js → Checkout.legacy-C95H23qA.js} +60 -60
  10. package/dist/{Checkout.legacy-CAH2mvU8.js.map → Checkout.legacy-C95H23qA.js.map} +1 -1
  11. package/dist/{CheckoutTimer-CR9onkjL.js → CheckoutTimer-CzRcyBzu.js} +2 -2
  12. package/dist/{CheckoutTimer-CR9onkjL.js.map → CheckoutTimer-CzRcyBzu.js.map} +1 -1
  13. package/dist/{CollectionView-BEvvjyV1.js → CollectionView-CtMBS-m8.js} +5 -5
  14. package/dist/{CollectionView-BEvvjyV1.js.map → CollectionView-CtMBS-m8.js.map} +1 -1
  15. package/dist/{CollectionView.legacy-CWZTgDhd.js → CollectionView.legacy-C4ba5bLU.js} +32 -32
  16. package/dist/{CollectionView.legacy-CWZTgDhd.js.map → CollectionView.legacy-C4ba5bLU.js.map} +1 -1
  17. package/dist/Event-Bm1bpwyl.js +2188 -0
  18. package/dist/Event-Bm1bpwyl.js.map +1 -0
  19. package/dist/{EventPage-WVvMAUF9.js → EventPage-BT2m0JQi.js} +5 -5
  20. package/dist/{EventPage-WVvMAUF9.js.map → EventPage-BT2m0JQi.js.map} +1 -1
  21. package/dist/EventPage.legacy-Deu8PGw6.js +1300 -0
  22. package/dist/EventPage.legacy-Deu8PGw6.js.map +1 -0
  23. package/dist/{FeaturedView.legacy-MRCiAVjb.js → FeaturedView.legacy-Cbxg3oCb.js} +22 -22
  24. package/dist/{FeaturedView.legacy-MRCiAVjb.js.map → FeaturedView.legacy-Cbxg3oCb.js.map} +1 -1
  25. package/dist/{GalleryCard-qXTnV5Fm.js → GalleryCard-K-h-w_A6.js} +13 -13
  26. package/dist/{GalleryCard-qXTnV5Fm.js.map → GalleryCard-K-h-w_A6.js.map} +1 -1
  27. package/dist/{GalleryView.legacy-D9ZI5-Qh.js → GalleryView.legacy-BYiC8PVZ.js} +3 -3
  28. package/dist/{GalleryView.legacy-D9ZI5-Qh.js.map → GalleryView.legacy-BYiC8PVZ.js.map} +1 -1
  29. package/dist/{GroupedListView.legacy-DswMb6rJ.js → GroupedListView.legacy-BZq2qDjS.js} +27 -27
  30. package/dist/{GroupedListView.legacy-DswMb6rJ.js.map → GroupedListView.legacy-BZq2qDjS.js.map} +1 -1
  31. package/dist/{SeriesPage-Csf1RNhm.js → SeriesPage-BbGXRoCV.js} +5 -5
  32. package/dist/{SeriesPage-Csf1RNhm.js.map → SeriesPage-BbGXRoCV.js.map} +1 -1
  33. package/dist/{SeriesPage.legacy-CvgXH8hA.js → SeriesPage.legacy-eMr3yDRa.js} +33 -33
  34. package/dist/{SeriesPage.legacy-CvgXH8hA.js.map → SeriesPage.legacy-eMr3yDRa.js.map} +1 -1
  35. package/dist/{Success-CjamYu5g.js → Success-CeNSlAZj.js} +130 -131
  36. package/dist/{Success-CjamYu5g.js.map → Success-CeNSlAZj.js.map} +1 -1
  37. package/dist/{Success.legacy-BqRg0k88.js → Success.legacy-DpYGRNGA.js} +25 -25
  38. package/dist/{Success.legacy-BqRg0k88.js.map → Success.legacy-DpYGRNGA.js.map} +1 -1
  39. package/dist/{VenueCalendar-DMGL-oTh.js → VenueCalendar-CGKy4kQ8.js} +6897 -7487
  40. package/dist/VenueCalendar-CGKy4kQ8.js.map +1 -0
  41. package/dist/{ViewTicketsEmbed-DVvtzU2M.js → ViewTicketsEmbed-CxQZM79q.js} +20 -20
  42. package/dist/{ViewTicketsEmbed-DVvtzU2M.js.map → ViewTicketsEmbed-CxQZM79q.js.map} +1 -1
  43. package/dist/{api-hwRoz8UG.js → api-toYmKtOR.js} +2 -2
  44. package/dist/{api-hwRoz8UG.js.map → api-toYmKtOR.js.map} +1 -1
  45. package/dist/{data-toggle-store.svelte-fE-ftrjt.js → data-toggle-store.svelte-DWzk0MLS.js} +2 -2
  46. package/dist/{data-toggle-store.svelte-fE-ftrjt.js.map → data-toggle-store.svelte-DWzk0MLS.js.map} +1 -1
  47. package/dist/labels-BpBCM7Zc.js +657 -0
  48. package/dist/labels-BpBCM7Zc.js.map +1 -0
  49. package/dist/{transform-BVO9yWCH.js → transform-DeiNOLZ8.js} +2 -2
  50. package/dist/{transform-BVO9yWCH.js.map → transform-DeiNOLZ8.js.map} +1 -1
  51. package/dist/types/index.d.ts +20 -17
  52. package/dist/venue-calendar.css +1 -1
  53. package/dist/venue-calendar.es.js +23 -24
  54. package/dist/venue-calendar.iife.js +71 -62
  55. package/dist/venue-calendar.iife.js.map +1 -1
  56. package/dist/venue-calendar.umd.js +68 -71
  57. package/dist/venue-calendar.umd.js.map +1 -1
  58. package/package.json +4 -1
  59. package/dist/Checkout-DTdGea04.js.map +0 -1
  60. package/dist/Event-QnlYFcmr.js +0 -1789
  61. package/dist/Event-QnlYFcmr.js.map +0 -1
  62. package/dist/EventDetailsView-voE4NIqx.js +0 -1366
  63. package/dist/EventDetailsView-voE4NIqx.js.map +0 -1
  64. package/dist/EventPage.legacy-wzZpuMGf.js +0 -1044
  65. package/dist/EventPage.legacy-wzZpuMGf.js.map +0 -1
  66. package/dist/OrderSummary-Dp1ZPIx-.js +0 -497
  67. package/dist/OrderSummary-Dp1ZPIx-.js.map +0 -1
  68. package/dist/PromoCodeInput-D3FfA0Ar.js +0 -415
  69. package/dist/PromoCodeInput-D3FfA0Ar.js.map +0 -1
  70. package/dist/VenueCalendar-DMGL-oTh.js.map +0 -1
  71. package/dist/WaitlistModal-C0PKN1Fr.js +0 -266
  72. package/dist/WaitlistModal-C0PKN1Fr.js.map +0 -1
  73. package/dist/labels-CWMBE5R1.js +0 -163
  74. package/dist/labels-CWMBE5R1.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionView-BEvvjyV1.js","sources":["../src/components/Views/CollectionView.svelte"],"sourcesContent":["<script lang=\"ts\">\r\n\timport { onMount, onDestroy } from 'svelte';\r\n\timport { goto } from '$app/navigation';\r\n\timport AirbnbSplitMain from '$lib/public-calendar-flow/Event.svelte';\r\n\timport { transformCollectionData } from '$lib/public-calendar-flow/transform';\r\n\timport { fetchPublicCollection } from '$lib/api/events';\r\n\timport type { PublicCollectionData } from '$lib/api/types';\r\n\timport { createLogger, PasswordInput } from '@getmicdrop/svelte-components';\r\n\r\n\tconst logger = createLogger('CollectionView');\r\n\r\n\t// --- Legacy fallback ---\r\n\t// RETIREMENT: 2026-08-13 — see docs/LEGACY_RETIREMENT.md.\r\n\tlet useLegacy = $state(false);\r\n\tlet LegacyComponent: any = $state(null);\r\n\r\n\tif (typeof window !== 'undefined') {\r\n\t\tconst params = new URLSearchParams(window.location.search);\r\n\t\tif (params.get('legacy') === '1') {\r\n\t\t\tuseLegacy = true;\r\n\t\t}\r\n\t}\r\n\r\n\t$effect(() => {\r\n\t\tif (useLegacy && !LegacyComponent) {\r\n\t\t\tlogger.warn(\r\n\t\t\t\t'[VC] DEPRECATED: ?legacy=1 fallback for CollectionView retires on 2026-08-13. See docs/LEGACY_RETIREMENT.md.'\r\n\t\t\t);\r\n\t\t\timport('./CollectionView.legacy.svelte').then((m) => {\r\n\t\t\t\tLegacyComponent = m.default;\r\n\t\t\t}).catch(() => {\r\n\t\t\t\tuseLegacy = false;\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\r\n\t// --- Props (matches old CollectionView external interface) ---\r\n\tinterface Props {\r\n\t\tcollectionId: string | number;\r\n\t\torganizationId?: string;\r\n\t\tonNavigateToEvent?: (id: number, slug: string) => void;\r\n\t\tpassword?: string;\r\n\t\tdisplayMode?: string;\r\n\t\tshowViewSwitcher?: boolean;\r\n\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet {\r\n\t\tcollectionId,\r\n\t\torganizationId = '',\r\n\t\tonNavigateToEvent = undefined,\r\n\t\tpassword = undefined,\r\n\t\tdisplayMode = 'gallery',\r\n\t\tshowViewSwitcher = true,\r\n\t\tlabels = {},\r\n\t}: Props = $props();\r\n\r\n\t// --- State ---\r\n\tlet collection = $state<PublicCollectionData | null>(null);\r\n\tlet isLoading = $state(true);\r\n\tlet error = $state<string | null>(null);\r\n\tlet isMounted = $state(false);\r\n\tlet passwordRequired = $state(false);\r\n\tlet passwordInput = $state('');\r\n\tlet passwordError = $state(false);\r\n\r\n\t// --- Derived ---\r\n\tlet eventData = $derived(collection ? transformCollectionData(collection) : null);\r\n\r\n\t// --- Load collection data ---\r\n\tasync function loadCollection(pwd?: string): Promise<void> {\r\n\t\tif (!isMounted) return;\r\n\t\tif (!collectionId) {\r\n\t\t\terror = labels.noCollectionIdProvided || 'No collection ID provided';\r\n\t\t\tisLoading = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tisLoading = true;\r\n\t\terror = null;\r\n\t\tpasswordError = false;\r\n\r\n\t\ttry {\r\n\t\t\tconst data = await fetchPublicCollection(collectionId, pwd);\r\n\t\t\tif (!isMounted) return;\r\n\r\n\t\t\tif (data) {\r\n\t\t\t\tif ((data as any).passwordRequired || (data as any).error?.code === 'PASSWORD_REQUIRED') {\r\n\t\t\t\t\tpasswordRequired = true;\r\n\t\t\t\t\tisLoading = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tcollection = data;\r\n\t\t\t\tpasswordRequired = false;\r\n\t\t\t} else {\r\n\t\t\t\tif (pwd) {\r\n\t\t\t\t\tpasswordRequired = true;\r\n\t\t\t\t\tpasswordError = true;\r\n\t\t\t\t\tisLoading = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\terror = labels.failedToLoadCollection || 'Failed to load collection';\r\n\t\t\t}\r\n\t\t} catch (err: any) {\r\n\t\t\tif (isMounted) {\r\n\t\t\t\tconst msg = err.message || '';\r\n\t\t\t\tif (msg.includes('401') || msg.includes('403') || msg.includes('password')) {\r\n\t\t\t\t\tpasswordRequired = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = msg || labels.failedToLoadCollection || 'Failed to load collection';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\tif (isMounted) {\r\n\t\t\t\tisLoading = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handlePasswordSubmit(e: Event): void {\r\n\t\te.preventDefault();\r\n\t\tif (!passwordInput.trim()) return;\r\n\t\tloadCollection(passwordInput);\r\n\t}\r\n\r\n\tfunction handleCollectionEventClick(galleryEvent: { id?: number | string; slug: string }): void {\r\n\t\tif (onNavigateToEvent && galleryEvent.id) {\r\n\t\t\tonNavigateToEvent(Number(galleryEvent.id), galleryEvent.slug);\r\n\t\t} else {\r\n\t\t\t// @url-builder-escape: widget-internal route; SC's url-builders cover /a admin paths, not embedded calendar navigation.\r\n\t\t\tgoto(`/${galleryEvent.id}/${galleryEvent.slug}`);\r\n\t\t}\r\n\t}\r\n\r\n\t// --- Lifecycle ---\r\n\tonMount(() => {\r\n\t\tisMounted = true;\r\n\t\tloadCollection(password);\r\n\t});\r\n\r\n\tonDestroy(() => {\r\n\t\tisMounted = false;\r\n\t});\r\n</script>\r\n\r\n{#if useLegacy && LegacyComponent}\r\n\t<svelte:component this={LegacyComponent}\r\n\t\t{collectionId}\r\n\t\t{organizationId}\r\n\t\t{onNavigateToEvent}\r\n\t\t{password}\r\n\t\t{displayMode}\r\n\t\t{showViewSwitcher}\r\n\t\t{labels}\r\n\t/>\r\n{:else if isLoading}\r\n\t<div class=\"flex items-center justify-center py-12 text-center loading-container\">\r\n\t\t<p>{labels.loadingCollection || 'Loading collection...'}</p>\r\n\t</div>\r\n{:else if passwordRequired}\r\n\t<div class=\"flex flex-col items-center justify-center min-h-[50vh] text-center\">\r\n\t\t<div class=\"password-card rounded-lg p-8 max-w-sm w-full\">\r\n\t\t\t<h2 class=\"password-title text-xl font-bold mb-2\">{labels.collectionPrivateTitle || 'This collection is private'}</h2>\r\n\t\t\t<p class=\"password-description text-sm mb-6\">{labels.collectionPrivateDescription || 'Please enter the password to view this collection.'}</p>\r\n\t\t\t<form onsubmit={handlePasswordSubmit} class=\"flex flex-col gap-3\">\r\n\t\t\t\t<PasswordInput\r\n\t\t\t\t\tbind:value={passwordInput}\r\n\t\t\t\t\tplaceholder={labels.enterPassword || \"Enter password\"}\r\n\t\t\t\t\terror={passwordError ? (labels.incorrectPassword || 'Incorrect password. Please try again.') : ''}\r\n\t\t\t\t/>\r\n\t\t\t\t<button type=\"submit\" class=\"password-submit px-4 py-2 rounded-lg text-sm font-semibold\">{labels.viewCollection || 'View Collection'}</button>\r\n\t\t\t</form>\r\n\t\t</div>\r\n\t</div>\r\n{:else if error}\r\n\t<div class=\"flex flex-col items-center justify-center min-h-[50vh] text-center\">\r\n\t\t<p class=\"error-text\">{labels.errorPrefix || 'Error:'} {error}</p>\r\n\t</div>\r\n{:else if eventData}\r\n\t<AirbnbSplitMain\r\n\t\tevent={eventData}\r\n\t\tonCollectionEventClick={handleCollectionEventClick}\r\n\t/>\r\n{/if}\r\n\r\n<style>\r\n\t.loading-container {\r\n\t\tcolor: hsl(var(--text-secondary, 215 16% 47%));\r\n\t}\r\n\r\n\t.error-text {\r\n\t\tcolor: hsl(var(--status-sold-out, 0 72% 51%));\r\n\t}\r\n\r\n\t.password-card {\r\n\t\tbackground: hsl(var(--surface-primary, 0 0% 100%));\r\n\t\tbox-shadow: 0 2px 10px color-mix(in srgb, black 10%, transparent);\r\n\t}\r\n\r\n\t.password-title {\r\n\t\tcolor: hsl(var(--text-primary, 0 0% 10%));\r\n\t}\r\n\r\n\t.password-description {\r\n\t\tcolor: hsl(var(--text-secondary, 0 0% 45%));\r\n\t}\r\n\r\n\t.password-submit {\r\n\t\tbackground: hsl(var(--brand-primary, 220 90% 56%));\r\n\t\tcolor: hsl(var(--text-on-primary, 0 0% 100%));\r\n\t}\r\n\r\n\t.password-submit:hover {\r\n\t\tfilter: brightness(0.95);\r\n\t}\r\n</style>\r\n"],"names":["logger","createLogger","useLegacy","$","LegacyComponent","m","organizationId","onNavigateToEvent","password","displayMode","showViewSwitcher","labels","$$props","collection","isLoading","error","isMounted","passwordRequired","passwordInput","passwordError","eventData","transformCollectionData","loadCollection","pwd","data","fetchPublicCollection","err","msg","handlePasswordSubmit","e","handleCollectionEventClick","galleryEvent","goto","onMount","onDestroy","$$anchor","$$component","div","root_2","p","div_1","root_3","div_2","h2","p_1","form","PasswordInput","node_2","$$value","button","div_3","root_4","p_2","text_4","AirbnbSplitMain","$$render","consequent","consequent_2","consequent_3","consequent_4"],"mappings":"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"}
1
+ {"version":3,"file":"CollectionView-CtMBS-m8.js","sources":["../src/components/Views/CollectionView.svelte"],"sourcesContent":["<script lang=\"ts\">\r\n\timport { onMount, onDestroy } from 'svelte';\r\n\timport { goto } from '$app/navigation';\r\n\timport AirbnbSplitMain from '$lib/public-calendar-flow/Event.svelte';\r\n\timport { transformCollectionData } from '$lib/public-calendar-flow/transform';\r\n\timport { fetchPublicCollection } from '$lib/api/events';\r\n\timport type { PublicCollectionData } from '$lib/api/types';\r\n\timport { createLogger, PasswordInput } from '@getmicdrop/svelte-components';\r\n\r\n\tconst logger = createLogger('CollectionView');\r\n\r\n\t// --- Legacy fallback ---\r\n\t// RETIREMENT: 2026-08-13 — see docs/LEGACY_RETIREMENT.md.\r\n\tlet useLegacy = $state(false);\r\n\tlet LegacyComponent: any = $state(null);\r\n\r\n\tif (typeof window !== 'undefined') {\r\n\t\tconst params = new URLSearchParams(window.location.search);\r\n\t\tif (params.get('legacy') === '1') {\r\n\t\t\tuseLegacy = true;\r\n\t\t}\r\n\t}\r\n\r\n\t$effect(() => {\r\n\t\tif (useLegacy && !LegacyComponent) {\r\n\t\t\tlogger.warn(\r\n\t\t\t\t'[VC] DEPRECATED: ?legacy=1 fallback for CollectionView retires on 2026-08-13. See docs/LEGACY_RETIREMENT.md.'\r\n\t\t\t);\r\n\t\t\timport('./CollectionView.legacy.svelte').then((m) => {\r\n\t\t\t\tLegacyComponent = m.default;\r\n\t\t\t}).catch(() => {\r\n\t\t\t\tuseLegacy = false;\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\r\n\t// --- Props (matches old CollectionView external interface) ---\r\n\tinterface Props {\r\n\t\tcollectionId: string | number;\r\n\t\torganizationId?: string;\r\n\t\tonNavigateToEvent?: (id: number, slug: string) => void;\r\n\t\tpassword?: string;\r\n\t\tdisplayMode?: string;\r\n\t\tshowViewSwitcher?: boolean;\r\n\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet {\r\n\t\tcollectionId,\r\n\t\torganizationId = '',\r\n\t\tonNavigateToEvent = undefined,\r\n\t\tpassword = undefined,\r\n\t\tdisplayMode = 'gallery',\r\n\t\tshowViewSwitcher = true,\r\n\t\tlabels = {},\r\n\t}: Props = $props();\r\n\r\n\t// --- State ---\r\n\tlet collection = $state<PublicCollectionData | null>(null);\r\n\tlet isLoading = $state(true);\r\n\tlet error = $state<string | null>(null);\r\n\tlet isMounted = $state(false);\r\n\tlet passwordRequired = $state(false);\r\n\tlet passwordInput = $state('');\r\n\tlet passwordError = $state(false);\r\n\r\n\t// --- Derived ---\r\n\tlet eventData = $derived(collection ? transformCollectionData(collection) : null);\r\n\r\n\t// --- Load collection data ---\r\n\tasync function loadCollection(pwd?: string): Promise<void> {\r\n\t\tif (!isMounted) return;\r\n\t\tif (!collectionId) {\r\n\t\t\terror = labels.noCollectionIdProvided || 'No collection ID provided';\r\n\t\t\tisLoading = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tisLoading = true;\r\n\t\terror = null;\r\n\t\tpasswordError = false;\r\n\r\n\t\ttry {\r\n\t\t\tconst data = await fetchPublicCollection(collectionId, pwd);\r\n\t\t\tif (!isMounted) return;\r\n\r\n\t\t\tif (data) {\r\n\t\t\t\tif ((data as any).passwordRequired || (data as any).error?.code === 'PASSWORD_REQUIRED') {\r\n\t\t\t\t\tpasswordRequired = true;\r\n\t\t\t\t\tisLoading = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tcollection = data;\r\n\t\t\t\tpasswordRequired = false;\r\n\t\t\t} else {\r\n\t\t\t\tif (pwd) {\r\n\t\t\t\t\tpasswordRequired = true;\r\n\t\t\t\t\tpasswordError = true;\r\n\t\t\t\t\tisLoading = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\terror = labels.failedToLoadCollection || 'Failed to load collection';\r\n\t\t\t}\r\n\t\t} catch (err: any) {\r\n\t\t\tif (isMounted) {\r\n\t\t\t\tconst msg = err.message || '';\r\n\t\t\t\tif (msg.includes('401') || msg.includes('403') || msg.includes('password')) {\r\n\t\t\t\t\tpasswordRequired = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = msg || labels.failedToLoadCollection || 'Failed to load collection';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\tif (isMounted) {\r\n\t\t\t\tisLoading = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handlePasswordSubmit(e: Event): void {\r\n\t\te.preventDefault();\r\n\t\tif (!passwordInput.trim()) return;\r\n\t\tloadCollection(passwordInput);\r\n\t}\r\n\r\n\tfunction handleCollectionEventClick(galleryEvent: { id?: number | string; slug: string }): void {\r\n\t\tif (onNavigateToEvent && galleryEvent.id) {\r\n\t\t\tonNavigateToEvent(Number(galleryEvent.id), galleryEvent.slug);\r\n\t\t} else {\r\n\t\t\t// @url-builder-escape: widget-internal route; SC's url-builders cover /a admin paths, not embedded calendar navigation.\r\n\t\t\tgoto(`/${galleryEvent.id}/${galleryEvent.slug}`);\r\n\t\t}\r\n\t}\r\n\r\n\t// --- Lifecycle ---\r\n\tonMount(() => {\r\n\t\tisMounted = true;\r\n\t\tloadCollection(password);\r\n\t});\r\n\r\n\tonDestroy(() => {\r\n\t\tisMounted = false;\r\n\t});\r\n</script>\r\n\r\n{#if useLegacy && LegacyComponent}\r\n\t<svelte:component this={LegacyComponent}\r\n\t\t{collectionId}\r\n\t\t{organizationId}\r\n\t\t{onNavigateToEvent}\r\n\t\t{password}\r\n\t\t{displayMode}\r\n\t\t{showViewSwitcher}\r\n\t\t{labels}\r\n\t/>\r\n{:else if isLoading}\r\n\t<div class=\"flex items-center justify-center py-12 text-center loading-container\">\r\n\t\t<p>{labels.loadingCollection || 'Loading collection...'}</p>\r\n\t</div>\r\n{:else if passwordRequired}\r\n\t<div class=\"flex flex-col items-center justify-center min-h-[50vh] text-center\">\r\n\t\t<div class=\"password-card rounded-lg p-8 max-w-sm w-full\">\r\n\t\t\t<h2 class=\"password-title text-xl font-bold mb-2\">{labels.collectionPrivateTitle || 'This collection is private'}</h2>\r\n\t\t\t<p class=\"password-description text-sm mb-6\">{labels.collectionPrivateDescription || 'Please enter the password to view this collection.'}</p>\r\n\t\t\t<form onsubmit={handlePasswordSubmit} class=\"flex flex-col gap-3\">\r\n\t\t\t\t<PasswordInput\r\n\t\t\t\t\tbind:value={passwordInput}\r\n\t\t\t\t\tplaceholder={labels.enterPassword || \"Enter password\"}\r\n\t\t\t\t\terror={passwordError ? (labels.incorrectPassword || 'Incorrect password. Please try again.') : ''}\r\n\t\t\t\t/>\r\n\t\t\t\t<button type=\"submit\" class=\"password-submit px-4 py-2 rounded-lg text-sm font-semibold\">{labels.viewCollection || 'View Collection'}</button>\r\n\t\t\t</form>\r\n\t\t</div>\r\n\t</div>\r\n{:else if error}\r\n\t<div class=\"flex flex-col items-center justify-center min-h-[50vh] text-center\">\r\n\t\t<p class=\"error-text\">{labels.errorPrefix || 'Error:'} {error}</p>\r\n\t</div>\r\n{:else if eventData}\r\n\t<AirbnbSplitMain\r\n\t\tevent={eventData}\r\n\t\tonCollectionEventClick={handleCollectionEventClick}\r\n\t/>\r\n{/if}\r\n\r\n<style>\r\n\t.loading-container {\r\n\t\tcolor: hsl(var(--text-secondary, 215 16% 47%));\r\n\t}\r\n\r\n\t.error-text {\r\n\t\tcolor: hsl(var(--status-sold-out, 0 72% 51%));\r\n\t}\r\n\r\n\t.password-card {\r\n\t\tbackground: hsl(var(--surface-primary, 0 0% 100%));\r\n\t\tbox-shadow: 0 2px 10px color-mix(in srgb, black 10%, transparent);\r\n\t}\r\n\r\n\t.password-title {\r\n\t\tcolor: hsl(var(--text-primary, 0 0% 10%));\r\n\t}\r\n\r\n\t.password-description {\r\n\t\tcolor: hsl(var(--text-secondary, 0 0% 45%));\r\n\t}\r\n\r\n\t.password-submit {\r\n\t\tbackground: hsl(var(--brand-primary, 220 90% 56%));\r\n\t\tcolor: hsl(var(--text-on-primary, 0 0% 100%));\r\n\t}\r\n\r\n\t.password-submit:hover {\r\n\t\tfilter: brightness(0.95);\r\n\t}\r\n</style>\r\n"],"names":["logger","createLogger","useLegacy","$","LegacyComponent","m","organizationId","onNavigateToEvent","password","displayMode","showViewSwitcher","labels","$$props","collection","isLoading","error","isMounted","passwordRequired","passwordInput","passwordError","eventData","transformCollectionData","loadCollection","pwd","data","fetchPublicCollection","err","msg","handlePasswordSubmit","e","handleCollectionEventClick","galleryEvent","goto","onMount","onDestroy","$$anchor","$$component","div","root_2","p","div_1","root_3","div_2","h2","p_1","form","PasswordInput","node_2","$$value","button","div_3","root_4","p_2","text_4","AirbnbSplitMain","$$render","consequent","consequent_2","consequent_3","consequent_4"],"mappings":"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"}
@@ -1,21 +1,21 @@
1
1
  import "svelte/internal/disclose-version";
2
2
  import * as e from "svelte/internal/client";
3
3
  import { onMount as ne, onDestroy as de } from "svelte";
4
- import { aY as ce, aZ as ve, aQ as ge, aR as me, aU as ue, ai as le, a1 as oe, ae as fe, u as se, af as pe, aE as he, b0 as _e, aF as xe, b2 as be } from "./VenueCalendar-DMGL-oTh.js";
4
+ import { aN as ce, aO as ve, aE as ge, aF as me, aI as ue, a5 as le, M as oe, a1 as fe, aM as se, a2 as pe, as as he, aY as _e, at as xe, a_ as be } from "./VenueCalendar-CGKy4kQ8.js";
5
5
  import "svelte/transition";
6
6
  import "svelte/easing";
7
- import { G as we } from "./GalleryCard-qXTnV5Fm.js";
7
+ import { G as we } from "./GalleryCard-K-h-w_A6.js";
8
8
  var ye = e.from_html('<div class="w-16 min-w-16 py-4 px-2.5 flex flex-col items-center justify-start bg-bg-secondary border-r border-border 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-text-secondary uppercase tracking-tight"> </span> <span class="text-2xl max-sm:text-lg font-bold text-text-primary leading-tight"> </span> <span class="text-xs font-semibold text-text-secondary uppercase tracking-tight"> </span></div>'), De = e.from_html('<p class="event-description text-sm text-text-secondary mt-1.5 mb-0 line-clamp-2 max-sm:hidden svelte-1aw0ssq"> </p>'), Te = e.from_html("<span> </span>"), ke = 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-bg-secondary flex items-center justify-center" aria-hidden="true"><img alt="" class="w-full h-full object-contain svelte-1aw0ssq" 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-text-primary m-0 leading-snug"> </h3> <time class="text-sm max-sm:text-xs font-medium text-text-secondary"> </time> <!></div> <div class="flex items-start pt-0.5" aria-hidden="true"><!></div></div></li>'), Ee = e.from_html('<div class="date-group flex border-b border-border last:border-b-0 svelte-1aw0ssq" role="group"><!> <ul class="events-column flex-1 flex flex-col list-none p-0 m-0 svelte-1aw0ssq"></ul></div>'), qe = e.from_html('<div class="flex justify-center items-center p-6 text-text-secondary" role="status" aria-live="polite"><span class="text-sm"> </span></div>'), je = e.from_html('<section><h2 class="sr-only svelte-1aw0ssq"> </h2> <!> <!></section>');
9
- function Ce(N, d) {
9
+ function Ce(Z, d) {
10
10
  e.push(d, !0);
11
- let V = e.prop(d, "events", 19, () => []), z = e.prop(d, "initialCount", 3, 10), K = e.prop(d, "loadMoreCount", 3, 10), g = e.prop(d, "showDateColumn", 3, !0), f = e.prop(d, "filterFutureOnly", 3, !0), p = e.prop(d, "labels", 19, () => ({})), w = e.state(e.proxy(z())), h = e.state(void 0), _, j = e.derived(() => f() ? ce(V()) : V()), L = e.derived(() => H(e.get(j).slice(0, e.get(w)))), y = e.derived(() => e.get(w) < e.get(j).length);
12
- function Q() {
11
+ let V = e.prop(d, "events", 19, () => []), z = e.prop(d, "initialCount", 3, 10), K = e.prop(d, "loadMoreCount", 3, 10), g = e.prop(d, "showDateColumn", 3, !0), f = e.prop(d, "filterFutureOnly", 3, !0), p = e.prop(d, "labels", 19, () => ({})), w = e.state(e.proxy(z())), h = e.state(void 0), _, j = e.derived(() => f() ? ce(V()) : V()), L = e.derived(() => Q(e.get(j).slice(0, e.get(w)))), y = e.derived(() => e.get(w) < e.get(j).length);
12
+ function H() {
13
13
  e.set(w, e.get(w) + K());
14
14
  }
15
15
  ne(() => {
16
16
  _ = new IntersectionObserver(
17
17
  (c) => {
18
- c[0].isIntersecting && e.get(y) && Q();
18
+ c[0].isIntersecting && e.get(y) && H();
19
19
  },
20
20
  { rootMargin: "100px" }
21
21
  ), e.get(h) && _.observe(e.get(h));
@@ -24,7 +24,7 @@ function Ce(N, d) {
24
24
  }), e.user_effect(() => {
25
25
  _ && e.get(h) && (_.disconnect(), _.observe(e.get(h)));
26
26
  });
27
- function H(c) {
27
+ function Q(c) {
28
28
  const l = {};
29
29
  for (const n of c) {
30
30
  const m = n.date;
@@ -77,7 +77,7 @@ function Ce(N, d) {
77
77
  let b;
78
78
  var D = e.child(x), R = e.child(D);
79
79
  e.reset(D);
80
- var S = e.sibling(D, 2), q = e.child(S), P = e.child(q, !0);
80
+ var S = e.sibling(D, 2), q = e.child(S), I = e.child(q, !0);
81
81
  e.reset(q);
82
82
  var T = e.sibling(q, 2), X = e.child(T, !0);
83
83
  e.reset(T);
@@ -92,7 +92,7 @@ function Ce(N, d) {
92
92
  });
93
93
  }
94
94
  e.reset(S);
95
- var Z = e.sibling(S, 2), te = e.child(Z);
95
+ var N = e.sibling(S, 2), te = e.child(N);
96
96
  {
97
97
  var ae = (i) => {
98
98
  var r = Te(), o = e.child(r, !0);
@@ -120,9 +120,9 @@ function Ce(N, d) {
120
120
  e.get(v) ? i(ae) : (e.get(a).ticketsTotal > 0 || e.get(a).ticketsRemaining === 0) && i(ie, 1);
121
121
  });
122
122
  }
123
- e.reset(Z), e.reset(x), e.reset(u), e.template_effect(
123
+ e.reset(N), e.reset(x), e.reset(u), e.template_effect(
124
124
  (i, r) => {
125
- b = e.set_class(x, 1, "event-row flex gap-4 max-sm:gap-2.5 p-5 max-sm:p-3 cursor-pointer transition-colors duration-150 bg-card border-b border-border/50 last:border-b-0 hover:bg-bg-secondary focus:outline-2 focus:outline-brand-primary focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-brand-primary:outline-brand-primary focus-visible:-outline-offset-2 svelte-1aw0ssq", null, b, { "row-unavailable": e.get(k) }), e.set_attribute(x, "aria-label", i), e.set_attribute(R, "src", e.get(a).image || ue), e.set_text(P, e.get(a).name), e.set_attribute(T, "datetime", e.get(a).startDateTime || e.get(l).date), e.set_text(X, r);
125
+ b = e.set_class(x, 1, "event-row flex gap-4 max-sm:gap-2.5 p-5 max-sm:p-3 cursor-pointer transition-colors duration-150 bg-card border-b border-border/50 last:border-b-0 hover:bg-bg-secondary focus:outline-2 focus:outline-brand-primary focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-brand-primary:outline-brand-primary focus-visible:-outline-offset-2 svelte-1aw0ssq", null, b, { "row-unavailable": e.get(k) }), e.set_attribute(x, "aria-label", i), e.set_attribute(R, "src", e.get(a).image || ue), e.set_text(I, e.get(a).name), e.set_attribute(T, "datetime", e.get(a).startDateTime || e.get(l).date), e.set_text(X, r);
126
126
  },
127
127
  [
128
128
  () => `${e.get(a).name} on ${e.get(a).startDateTime ? le(e.get(a).startDateTime, e.get(a).timeZone) : e.get(l).date} at ${e.get(a).startDateTime ? oe(e.get(a).startDateTime, e.get(a).timeZone) : ""}, ${e.get(v)?.text || e.get(a).status || p().statusOnSale || "On Sale"}. ${p().pressEnterToView || "Press Enter to view details"}`,
@@ -145,14 +145,14 @@ function Ce(N, d) {
145
145
  }
146
146
  e.reset(C), e.template_effect(() => {
147
147
  B = e.set_class(C, 1, "flex flex-col gap-0 svelte-1aw0ssq", null, B, { "no-date-column": !g() }), e.set_attribute(C, "aria-label", p().eventListings || "Event listings"), e.set_text(A, p().eventListGroupedByDate || "Event list grouped by date");
148
- }), e.append(N, C), e.pop();
148
+ }), e.append(Z, C), e.pop();
149
149
  }
150
150
  e.delegate(["click", "keydown"]);
151
- var Se = e.from_html('<div class="password-container svelte-q3tjav"><div class="password-card svelte-q3tjav"><h2 class="password-title svelte-q3tjav"> </h2> <p class="password-description svelte-q3tjav"> </p> <form class="password-form svelte-q3tjav"><!> <button type="submit" class="password-submit svelte-q3tjav"> </button></form></div></div>'), Pe = e.from_html('<div class="error-container svelte-q3tjav"><p class="error-text svelte-q3tjav"> </p></div>'), Ie = e.from_html('<div class="cover-image svelte-q3tjav"><div class="cover-blur svelte-q3tjav"></div> <img class="svelte-q3tjav"/></div>'), Me = e.from_html('<p class="collection-summary svelte-q3tjav"> </p>'), Re = e.from_html('<div class="collection-description svelte-q3tjav"> </div>'), Le = e.from_html('<div class="view-switcher svelte-q3tjav" role="group"><button type="button"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect></svg></button> <button type="button"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line></svg></button></div>'), Oe = e.from_html('<div class="events-grid svelte-q3tjav"></div>'), Ue = e.from_html('<!> <div class="collection-header svelte-q3tjav"><h1 class="collection-title svelte-q3tjav"> </h1> <!> <!></div> <div class="events-section svelte-q3tjav"><div class="events-section-header svelte-q3tjav"><h2 class="events-heading svelte-q3tjav"> </h2> <!></div> <!></div>', 1), Fe = e.from_html('<div class="collection-view svelte-q3tjav"><!></div>');
152
- function ze(N, d) {
151
+ var Se = e.from_html('<div class="password-container svelte-q3tjav"><div class="password-card svelte-q3tjav"><h2 class="password-title svelte-q3tjav"> </h2> <p class="password-description svelte-q3tjav"> </p> <form class="password-form svelte-q3tjav"><!> <button type="submit" class="password-submit svelte-q3tjav"> </button></form></div></div>'), Ie = e.from_html('<div class="error-container svelte-q3tjav"><p class="error-text svelte-q3tjav"> </p></div>'), Pe = e.from_html('<div class="cover-image svelte-q3tjav"><div class="cover-blur svelte-q3tjav"></div> <img class="svelte-q3tjav"/></div>'), Me = e.from_html('<p class="collection-summary svelte-q3tjav"> </p>'), Re = e.from_html('<div class="collection-description svelte-q3tjav"> </div>'), Le = e.from_html('<div class="view-switcher svelte-q3tjav" role="group"><button type="button"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect></svg></button> <button type="button"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line></svg></button></div>'), Oe = e.from_html('<div class="events-grid svelte-q3tjav"></div>'), Ue = e.from_html('<!> <div class="collection-header svelte-q3tjav"><h1 class="collection-title svelte-q3tjav"> </h1> <!> <!></div> <div class="events-section svelte-q3tjav"><div class="events-section-header svelte-q3tjav"><h2 class="events-heading svelte-q3tjav"> </h2> <!></div> <!></div>', 1), Fe = e.from_html('<div class="collection-view svelte-q3tjav"><!></div>');
152
+ function ze(Z, d) {
153
153
  e.push(d, !0), e.prop(d, "organizationId", 3, "");
154
154
  let V = e.prop(d, "password", 3, void 0), z = e.prop(d, "displayMode", 3, "gallery"), K = e.prop(d, "showViewSwitcher", 3, !0), g = e.prop(d, "labels", 19, () => ({})), f = e.state(null), p = e.state(!0), w = e.state(null), h = e.state(!1), _ = e.state(!1), j = e.state(""), L = e.state(!1), y = e.state(e.proxy(z()));
155
- function Q(t) {
155
+ function H(t) {
156
156
  return {
157
157
  id: t.id,
158
158
  name: t.title || t.name || "",
@@ -165,7 +165,7 @@ function ze(N, d) {
165
165
  ticketsTotal: t.ticketsTotal ?? t.capacity
166
166
  };
167
167
  }
168
- function H(t) {
168
+ function Q(t) {
169
169
  return {
170
170
  id: t.id,
171
171
  name: t.title || t.name || "",
@@ -184,7 +184,7 @@ function ze(N, d) {
184
184
  const s = new Date(t);
185
185
  return pe(s, { hour: "numeric", minute: "2-digit", hour12: !0 });
186
186
  }
187
- let E = e.derived(() => e.get(f) ? O(e.get(f).events || []) : []), Y = e.derived(() => e.get(E).map(Q)), C = e.derived(() => e.get(E).map(H)), B = e.derived(() => K() && e.get(E).length >= 2);
187
+ let E = e.derived(() => e.get(f) ? O(e.get(f).events || []) : []), Y = e.derived(() => e.get(E).map(H)), C = e.derived(() => e.get(E).map(Q)), B = e.derived(() => K() && e.get(E).length >= 2);
188
188
  function O(t) {
189
189
  return [...t].sort((s, a) => !s.startDateTime && !a.startDateTime ? 0 : s.startDateTime ? a.startDateTime ? new Date(s.startDateTime).getTime() - new Date(a.startDateTime).getTime() : -1 : 1);
190
190
  }
@@ -246,14 +246,14 @@ function ze(N, d) {
246
246
  e.reset(u);
247
247
  var b = e.sibling(u, 2), D = e.child(b);
248
248
  {
249
- let q = e.derived(() => g().enterPassword || "Enter password"), P = e.derived(() => e.get(L) ? g().incorrectPassword || "Incorrect password. Please try again." : "");
249
+ let q = e.derived(() => g().enterPassword || "Enter password"), I = e.derived(() => e.get(L) ? g().incorrectPassword || "Incorrect password. Please try again." : "");
250
250
  xe(D, {
251
251
  get placeholder() {
252
252
  return e.get(q);
253
253
  },
254
254
  autocomplete: "current-password",
255
255
  get error() {
256
- return e.get(P);
256
+ return e.get(I);
257
257
  },
258
258
  get value() {
259
259
  return e.get(j);
@@ -268,16 +268,16 @@ function ze(N, d) {
268
268
  e.set_text(k, g().collectionPrivateTitle || "This collection is private"), e.set_text(x, g().collectionPrivateDescription || "Please enter the password to view this collection."), e.set_text(S, g().viewCollection || "View Collection");
269
269
  }), e.event("submit", b, J), e.append(t, s);
270
270
  }, m = (t) => {
271
- var s = Pe(), a = e.child(s), v = e.child(a);
271
+ var s = Ie(), a = e.child(s), v = e.child(a);
272
272
  e.reset(a), e.reset(s), e.template_effect(() => e.set_text(v, `${(g().errorPrefix || "Error:") ?? ""} ${e.get(w) ?? ""}`)), e.append(t, s);
273
273
  }, G = (t) => {
274
274
  var s = Ue(), a = e.first_child(s);
275
275
  {
276
276
  var v = (i) => {
277
277
  const r = e.derived(() => se(e.get(f).coverImage));
278
- var o = Ie(), I = e.child(o), M = e.sibling(I, 2);
278
+ var o = Pe(), P = e.child(o), M = e.sibling(P, 2);
279
279
  e.reset(o), e.template_effect(() => {
280
- e.set_style(I, `background-image: url(${e.get(r) ?? ""})`), e.set_attribute(M, "src", e.get(r)), e.set_attribute(M, "alt", e.get(f).collectionTitle);
280
+ e.set_style(P, `background-image: url(${e.get(r) ?? ""})`), e.set_attribute(M, "src", e.get(r)), e.set_attribute(M, "alt", e.get(f).collectionTitle);
281
281
  }), e.append(i, o);
282
282
  };
283
283
  e.if(a, (i) => {
@@ -307,17 +307,17 @@ function ze(N, d) {
307
307
  });
308
308
  }
309
309
  e.reset(k);
310
- var q = e.sibling(k, 2), P = e.child(q), T = e.child(P), X = e.child(T);
310
+ var q = e.sibling(k, 2), I = e.child(q), T = e.child(I), X = e.child(T);
311
311
  e.reset(T);
312
312
  var $ = e.sibling(T, 2);
313
313
  {
314
314
  var ee = (i) => {
315
315
  var r = Le(), o = e.child(r);
316
- let I;
316
+ let P;
317
317
  var M = e.sibling(o, 2);
318
318
  let re;
319
319
  e.reset(r), e.template_effect(() => {
320
- e.set_attribute(r, "aria-label", g().viewOptions || "Display mode"), I = e.set_class(o, 1, "view-switcher-btn svelte-q3tjav", null, I, {
320
+ e.set_attribute(r, "aria-label", g().viewOptions || "Display mode"), P = e.set_class(o, 1, "view-switcher-btn svelte-q3tjav", null, P, {
321
321
  "view-switcher-btn-active": e.get(y) === "gallery"
322
322
  }), e.set_attribute(o, "aria-label", g().galleryView || "Gallery view"), e.set_attribute(o, "aria-pressed", e.get(y) === "gallery"), re = e.set_class(M, 1, "view-switcher-btn svelte-q3tjav", null, re, {
323
323
  "view-switcher-btn-active": e.get(y) === "list"
@@ -328,8 +328,8 @@ function ze(N, d) {
328
328
  e.get(B) && i(ee);
329
329
  });
330
330
  }
331
- e.reset(P);
332
- var Z = e.sibling(P, 2);
331
+ e.reset(I);
332
+ var N = e.sibling(I, 2);
333
333
  {
334
334
  var te = (i) => {
335
335
  {
@@ -353,16 +353,16 @@ function ze(N, d) {
353
353
  });
354
354
  }, ie = (i) => {
355
355
  var r = Oe();
356
- e.each(r, 21, () => e.get(Y), (o) => o.id, (o, I) => {
356
+ e.each(r, 21, () => e.get(Y), (o) => o.id, (o, P) => {
357
357
  we(o, {
358
358
  get event() {
359
- return e.get(I);
359
+ return e.get(P);
360
360
  },
361
361
  oneventClick: A
362
362
  });
363
363
  }), e.reset(r), e.append(i, r);
364
364
  };
365
- e.if(Z, (i) => {
365
+ e.if(N, (i) => {
366
366
  e.get(E).length === 0 ? i(te) : e.get(y) === "list" ? i(ae, 1) : i(ie, !1);
367
367
  });
368
368
  }
@@ -374,10 +374,10 @@ function ze(N, d) {
374
374
  e.get(p) ? t(l) : e.get(_) ? t(n, 1) : e.get(w) ? t(m, 2) : e.get(f) && t(G, 3);
375
375
  });
376
376
  }
377
- e.reset(F), e.append(N, F), e.pop();
377
+ e.reset(F), e.append(Z, F), e.pop();
378
378
  }
379
379
  e.delegate(["click"]);
380
380
  export {
381
381
  ze as default
382
382
  };
383
- //# sourceMappingURL=CollectionView.legacy-CWZTgDhd.js.map
383
+ //# sourceMappingURL=CollectionView.legacy-C4ba5bLU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionView.legacy-CWZTgDhd.js","sources":["../src/components/Calendar/GroupedListView.svelte","../src/components/Views/CollectionView.legacy.svelte"],"sourcesContent":["<script>\r\n import { onMount, onDestroy } from \"svelte\";\r\n import { PLACEHOLDER_IMAGE } from \"$lib/utils/constants.js\";\r\n import { getDateParts, formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\r\n import { getBrowseStatus, isEventUnavailable, filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\r\n import ScarcityBadge from \"../ScarcityBadge.svelte\";\r\n\r\n let {\r\n events = [],\r\n initialCount = 10,\r\n loadMoreCount = 10,\r\n showDateColumn = true,\r\n filterFutureOnly = true,\r\n oneventClick,\r\n labels = {},\r\n } = $props();\r\n\r\n /* svelte-ignore state_referenced_locally */\r\n let displayedCount = $state(initialCount);\r\n let loadMoreTrigger = $state();\r\n let observer;\r\n\r\n // Filter to today and future (if enabled), then group by date\r\n let filteredEvents = $derived(filterFutureOnly ? filterTodayAndFuture(events) : events);\r\n let groupedEvents = $derived(groupEventsByDate(filteredEvents.slice(0, displayedCount)));\r\n let hasMore = $derived(displayedCount < filteredEvents.length);\r\n\r\n function loadMore() {\r\n displayedCount += loadMoreCount;\r\n }\r\n\r\n onMount(() => {\r\n observer = new IntersectionObserver(\r\n (entries) => {\r\n if (entries[0].isIntersecting && hasMore) {\r\n loadMore();\r\n }\r\n },\r\n { rootMargin: '100px' }\r\n );\r\n\r\n if (loadMoreTrigger) {\r\n observer.observe(loadMoreTrigger);\r\n }\r\n });\r\n\r\n onDestroy(() => {\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n // Re-observe when trigger element changes\r\n $effect(() => {\r\n if (observer && loadMoreTrigger) {\r\n observer.disconnect();\r\n observer.observe(loadMoreTrigger);\r\n }\r\n });\r\n\r\n function groupEventsByDate(eventList) {\r\n const groups = {};\r\n\r\n for (const event of eventList) {\r\n const dateKey = event.date; // YYYY-MM-DD format\r\n if (!groups[dateKey]) {\r\n groups[dateKey] = [];\r\n }\r\n groups[dateKey].push(event);\r\n }\r\n\r\n // Convert to array sorted by date\r\n return Object.entries(groups)\r\n .sort(([a], [b]) => new Date(a).getTime() - new Date(b).getTime())\r\n .map(([date, events]) => ({\r\n date,\r\n events,\r\n formattedDate: formatGroupDate(events),\r\n }));\r\n }\r\n\r\n function formatGroupDate(events) {\r\n // Use the first event in the group to get timezone-aware date parts\r\n const firstEvent = events[0];\r\n if (!firstEvent?.startDateTime) return { month: '', day: '', weekday: '' };\r\n const parts = getDateParts(firstEvent.startDateTime, firstEvent.timeZone);\r\n return {\r\n month: parts.month.toUpperCase(),\r\n day: String(parts.date).padStart(2, '0'),\r\n weekday: parts.day.toUpperCase(),\r\n };\r\n }\r\n\r\n function handleEventClick(event) {\r\n oneventClick?.(event);\r\n }\r\n\r\n function handleKeydown(e, event) {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n handleEventClick(event);\r\n }\r\n }\r\n</script>\r\n\r\n<section class=\"flex flex-col gap-0\" class:no-date-column={!showDateColumn} aria-label={labels.eventListings || 'Event listings'}>\r\n <h2 class=\"sr-only\">{labels.eventListGroupedByDate || 'Event list grouped by date'}</h2>\r\n {#each groupedEvents as group}\r\n <div class=\"date-group flex border-b border-border 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}\">\r\n <!-- Date Column -->\r\n {#if showDateColumn}\r\n <div class=\"w-16 min-w-16 py-4 px-2.5 flex flex-col items-center justify-start bg-bg-secondary border-r border-border max-sm:w-12 max-sm:min-w-12 max-sm:py-2.5 max-sm:px-1.5\" aria-hidden=\"true\">\r\n <span class=\"text-xs font-semibold text-text-secondary uppercase tracking-tight\">{group.formattedDate.month}</span>\r\n <span class=\"text-2xl max-sm:text-lg font-bold text-text-primary leading-tight\">{group.formattedDate.day}</span>\r\n <span class=\"text-xs font-semibold text-text-secondary uppercase tracking-tight\">{group.formattedDate.weekday}</span>\r\n </div>\r\n {/if}\r\n\r\n <!-- Events Column -->\r\n <ul class=\"events-column flex-1 flex flex-col list-none p-0 m-0\">\r\n {#each group.events as event, eventIndex}\r\n {@const eventStatus = getBrowseStatus(event)}\r\n {@const isUnavailable = isEventUnavailable(eventStatus)}\r\n <li class=\"list-none\">\r\n <div\r\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-card border-b border-border/50 last:border-b-0 hover:bg-bg-secondary focus:outline-2 focus:outline-brand-primary focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-brand-primary:outline-brand-primary focus-visible:-outline-offset-2\"\r\n class:row-unavailable={isUnavailable}\r\n onclick={() => handleEventClick(event)}\r\n onkeydown={(e) => handleKeydown(e, event)}\r\n tabindex=\"0\"\r\n role=\"button\"\r\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'}`}\r\n >\r\n <!-- Event Image -->\r\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-bg-secondary flex items-center justify-center\" aria-hidden=\"true\">\r\n <!-- @component-image-escape: scoped-CSS selector targets this img via .row-unavailable img -->\r\n <img\r\n src={event.image || PLACEHOLDER_IMAGE}\r\n alt=\"\"\r\n class=\"w-full h-full object-contain\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <!-- Event Details (visually shown but also in aria-label, so hide from SR) -->\r\n <div class=\"flex-1 flex flex-col gap-1.5 min-w-0\" aria-hidden=\"true\">\r\n <h3 class=\"text-lg max-sm:text-sm font-semibold text-text-primary m-0 leading-snug\">{event.name}</h3>\r\n <time class=\"text-sm max-sm:text-xs font-medium text-text-secondary\" datetime={event.startDateTime || group.date}>{event.startDateTime ? formatEventTime(event.startDateTime, event.timeZone) : ''}</time>\r\n {#if event.description}\r\n <p class=\"event-description text-sm text-text-secondary mt-1.5 mb-0 line-clamp-2 max-sm:hidden\">{event.description}</p>\r\n {/if}\r\n </div>\r\n\r\n <!-- Status / Scarcity Badge -->\r\n <div class=\"flex items-start pt-0.5\" aria-hidden=\"true\">\r\n {#if eventStatus}\r\n <span class=\"status-badge status-{eventStatus.type}\">{eventStatus.text}</span>\r\n {:else if event.ticketsTotal > 0 || event.ticketsRemaining === 0}\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 {/if}\r\n </div>\r\n </div>\r\n </li>\r\n {/each}\r\n </ul>\r\n </div>\r\n {/each}\r\n\r\n <!-- Infinite scroll trigger -->\r\n {#if hasMore}\r\n <div bind:this={loadMoreTrigger} class=\"flex justify-center items-center p-6 text-text-secondary\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"text-sm\">{labels.loadingMoreEvents || 'Loading more events...'}</span>\r\n </div>\r\n {/if}\r\n</section>\r\n\r\n<style>\r\n /* When no date column, remove left border styling */\r\n .no-date-column .date-group {\r\n border-bottom: 0;\r\n }\r\n\r\n .no-date-column .events-column {\r\n border-left: 0;\r\n }\r\n\r\n .event-description {\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n }\r\n\r\n /* Unavailable row dimming */\r\n .row-unavailable {\r\n opacity: 0.6;\r\n }\r\n\r\n .row-unavailable img {\r\n filter: grayscale(0.5);\r\n }\r\n\r\n /* Status badges -- distinct visual treatments matching gallery cards */\r\n .status-badge {\r\n display: inline-flex;\r\n align-items: center;\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n font-weight: 700;\r\n padding: 0.25rem 0.625rem;\r\n border-radius: 0.25rem;\r\n white-space: nowrap;\r\n letter-spacing: 0.02em;\r\n }\r\n\r\n .status-cancelled {\r\n background-color: hsl(var(--accent-danger) / 10%);\r\n color: hsl(var(--accent-danger));\r\n text-decoration: line-through;\r\n text-decoration-thickness: 1.5px;\r\n\r\n \r\n }\r\n\r\n .status-past {\r\n background-color: hsl(var(--bg-tertiary));\r\n color: hsl(var(--text-tertiary));\r\n\r\n \r\n }\r\n\r\n .status-sold_out {\r\n background-color: hsl(var(--accent-danger) / 10%);\r\n color: hsl(var(--accent-danger));\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n font-size: 0.65rem;\r\n\r\n \r\n }\r\n\r\n .status-sales_ended {\r\n background-color: hsl(var(--bg-tertiary));\r\n color: hsl(var(--text-tertiary));\r\n border: 1px solid hsl(var(--stroke-primary));\r\n\r\n \r\n }\r\n\r\n .status-coming_soon {\r\n background-color: hsl(var(--brand-primary) / 15%);\r\n color: hsl(var(--brand-primary));\r\n\r\n \r\n }\r\n\r\n /* Reduced motion */\r\n @media (prefers-reduced-motion: reduce) {\r\n .event-row {\r\n transition: none;\r\n }\r\n }\r\n\r\n /* Screen reader only text */\r\n .sr-only {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border-width: 0;\r\n }\r\n</style>\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, onDestroy } from 'svelte';\r\n import { fetchPublicCollection } from '../../lib/api/events.ts';\r\n import { getImageUrl } from '$lib/utils/utils.js';\r\n import {\r\n EmptyState,\r\n PasswordInput,\r\n formatTime,\r\n } from '@getmicdrop/svelte-components';\r\n import GalleryCard from '../Calendar/GalleryCard.svelte';\r\n import GroupedListView from '../Calendar/GroupedListView.svelte';\r\n import SkeletonLoader from '../SkeletonLoader/SkeletonLoader.svelte';\r\n\r\n let {\r\n collectionId,\r\n organizationId = '',\r\n onNavigateToEvent,\r\n password: initialPassword = undefined,\r\n displayMode: initialDisplayMode = 'gallery',\r\n showViewSwitcher = true,\r\n labels = {},\r\n } = $props();\r\n\r\n let collection = $state(null);\r\n let isLoading = $state(true);\r\n let error = $state(null);\r\n let isMounted = $state(false);\r\n let passwordRequired = $state(false);\r\n let passwordInput = $state('');\r\n let passwordError = $state(false);\r\n let activeDisplayMode = $state(initialDisplayMode);\r\n\r\n // Transform collection events into the shape GalleryCard expects\r\n function toGalleryEvent(event) {\r\n return {\r\n id: event.id,\r\n name: event.title || event.name || '',\r\n date: event.startDateTime ? event.startDateTime.split('T')[0] : '',\r\n image: event.image ? getImageUrl(event.image) : '',\r\n timeline: event.startDateTime ? formatTimeline(event.startDateTime) : '',\r\n status: event.status || 'on_sale',\r\n slug: event.slug || '',\r\n ticketsRemaining: event.ticketsRemaining ?? event.ticketsAvailable,\r\n ticketsTotal: event.ticketsTotal ?? event.capacity,\r\n };\r\n }\r\n\r\n // Transform collection events into the shape GroupedListView expects\r\n function toListEvent(event) {\r\n return {\r\n id: event.id,\r\n name: event.title || event.name || '',\r\n date: event.startDateTime ? event.startDateTime.split('T')[0] : '',\r\n startDateTime: event.startDateTime || '',\r\n image: event.image ? getImageUrl(event.image) : '',\r\n status: event.status || 'on_sale',\r\n slug: event.slug || '',\r\n description: event.description || '',\r\n ticketsRemaining: event.ticketsRemaining ?? event.ticketsAvailable,\r\n ticketsTotal: event.ticketsTotal ?? event.capacity,\r\n };\r\n }\r\n\r\n function formatTimeline(iso) {\r\n if (!iso) return '';\r\n const date = new Date(iso);\r\n return formatTime(date, {\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n });\r\n }\r\n\r\n let displayEvents = $derived(\r\n collection ? sortByStartTime(collection.events || []) : []\r\n );\r\n\r\n let galleryEvents = $derived(displayEvents.map(toGalleryEvent));\r\n let listEvents = $derived(displayEvents.map(toListEvent));\r\n\r\n // Only show view switcher when there are 2+ events\r\n let canShowSwitcher = $derived(showViewSwitcher && displayEvents.length >= 2);\r\n\r\n function sortByStartTime(events) {\r\n return [...events].sort((a, b) => {\r\n if (!a.startDateTime && !b.startDateTime) return 0;\r\n if (!a.startDateTime) return 1;\r\n if (!b.startDateTime) return -1;\r\n return (\r\n new Date(a.startDateTime).getTime() -\r\n new Date(b.startDateTime).getTime()\r\n );\r\n });\r\n }\r\n\r\n function handleEventClick(galleryEvent) {\r\n if (onNavigateToEvent) {\r\n const eventData = galleryEvent.detail || galleryEvent;\r\n onNavigateToEvent(eventData.id, eventData.slug || '');\r\n }\r\n }\r\n\r\n async function loadCollection(pwd) {\r\n if (!isMounted) return;\r\n if (!collectionId) {\r\n error = labels.noCollectionIdProvided || 'No collection ID provided';\r\n isLoading = false;\r\n return;\r\n }\r\n\r\n isLoading = true;\r\n error = null;\r\n passwordError = false;\r\n\r\n try {\r\n const data = await fetchPublicCollection(collectionId, pwd);\r\n if (!isMounted) return;\r\n\r\n if (data) {\r\n // Check if the response indicates password is required\r\n if (data.passwordRequired || data.error?.code === 'PASSWORD_REQUIRED') {\r\n passwordRequired = true;\r\n isLoading = false;\r\n return;\r\n }\r\n collection = data;\r\n passwordRequired = false;\r\n } else {\r\n // A null response after providing a password likely means wrong password\r\n if (pwd) {\r\n passwordRequired = true;\r\n passwordError = true;\r\n isLoading = false;\r\n return;\r\n }\r\n error = labels.failedToLoadCollection || 'Failed to load collection';\r\n }\r\n } catch (err) {\r\n if (isMounted) {\r\n // Check for password-related error responses\r\n const msg = err.message || '';\r\n if (\r\n msg.includes('401') ||\r\n msg.includes('403') ||\r\n msg.includes('password')\r\n ) {\r\n passwordRequired = true;\r\n } else {\r\n error = msg || 'Failed to load collection';\r\n }\r\n }\r\n } finally {\r\n if (isMounted) {\r\n isLoading = false;\r\n }\r\n }\r\n }\r\n\r\n function handlePasswordSubmit(e) {\r\n e.preventDefault();\r\n if (!passwordInput.trim()) return;\r\n loadCollection(passwordInput);\r\n }\r\n\r\n onMount(async () => {\r\n isMounted = true;\r\n await loadCollection(initialPassword);\r\n });\r\n\r\n onDestroy(() => {\r\n isMounted = false;\r\n });\r\n</script>\r\n\r\n<div class=\"collection-view\">\r\n {#if isLoading}\r\n <SkeletonLoader type=\"gallery\" />\r\n {:else if passwordRequired}\r\n <div class=\"password-container\">\r\n <div class=\"password-card\">\r\n <h2 class=\"password-title\">\r\n {labels.collectionPrivateTitle || 'This collection is private'}\r\n </h2>\r\n <p class=\"password-description\">\r\n {labels.collectionPrivateDescription ||\r\n 'Please enter the password to view this collection.'}\r\n </p>\r\n <form onsubmit={handlePasswordSubmit} class=\"password-form\">\r\n <PasswordInput\r\n bind:value={passwordInput}\r\n placeholder={labels.enterPassword || 'Enter password'}\r\n autocomplete=\"current-password\"\r\n error={passwordError\r\n ? labels.incorrectPassword ||\r\n 'Incorrect password. Please try again.'\r\n : ''}\r\n />\r\n <button type=\"submit\" class=\"password-submit\"\r\n >{labels.viewCollection || 'View Collection'}</button\r\n >\r\n </form>\r\n </div>\r\n </div>\r\n {:else if error}\r\n <div class=\"error-container\">\r\n <p class=\"error-text\">{labels.errorPrefix || 'Error:'} {error}</p>\r\n </div>\r\n {:else if collection}\r\n <!-- Cover Image with Blur -->\r\n {#if collection.coverImage}\r\n {@const imageUrl = getImageUrl(collection.coverImage)}\r\n <div class=\"cover-image\">\r\n <div class=\"cover-blur\" style=\"background-image: url({imageUrl})\"></div>\r\n <img src={imageUrl} alt={collection.collectionTitle} />\r\n </div>\r\n {/if}\r\n\r\n <!-- Collection Header -->\r\n <div class=\"collection-header\">\r\n <h1 class=\"collection-title\">{collection.collectionTitle}</h1>\r\n {#if collection.summary}\r\n <p class=\"collection-summary\">{collection.summary}</p>\r\n {/if}\r\n {#if collection.description}\r\n <div class=\"collection-description\">{collection.description}</div>\r\n {/if}\r\n </div>\r\n\r\n <!-- Events Section -->\r\n <div class=\"events-section\">\r\n <div class=\"events-section-header\">\r\n <h2 class=\"events-heading\">Events ({displayEvents.length})</h2>\r\n\r\n {#if canShowSwitcher}\r\n <div\r\n class=\"view-switcher\"\r\n role=\"group\"\r\n aria-label={labels.viewOptions || 'Display mode'}\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"view-switcher-btn\"\r\n class:view-switcher-btn-active={activeDisplayMode === 'gallery'}\r\n onclick={() => (activeDisplayMode = 'gallery')}\r\n aria-label={labels.galleryView || 'Gallery view'}\r\n aria-pressed={activeDisplayMode === 'gallery'}\r\n >\r\n <svg\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect>\r\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect>\r\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>\r\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect>\r\n </svg>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"view-switcher-btn\"\r\n class:view-switcher-btn-active={activeDisplayMode === 'list'}\r\n onclick={() => (activeDisplayMode = 'list')}\r\n aria-label={labels.listView || 'List view'}\r\n aria-pressed={activeDisplayMode === 'list'}\r\n >\r\n <svg\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\r\n <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\r\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line>\r\n <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line>\r\n <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line>\r\n <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n {#if displayEvents.length === 0}\r\n <EmptyState\r\n message={labels.noUpcomingEvents || 'No upcoming events'}\r\n subtext={labels.noUpcomingEventsSubtext ||\r\n 'There are no events in this collection right now. Check back soon!'}\r\n />\r\n {:else if activeDisplayMode === 'list'}\r\n <GroupedListView\r\n events={listEvents}\r\n filterFutureOnly={false}\r\n oneventClick={handleEventClick}\r\n />\r\n {:else}\r\n <div class=\"events-grid\">\r\n {#each galleryEvents as event (event.id)}\r\n <GalleryCard {event} oneventClick={handleEventClick} />\r\n {/each}\r\n </div>\r\n {/if}\r\n </div>\r\n {/if}\r\n</div>\r\n\r\n<style>\r\n .collection-view {\r\n width: 100%;\r\n max-width: 64rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n padding-left: 1rem;\r\n padding-right: 1rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .error-container,\r\n .password-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 50vh;\r\n text-align: center;\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 /* Password gate */\r\n .password-card {\r\n border-radius: 0.5rem;\r\n padding: 2rem;\r\n max-width: 24rem;\r\n width: 100%;\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n box-shadow: 0 2px 10px color-mix(in srgb, black 10%, transparent);\r\n }\r\n\r\n .password-title {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 700;\r\n margin-bottom: 0.5rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .password-description {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n margin-bottom: 1.5rem;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .password-form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.75rem;\r\n }\r\n\r\n .password-input {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 85%));\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n }\r\n\r\n .password-input:focus {\r\n outline: none;\r\n border-color: hsl(var(--brand-primary, 220 90% 56%));\r\n box-shadow: 0 0 0 2px hsl(var(--brand-primary, 220 90% 56%) / 20%);\r\n }\r\n\r\n .password-input-error {\r\n border-color: hsl(var(--status-sold-out, 0 72% 51%));\r\n }\r\n\r\n .password-error-text {\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n color: hsl(var(--status-sold-out, 0 72% 51%));\r\n }\r\n\r\n .password-submit {\r\n padding: 0.5rem 1rem;\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n background: hsl(var(--brand-primary, 220 90% 56%));\r\n color: hsl(var(--text-on-primary, 0 0% 100%));\r\n }\r\n\r\n .password-submit:hover {\r\n filter: brightness(0.95);\r\n }\r\n\r\n /* Cover Image with blur background */\r\n .cover-image {\r\n position: relative;\r\n width: 100%;\r\n overflow: hidden;\r\n border-radius: 0.5rem;\r\n margin-bottom: 2rem;\r\n height: 350px;\r\n }\r\n\r\n .cover-blur {\r\n position: absolute;\r\n inset: 0;\r\n background-size: cover;\r\n background-position: center;\r\n filter: blur(24px) saturate(1.2);\r\n transform: scale(1.15);\r\n }\r\n\r\n .cover-image img {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n object-fit: contain;\r\n }\r\n\r\n /* Header */\r\n .collection-header {\r\n margin-bottom: 2rem;\r\n }\r\n\r\n .collection-title {\r\n font-size: 1.875rem;\r\n line-height: 2.25rem;\r\n font-weight: 700;\r\n margin-bottom: 0.5rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .collection-summary {\r\n font-size: 1.125rem;\r\n line-height: 1.75rem;\r\n margin-bottom: 1rem;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .collection-description {\r\n line-height: 1.625;\r\n color: hsl(var(--text-secondary, 0 0% 35%));\r\n }\r\n\r\n /* Events Section */\r\n .events-section {\r\n margin-bottom: 2rem;\r\n }\r\n\r\n .events-section-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 1rem;\r\n }\r\n\r\n .events-heading {\r\n font-size: 1.5rem;\r\n line-height: 2rem;\r\n font-weight: 700;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n /* View Switcher */\r\n .view-switcher {\r\n display: flex;\r\n gap: 0.25rem;\r\n padding: 0.25rem;\r\n border-radius: 0.5rem;\r\n background: hsl(var(--surface-secondary, 0 0% 96%));\r\n }\r\n\r\n .view-switcher-btn {\r\n padding: 0.375rem;\r\n border-radius: 0.375rem;\r\n transition: color 0.15s;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .view-switcher-btn:hover {\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .view-switcher-btn-active {\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n box-shadow: 0 1px 2px color-mix(in srgb, black 8%, transparent);\r\n }\r\n\r\n .events-grid {\r\n display: grid;\r\n gap: 1.5rem;\r\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\r\n }\r\n\r\n /* Responsive */\r\n @media (width <= 640px) {\r\n .cover-image {\r\n height: 250px;\r\n }\r\n\r\n .collection-title {\r\n font-size: 1.5rem;\r\n line-height: 2rem;\r\n }\r\n\r\n .events-grid {\r\n grid-template-columns: repeat(2, 1fr);\r\n }\r\n }\r\n\r\n @media (width <= 400px) {\r\n .events-grid {\r\n grid-template-columns: 1fr;\r\n }\r\n }\r\n</style>\r\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","formatTime","displayEvents","sortByStartTime","galleryEvents","listEvents","canShowSwitcher","galleryEvent","eventData","loadCollection","pwd","data","fetchPublicCollection","err","msg","handlePasswordSubmit","SkeletonLoader","form","PasswordInput","button","p_1","text_3","imageUrl","node_2","h1","p_2","root_6","text_5","div_7","consequent_5","div_8","div_9","h2_1","div_10","root_8","button_1","button_2","consequent_6","EmptyState","GroupedListView","div_11","root_11","GalleryCard","consequent_7","consequent_8","alternate","consequent_9"],"mappings":"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"}
1
+ {"version":3,"file":"CollectionView.legacy-C4ba5bLU.js","sources":["../src/components/Calendar/GroupedListView.svelte","../src/components/Views/CollectionView.legacy.svelte"],"sourcesContent":["<script>\r\n import { onMount, onDestroy } from \"svelte\";\r\n import { PLACEHOLDER_IMAGE } from \"$lib/utils/constants.js\";\r\n import { getDateParts, formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\r\n import { getBrowseStatus, isEventUnavailable, filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\r\n import ScarcityBadge from \"../ScarcityBadge.svelte\";\r\n\r\n let {\r\n events = [],\r\n initialCount = 10,\r\n loadMoreCount = 10,\r\n showDateColumn = true,\r\n filterFutureOnly = true,\r\n oneventClick,\r\n labels = {},\r\n } = $props();\r\n\r\n /* svelte-ignore state_referenced_locally */\r\n let displayedCount = $state(initialCount);\r\n let loadMoreTrigger = $state();\r\n let observer;\r\n\r\n // Filter to today and future (if enabled), then group by date\r\n let filteredEvents = $derived(filterFutureOnly ? filterTodayAndFuture(events) : events);\r\n let groupedEvents = $derived(groupEventsByDate(filteredEvents.slice(0, displayedCount)));\r\n let hasMore = $derived(displayedCount < filteredEvents.length);\r\n\r\n function loadMore() {\r\n displayedCount += loadMoreCount;\r\n }\r\n\r\n onMount(() => {\r\n observer = new IntersectionObserver(\r\n (entries) => {\r\n if (entries[0].isIntersecting && hasMore) {\r\n loadMore();\r\n }\r\n },\r\n { rootMargin: '100px' }\r\n );\r\n\r\n if (loadMoreTrigger) {\r\n observer.observe(loadMoreTrigger);\r\n }\r\n });\r\n\r\n onDestroy(() => {\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n // Re-observe when trigger element changes\r\n $effect(() => {\r\n if (observer && loadMoreTrigger) {\r\n observer.disconnect();\r\n observer.observe(loadMoreTrigger);\r\n }\r\n });\r\n\r\n function groupEventsByDate(eventList) {\r\n const groups = {};\r\n\r\n for (const event of eventList) {\r\n const dateKey = event.date; // YYYY-MM-DD format\r\n if (!groups[dateKey]) {\r\n groups[dateKey] = [];\r\n }\r\n groups[dateKey].push(event);\r\n }\r\n\r\n // Convert to array sorted by date\r\n return Object.entries(groups)\r\n .sort(([a], [b]) => new Date(a).getTime() - new Date(b).getTime())\r\n .map(([date, events]) => ({\r\n date,\r\n events,\r\n formattedDate: formatGroupDate(events),\r\n }));\r\n }\r\n\r\n function formatGroupDate(events) {\r\n // Use the first event in the group to get timezone-aware date parts\r\n const firstEvent = events[0];\r\n if (!firstEvent?.startDateTime) return { month: '', day: '', weekday: '' };\r\n const parts = getDateParts(firstEvent.startDateTime, firstEvent.timeZone);\r\n return {\r\n month: parts.month.toUpperCase(),\r\n day: String(parts.date).padStart(2, '0'),\r\n weekday: parts.day.toUpperCase(),\r\n };\r\n }\r\n\r\n function handleEventClick(event) {\r\n oneventClick?.(event);\r\n }\r\n\r\n function handleKeydown(e, event) {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n handleEventClick(event);\r\n }\r\n }\r\n</script>\r\n\r\n<section class=\"flex flex-col gap-0\" class:no-date-column={!showDateColumn} aria-label={labels.eventListings || 'Event listings'}>\r\n <h2 class=\"sr-only\">{labels.eventListGroupedByDate || 'Event list grouped by date'}</h2>\r\n {#each groupedEvents as group}\r\n <div class=\"date-group flex border-b border-border 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}\">\r\n <!-- Date Column -->\r\n {#if showDateColumn}\r\n <div class=\"w-16 min-w-16 py-4 px-2.5 flex flex-col items-center justify-start bg-bg-secondary border-r border-border max-sm:w-12 max-sm:min-w-12 max-sm:py-2.5 max-sm:px-1.5\" aria-hidden=\"true\">\r\n <span class=\"text-xs font-semibold text-text-secondary uppercase tracking-tight\">{group.formattedDate.month}</span>\r\n <span class=\"text-2xl max-sm:text-lg font-bold text-text-primary leading-tight\">{group.formattedDate.day}</span>\r\n <span class=\"text-xs font-semibold text-text-secondary uppercase tracking-tight\">{group.formattedDate.weekday}</span>\r\n </div>\r\n {/if}\r\n\r\n <!-- Events Column -->\r\n <ul class=\"events-column flex-1 flex flex-col list-none p-0 m-0\">\r\n {#each group.events as event, eventIndex}\r\n {@const eventStatus = getBrowseStatus(event)}\r\n {@const isUnavailable = isEventUnavailable(eventStatus)}\r\n <li class=\"list-none\">\r\n <div\r\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-card border-b border-border/50 last:border-b-0 hover:bg-bg-secondary focus:outline-2 focus:outline-brand-primary focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-brand-primary:outline-brand-primary focus-visible:-outline-offset-2\"\r\n class:row-unavailable={isUnavailable}\r\n onclick={() => handleEventClick(event)}\r\n onkeydown={(e) => handleKeydown(e, event)}\r\n tabindex=\"0\"\r\n role=\"button\"\r\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'}`}\r\n >\r\n <!-- Event Image -->\r\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-bg-secondary flex items-center justify-center\" aria-hidden=\"true\">\r\n <!-- @component-image-escape: scoped-CSS selector targets this img via .row-unavailable img -->\r\n <img\r\n src={event.image || PLACEHOLDER_IMAGE}\r\n alt=\"\"\r\n class=\"w-full h-full object-contain\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <!-- Event Details (visually shown but also in aria-label, so hide from SR) -->\r\n <div class=\"flex-1 flex flex-col gap-1.5 min-w-0\" aria-hidden=\"true\">\r\n <h3 class=\"text-lg max-sm:text-sm font-semibold text-text-primary m-0 leading-snug\">{event.name}</h3>\r\n <time class=\"text-sm max-sm:text-xs font-medium text-text-secondary\" datetime={event.startDateTime || group.date}>{event.startDateTime ? formatEventTime(event.startDateTime, event.timeZone) : ''}</time>\r\n {#if event.description}\r\n <p class=\"event-description text-sm text-text-secondary mt-1.5 mb-0 line-clamp-2 max-sm:hidden\">{event.description}</p>\r\n {/if}\r\n </div>\r\n\r\n <!-- Status / Scarcity Badge -->\r\n <div class=\"flex items-start pt-0.5\" aria-hidden=\"true\">\r\n {#if eventStatus}\r\n <span class=\"status-badge status-{eventStatus.type}\">{eventStatus.text}</span>\r\n {:else if event.ticketsTotal > 0 || event.ticketsRemaining === 0}\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 {/if}\r\n </div>\r\n </div>\r\n </li>\r\n {/each}\r\n </ul>\r\n </div>\r\n {/each}\r\n\r\n <!-- Infinite scroll trigger -->\r\n {#if hasMore}\r\n <div bind:this={loadMoreTrigger} class=\"flex justify-center items-center p-6 text-text-secondary\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"text-sm\">{labels.loadingMoreEvents || 'Loading more events...'}</span>\r\n </div>\r\n {/if}\r\n</section>\r\n\r\n<style>\r\n /* When no date column, remove left border styling */\r\n .no-date-column .date-group {\r\n border-bottom: 0;\r\n }\r\n\r\n .no-date-column .events-column {\r\n border-left: 0;\r\n }\r\n\r\n .event-description {\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n }\r\n\r\n /* Unavailable row dimming */\r\n .row-unavailable {\r\n opacity: 0.6;\r\n }\r\n\r\n .row-unavailable img {\r\n filter: grayscale(0.5);\r\n }\r\n\r\n /* Status badges -- distinct visual treatments matching gallery cards */\r\n .status-badge {\r\n display: inline-flex;\r\n align-items: center;\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n font-weight: 700;\r\n padding: 0.25rem 0.625rem;\r\n border-radius: 0.25rem;\r\n white-space: nowrap;\r\n letter-spacing: 0.02em;\r\n }\r\n\r\n .status-cancelled {\r\n background-color: hsl(var(--accent-danger) / 10%);\r\n color: hsl(var(--accent-danger));\r\n text-decoration: line-through;\r\n text-decoration-thickness: 1.5px;\r\n\r\n \r\n }\r\n\r\n .status-past {\r\n background-color: hsl(var(--bg-tertiary));\r\n color: hsl(var(--text-tertiary));\r\n\r\n \r\n }\r\n\r\n .status-sold_out {\r\n background-color: hsl(var(--accent-danger) / 10%);\r\n color: hsl(var(--accent-danger));\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n font-size: 0.65rem;\r\n\r\n \r\n }\r\n\r\n .status-sales_ended {\r\n background-color: hsl(var(--bg-tertiary));\r\n color: hsl(var(--text-tertiary));\r\n border: 1px solid hsl(var(--stroke-primary));\r\n\r\n \r\n }\r\n\r\n .status-coming_soon {\r\n background-color: hsl(var(--brand-primary) / 15%);\r\n color: hsl(var(--brand-primary));\r\n\r\n \r\n }\r\n\r\n /* Reduced motion */\r\n @media (prefers-reduced-motion: reduce) {\r\n .event-row {\r\n transition: none;\r\n }\r\n }\r\n\r\n /* Screen reader only text */\r\n .sr-only {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border-width: 0;\r\n }\r\n</style>\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, onDestroy } from 'svelte';\r\n import { fetchPublicCollection } from '../../lib/api/events.ts';\r\n import { getImageUrl } from '$lib/utils/utils.js';\r\n import {\r\n EmptyState,\r\n PasswordInput,\r\n formatTime,\r\n } from '@getmicdrop/svelte-components';\r\n import GalleryCard from '../Calendar/GalleryCard.svelte';\r\n import GroupedListView from '../Calendar/GroupedListView.svelte';\r\n import SkeletonLoader from '../SkeletonLoader/SkeletonLoader.svelte';\r\n\r\n let {\r\n collectionId,\r\n organizationId = '',\r\n onNavigateToEvent,\r\n password: initialPassword = undefined,\r\n displayMode: initialDisplayMode = 'gallery',\r\n showViewSwitcher = true,\r\n labels = {},\r\n } = $props();\r\n\r\n let collection = $state(null);\r\n let isLoading = $state(true);\r\n let error = $state(null);\r\n let isMounted = $state(false);\r\n let passwordRequired = $state(false);\r\n let passwordInput = $state('');\r\n let passwordError = $state(false);\r\n let activeDisplayMode = $state(initialDisplayMode);\r\n\r\n // Transform collection events into the shape GalleryCard expects\r\n function toGalleryEvent(event) {\r\n return {\r\n id: event.id,\r\n name: event.title || event.name || '',\r\n date: event.startDateTime ? event.startDateTime.split('T')[0] : '',\r\n image: event.image ? getImageUrl(event.image) : '',\r\n timeline: event.startDateTime ? formatTimeline(event.startDateTime) : '',\r\n status: event.status || 'on_sale',\r\n slug: event.slug || '',\r\n ticketsRemaining: event.ticketsRemaining ?? event.ticketsAvailable,\r\n ticketsTotal: event.ticketsTotal ?? event.capacity,\r\n };\r\n }\r\n\r\n // Transform collection events into the shape GroupedListView expects\r\n function toListEvent(event) {\r\n return {\r\n id: event.id,\r\n name: event.title || event.name || '',\r\n date: event.startDateTime ? event.startDateTime.split('T')[0] : '',\r\n startDateTime: event.startDateTime || '',\r\n image: event.image ? getImageUrl(event.image) : '',\r\n status: event.status || 'on_sale',\r\n slug: event.slug || '',\r\n description: event.description || '',\r\n ticketsRemaining: event.ticketsRemaining ?? event.ticketsAvailable,\r\n ticketsTotal: event.ticketsTotal ?? event.capacity,\r\n };\r\n }\r\n\r\n function formatTimeline(iso) {\r\n if (!iso) return '';\r\n const date = new Date(iso);\r\n return formatTime(date, {\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n });\r\n }\r\n\r\n let displayEvents = $derived(\r\n collection ? sortByStartTime(collection.events || []) : []\r\n );\r\n\r\n let galleryEvents = $derived(displayEvents.map(toGalleryEvent));\r\n let listEvents = $derived(displayEvents.map(toListEvent));\r\n\r\n // Only show view switcher when there are 2+ events\r\n let canShowSwitcher = $derived(showViewSwitcher && displayEvents.length >= 2);\r\n\r\n function sortByStartTime(events) {\r\n return [...events].sort((a, b) => {\r\n if (!a.startDateTime && !b.startDateTime) return 0;\r\n if (!a.startDateTime) return 1;\r\n if (!b.startDateTime) return -1;\r\n return (\r\n new Date(a.startDateTime).getTime() -\r\n new Date(b.startDateTime).getTime()\r\n );\r\n });\r\n }\r\n\r\n function handleEventClick(galleryEvent) {\r\n if (onNavigateToEvent) {\r\n const eventData = galleryEvent.detail || galleryEvent;\r\n onNavigateToEvent(eventData.id, eventData.slug || '');\r\n }\r\n }\r\n\r\n async function loadCollection(pwd) {\r\n if (!isMounted) return;\r\n if (!collectionId) {\r\n error = labels.noCollectionIdProvided || 'No collection ID provided';\r\n isLoading = false;\r\n return;\r\n }\r\n\r\n isLoading = true;\r\n error = null;\r\n passwordError = false;\r\n\r\n try {\r\n const data = await fetchPublicCollection(collectionId, pwd);\r\n if (!isMounted) return;\r\n\r\n if (data) {\r\n // Check if the response indicates password is required\r\n if (data.passwordRequired || data.error?.code === 'PASSWORD_REQUIRED') {\r\n passwordRequired = true;\r\n isLoading = false;\r\n return;\r\n }\r\n collection = data;\r\n passwordRequired = false;\r\n } else {\r\n // A null response after providing a password likely means wrong password\r\n if (pwd) {\r\n passwordRequired = true;\r\n passwordError = true;\r\n isLoading = false;\r\n return;\r\n }\r\n error = labels.failedToLoadCollection || 'Failed to load collection';\r\n }\r\n } catch (err) {\r\n if (isMounted) {\r\n // Check for password-related error responses\r\n const msg = err.message || '';\r\n if (\r\n msg.includes('401') ||\r\n msg.includes('403') ||\r\n msg.includes('password')\r\n ) {\r\n passwordRequired = true;\r\n } else {\r\n error = msg || 'Failed to load collection';\r\n }\r\n }\r\n } finally {\r\n if (isMounted) {\r\n isLoading = false;\r\n }\r\n }\r\n }\r\n\r\n function handlePasswordSubmit(e) {\r\n e.preventDefault();\r\n if (!passwordInput.trim()) return;\r\n loadCollection(passwordInput);\r\n }\r\n\r\n onMount(async () => {\r\n isMounted = true;\r\n await loadCollection(initialPassword);\r\n });\r\n\r\n onDestroy(() => {\r\n isMounted = false;\r\n });\r\n</script>\r\n\r\n<div class=\"collection-view\">\r\n {#if isLoading}\r\n <SkeletonLoader type=\"gallery\" />\r\n {:else if passwordRequired}\r\n <div class=\"password-container\">\r\n <div class=\"password-card\">\r\n <h2 class=\"password-title\">\r\n {labels.collectionPrivateTitle || 'This collection is private'}\r\n </h2>\r\n <p class=\"password-description\">\r\n {labels.collectionPrivateDescription ||\r\n 'Please enter the password to view this collection.'}\r\n </p>\r\n <form onsubmit={handlePasswordSubmit} class=\"password-form\">\r\n <PasswordInput\r\n bind:value={passwordInput}\r\n placeholder={labels.enterPassword || 'Enter password'}\r\n autocomplete=\"current-password\"\r\n error={passwordError\r\n ? labels.incorrectPassword ||\r\n 'Incorrect password. Please try again.'\r\n : ''}\r\n />\r\n <button type=\"submit\" class=\"password-submit\"\r\n >{labels.viewCollection || 'View Collection'}</button\r\n >\r\n </form>\r\n </div>\r\n </div>\r\n {:else if error}\r\n <div class=\"error-container\">\r\n <p class=\"error-text\">{labels.errorPrefix || 'Error:'} {error}</p>\r\n </div>\r\n {:else if collection}\r\n <!-- Cover Image with Blur -->\r\n {#if collection.coverImage}\r\n {@const imageUrl = getImageUrl(collection.coverImage)}\r\n <div class=\"cover-image\">\r\n <div class=\"cover-blur\" style=\"background-image: url({imageUrl})\"></div>\r\n <img src={imageUrl} alt={collection.collectionTitle} />\r\n </div>\r\n {/if}\r\n\r\n <!-- Collection Header -->\r\n <div class=\"collection-header\">\r\n <h1 class=\"collection-title\">{collection.collectionTitle}</h1>\r\n {#if collection.summary}\r\n <p class=\"collection-summary\">{collection.summary}</p>\r\n {/if}\r\n {#if collection.description}\r\n <div class=\"collection-description\">{collection.description}</div>\r\n {/if}\r\n </div>\r\n\r\n <!-- Events Section -->\r\n <div class=\"events-section\">\r\n <div class=\"events-section-header\">\r\n <h2 class=\"events-heading\">Events ({displayEvents.length})</h2>\r\n\r\n {#if canShowSwitcher}\r\n <div\r\n class=\"view-switcher\"\r\n role=\"group\"\r\n aria-label={labels.viewOptions || 'Display mode'}\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"view-switcher-btn\"\r\n class:view-switcher-btn-active={activeDisplayMode === 'gallery'}\r\n onclick={() => (activeDisplayMode = 'gallery')}\r\n aria-label={labels.galleryView || 'Gallery view'}\r\n aria-pressed={activeDisplayMode === 'gallery'}\r\n >\r\n <svg\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect>\r\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect>\r\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>\r\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect>\r\n </svg>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"view-switcher-btn\"\r\n class:view-switcher-btn-active={activeDisplayMode === 'list'}\r\n onclick={() => (activeDisplayMode = 'list')}\r\n aria-label={labels.listView || 'List view'}\r\n aria-pressed={activeDisplayMode === 'list'}\r\n >\r\n <svg\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\r\n <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\r\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line>\r\n <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line>\r\n <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line>\r\n <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n {#if displayEvents.length === 0}\r\n <EmptyState\r\n message={labels.noUpcomingEvents || 'No upcoming events'}\r\n subtext={labels.noUpcomingEventsSubtext ||\r\n 'There are no events in this collection right now. Check back soon!'}\r\n />\r\n {:else if activeDisplayMode === 'list'}\r\n <GroupedListView\r\n events={listEvents}\r\n filterFutureOnly={false}\r\n oneventClick={handleEventClick}\r\n />\r\n {:else}\r\n <div class=\"events-grid\">\r\n {#each galleryEvents as event (event.id)}\r\n <GalleryCard {event} oneventClick={handleEventClick} />\r\n {/each}\r\n </div>\r\n {/if}\r\n </div>\r\n {/if}\r\n</div>\r\n\r\n<style>\r\n .collection-view {\r\n width: 100%;\r\n max-width: 64rem;\r\n margin-left: auto;\r\n margin-right: auto;\r\n padding-left: 1rem;\r\n padding-right: 1rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .error-container,\r\n .password-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 50vh;\r\n text-align: center;\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 /* Password gate */\r\n .password-card {\r\n border-radius: 0.5rem;\r\n padding: 2rem;\r\n max-width: 24rem;\r\n width: 100%;\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n box-shadow: 0 2px 10px color-mix(in srgb, black 10%, transparent);\r\n }\r\n\r\n .password-title {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n font-weight: 700;\r\n margin-bottom: 0.5rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .password-description {\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n margin-bottom: 1.5rem;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .password-form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.75rem;\r\n }\r\n\r\n .password-input {\r\n width: 100%;\r\n padding: 0.5rem 0.75rem;\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 85%));\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n }\r\n\r\n .password-input:focus {\r\n outline: none;\r\n border-color: hsl(var(--brand-primary, 220 90% 56%));\r\n box-shadow: 0 0 0 2px hsl(var(--brand-primary, 220 90% 56%) / 20%);\r\n }\r\n\r\n .password-input-error {\r\n border-color: hsl(var(--status-sold-out, 0 72% 51%));\r\n }\r\n\r\n .password-error-text {\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n color: hsl(var(--status-sold-out, 0 72% 51%));\r\n }\r\n\r\n .password-submit {\r\n padding: 0.5rem 1rem;\r\n border-radius: 0.5rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n font-weight: 600;\r\n background: hsl(var(--brand-primary, 220 90% 56%));\r\n color: hsl(var(--text-on-primary, 0 0% 100%));\r\n }\r\n\r\n .password-submit:hover {\r\n filter: brightness(0.95);\r\n }\r\n\r\n /* Cover Image with blur background */\r\n .cover-image {\r\n position: relative;\r\n width: 100%;\r\n overflow: hidden;\r\n border-radius: 0.5rem;\r\n margin-bottom: 2rem;\r\n height: 350px;\r\n }\r\n\r\n .cover-blur {\r\n position: absolute;\r\n inset: 0;\r\n background-size: cover;\r\n background-position: center;\r\n filter: blur(24px) saturate(1.2);\r\n transform: scale(1.15);\r\n }\r\n\r\n .cover-image img {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n object-fit: contain;\r\n }\r\n\r\n /* Header */\r\n .collection-header {\r\n margin-bottom: 2rem;\r\n }\r\n\r\n .collection-title {\r\n font-size: 1.875rem;\r\n line-height: 2.25rem;\r\n font-weight: 700;\r\n margin-bottom: 0.5rem;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .collection-summary {\r\n font-size: 1.125rem;\r\n line-height: 1.75rem;\r\n margin-bottom: 1rem;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .collection-description {\r\n line-height: 1.625;\r\n color: hsl(var(--text-secondary, 0 0% 35%));\r\n }\r\n\r\n /* Events Section */\r\n .events-section {\r\n margin-bottom: 2rem;\r\n }\r\n\r\n .events-section-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 1rem;\r\n }\r\n\r\n .events-heading {\r\n font-size: 1.5rem;\r\n line-height: 2rem;\r\n font-weight: 700;\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n /* View Switcher */\r\n .view-switcher {\r\n display: flex;\r\n gap: 0.25rem;\r\n padding: 0.25rem;\r\n border-radius: 0.5rem;\r\n background: hsl(var(--surface-secondary, 0 0% 96%));\r\n }\r\n\r\n .view-switcher-btn {\r\n padding: 0.375rem;\r\n border-radius: 0.375rem;\r\n transition: color 0.15s;\r\n color: hsl(var(--text-secondary, 0 0% 45%));\r\n }\r\n\r\n .view-switcher-btn:hover {\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n }\r\n\r\n .view-switcher-btn-active {\r\n color: hsl(var(--text-primary, 0 0% 10%));\r\n background: hsl(var(--surface-primary, 0 0% 100%));\r\n box-shadow: 0 1px 2px color-mix(in srgb, black 8%, transparent);\r\n }\r\n\r\n .events-grid {\r\n display: grid;\r\n gap: 1.5rem;\r\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\r\n }\r\n\r\n /* Responsive */\r\n @media (width <= 640px) {\r\n .cover-image {\r\n height: 250px;\r\n }\r\n\r\n .collection-title {\r\n font-size: 1.5rem;\r\n line-height: 2rem;\r\n }\r\n\r\n .events-grid {\r\n grid-template-columns: repeat(2, 1fr);\r\n }\r\n }\r\n\r\n @media (width <= 400px) {\r\n .events-grid {\r\n grid-template-columns: 1fr;\r\n }\r\n }\r\n</style>\r\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","formatTime","displayEvents","sortByStartTime","galleryEvents","listEvents","canShowSwitcher","galleryEvent","eventData","loadCollection","pwd","data","fetchPublicCollection","err","msg","handlePasswordSubmit","SkeletonLoader","form","PasswordInput","button","p_1","text_3","imageUrl","node_2","h1","p_2","root_6","text_5","div_7","consequent_5","div_8","div_9","h2_1","div_10","root_8","button_1","button_2","consequent_6","EmptyState","GroupedListView","div_11","root_11","GalleryCard","consequent_7","consequent_8","alternate","consequent_9"],"mappings":"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"}