@getmicdrop/svelte-components 5.6.1 → 5.7.1

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 (255) hide show
  1. package/dist/calendar/AboutShow/AboutShow.svelte +172 -172
  2. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
  3. package/dist/calendar/FAQs/FAQs.svelte +75 -75
  4. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
  5. package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
  6. package/dist/calendar/PublicCard/PublicCard.svelte +134 -134
  7. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  8. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  9. package/dist/components/Heading.svelte +57 -0
  10. package/dist/components/Heading.svelte.d.ts +12 -0
  11. package/dist/components/Heading.svelte.d.ts.map +1 -0
  12. package/dist/components/Layout/AppShell.svelte +104 -104
  13. package/dist/components/Layout/ContentSection.svelte +80 -80
  14. package/dist/components/Layout/Grid.svelte +4 -4
  15. package/dist/components/Layout/Heading.svelte +81 -81
  16. package/dist/components/Layout/PageContainer.svelte +69 -69
  17. package/dist/components/Layout/Responsive.svelte +75 -75
  18. package/dist/components/Layout/Section.svelte +80 -80
  19. package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
  20. package/dist/components/Layout/ShowOnMobile.svelte +37 -37
  21. package/dist/components/Layout/Sidebar.svelte +108 -108
  22. package/dist/components/Layout/Stack.spec.js +1 -1
  23. package/dist/components/Layout/Stack.svelte +6 -6
  24. package/dist/components/Layout/Text.svelte +87 -87
  25. package/dist/components/Layout/TwoColumn.svelte +108 -108
  26. package/dist/components/Layout/index.d.ts +11 -0
  27. package/dist/components/Layout/index.d.ts.map +1 -0
  28. package/dist/components/Layout/index.js +14 -0
  29. package/dist/components/Text.svelte +40 -0
  30. package/dist/components/Text.svelte.d.ts +11 -0
  31. package/dist/components/Text.svelte.d.ts.map +1 -0
  32. package/dist/components/index.d.ts +4 -0
  33. package/dist/components/index.d.ts.map +1 -0
  34. package/dist/components/index.js +12 -0
  35. package/dist/constants/validation.js +91 -91
  36. package/dist/constants/validation.spec.js +64 -64
  37. package/dist/datetime/__tests__/format.test.js +1 -1
  38. package/dist/datetime/__tests__/parse.test.js +1 -1
  39. package/dist/datetime/__tests__/timezone.test.js +1 -1
  40. package/dist/datetime/parse.js +1 -1
  41. package/dist/forms/createFormStore.svelte.js +0 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js +10 -1
  44. package/dist/patterns/data/DataGrid.svelte +45 -45
  45. package/dist/patterns/data/DataList.svelte +24 -24
  46. package/dist/patterns/data/DataTable.svelte +36 -36
  47. package/dist/patterns/forms/FormActions.spec.js +95 -95
  48. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  49. package/dist/patterns/forms/FormActions.svelte +46 -46
  50. package/dist/patterns/forms/FormGrid.svelte +33 -33
  51. package/dist/patterns/forms/FormSection.svelte +32 -32
  52. package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
  53. package/dist/patterns/forms/FormValidationSummary.svelte +74 -74
  54. package/dist/patterns/layout/Sidebar.svelte +39 -39
  55. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  56. package/dist/patterns/navigation/BottomNav.svelte +74 -74
  57. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  58. package/dist/patterns/navigation/Header.svelte +193 -193
  59. package/dist/patterns/page/PageHeader.svelte +18 -18
  60. package/dist/patterns/page/PageLayout.svelte +40 -40
  61. package/dist/patterns/page/PageLoader.spec.js +57 -57
  62. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  63. package/dist/patterns/page/PageLoader.svelte +24 -24
  64. package/dist/patterns/page/SectionHeader.svelte +29 -29
  65. package/dist/presets/badges.js +112 -112
  66. package/dist/presets/buttons.js +76 -76
  67. package/dist/presets/index.js +9 -9
  68. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  69. package/dist/primitives/Accordion/Accordion.svelte +42 -42
  70. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  71. package/dist/primitives/Alert/Alert.spec.js +173 -173
  72. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  73. package/dist/primitives/Alert/Alert.svelte +27 -27
  74. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  75. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  76. package/dist/primitives/Badges/Badge.spec.js +144 -144
  77. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  78. package/dist/primitives/Badges/Badge.svelte +79 -79
  79. package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -136
  80. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  81. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  82. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -122
  83. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  84. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  85. package/dist/primitives/Button/Button.spec.js +223 -223
  86. package/dist/primitives/Button/Button.stories.svelte +76 -76
  87. package/dist/primitives/Button/Button.svelte +270 -270
  88. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
  89. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  90. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  91. package/dist/primitives/Card.spec.js +49 -49
  92. package/dist/primitives/Card.stories.svelte +22 -22
  93. package/dist/primitives/Card.svelte +28 -28
  94. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  95. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  96. package/dist/primitives/DarkModeToggle.spec.js +390 -390
  97. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  98. package/dist/primitives/DarkModeToggle.svelte +136 -136
  99. package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
  100. package/dist/primitives/Drawer/Drawer.svelte +120 -120
  101. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  102. package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
  103. package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
  104. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  105. package/dist/primitives/Helper/Helper.svelte +33 -33
  106. package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
  107. package/dist/primitives/Icons/ArrowRight.svelte +8 -8
  108. package/dist/primitives/Icons/Availability.svelte +14 -14
  109. package/dist/primitives/Icons/Back.svelte +14 -14
  110. package/dist/primitives/Icons/CheckCircle.svelte +6 -6
  111. package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
  112. package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
  113. package/dist/primitives/Icons/ChevronRight.svelte +4 -4
  114. package/dist/primitives/Icons/Copy.svelte +15 -15
  115. package/dist/primitives/Icons/Cross.svelte +5 -5
  116. package/dist/primitives/Icons/DownArrow.svelte +8 -8
  117. package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
  118. package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
  119. package/dist/primitives/Icons/Home.svelte +15 -15
  120. package/dist/primitives/Icons/Icon.spec.js +169 -169
  121. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  122. package/dist/primitives/Icons/Icon.svelte +52 -52
  123. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  124. package/dist/primitives/Icons/Info.svelte +7 -7
  125. package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
  126. package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
  127. package/dist/primitives/Icons/Message.svelte +15 -15
  128. package/dist/primitives/Icons/MoonIcon.svelte +5 -5
  129. package/dist/primitives/Icons/More.svelte +21 -21
  130. package/dist/primitives/Icons/MoreHori.spec.js +61 -61
  131. package/dist/primitives/Icons/MoreHori.svelte +22 -22
  132. package/dist/primitives/Icons/Notification.svelte +14 -14
  133. package/dist/primitives/Icons/Payment.svelte +14 -14
  134. package/dist/primitives/Icons/Profile.svelte +21 -21
  135. package/dist/primitives/Icons/Reload.svelte +29 -29
  136. package/dist/primitives/Icons/Shows.svelte +21 -21
  137. package/dist/primitives/Icons/Signout.svelte +21 -21
  138. package/dist/primitives/Icons/SunIcon.svelte +8 -8
  139. package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
  140. package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
  141. package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
  142. package/dist/primitives/Icons/WarningIcon.svelte +5 -5
  143. package/dist/primitives/Input/Input.spec.js +573 -573
  144. package/dist/primitives/Input/Input.stories.svelte +139 -139
  145. package/dist/primitives/Input/Select.spec.js +212 -212
  146. package/dist/primitives/Input/Select.stories.svelte +112 -112
  147. package/dist/primitives/Input/Select.svelte +128 -128
  148. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  149. package/dist/primitives/Input/Textarea.svelte +35 -35
  150. package/dist/primitives/Label/Label.svelte +37 -37
  151. package/dist/primitives/Modal/Modal.spec.js +99 -99
  152. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  153. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  154. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  155. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  156. package/dist/primitives/Radio/Radio.svelte +67 -67
  157. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  158. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  159. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  160. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  161. package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
  162. package/dist/primitives/Spinner/Spinner.spec.js +71 -71
  163. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  164. package/dist/primitives/Spinner/Spinner.svelte +20 -20
  165. package/dist/primitives/Tabs/TabItem.svelte +49 -49
  166. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  167. package/dist/primitives/Tabs/Tabs.svelte +123 -123
  168. package/dist/primitives/Toggle.spec.js +143 -143
  169. package/dist/primitives/Toggle.stories.svelte +92 -92
  170. package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
  171. package/dist/primitives/Typography/Typography.svelte +53 -53
  172. package/dist/primitives/ValidationError.spec.js +103 -103
  173. package/dist/primitives/ValidationError.stories.svelte +69 -69
  174. package/dist/primitives/ValidationError.svelte +29 -29
  175. package/dist/primitives/index.js +91 -91
  176. package/dist/recipes/CropImage/CropImage.spec.js +208 -208
  177. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  178. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  179. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  180. package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
  181. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  182. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
  183. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  184. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
  185. package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
  186. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
  187. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
  188. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  189. package/dist/recipes/fields/FormField.svelte +58 -58
  190. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  191. package/dist/recipes/fields/SelectField.svelte +80 -80
  192. package/dist/recipes/fields/TextareaField.svelte +97 -97
  193. package/dist/recipes/fields/ToggleField.svelte +60 -60
  194. package/dist/recipes/fields/index.js +7 -7
  195. package/dist/recipes/inputs/MultiSelect.spec.js +258 -258
  196. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  197. package/dist/recipes/inputs/OTPInput.spec.js +251 -251
  198. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  199. package/dist/recipes/inputs/OTPInput.svelte +29 -29
  200. package/dist/recipes/inputs/PasswordInput.svelte +22 -22
  201. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -117
  202. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
  203. package/dist/recipes/inputs/Search.svelte +37 -37
  204. package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
  205. package/dist/recipes/modals/AlertModal.svelte +130 -130
  206. package/dist/recipes/modals/ConfirmationModal.spec.js +206 -206
  207. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  208. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  209. package/dist/recipes/modals/InputModal.svelte +182 -182
  210. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  211. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  212. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  213. package/dist/recipes/modals/StatusModal.svelte +206 -206
  214. package/dist/services/EventService.js +75 -75
  215. package/dist/services/EventService.spec.js +217 -217
  216. package/dist/services/ShowService.spec.js +345 -345
  217. package/dist/stores/auth.js +36 -44
  218. package/dist/stores/auth.spec.js +139 -139
  219. package/dist/stores/formDataStore.d.ts.map +1 -1
  220. package/dist/stores/formDataStore.js +0 -8
  221. package/dist/stores/formSave.d.ts.map +1 -1
  222. package/dist/stores/formSave.js +0 -8
  223. package/dist/stores/navigation.d.ts.map +1 -1
  224. package/dist/stores/navigation.js +0 -8
  225. package/dist/stores/toaster.js +13 -13
  226. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  227. package/dist/stories/ButtonAuditReview.svelte +427 -427
  228. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  229. package/dist/stories/PatternsGallery.svelte +206 -206
  230. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  231. package/dist/stories/PrimitivesGallery.svelte +725 -725
  232. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  233. package/dist/stories/RecipesGallery.svelte +271 -271
  234. package/dist/stories/button-audit-manifest.json +11186 -11186
  235. package/dist/tailwind/preset.cjs +82 -82
  236. package/dist/telemetry.js +405 -405
  237. package/dist/telemetry.spec.js +1169 -1169
  238. package/dist/tokens/tokens.css +87 -87
  239. package/dist/tokens/typography-base.css +163 -163
  240. package/dist/utils/apiConfig.spec.js +219 -219
  241. package/dist/utils/transitions.js +62 -62
  242. package/dist/utils/utils.js +354 -354
  243. package/package.json +1 -1
  244. package/dist/stores/auth.svelte.d.ts +0 -39
  245. package/dist/stores/auth.svelte.d.ts.map +0 -1
  246. package/dist/stores/auth.svelte.js +0 -60
  247. package/dist/stores/formDataStore.svelte.d.ts +0 -47
  248. package/dist/stores/formDataStore.svelte.d.ts.map +0 -1
  249. package/dist/stores/formDataStore.svelte.js +0 -84
  250. package/dist/stores/formSave.svelte.d.ts +0 -33
  251. package/dist/stores/formSave.svelte.d.ts.map +0 -1
  252. package/dist/stores/formSave.svelte.js +0 -113
  253. package/dist/stores/navigation.svelte.d.ts +0 -35
  254. package/dist/stores/navigation.svelte.d.ts.map +0 -1
  255. package/dist/stores/navigation.svelte.js +0 -69
@@ -1,357 +1,357 @@
1
- import { twMerge } from "tailwind-merge";
2
- import clsx from "clsx";
3
- import EventIcon from "../assets/svg/role/event.svg";
4
- import BookingIcon from "../assets/svg/role/booking.svg";
5
- import EmailIcon from "../assets/svg/role/emails.svg";
6
- import VenueIcon from "../assets/svg/role/venue.svg";
7
- import PayoutIcon from "../assets/svg/role/payout.svg";
8
- import MarketingIcon from "../assets/svg/role/marketing.svg";
9
- import OrdersIcon from "../assets/svg/role/orders.svg";
10
- import OrganisationIcon from "../assets/svg/role/organisation.svg";
11
- import ReportingIcon from "../assets/svg/role/reporting.svg";
12
- import microphonePlaceholder from "../assets/images/microphone.png";
13
-
14
- export function classNames(...classes) {
15
- return classes.filter(Boolean).join(" ");
16
- }
17
-
18
- export function truncateTitle(title, maxLength) {
19
- if (title.length > maxLength) {
20
- return title.slice(0, maxLength) + "...";
21
- }
22
- return title;
23
- }
24
-
25
- export function convertToCustomDateFormat(isoString) {
26
- const date = new Date(isoString);
27
-
28
- const year = date.getUTCFullYear();
29
- const month = date.getUTCMonth();
30
- const day = date.getUTCDate();
31
-
32
- const customDate = new Date(year, month, day);
33
-
34
- return customDate;
35
- }
36
-
37
- export function cn(...inputs) {
38
- return twMerge(clsx(inputs));
39
- }
40
-
41
- export function getDays(params) {
42
- if (params === "weeks") {
43
- return [
44
- { value: "monday", label: "Monday" },
45
- { value: "tuesday", label: "Tuesday" },
46
- { value: "wednesday", label: "Wednesday" },
47
- { value: "thursday", label: "Thursday" },
48
- { value: "friday", label: "Friday" },
49
- ];
50
- } else {
51
- return Array.from({ length: 31 }, (_, i) => {
52
- const day = i + 1;
53
- const suffix =
54
- day % 10 === 1 && day !== 11
55
- ? "st"
56
- : day % 10 === 2 && day !== 12
57
- ? "nd"
58
- : day % 10 === 3 && day !== 13
59
- ? "rd"
60
- : "th";
61
- return {
62
- value: day.toString(),
63
- label: day + suffix,
64
- };
65
- });
66
- }
67
- }
68
-
69
- // Function to get days number options based on selected time unit
70
- export function getDaysNumberOptions(timeUnit) {
71
- if (timeUnit === "months") {
72
- return Array.from({ length: 12 }, (_, i) => ({
73
- value: (i + 1).toString(),
74
- label: (i + 1).toString(),
75
- }));
76
- } else if (timeUnit === "weeks") {
77
- return Array.from({ length: 10 }, (_, i) => ({
78
- value: (i + 1).toString(),
79
- label: (i + 1).toString(),
80
- }));
81
- } else {
82
- return Array.from({ length: 31 }, (_, i) => ({
83
- value: (i + 1).toString(),
84
- label: (i + 1).toString(),
85
- }));
86
- }
87
- }
88
-
89
- export const ROLE_PERMISSION_LIST = [
90
- {
91
- icon: EventIcon,
92
- title: "Event creation",
93
- description:
94
- "Allow users to enter event info, create tickets & customize order forms",
95
- checkbox: [
96
- "Create Events",
97
- "Edit Event Details",
98
- "Manage event status",
99
- "Manage tickets",
100
- "Manage Collections",
101
- ],
102
- },
103
- {
104
- icon: BookingIcon,
105
- title: "Booking",
106
- description:
107
- "Allow users to manage performers, their invitations and statuses",
108
- checkbox: [
109
- "Access the roster page and view performer profiles",
110
- "Edit performer profiles",
111
- "Send booking invitations",
112
- "Manually confirm/decline performers to spots",
113
- "Send avails requests",
114
- ],
115
- },
116
- {
117
- icon: VenueIcon,
118
- title: "Venue creation",
119
- description: "Allow users to create new venues",
120
- checkbox: ["Add/edit/delete venues"],
121
- },
122
- {
123
- icon: MarketingIcon,
124
- title: "Marketing",
125
- description:
126
- "Sell more tickets by creating campaigns, tracking engagements, etc.",
127
- checkbox: [
128
- "Access social media posts",
129
- "Manage tracking links",
130
- "Manage promo codes",
131
- ],
132
- },
133
- {
134
- icon: OrdersIcon,
135
- title: "Orders & attendees",
136
- description:
137
- "Allow users to view, update & refund orders, manage attendee guest or waitlists & release tickets",
138
- checkbox: [
139
- "Add attendees",
140
- "Manage orders, refunds, transfers and attendees",
141
- "View list of attendees",
142
- "Check in attendees",
143
- "Resend confirmation emails",
144
- "Override ticket restrictions",
145
- "Sell tickets at the door",
146
- "Revoke and reissue barcodes",
147
- ],
148
- },
149
- {
150
- icon: OrganisationIcon,
151
- title: "Organization",
152
- description:
153
- "Keep your users organized with assigned permissions per user, enable access to APIs & extensions",
154
- checkbox: [
155
- "Manage organization members & permissions",
156
- "Edit organization infomation",
157
- ],
158
- },
159
- {
160
- icon: EmailIcon,
161
- title: "Contacts",
162
- description:
163
- "Keep our users in the loop, select which emails you would like them to receive",
164
- checkbox: ["Email attendees", "Email/SMS performers"],
165
- },
166
- {
167
- icon: ReportingIcon,
168
- title: "Reporting",
169
- description:
170
- "Allow users to access, filter & export data across your organization",
171
- checkbox: ["Access reports pages"],
172
- },
173
- {
174
- icon: PayoutIcon,
175
- title: "Payouts & billing",
176
- description:
177
- "Users can configure payout methods, manage event payment options & track financials with reporting",
178
- checkbox: ["Manage financial accounts (Stripe)"],
179
- },
180
- ];
181
-
182
- /**
183
- * Parse a location string into street address and city/state/zip components
184
- * @param {string} locationString - Full location string (e.g., "3400 Warner Blvd, Burbank, CA 91505")
185
- * @returns {{street: string, cityStateZip: string}} Parsed location object
186
- */
187
- export function parseLocation(locationString) {
188
- if (!locationString) return { street: '', cityStateZip: '' };
189
-
190
- // Split by comma to separate components
191
- const parts = locationString.split(',').map(part => part.trim());
192
-
193
- if (parts.length >= 3) {
194
- // Format: "3400 Warner Blvd, Burbank, CA 91505"
195
- const street = parts[0];
196
- const cityStateZip = parts.slice(1).join(', ');
197
- return { street, cityStateZip };
198
- } else if (parts.length === 2) {
199
- // Format: "Street, City State Zip"
200
- return { street: parts[0], cityStateZip: parts[1] };
201
- } else {
202
- // Single part or unexpected format
203
- return { street: locationString, cityStateZip: '' };
204
- }
205
- }
206
-
207
- /**
208
- * Set authentication cookies with proper domain and security settings
209
- * @param {string} token - Authentication token
210
- * @param {Object} userDetails - User details object
211
- */
212
- export function setAuthCookies(token, userDetails, rememberMe = true) {
213
- const isProd = window.location.hostname.includes("get-micdrop.com");
214
- const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
215
- const secureAttr = window.location.protocol === "https:" ? "secure;" : "";
216
- const maxAge = rememberMe ? "max-age=2592000;" : ""; // 30 days or session
217
-
218
- document.cookie = `performer_token=${token}; path=/; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
219
- document.cookie = `userDetails=${encodeURIComponent(
220
- JSON.stringify(userDetails),
221
- )}; path=/; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
222
- }
223
-
224
- /**
225
- * Clear authentication cookies
226
- */
227
- export function clearAuthCookies() {
228
- const isProd = window.location.hostname.includes("get-micdrop.com");
229
- const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
230
-
231
- document.cookie = `userDetails=; path=/; max-age=0; ${domainAttr}`;
232
- document.cookie = `performer_token=; path=/; max-age=0; ${domainAttr}`;
233
- }
234
-
235
- // Export microphone placeholder for universal event image fallback
236
- export { microphonePlaceholder };
237
-
238
- // ============================================
239
- // COOKIE UTILITIES
240
- // ============================================
241
-
242
- /**
243
- * Parse all cookies into an object
244
- * @returns {Record<string, string>} Cookie key-value pairs
245
- */
246
- export function parseCookies() {
247
- if (typeof document === "undefined") return {};
248
- return document.cookie.split("; ").reduce((acc, cookie) => {
249
- if (!cookie) return acc;
250
- const [name, ...valueParts] = cookie.split("=");
251
- acc[name] = decodeURIComponent(valueParts.join("="));
252
- return acc;
253
- }, {});
254
- }
255
-
256
- /**
257
- * Get a specific cookie value
258
- * @param {string} name - Cookie name
259
- * @returns {string|null} Cookie value or null
260
- */
261
- export function getCookie(name) {
262
- const cookies = parseCookies();
263
- return cookies[name] || null;
264
- }
265
-
266
- /**
267
- * Set a cookie with options
268
- * @param {string} name - Cookie name
269
- * @param {string} value - Cookie value
270
- * @param {Object} options - Cookie options
271
- */
272
- export function setCookie(name, value, options = {}) {
273
- const isProd = typeof window !== "undefined" && window.location.hostname.includes("get-micdrop.com");
274
- const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
275
- const secureAttr = typeof window !== "undefined" && window.location.protocol === "https:" ? "secure;" : "";
276
- const maxAge = options.maxAge ? `max-age=${options.maxAge};` : "";
277
- const path = options.path || "/";
278
-
279
- document.cookie = `${name}=${encodeURIComponent(value)}; path=${path}; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
280
- }
281
-
282
- /**
283
- * Get the performer token from cookies
284
- * @returns {string|null} Token or null
285
- */
286
- export function getPerformerToken() {
287
- return getCookie("performer_token");
288
- }
289
-
290
- /**
291
- * Get user details from cookies
292
- * @returns {Object|null} User details or null
293
- */
294
- export function getUserDetails() {
295
- const details = getCookie("userDetails");
296
- if (!details) return null;
297
- try {
298
- return JSON.parse(details);
299
- } catch {
300
- return null;
301
- }
302
- }
303
-
304
- /**
305
- * Get suppressed alerts from cookies
306
- * @returns {string[]} Array of suppressed alert IDs
307
- */
308
- export function getSuppressedAlerts() {
309
- const alerts = getCookie("suppressedAlerts");
310
- if (!alerts) return [];
311
- try {
312
- return JSON.parse(alerts);
313
- } catch {
314
- return [];
315
- }
316
- }
317
-
318
- /**
319
- * Save suppressed alerts to cookies
320
- * @param {string[]} alertIds - Array of alert IDs to suppress
321
- */
322
- export function saveSuppressedAlerts(alertIds) {
323
- setCookie("suppressedAlerts", JSON.stringify(alertIds), { maxAge: 31536000 }); // 1 year
324
- }
325
-
326
- // ============================================
327
- // DATA FETCHING UTILITIES
328
- // ============================================
329
-
330
- /**
331
- * Fetch data from an API endpoint with error handling
332
- * @param {string} endpoint - API endpoint
333
- * @param {Object} options - Fetch options
334
- * @returns {Promise<{data: any, error: string|null}>}
335
- */
336
- export async function fetchData(endpoint, options = {}) {
337
- try {
338
- const res = await fetch(endpoint, {
339
- headers: { "Content-Type": "application/json", ...options.headers },
340
- ...options,
341
- });
342
-
343
- if (!res.ok) {
344
- const errorText = await res.text().catch(() => "Unknown error");
345
- throw new Error(errorText || `Request failed with status ${res.status}`);
346
- }
347
-
348
- const data = await res.json();
349
- return { data, error: null };
350
- } catch (err) {
351
- return { data: null, error: err.message };
352
- }
353
- }
354
-
1
+ import { twMerge } from "tailwind-merge";
2
+ import clsx from "clsx";
3
+ import EventIcon from "../assets/svg/role/event.svg";
4
+ import BookingIcon from "../assets/svg/role/booking.svg";
5
+ import EmailIcon from "../assets/svg/role/emails.svg";
6
+ import VenueIcon from "../assets/svg/role/venue.svg";
7
+ import PayoutIcon from "../assets/svg/role/payout.svg";
8
+ import MarketingIcon from "../assets/svg/role/marketing.svg";
9
+ import OrdersIcon from "../assets/svg/role/orders.svg";
10
+ import OrganisationIcon from "../assets/svg/role/organisation.svg";
11
+ import ReportingIcon from "../assets/svg/role/reporting.svg";
12
+ import microphonePlaceholder from "../assets/images/microphone.png";
13
+
14
+ export function classNames(...classes) {
15
+ return classes.filter(Boolean).join(" ");
16
+ }
17
+
18
+ export function truncateTitle(title, maxLength) {
19
+ if (title.length > maxLength) {
20
+ return title.slice(0, maxLength) + "...";
21
+ }
22
+ return title;
23
+ }
24
+
25
+ export function convertToCustomDateFormat(isoString) {
26
+ const date = new Date(isoString);
27
+
28
+ const year = date.getUTCFullYear();
29
+ const month = date.getUTCMonth();
30
+ const day = date.getUTCDate();
31
+
32
+ const customDate = new Date(year, month, day);
33
+
34
+ return customDate;
35
+ }
36
+
37
+ export function cn(...inputs) {
38
+ return twMerge(clsx(inputs));
39
+ }
40
+
41
+ export function getDays(params) {
42
+ if (params === "weeks") {
43
+ return [
44
+ { value: "monday", label: "Monday" },
45
+ { value: "tuesday", label: "Tuesday" },
46
+ { value: "wednesday", label: "Wednesday" },
47
+ { value: "thursday", label: "Thursday" },
48
+ { value: "friday", label: "Friday" },
49
+ ];
50
+ } else {
51
+ return Array.from({ length: 31 }, (_, i) => {
52
+ const day = i + 1;
53
+ const suffix =
54
+ day % 10 === 1 && day !== 11
55
+ ? "st"
56
+ : day % 10 === 2 && day !== 12
57
+ ? "nd"
58
+ : day % 10 === 3 && day !== 13
59
+ ? "rd"
60
+ : "th";
61
+ return {
62
+ value: day.toString(),
63
+ label: day + suffix,
64
+ };
65
+ });
66
+ }
67
+ }
68
+
69
+ // Function to get days number options based on selected time unit
70
+ export function getDaysNumberOptions(timeUnit) {
71
+ if (timeUnit === "months") {
72
+ return Array.from({ length: 12 }, (_, i) => ({
73
+ value: (i + 1).toString(),
74
+ label: (i + 1).toString(),
75
+ }));
76
+ } else if (timeUnit === "weeks") {
77
+ return Array.from({ length: 10 }, (_, i) => ({
78
+ value: (i + 1).toString(),
79
+ label: (i + 1).toString(),
80
+ }));
81
+ } else {
82
+ return Array.from({ length: 31 }, (_, i) => ({
83
+ value: (i + 1).toString(),
84
+ label: (i + 1).toString(),
85
+ }));
86
+ }
87
+ }
88
+
89
+ export const ROLE_PERMISSION_LIST = [
90
+ {
91
+ icon: EventIcon,
92
+ title: "Event creation",
93
+ description:
94
+ "Allow users to enter event info, create tickets & customize order forms",
95
+ checkbox: [
96
+ "Create Events",
97
+ "Edit Event Details",
98
+ "Manage event status",
99
+ "Manage tickets",
100
+ "Manage Collections",
101
+ ],
102
+ },
103
+ {
104
+ icon: BookingIcon,
105
+ title: "Booking",
106
+ description:
107
+ "Allow users to manage performers, their invitations and statuses",
108
+ checkbox: [
109
+ "Access the roster page and view performer profiles",
110
+ "Edit performer profiles",
111
+ "Send booking invitations",
112
+ "Manually confirm/decline performers to spots",
113
+ "Send avails requests",
114
+ ],
115
+ },
116
+ {
117
+ icon: VenueIcon,
118
+ title: "Venue creation",
119
+ description: "Allow users to create new venues",
120
+ checkbox: ["Add/edit/delete venues"],
121
+ },
122
+ {
123
+ icon: MarketingIcon,
124
+ title: "Marketing",
125
+ description:
126
+ "Sell more tickets by creating campaigns, tracking engagements, etc.",
127
+ checkbox: [
128
+ "Access social media posts",
129
+ "Manage tracking links",
130
+ "Manage promo codes",
131
+ ],
132
+ },
133
+ {
134
+ icon: OrdersIcon,
135
+ title: "Orders & attendees",
136
+ description:
137
+ "Allow users to view, update & refund orders, manage attendee guest or waitlists & release tickets",
138
+ checkbox: [
139
+ "Add attendees",
140
+ "Manage orders, refunds, transfers and attendees",
141
+ "View list of attendees",
142
+ "Check in attendees",
143
+ "Resend confirmation emails",
144
+ "Override ticket restrictions",
145
+ "Sell tickets at the door",
146
+ "Revoke and reissue barcodes",
147
+ ],
148
+ },
149
+ {
150
+ icon: OrganisationIcon,
151
+ title: "Organization",
152
+ description:
153
+ "Keep your users organized with assigned permissions per user, enable access to APIs & extensions",
154
+ checkbox: [
155
+ "Manage organization members & permissions",
156
+ "Edit organization infomation",
157
+ ],
158
+ },
159
+ {
160
+ icon: EmailIcon,
161
+ title: "Contacts",
162
+ description:
163
+ "Keep our users in the loop, select which emails you would like them to receive",
164
+ checkbox: ["Email attendees", "Email/SMS performers"],
165
+ },
166
+ {
167
+ icon: ReportingIcon,
168
+ title: "Reporting",
169
+ description:
170
+ "Allow users to access, filter & export data across your organization",
171
+ checkbox: ["Access reports pages"],
172
+ },
173
+ {
174
+ icon: PayoutIcon,
175
+ title: "Payouts & billing",
176
+ description:
177
+ "Users can configure payout methods, manage event payment options & track financials with reporting",
178
+ checkbox: ["Manage financial accounts (Stripe)"],
179
+ },
180
+ ];
181
+
182
+ /**
183
+ * Parse a location string into street address and city/state/zip components
184
+ * @param {string} locationString - Full location string (e.g., "3400 Warner Blvd, Burbank, CA 91505")
185
+ * @returns {{street: string, cityStateZip: string}} Parsed location object
186
+ */
187
+ export function parseLocation(locationString) {
188
+ if (!locationString) return { street: '', cityStateZip: '' };
189
+
190
+ // Split by comma to separate components
191
+ const parts = locationString.split(',').map(part => part.trim());
192
+
193
+ if (parts.length >= 3) {
194
+ // Format: "3400 Warner Blvd, Burbank, CA 91505"
195
+ const street = parts[0];
196
+ const cityStateZip = parts.slice(1).join(', ');
197
+ return { street, cityStateZip };
198
+ } else if (parts.length === 2) {
199
+ // Format: "Street, City State Zip"
200
+ return { street: parts[0], cityStateZip: parts[1] };
201
+ } else {
202
+ // Single part or unexpected format
203
+ return { street: locationString, cityStateZip: '' };
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Set authentication cookies with proper domain and security settings
209
+ * @param {string} token - Authentication token
210
+ * @param {Object} userDetails - User details object
211
+ */
212
+ export function setAuthCookies(token, userDetails, rememberMe = true) {
213
+ const isProd = window.location.hostname.includes("get-micdrop.com");
214
+ const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
215
+ const secureAttr = window.location.protocol === "https:" ? "secure;" : "";
216
+ const maxAge = rememberMe ? "max-age=2592000;" : ""; // 30 days or session
217
+
218
+ document.cookie = `performer_token=${token}; path=/; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
219
+ document.cookie = `userDetails=${encodeURIComponent(
220
+ JSON.stringify(userDetails),
221
+ )}; path=/; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
222
+ }
223
+
224
+ /**
225
+ * Clear authentication cookies
226
+ */
227
+ export function clearAuthCookies() {
228
+ const isProd = window.location.hostname.includes("get-micdrop.com");
229
+ const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
230
+
231
+ document.cookie = `userDetails=; path=/; max-age=0; ${domainAttr}`;
232
+ document.cookie = `performer_token=; path=/; max-age=0; ${domainAttr}`;
233
+ }
234
+
235
+ // Export microphone placeholder for universal event image fallback
236
+ export { microphonePlaceholder };
237
+
238
+ // ============================================
239
+ // COOKIE UTILITIES
240
+ // ============================================
241
+
242
+ /**
243
+ * Parse all cookies into an object
244
+ * @returns {Record<string, string>} Cookie key-value pairs
245
+ */
246
+ export function parseCookies() {
247
+ if (typeof document === "undefined") return {};
248
+ return document.cookie.split("; ").reduce((acc, cookie) => {
249
+ if (!cookie) return acc;
250
+ const [name, ...valueParts] = cookie.split("=");
251
+ acc[name] = decodeURIComponent(valueParts.join("="));
252
+ return acc;
253
+ }, {});
254
+ }
255
+
256
+ /**
257
+ * Get a specific cookie value
258
+ * @param {string} name - Cookie name
259
+ * @returns {string|null} Cookie value or null
260
+ */
261
+ export function getCookie(name) {
262
+ const cookies = parseCookies();
263
+ return cookies[name] || null;
264
+ }
265
+
266
+ /**
267
+ * Set a cookie with options
268
+ * @param {string} name - Cookie name
269
+ * @param {string} value - Cookie value
270
+ * @param {Object} options - Cookie options
271
+ */
272
+ export function setCookie(name, value, options = {}) {
273
+ const isProd = typeof window !== "undefined" && window.location.hostname.includes("get-micdrop.com");
274
+ const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
275
+ const secureAttr = typeof window !== "undefined" && window.location.protocol === "https:" ? "secure;" : "";
276
+ const maxAge = options.maxAge ? `max-age=${options.maxAge};` : "";
277
+ const path = options.path || "/";
278
+
279
+ document.cookie = `${name}=${encodeURIComponent(value)}; path=${path}; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
280
+ }
281
+
282
+ /**
283
+ * Get the performer token from cookies
284
+ * @returns {string|null} Token or null
285
+ */
286
+ export function getPerformerToken() {
287
+ return getCookie("performer_token");
288
+ }
289
+
290
+ /**
291
+ * Get user details from cookies
292
+ * @returns {Object|null} User details or null
293
+ */
294
+ export function getUserDetails() {
295
+ const details = getCookie("userDetails");
296
+ if (!details) return null;
297
+ try {
298
+ return JSON.parse(details);
299
+ } catch {
300
+ return null;
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Get suppressed alerts from cookies
306
+ * @returns {string[]} Array of suppressed alert IDs
307
+ */
308
+ export function getSuppressedAlerts() {
309
+ const alerts = getCookie("suppressedAlerts");
310
+ if (!alerts) return [];
311
+ try {
312
+ return JSON.parse(alerts);
313
+ } catch {
314
+ return [];
315
+ }
316
+ }
317
+
318
+ /**
319
+ * Save suppressed alerts to cookies
320
+ * @param {string[]} alertIds - Array of alert IDs to suppress
321
+ */
322
+ export function saveSuppressedAlerts(alertIds) {
323
+ setCookie("suppressedAlerts", JSON.stringify(alertIds), { maxAge: 31536000 }); // 1 year
324
+ }
325
+
326
+ // ============================================
327
+ // DATA FETCHING UTILITIES
328
+ // ============================================
329
+
330
+ /**
331
+ * Fetch data from an API endpoint with error handling
332
+ * @param {string} endpoint - API endpoint
333
+ * @param {Object} options - Fetch options
334
+ * @returns {Promise<{data: any, error: string|null}>}
335
+ */
336
+ export async function fetchData(endpoint, options = {}) {
337
+ try {
338
+ const res = await fetch(endpoint, {
339
+ headers: { "Content-Type": "application/json", ...options.headers },
340
+ ...options,
341
+ });
342
+
343
+ if (!res.ok) {
344
+ const errorText = await res.text().catch(() => "Unknown error");
345
+ throw new Error(errorText || `Request failed with status ${res.status}`);
346
+ }
347
+
348
+ const data = await res.json();
349
+ return { data, error: null };
350
+ } catch (err) {
351
+ return { data: null, error: err.message };
352
+ }
353
+ }
354
+
355
355
  /**
356
356
  * Post data to an API endpoint
357
357
  * @param {string} endpoint - API endpoint