@getmicdrop/venue-calendar 4.0.11 → 4.0.12

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 (82) hide show
  1. package/README.md +700 -700
  2. package/dist/{AirbnbSplitMain-BwFA51F6.js → AirbnbSplitMain-Bc7BNgQO.js} +4 -4
  3. package/dist/AirbnbSplitMain-Bc7BNgQO.js.map +1 -0
  4. package/dist/{CarouselView.legacy-BHeZe5LX.js → CarouselView.legacy-DxSutEgv.js} +3 -3
  5. package/dist/CarouselView.legacy-DxSutEgv.js.map +1 -0
  6. package/dist/{CartView-BUzE0wp2.js → CartView-Bwt3-afZ.js} +3 -3
  7. package/dist/CartView-Bwt3-afZ.js.map +1 -0
  8. package/dist/{Checkout-pzohnvrX.js → Checkout-B0kN0rtV.js} +4 -4
  9. package/dist/Checkout-B0kN0rtV.js.map +1 -0
  10. package/dist/{Checkout.legacy-ZKJN-dMX.js → Checkout.legacy-C2d681A8.js} +4 -4
  11. package/dist/Checkout.legacy-C2d681A8.js.map +1 -0
  12. package/dist/{CheckoutMain-5LdQDph1.js → CheckoutMain-DZM38nxH.js} +4 -4
  13. package/dist/CheckoutMain-DZM38nxH.js.map +1 -0
  14. package/dist/{CheckoutTimer-D6LfPX7c.js → CheckoutTimer-A_VjweSD.js} +2 -2
  15. package/dist/CheckoutTimer-A_VjweSD.js.map +1 -0
  16. package/dist/{CollectionView-BwQTF9Df.js → CollectionView-Bdea7CFP.js} +5 -5
  17. package/dist/CollectionView-Bdea7CFP.js.map +1 -0
  18. package/dist/{CollectionView.legacy-Cz6XX6Ly.js → CollectionView.legacy-DwmC3CJE.js} +3 -3
  19. package/dist/CollectionView.legacy-DwmC3CJE.js.map +1 -0
  20. package/dist/{EventDetailsView-Cp5IRJam.js → EventDetailsView-BZGCaONg.js} +2 -2
  21. package/dist/EventDetailsView-BZGCaONg.js.map +1 -0
  22. package/dist/{FeaturedView.legacy-DKOl806x.js → FeaturedView.legacy-B50Iobw-.js} +2 -2
  23. package/dist/FeaturedView.legacy-B50Iobw-.js.map +1 -0
  24. package/dist/{GalleryCard-MO80JCq7.js → GalleryCard-DWxe4V-1.js} +2 -2
  25. package/dist/GalleryCard-DWxe4V-1.js.map +1 -0
  26. package/dist/{GalleryView.legacy-pSihGXaa.js → GalleryView.legacy-029BCNHf.js} +3 -3
  27. package/dist/GalleryView.legacy-029BCNHf.js.map +1 -0
  28. package/dist/{GroupedListView.legacy-CC1kcrgF.js → GroupedListView.legacy-C2VTzS45.js} +2 -2
  29. package/dist/GroupedListView.legacy-C2VTzS45.js.map +1 -0
  30. package/dist/OrderSummarySkeleton-dDKUH741.js.map +1 -1
  31. package/dist/{SeriesPage-rUuL4Pdb.js → SeriesPage-_nG9iN27.js} +5 -5
  32. package/dist/SeriesPage-_nG9iN27.js.map +1 -0
  33. package/dist/{SeriesPage.legacy-BxPGQaCo.js → SeriesPage.legacy-DcOpUPf0.js} +2 -2
  34. package/dist/SeriesPage.legacy-DcOpUPf0.js.map +1 -0
  35. package/dist/{Success-BAHe8E_8.js → Success-BLZ9LhSr.js} +297 -277
  36. package/dist/Success-BLZ9LhSr.js.map +1 -0
  37. package/dist/{Success.legacy-COO3pzj4.js → Success.legacy-2YrL3tSx.js} +2 -2
  38. package/dist/Success.legacy-2YrL3tSx.js.map +1 -0
  39. package/dist/{VenueCalendar-Djc3e2j2.js → VenueCalendar-BU6tx6cI.js} +14 -14
  40. package/dist/{VenueCalendar-Djc3e2j2.js.map → VenueCalendar-BU6tx6cI.js.map} +1 -1
  41. package/dist/{ViewTicketsEmbed-CBk3cg3u.js → ViewTicketsEmbed-Ux9JO5rr.js} +2 -2
  42. package/dist/ViewTicketsEmbed-Ux9JO5rr.js.map +1 -0
  43. package/dist/api/api.cjs.map +1 -1
  44. package/dist/api/api.mjs.map +1 -1
  45. package/dist/api/types.d.ts +357 -357
  46. package/dist/colors-BZoMuXdh.js.map +1 -1
  47. package/dist/{labels-DySnOPVE.js → labels-B3SwmEcB.js} +2 -2
  48. package/dist/labels-B3SwmEcB.js.map +1 -0
  49. package/dist/seo/seo.cjs.map +1 -1
  50. package/dist/seo/seo.mjs.map +1 -1
  51. package/dist/seo/types.d.ts +137 -137
  52. package/dist/{transform-DKVmquzJ.js → transform-D99tnqVe.js} +2 -2
  53. package/dist/transform-D99tnqVe.js.map +1 -0
  54. package/dist/types/index.d.ts +387 -387
  55. package/dist/venue-calendar.es.js +1 -1
  56. package/dist/venue-calendar.iife.js +25 -25
  57. package/dist/venue-calendar.iife.js.map +1 -1
  58. package/dist/venue-calendar.umd.js +25 -25
  59. package/dist/venue-calendar.umd.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/lib/theme.js +222 -222
  62. package/dist/AirbnbSplitMain-BwFA51F6.js.map +0 -1
  63. package/dist/CarouselView.legacy-BHeZe5LX.js.map +0 -1
  64. package/dist/CartView-BUzE0wp2.js.map +0 -1
  65. package/dist/Checkout-pzohnvrX.js.map +0 -1
  66. package/dist/Checkout.legacy-ZKJN-dMX.js.map +0 -1
  67. package/dist/CheckoutMain-5LdQDph1.js.map +0 -1
  68. package/dist/CheckoutTimer-D6LfPX7c.js.map +0 -1
  69. package/dist/CollectionView-BwQTF9Df.js.map +0 -1
  70. package/dist/CollectionView.legacy-Cz6XX6Ly.js.map +0 -1
  71. package/dist/EventDetailsView-Cp5IRJam.js.map +0 -1
  72. package/dist/FeaturedView.legacy-DKOl806x.js.map +0 -1
  73. package/dist/GalleryCard-MO80JCq7.js.map +0 -1
  74. package/dist/GalleryView.legacy-pSihGXaa.js.map +0 -1
  75. package/dist/GroupedListView.legacy-CC1kcrgF.js.map +0 -1
  76. package/dist/SeriesPage-rUuL4Pdb.js.map +0 -1
  77. package/dist/SeriesPage.legacy-BxPGQaCo.js.map +0 -1
  78. package/dist/Success-BAHe8E_8.js.map +0 -1
  79. package/dist/Success.legacy-COO3pzj4.js.map +0 -1
  80. package/dist/ViewTicketsEmbed-CBk3cg3u.js.map +0 -1
  81. package/dist/labels-DySnOPVE.js.map +0 -1
  82. package/dist/transform-DKVmquzJ.js.map +0 -1
@@ -1,357 +1,357 @@
1
- /**
2
- * API Types for MicDrop Public Checkout API
3
- *
4
- * These types define the shape of API requests and responses
5
- * for the public checkout flow (no authentication required).
6
- */
7
-
8
- // ============================================================================
9
- // Payment & Orders
10
- // ============================================================================
11
-
12
- export interface PaymentIntentRequest {
13
- IP?: string;
14
- productQuantities: Record<string | number, number>;
15
- }
16
-
17
- export interface PaymentIntentResponse {
18
- client_secret: string;
19
- amount: number;
20
- amount_total: number;
21
- tax_amount_exclusive?: number;
22
- service_fee?: number;
23
- discount?: number;
24
- gift_card_amount?: number;
25
- gift_card_code?: string;
26
- stripe_publishable_key?: string;
27
- }
28
-
29
- export interface CompleteReservationResponse {
30
- success: boolean;
31
- message?: string;
32
- error?: string;
33
- }
34
-
35
- export interface CancelReservationResponse {
36
- success: boolean;
37
- message?: string;
38
- error?: string;
39
- }
40
-
41
- export interface CreateOrderRequest {
42
- eventId: string | number;
43
- promoCode?: string;
44
- }
45
-
46
- export interface CreateOrderResponse {
47
- uuid: string;
48
- }
49
-
50
- export interface ValidatePaymentRequest {
51
- id: string;
52
- paymentIntentId: string;
53
- tickets: Record<string | number, number>;
54
- firstName: string;
55
- lastName: string;
56
- email: string;
57
- paymentMethod: string;
58
- mailingList?: boolean;
59
- saleType?: string;
60
- attendees?: AttendeeInfo[];
61
- }
62
-
63
- export interface AttendeeInfo {
64
- ticketId: string | number;
65
- firstName: string;
66
- lastName: string;
67
- email: string;
68
- }
69
-
70
- export interface ValidatePaymentResponse {
71
- success: boolean;
72
- status: string;
73
- orderUUID?: string;
74
- error?: string;
75
- }
76
-
77
- // ============================================================================
78
- // Session Management
79
- // ============================================================================
80
-
81
- export interface ExtendSessionRequest {
82
- orderUuid: string;
83
- }
84
-
85
- export interface ExtendSessionResponse {
86
- success: boolean;
87
- newExpiryTime?: string;
88
- remainingExtensions?: number;
89
- error?: string;
90
- }
91
-
92
- export interface SessionStatus {
93
- expiresAt?: string;
94
- extensionCount?: number;
95
- remainingExtensions?: number;
96
- canExtend?: boolean;
97
- reservationCount?: number;
98
- error?: string;
99
- // 404 from /orders/session/{uuid}: the cart's reservations are
100
- // gone (expired or never existed). Callers polling on an interval
101
- // MUST treat this as terminal and stop — see CartView.svelte.
102
- notFound?: boolean;
103
- }
104
-
105
- // ============================================================================
106
- // Promo Codes
107
- // ============================================================================
108
-
109
- export interface PromoValidationResponse {
110
- valid: boolean;
111
- revealHiddenTickets?: boolean;
112
- revealTicketIds?: number[];
113
- provideDiscount?: boolean;
114
- discountType?: 'percentage' | 'fixed';
115
- amount?: number;
116
- code?: string;
117
- error?: string;
118
- }
119
-
120
- export interface HasPromoCodesResponse {
121
- hasPromoCodes: boolean;
122
- }
123
-
124
- // ============================================================================
125
- // Orders
126
- // ============================================================================
127
-
128
- export interface Order {
129
- uuid: string;
130
- id?: number;
131
- customerEmail: string;
132
- customerFirstName?: string;
133
- customerLastName?: string;
134
- status: string;
135
- totalAmount: number;
136
- subtotal?: number;
137
- serviceFeesAmount: number;
138
- taxAmount: number;
139
- discount?: number;
140
- paymentIntentId?: string;
141
- paymentMethod?: string;
142
- purchasedTickets: PurchasedTicket[];
143
- createdAt?: string;
144
- updatedAt?: string;
145
- }
146
-
147
- export interface PurchasedTicket {
148
- uuid: string;
149
- id?: number;
150
- ticketNumber?: string;
151
- orderId?: string | number;
152
- attendeeFirstName?: string;
153
- attendeeLastName?: string;
154
- attendeeEmail?: string;
155
- ticketName: string;
156
- ticketTypeId?: number;
157
- purchasePrice: number;
158
- status?: string;
159
- checkedIn?: boolean;
160
- checkedInAt?: string;
161
- }
162
-
163
- // ============================================================================
164
- // Events
165
- // ============================================================================
166
-
167
- export interface Event {
168
- eventID: number;
169
- id?: number;
170
- name: string;
171
- title?: string;
172
- slug?: string;
173
- description?: string;
174
- date: string;
175
- startDateTime?: string;
176
- endDateTime?: string;
177
- doorsOpenTime?: string;
178
- timezone?: string;
179
- venueId?: number;
180
- venueName?: string;
181
- venueAddress?: string;
182
- location?: string;
183
- imageUrl?: string;
184
- imageURL?: string;
185
- status?: string;
186
- isPublished?: boolean;
187
- isCancelled?: boolean;
188
- availableTickets?: AvailableTicket[];
189
- ticketsAvailable?: number;
190
- ticketsSold?: number;
191
- minPrice?: number;
192
- maxPrice?: number;
193
- ctaText?: string;
194
- ctaState?: 'available' | 'sold_out' | 'coming_soon' | 'ended';
195
- showPerformers?: boolean;
196
- eventSeriesId?: number;
197
- seriesInstanceNumber?: number;
198
- }
199
-
200
- export interface AvailableTicket {
201
- id: number;
202
- name: string;
203
- description?: string;
204
- price: number;
205
- quantity: number;
206
- quantitySold?: number;
207
- quantityAvailable?: number;
208
- minPerOrder?: number;
209
- maxPerOrder?: number;
210
- saleStartDate?: string;
211
- saleEndDate?: string;
212
- isHidden?: boolean;
213
- revealWithPromoCode?: boolean;
214
- ticketType?: number; // 0 = GA, 1 = assigned
215
- sectionId?: number;
216
- sortOrder?: number;
217
- }
218
-
219
- export interface EventPerformersResponse {
220
- performers: Performer[];
221
- showPerformers: boolean;
222
- }
223
-
224
- export interface Performer {
225
- id: number;
226
- displayName: string;
227
- avatar?: string;
228
- order?: number;
229
- }
230
-
231
- // ============================================================================
232
- // Venues
233
- // ============================================================================
234
-
235
- export interface Venue {
236
- id: number;
237
- name: string;
238
- slug?: string;
239
- address?: string;
240
- googleLocationNameCache?: string;
241
- city?: string;
242
- state?: string;
243
- zipCode?: string;
244
- country?: string;
245
- timezone?: string;
246
- logoUrl?: string;
247
- serviceFeePercentage?: number;
248
- serviceFeeCents?: number;
249
- taxPercentage?: number;
250
- organizationId?: number;
251
- }
252
-
253
- // ============================================================================
254
- // Series
255
- // ============================================================================
256
-
257
- export interface SeriesOccurrence {
258
- eventId: number;
259
- date: string;
260
- startDateTime: string;
261
- endDateTime?: string;
262
- instanceNumber: number;
263
- status: string;
264
- ticketsAvailable?: number;
265
- ctaState?: string;
266
- }
267
-
268
- export interface SeriesOccurrencesResponse {
269
- seriesId: number;
270
- occurrences: SeriesOccurrence[];
271
- }
272
-
273
- // ============================================================================
274
- // Series Page
275
- // ============================================================================
276
-
277
- export interface SeriesPageData {
278
- id: number;
279
- title: string;
280
- description: string;
281
- eventSummary?: string;
282
- image?: string;
283
- timeZone: string;
284
- venue: {
285
- id: number;
286
- name: string;
287
- location?: string;
288
- googleLocationNameCache?: string;
289
- faq?: Array<{ question: string; answer: string }> | string;
290
- disclaimer?: string;
291
- };
292
- performers: Array<{
293
- displayName: string;
294
- firstName?: string;
295
- lastName?: string;
296
- profileImage?: string;
297
- }>;
298
- occurrences: Array<{
299
- id: number;
300
- slug: string;
301
- startDateTime: string;
302
- endDateTime: string;
303
- ctaState: {
304
- text: string;
305
- disabled: boolean;
306
- reason?: string;
307
- };
308
- }>;
309
- }
310
-
311
- // ============================================================================
312
- // Public Collection
313
- // ============================================================================
314
-
315
- export interface PublicCollectionData {
316
- id: number;
317
- collectionTitle: string;
318
- summary?: string;
319
- description?: string;
320
- coverImage?: string;
321
- events: Array<{
322
- id: number;
323
- title: string;
324
- slug?: string;
325
- startDateTime?: string;
326
- endDateTime?: string;
327
- image?: string;
328
- status?: string;
329
- venue?: { name: string };
330
- minPrice?: number;
331
- }>;
332
- }
333
-
334
- // ============================================================================
335
- // API Configuration
336
- // ============================================================================
337
-
338
- export interface ApiConfig {
339
- baseUrl?: string;
340
- timeout?: number;
341
- /** Number of additional attempts after the first try (default: 2 = 3 total tries). */
342
- retries?: number;
343
- /** Base delay before the first retry; doubles each attempt (default: 500ms). */
344
- retryDelay?: number;
345
- onError?: (error: Error) => void;
346
- }
347
-
348
- // ============================================================================
349
- // Generic API Response
350
- // ============================================================================
351
-
352
- export interface ApiResponse<T> {
353
- success: boolean;
354
- data?: T;
355
- error?: string;
356
- statusCode?: number;
357
- }
1
+ /**
2
+ * API Types for MicDrop Public Checkout API
3
+ *
4
+ * These types define the shape of API requests and responses
5
+ * for the public checkout flow (no authentication required).
6
+ */
7
+
8
+ // ============================================================================
9
+ // Payment & Orders
10
+ // ============================================================================
11
+
12
+ export interface PaymentIntentRequest {
13
+ IP?: string;
14
+ productQuantities: Record<string | number, number>;
15
+ }
16
+
17
+ export interface PaymentIntentResponse {
18
+ client_secret: string;
19
+ amount: number;
20
+ amount_total: number;
21
+ tax_amount_exclusive?: number;
22
+ service_fee?: number;
23
+ discount?: number;
24
+ gift_card_amount?: number;
25
+ gift_card_code?: string;
26
+ stripe_publishable_key?: string;
27
+ }
28
+
29
+ export interface CompleteReservationResponse {
30
+ success: boolean;
31
+ message?: string;
32
+ error?: string;
33
+ }
34
+
35
+ export interface CancelReservationResponse {
36
+ success: boolean;
37
+ message?: string;
38
+ error?: string;
39
+ }
40
+
41
+ export interface CreateOrderRequest {
42
+ eventId: string | number;
43
+ promoCode?: string;
44
+ }
45
+
46
+ export interface CreateOrderResponse {
47
+ uuid: string;
48
+ }
49
+
50
+ export interface ValidatePaymentRequest {
51
+ id: string;
52
+ paymentIntentId: string;
53
+ tickets: Record<string | number, number>;
54
+ firstName: string;
55
+ lastName: string;
56
+ email: string;
57
+ paymentMethod: string;
58
+ mailingList?: boolean;
59
+ saleType?: string;
60
+ attendees?: AttendeeInfo[];
61
+ }
62
+
63
+ export interface AttendeeInfo {
64
+ ticketId: string | number;
65
+ firstName: string;
66
+ lastName: string;
67
+ email: string;
68
+ }
69
+
70
+ export interface ValidatePaymentResponse {
71
+ success: boolean;
72
+ status: string;
73
+ orderUUID?: string;
74
+ error?: string;
75
+ }
76
+
77
+ // ============================================================================
78
+ // Session Management
79
+ // ============================================================================
80
+
81
+ export interface ExtendSessionRequest {
82
+ orderUuid: string;
83
+ }
84
+
85
+ export interface ExtendSessionResponse {
86
+ success: boolean;
87
+ newExpiryTime?: string;
88
+ remainingExtensions?: number;
89
+ error?: string;
90
+ }
91
+
92
+ export interface SessionStatus {
93
+ expiresAt?: string;
94
+ extensionCount?: number;
95
+ remainingExtensions?: number;
96
+ canExtend?: boolean;
97
+ reservationCount?: number;
98
+ error?: string;
99
+ // 404 from /orders/session/{uuid}: the cart's reservations are
100
+ // gone (expired or never existed). Callers polling on an interval
101
+ // MUST treat this as terminal and stop — see CartView.svelte.
102
+ notFound?: boolean;
103
+ }
104
+
105
+ // ============================================================================
106
+ // Promo Codes
107
+ // ============================================================================
108
+
109
+ export interface PromoValidationResponse {
110
+ valid: boolean;
111
+ revealHiddenTickets?: boolean;
112
+ revealTicketIds?: number[];
113
+ provideDiscount?: boolean;
114
+ discountType?: 'percentage' | 'fixed';
115
+ amount?: number;
116
+ code?: string;
117
+ error?: string;
118
+ }
119
+
120
+ export interface HasPromoCodesResponse {
121
+ hasPromoCodes: boolean;
122
+ }
123
+
124
+ // ============================================================================
125
+ // Orders
126
+ // ============================================================================
127
+
128
+ export interface Order {
129
+ uuid: string;
130
+ id?: number;
131
+ customerEmail: string;
132
+ customerFirstName?: string;
133
+ customerLastName?: string;
134
+ status: string;
135
+ totalAmount: number;
136
+ subtotal?: number;
137
+ serviceFeesAmount: number;
138
+ taxAmount: number;
139
+ discount?: number;
140
+ paymentIntentId?: string;
141
+ paymentMethod?: string;
142
+ purchasedTickets: PurchasedTicket[];
143
+ createdAt?: string;
144
+ updatedAt?: string;
145
+ }
146
+
147
+ export interface PurchasedTicket {
148
+ uuid: string;
149
+ id?: number;
150
+ ticketNumber?: string;
151
+ orderId?: string | number;
152
+ attendeeFirstName?: string;
153
+ attendeeLastName?: string;
154
+ attendeeEmail?: string;
155
+ ticketName: string;
156
+ ticketTypeId?: number;
157
+ purchasePrice: number;
158
+ status?: string;
159
+ checkedIn?: boolean;
160
+ checkedInAt?: string;
161
+ }
162
+
163
+ // ============================================================================
164
+ // Events
165
+ // ============================================================================
166
+
167
+ export interface Event {
168
+ eventID: number;
169
+ id?: number;
170
+ name: string;
171
+ title?: string;
172
+ slug?: string;
173
+ description?: string;
174
+ date: string;
175
+ startDateTime?: string;
176
+ endDateTime?: string;
177
+ doorsOpenTime?: string;
178
+ timezone?: string;
179
+ venueId?: number;
180
+ venueName?: string;
181
+ venueAddress?: string;
182
+ location?: string;
183
+ imageUrl?: string;
184
+ imageURL?: string;
185
+ status?: string;
186
+ isPublished?: boolean;
187
+ isCancelled?: boolean;
188
+ availableTickets?: AvailableTicket[];
189
+ ticketsAvailable?: number;
190
+ ticketsSold?: number;
191
+ minPrice?: number;
192
+ maxPrice?: number;
193
+ ctaText?: string;
194
+ ctaState?: 'available' | 'sold_out' | 'coming_soon' | 'ended';
195
+ showPerformers?: boolean;
196
+ eventSeriesId?: number;
197
+ seriesInstanceNumber?: number;
198
+ }
199
+
200
+ export interface AvailableTicket {
201
+ id: number;
202
+ name: string;
203
+ description?: string;
204
+ price: number;
205
+ quantity: number;
206
+ quantitySold?: number;
207
+ quantityAvailable?: number;
208
+ minPerOrder?: number;
209
+ maxPerOrder?: number;
210
+ saleStartDate?: string;
211
+ saleEndDate?: string;
212
+ isHidden?: boolean;
213
+ revealWithPromoCode?: boolean;
214
+ ticketType?: number; // 0 = GA, 1 = assigned
215
+ sectionId?: number;
216
+ sortOrder?: number;
217
+ }
218
+
219
+ export interface EventPerformersResponse {
220
+ performers: Performer[];
221
+ showPerformers: boolean;
222
+ }
223
+
224
+ export interface Performer {
225
+ id: number;
226
+ displayName: string;
227
+ avatar?: string;
228
+ order?: number;
229
+ }
230
+
231
+ // ============================================================================
232
+ // Venues
233
+ // ============================================================================
234
+
235
+ export interface Venue {
236
+ id: number;
237
+ name: string;
238
+ slug?: string;
239
+ address?: string;
240
+ googleLocationNameCache?: string;
241
+ city?: string;
242
+ state?: string;
243
+ zipCode?: string;
244
+ country?: string;
245
+ timezone?: string;
246
+ logoUrl?: string;
247
+ serviceFeePercentage?: number;
248
+ serviceFeeCents?: number;
249
+ taxPercentage?: number;
250
+ organizationId?: number;
251
+ }
252
+
253
+ // ============================================================================
254
+ // Series
255
+ // ============================================================================
256
+
257
+ export interface SeriesOccurrence {
258
+ eventId: number;
259
+ date: string;
260
+ startDateTime: string;
261
+ endDateTime?: string;
262
+ instanceNumber: number;
263
+ status: string;
264
+ ticketsAvailable?: number;
265
+ ctaState?: string;
266
+ }
267
+
268
+ export interface SeriesOccurrencesResponse {
269
+ seriesId: number;
270
+ occurrences: SeriesOccurrence[];
271
+ }
272
+
273
+ // ============================================================================
274
+ // Series Page
275
+ // ============================================================================
276
+
277
+ export interface SeriesPageData {
278
+ id: number;
279
+ title: string;
280
+ description: string;
281
+ eventSummary?: string;
282
+ image?: string;
283
+ timeZone: string;
284
+ venue: {
285
+ id: number;
286
+ name: string;
287
+ location?: string;
288
+ googleLocationNameCache?: string;
289
+ faq?: Array<{ question: string; answer: string }> | string;
290
+ disclaimer?: string;
291
+ };
292
+ performers: Array<{
293
+ displayName: string;
294
+ firstName?: string;
295
+ lastName?: string;
296
+ profileImage?: string;
297
+ }>;
298
+ occurrences: Array<{
299
+ id: number;
300
+ slug: string;
301
+ startDateTime: string;
302
+ endDateTime: string;
303
+ ctaState: {
304
+ text: string;
305
+ disabled: boolean;
306
+ reason?: string;
307
+ };
308
+ }>;
309
+ }
310
+
311
+ // ============================================================================
312
+ // Public Collection
313
+ // ============================================================================
314
+
315
+ export interface PublicCollectionData {
316
+ id: number;
317
+ collectionTitle: string;
318
+ summary?: string;
319
+ description?: string;
320
+ coverImage?: string;
321
+ events: Array<{
322
+ id: number;
323
+ title: string;
324
+ slug?: string;
325
+ startDateTime?: string;
326
+ endDateTime?: string;
327
+ image?: string;
328
+ status?: string;
329
+ venue?: { name: string };
330
+ minPrice?: number;
331
+ }>;
332
+ }
333
+
334
+ // ============================================================================
335
+ // API Configuration
336
+ // ============================================================================
337
+
338
+ export interface ApiConfig {
339
+ baseUrl?: string;
340
+ timeout?: number;
341
+ /** Number of additional attempts after the first try (default: 2 = 3 total tries). */
342
+ retries?: number;
343
+ /** Base delay before the first retry; doubles each attempt (default: 500ms). */
344
+ retryDelay?: number;
345
+ onError?: (error: Error) => void;
346
+ }
347
+
348
+ // ============================================================================
349
+ // Generic API Response
350
+ // ============================================================================
351
+
352
+ export interface ApiResponse<T> {
353
+ success: boolean;
354
+ data?: T;
355
+ error?: string;
356
+ statusCode?: number;
357
+ }