@getmicdrop/svelte-components 2.0.13 → 2.1.0

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 (58) hide show
  1. package/dist/__LIB_STORES__.js +30 -2
  2. package/dist/components/AboutShow/AboutShow.svelte +278 -0
  3. package/dist/components/AboutShow/AboutShow.svelte.d.ts +43 -0
  4. package/dist/components/AboutShow/AboutShow.svelte.d.ts.map +1 -0
  5. package/dist/components/Calendar/MiniMonthCalendar.svelte +1446 -0
  6. package/dist/components/Calendar/{Calendar.svelte.d.ts → MiniMonthCalendar.svelte.d.ts} +20 -21
  7. package/dist/components/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -0
  8. package/dist/components/DarkModeToggle.svelte +3 -1
  9. package/dist/components/DarkModeToggle.svelte.d.ts.map +1 -1
  10. package/dist/components/FAQs/FAQs.svelte +49 -0
  11. package/dist/components/{Calendar/QuarterView.svelte.d.ts → FAQs/FAQs.svelte.d.ts} +10 -10
  12. package/dist/components/FAQs/FAQs.svelte.d.ts.map +1 -0
  13. package/dist/components/Input/Input.svelte +100 -12
  14. package/dist/components/Input/Input.svelte.d.ts +12 -0
  15. package/dist/components/Input/Input.svelte.d.ts.map +1 -1
  16. package/dist/components/Input/OTPInput.svelte +1 -1
  17. package/dist/components/MonthSwitcher/MonthSwitcher.svelte +206 -0
  18. package/dist/components/MonthSwitcher/MonthSwitcher.svelte.d.ts +37 -0
  19. package/dist/components/MonthSwitcher/MonthSwitcher.svelte.d.ts.map +1 -0
  20. package/dist/components/OrderSummary/OrderSummary.svelte +553 -0
  21. package/dist/components/OrderSummary/OrderSummary.svelte.d.ts +65 -0
  22. package/dist/components/OrderSummary/OrderSummary.svelte.d.ts.map +1 -0
  23. package/dist/components/PublicCard/PublicCard.svelte +267 -0
  24. package/dist/components/{pages/performers/AvailabilityCalendarModal.svelte.d.ts → PublicCard/PublicCard.svelte.d.ts} +12 -14
  25. package/dist/components/PublicCard/PublicCard.svelte.d.ts.map +1 -0
  26. package/dist/components/ShowCard/ShowCard.svelte +240 -0
  27. package/dist/components/ShowCard/ShowCard.svelte.d.ts +39 -0
  28. package/dist/components/ShowCard/ShowCard.svelte.d.ts.map +1 -0
  29. package/dist/components/ShowTimeCard/ShowTimeCard.svelte +92 -0
  30. package/dist/components/{Calendar/QuarterView.stories.svelte.d.ts → ShowTimeCard/ShowTimeCard.svelte.d.ts} +17 -21
  31. package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -0
  32. package/dist/components/Spinner/Spinner.svelte +73 -17
  33. package/dist/components/Spinner/Spinner.svelte.d.ts +5 -3
  34. package/dist/components/Spinner/Spinner.svelte.d.ts.map +1 -1
  35. package/dist/components/pages/performers/ShowDetails.svelte.d.ts +2 -2
  36. package/dist/components/pages/performers/ShowItemCard.svelte.d.ts +6 -6
  37. package/dist/components/pages/performers/VenueItemCard.svelte.d.ts +2 -2
  38. package/dist/components/pages/shows/TabNavigation.svelte +7 -8
  39. package/dist/index.d.ts +8 -3
  40. package/dist/index.js +12 -3
  41. package/dist/services/EventService.js +75 -75
  42. package/dist/services/EventService.spec.js +217 -217
  43. package/dist/services/ShowService.spec.js +342 -342
  44. package/package.json +160 -160
  45. package/dist/components/Calendar/Calendar.spec.d.ts +0 -2
  46. package/dist/components/Calendar/Calendar.spec.d.ts.map +0 -1
  47. package/dist/components/Calendar/Calendar.spec.js +0 -131
  48. package/dist/components/Calendar/Calendar.svelte +0 -1115
  49. package/dist/components/Calendar/Calendar.svelte.d.ts.map +0 -1
  50. package/dist/components/Calendar/QuarterView.spec.d.ts +0 -2
  51. package/dist/components/Calendar/QuarterView.spec.d.ts.map +0 -1
  52. package/dist/components/Calendar/QuarterView.spec.js +0 -394
  53. package/dist/components/Calendar/QuarterView.stories.svelte +0 -134
  54. package/dist/components/Calendar/QuarterView.stories.svelte.d.ts.map +0 -1
  55. package/dist/components/Calendar/QuarterView.svelte +0 -736
  56. package/dist/components/Calendar/QuarterView.svelte.d.ts.map +0 -1
  57. package/dist/components/pages/performers/AvailabilityCalendarModal.svelte +0 -632
  58. package/dist/components/pages/performers/AvailabilityCalendarModal.svelte.d.ts.map +0 -1
@@ -1,217 +1,217 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
-
3
- // Create mock functions we'll spy on
4
- const mockEvents = [
5
- { ID: 1, startDateTime: '2025-01-15T20:00:00', title: 'Comedy Night' },
6
- { ID: 2, startDateTime: '2025-01-15T21:00:00', title: 'Open Mic' },
7
- { ID: 3, startDateTime: '2025-02-10T19:00:00', title: 'Improv Show' },
8
- ];
9
-
10
- import {
11
- fetchEventsFromAPI,
12
- fetchEventsForMonth,
13
- fetchEventsForWeek,
14
- fetchEventsForDay,
15
- } from './EventService';
16
-
17
- describe('EventService', () => {
18
- beforeEach(() => {
19
- vi.clearAllMocks();
20
- global.fetch = vi.fn();
21
- });
22
-
23
- describe('fetchEventsFromAPI', () => {
24
- it('fetches events from the API', async () => {
25
- global.fetch.mockResolvedValue({
26
- ok: true,
27
- json: () => Promise.resolve(mockEvents),
28
- });
29
-
30
- const events = await fetchEventsFromAPI();
31
-
32
- expect(global.fetch).toHaveBeenCalledWith(
33
- 'https://get-micdrop.com/api/public/getEventsForVenue'
34
- );
35
- expect(events).toHaveLength(3);
36
- });
37
-
38
- it('transforms event data correctly', async () => {
39
- global.fetch.mockResolvedValue({
40
- ok: true,
41
- json: () => Promise.resolve([mockEvents[0]]),
42
- });
43
-
44
- const events = await fetchEventsFromAPI();
45
-
46
- expect(events[0]).toEqual({
47
- id: 1,
48
- date: '2025-01-15T20:00:00',
49
- title: 'Comedy Night',
50
- });
51
- });
52
-
53
- it('returns empty array on failed response', async () => {
54
- const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
55
- global.fetch.mockResolvedValue({
56
- ok: false,
57
- status: 500,
58
- });
59
-
60
- const events = await fetchEventsFromAPI();
61
-
62
- expect(events).toEqual([]);
63
- consoleSpy.mockRestore();
64
- });
65
-
66
- it('returns empty array on network error', async () => {
67
- const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
68
- global.fetch.mockRejectedValue(new Error('Network error'));
69
-
70
- const events = await fetchEventsFromAPI();
71
-
72
- expect(events).toEqual([]);
73
- consoleSpy.mockRestore();
74
- });
75
- });
76
-
77
- describe('fetchEventsForMonth', () => {
78
- it('filters events by year and month', async () => {
79
- global.fetch.mockResolvedValue({
80
- ok: true,
81
- json: () => Promise.resolve(mockEvents),
82
- });
83
-
84
- const events = await fetchEventsForMonth(2025, 1);
85
-
86
- expect(events.length).toBe(2);
87
- expect(events[0].title).toBe('Comedy Night');
88
- expect(events[1].title).toBe('Open Mic');
89
- }, 10000);
90
-
91
- it('returns empty for month with no events', async () => {
92
- global.fetch.mockResolvedValue({
93
- ok: true,
94
- json: () => Promise.resolve(mockEvents),
95
- });
96
-
97
- const events = await fetchEventsForMonth(2025, 3);
98
-
99
- expect(events).toEqual([]);
100
- }, 10000);
101
-
102
- it('pads single digit months correctly', async () => {
103
- global.fetch.mockResolvedValue({
104
- ok: true,
105
- json: () => Promise.resolve(mockEvents),
106
- });
107
-
108
- const events = await fetchEventsForMonth(2025, 2);
109
-
110
- expect(events.length).toBe(1);
111
- expect(events[0].title).toBe('Improv Show');
112
- }, 10000);
113
-
114
- it('handles double digit months', async () => {
115
- const decemberEvents = [
116
- { ID: 4, startDateTime: '2025-12-25T20:00:00', title: 'Holiday Show' },
117
- ];
118
- global.fetch.mockResolvedValue({
119
- ok: true,
120
- json: () => Promise.resolve(decemberEvents),
121
- });
122
-
123
- const events = await fetchEventsForMonth(2025, 12);
124
-
125
- expect(events.length).toBe(1);
126
- }, 10000);
127
- });
128
-
129
- describe('fetchEventsForWeek', () => {
130
- it('filters events within the week', async () => {
131
- // Events on Jan 13-14, 2025 (Monday-Tuesday of that week)
132
- const weekEvents = [
133
- { ID: 1, startDateTime: '2025-01-13T20:00:00', title: 'Monday Show' },
134
- { ID: 2, startDateTime: '2025-01-14T19:00:00', title: 'Tuesday Show' },
135
- { ID: 3, startDateTime: '2025-01-20T20:00:00', title: 'Next Week Show' },
136
- ];
137
- global.fetch.mockResolvedValue({
138
- ok: true,
139
- json: () => Promise.resolve(weekEvents),
140
- });
141
-
142
- // Jan 15, 2025 is a Wednesday
143
- const date = new Date('2025-01-15');
144
- const events = await fetchEventsForWeek(date);
145
-
146
- // Should include Monday and Tuesday shows (same week)
147
- expect(events.length).toBe(2);
148
- }, 10000);
149
-
150
- it('uses Monday as week start', async () => {
151
- const events = [
152
- { ID: 1, startDateTime: '2025-01-12T20:00:00', title: 'Sunday Show' },
153
- { ID: 2, startDateTime: '2025-01-13T20:00:00', title: 'Monday Show' },
154
- ];
155
- global.fetch.mockResolvedValue({
156
- ok: true,
157
- json: () => Promise.resolve(events),
158
- });
159
-
160
- // Pass a date in the week starting Jan 13
161
- const date = new Date('2025-01-15');
162
- const result = await fetchEventsForWeek(date);
163
-
164
- // Sunday should be excluded, Monday included
165
- expect(result.some((e) => e.title === 'Monday Show')).toBe(true);
166
- }, 10000);
167
- });
168
-
169
- describe('fetchEventsForDay', () => {
170
- it('filters events for specific day', async () => {
171
- // Use Z suffix for UTC dates to avoid timezone issues
172
- const dayEvents = [
173
- { ID: 1, startDateTime: '2025-01-15T14:00:00Z', title: 'Afternoon Show' },
174
- { ID: 2, startDateTime: '2025-01-15T20:00:00Z', title: 'Evening Show' },
175
- { ID: 3, startDateTime: '2025-01-16T20:00:00Z', title: 'Next Day Show' },
176
- ];
177
- global.fetch.mockResolvedValue({
178
- ok: true,
179
- json: () => Promise.resolve(dayEvents),
180
- });
181
-
182
- const date = new Date(Date.UTC(2025, 0, 15)); // Jan 15, 2025 UTC
183
- const events = await fetchEventsForDay(date);
184
-
185
- expect(events.length).toBe(2);
186
- expect(events[0].title).toBe('Afternoon Show');
187
- expect(events[1].title).toBe('Evening Show');
188
- }, 10000);
189
-
190
- it('returns empty array for day with no events', async () => {
191
- global.fetch.mockResolvedValue({
192
- ok: true,
193
- json: () => Promise.resolve(mockEvents),
194
- });
195
-
196
- const date = new Date(Date.UTC(2025, 0, 20)); // Jan 20, 2025
197
- const events = await fetchEventsForDay(date);
198
-
199
- expect(events).toEqual([]);
200
- }, 10000);
201
-
202
- it('matches dates using UTC methods', async () => {
203
- const dayEvents = [
204
- { ID: 1, startDateTime: '2025-06-15T23:00:00Z', title: 'Late Show' },
205
- ];
206
- global.fetch.mockResolvedValue({
207
- ok: true,
208
- json: () => Promise.resolve(dayEvents),
209
- });
210
-
211
- const date = new Date(Date.UTC(2025, 5, 15)); // June 15, 2025 UTC
212
- const events = await fetchEventsForDay(date);
213
-
214
- expect(events.length).toBe(1);
215
- }, 10000);
216
- });
217
- });
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+
3
+ // Create mock functions we'll spy on
4
+ const mockEvents = [
5
+ { ID: 1, startDateTime: '2025-01-15T20:00:00', title: 'Comedy Night' },
6
+ { ID: 2, startDateTime: '2025-01-15T21:00:00', title: 'Open Mic' },
7
+ { ID: 3, startDateTime: '2025-02-10T19:00:00', title: 'Improv Show' },
8
+ ];
9
+
10
+ import {
11
+ fetchEventsFromAPI,
12
+ fetchEventsForMonth,
13
+ fetchEventsForWeek,
14
+ fetchEventsForDay,
15
+ } from './EventService';
16
+
17
+ describe('EventService', () => {
18
+ beforeEach(() => {
19
+ vi.clearAllMocks();
20
+ global.fetch = vi.fn();
21
+ });
22
+
23
+ describe('fetchEventsFromAPI', () => {
24
+ it('fetches events from the API', async () => {
25
+ global.fetch.mockResolvedValue({
26
+ ok: true,
27
+ json: () => Promise.resolve(mockEvents),
28
+ });
29
+
30
+ const events = await fetchEventsFromAPI();
31
+
32
+ expect(global.fetch).toHaveBeenCalledWith(
33
+ 'https://get-micdrop.com/api/public/getEventsForVenue'
34
+ );
35
+ expect(events).toHaveLength(3);
36
+ });
37
+
38
+ it('transforms event data correctly', async () => {
39
+ global.fetch.mockResolvedValue({
40
+ ok: true,
41
+ json: () => Promise.resolve([mockEvents[0]]),
42
+ });
43
+
44
+ const events = await fetchEventsFromAPI();
45
+
46
+ expect(events[0]).toEqual({
47
+ id: 1,
48
+ date: '2025-01-15T20:00:00',
49
+ title: 'Comedy Night',
50
+ });
51
+ });
52
+
53
+ it('returns empty array on failed response', async () => {
54
+ const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
55
+ global.fetch.mockResolvedValue({
56
+ ok: false,
57
+ status: 500,
58
+ });
59
+
60
+ const events = await fetchEventsFromAPI();
61
+
62
+ expect(events).toEqual([]);
63
+ consoleSpy.mockRestore();
64
+ });
65
+
66
+ it('returns empty array on network error', async () => {
67
+ const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
68
+ global.fetch.mockRejectedValue(new Error('Network error'));
69
+
70
+ const events = await fetchEventsFromAPI();
71
+
72
+ expect(events).toEqual([]);
73
+ consoleSpy.mockRestore();
74
+ });
75
+ });
76
+
77
+ describe('fetchEventsForMonth', () => {
78
+ it('filters events by year and month', async () => {
79
+ global.fetch.mockResolvedValue({
80
+ ok: true,
81
+ json: () => Promise.resolve(mockEvents),
82
+ });
83
+
84
+ const events = await fetchEventsForMonth(2025, 1);
85
+
86
+ expect(events.length).toBe(2);
87
+ expect(events[0].title).toBe('Comedy Night');
88
+ expect(events[1].title).toBe('Open Mic');
89
+ }, 10000);
90
+
91
+ it('returns empty for month with no events', async () => {
92
+ global.fetch.mockResolvedValue({
93
+ ok: true,
94
+ json: () => Promise.resolve(mockEvents),
95
+ });
96
+
97
+ const events = await fetchEventsForMonth(2025, 3);
98
+
99
+ expect(events).toEqual([]);
100
+ }, 10000);
101
+
102
+ it('pads single digit months correctly', async () => {
103
+ global.fetch.mockResolvedValue({
104
+ ok: true,
105
+ json: () => Promise.resolve(mockEvents),
106
+ });
107
+
108
+ const events = await fetchEventsForMonth(2025, 2);
109
+
110
+ expect(events.length).toBe(1);
111
+ expect(events[0].title).toBe('Improv Show');
112
+ }, 10000);
113
+
114
+ it('handles double digit months', async () => {
115
+ const decemberEvents = [
116
+ { ID: 4, startDateTime: '2025-12-25T20:00:00', title: 'Holiday Show' },
117
+ ];
118
+ global.fetch.mockResolvedValue({
119
+ ok: true,
120
+ json: () => Promise.resolve(decemberEvents),
121
+ });
122
+
123
+ const events = await fetchEventsForMonth(2025, 12);
124
+
125
+ expect(events.length).toBe(1);
126
+ }, 10000);
127
+ });
128
+
129
+ describe('fetchEventsForWeek', () => {
130
+ it('filters events within the week', async () => {
131
+ // Events on Jan 13-14, 2025 (Monday-Tuesday of that week)
132
+ const weekEvents = [
133
+ { ID: 1, startDateTime: '2025-01-13T20:00:00', title: 'Monday Show' },
134
+ { ID: 2, startDateTime: '2025-01-14T19:00:00', title: 'Tuesday Show' },
135
+ { ID: 3, startDateTime: '2025-01-20T20:00:00', title: 'Next Week Show' },
136
+ ];
137
+ global.fetch.mockResolvedValue({
138
+ ok: true,
139
+ json: () => Promise.resolve(weekEvents),
140
+ });
141
+
142
+ // Jan 15, 2025 is a Wednesday
143
+ const date = new Date('2025-01-15');
144
+ const events = await fetchEventsForWeek(date);
145
+
146
+ // Should include Monday and Tuesday shows (same week)
147
+ expect(events.length).toBe(2);
148
+ }, 10000);
149
+
150
+ it('uses Monday as week start', async () => {
151
+ const events = [
152
+ { ID: 1, startDateTime: '2025-01-12T20:00:00', title: 'Sunday Show' },
153
+ { ID: 2, startDateTime: '2025-01-13T20:00:00', title: 'Monday Show' },
154
+ ];
155
+ global.fetch.mockResolvedValue({
156
+ ok: true,
157
+ json: () => Promise.resolve(events),
158
+ });
159
+
160
+ // Pass a date in the week starting Jan 13
161
+ const date = new Date('2025-01-15');
162
+ const result = await fetchEventsForWeek(date);
163
+
164
+ // Sunday should be excluded, Monday included
165
+ expect(result.some((e) => e.title === 'Monday Show')).toBe(true);
166
+ }, 10000);
167
+ });
168
+
169
+ describe('fetchEventsForDay', () => {
170
+ it('filters events for specific day', async () => {
171
+ // Use Z suffix for UTC dates to avoid timezone issues
172
+ const dayEvents = [
173
+ { ID: 1, startDateTime: '2025-01-15T14:00:00Z', title: 'Afternoon Show' },
174
+ { ID: 2, startDateTime: '2025-01-15T20:00:00Z', title: 'Evening Show' },
175
+ { ID: 3, startDateTime: '2025-01-16T20:00:00Z', title: 'Next Day Show' },
176
+ ];
177
+ global.fetch.mockResolvedValue({
178
+ ok: true,
179
+ json: () => Promise.resolve(dayEvents),
180
+ });
181
+
182
+ const date = new Date(Date.UTC(2025, 0, 15)); // Jan 15, 2025 UTC
183
+ const events = await fetchEventsForDay(date);
184
+
185
+ expect(events.length).toBe(2);
186
+ expect(events[0].title).toBe('Afternoon Show');
187
+ expect(events[1].title).toBe('Evening Show');
188
+ }, 10000);
189
+
190
+ it('returns empty array for day with no events', async () => {
191
+ global.fetch.mockResolvedValue({
192
+ ok: true,
193
+ json: () => Promise.resolve(mockEvents),
194
+ });
195
+
196
+ const date = new Date(Date.UTC(2025, 0, 20)); // Jan 20, 2025
197
+ const events = await fetchEventsForDay(date);
198
+
199
+ expect(events).toEqual([]);
200
+ }, 10000);
201
+
202
+ it('matches dates using UTC methods', async () => {
203
+ const dayEvents = [
204
+ { ID: 1, startDateTime: '2025-06-15T23:00:00Z', title: 'Late Show' },
205
+ ];
206
+ global.fetch.mockResolvedValue({
207
+ ok: true,
208
+ json: () => Promise.resolve(dayEvents),
209
+ });
210
+
211
+ const date = new Date(Date.UTC(2025, 5, 15)); // June 15, 2025 UTC
212
+ const events = await fetchEventsForDay(date);
213
+
214
+ expect(events.length).toBe(1);
215
+ }, 10000);
216
+ });
217
+ });