@getmicdrop/venue-calendar 4.1.52 → 4.1.53

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 (72) hide show
  1. package/dist/{BlockPlaceholder-oM2MmZuu.js → BlockPlaceholder-CqhToSye.js} +2 -2
  2. package/dist/{BlockPlaceholder-oM2MmZuu.js.map → BlockPlaceholder-CqhToSye.js.map} +1 -1
  3. package/dist/{CalendarFoundryView-BJv0QDcv.js → CalendarFoundryView-CMO7-AQi.js} +17 -17
  4. package/dist/{CalendarFoundryView-BJv0QDcv.js.map → CalendarFoundryView-CMO7-AQi.js.map} +1 -1
  5. package/dist/{CalendarIcon-BAz0d_Pj.js → CalendarIcon-BXHIKvAr.js} +2 -2
  6. package/dist/{CalendarIcon-BAz0d_Pj.js.map → CalendarIcon-BXHIKvAr.js.map} +1 -1
  7. package/dist/{CartView-DLjJPQbt.js → CartView-DXP-NdfF.js} +12 -12
  8. package/dist/{CartView-DLjJPQbt.js.map → CartView-DXP-NdfF.js.map} +1 -1
  9. package/dist/{Checkout-U0zc-Ws2.js → Checkout-DbYfIm3T.js} +7 -7
  10. package/dist/{Checkout-U0zc-Ws2.js.map → Checkout-DbYfIm3T.js.map} +1 -1
  11. package/dist/{Checkout-CnnLbRNr.js → Checkout-V9_dY_sS.js} +11 -11
  12. package/dist/{Checkout-CnnLbRNr.js.map → Checkout-V9_dY_sS.js.map} +1 -1
  13. package/dist/{CheckoutTimer-CoV5cHRL.js → CheckoutTimer--6OOtdTB.js} +3 -3
  14. package/dist/{CheckoutTimer-CoV5cHRL.js.map → CheckoutTimer--6OOtdTB.js.map} +1 -1
  15. package/dist/{ClockIcon-CRdviY8o.js → ClockIcon-CxfsowHx.js} +2 -2
  16. package/dist/{ClockIcon-CRdviY8o.js.map → ClockIcon-CxfsowHx.js.map} +1 -1
  17. package/dist/{CloseIcon-JYYIdhBY.js → CloseIcon-C5SCeQOk.js} +2 -2
  18. package/dist/{CloseIcon-JYYIdhBY.js.map → CloseIcon-C5SCeQOk.js.map} +1 -1
  19. package/dist/{CollectionView-C660avPQ.js → CollectionView-Bq8xpn6T.js} +6 -6
  20. package/dist/{CollectionView-C660avPQ.js.map → CollectionView-Bq8xpn6T.js.map} +1 -1
  21. package/dist/{Event-DlxxdMrP.js → Event-DJusXK29.js} +13 -13
  22. package/dist/{Event-DlxxdMrP.js.map → Event-DJusXK29.js.map} +1 -1
  23. package/dist/{EventPage-jhF3OOpv.js → EventPage-c9woM8dq.js} +9 -9
  24. package/dist/{EventPage-jhF3OOpv.js.map → EventPage-c9woM8dq.js.map} +1 -1
  25. package/dist/{Heading-B9gB4-Za.js → Heading-D81DQHoP.js} +2 -2
  26. package/dist/{Heading-B9gB4-Za.js.map → Heading-D81DQHoP.js.map} +1 -1
  27. package/dist/{Image-BrI6RXFh.js → Image-BktsxRho.js} +2 -2
  28. package/dist/{Image-BrI6RXFh.js.map → Image-BktsxRho.js.map} +1 -1
  29. package/dist/{MailIcon-Nxg7y-ub.js → MailIcon-3o_dDUzN.js} +2 -2
  30. package/dist/{MailIcon-Nxg7y-ub.js.map → MailIcon-3o_dDUzN.js.map} +1 -1
  31. package/dist/{Modal-CIRQUVSH.js → Modal-aWfERkXe.js} +3 -3
  32. package/dist/{Modal-CIRQUVSH.js.map → Modal-aWfERkXe.js.map} +1 -1
  33. package/dist/{PasswordInput-URDphAa4.js → PasswordInput-CLFuYYgC.js} +2 -2
  34. package/dist/{PasswordInput-URDphAa4.js.map → PasswordInput-CLFuYYgC.js.map} +1 -1
  35. package/dist/{ScarcityBadge-Dwah85WZ.js → ScarcityBadge-5RMumV4l.js} +3 -3
  36. package/dist/{ScarcityBadge-Dwah85WZ.js.map → ScarcityBadge-5RMumV4l.js.map} +1 -1
  37. package/dist/{SeriesPage-phkzskyq.js → SeriesPage-Dy28yKRV.js} +5 -5
  38. package/dist/{SeriesPage-phkzskyq.js.map → SeriesPage-Dy28yKRV.js.map} +1 -1
  39. package/dist/{Spinner-DsGKt_54.js → Spinner-D-c4nFeN.js} +2 -2
  40. package/dist/{Spinner-DsGKt_54.js.map → Spinner-D-c4nFeN.js.map} +1 -1
  41. package/dist/{Success-D1Voif89.js → Success-Zx8HLwlN.js} +11 -11
  42. package/dist/{Success-D1Voif89.js.map → Success-Zx8HLwlN.js.map} +1 -1
  43. package/dist/{VenueCalendar-DcX-R9GN.js → VenueCalendar-Ys8-209-.js} +14 -14
  44. package/dist/{VenueCalendar-DcX-R9GN.js.map → VenueCalendar-Ys8-209-.js.map} +1 -1
  45. package/dist/{ViewTicketsEmbed-pVa7jt9E.js → ViewTicketsEmbed-BjVMnRnA.js} +5 -5
  46. package/dist/{ViewTicketsEmbed-pVa7jt9E.js.map → ViewTicketsEmbed-BjVMnRnA.js.map} +1 -1
  47. package/dist/{WarningCircleIcon-CRvgz4mx.js → WarningCircleIcon-eOM57ZiU.js} +2 -2
  48. package/dist/{WarningCircleIcon-CRvgz4mx.js.map → WarningCircleIcon-eOM57ZiU.js.map} +1 -1
  49. package/dist/{allowlist-BB9UJJQv.js → allowlist-BVbx-J6B.js} +3 -3
  50. package/dist/{allowlist-BB9UJJQv.js.map → allowlist-BVbx-J6B.js.map} +1 -1
  51. package/dist/{cancel-CywDLP7Z.js → cancel-BIH3xozo.js} +2 -2
  52. package/dist/{cancel-CywDLP7Z.js.map → cancel-BIH3xozo.js.map} +1 -1
  53. package/dist/{copyToClipboard-iOR2YHXj.js → copyToClipboard-Ct55SL-r.js} +2 -2
  54. package/dist/{copyToClipboard-iOR2YHXj.js.map → copyToClipboard-Ct55SL-r.js.map} +1 -1
  55. package/dist/{index-C70I4S7a.js → index-B5pEXtmb.js} +2 -2
  56. package/dist/{index-C70I4S7a.js.map → index-B5pEXtmb.js.map} +1 -1
  57. package/dist/{modalManager.svelte-DUrbp7PG.js → modalManager.svelte-C6kq14zr.js} +2 -2
  58. package/dist/{modalManager.svelte-DUrbp7PG.js.map → modalManager.svelte-C6kq14zr.js.map} +1 -1
  59. package/dist/{promo-CytPOSIe.js → promo-Iv83zhP5.js} +2 -2
  60. package/dist/{promo-CytPOSIe.js.map → promo-Iv83zhP5.js.map} +1 -1
  61. package/dist/{serverTotals-BGK9EZcX.js → serverTotals-Bx9REXQW.js} +2 -2
  62. package/dist/{serverTotals-BGK9EZcX.js.map → serverTotals-Bx9REXQW.js.map} +1 -1
  63. package/dist/{showcase-state-options-B7OzbBdo.js → showcase-state-options-QYvDSYq0.js} +2 -2
  64. package/dist/{showcase-state-options-B7OzbBdo.js.map → showcase-state-options-QYvDSYq0.js.map} +1 -1
  65. package/dist/{transform-BaKV88mB.js → transform-DiYvD4iM.js} +3 -3
  66. package/dist/{transform-BaKV88mB.js.map → transform-DiYvD4iM.js.map} +1 -1
  67. package/dist/{utm-DBME8yC6.js → utm-TGZ2W8Ii.js} +2 -2
  68. package/dist/{utm-DBME8yC6.js.map → utm-TGZ2W8Ii.js.map} +1 -1
  69. package/dist/venue-calendar.es.js +1 -1
  70. package/dist/venue-calendar.iife.js +1 -1
  71. package/dist/venue-calendar.umd.js +1 -1
  72. package/package.json +2 -2
@@ -1,12 +1,12 @@
1
1
  import "svelte/internal/disclose-version";
2
2
  import * as e from "svelte/internal/client";
3
3
  import { SvelteMap as rt } from "svelte/reactivity";
4
- import { m as at, U as st, aN as $e, aO as it, aP as lt, aQ as ot, aR as nt, t as O, aS as dt, j as q, aJ as ct } from "./VenueCalendar-DcX-R9GN.js";
4
+ import { m as at, U as st, aN as $e, aO as it, aP as lt, aQ as ot, aR as nt, t as O, aS as dt, j as q, aJ as ct } from "./VenueCalendar-Ys8-209-.js";
5
5
  import { Q as vt } from "./browser-xWssF3xZ.js";
6
- import { H as ut, C as gt } from "./Heading-B9gB4-Za.js";
6
+ import { H as ut, C as gt } from "./Heading-D81DQHoP.js";
7
7
  import { T as B } from "./Text-DacTw_9X.js";
8
- import { I as G } from "./Image-BrI6RXFh.js";
9
- import { S as ze } from "./Spinner-DsGKt_54.js";
8
+ import { I as G } from "./Image-BktsxRho.js";
9
+ import { S as ze } from "./Spinner-D-c4nFeN.js";
10
10
  var ft = e.from_svg('<svg aria-hidden="true" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18.2847 25.7735C17.6953 25.7734 17.1301 25.5202 16.7134 25.0697L7.82356 15.4612C7.40691 15.0107 7.17285 14.3998 7.17285 13.7628C7.17285 13.1259 7.40691 12.515 7.82356 12.0645L16.7134 2.456C16.9184 2.22657 17.1636 2.04357 17.4348 1.91768C17.7059 1.79178 17.9976 1.72552 18.2927 1.72275C18.5878 1.71998 18.8804 1.78075 19.1536 1.90153C19.4267 2.02232 19.6748 2.20068 19.8835 2.42622C20.0922 2.65177 20.2572 2.91997 20.3689 3.21518C20.4807 3.5104 20.5369 3.82671 20.5344 4.14566C20.5318 4.46462 20.4705 4.77983 20.354 5.0729C20.2375 5.36597 20.0682 5.63103 19.8559 5.85262L12.5374 13.7628L19.8559 21.6731C20.1667 22.009 20.3783 22.437 20.464 22.9029C20.5497 23.3688 20.5057 23.8517 20.3375 24.2906C20.1693 24.7294 19.8845 25.1046 19.5192 25.3685C19.1538 25.6325 18.7242 25.7734 18.2847 25.7735Z"></path></svg>');
11
11
  function pt(i, s) {
12
12
  let r = e.prop(s, "size", 3, "24"), a = e.prop(s, "color", 3, "currentColor"), n = e.prop(s, "class", 3, "");
@@ -622,4 +622,4 @@ e.delegate(["click"]);
622
622
  export {
623
623
  Ft as default
624
624
  };
625
- //# sourceMappingURL=ViewTicketsEmbed-pVa7jt9E.js.map
625
+ //# sourceMappingURL=ViewTicketsEmbed-BjVMnRnA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewTicketsEmbed-pVa7jt9E.js","sources":["../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/ChevronLeft.svelte","../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/ChevronRight.svelte","../node_modules/@getmicdrop/svelte-components/dist/primitives/Pagination/DotIndicator.svelte","../src/lib/view-tickets/mock-data.ts","../src/lib/view-tickets/defaults.ts","../src/lib/view-tickets/variants/dice-swipe/ViewTickets.svelte","../src/components/Views/ViewTicketsEmbed.svelte"],"sourcesContent":["<script lang=\"ts\">\n interface Props {\n size?: string;\n color?: string;\n class?: string;\n }\n let { size = \"24\", color = \"currentColor\", class: className = \"\" }: Props = $props();\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M18.2847 25.7735C17.6953 25.7734 17.1301 25.5202 16.7134 25.0697L7.82356 15.4612C7.40691 15.0107 7.17285 14.3998 7.17285 13.7628C7.17285 13.1259 7.40691 12.515 7.82356 12.0645L16.7134 2.456C16.9184 2.22657 17.1636 2.04357 17.4348 1.91768C17.7059 1.79178 17.9976 1.72552 18.2927 1.72275C18.5878 1.71998 18.8804 1.78075 19.1536 1.90153C19.4267 2.02232 19.6748 2.20068 19.8835 2.42622C20.0922 2.65177 20.2572 2.91997 20.3689 3.21518C20.4807 3.5104 20.5369 3.82671 20.5344 4.14566C20.5318 4.46462 20.4705 4.77983 20.354 5.0729C20.2375 5.36597 20.0682 5.63103 19.8559 5.85262L12.5374 13.7628L19.8559 21.6731C20.1667 22.009 20.3783 22.437 20.464 22.9029C20.5497 23.3688 20.5057 23.8517 20.3375 24.2906C20.1693 24.7294 19.8845 25.1046 19.5192 25.3685C19.1538 25.6325 18.7242 25.7734 18.2847 25.7735Z\"\n fill={color}\n />\n</svg> ","<script lang=\"ts\">\n interface Props {\n size?: string;\n color?: string;\n class?: string;\n }\n let { size = \"24\", color = \"currentColor\", class: className = \"\" }: Props = $props();\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M9.26149 25.7735C8.822 25.7734 8.3924 25.6325 8.02701 25.3685C7.66161 25.1046 7.37682 24.7294 7.20865 24.2906C7.04048 23.8517 6.99647 23.3688 7.08218 22.9029C7.1679 22.437 7.37949 22.009 7.69021 21.6731L15.0088 13.7628L7.69021 5.85262C7.47794 5.63103 7.30863 5.36597 7.19215 5.0729C7.07568 4.77983 7.01437 4.46462 7.0118 4.14566C7.00924 3.82671 7.06547 3.5104 7.17722 3.21518C7.28897 2.91997 7.45399 2.65177 7.66266 2.42622C7.87134 2.20068 8.11948 2.02232 8.39261 1.90153C8.66574 1.78075 8.95839 1.71998 9.25349 1.72275C9.54859 1.72552 9.84022 1.79178 10.1114 1.91768C10.3825 2.04357 10.6278 2.22657 10.8328 2.456L19.7226 12.0645C20.1392 12.515 20.3733 13.1259 20.3733 13.7628C20.3733 14.3998 20.1392 15.0107 19.7226 15.4612L10.8328 25.0697C10.4161 25.5202 9.85087 25.7734 9.26149 25.7735Z\"\n fill={color}\n />\n</svg> ","<!-- button-exception: dot indicators are minimal rounded-full toggles with per-index active chrome — Button padding/min-sizing fights the dot layout. -->\n<script lang=\"ts\">\n import { mergeLabels, type SCLabels } from '../../utils/labels.js';\n\n // User-visible strings ride the labels-prop seam (docs/canonicals/i18n-seam.md Move 1).\n const defaultLabels = {\n itemSelector: 'Item selector',\n itemOf: (index: number, total: number) => `Item ${index} of ${total}`,\n };\n\n interface Props {\n /** Total number of items */\n count: number;\n /** Currently active index (0-based) */\n activeIndex?: number;\n /** Dot size */\n size?: 'sm' | 'md' | 'lg';\n /** Color scheme */\n variant?: 'light' | 'dark';\n /** Called when a dot is clicked */\n // eslint-disable-next-line no-unused-vars -- intentionally retained (prop/slot/forward-compat or Svelte-5 reactive binding eslint cannot see)\n onselect?: (index: number) => void;\n /** Additional CSS classes on the container */\n class?: string;\n labels?: SCLabels<typeof defaultLabels>;\n }\n\n let {\n count,\n activeIndex = 0,\n size = 'md',\n variant = 'dark',\n onselect,\n class: className = '',\n labels: userLabels = {},\n }: Props = $props();\n\n let labels = $derived(mergeLabels(defaultLabels, userLabels));\n\n const sizeClasses: Record<string, { dot: string; active: string }> = {\n sm: { dot: 'h-1.5 w-1.5', active: 'scale-125' },\n md: { dot: 'h-2.5 w-2.5', active: 'scale-125' },\n lg: { dot: 'h-3 w-3', active: 'scale-125' },\n };\n\n const variantClasses: Record<string, { active: string; inactive: string; hover: string }> = {\n light: {\n active: 'bg-card',\n inactive: 'bg-card/30',\n hover: 'hover:bg-card/50',\n },\n dark: {\n active: 'bg-bg-primary',\n inactive: 'bg-bg-quaternary',\n hover: 'hover:bg-muted-foreground',\n },\n };\n\n let sizeConfig = $derived(sizeClasses[size] || sizeClasses.md);\n let variantConfig = $derived(variantClasses[variant] || variantClasses.dark);\n</script>\n\n<div\n class=\"flex items-center gap-2 {className}\"\n role=\"tablist\"\n aria-label={labels.itemSelector}\n>\n {#each { length: count } as _, i (i)}\n <button\n type=\"button\"\n class=\"rounded-full transition-all {sizeConfig.dot} {i === activeIndex\n ? `${sizeConfig.active} ${variantConfig.active}`\n : `${variantConfig.inactive} ${variantConfig.hover}`}\"\n role=\"tab\"\n aria-selected={i === activeIndex}\n aria-label={labels.itemOf(i + 1, count)}\n onclick={() => onselect?.(i)}\n ></button>\n {/each}\n</div>\n","import { getDefaultTimezone } from '@getmicdrop/svelte-components/utils/timezones';\r\n// View Your Tickets — Mock Data\r\n\r\nimport type { TicketPageData, CalendarUrls } from './types';\r\n\r\nexport const MOCK_TICKET_DATA: TicketPageData = {\r\n event: {\r\n id: 123,\r\n title: 'Friday Night Comedy',\r\n startDateTime: '2026-03-20T20:00:00-07:00',\r\n endDateTime: '2026-03-20T22:00:00-07:00',\r\n timezone: getDefaultTimezone(),\r\n imageUrl: '/mock/view-tickets/event-poster.webp',\r\n doorsOpenTime: '7:30 PM',\r\n },\r\n tickets: [\r\n {\r\n id: 1001,\r\n ticketNumber: 'TKT-A8F3K2',\r\n attendeeName: 'Alex Johnson',\r\n ticketType: 'General Admission',\r\n qrCodeData: 'MICDROP:TKT:1001:a8f3k2m9x7',\r\n refunded: false,\r\n checkedIn: false,\r\n },\r\n {\r\n id: 1002,\r\n ticketNumber: 'TKT-B7G4L3',\r\n attendeeName: 'Alex Johnson',\r\n ticketType: 'General Admission',\r\n qrCodeData: 'MICDROP:TKT:1002:b7g4l3n8y6',\r\n refunded: false,\r\n checkedIn: false,\r\n },\r\n {\r\n id: 1003,\r\n ticketNumber: 'TKT-C6H5M4',\r\n attendeeName: 'Sam Rivera',\r\n ticketType: 'VIP',\r\n qrCodeData: 'MICDROP:TKT:1003:c6h5m4p9z5',\r\n refunded: false,\r\n checkedIn: false,\r\n },\r\n ],\r\n order: {\r\n // eslint-disable-next-line micdrop/no-hardcoded-hex -- order-number display string (#NNNNN), not a color\r\n orderNumber: '#12847',\r\n orderUUID: 'a8f3k2m9-x7p4-q2w5-e6r8-t1y3u0i9o7',\r\n purchaseDate: '2026-03-10T14:30:00-07:00',\r\n },\r\n venue: {\r\n name: 'The Comedy Store',\r\n address: '8433 Sunset Blvd, Los Angeles, CA 90069',\r\n contactEmail: 'info@thecomedystore.com',\r\n logoUrl: null,\r\n },\r\n};\r\n\r\nexport const MOCK_CALENDAR_URLS: CalendarUrls = {\r\n google: '#google-calendar',\r\n apple: '#apple-calendar',\r\n outlook: '#outlook-calendar',\r\n};\r\n\r\n// Single-ticket order variant\r\nexport const MOCK_SINGLE_TICKET: TicketPageData = {\r\n ...MOCK_TICKET_DATA,\r\n tickets: [MOCK_TICKET_DATA.tickets[0]],\r\n};\r\n\r\n// No event image variant\r\nexport const MOCK_NO_IMAGE: TicketPageData = {\r\n ...MOCK_TICKET_DATA,\r\n event: { ...MOCK_TICKET_DATA.event, imageUrl: null },\r\n};\r\n\r\n// Mixed per-ticket state: one valid, one already scanned, one refunded.\r\n// MOCK_TICKET_DATA stays all-valid on purpose so the default preview shows the\r\n// happy path; this fixture is what exercises the state treatments.\r\nexport const MOCK_TICKET_STATES: TicketPageData = {\r\n ...MOCK_TICKET_DATA,\r\n tickets: [\r\n MOCK_TICKET_DATA.tickets[0],\r\n { ...MOCK_TICKET_DATA.tickets[1], checkedIn: true },\r\n { ...MOCK_TICKET_DATA.tickets[2], refunded: true },\r\n ],\r\n};\r\n","import type { TicketId } from '@getmicdrop/svelte-components';\r\n// View Your Tickets — Shared Utilities\r\n\r\nimport type { TicketEventData, VenueInfo, CalendarUrls } from './types';\r\nimport { getPublicBaseUrl, simpleFetch } from '$lib/api/client';\r\nimport {\r\n formatEventTime,\r\n formatDayOfWeek,\r\n formatShortDate,\r\n} from '@getmicdrop/svelte-components/datetime';\r\nimport { getIANATimezone } from '$lib/utils/datetime.js';\r\nimport QRCode from 'qrcode';\r\n\r\n/**\r\n * Resolve a ticket's timezone to a real IANA zone before it reaches SC's\r\n * date-fns formatters. Real order data is always IANA, but stay defensive:\r\n * SC throws on a bare legacy abbreviation (PST/EST) or an empty string where the\r\n * old Intl seam tolerated them, so route through the canonical lenient resolver\r\n * (maps a legacy abbreviation to its IANA zone, empty/invalid to the default).\r\n */\r\nfunction ticketTimezone(timezone: string): string {\r\n return getIANATimezone(timezone);\r\n}\r\n\r\n/**\r\n * Format date for display: \"Sat, Mar 15, 2026\"\r\n *\r\n * Composed from two SC datetime canonicals — short weekday + short date-with-year\r\n * — because no single SC preset emits weekday+month+day+year. Byte-identical to\r\n * the prior Intl `{ weekday, month, day, year }` output across boundary instants ×\r\n * 6 zones (proven old-vs-new in defaults.test.ts). Fail-open: an unparseable ISO\r\n * returns '' rather than white-screening the ticket page (a dateless label, not a\r\n * render crash) — matching the null-safety of the formatInTz seam it replaces.\r\n *\r\n * A composed label has to answer for absence itself. SC splits its two answers:\r\n * an ABSENT date (null/undefined/''/Go's zero time) returns '' with no throw\r\n * (ruling on #600), while a present-but-malformed one throws. So the catch below\r\n * only covers malformed — absence walks straight through it, and joining two\r\n * blank parts emitted a bare ', ' on the ticket. Guard the parts, not the join.\r\n */\r\nexport function formatTicketDate(isoDate: string, timezone: string): string {\r\n try {\r\n const tz = ticketTimezone(timezone);\r\n const weekday = formatDayOfWeek(isoDate, tz, true);\r\n const date = formatShortDate(isoDate, tz);\r\n if (!weekday || !date) return '';\r\n return `${weekday}, ${date}`;\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Format time for display: \"8:00 PM\"\r\n *\r\n * SC's canonical tz-first time formatter. Byte-identical to the prior Intl\r\n * `{ hour, minute }` output across boundary instants × 6 zones (proven in\r\n * defaults.test.ts). Fail-open on an unparseable ISO (see {@link formatTicketDate}).\r\n */\r\nexport function formatTicketTime(isoDate: string, timezone: string): string {\r\n try {\r\n return formatEventTime(isoDate, ticketTimezone(timezone));\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Build Google Maps directions URL\r\n */\r\nexport function buildDirectionsUrl(venue: VenueInfo): string {\r\n const query = encodeURIComponent(`${venue.name}, ${venue.address}`);\r\n return `https://www.google.com/maps/search/?api=1&query=${query}`;\r\n}\r\n\r\n/**\r\n * Build calendar URLs for the three providers.\r\n * In production, these would come from the backend (/cal/{eventId}/:provider).\r\n * For the prototype, we generate them client-side.\r\n */\r\nexport function buildCalendarUrls(\r\n event: TicketEventData,\r\n venue: VenueInfo,\r\n orderId: string\r\n): CalendarUrls {\r\n const start = new Date(event.startDateTime); // @datetime-escape: ICS/calendar-URL instant serialized to UTC — tz-independent\r\n const end = event.endDateTime\r\n ? new Date(event.endDateTime) // @datetime-escape: ICS/calendar-URL instant serialized to UTC — tz-independent\r\n : new Date(start.getTime() + 2 * 60 * 60 * 1000); // @datetime-escape: ICS/calendar-URL instant serialized to UTC — tz-independent\r\n\r\n const fmt = (d: Date) =>\r\n d\r\n .toISOString()\r\n .replace(/[-:]/g, '')\r\n .replace(/\\.\\d{3}/, ''); // calendar URL format (ICS/Google) — strips ms from the UTC ISO\r\n const location = `${venue.name}, ${venue.address}`;\r\n\r\n const googleParams = new URLSearchParams({\r\n action: 'TEMPLATE',\r\n text: event.title,\r\n dates: `${fmt(start)}/${fmt(end)}`,\r\n location,\r\n details: `Order ${orderId}`,\r\n });\r\n\r\n const outlookParams = new URLSearchParams({\r\n subject: event.title,\r\n startdt: start.toISOString(), // @datetime-escape: calendar URL format (ICS/Google)\r\n enddt: end.toISOString(), // @datetime-escape: calendar URL format (ICS/Google)\r\n location,\r\n body: `Order ${orderId}`,\r\n });\r\n\r\n return {\r\n google: `https://calendar.google.com/calendar/render?${googleParams}`,\r\n apple: '#apple-calendar-ics',\r\n outlook: `https://outlook.live.com/calendar/0/action/compose?${outlookParams}`,\r\n };\r\n}\r\n\r\n/**\r\n * Generate a real scannable QR code as an SVG data URL.\r\n */\r\nexport async function generateQrCode(\r\n data: string,\r\n size: number = 200\r\n): Promise<string> {\r\n const svg = await QRCode.toString(data, {\r\n type: 'svg',\r\n margin: 1,\r\n width: size,\r\n color: { dark: '#000000', light: '#ffffff' }, // color-constants-exception: QR code technical color params (dark/light module color), not UI design tokens\r\n });\r\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\r\n}\r\n\r\n/**\r\n * Build a PDF download URL from the order UUID.\r\n */\r\nexport function buildPdfUrl(orderUUID: string): string {\r\n return `${getPublicBaseUrl()}/orders/${orderUUID}/pdf`;\r\n}\r\n\r\n/**\r\n * Build the Apple Wallet .pkpass download URL for a ticket.\r\n *\r\n * NOT wired to any UI: the endpoint is an unconditional 501 stub until pass\r\n * signing certificates are configured. Navigating a user here dumps a raw JSON\r\n * error over their ticket — don't re-attach this to a button until the backend\r\n * actually returns a pass.\r\n */\r\nexport function buildAppleWalletUrl(ticketId: TicketId): string {\r\n return `${getPublicBaseUrl()}/tickets/${ticketId}/apple-wallet`;\r\n}\r\n\r\n/**\r\n * Fetch the Google Wallet save URL for a ticket.\r\n * Returns the save URL string, or null on failure.\r\n *\r\n * NOT wired to any UI: the endpoint is an unconditional 501 stub until Wallet\r\n * API credentials are configured, so this always resolves null — a caller that\r\n * only acts on a non-null result is a silent no-op. See buildAppleWalletUrl.\r\n */\r\nexport async function fetchGoogleWalletUrl(\r\n ticketId: TicketId\r\n): Promise<string | null> {\r\n try {\r\n const data = await simpleFetch<{ saveUrl?: string }>(\r\n `${getPublicBaseUrl()}/tickets/${ticketId}/google-wallet`\r\n );\r\n return data?.saveUrl ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Build the public ticket API URL from order UUID.\r\n */\r\nexport function buildTicketApiUrl(orderUUID: string): string {\r\n return `${getPublicBaseUrl()}/orders/${orderUUID}/tickets`;\r\n}\r\n","<!-- @aria-live-escape: the single aria-live=\"polite\" on the wallet-note <p> is a scoped, atomic status line unique to this widget (the note swaps text on wallet availability); it is not a duplicated/ad-hoc region — one polite announcer, no stacking. Migrating to <LiveRegion> here is a follow-up; the standalone attribute is deliberate and correct. -->\r\n<!-- @text-escape: full-bleed themed ticket view — the hero title's tracking-tight on a 2xl bold Heading is part of the pinned dice-swipe visual design; no SC typography role matches (type-title is 28px/1.18/-0.018em), and adopting one would visibly change the shipped ticket rendering. -->\r\n<!-- @style-escape: widget-intentional. -->\r\n<!-- @modal-escape: custom dice-swipe gesture overlay; fixed inset-0 background is integral to swipe-card UX — SC Modal would break touch/gesture coordinate math -->\r\n<script lang=\"ts\">\r\n import {\r\n Badge,\r\n Button,\r\n Spinner,\r\n Card,\r\n Heading,\r\n Image,\r\n Text,\r\n DotIndicator,\r\n ChevronLeft,\r\n ChevronRight,\r\n typography,\r\n } from '@getmicdrop/svelte-components';\r\n import type { TicketPageData } from '$lib/view-tickets/types';\r\n import { SvelteMap } from 'svelte/reactivity';\r\n import { MOCK_TICKET_DATA } from '$lib/view-tickets/mock-data';\r\n import {\r\n formatTicketDate,\r\n formatTicketTime,\r\n buildDirectionsUrl,\r\n buildCalendarUrls,\r\n generateQrCode,\r\n buildPdfUrl,\r\n } from '$lib/view-tickets/defaults';\r\n\r\n interface Props {\r\n data?: TicketPageData;\r\n }\r\n let { data = MOCK_TICKET_DATA }: Props = $props();\r\n\r\n let currentTicketIndex = $state(0);\r\n let currentTicket = $derived(data.tickets[currentTicketIndex]);\r\n\r\n // Swipe state\r\n let touchStartX = $state(0);\r\n let touchStartY = $state(0);\r\n let touchDeltaX = $state(0);\r\n let isSwiping = $state(false);\r\n let reducedMotion = $state(false);\r\n\r\n // Animation state\r\n let animClass = $state('');\r\n let isAnimating = $state(false);\r\n\r\n // Derived data\r\n const calendarUrls = $derived(\r\n buildCalendarUrls(data.event, data.venue, data.order.orderNumber)\r\n );\r\n const directionsUrl = $derived(buildDirectionsUrl(data.venue));\r\n const pdfUrl = $derived(buildPdfUrl(data.order.orderUUID));\r\n const eventDate = $derived(\r\n formatTicketDate(data.event.startDateTime, data.event.timezone)\r\n );\r\n const eventTime = $derived(\r\n formatTicketTime(data.event.startDateTime, data.event.timezone)\r\n );\r\n const totalTickets = $derived(data.tickets.length);\r\n const hasMultipleTickets = $derived(totalTickets > 1);\r\n const imageUrl = $derived(data.event.imageUrl);\r\n\r\n // --- Per-ticket state ---\r\n // The payload carries `refunded` / `checkedIn` per ticket. Both are already\r\n // hard-rejected at the door, so drawing them as a normal live card sends the\r\n // attendee to the scanner to find out. Refunded wins over checked-in: it's\r\n // the terminal state and the reason the code won't scan now.\r\n // Fields are optional (older links can resolve without them) — absent means\r\n // \"nothing known against this ticket\", so compare explicitly rather than\r\n // trusting undefined to read as valid.\r\n const isRefunded = $derived(currentTicket.refunded === true);\r\n const isCheckedIn = $derived(!isRefunded && currentTicket.checkedIn === true);\r\n // Sighted users get the void overlay; this is the same news for screen readers.\r\n const qrStateSuffix = $derived(\r\n isRefunded\r\n ? ' — refunded, not valid for entry'\r\n : isCheckedIn\r\n ? ' — already checked in'\r\n : ''\r\n );\r\n\r\n // QR code generation (async, per ticket)\r\n let qrCodes = $state<Map<number, string>>(new Map());\r\n\r\n $effect(() => {\r\n for (const ticket of data.tickets) {\r\n if (!qrCodes.has(ticket.id)) {\r\n generateQrCode(ticket.qrCodeData, 220).then(url => {\r\n qrCodes.set(ticket.id, url);\r\n qrCodes = new SvelteMap(qrCodes);\r\n });\r\n }\r\n }\r\n });\r\n\r\n $effect(() => {\r\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n reducedMotion = mq.matches;\r\n const handler = (e: MediaQueryListEvent) => {\r\n reducedMotion = e.matches;\r\n };\r\n mq.addEventListener('change', handler);\r\n return () => mq.removeEventListener('change', handler);\r\n });\r\n\r\n function animateToTicket(newIndex: number) {\r\n if (\r\n newIndex === currentTicketIndex ||\r\n newIndex < 0 ||\r\n newIndex >= totalTickets ||\r\n isAnimating\r\n )\r\n return;\r\n\r\n const goingNext = newIndex > currentTicketIndex;\r\n isAnimating = true;\r\n\r\n if (reducedMotion) {\r\n currentTicketIndex = newIndex;\r\n isAnimating = false;\r\n return;\r\n }\r\n\r\n animClass = goingNext ? 'slide-out-left' : 'slide-out-right';\r\n\r\n setTimeout(() => {\r\n currentTicketIndex = newIndex;\r\n animClass = goingNext ? 'slide-in-right' : 'slide-in-left';\r\n\r\n setTimeout(() => {\r\n animClass = '';\r\n isAnimating = false;\r\n }, 250);\r\n }, 200);\r\n }\r\n\r\n function handleTouchStart(e: TouchEvent) {\r\n if (!hasMultipleTickets || isAnimating) return;\r\n touchStartX = e.touches[0].clientX;\r\n touchStartY = e.touches[0].clientY;\r\n touchDeltaX = 0;\r\n isSwiping = false;\r\n }\r\n\r\n function handleTouchMove(e: TouchEvent) {\r\n if (!hasMultipleTickets || isAnimating) return;\r\n const deltaX = e.touches[0].clientX - touchStartX;\r\n const deltaY = e.touches[0].clientY - touchStartY;\r\n\r\n if (\r\n !isSwiping &&\r\n Math.abs(deltaX) > 10 &&\r\n Math.abs(deltaX) > Math.abs(deltaY) * 1.5\r\n ) {\r\n isSwiping = true;\r\n }\r\n\r\n if (isSwiping) {\r\n e.preventDefault();\r\n touchDeltaX = deltaX;\r\n }\r\n }\r\n\r\n function handleTouchEnd() {\r\n if (!hasMultipleTickets || !isSwiping) {\r\n touchDeltaX = 0;\r\n isSwiping = false;\r\n return;\r\n }\r\n\r\n const threshold = 50;\r\n let newIndex = currentTicketIndex;\r\n\r\n if (touchDeltaX < -threshold && currentTicketIndex < totalTickets - 1) {\r\n newIndex = currentTicketIndex + 1;\r\n } else if (touchDeltaX > threshold && currentTicketIndex > 0) {\r\n newIndex = currentTicketIndex - 1;\r\n }\r\n\r\n touchDeltaX = 0;\r\n isSwiping = false;\r\n\r\n if (newIndex !== currentTicketIndex) {\r\n const goingNext = newIndex > currentTicketIndex;\r\n isAnimating = true;\r\n\r\n if (reducedMotion) {\r\n currentTicketIndex = newIndex;\r\n isAnimating = false;\r\n return;\r\n }\r\n\r\n currentTicketIndex = newIndex;\r\n animClass = goingNext ? 'slide-in-right' : 'slide-in-left';\r\n\r\n setTimeout(() => {\r\n animClass = '';\r\n isAnimating = false;\r\n }, 250);\r\n }\r\n }\r\n\r\n function goToTicket(index: number) {\r\n animateToTicket(index);\r\n }\r\n\r\n function prevTicket() {\r\n animateToTicket(currentTicketIndex - 1);\r\n }\r\n\r\n function nextTicket() {\r\n animateToTicket(currentTicketIndex + 1);\r\n }\r\n\r\n // --- Wallet badges (not wired — backend pass signing isn't built) ---\r\n // /tickets/:id/apple-wallet and /tickets/:id/google-wallet are unconditional\r\n // 501 stubs (they need an Apple Pass Type ID cert / Google Wallet service\r\n // account). Hitting them for real navigated the attendee off their own ticket\r\n // into a raw JSON error body, so both badges now show the same inline\r\n // \"coming soon\" note SuccessActions.svelte uses on the confirmation page.\r\n let walletNote = $state('');\r\n\r\n function showWalletNote() {\r\n walletNote =\r\n 'Wallet passes are coming soon. Your ticket is right here — screenshot it or download the PDF.';\r\n }\r\n</script>\r\n\r\n<!-- @modal-escape: fullscreen page background (base-layer dimmed image), not a modal — dice-swipe variant uses full-bleed presentation with blurred ticket-image backdrop -->\r\n<!-- Full-bleed dimmed background -->\r\n<div class=\"fixed inset-0 z-base bg-black\">\r\n {#if imageUrl}\r\n <Image\r\n src={imageUrl}\r\n alt=\"\"\r\n class=\"h-full w-full opacity-20 blur-sm\"\r\n fit=\"cover\"\r\n />\r\n {/if}\r\n</div>\r\n\r\n<!-- Main content -->\r\n<div class=\"relative z-sticky flex min-h-screen flex-col\">\r\n <!-- Event header -->\r\n <header class=\"px-6 pb-4 pt-12 text-center\">\r\n <Heading\r\n level={1}\r\n size=\"2xl\"\r\n weight=\"bold\"\r\n color=\"none\"\r\n class=\"tracking-tight text-white\"\r\n >\r\n {data.event.title}\r\n </Heading>\r\n <div class=\"mt-1\">\r\n <Text as=\"p\" size=\"base\" color=\"none\" class=\"text-white/70\">\r\n {eventDate}\r\n </Text>\r\n </div>\r\n <Text as=\"p\" size=\"sm\" color=\"none\" class=\"text-white/50\">\r\n {eventTime}\r\n {#if data.event.doorsOpenTime}\r\n {#if eventTime}\r\n <span class=\"mx-1 text-white/30\">&middot;</span>\r\n {/if}\r\n Doors {data.event.doorsOpenTime}\r\n {/if}\r\n </Text>\r\n <div class=\"mt-1\">\r\n <Text as=\"p\" size=\"sm\" color=\"none\" weight=\"medium\" class=\"text-white/60\">\r\n {data.venue.name}\r\n </Text>\r\n </div>\r\n </header>\r\n\r\n <!-- QR card area — the hero -->\r\n <div class=\"flex flex-1 flex-col items-center justify-center px-4 py-4\">\r\n <!-- Swipe container -->\r\n <div\r\n class=\"w-full max-w-xs overflow-hidden\"\r\n ontouchstart={handleTouchStart}\r\n ontouchmove={handleTouchMove}\r\n ontouchend={handleTouchEnd}\r\n role=\"region\"\r\n aria-label=\"Ticket carousel\"\r\n aria-roledescription=\"carousel\"\r\n >\r\n <!-- Floating white QR card -->\r\n <Card class=\"qr-card !bg-card rounded-2xl shadow-2xl {animClass}\">\r\n <!--\r\n QR code. A refunded ticket keeps its QR — deleting it reads as a\r\n broken page — but it is washed out and stamped, so it can't be\r\n mistaken for a working entry credential.\r\n -->\r\n <div class=\"relative flex justify-center\">\r\n {#if qrCodes.get(currentTicket.id)}\r\n <Image\r\n src={qrCodes.get(currentTicket.id)}\r\n alt=\"QR code for ticket {currentTicket.ticketNumber}{qrStateSuffix}\"\r\n class=\"h-52 w-52 {isRefunded ? 'opacity-20 grayscale' : ''}\"\r\n />\r\n {:else}\r\n <div\r\n class=\"flex h-52 w-52 items-center justify-center bg-bg-secondary\"\r\n >\r\n <Spinner size=\"lg\" />\r\n </div>\r\n {/if}\r\n\r\n {#if isRefunded}\r\n <!-- pointer-events-none: the card is the swipe target; the stamp must not eat the gesture -->\r\n <div\r\n class=\"pointer-events-none absolute inset-0 flex items-center justify-center\"\r\n aria-hidden=\"true\"\r\n >\r\n <span\r\n class=\"rounded-md border border-status-error-border bg-card/90 px-3 py-1 type-label uppercase tracking-widest text-status-error-text\"\r\n >\r\n Refunded\r\n </span>\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n <!-- Ticket info -->\r\n <div class=\"mt-4 flex flex-col items-center gap-0.5\">\r\n <p class={typography.h3}>\r\n {currentTicket.attendeeName}\r\n </p>\r\n <p class=\"type-label tone-secondary\">\r\n {currentTicket.ticketType}\r\n </p>\r\n <p class=\"type-caption font-mono tone-muted\">\r\n {currentTicket.ticketNumber}\r\n </p>\r\n </div>\r\n\r\n <!-- Ticket state — why this code won't scan -->\r\n {#if isRefunded || isCheckedIn}\r\n <div class=\"mt-3 flex flex-col items-center gap-1.5\">\r\n <Badge\r\n variant={isRefunded ? 'error' : 'neutral'}\r\n tone=\"outlined\"\r\n size=\"sm\"\r\n shape=\"pill\"\r\n >\r\n {isRefunded ? 'Refunded' : 'Checked in'}\r\n </Badge>\r\n <p class=\"type-caption text-center tone-muted\">\r\n {isRefunded\r\n ? 'This ticket was refunded and will not be accepted at the door.'\r\n : 'This ticket has already been scanned — it cannot be used again.'}\r\n </p>\r\n </div>\r\n {/if}\r\n </Card>\r\n\r\n <!-- Navigation: dots + arrows -->\r\n {#if hasMultipleTickets}\r\n <div class=\"mt-5 flex items-center justify-center gap-4\">\r\n <Button\r\n variant=\"icon\"\r\n size=\"sm\"\r\n onclick={prevTicket}\r\n disabled={currentTicketIndex === 0}\r\n class=\"!text-white/60 hover:!text-white hover:!bg-transparent disabled:!text-white/20 disabled:!bg-transparent\"\r\n aria-label=\"Previous ticket\"\r\n >\r\n <ChevronLeft size=\"20\" color=\"currentColor\" />\r\n </Button>\r\n\r\n <DotIndicator\r\n count={totalTickets}\r\n activeIndex={currentTicketIndex}\r\n variant=\"light\"\r\n onselect={goToTicket}\r\n />\r\n\r\n <Button\r\n variant=\"icon\"\r\n size=\"sm\"\r\n onclick={nextTicket}\r\n disabled={currentTicketIndex === totalTickets - 1}\r\n class=\"!text-white/60 hover:!text-white hover:!bg-transparent disabled:!text-white/20 disabled:!bg-transparent\"\r\n aria-label=\"Next ticket\"\r\n >\r\n <ChevronRight size=\"20\" color=\"currentColor\" />\r\n </Button>\r\n </div>\r\n\r\n <div class=\"mt-2 text-center\">\r\n <Text size=\"xs\" color=\"none\" class=\"text-white/40\">\r\n {currentTicketIndex + 1} of {totalTickets}\r\n </Text>\r\n </div>\r\n {/if}\r\n </div>\r\n </div>\r\n\r\n <!-- Bottom actions area -->\r\n <div class=\"mt-auto bg-bg-quaternary/90 px-6 pb-10 pt-6 backdrop-blur-md\">\r\n <div class=\"mx-auto max-w-md space-y-5\">\r\n <!-- Wallet badges — coming soon (see showWalletNote) -->\r\n <div class=\"flex flex-col items-center gap-2\">\r\n <div class=\"flex items-center justify-center gap-3\">\r\n <Button\r\n variant=\"ghost\"\r\n onclick={showWalletNote}\r\n class=\"!p-0 !border-transparent transition-opacity hover:opacity-80 hover:!bg-transparent\"\r\n aria-label=\"Add to Apple Wallet — coming soon\"\r\n >\r\n <Image\r\n src=\"/mock/view-tickets/add-to-apple-wallet.svg\"\r\n alt=\"Add to Apple Wallet\"\r\n class=\"h-11 opacity-60\"\r\n />\r\n </Button>\r\n\r\n <Button\r\n variant=\"ghost\"\r\n onclick={showWalletNote}\r\n class=\"!p-0 !border-transparent transition-opacity hover:opacity-80 hover:!bg-transparent\"\r\n aria-label=\"Add to Google Wallet — coming soon\"\r\n >\r\n <Image\r\n src=\"/mock/view-tickets/add-to-google-wallet.svg\"\r\n alt=\"Add to Google Wallet\"\r\n class=\"h-11 opacity-60\"\r\n />\r\n </Button>\r\n </div>\r\n\r\n <!--\r\n Inline note, not a toast — this page has no toast host. Kept mounted\r\n (empty) rather than behind an {#if} so the live region exists before\r\n the text lands; screen readers miss announcements from regions that\r\n are inserted at the same time as their content.\r\n -->\r\n <p class=\"{typography.xsMuted} text-center\" aria-live=\"polite\">\r\n {walletNote}\r\n </p>\r\n </div>\r\n\r\n <!-- Calendar + PDF -->\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <Button href={pdfUrl} variant=\"alternative\" size=\"xs\">\r\n <svg\r\n aria-hidden=\"true\"\r\n class=\"h-3.5 w-3.5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3\"\r\n />\r\n </svg>\r\n Download PDF\r\n </Button>\r\n <p class={typography.smMuted}>\r\n Add to calendar:\r\n <a\r\n href={calendarUrls.apple}\r\n rel=\"external\"\r\n class=\"tone-muted underline underline-offset-2 transition-colors hover:text-white\"\r\n >Apple</a\r\n >\r\n <span class=\"mx-1 tone-secondary\">&middot;</span>\r\n <a\r\n href={calendarUrls.google}\r\n class=\"tone-muted underline underline-offset-2 transition-colors hover:text-white\"\r\n target=\"_blank\"\r\n rel=\"external noopener noreferrer\">Google</a\r\n >\r\n <span class=\"mx-1 tone-secondary\">&middot;</span>\r\n <a\r\n href={calendarUrls.outlook}\r\n class=\"tone-muted underline underline-offset-2 transition-colors hover:text-white\"\r\n target=\"_blank\"\r\n rel=\"external noopener noreferrer\">Outlook</a\r\n >\r\n </p>\r\n </div>\r\n\r\n <!-- Venue + directions -->\r\n <div class=\"flex flex-col items-center gap-1\">\r\n <p class={typography.smMuted}>\r\n {data.venue.address}\r\n </p>\r\n <Button\r\n href={directionsUrl}\r\n variant=\"link\"\r\n size=\"xs\"\r\n class=\"!text-brand-primary hover:!text-brand-primary\"\r\n >\r\n Get directions\r\n </Button>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"flex flex-col items-center gap-1\">\r\n <p class={typography.xsMuted}>\r\n Order {data.order.orderNumber}\r\n </p>\r\n <p class={typography.xsMuted}>\r\n Questions?\r\n <a\r\n href=\"mailto:{data.venue.contactEmail}\"\r\n class=\"tone-muted underline underline-offset-2 transition-colors hover:tone-muted\"\r\n >\r\n {data.venue.contactEmail}\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n @keyframes slide-out-left {\r\n from {\r\n transform: translateX(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n\r\n to {\r\n transform: translateX(-120%) rotate(-4deg);\r\n opacity: 0;\r\n }\r\n }\r\n\r\n @keyframes slide-out-right {\r\n from {\r\n transform: translateX(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n\r\n to {\r\n transform: translateX(120%) rotate(4deg);\r\n opacity: 0;\r\n }\r\n }\r\n\r\n @keyframes slide-in-right {\r\n from {\r\n transform: translateX(120%) rotate(4deg);\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n transform: translateX(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n }\r\n\r\n @keyframes slide-in-left {\r\n from {\r\n transform: translateX(-120%) rotate(-4deg);\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n transform: translateX(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n }\r\n\r\n .slide-out-left {\r\n animation: slide-out-left var(--motion-fast) var(--ease-exit) forwards;\r\n }\r\n\r\n .slide-out-right {\r\n animation: slide-out-right var(--motion-fast) var(--ease-exit) forwards;\r\n }\r\n\r\n .slide-in-right {\r\n animation: slide-in-right var(--motion-normal) var(--ease-smooth) forwards;\r\n }\r\n\r\n .slide-in-left {\r\n animation: slide-in-left var(--motion-normal) var(--ease-smooth) forwards;\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .slide-out-left,\r\n .slide-out-right,\r\n .slide-in-right,\r\n .slide-in-left {\r\n animation: none;\r\n }\r\n }\r\n</style>\r\n","<!-- button-exception: the retry control uses a custom translucent style (bg-card/10, text-white/80) tuned to the dark ticket surface, with no matching SC Button variant. -->\r\n<script lang=\"ts\">\r\n import { Spinner } from '@getmicdrop/svelte-components';\r\n import ViewTickets from '$lib/view-tickets/variants/dice-swipe/ViewTickets.svelte';\r\n import { buildTicketApiUrl } from '$lib/view-tickets/defaults';\r\n import { MOCK_TICKET_DATA } from '$lib/view-tickets/mock-data';\r\n import type { TicketPageData } from '$lib/view-tickets/types';\r\n import { apiGet } from '$lib/api/client';\r\n\r\n interface Props {\r\n orderUUID: string;\r\n }\r\n\r\n let { orderUUID }: Props = $props();\r\n\r\n let ticketData = $state<TicketPageData | null>(null);\r\n let error = $state<string | null>(null);\r\n let loading = $state(true);\r\n\r\n // Monotonic id for ticket loads. The $effect re-runs loadTicketData whenever\r\n // orderUUID changes (and the retry button fires it too); a slower EARLIER\r\n // request resolving last would otherwise clobber the latest order's data.\r\n let latestLoad = 0;\r\n\r\n $effect(() => {\r\n loadTicketData(orderUUID);\r\n });\r\n\r\n async function loadTicketData(uuid: string) {\r\n const loadId = ++latestLoad;\r\n if (uuid === 'mock-uuid') {\r\n ticketData = MOCK_TICKET_DATA;\r\n loading = false;\r\n return;\r\n }\r\n\r\n loading = true;\r\n error = null;\r\n\r\n // @route-answers-escape: URL built by buildTicketApiUrl(); its literal lives in\r\n // view-tickets/defaults.ts, where the gate reads it.\r\n const result = await apiGet<TicketPageData>(buildTicketApiUrl(uuid));\r\n // A newer load superseded us — discard this stale response.\r\n if (loadId !== latestLoad) return;\r\n if (!result.success) {\r\n if (result.statusCode === 404) {\r\n error = 'Order not found. Please check the link in your email.';\r\n } else {\r\n error =\r\n result.error ?? 'Unable to load your tickets. Please try again.';\r\n }\r\n } else {\r\n ticketData = result.data ?? null;\r\n }\r\n loading = false;\r\n }\r\n</script>\r\n\r\n<!-- @pageloader-escape: full-screen dark ticket-embed loader (min-h-screen\r\n\tbg-bg-quaternary, white xl Spinner) + dark try-again error; PageLoader's fixed\r\n\tlight h-64 spinner + danger Alert can't reproduce the dark embed treatment. -->\r\n{#if loading}\r\n <div class=\"flex min-h-screen items-center justify-center bg-bg-quaternary\">\r\n <Spinner size=\"xl\" color=\"white\" />\r\n </div>\r\n{:else if error}\r\n <div\r\n class=\"flex min-h-screen flex-col items-center justify-center bg-bg-quaternary px-6 text-center\"\r\n >\r\n <p class=\"type-subheading text-white\">{error}</p>\r\n <button type=\"button\"\r\n onclick={() => loadTicketData(orderUUID)}\r\n class=\"mt-4 rounded-lg bg-card/10 px-4 py-2 type-body text-white/80 transition-colors hover:bg-card/20\"\r\n >\r\n Try again\r\n </button>\r\n </div>\r\n{:else if ticketData}\r\n <ViewTickets data={ticketData} />\r\n{/if}\r\n"],"names":["size","$","$$props","color","className","svg","root","path","defaultLabels","index","total","activeIndex","variant","userLabels","labels","mergeLabels","sizeClasses","variantClasses","sizeConfig","variantConfig","div","root_1","$$anchor","_","i","button","$0","MOCK_TICKET_DATA","getDefaultTimezone","ticketTimezone","timezone","getIANATimezone","formatTicketDate","isoDate","tz","weekday","formatDayOfWeek","date","formatShortDate","formatTicketTime","formatEventTime","buildDirectionsUrl","venue","buildCalendarUrls","event","orderId","start","end","fmt","d","location","googleParams","outlookParams","generateQrCode","data","QRCode","buildPdfUrl","orderUUID","getPublicBaseUrl","buildTicketApiUrl","currentTicketIndex","currentTicket","touchStartX","touchStartY","touchDeltaX","isSwiping","reducedMotion","animClass","isAnimating","calendarUrls","directionsUrl","pdfUrl","eventDate","eventTime","totalTickets","hasMultipleTickets","imageUrl","isRefunded","isCheckedIn","qrStateSuffix","qrCodes","ticket","url","SvelteMap","mq","handler","e","animateToTicket","newIndex","goingNext","handleTouchStart","handleTouchMove","deltaX","deltaY","handleTouchEnd","threshold","goToTicket","prevTicket","nextTicket","walletNote","showWalletNote","fragment","Image","$$render","consequent","div_1","header","Heading","node_1","div_2","Text","node_2","node_3","span","consequent_1","consequent_2","div_3","node_6","div_4","div_5","Card","node_7","div_6","fragment_7","div_7","root_3","Spinner","node_9","div_8","root_4","consequent_4","div_9","p","p_1","p_2","div_10","root_5","Badge","node_12","p_3","consequent_5","typography","text_5","text_6","text_7","div_11","fragment_10","Button","node_14","ChevronLeft","DotIndicator","node_15","node_16","ChevronRight","div_12","node_17","consequent_6","div_13","div_14","div_15","div_16","node_18","node_19","p_4","div_17","node_20","p_5","a","a_1","a_2","div_18","p_6","node_21","div_19","p_7","p_8","a_3","ticketData","error","loading","latestLoad","loadTicketData","uuid","loadId","result","apiGet","ViewTickets"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"ViewTicketsEmbed-BjVMnRnA.js","sources":["../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/ChevronLeft.svelte","../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/ChevronRight.svelte","../node_modules/@getmicdrop/svelte-components/dist/primitives/Pagination/DotIndicator.svelte","../src/lib/view-tickets/mock-data.ts","../src/lib/view-tickets/defaults.ts","../src/lib/view-tickets/variants/dice-swipe/ViewTickets.svelte","../src/components/Views/ViewTicketsEmbed.svelte"],"sourcesContent":["<script lang=\"ts\">\n interface Props {\n size?: string;\n color?: string;\n class?: string;\n }\n let { size = \"24\", color = \"currentColor\", class: className = \"\" }: Props = $props();\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M18.2847 25.7735C17.6953 25.7734 17.1301 25.5202 16.7134 25.0697L7.82356 15.4612C7.40691 15.0107 7.17285 14.3998 7.17285 13.7628C7.17285 13.1259 7.40691 12.515 7.82356 12.0645L16.7134 2.456C16.9184 2.22657 17.1636 2.04357 17.4348 1.91768C17.7059 1.79178 17.9976 1.72552 18.2927 1.72275C18.5878 1.71998 18.8804 1.78075 19.1536 1.90153C19.4267 2.02232 19.6748 2.20068 19.8835 2.42622C20.0922 2.65177 20.2572 2.91997 20.3689 3.21518C20.4807 3.5104 20.5369 3.82671 20.5344 4.14566C20.5318 4.46462 20.4705 4.77983 20.354 5.0729C20.2375 5.36597 20.0682 5.63103 19.8559 5.85262L12.5374 13.7628L19.8559 21.6731C20.1667 22.009 20.3783 22.437 20.464 22.9029C20.5497 23.3688 20.5057 23.8517 20.3375 24.2906C20.1693 24.7294 19.8845 25.1046 19.5192 25.3685C19.1538 25.6325 18.7242 25.7734 18.2847 25.7735Z\"\n fill={color}\n />\n</svg> ","<script lang=\"ts\">\n interface Props {\n size?: string;\n color?: string;\n class?: string;\n }\n let { size = \"24\", color = \"currentColor\", class: className = \"\" }: Props = $props();\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M9.26149 25.7735C8.822 25.7734 8.3924 25.6325 8.02701 25.3685C7.66161 25.1046 7.37682 24.7294 7.20865 24.2906C7.04048 23.8517 6.99647 23.3688 7.08218 22.9029C7.1679 22.437 7.37949 22.009 7.69021 21.6731L15.0088 13.7628L7.69021 5.85262C7.47794 5.63103 7.30863 5.36597 7.19215 5.0729C7.07568 4.77983 7.01437 4.46462 7.0118 4.14566C7.00924 3.82671 7.06547 3.5104 7.17722 3.21518C7.28897 2.91997 7.45399 2.65177 7.66266 2.42622C7.87134 2.20068 8.11948 2.02232 8.39261 1.90153C8.66574 1.78075 8.95839 1.71998 9.25349 1.72275C9.54859 1.72552 9.84022 1.79178 10.1114 1.91768C10.3825 2.04357 10.6278 2.22657 10.8328 2.456L19.7226 12.0645C20.1392 12.515 20.3733 13.1259 20.3733 13.7628C20.3733 14.3998 20.1392 15.0107 19.7226 15.4612L10.8328 25.0697C10.4161 25.5202 9.85087 25.7734 9.26149 25.7735Z\"\n fill={color}\n />\n</svg> ","<!-- button-exception: dot indicators are minimal rounded-full toggles with per-index active chrome — Button padding/min-sizing fights the dot layout. -->\n<script lang=\"ts\">\n import { mergeLabels, type SCLabels } from '../../utils/labels.js';\n\n // User-visible strings ride the labels-prop seam (docs/canonicals/i18n-seam.md Move 1).\n const defaultLabels = {\n itemSelector: 'Item selector',\n itemOf: (index: number, total: number) => `Item ${index} of ${total}`,\n };\n\n interface Props {\n /** Total number of items */\n count: number;\n /** Currently active index (0-based) */\n activeIndex?: number;\n /** Dot size */\n size?: 'sm' | 'md' | 'lg';\n /** Color scheme */\n variant?: 'light' | 'dark';\n /** Called when a dot is clicked */\n // eslint-disable-next-line no-unused-vars -- intentionally retained (prop/slot/forward-compat or Svelte-5 reactive binding eslint cannot see)\n onselect?: (index: number) => void;\n /** Additional CSS classes on the container */\n class?: string;\n labels?: SCLabels<typeof defaultLabels>;\n }\n\n let {\n count,\n activeIndex = 0,\n size = 'md',\n variant = 'dark',\n onselect,\n class: className = '',\n labels: userLabels = {},\n }: Props = $props();\n\n let labels = $derived(mergeLabels(defaultLabels, userLabels));\n\n const sizeClasses: Record<string, { dot: string; active: string }> = {\n sm: { dot: 'h-1.5 w-1.5', active: 'scale-125' },\n md: { dot: 'h-2.5 w-2.5', active: 'scale-125' },\n lg: { dot: 'h-3 w-3', active: 'scale-125' },\n };\n\n const variantClasses: Record<string, { active: string; inactive: string; hover: string }> = {\n light: {\n active: 'bg-card',\n inactive: 'bg-card/30',\n hover: 'hover:bg-card/50',\n },\n dark: {\n active: 'bg-bg-primary',\n inactive: 'bg-bg-quaternary',\n hover: 'hover:bg-muted-foreground',\n },\n };\n\n let sizeConfig = $derived(sizeClasses[size] || sizeClasses.md);\n let variantConfig = $derived(variantClasses[variant] || variantClasses.dark);\n</script>\n\n<div\n class=\"flex items-center gap-2 {className}\"\n role=\"tablist\"\n aria-label={labels.itemSelector}\n>\n {#each { length: count } as _, i (i)}\n <button\n type=\"button\"\n class=\"rounded-full transition-all {sizeConfig.dot} {i === activeIndex\n ? `${sizeConfig.active} ${variantConfig.active}`\n : `${variantConfig.inactive} ${variantConfig.hover}`}\"\n role=\"tab\"\n aria-selected={i === activeIndex}\n aria-label={labels.itemOf(i + 1, count)}\n onclick={() => onselect?.(i)}\n ></button>\n {/each}\n</div>\n","import { getDefaultTimezone } from '@getmicdrop/svelte-components/utils/timezones';\r\n// View Your Tickets — Mock Data\r\n\r\nimport type { TicketPageData, CalendarUrls } from './types';\r\n\r\nexport const MOCK_TICKET_DATA: TicketPageData = {\r\n event: {\r\n id: 123,\r\n title: 'Friday Night Comedy',\r\n startDateTime: '2026-03-20T20:00:00-07:00',\r\n endDateTime: '2026-03-20T22:00:00-07:00',\r\n timezone: getDefaultTimezone(),\r\n imageUrl: '/mock/view-tickets/event-poster.webp',\r\n doorsOpenTime: '7:30 PM',\r\n },\r\n tickets: [\r\n {\r\n id: 1001,\r\n ticketNumber: 'TKT-A8F3K2',\r\n attendeeName: 'Alex Johnson',\r\n ticketType: 'General Admission',\r\n qrCodeData: 'MICDROP:TKT:1001:a8f3k2m9x7',\r\n refunded: false,\r\n checkedIn: false,\r\n },\r\n {\r\n id: 1002,\r\n ticketNumber: 'TKT-B7G4L3',\r\n attendeeName: 'Alex Johnson',\r\n ticketType: 'General Admission',\r\n qrCodeData: 'MICDROP:TKT:1002:b7g4l3n8y6',\r\n refunded: false,\r\n checkedIn: false,\r\n },\r\n {\r\n id: 1003,\r\n ticketNumber: 'TKT-C6H5M4',\r\n attendeeName: 'Sam Rivera',\r\n ticketType: 'VIP',\r\n qrCodeData: 'MICDROP:TKT:1003:c6h5m4p9z5',\r\n refunded: false,\r\n checkedIn: false,\r\n },\r\n ],\r\n order: {\r\n // eslint-disable-next-line micdrop/no-hardcoded-hex -- order-number display string (#NNNNN), not a color\r\n orderNumber: '#12847',\r\n orderUUID: 'a8f3k2m9-x7p4-q2w5-e6r8-t1y3u0i9o7',\r\n purchaseDate: '2026-03-10T14:30:00-07:00',\r\n },\r\n venue: {\r\n name: 'The Comedy Store',\r\n address: '8433 Sunset Blvd, Los Angeles, CA 90069',\r\n contactEmail: 'info@thecomedystore.com',\r\n logoUrl: null,\r\n },\r\n};\r\n\r\nexport const MOCK_CALENDAR_URLS: CalendarUrls = {\r\n google: '#google-calendar',\r\n apple: '#apple-calendar',\r\n outlook: '#outlook-calendar',\r\n};\r\n\r\n// Single-ticket order variant\r\nexport const MOCK_SINGLE_TICKET: TicketPageData = {\r\n ...MOCK_TICKET_DATA,\r\n tickets: [MOCK_TICKET_DATA.tickets[0]],\r\n};\r\n\r\n// No event image variant\r\nexport const MOCK_NO_IMAGE: TicketPageData = {\r\n ...MOCK_TICKET_DATA,\r\n event: { ...MOCK_TICKET_DATA.event, imageUrl: null },\r\n};\r\n\r\n// Mixed per-ticket state: one valid, one already scanned, one refunded.\r\n// MOCK_TICKET_DATA stays all-valid on purpose so the default preview shows the\r\n// happy path; this fixture is what exercises the state treatments.\r\nexport const MOCK_TICKET_STATES: TicketPageData = {\r\n ...MOCK_TICKET_DATA,\r\n tickets: [\r\n MOCK_TICKET_DATA.tickets[0],\r\n { ...MOCK_TICKET_DATA.tickets[1], checkedIn: true },\r\n { ...MOCK_TICKET_DATA.tickets[2], refunded: true },\r\n ],\r\n};\r\n","import type { TicketId } from '@getmicdrop/svelte-components';\r\n// View Your Tickets — Shared Utilities\r\n\r\nimport type { TicketEventData, VenueInfo, CalendarUrls } from './types';\r\nimport { getPublicBaseUrl, simpleFetch } from '$lib/api/client';\r\nimport {\r\n formatEventTime,\r\n formatDayOfWeek,\r\n formatShortDate,\r\n} from '@getmicdrop/svelte-components/datetime';\r\nimport { getIANATimezone } from '$lib/utils/datetime.js';\r\nimport QRCode from 'qrcode';\r\n\r\n/**\r\n * Resolve a ticket's timezone to a real IANA zone before it reaches SC's\r\n * date-fns formatters. Real order data is always IANA, but stay defensive:\r\n * SC throws on a bare legacy abbreviation (PST/EST) or an empty string where the\r\n * old Intl seam tolerated them, so route through the canonical lenient resolver\r\n * (maps a legacy abbreviation to its IANA zone, empty/invalid to the default).\r\n */\r\nfunction ticketTimezone(timezone: string): string {\r\n return getIANATimezone(timezone);\r\n}\r\n\r\n/**\r\n * Format date for display: \"Sat, Mar 15, 2026\"\r\n *\r\n * Composed from two SC datetime canonicals — short weekday + short date-with-year\r\n * — because no single SC preset emits weekday+month+day+year. Byte-identical to\r\n * the prior Intl `{ weekday, month, day, year }` output across boundary instants ×\r\n * 6 zones (proven old-vs-new in defaults.test.ts). Fail-open: an unparseable ISO\r\n * returns '' rather than white-screening the ticket page (a dateless label, not a\r\n * render crash) — matching the null-safety of the formatInTz seam it replaces.\r\n *\r\n * A composed label has to answer for absence itself. SC splits its two answers:\r\n * an ABSENT date (null/undefined/''/Go's zero time) returns '' with no throw\r\n * (ruling on #600), while a present-but-malformed one throws. So the catch below\r\n * only covers malformed — absence walks straight through it, and joining two\r\n * blank parts emitted a bare ', ' on the ticket. Guard the parts, not the join.\r\n */\r\nexport function formatTicketDate(isoDate: string, timezone: string): string {\r\n try {\r\n const tz = ticketTimezone(timezone);\r\n const weekday = formatDayOfWeek(isoDate, tz, true);\r\n const date = formatShortDate(isoDate, tz);\r\n if (!weekday || !date) return '';\r\n return `${weekday}, ${date}`;\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Format time for display: \"8:00 PM\"\r\n *\r\n * SC's canonical tz-first time formatter. Byte-identical to the prior Intl\r\n * `{ hour, minute }` output across boundary instants × 6 zones (proven in\r\n * defaults.test.ts). Fail-open on an unparseable ISO (see {@link formatTicketDate}).\r\n */\r\nexport function formatTicketTime(isoDate: string, timezone: string): string {\r\n try {\r\n return formatEventTime(isoDate, ticketTimezone(timezone));\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Build Google Maps directions URL\r\n */\r\nexport function buildDirectionsUrl(venue: VenueInfo): string {\r\n const query = encodeURIComponent(`${venue.name}, ${venue.address}`);\r\n return `https://www.google.com/maps/search/?api=1&query=${query}`;\r\n}\r\n\r\n/**\r\n * Build calendar URLs for the three providers.\r\n * In production, these would come from the backend (/cal/{eventId}/:provider).\r\n * For the prototype, we generate them client-side.\r\n */\r\nexport function buildCalendarUrls(\r\n event: TicketEventData,\r\n venue: VenueInfo,\r\n orderId: string\r\n): CalendarUrls {\r\n const start = new Date(event.startDateTime); // @datetime-escape: ICS/calendar-URL instant serialized to UTC — tz-independent\r\n const end = event.endDateTime\r\n ? new Date(event.endDateTime) // @datetime-escape: ICS/calendar-URL instant serialized to UTC — tz-independent\r\n : new Date(start.getTime() + 2 * 60 * 60 * 1000); // @datetime-escape: ICS/calendar-URL instant serialized to UTC — tz-independent\r\n\r\n const fmt = (d: Date) =>\r\n d\r\n .toISOString()\r\n .replace(/[-:]/g, '')\r\n .replace(/\\.\\d{3}/, ''); // calendar URL format (ICS/Google) — strips ms from the UTC ISO\r\n const location = `${venue.name}, ${venue.address}`;\r\n\r\n const googleParams = new URLSearchParams({\r\n action: 'TEMPLATE',\r\n text: event.title,\r\n dates: `${fmt(start)}/${fmt(end)}`,\r\n location,\r\n details: `Order ${orderId}`,\r\n });\r\n\r\n const outlookParams = new URLSearchParams({\r\n subject: event.title,\r\n startdt: start.toISOString(), // @datetime-escape: calendar URL format (ICS/Google)\r\n enddt: end.toISOString(), // @datetime-escape: calendar URL format (ICS/Google)\r\n location,\r\n body: `Order ${orderId}`,\r\n });\r\n\r\n return {\r\n google: `https://calendar.google.com/calendar/render?${googleParams}`,\r\n apple: '#apple-calendar-ics',\r\n outlook: `https://outlook.live.com/calendar/0/action/compose?${outlookParams}`,\r\n };\r\n}\r\n\r\n/**\r\n * Generate a real scannable QR code as an SVG data URL.\r\n */\r\nexport async function generateQrCode(\r\n data: string,\r\n size: number = 200\r\n): Promise<string> {\r\n const svg = await QRCode.toString(data, {\r\n type: 'svg',\r\n margin: 1,\r\n width: size,\r\n color: { dark: '#000000', light: '#ffffff' }, // color-constants-exception: QR code technical color params (dark/light module color), not UI design tokens\r\n });\r\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\r\n}\r\n\r\n/**\r\n * Build a PDF download URL from the order UUID.\r\n */\r\nexport function buildPdfUrl(orderUUID: string): string {\r\n return `${getPublicBaseUrl()}/orders/${orderUUID}/pdf`;\r\n}\r\n\r\n/**\r\n * Build the Apple Wallet .pkpass download URL for a ticket.\r\n *\r\n * NOT wired to any UI: the endpoint is an unconditional 501 stub until pass\r\n * signing certificates are configured. Navigating a user here dumps a raw JSON\r\n * error over their ticket — don't re-attach this to a button until the backend\r\n * actually returns a pass.\r\n */\r\nexport function buildAppleWalletUrl(ticketId: TicketId): string {\r\n return `${getPublicBaseUrl()}/tickets/${ticketId}/apple-wallet`;\r\n}\r\n\r\n/**\r\n * Fetch the Google Wallet save URL for a ticket.\r\n * Returns the save URL string, or null on failure.\r\n *\r\n * NOT wired to any UI: the endpoint is an unconditional 501 stub until Wallet\r\n * API credentials are configured, so this always resolves null — a caller that\r\n * only acts on a non-null result is a silent no-op. See buildAppleWalletUrl.\r\n */\r\nexport async function fetchGoogleWalletUrl(\r\n ticketId: TicketId\r\n): Promise<string | null> {\r\n try {\r\n const data = await simpleFetch<{ saveUrl?: string }>(\r\n `${getPublicBaseUrl()}/tickets/${ticketId}/google-wallet`\r\n );\r\n return data?.saveUrl ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Build the public ticket API URL from order UUID.\r\n */\r\nexport function buildTicketApiUrl(orderUUID: string): string {\r\n return `${getPublicBaseUrl()}/orders/${orderUUID}/tickets`;\r\n}\r\n","<!-- @aria-live-escape: the single aria-live=\"polite\" on the wallet-note <p> is a scoped, atomic status line unique to this widget (the note swaps text on wallet availability); it is not a duplicated/ad-hoc region — one polite announcer, no stacking. Migrating to <LiveRegion> here is a follow-up; the standalone attribute is deliberate and correct. -->\r\n<!-- @text-escape: full-bleed themed ticket view — the hero title's tracking-tight on a 2xl bold Heading is part of the pinned dice-swipe visual design; no SC typography role matches (type-title is 28px/1.18/-0.018em), and adopting one would visibly change the shipped ticket rendering. -->\r\n<!-- @style-escape: widget-intentional. -->\r\n<!-- @modal-escape: custom dice-swipe gesture overlay; fixed inset-0 background is integral to swipe-card UX — SC Modal would break touch/gesture coordinate math -->\r\n<script lang=\"ts\">\r\n import {\r\n Badge,\r\n Button,\r\n Spinner,\r\n Card,\r\n Heading,\r\n Image,\r\n Text,\r\n DotIndicator,\r\n ChevronLeft,\r\n ChevronRight,\r\n typography,\r\n } from '@getmicdrop/svelte-components';\r\n import type { TicketPageData } from '$lib/view-tickets/types';\r\n import { SvelteMap } from 'svelte/reactivity';\r\n import { MOCK_TICKET_DATA } from '$lib/view-tickets/mock-data';\r\n import {\r\n formatTicketDate,\r\n formatTicketTime,\r\n buildDirectionsUrl,\r\n buildCalendarUrls,\r\n generateQrCode,\r\n buildPdfUrl,\r\n } from '$lib/view-tickets/defaults';\r\n\r\n interface Props {\r\n data?: TicketPageData;\r\n }\r\n let { data = MOCK_TICKET_DATA }: Props = $props();\r\n\r\n let currentTicketIndex = $state(0);\r\n let currentTicket = $derived(data.tickets[currentTicketIndex]);\r\n\r\n // Swipe state\r\n let touchStartX = $state(0);\r\n let touchStartY = $state(0);\r\n let touchDeltaX = $state(0);\r\n let isSwiping = $state(false);\r\n let reducedMotion = $state(false);\r\n\r\n // Animation state\r\n let animClass = $state('');\r\n let isAnimating = $state(false);\r\n\r\n // Derived data\r\n const calendarUrls = $derived(\r\n buildCalendarUrls(data.event, data.venue, data.order.orderNumber)\r\n );\r\n const directionsUrl = $derived(buildDirectionsUrl(data.venue));\r\n const pdfUrl = $derived(buildPdfUrl(data.order.orderUUID));\r\n const eventDate = $derived(\r\n formatTicketDate(data.event.startDateTime, data.event.timezone)\r\n );\r\n const eventTime = $derived(\r\n formatTicketTime(data.event.startDateTime, data.event.timezone)\r\n );\r\n const totalTickets = $derived(data.tickets.length);\r\n const hasMultipleTickets = $derived(totalTickets > 1);\r\n const imageUrl = $derived(data.event.imageUrl);\r\n\r\n // --- Per-ticket state ---\r\n // The payload carries `refunded` / `checkedIn` per ticket. Both are already\r\n // hard-rejected at the door, so drawing them as a normal live card sends the\r\n // attendee to the scanner to find out. Refunded wins over checked-in: it's\r\n // the terminal state and the reason the code won't scan now.\r\n // Fields are optional (older links can resolve without them) — absent means\r\n // \"nothing known against this ticket\", so compare explicitly rather than\r\n // trusting undefined to read as valid.\r\n const isRefunded = $derived(currentTicket.refunded === true);\r\n const isCheckedIn = $derived(!isRefunded && currentTicket.checkedIn === true);\r\n // Sighted users get the void overlay; this is the same news for screen readers.\r\n const qrStateSuffix = $derived(\r\n isRefunded\r\n ? ' — refunded, not valid for entry'\r\n : isCheckedIn\r\n ? ' — already checked in'\r\n : ''\r\n );\r\n\r\n // QR code generation (async, per ticket)\r\n let qrCodes = $state<Map<number, string>>(new Map());\r\n\r\n $effect(() => {\r\n for (const ticket of data.tickets) {\r\n if (!qrCodes.has(ticket.id)) {\r\n generateQrCode(ticket.qrCodeData, 220).then(url => {\r\n qrCodes.set(ticket.id, url);\r\n qrCodes = new SvelteMap(qrCodes);\r\n });\r\n }\r\n }\r\n });\r\n\r\n $effect(() => {\r\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n reducedMotion = mq.matches;\r\n const handler = (e: MediaQueryListEvent) => {\r\n reducedMotion = e.matches;\r\n };\r\n mq.addEventListener('change', handler);\r\n return () => mq.removeEventListener('change', handler);\r\n });\r\n\r\n function animateToTicket(newIndex: number) {\r\n if (\r\n newIndex === currentTicketIndex ||\r\n newIndex < 0 ||\r\n newIndex >= totalTickets ||\r\n isAnimating\r\n )\r\n return;\r\n\r\n const goingNext = newIndex > currentTicketIndex;\r\n isAnimating = true;\r\n\r\n if (reducedMotion) {\r\n currentTicketIndex = newIndex;\r\n isAnimating = false;\r\n return;\r\n }\r\n\r\n animClass = goingNext ? 'slide-out-left' : 'slide-out-right';\r\n\r\n setTimeout(() => {\r\n currentTicketIndex = newIndex;\r\n animClass = goingNext ? 'slide-in-right' : 'slide-in-left';\r\n\r\n setTimeout(() => {\r\n animClass = '';\r\n isAnimating = false;\r\n }, 250);\r\n }, 200);\r\n }\r\n\r\n function handleTouchStart(e: TouchEvent) {\r\n if (!hasMultipleTickets || isAnimating) return;\r\n touchStartX = e.touches[0].clientX;\r\n touchStartY = e.touches[0].clientY;\r\n touchDeltaX = 0;\r\n isSwiping = false;\r\n }\r\n\r\n function handleTouchMove(e: TouchEvent) {\r\n if (!hasMultipleTickets || isAnimating) return;\r\n const deltaX = e.touches[0].clientX - touchStartX;\r\n const deltaY = e.touches[0].clientY - touchStartY;\r\n\r\n if (\r\n !isSwiping &&\r\n Math.abs(deltaX) > 10 &&\r\n Math.abs(deltaX) > Math.abs(deltaY) * 1.5\r\n ) {\r\n isSwiping = true;\r\n }\r\n\r\n if (isSwiping) {\r\n e.preventDefault();\r\n touchDeltaX = deltaX;\r\n }\r\n }\r\n\r\n function handleTouchEnd() {\r\n if (!hasMultipleTickets || !isSwiping) {\r\n touchDeltaX = 0;\r\n isSwiping = false;\r\n return;\r\n }\r\n\r\n const threshold = 50;\r\n let newIndex = currentTicketIndex;\r\n\r\n if (touchDeltaX < -threshold && currentTicketIndex < totalTickets - 1) {\r\n newIndex = currentTicketIndex + 1;\r\n } else if (touchDeltaX > threshold && currentTicketIndex > 0) {\r\n newIndex = currentTicketIndex - 1;\r\n }\r\n\r\n touchDeltaX = 0;\r\n isSwiping = false;\r\n\r\n if (newIndex !== currentTicketIndex) {\r\n const goingNext = newIndex > currentTicketIndex;\r\n isAnimating = true;\r\n\r\n if (reducedMotion) {\r\n currentTicketIndex = newIndex;\r\n isAnimating = false;\r\n return;\r\n }\r\n\r\n currentTicketIndex = newIndex;\r\n animClass = goingNext ? 'slide-in-right' : 'slide-in-left';\r\n\r\n setTimeout(() => {\r\n animClass = '';\r\n isAnimating = false;\r\n }, 250);\r\n }\r\n }\r\n\r\n function goToTicket(index: number) {\r\n animateToTicket(index);\r\n }\r\n\r\n function prevTicket() {\r\n animateToTicket(currentTicketIndex - 1);\r\n }\r\n\r\n function nextTicket() {\r\n animateToTicket(currentTicketIndex + 1);\r\n }\r\n\r\n // --- Wallet badges (not wired — backend pass signing isn't built) ---\r\n // /tickets/:id/apple-wallet and /tickets/:id/google-wallet are unconditional\r\n // 501 stubs (they need an Apple Pass Type ID cert / Google Wallet service\r\n // account). Hitting them for real navigated the attendee off their own ticket\r\n // into a raw JSON error body, so both badges now show the same inline\r\n // \"coming soon\" note SuccessActions.svelte uses on the confirmation page.\r\n let walletNote = $state('');\r\n\r\n function showWalletNote() {\r\n walletNote =\r\n 'Wallet passes are coming soon. Your ticket is right here — screenshot it or download the PDF.';\r\n }\r\n</script>\r\n\r\n<!-- @modal-escape: fullscreen page background (base-layer dimmed image), not a modal — dice-swipe variant uses full-bleed presentation with blurred ticket-image backdrop -->\r\n<!-- Full-bleed dimmed background -->\r\n<div class=\"fixed inset-0 z-base bg-black\">\r\n {#if imageUrl}\r\n <Image\r\n src={imageUrl}\r\n alt=\"\"\r\n class=\"h-full w-full opacity-20 blur-sm\"\r\n fit=\"cover\"\r\n />\r\n {/if}\r\n</div>\r\n\r\n<!-- Main content -->\r\n<div class=\"relative z-sticky flex min-h-screen flex-col\">\r\n <!-- Event header -->\r\n <header class=\"px-6 pb-4 pt-12 text-center\">\r\n <Heading\r\n level={1}\r\n size=\"2xl\"\r\n weight=\"bold\"\r\n color=\"none\"\r\n class=\"tracking-tight text-white\"\r\n >\r\n {data.event.title}\r\n </Heading>\r\n <div class=\"mt-1\">\r\n <Text as=\"p\" size=\"base\" color=\"none\" class=\"text-white/70\">\r\n {eventDate}\r\n </Text>\r\n </div>\r\n <Text as=\"p\" size=\"sm\" color=\"none\" class=\"text-white/50\">\r\n {eventTime}\r\n {#if data.event.doorsOpenTime}\r\n {#if eventTime}\r\n <span class=\"mx-1 text-white/30\">&middot;</span>\r\n {/if}\r\n Doors {data.event.doorsOpenTime}\r\n {/if}\r\n </Text>\r\n <div class=\"mt-1\">\r\n <Text as=\"p\" size=\"sm\" color=\"none\" weight=\"medium\" class=\"text-white/60\">\r\n {data.venue.name}\r\n </Text>\r\n </div>\r\n </header>\r\n\r\n <!-- QR card area — the hero -->\r\n <div class=\"flex flex-1 flex-col items-center justify-center px-4 py-4\">\r\n <!-- Swipe container -->\r\n <div\r\n class=\"w-full max-w-xs overflow-hidden\"\r\n ontouchstart={handleTouchStart}\r\n ontouchmove={handleTouchMove}\r\n ontouchend={handleTouchEnd}\r\n role=\"region\"\r\n aria-label=\"Ticket carousel\"\r\n aria-roledescription=\"carousel\"\r\n >\r\n <!-- Floating white QR card -->\r\n <Card class=\"qr-card !bg-card rounded-2xl shadow-2xl {animClass}\">\r\n <!--\r\n QR code. A refunded ticket keeps its QR — deleting it reads as a\r\n broken page — but it is washed out and stamped, so it can't be\r\n mistaken for a working entry credential.\r\n -->\r\n <div class=\"relative flex justify-center\">\r\n {#if qrCodes.get(currentTicket.id)}\r\n <Image\r\n src={qrCodes.get(currentTicket.id)}\r\n alt=\"QR code for ticket {currentTicket.ticketNumber}{qrStateSuffix}\"\r\n class=\"h-52 w-52 {isRefunded ? 'opacity-20 grayscale' : ''}\"\r\n />\r\n {:else}\r\n <div\r\n class=\"flex h-52 w-52 items-center justify-center bg-bg-secondary\"\r\n >\r\n <Spinner size=\"lg\" />\r\n </div>\r\n {/if}\r\n\r\n {#if isRefunded}\r\n <!-- pointer-events-none: the card is the swipe target; the stamp must not eat the gesture -->\r\n <div\r\n class=\"pointer-events-none absolute inset-0 flex items-center justify-center\"\r\n aria-hidden=\"true\"\r\n >\r\n <span\r\n class=\"rounded-md border border-status-error-border bg-card/90 px-3 py-1 type-label uppercase tracking-widest text-status-error-text\"\r\n >\r\n Refunded\r\n </span>\r\n </div>\r\n {/if}\r\n </div>\r\n\r\n <!-- Ticket info -->\r\n <div class=\"mt-4 flex flex-col items-center gap-0.5\">\r\n <p class={typography.h3}>\r\n {currentTicket.attendeeName}\r\n </p>\r\n <p class=\"type-label tone-secondary\">\r\n {currentTicket.ticketType}\r\n </p>\r\n <p class=\"type-caption font-mono tone-muted\">\r\n {currentTicket.ticketNumber}\r\n </p>\r\n </div>\r\n\r\n <!-- Ticket state — why this code won't scan -->\r\n {#if isRefunded || isCheckedIn}\r\n <div class=\"mt-3 flex flex-col items-center gap-1.5\">\r\n <Badge\r\n variant={isRefunded ? 'error' : 'neutral'}\r\n tone=\"outlined\"\r\n size=\"sm\"\r\n shape=\"pill\"\r\n >\r\n {isRefunded ? 'Refunded' : 'Checked in'}\r\n </Badge>\r\n <p class=\"type-caption text-center tone-muted\">\r\n {isRefunded\r\n ? 'This ticket was refunded and will not be accepted at the door.'\r\n : 'This ticket has already been scanned — it cannot be used again.'}\r\n </p>\r\n </div>\r\n {/if}\r\n </Card>\r\n\r\n <!-- Navigation: dots + arrows -->\r\n {#if hasMultipleTickets}\r\n <div class=\"mt-5 flex items-center justify-center gap-4\">\r\n <Button\r\n variant=\"icon\"\r\n size=\"sm\"\r\n onclick={prevTicket}\r\n disabled={currentTicketIndex === 0}\r\n class=\"!text-white/60 hover:!text-white hover:!bg-transparent disabled:!text-white/20 disabled:!bg-transparent\"\r\n aria-label=\"Previous ticket\"\r\n >\r\n <ChevronLeft size=\"20\" color=\"currentColor\" />\r\n </Button>\r\n\r\n <DotIndicator\r\n count={totalTickets}\r\n activeIndex={currentTicketIndex}\r\n variant=\"light\"\r\n onselect={goToTicket}\r\n />\r\n\r\n <Button\r\n variant=\"icon\"\r\n size=\"sm\"\r\n onclick={nextTicket}\r\n disabled={currentTicketIndex === totalTickets - 1}\r\n class=\"!text-white/60 hover:!text-white hover:!bg-transparent disabled:!text-white/20 disabled:!bg-transparent\"\r\n aria-label=\"Next ticket\"\r\n >\r\n <ChevronRight size=\"20\" color=\"currentColor\" />\r\n </Button>\r\n </div>\r\n\r\n <div class=\"mt-2 text-center\">\r\n <Text size=\"xs\" color=\"none\" class=\"text-white/40\">\r\n {currentTicketIndex + 1} of {totalTickets}\r\n </Text>\r\n </div>\r\n {/if}\r\n </div>\r\n </div>\r\n\r\n <!-- Bottom actions area -->\r\n <div class=\"mt-auto bg-bg-quaternary/90 px-6 pb-10 pt-6 backdrop-blur-md\">\r\n <div class=\"mx-auto max-w-md space-y-5\">\r\n <!-- Wallet badges — coming soon (see showWalletNote) -->\r\n <div class=\"flex flex-col items-center gap-2\">\r\n <div class=\"flex items-center justify-center gap-3\">\r\n <Button\r\n variant=\"ghost\"\r\n onclick={showWalletNote}\r\n class=\"!p-0 !border-transparent transition-opacity hover:opacity-80 hover:!bg-transparent\"\r\n aria-label=\"Add to Apple Wallet — coming soon\"\r\n >\r\n <Image\r\n src=\"/mock/view-tickets/add-to-apple-wallet.svg\"\r\n alt=\"Add to Apple Wallet\"\r\n class=\"h-11 opacity-60\"\r\n />\r\n </Button>\r\n\r\n <Button\r\n variant=\"ghost\"\r\n onclick={showWalletNote}\r\n class=\"!p-0 !border-transparent transition-opacity hover:opacity-80 hover:!bg-transparent\"\r\n aria-label=\"Add to Google Wallet — coming soon\"\r\n >\r\n <Image\r\n src=\"/mock/view-tickets/add-to-google-wallet.svg\"\r\n alt=\"Add to Google Wallet\"\r\n class=\"h-11 opacity-60\"\r\n />\r\n </Button>\r\n </div>\r\n\r\n <!--\r\n Inline note, not a toast — this page has no toast host. Kept mounted\r\n (empty) rather than behind an {#if} so the live region exists before\r\n the text lands; screen readers miss announcements from regions that\r\n are inserted at the same time as their content.\r\n -->\r\n <p class=\"{typography.xsMuted} text-center\" aria-live=\"polite\">\r\n {walletNote}\r\n </p>\r\n </div>\r\n\r\n <!-- Calendar + PDF -->\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <Button href={pdfUrl} variant=\"alternative\" size=\"xs\">\r\n <svg\r\n aria-hidden=\"true\"\r\n class=\"h-3.5 w-3.5\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3\"\r\n />\r\n </svg>\r\n Download PDF\r\n </Button>\r\n <p class={typography.smMuted}>\r\n Add to calendar:\r\n <a\r\n href={calendarUrls.apple}\r\n rel=\"external\"\r\n class=\"tone-muted underline underline-offset-2 transition-colors hover:text-white\"\r\n >Apple</a\r\n >\r\n <span class=\"mx-1 tone-secondary\">&middot;</span>\r\n <a\r\n href={calendarUrls.google}\r\n class=\"tone-muted underline underline-offset-2 transition-colors hover:text-white\"\r\n target=\"_blank\"\r\n rel=\"external noopener noreferrer\">Google</a\r\n >\r\n <span class=\"mx-1 tone-secondary\">&middot;</span>\r\n <a\r\n href={calendarUrls.outlook}\r\n class=\"tone-muted underline underline-offset-2 transition-colors hover:text-white\"\r\n target=\"_blank\"\r\n rel=\"external noopener noreferrer\">Outlook</a\r\n >\r\n </p>\r\n </div>\r\n\r\n <!-- Venue + directions -->\r\n <div class=\"flex flex-col items-center gap-1\">\r\n <p class={typography.smMuted}>\r\n {data.venue.address}\r\n </p>\r\n <Button\r\n href={directionsUrl}\r\n variant=\"link\"\r\n size=\"xs\"\r\n class=\"!text-brand-primary hover:!text-brand-primary\"\r\n >\r\n Get directions\r\n </Button>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"flex flex-col items-center gap-1\">\r\n <p class={typography.xsMuted}>\r\n Order {data.order.orderNumber}\r\n </p>\r\n <p class={typography.xsMuted}>\r\n Questions?\r\n <a\r\n href=\"mailto:{data.venue.contactEmail}\"\r\n class=\"tone-muted underline underline-offset-2 transition-colors hover:tone-muted\"\r\n >\r\n {data.venue.contactEmail}\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n @keyframes slide-out-left {\r\n from {\r\n transform: translateX(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n\r\n to {\r\n transform: translateX(-120%) rotate(-4deg);\r\n opacity: 0;\r\n }\r\n }\r\n\r\n @keyframes slide-out-right {\r\n from {\r\n transform: translateX(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n\r\n to {\r\n transform: translateX(120%) rotate(4deg);\r\n opacity: 0;\r\n }\r\n }\r\n\r\n @keyframes slide-in-right {\r\n from {\r\n transform: translateX(120%) rotate(4deg);\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n transform: translateX(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n }\r\n\r\n @keyframes slide-in-left {\r\n from {\r\n transform: translateX(-120%) rotate(-4deg);\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n transform: translateX(0) rotate(0deg);\r\n opacity: 1;\r\n }\r\n }\r\n\r\n .slide-out-left {\r\n animation: slide-out-left var(--motion-fast) var(--ease-exit) forwards;\r\n }\r\n\r\n .slide-out-right {\r\n animation: slide-out-right var(--motion-fast) var(--ease-exit) forwards;\r\n }\r\n\r\n .slide-in-right {\r\n animation: slide-in-right var(--motion-normal) var(--ease-smooth) forwards;\r\n }\r\n\r\n .slide-in-left {\r\n animation: slide-in-left var(--motion-normal) var(--ease-smooth) forwards;\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .slide-out-left,\r\n .slide-out-right,\r\n .slide-in-right,\r\n .slide-in-left {\r\n animation: none;\r\n }\r\n }\r\n</style>\r\n","<!-- button-exception: the retry control uses a custom translucent style (bg-card/10, text-white/80) tuned to the dark ticket surface, with no matching SC Button variant. -->\r\n<script lang=\"ts\">\r\n import { Spinner } from '@getmicdrop/svelte-components';\r\n import ViewTickets from '$lib/view-tickets/variants/dice-swipe/ViewTickets.svelte';\r\n import { buildTicketApiUrl } from '$lib/view-tickets/defaults';\r\n import { MOCK_TICKET_DATA } from '$lib/view-tickets/mock-data';\r\n import type { TicketPageData } from '$lib/view-tickets/types';\r\n import { apiGet } from '$lib/api/client';\r\n\r\n interface Props {\r\n orderUUID: string;\r\n }\r\n\r\n let { orderUUID }: Props = $props();\r\n\r\n let ticketData = $state<TicketPageData | null>(null);\r\n let error = $state<string | null>(null);\r\n let loading = $state(true);\r\n\r\n // Monotonic id for ticket loads. The $effect re-runs loadTicketData whenever\r\n // orderUUID changes (and the retry button fires it too); a slower EARLIER\r\n // request resolving last would otherwise clobber the latest order's data.\r\n let latestLoad = 0;\r\n\r\n $effect(() => {\r\n loadTicketData(orderUUID);\r\n });\r\n\r\n async function loadTicketData(uuid: string) {\r\n const loadId = ++latestLoad;\r\n if (uuid === 'mock-uuid') {\r\n ticketData = MOCK_TICKET_DATA;\r\n loading = false;\r\n return;\r\n }\r\n\r\n loading = true;\r\n error = null;\r\n\r\n // @route-answers-escape: URL built by buildTicketApiUrl(); its literal lives in\r\n // view-tickets/defaults.ts, where the gate reads it.\r\n const result = await apiGet<TicketPageData>(buildTicketApiUrl(uuid));\r\n // A newer load superseded us — discard this stale response.\r\n if (loadId !== latestLoad) return;\r\n if (!result.success) {\r\n if (result.statusCode === 404) {\r\n error = 'Order not found. Please check the link in your email.';\r\n } else {\r\n error =\r\n result.error ?? 'Unable to load your tickets. Please try again.';\r\n }\r\n } else {\r\n ticketData = result.data ?? null;\r\n }\r\n loading = false;\r\n }\r\n</script>\r\n\r\n<!-- @pageloader-escape: full-screen dark ticket-embed loader (min-h-screen\r\n\tbg-bg-quaternary, white xl Spinner) + dark try-again error; PageLoader's fixed\r\n\tlight h-64 spinner + danger Alert can't reproduce the dark embed treatment. -->\r\n{#if loading}\r\n <div class=\"flex min-h-screen items-center justify-center bg-bg-quaternary\">\r\n <Spinner size=\"xl\" color=\"white\" />\r\n </div>\r\n{:else if error}\r\n <div\r\n class=\"flex min-h-screen flex-col items-center justify-center bg-bg-quaternary px-6 text-center\"\r\n >\r\n <p class=\"type-subheading text-white\">{error}</p>\r\n <button type=\"button\"\r\n onclick={() => loadTicketData(orderUUID)}\r\n class=\"mt-4 rounded-lg bg-card/10 px-4 py-2 type-body text-white/80 transition-colors hover:bg-card/20\"\r\n >\r\n Try again\r\n </button>\r\n </div>\r\n{:else if ticketData}\r\n <ViewTickets data={ticketData} />\r\n{/if}\r\n"],"names":["size","$","$$props","color","className","svg","root","path","defaultLabels","index","total","activeIndex","variant","userLabels","labels","mergeLabels","sizeClasses","variantClasses","sizeConfig","variantConfig","div","root_1","$$anchor","_","i","button","$0","MOCK_TICKET_DATA","getDefaultTimezone","ticketTimezone","timezone","getIANATimezone","formatTicketDate","isoDate","tz","weekday","formatDayOfWeek","date","formatShortDate","formatTicketTime","formatEventTime","buildDirectionsUrl","venue","buildCalendarUrls","event","orderId","start","end","fmt","d","location","googleParams","outlookParams","generateQrCode","data","QRCode","buildPdfUrl","orderUUID","getPublicBaseUrl","buildTicketApiUrl","currentTicketIndex","currentTicket","touchStartX","touchStartY","touchDeltaX","isSwiping","reducedMotion","animClass","isAnimating","calendarUrls","directionsUrl","pdfUrl","eventDate","eventTime","totalTickets","hasMultipleTickets","imageUrl","isRefunded","isCheckedIn","qrStateSuffix","qrCodes","ticket","url","SvelteMap","mq","handler","e","animateToTicket","newIndex","goingNext","handleTouchStart","handleTouchMove","deltaX","deltaY","handleTouchEnd","threshold","goToTicket","prevTicket","nextTicket","walletNote","showWalletNote","fragment","Image","$$render","consequent","div_1","header","Heading","node_1","div_2","Text","node_2","node_3","span","consequent_1","consequent_2","div_3","node_6","div_4","div_5","Card","node_7","div_6","fragment_7","div_7","root_3","Spinner","node_9","div_8","root_4","consequent_4","div_9","p","p_1","p_2","div_10","root_5","Badge","node_12","p_3","consequent_5","typography","text_5","text_6","text_7","div_11","fragment_10","Button","node_14","ChevronLeft","DotIndicator","node_15","node_16","ChevronRight","div_12","node_17","consequent_6","div_13","div_14","div_15","div_16","node_18","node_19","p_4","div_17","node_20","p_5","a","a_1","a_2","div_18","p_6","node_21","div_19","p_7","p_8","a_3","ticketData","error","loading","latestLoad","loadTicketData","uuid","loadId","result","apiGet","ViewTickets"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -1,6 +1,6 @@
1
1
  import "svelte/internal/disclose-version";
2
2
  import * as e from "svelte/internal/client";
3
- import { Z as g } from "./VenueCalendar-DcX-R9GN.js";
3
+ import { Z as g } from "./VenueCalendar-Ys8-209-.js";
4
4
  var f = e.from_svg('<svg aria-hidden="true" fill="none" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5"></path></svg>');
5
5
  function z(n, t) {
6
6
  let s = e.prop(t, "size", 3, "24"), i = e.prop(t, "color", 3, "currentColor"), c = e.prop(t, "class", 3, "");
@@ -64,4 +64,4 @@ export {
64
64
  z as C,
65
65
  Z as W
66
66
  };
67
- //# sourceMappingURL=WarningCircleIcon-CRvgz4mx.js.map
67
+ //# sourceMappingURL=WarningCircleIcon-eOM57ZiU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WarningCircleIcon-CRvgz4mx.js","sources":["../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/ChevronDownOutline.svelte","../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/phosphor/AddIcon.svelte","../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/phosphor/WarningCircleIcon.svelte"],"sourcesContent":["<script lang=\"ts\">\n interface Props {\n size?: string;\n color?: string;\n class?: string;\n }\n let { size = \"24\", color = \"currentColor\", class: className = \"\" }: Props = $props();\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n</svg>\n","<script lang=\"ts\">\n /**\n * Add — Phosphor icon (canonical Micdrop icon family).\n * Outline by default; pass `weight=\"fill\"` for solid, or let a stateful parent\n * (NavItem / Tabs / BottomNav / status badge) drive it via icon-weight context.\n */\n import { useIconWeight, type IconWeight } from './iconWeight.js';\n\n interface Props {\n /** Pixel size (width + height). */\n size?: string;\n /** Icon color; defaults to `currentColor` (inherits text color). */\n color?: string;\n /** Extra classes. */\n class?: string;\n /** `regular` (outline) or `fill` (solid). Overrides ambient state weight. */\n weight?: IconWeight;\n }\n\n let { size = '24', color = 'currentColor', class: className = '', weight }: Props = $props();\n\n const ctx = useIconWeight();\n let resolved: IconWeight = $derived(weight ?? ctx?.weight ?? 'regular');\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style:color={color === 'currentColor' ? undefined : color}\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n {#if resolved === 'fill'}<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM184,136H136v48a8,8,0,0,1-16,0V136H72a8,8,0,0,1,0-16h48V72a8,8,0,0,1,16,0v48h48a8,8,0,0,1,0,16Z\"/>{:else}<line x1=\"40\" y1=\"128\" x2=\"216\" y2=\"128\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"128\" y1=\"40\" x2=\"128\" y2=\"216\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/>{/if}\n</svg>\n","<script lang=\"ts\">\n /**\n * WarningCircle — Phosphor icon (canonical Micdrop icon family).\n * Outline by default; pass `weight=\"fill\"` for solid, or let a stateful parent\n * (NavItem / Tabs / BottomNav / status badge) drive it via icon-weight context.\n */\n import { useIconWeight, type IconWeight } from './iconWeight.js';\n\n interface Props {\n /** Pixel size (width + height). */\n size?: string;\n /** Icon color; defaults to `currentColor` (inherits text color). */\n color?: string;\n /** Extra classes. */\n class?: string;\n /** `regular` (outline) or `fill` (solid). Overrides ambient state weight. */\n weight?: IconWeight;\n }\n\n let { size = '24', color = 'currentColor', class: className = '', weight }: Props = $props();\n\n const ctx = useIconWeight();\n let resolved: IconWeight = $derived(weight ?? ctx?.weight ?? 'regular');\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style:color={color === 'currentColor' ? undefined : color}\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n {#if resolved === 'fill'}<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,56a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z\"/>{:else}<circle cx=\"128\" cy=\"128\" r=\"96\" fill=\"none\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-width=\"16\"/><line x1=\"128\" y1=\"136\" x2=\"128\" y2=\"80\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><circle cx=\"128\" cy=\"172\" r=\"12\"/>{/if}\n</svg>\n"],"names":["size","$","$$props","color","className","svg","root","ctx","useIconWeight","resolved","root_2","path","$$render","consequent","alternate","styles"],"mappings":";;;;iBAAA;AAME,MAAMA,IAAIC,EAAA,KAAAC,GAAA,QAAA,GAAG,IAAI,GAAEC,0BAAQ,cAAc,GAASC,0BAAY,EAAE;MAGjEC,IAAEC,EAAA;;AAAF,IAAAL,EAAA,UAAAI,aACQD,EAAS,CAAA,CAAA,GADjBH,EAAA,cAAAI,YAGQL,EAAI,CAAA,GAHZC,EAAA,cAAAI,aAISL,EAAI,CAAA,GAJbC,EAAA,cAAAI,aAMSF,EAAK,CAAA;AAAA,kBANdE,CAAE;AAFK;;iBCPR;;AAmBE,MAAML,IAAIC,EAAA,KAAAC,GAAA,QAAA,GAAG,IAAI,GAAEC,0BAAQ,cAAc,GAASC,0BAAY,EAAE;AAEhE,QAAMG,IAAMC,EAAa;AACzB,MAAIC,IAAoBR,EAAA,QAAA,MAAAC,EAAA,UAAsBK,GAAK,UAAU,SAAS;MAGvEF,IAAEK,EAAA;;kBAAFL,CAAE;;;UAUyBM,IAAIL,EAAA;kBAAJK,CAAI;AAAA;;;;;AAAzB,MAAAV,EAAA,IAAAQ,CAAQ,MAAK,SAAMG,EAAAC,CAAA,IAAAD,EAAAE,GAAA,EAAA;AAAA;;UAVzBT,CAAE;AAAF,IAAAJ,EAAA,UAAAI,aACQD,EAAS,CAAA,CAAA,GADjBH,EAAA,cAAAI,YAGQL,EAAI,CAAA,GAHZC,EAAA,cAAAI,aAISL,EAAI,CAAA,GAJbe,IAAAd,EAAA,UAAAI,mBAOcF,EAAK,MAAK,iBAAiB,SAAYA,EAAK,EAAA,CAAA;AAAA,kBAP1DE,CAAE;AAFK;;iBCvBR;;AAmBE,MAAML,IAAIC,EAAA,KAAAC,GAAA,QAAA,GAAG,IAAI,GAAEC,0BAAQ,cAAc,GAASC,0BAAY,EAAE;AAEhE,QAAMG,IAAMC,EAAa;AACzB,MAAIC,IAAoBR,EAAA,QAAA,MAAAC,EAAA,UAAsBK,GAAK,UAAU,SAAS;MAGvEF,IAAEK,EAAA;;kBAAFL,CAAE;;;UAUyBM,IAAIL,EAAA;kBAAJK,CAAI;AAAA;;;;;AAAzB,MAAAV,EAAA,IAAAQ,CAAQ,MAAK,SAAMG,EAAAC,CAAA,IAAAD,EAAAE,GAAA,EAAA;AAAA;;UAVzBT,CAAE;AAAF,IAAAJ,EAAA,UAAAI,aACQD,EAAS,CAAA,CAAA,GADjBH,EAAA,cAAAI,YAGQL,EAAI,CAAA,GAHZC,EAAA,cAAAI,aAISL,EAAI,CAAA,GAJbe,IAAAd,EAAA,UAAAI,mBAOcF,EAAK,MAAK,iBAAiB,SAAYA,EAAK,EAAA,CAAA;AAAA,kBAP1DE,CAAE;AAFK;","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"WarningCircleIcon-eOM57ZiU.js","sources":["../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/ChevronDownOutline.svelte","../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/phosphor/AddIcon.svelte","../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/phosphor/WarningCircleIcon.svelte"],"sourcesContent":["<script lang=\"ts\">\n interface Props {\n size?: string;\n color?: string;\n class?: string;\n }\n let { size = \"24\", color = \"currentColor\", class: className = \"\" }: Props = $props();\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n</svg>\n","<script lang=\"ts\">\n /**\n * Add — Phosphor icon (canonical Micdrop icon family).\n * Outline by default; pass `weight=\"fill\"` for solid, or let a stateful parent\n * (NavItem / Tabs / BottomNav / status badge) drive it via icon-weight context.\n */\n import { useIconWeight, type IconWeight } from './iconWeight.js';\n\n interface Props {\n /** Pixel size (width + height). */\n size?: string;\n /** Icon color; defaults to `currentColor` (inherits text color). */\n color?: string;\n /** Extra classes. */\n class?: string;\n /** `regular` (outline) or `fill` (solid). Overrides ambient state weight. */\n weight?: IconWeight;\n }\n\n let { size = '24', color = 'currentColor', class: className = '', weight }: Props = $props();\n\n const ctx = useIconWeight();\n let resolved: IconWeight = $derived(weight ?? ctx?.weight ?? 'regular');\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style:color={color === 'currentColor' ? undefined : color}\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n {#if resolved === 'fill'}<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM184,136H136v48a8,8,0,0,1-16,0V136H72a8,8,0,0,1,0-16h48V72a8,8,0,0,1,16,0v48h48a8,8,0,0,1,0,16Z\"/>{:else}<line x1=\"40\" y1=\"128\" x2=\"216\" y2=\"128\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"128\" y1=\"40\" x2=\"128\" y2=\"216\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/>{/if}\n</svg>\n","<script lang=\"ts\">\n /**\n * WarningCircle — Phosphor icon (canonical Micdrop icon family).\n * Outline by default; pass `weight=\"fill\"` for solid, or let a stateful parent\n * (NavItem / Tabs / BottomNav / status badge) drive it via icon-weight context.\n */\n import { useIconWeight, type IconWeight } from './iconWeight.js';\n\n interface Props {\n /** Pixel size (width + height). */\n size?: string;\n /** Icon color; defaults to `currentColor` (inherits text color). */\n color?: string;\n /** Extra classes. */\n class?: string;\n /** `regular` (outline) or `fill` (solid). Overrides ambient state weight. */\n weight?: IconWeight;\n }\n\n let { size = '24', color = 'currentColor', class: className = '', weight }: Props = $props();\n\n const ctx = useIconWeight();\n let resolved: IconWeight = $derived(weight ?? ctx?.weight ?? 'regular');\n</script>\n\n<svg\n class={className}\n aria-hidden=\"true\"\n width={size}\n height={size}\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style:color={color === 'currentColor' ? undefined : color}\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n {#if resolved === 'fill'}<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,56a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z\"/>{:else}<circle cx=\"128\" cy=\"128\" r=\"96\" fill=\"none\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-width=\"16\"/><line x1=\"128\" y1=\"136\" x2=\"128\" y2=\"80\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><circle cx=\"128\" cy=\"172\" r=\"12\"/>{/if}\n</svg>\n"],"names":["size","$","$$props","color","className","svg","root","ctx","useIconWeight","resolved","root_2","path","$$render","consequent","alternate","styles"],"mappings":";;;;iBAAA;AAME,MAAMA,IAAIC,EAAA,KAAAC,GAAA,QAAA,GAAG,IAAI,GAAEC,0BAAQ,cAAc,GAASC,0BAAY,EAAE;MAGjEC,IAAEC,EAAA;;AAAF,IAAAL,EAAA,UAAAI,aACQD,EAAS,CAAA,CAAA,GADjBH,EAAA,cAAAI,YAGQL,EAAI,CAAA,GAHZC,EAAA,cAAAI,aAISL,EAAI,CAAA,GAJbC,EAAA,cAAAI,aAMSF,EAAK,CAAA;AAAA,kBANdE,CAAE;AAFK;;iBCPR;;AAmBE,MAAML,IAAIC,EAAA,KAAAC,GAAA,QAAA,GAAG,IAAI,GAAEC,0BAAQ,cAAc,GAASC,0BAAY,EAAE;AAEhE,QAAMG,IAAMC,EAAa;AACzB,MAAIC,IAAoBR,EAAA,QAAA,MAAAC,EAAA,UAAsBK,GAAK,UAAU,SAAS;MAGvEF,IAAEK,EAAA;;kBAAFL,CAAE;;;UAUyBM,IAAIL,EAAA;kBAAJK,CAAI;AAAA;;;;;AAAzB,MAAAV,EAAA,IAAAQ,CAAQ,MAAK,SAAMG,EAAAC,CAAA,IAAAD,EAAAE,GAAA,EAAA;AAAA;;UAVzBT,CAAE;AAAF,IAAAJ,EAAA,UAAAI,aACQD,EAAS,CAAA,CAAA,GADjBH,EAAA,cAAAI,YAGQL,EAAI,CAAA,GAHZC,EAAA,cAAAI,aAISL,EAAI,CAAA,GAJbe,IAAAd,EAAA,UAAAI,mBAOcF,EAAK,MAAK,iBAAiB,SAAYA,EAAK,EAAA,CAAA;AAAA,kBAP1DE,CAAE;AAFK;;iBCvBR;;AAmBE,MAAML,IAAIC,EAAA,KAAAC,GAAA,QAAA,GAAG,IAAI,GAAEC,0BAAQ,cAAc,GAASC,0BAAY,EAAE;AAEhE,QAAMG,IAAMC,EAAa;AACzB,MAAIC,IAAoBR,EAAA,QAAA,MAAAC,EAAA,UAAsBK,GAAK,UAAU,SAAS;MAGvEF,IAAEK,EAAA;;kBAAFL,CAAE;;;UAUyBM,IAAIL,EAAA;kBAAJK,CAAI;AAAA;;;;;AAAzB,MAAAV,EAAA,IAAAQ,CAAQ,MAAK,SAAMG,EAAAC,CAAA,IAAAD,EAAAE,GAAA,EAAA;AAAA;;UAVzBT,CAAE;AAAF,IAAAJ,EAAA,UAAAI,aACQD,EAAS,CAAA,CAAA,GADjBH,EAAA,cAAAI,YAGQL,EAAI,CAAA,GAHZC,EAAA,cAAAI,aAISL,EAAI,CAAA,GAJbe,IAAAd,EAAA,UAAAI,mBAOcF,EAAK,MAAK,iBAAiB,SAAYA,EAAK,EAAA,CAAA;AAAA,kBAP1DE,CAAE;AAFK;","x_google_ignoreList":[0,1,2]}
@@ -1,7 +1,7 @@
1
1
  import "svelte/internal/disclose-version";
2
2
  import * as A from "svelte/internal/client";
3
- import { Z as H, H as W } from "./VenueCalendar-DcX-R9GN.js";
4
- import { I as m } from "./Image-BrI6RXFh.js";
3
+ import { Z as H, H as W } from "./VenueCalendar-Ys8-209-.js";
4
+ import { I as m } from "./Image-BktsxRho.js";
5
5
  var w = A.from_svg('<path d="M230.93,220a8,8,0,0,1-6.93,4H32a8,8,0,0,1-6.92-12c15.23-26.33,38.7-45.21,66.09-54.16a72,72,0,1,1,73.66,0c27.39,8.95,50.86,27.83,66.09,54.16A8,8,0,0,1,230.93,220Z"></path>'), R = A.from_svg('<circle cx="128" cy="96" r="64" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></circle><path d="M32,216c19.37-33.47,54.55-56,96-56s76.63,22.53,96,56" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></path>', 1), y = A.from_svg('<svg aria-hidden="true" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><!></svg>');
6
6
  function n(t, a) {
7
7
  A.push(a, !0);
@@ -114,4 +114,4 @@ export {
114
114
  n as U,
115
115
  E as a
116
116
  };
117
- //# sourceMappingURL=allowlist-BB9UJJQv.js.map
117
+ //# sourceMappingURL=allowlist-BVbx-J6B.js.map