@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,8 +1,8 @@
1
1
  import { writable } from 'svelte/store';
2
2
 
3
- // Create a minimal page store for library builds
3
+ // Create a reactive page store that updates on navigation
4
4
  const createPageStore = () => {
5
- const { subscribe, set } = writable({
5
+ const getPageState = () => ({
6
6
  url: typeof window !== 'undefined' ? new URL(window.location.href) : new URL('http://localhost'),
7
7
  params: {},
8
8
  route: { id: null },
@@ -13,6 +13,34 @@ const createPageStore = () => {
13
13
  state: {}
14
14
  });
15
15
 
16
+ const { subscribe, set } = writable(getPageState());
17
+
18
+ // Listen for navigation events in the browser
19
+ if (typeof window !== 'undefined') {
20
+ // Update on popstate (back/forward navigation)
21
+ window.addEventListener('popstate', () => set(getPageState()));
22
+
23
+ // Intercept pushState and replaceState to detect programmatic navigation
24
+ const originalPushState = history.pushState;
25
+ const originalReplaceState = history.replaceState;
26
+
27
+ history.pushState = function(...args) {
28
+ originalPushState.apply(this, args);
29
+ set(getPageState());
30
+ };
31
+
32
+ history.replaceState = function(...args) {
33
+ originalReplaceState.apply(this, args);
34
+ set(getPageState());
35
+ };
36
+
37
+ // Also listen for click events on links to catch SvelteKit navigation
38
+ window.addEventListener('click', (e) => {
39
+ // Small delay to let the navigation complete
40
+ setTimeout(() => set(getPageState()), 0);
41
+ });
42
+ }
43
+
16
44
  return { subscribe };
17
45
  };
18
46
 
@@ -0,0 +1,278 @@
1
+ <script>
2
+ import Close from 'carbon-icons-svelte/lib/Close.svelte';
3
+ import LogoInstagram from 'carbon-icons-svelte/lib/LogoInstagram.svelte';
4
+
5
+ export let performers = [];
6
+ export let ShowImage = '';
7
+ export let description = '';
8
+ export let showTitle = true;
9
+ export let title = "About the Show";
10
+ export let showReadMore = true; // Allow controlling read more behavior
11
+
12
+ // Function to get image URL - can be overridden via props
13
+ export let getImageUrl = (url) => url;
14
+
15
+ let activePerformer = null;
16
+ let characterLimit = 1500; // Show much more content before truncating
17
+ let showFullDescription = false;
18
+
19
+ // Filter performers: only show Confirmed (acceptedState === 2) with valid profiles
20
+ // Note: performerProfile is lowercase in API response
21
+ $: validPerformers = performers.filter(performer => {
22
+ const isConfirmed = performer.acceptedState === 2;
23
+ const isNotHidden = !performer.shouldBeHidden;
24
+ const profile = performer.RosterPerformer?.User?.performerProfile;
25
+ const hasName = profile?.firstName || profile?.lastName || profile?.stageName;
26
+ return isConfirmed && isNotHidden && hasName;
27
+ });
28
+
29
+ function togglePerformer(id) {
30
+ if (activePerformer === id) {
31
+ activePerformer = null;
32
+ } else {
33
+ activePerformer = id;
34
+ }
35
+ }
36
+
37
+ function closePerformer() {
38
+ activePerformer = null;
39
+ }
40
+
41
+ function toggleDescription() {
42
+ showFullDescription = !showFullDescription;
43
+ }
44
+ </script>
45
+
46
+ <div class="flex flex-col gap-3">
47
+ {#if showTitle}
48
+ <h2 class="section-title font-medium text-xl">{title}</h2>
49
+ {/if}
50
+
51
+ {#if ShowImage && description}
52
+ <div>
53
+ <img src={ShowImage} alt="" class="show-image rounded-lg object-contain w-full" />
54
+ </div>
55
+ {/if}
56
+
57
+ <!-- Description -->
58
+ {#if description}
59
+ {#if showFullDescription || description.length <= characterLimit || !showReadMore}
60
+ <p class="description-text text-[15px] leading-relaxed whitespace-pre-line">{description}</p>
61
+ {#if showReadMore && description.length > characterLimit}
62
+ <button
63
+ on:click={toggleDescription}
64
+ class="read-more-btn text-[15px] font-medium text-left hover:underline"
65
+ >
66
+ Show less
67
+ </button>
68
+ {/if}
69
+ {:else}
70
+ <p class="description-text text-[15px] leading-relaxed whitespace-pre-line">
71
+ {description.slice(0, characterLimit)}...
72
+ </p>
73
+ <button
74
+ on:click={toggleDescription}
75
+ class="read-more-btn text-[15px] font-medium text-left hover:underline"
76
+ >
77
+ Show more
78
+ </button>
79
+ {/if}
80
+ {/if}
81
+
82
+ <!-- Performers - always show all, no collapse -->
83
+ {#if validPerformers.length > 0}
84
+ <div class="py-2">
85
+ <!-- Backdrop overlay for bio popup -->
86
+ {#if activePerformer !== null}
87
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
88
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
89
+ <div class="fixed inset-0 z-40" on:click={closePerformer}></div>
90
+ {/if}
91
+
92
+ <div class="flex flex-wrap justify-start gap-4">
93
+ {#each validPerformers as performer, index}
94
+ {@const profile = performer.RosterPerformer?.User?.performerProfile}
95
+ {@const displayName = profile?.useStageName && profile?.stageName
96
+ ? profile.stageName
97
+ : `${profile?.firstName || ''} ${profile?.lastName || ''}`.trim()}
98
+ {@const firstName = profile?.firstName || displayName.split(' ')[0] || displayName}
99
+ <div class="relative performer-card">
100
+ {#if activePerformer === performer.ID && !performer.shouldBeHidden}
101
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
102
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
103
+ <div
104
+ class="bio-card w-[300px] sm:w-[340px] absolute rounded-lg p-4 z-50 shadow-xl {index === 0 ? 'first-child' : ''}"
105
+ on:click|stopPropagation
106
+ >
107
+ <div class="arrow {index === 0 ? 'first-arrow' : ''}"></div>
108
+
109
+ <button
110
+ class="close-btn absolute top-2 right-2 p-1 rounded-full transition-colors"
111
+ on:click={closePerformer}
112
+ aria-label="Close"
113
+ >
114
+ <Close size={18} />
115
+ </button>
116
+
117
+ <p class="bio-text text-sm leading-relaxed pr-6">
118
+ {profile?.biography || ''}
119
+ </p>
120
+
121
+ {#if profile?.instagram || profile?.twitter}
122
+ <div class="social-links flex gap-2 items-center text-sm mt-3 pt-3">
123
+ <span>Follow {firstName}:</span>
124
+ {#if profile?.instagram}
125
+ <a
126
+ href={profile.instagram}
127
+ target="_blank"
128
+ rel="noopener noreferrer"
129
+ class="social-icon hover:opacity-70 transition-opacity"
130
+ aria-label="Instagram profile"
131
+ >
132
+ <LogoInstagram size={20} />
133
+ </a>
134
+ {/if}
135
+ {#if profile?.twitter}
136
+ <a
137
+ href={profile.twitter}
138
+ target="_blank"
139
+ rel="noopener noreferrer"
140
+ class="social-icon hover:opacity-70 transition-opacity"
141
+ aria-label="Twitter profile"
142
+ >
143
+ <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
144
+ <path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/>
145
+ </svg>
146
+ </a>
147
+ {/if}
148
+ </div>
149
+ {/if}
150
+ </div>
151
+ {/if}
152
+
153
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
154
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
155
+ <div
156
+ class="performer-tile rounded-lg flex flex-col gap-2 p-2 items-center w-[90px] cursor-pointer transition-all {activePerformer === performer.ID ? 'active' : ''}"
157
+ on:click={() => togglePerformer(performer.ID)}
158
+ >
159
+ <img
160
+ src={performer.shouldBeHidden ? '' : profile?.profileImage ? getImageUrl(profile.profileImage) : ''}
161
+ alt={displayName || 'Performer'}
162
+ class="performer-image size-[68px] rounded object-cover {!profile?.profileImage || performer.shouldBeHidden ? 'no-image' : ''}"
163
+ />
164
+ <p class="performer-name text-[11px] text-center leading-tight line-clamp-2">
165
+ {#if !performer.shouldBeHidden}
166
+ {displayName}
167
+ {/if}
168
+ </p>
169
+ </div>
170
+ </div>
171
+ {/each}
172
+ </div>
173
+ </div>
174
+ {/if}
175
+ </div>
176
+
177
+ <style>
178
+ /* Theme-responsive colors using CSS variables */
179
+ .section-title {
180
+ color: hsl(var(--Text-Primary));
181
+ }
182
+
183
+ .show-image {
184
+ background-color: hsl(var(--BG-Secondary));
185
+ }
186
+
187
+ .description-text {
188
+ color: hsl(var(--Text-Secondary));
189
+ }
190
+
191
+ .read-more-btn {
192
+ color: hsl(var(--Brand-Primary));
193
+ }
194
+
195
+ .bio-card {
196
+ transition: all 0.3s ease;
197
+ bottom: calc(100% + 10px);
198
+ left: 50%;
199
+ transform: translateX(-50%);
200
+ background: hsl(var(--BG-Primary));
201
+ border: 2px solid hsl(var(--Brand-Primary));
202
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
203
+ }
204
+
205
+ .bio-card.first-child {
206
+ left: 190%;
207
+ }
208
+
209
+ .arrow {
210
+ position: absolute;
211
+ width: 12px;
212
+ height: 12px;
213
+ background: hsl(var(--BG-Primary));
214
+ transform: rotate(45deg);
215
+ border-right: 2px solid hsl(var(--Brand-Primary));
216
+ border-bottom: 2px solid hsl(var(--Brand-Primary));
217
+ bottom: -6px;
218
+ left: 50%;
219
+ margin-left: -6px;
220
+ }
221
+
222
+ .arrow.first-arrow {
223
+ left: 20%;
224
+ }
225
+
226
+ .close-btn {
227
+ color: hsl(var(--Text-Tartiary));
228
+ }
229
+
230
+ .close-btn:hover {
231
+ background-color: hsl(var(--BG-Secondary));
232
+ }
233
+
234
+ .bio-text {
235
+ color: hsl(var(--Text-Secondary));
236
+ }
237
+
238
+ .social-links {
239
+ color: hsl(var(--Text-Tartiary));
240
+ border-top: 1px solid hsl(var(--Stroke-Secondary));
241
+ }
242
+
243
+ .social-icon {
244
+ color: hsl(var(--Brand-Primary));
245
+ }
246
+
247
+ .performer-tile {
248
+ background-color: hsl(var(--BG-Primary));
249
+ border: 1px solid hsl(var(--Stroke-Secondary));
250
+ }
251
+
252
+ .performer-tile:hover {
253
+ border-color: hsl(var(--Brand-Primary));
254
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
255
+ }
256
+
257
+ .performer-tile.active {
258
+ border-color: hsl(var(--Brand-Primary));
259
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
260
+ }
261
+
262
+ .performer-image.no-image {
263
+ background-color: hsl(var(--BG-Secondary));
264
+ }
265
+
266
+ .performer-name {
267
+ color: hsl(var(--Text-Secondary));
268
+ }
269
+
270
+ /* Line clamping */
271
+ .line-clamp-2 {
272
+ display: -webkit-box;
273
+ -webkit-line-clamp: 2;
274
+ line-clamp: 2;
275
+ -webkit-box-orient: vertical;
276
+ overflow: hidden;
277
+ }
278
+ </style>
@@ -0,0 +1,43 @@
1
+ export default AboutShow;
2
+ type AboutShow = SvelteComponent<{
3
+ title?: string | undefined;
4
+ description?: string | undefined;
5
+ showTitle?: boolean | undefined;
6
+ performers?: any[] | undefined;
7
+ ShowImage?: string | undefined;
8
+ showReadMore?: boolean | undefined;
9
+ getImageUrl?: ((url: any) => any) | undefined;
10
+ }, {
11
+ click: PointerEvent;
12
+ } & {
13
+ [evt: string]: CustomEvent<any>;
14
+ }, {}> & {
15
+ $$bindings?: string | undefined;
16
+ };
17
+ declare const AboutShow: $$__sveltets_2_IsomorphicComponent<{
18
+ title?: string | undefined;
19
+ description?: string | undefined;
20
+ showTitle?: boolean | undefined;
21
+ performers?: any[] | undefined;
22
+ ShowImage?: string | undefined;
23
+ showReadMore?: boolean | undefined;
24
+ getImageUrl?: ((url: any) => any) | undefined;
25
+ }, {
26
+ click: PointerEvent;
27
+ } & {
28
+ [evt: string]: CustomEvent<any>;
29
+ }, {}, {}, string>;
30
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
31
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
32
+ $$bindings?: Bindings;
33
+ } & Exports;
34
+ (internal: unknown, props: Props & {
35
+ $$events?: Events;
36
+ $$slots?: Slots;
37
+ }): Exports & {
38
+ $set?: any;
39
+ $on?: any;
40
+ };
41
+ z_$$bindings?: Bindings;
42
+ }
43
+ //# sourceMappingURL=AboutShow.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AboutShow.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/AboutShow/AboutShow.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAmKA;;;;;;;;;;;;mBAAgN;6CATnK,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}