@getmicdrop/svelte-components 5.3.12 → 5.3.13

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 (248) 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 +145 -145
  7. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  8. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  9. package/dist/components/Layout/Grid.svelte +109 -109
  10. package/dist/components/Layout/Section.svelte +80 -80
  11. package/dist/components/Layout/Sidebar.svelte +108 -108
  12. package/dist/components/Layout/Stack.svelte +90 -90
  13. package/dist/constants/formOptions.js +26 -26
  14. package/dist/constants/validation.js +91 -91
  15. package/dist/constants/validation.spec.js +64 -64
  16. package/dist/datetime/__tests__/format.test.d.ts +2 -0
  17. package/dist/datetime/__tests__/format.test.d.ts.map +1 -0
  18. package/dist/datetime/__tests__/format.test.js +268 -0
  19. package/dist/datetime/__tests__/integration.test.d.ts +2 -0
  20. package/dist/datetime/__tests__/integration.test.d.ts.map +1 -0
  21. package/dist/datetime/__tests__/integration.test.js +243 -0
  22. package/dist/datetime/__tests__/parse.test.d.ts +2 -0
  23. package/dist/datetime/__tests__/parse.test.d.ts.map +1 -0
  24. package/dist/datetime/__tests__/parse.test.js +261 -0
  25. package/dist/datetime/__tests__/timezone.test.d.ts +2 -0
  26. package/dist/datetime/__tests__/timezone.test.d.ts.map +1 -0
  27. package/dist/datetime/__tests__/timezone.test.js +214 -0
  28. package/dist/datetime/constants.d.ts +133 -0
  29. package/dist/datetime/constants.d.ts.map +1 -0
  30. package/dist/datetime/constants.js +112 -0
  31. package/dist/datetime/format.d.ts +158 -0
  32. package/dist/datetime/format.d.ts.map +1 -0
  33. package/dist/datetime/format.js +315 -0
  34. package/dist/datetime/index.d.ts +42 -0
  35. package/dist/datetime/index.d.ts.map +1 -0
  36. package/dist/datetime/index.js +44 -0
  37. package/dist/datetime/parse.d.ts +149 -0
  38. package/dist/datetime/parse.d.ts.map +1 -0
  39. package/dist/datetime/parse.js +276 -0
  40. package/dist/datetime/timezone.d.ts +95 -0
  41. package/dist/datetime/timezone.d.ts.map +1 -0
  42. package/dist/datetime/timezone.js +241 -0
  43. package/dist/datetime/types.d.ts +105 -0
  44. package/dist/datetime/types.d.ts.map +1 -0
  45. package/dist/datetime/types.js +31 -0
  46. package/dist/index.d.ts +10 -0
  47. package/dist/index.js +232 -218
  48. package/dist/patterns/data/DataGrid.svelte +45 -45
  49. package/dist/patterns/data/DataList.svelte +24 -24
  50. package/dist/patterns/data/DataTable.svelte +40 -40
  51. package/dist/patterns/forms/FormActions.spec.js +88 -88
  52. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  53. package/dist/patterns/forms/FormActions.svelte +46 -46
  54. package/dist/patterns/forms/FormGrid.svelte +33 -33
  55. package/dist/patterns/forms/FormSection.svelte +32 -32
  56. package/dist/patterns/forms/FormValidationSummary.spec.js +203 -203
  57. package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
  58. package/dist/patterns/forms/FormValidationSummary.svelte +67 -67
  59. package/dist/patterns/layout/Grid.svelte +35 -35
  60. package/dist/patterns/layout/Sidebar.svelte +39 -39
  61. package/dist/patterns/layout/Stack.svelte +45 -45
  62. package/dist/patterns/navigation/BottomNav.spec.js +130 -130
  63. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  64. package/dist/patterns/navigation/BottomNav.svelte +54 -54
  65. package/dist/patterns/navigation/Header.spec.js +203 -203
  66. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  67. package/dist/patterns/navigation/Header.svelte +240 -240
  68. package/dist/patterns/page/PageHeader.svelte +36 -36
  69. package/dist/patterns/page/PageLayout.svelte +40 -40
  70. package/dist/patterns/page/PageLoader.spec.js +54 -54
  71. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  72. package/dist/patterns/page/PageLoader.svelte +41 -41
  73. package/dist/patterns/page/SectionHeader.svelte +41 -41
  74. package/dist/presets/badges.js +112 -112
  75. package/dist/presets/buttons.js +76 -76
  76. package/dist/presets/index.js +9 -9
  77. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  78. package/dist/primitives/Accordion/Accordion.svelte +61 -61
  79. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  80. package/dist/primitives/Alert/Alert.spec.js +170 -170
  81. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  82. package/dist/primitives/Alert/Alert.svelte +65 -65
  83. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  84. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  85. package/dist/primitives/Badges/Badge.spec.js +103 -103
  86. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  87. package/dist/primitives/Badges/Badge.svelte +142 -142
  88. package/dist/primitives/BottomSheet/BottomSheet.spec.js +127 -127
  89. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  90. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  91. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +120 -120
  92. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  93. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  94. package/dist/primitives/Button/Button.spec.js +211 -211
  95. package/dist/primitives/Button/Button.stories.svelte +76 -76
  96. package/dist/primitives/Button/Button.svelte +301 -301
  97. package/dist/primitives/Button/ButtonSaveDemo.spec.js +48 -48
  98. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  99. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  100. package/dist/primitives/Card.spec.js +49 -49
  101. package/dist/primitives/Card.stories.svelte +22 -22
  102. package/dist/primitives/Card.svelte +28 -28
  103. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  104. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  105. package/dist/primitives/DarkModeToggle.spec.js +357 -357
  106. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  107. package/dist/primitives/DarkModeToggle.svelte +136 -136
  108. package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
  109. package/dist/primitives/Drawer/Drawer.svelte +214 -214
  110. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  111. package/dist/primitives/Dropdown/Dropdown.svelte +148 -148
  112. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  113. package/dist/primitives/Icons/ArrowLeft.svelte +20 -20
  114. package/dist/primitives/Icons/ArrowRight.svelte +20 -20
  115. package/dist/primitives/Icons/Availability.svelte +26 -26
  116. package/dist/primitives/Icons/Back.svelte +26 -26
  117. package/dist/primitives/Icons/CheckCircle.svelte +18 -18
  118. package/dist/primitives/Icons/CheckCircleOutline.svelte +27 -27
  119. package/dist/primitives/Icons/ChevronLeft.svelte +16 -16
  120. package/dist/primitives/Icons/ChevronRight.svelte +16 -16
  121. package/dist/primitives/Icons/Copy.svelte +27 -27
  122. package/dist/primitives/Icons/Cross.svelte +17 -17
  123. package/dist/primitives/Icons/DownArrow.svelte +20 -20
  124. package/dist/primitives/Icons/ErrorCircle.svelte +18 -18
  125. package/dist/primitives/Icons/FacebookIcon.svelte +13 -13
  126. package/dist/primitives/Icons/Home.svelte +27 -27
  127. package/dist/primitives/Icons/Icon.spec.js +175 -175
  128. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  129. package/dist/primitives/Icons/Icon.svelte +63 -63
  130. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  131. package/dist/primitives/Icons/ImageOutline.svelte +19 -19
  132. package/dist/primitives/Icons/Info.svelte +19 -19
  133. package/dist/primitives/Icons/InstagramIcon.svelte +19 -19
  134. package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
  135. package/dist/primitives/Icons/Message.svelte +27 -27
  136. package/dist/primitives/Icons/MoonIcon.svelte +16 -16
  137. package/dist/primitives/Icons/More.svelte +33 -33
  138. package/dist/primitives/Icons/MoreHori.spec.js +67 -67
  139. package/dist/primitives/Icons/MoreHori.svelte +34 -34
  140. package/dist/primitives/Icons/Notification.svelte +26 -26
  141. package/dist/primitives/Icons/Payment.svelte +26 -26
  142. package/dist/primitives/Icons/Profile.svelte +33 -33
  143. package/dist/primitives/Icons/Reload.svelte +41 -41
  144. package/dist/primitives/Icons/Shows.svelte +33 -33
  145. package/dist/primitives/Icons/Signout.svelte +33 -33
  146. package/dist/primitives/Icons/SunIcon.svelte +19 -19
  147. package/dist/primitives/Icons/TiktokIcon.svelte +13 -13
  148. package/dist/primitives/Icons/TrashBinOutline.svelte +19 -19
  149. package/dist/primitives/Icons/TwitterIcon.svelte +13 -13
  150. package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
  151. package/dist/primitives/Icons/WarningIcon.svelte +24 -24
  152. package/dist/primitives/Input/Input.spec.js +573 -573
  153. package/dist/primitives/Input/Input.stories.svelte +139 -139
  154. package/dist/primitives/Input/Input.svelte +444 -444
  155. package/dist/primitives/Input/Select.spec.js +218 -218
  156. package/dist/primitives/Input/Select.stories.svelte +112 -112
  157. package/dist/primitives/Input/Select.svelte +232 -232
  158. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  159. package/dist/primitives/Input/Textarea.svelte +79 -79
  160. package/dist/primitives/Label/Label.svelte +37 -37
  161. package/dist/primitives/Modal/Modal.spec.js +95 -95
  162. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  163. package/dist/primitives/Modal/Modal.svelte +158 -158
  164. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  165. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  166. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  167. package/dist/primitives/Radio/Radio.svelte +67 -67
  168. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  169. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  170. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  171. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  172. package/dist/primitives/Skeleton/Skeleton.svelte +52 -52
  173. package/dist/primitives/Spinner/Spinner.spec.js +75 -75
  174. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  175. package/dist/primitives/Spinner/Spinner.svelte +57 -57
  176. package/dist/primitives/Tabs/TabItem.svelte +51 -51
  177. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  178. package/dist/primitives/Tabs/Tabs.svelte +128 -128
  179. package/dist/primitives/Toggle.spec.js +127 -127
  180. package/dist/primitives/Toggle.stories.svelte +92 -92
  181. package/dist/primitives/Toggle.svelte +71 -71
  182. package/dist/primitives/Typography/Typography.svelte +53 -53
  183. package/dist/primitives/ValidationError.spec.js +103 -103
  184. package/dist/primitives/ValidationError.stories.svelte +111 -111
  185. package/dist/primitives/ValidationError.svelte +29 -29
  186. package/dist/recipes/CropImage/CropImage.spec.js +216 -216
  187. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  188. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  189. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  190. package/dist/recipes/ImageUploader/ImageUploader.svelte +980 -980
  191. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  192. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +47 -47
  193. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  194. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +112 -112
  195. package/dist/recipes/feedback/ErrorDisplay.svelte +38 -38
  196. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +129 -129
  197. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +167 -167
  198. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  199. package/dist/recipes/fields/FormField.svelte +58 -58
  200. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  201. package/dist/recipes/fields/SelectField.svelte +82 -82
  202. package/dist/recipes/fields/TextareaField.svelte +101 -101
  203. package/dist/recipes/fields/ToggleField.svelte +60 -60
  204. package/dist/recipes/fields/index.js +7 -7
  205. package/dist/recipes/inputs/MultiSelect.spec.js +257 -257
  206. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  207. package/dist/recipes/inputs/MultiSelect.svelte +244 -244
  208. package/dist/recipes/inputs/OTPInput.spec.js +238 -238
  209. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  210. package/dist/recipes/inputs/OTPInput.svelte +102 -102
  211. package/dist/recipes/inputs/PasswordInput.svelte +100 -100
  212. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +173 -173
  213. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +108 -108
  214. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +300 -300
  215. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +165 -165
  216. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +337 -337
  217. package/dist/recipes/inputs/Search.svelte +85 -85
  218. package/dist/recipes/inputs/SelectDropdown.svelte +161 -161
  219. package/dist/recipes/modals/AlertModal.svelte +130 -130
  220. package/dist/recipes/modals/ConfirmationModal.spec.js +191 -191
  221. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  222. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  223. package/dist/recipes/modals/InputModal.svelte +182 -182
  224. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  225. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  226. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  227. package/dist/recipes/modals/StatusModal.svelte +206 -206
  228. package/dist/services/EventService.js +75 -75
  229. package/dist/services/EventService.spec.js +217 -217
  230. package/dist/services/ShowService.spec.js +342 -342
  231. package/dist/stores/auth.js +93 -6
  232. package/dist/stores/auth.spec.js +310 -2
  233. package/dist/stores/toaster.js +13 -13
  234. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  235. package/dist/stories/ButtonAuditReview.svelte +427 -427
  236. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  237. package/dist/stories/PatternsGallery.svelte +388 -388
  238. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  239. package/dist/stories/PrimitivesGallery.svelte +752 -752
  240. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  241. package/dist/stories/RecipesGallery.svelte +441 -441
  242. package/dist/stories/button-audit-manifest.json +11186 -11186
  243. package/dist/tailwind/preset.cjs +82 -82
  244. package/dist/telemetry.js +357 -357
  245. package/dist/tokens/tokens.css +87 -87
  246. package/dist/utils/apiConfig.js +49 -49
  247. package/dist/utils/utils.js +9 -1
  248. package/package.json +233 -191
@@ -1,240 +1,240 @@
1
- <script>
2
- import { page } from '../../__LIB_STORES__.js';
3
- import { base } from '../../__LIB_PATHS__.js';
4
- import { goto } from '../../__LIB_NAVIGATION__.js';
5
- import Logo from "../../assets/images/Logo.png";
6
- import Avatar from "../../primitives/Avatar/Avatar.svelte";
7
- import DarkModeToggle from "../../primitives/DarkModeToggle.svelte";
8
- import Icon from "../../primitives/Icons/Icon.svelte";
9
- import ChevronLeft from "../../primitives/Icons/ChevronLeft.svelte";
10
- import Button from "../../primitives/Button/Button.svelte";
11
- import { fade, fly } from "svelte/transition";
12
- import { cubicOut } from "svelte/easing";
13
- import { portal } from "../../utils/portal.js";
14
- import { typography } from '../../tokens/typography';
15
-
16
- let {
17
- signoutHandler = () => {},
18
- name = "",
19
- avatar = "",
20
- email = "",
21
- navLinks = [],
22
- dropdownLinks = [],
23
- showBackButton = false,
24
- } = $props();
25
-
26
- let showMobileSheet = $state(false);
27
- let showDesktopDropdown = $state(false);
28
-
29
- let currentPath = $derived($page.url.pathname);
30
-
31
- function isActive(href, path) {
32
- if (href === `${base}/` || href === '/') {
33
- return path === href || path === `${base}/`;
34
- }
35
- return path.startsWith(href);
36
- }
37
-
38
- function handleDropdownItemClick(href) {
39
- showDesktopDropdown = false;
40
- goto(href);
41
- }
42
-
43
- function handleMobileSheetItemClick(href) {
44
- showMobileSheet = false;
45
- goto(href);
46
- }
47
- </script>
48
-
49
- {#if showBackButton}
50
- <div class="block flex-1 md:hidden">
51
- <Button variant="ghost" size="sm" onclick={() => history.back()}>
52
- <ChevronLeft class="w-5 h-5" />
53
- Back
54
- </Button>
55
- </div>
56
- <div class="hidden md:flex w-full items-center">
57
- <div class="flex items-center">
58
- <a href="/" class="flex items-center"><img src={Logo} alt="Micdrop" width="100" /></a>
59
- </div>
60
-
61
- <nav class="hidden md:flex items-center gap-1 ml-8 flex-1">
62
- {#each navLinks as { label, href }}
63
- <a
64
- {href}
65
- class={`px-4 py-2 ${typography.label} ${typography.textMuted} no-underline rounded-lg transition-all duration-150
66
- hover:text-gray-900 hover:bg-gray-100 hover:no-underline dark:hover:text-white dark:hover:bg-gray-700
67
- ${isActive(href, currentPath) ? 'text-blue-700 bg-gray-100 dark:text-blue-500 dark:bg-gray-700' : ''}`}
68
- >
69
- {label}
70
- </a>
71
- {/each}
72
- </nav>
73
-
74
- <div class="flex items-center gap-3">
75
- <DarkModeToggle />
76
- <div class="relative ml-1">
77
- <Button
78
- variant="avatar"
79
- size="md"
80
- onclick={() => showDesktopDropdown = !showDesktopDropdown}
81
- >
82
- <Avatar src={avatar} rounded size="md" />
83
- </Button>
84
-
85
- {#if showDesktopDropdown}
86
- <!-- svelte-ignore a11y_click_events_have_key_events -->
87
- <!-- svelte-ignore a11y_no_static_element_interactions -->
88
- <div class="fixed inset-0 z-30 bg-transparent" onclick={() => showDesktopDropdown = false}></div>
89
- <div class="absolute top-[calc(100%+0.5rem)] right-0 w-56 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-40 overflow-hidden">
90
- <div class="py-3 px-4 border-b border-gray-200 dark:border-gray-700">
91
- <span class={`block ${typography.label}`}>{name || "Performer"}</span>
92
- <span class={`block ${typography.xsMuted} mt-0.5`}>{email || ""}</span>
93
- </div>
94
- {#each dropdownLinks as { label, href }}
95
- <Button
96
- variant="menu-item"
97
- size="md"
98
- onclick={() => handleDropdownItemClick(href)}
99
- >
100
- {label}
101
- </Button>
102
- {/each}
103
- <div class="h-px bg-gray-200 dark:bg-gray-700"></div>
104
- <Button
105
- variant="menu-item-danger"
106
- size="md"
107
- onclick={() => { showDesktopDropdown = false; signoutHandler(); }}
108
- >
109
- Sign out
110
- </Button>
111
- </div>
112
- {/if}
113
- </div>
114
- </div>
115
- </div>
116
- {:else}
117
- <div class="flex items-center">
118
- <a href="/" class="flex items-center"><img src={Logo} alt="Micdrop" width="100" /></a>
119
- </div>
120
-
121
- <nav class="hidden md:flex items-center gap-1 ml-8 flex-1">
122
- {#each navLinks as { label, href }}
123
- <a
124
- {href}
125
- class={`px-4 py-2 ${typography.label} ${typography.textMuted} no-underline rounded-lg transition-all duration-150
126
- hover:text-gray-900 hover:bg-gray-100 hover:no-underline dark:hover:text-white dark:hover:bg-gray-700
127
- ${isActive(href, currentPath) ? 'text-blue-700 bg-gray-100 dark:text-blue-500 dark:bg-gray-700' : ''}`}
128
- >
129
- {label}
130
- </a>
131
- {/each}
132
- </nav>
133
-
134
- <div class="flex items-center gap-3">
135
- <DarkModeToggle />
136
-
137
- <div class="relative ml-1">
138
- <Button
139
- variant="avatar"
140
- size="md"
141
- class="block md:hidden"
142
- onclick={() => showMobileSheet = true}
143
- >
144
- <Avatar src={avatar} rounded size="md" />
145
- </Button>
146
-
147
- <Button
148
- variant="avatar"
149
- size="md"
150
- class="hidden md:block"
151
- onclick={() => showDesktopDropdown = !showDesktopDropdown}
152
- >
153
- <Avatar src={avatar} rounded size="md" />
154
- </Button>
155
-
156
- {#if showDesktopDropdown}
157
- <!-- svelte-ignore a11y_click_events_have_key_events -->
158
- <!-- svelte-ignore a11y_no_static_element_interactions -->
159
- <div class="fixed inset-0 z-30 bg-transparent" onclick={() => showDesktopDropdown = false}></div>
160
- <div class="absolute top-[calc(100%+0.5rem)] right-0 w-56 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-40 overflow-hidden">
161
- <div class="py-3 px-4 border-b border-gray-200 dark:border-gray-700">
162
- <span class={`block ${typography.label}`}>{name || "Performer"}</span>
163
- <span class={`block ${typography.xsMuted} mt-0.5`}>{email || ""}</span>
164
- </div>
165
- {#each dropdownLinks as { label, href }}
166
- <Button
167
- variant="menu-item"
168
- size="md"
169
- onclick={() => handleDropdownItemClick(href)}
170
- >
171
- {label}
172
- </Button>
173
- {/each}
174
- <div class="h-px bg-gray-200 dark:bg-gray-700"></div>
175
- <Button
176
- variant="menu-item-danger"
177
- size="md"
178
- onclick={() => { showDesktopDropdown = false; signoutHandler(); }}
179
- >
180
- Sign out
181
- </Button>
182
- </div>
183
- {/if}
184
- </div>
185
- </div>
186
- {/if}
187
-
188
- {#if showMobileSheet}
189
- <!-- svelte-ignore a11y_click_events_have_key_events -->
190
- <!-- svelte-ignore a11y_no_static_element_interactions -->
191
- <div
192
- class="fixed inset-0 flex items-end justify-center bg-black/50 z-50 touch-none overscroll-none"
193
- onclick={() => { showMobileSheet = false; }}
194
- transition:fade={{ duration: 300 }}
195
- use:portal
196
- >
197
- <!-- svelte-ignore a11y_click_events_have_key_events -->
198
- <!-- svelte-ignore a11y_no_static_element_interactions -->
199
- <div
200
- class="bg-white dark:bg-gray-800 rounded-t-3xl shadow-xl w-full max-h-[90vh] max-h-[90dvh] overflow-hidden pb-[var(--safe-bottom,0px)] touch-pan-y overscroll-contain"
201
- onclick={(e) => e.stopPropagation()}
202
- transition:fly={{ y: 300, duration: 300, easing: cubicOut }}
203
- >
204
- <div class="flex justify-center pt-3 pb-2">
205
- <div class="w-10 h-1 bg-gray-300 dark:bg-gray-600 rounded-sm"></div>
206
- </div>
207
-
208
- <div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
209
- <p class={`${typography.h4} m-0`}>{name || "Performer"}</p>
210
- <p class={`${typography.smMuted} mt-0.5 m-0`}>{email || ""}</p>
211
- </div>
212
-
213
- <div class="py-2">
214
- {#each dropdownLinks as { label, href }}
215
- <Button
216
- variant="menu-item"
217
- size="lg"
218
- onclick={() => handleMobileSheetItemClick(href)}
219
- >
220
- {label}
221
- </Button>
222
- {/each}
223
-
224
- <Button
225
- variant="menu-item-danger"
226
- size="lg"
227
- onclick={() => { showMobileSheet = false; signoutHandler(); }}
228
- >
229
- Sign Out
230
- </Button>
231
- </div>
232
-
233
- <div class="border-t-8 border-gray-100 dark:border-gray-700">
234
- <Button variant="ghost" size="full" class="py-4 text-base font-semibold" onclick={() => showMobileSheet = false}>
235
- Cancel
236
- </Button>
237
- </div>
238
- </div>
239
- </div>
240
- {/if}
1
+ <script>
2
+ import { page } from '../../__LIB_STORES__.js';
3
+ import { base } from '../../__LIB_PATHS__.js';
4
+ import { goto } from '../../__LIB_NAVIGATION__.js';
5
+ import Logo from "../../assets/images/Logo.png";
6
+ import Avatar from "../../primitives/Avatar/Avatar.svelte";
7
+ import DarkModeToggle from "../../primitives/DarkModeToggle.svelte";
8
+ import Icon from "../../primitives/Icons/Icon.svelte";
9
+ import ChevronLeft from "../../primitives/Icons/ChevronLeft.svelte";
10
+ import Button from "../../primitives/Button/Button.svelte";
11
+ import { fade, fly } from "svelte/transition";
12
+ import { cubicOut } from "svelte/easing";
13
+ import { portal } from "../../utils/portal.js";
14
+ import { typography } from '../../tokens/typography';
15
+
16
+ let {
17
+ signoutHandler = () => {},
18
+ name = "",
19
+ avatar = "",
20
+ email = "",
21
+ navLinks = [],
22
+ dropdownLinks = [],
23
+ showBackButton = false,
24
+ } = $props();
25
+
26
+ let showMobileSheet = $state(false);
27
+ let showDesktopDropdown = $state(false);
28
+
29
+ let currentPath = $derived($page.url.pathname);
30
+
31
+ function isActive(href, path) {
32
+ if (href === `${base}/` || href === '/') {
33
+ return path === href || path === `${base}/`;
34
+ }
35
+ return path.startsWith(href);
36
+ }
37
+
38
+ function handleDropdownItemClick(href) {
39
+ showDesktopDropdown = false;
40
+ goto(href);
41
+ }
42
+
43
+ function handleMobileSheetItemClick(href) {
44
+ showMobileSheet = false;
45
+ goto(href);
46
+ }
47
+ </script>
48
+
49
+ {#if showBackButton}
50
+ <div class="block flex-1 md:hidden">
51
+ <Button variant="ghost" size="sm" onclick={() => history.back()}>
52
+ <ChevronLeft class="w-5 h-5" />
53
+ Back
54
+ </Button>
55
+ </div>
56
+ <div class="hidden md:flex w-full items-center">
57
+ <div class="flex items-center">
58
+ <a href="/" class="flex items-center"><img src={Logo} alt="Micdrop" width="100" /></a>
59
+ </div>
60
+
61
+ <nav class="hidden md:flex items-center gap-1 ml-8 flex-1">
62
+ {#each navLinks as { label, href }}
63
+ <a
64
+ {href}
65
+ class={`px-4 py-2 ${typography.label} ${typography.textMuted} no-underline rounded-lg transition-all duration-150
66
+ hover:text-gray-900 hover:bg-gray-100 hover:no-underline dark:hover:text-white dark:hover:bg-gray-700
67
+ ${isActive(href, currentPath) ? 'text-blue-700 bg-gray-100 dark:text-blue-500 dark:bg-gray-700' : ''}`}
68
+ >
69
+ {label}
70
+ </a>
71
+ {/each}
72
+ </nav>
73
+
74
+ <div class="flex items-center gap-3">
75
+ <DarkModeToggle />
76
+ <div class="relative ml-1">
77
+ <Button
78
+ variant="avatar"
79
+ size="md"
80
+ onclick={() => showDesktopDropdown = !showDesktopDropdown}
81
+ >
82
+ <Avatar src={avatar} rounded size="md" />
83
+ </Button>
84
+
85
+ {#if showDesktopDropdown}
86
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
87
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
88
+ <div class="fixed inset-0 z-30 bg-transparent" onclick={() => showDesktopDropdown = false}></div>
89
+ <div class="absolute top-[calc(100%+0.5rem)] right-0 w-56 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-40 overflow-hidden">
90
+ <div class="py-3 px-4 border-b border-gray-200 dark:border-gray-700">
91
+ <span class={`block ${typography.label}`}>{name || "Performer"}</span>
92
+ <span class={`block ${typography.xsMuted} mt-0.5`}>{email || ""}</span>
93
+ </div>
94
+ {#each dropdownLinks as { label, href }}
95
+ <Button
96
+ variant="menu-item"
97
+ size="md"
98
+ onclick={() => handleDropdownItemClick(href)}
99
+ >
100
+ {label}
101
+ </Button>
102
+ {/each}
103
+ <div class="h-px bg-gray-200 dark:bg-gray-700"></div>
104
+ <Button
105
+ variant="menu-item-danger"
106
+ size="md"
107
+ onclick={() => { showDesktopDropdown = false; signoutHandler(); }}
108
+ >
109
+ Sign out
110
+ </Button>
111
+ </div>
112
+ {/if}
113
+ </div>
114
+ </div>
115
+ </div>
116
+ {:else}
117
+ <div class="flex items-center">
118
+ <a href="/" class="flex items-center"><img src={Logo} alt="Micdrop" width="100" /></a>
119
+ </div>
120
+
121
+ <nav class="hidden md:flex items-center gap-1 ml-8 flex-1">
122
+ {#each navLinks as { label, href }}
123
+ <a
124
+ {href}
125
+ class={`px-4 py-2 ${typography.label} ${typography.textMuted} no-underline rounded-lg transition-all duration-150
126
+ hover:text-gray-900 hover:bg-gray-100 hover:no-underline dark:hover:text-white dark:hover:bg-gray-700
127
+ ${isActive(href, currentPath) ? 'text-blue-700 bg-gray-100 dark:text-blue-500 dark:bg-gray-700' : ''}`}
128
+ >
129
+ {label}
130
+ </a>
131
+ {/each}
132
+ </nav>
133
+
134
+ <div class="flex items-center gap-3">
135
+ <DarkModeToggle />
136
+
137
+ <div class="relative ml-1">
138
+ <Button
139
+ variant="avatar"
140
+ size="md"
141
+ class="block md:hidden"
142
+ onclick={() => showMobileSheet = true}
143
+ >
144
+ <Avatar src={avatar} rounded size="md" />
145
+ </Button>
146
+
147
+ <Button
148
+ variant="avatar"
149
+ size="md"
150
+ class="hidden md:block"
151
+ onclick={() => showDesktopDropdown = !showDesktopDropdown}
152
+ >
153
+ <Avatar src={avatar} rounded size="md" />
154
+ </Button>
155
+
156
+ {#if showDesktopDropdown}
157
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
158
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
159
+ <div class="fixed inset-0 z-30 bg-transparent" onclick={() => showDesktopDropdown = false}></div>
160
+ <div class="absolute top-[calc(100%+0.5rem)] right-0 w-56 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-40 overflow-hidden">
161
+ <div class="py-3 px-4 border-b border-gray-200 dark:border-gray-700">
162
+ <span class={`block ${typography.label}`}>{name || "Performer"}</span>
163
+ <span class={`block ${typography.xsMuted} mt-0.5`}>{email || ""}</span>
164
+ </div>
165
+ {#each dropdownLinks as { label, href }}
166
+ <Button
167
+ variant="menu-item"
168
+ size="md"
169
+ onclick={() => handleDropdownItemClick(href)}
170
+ >
171
+ {label}
172
+ </Button>
173
+ {/each}
174
+ <div class="h-px bg-gray-200 dark:bg-gray-700"></div>
175
+ <Button
176
+ variant="menu-item-danger"
177
+ size="md"
178
+ onclick={() => { showDesktopDropdown = false; signoutHandler(); }}
179
+ >
180
+ Sign out
181
+ </Button>
182
+ </div>
183
+ {/if}
184
+ </div>
185
+ </div>
186
+ {/if}
187
+
188
+ {#if showMobileSheet}
189
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
190
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
191
+ <div
192
+ class="fixed inset-0 flex items-end justify-center bg-black/50 z-50 touch-none overscroll-none"
193
+ onclick={() => { showMobileSheet = false; }}
194
+ transition:fade={{ duration: 300 }}
195
+ use:portal
196
+ >
197
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
198
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
199
+ <div
200
+ class="bg-white dark:bg-gray-800 rounded-t-3xl shadow-xl w-full max-h-[90vh] max-h-[90dvh] overflow-hidden pb-[var(--safe-bottom,0px)] touch-pan-y overscroll-contain"
201
+ onclick={(e) => e.stopPropagation()}
202
+ transition:fly={{ y: 300, duration: 300, easing: cubicOut }}
203
+ >
204
+ <div class="flex justify-center pt-3 pb-2">
205
+ <div class="w-10 h-1 bg-gray-300 dark:bg-gray-600 rounded-sm"></div>
206
+ </div>
207
+
208
+ <div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
209
+ <p class={`${typography.h4} m-0`}>{name || "Performer"}</p>
210
+ <p class={`${typography.smMuted} mt-0.5 m-0`}>{email || ""}</p>
211
+ </div>
212
+
213
+ <div class="py-2">
214
+ {#each dropdownLinks as { label, href }}
215
+ <Button
216
+ variant="menu-item"
217
+ size="lg"
218
+ onclick={() => handleMobileSheetItemClick(href)}
219
+ >
220
+ {label}
221
+ </Button>
222
+ {/each}
223
+
224
+ <Button
225
+ variant="menu-item-danger"
226
+ size="lg"
227
+ onclick={() => { showMobileSheet = false; signoutHandler(); }}
228
+ >
229
+ Sign Out
230
+ </Button>
231
+ </div>
232
+
233
+ <div class="border-t-8 border-gray-100 dark:border-gray-700">
234
+ <Button variant="ghost" size="full" class="py-4 text-base font-semibold" onclick={() => showMobileSheet = false}>
235
+ Cancel
236
+ </Button>
237
+ </div>
238
+ </div>
239
+ </div>
240
+ {/if}
@@ -1,36 +1,36 @@
1
- <script>
2
- import Breadcrumb from '../../primitives/Breadcrumb/Breadcrumb.svelte';
3
- import { typography } from '../../tokens/typography';
4
-
5
- let {
6
- title = '',
7
- subtitle = '',
8
- breadcrumb = [],
9
- showBack = true,
10
- class: className = '',
11
- actions,
12
- } = $props();
13
- </script>
14
-
15
- <header class="space-y-4 {className}">
16
- {#if breadcrumb.length > 0}
17
- <Breadcrumb data={breadcrumb} {showBack} />
18
- {/if}
19
-
20
- <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4">
21
- <div>
22
- {#if title}
23
- <h1 class={typography.h1}>{title}</h1>
24
- {/if}
25
- {#if subtitle}
26
- <p class={`mt-1 ${typography.smMuted}`}>{subtitle}</p>
27
- {/if}
28
- </div>
29
-
30
- {#if actions}
31
- <div class="flex items-center gap-3">
32
- {@render actions()}
33
- </div>
34
- {/if}
35
- </div>
36
- </header>
1
+ <script>
2
+ import Breadcrumb from '../../primitives/Breadcrumb/Breadcrumb.svelte';
3
+ import { typography } from '../../tokens/typography';
4
+
5
+ let {
6
+ title = '',
7
+ subtitle = '',
8
+ breadcrumb = [],
9
+ showBack = true,
10
+ class: className = '',
11
+ actions,
12
+ } = $props();
13
+ </script>
14
+
15
+ <header class="space-y-4 {className}">
16
+ {#if breadcrumb.length > 0}
17
+ <Breadcrumb data={breadcrumb} {showBack} />
18
+ {/if}
19
+
20
+ <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4">
21
+ <div>
22
+ {#if title}
23
+ <h1 class={typography.h1}>{title}</h1>
24
+ {/if}
25
+ {#if subtitle}
26
+ <p class={`mt-1 ${typography.smMuted}`}>{subtitle}</p>
27
+ {/if}
28
+ </div>
29
+
30
+ {#if actions}
31
+ <div class="flex items-center gap-3">
32
+ {@render actions()}
33
+ </div>
34
+ {/if}
35
+ </div>
36
+ </header>
@@ -1,40 +1,40 @@
1
- <script>
2
- import Breadcrumb from '../../primitives/Breadcrumb/Breadcrumb.svelte';
3
- import Card from '../../primitives/Card.svelte';
4
- import { typography } from '../../tokens/typography';
5
-
6
- let {
7
- breadcrumb = [],
8
- title = '',
9
- subtitle = '',
10
- variant = 'default',
11
- maxWidth = 'max-w-4xl',
12
- className = '',
13
- showHeader = true,
14
- children,
15
- actions,
16
- } = $props();
17
- </script>
18
-
19
- {#if showHeader}
20
- <nav class={`pt-4 px-4 ${typography.h3}`}>
21
- <div class="flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4">
22
- <Breadcrumb data={breadcrumb} {title} {subtitle} />
23
- {#if actions}
24
- <div class="flex items-center gap-3 flex-shrink-0">
25
- {@render actions()}
26
- </div>
27
- {/if}
28
- </div>
29
- </nav>
30
- {/if}
31
-
32
- <div class="px-4 pt-4 pb-20 md:pb-6 {className}">
33
- {#if variant === 'card'}
34
- <Card className="bg-white dark:bg-gray-800 {maxWidth}">
35
- {@render children?.()}
36
- </Card>
37
- {:else}
38
- {@render children?.()}
39
- {/if}
40
- </div>
1
+ <script>
2
+ import Breadcrumb from '../../primitives/Breadcrumb/Breadcrumb.svelte';
3
+ import Card from '../../primitives/Card.svelte';
4
+ import { typography } from '../../tokens/typography';
5
+
6
+ let {
7
+ breadcrumb = [],
8
+ title = '',
9
+ subtitle = '',
10
+ variant = 'default',
11
+ maxWidth = 'max-w-4xl',
12
+ className = '',
13
+ showHeader = true,
14
+ children,
15
+ actions,
16
+ } = $props();
17
+ </script>
18
+
19
+ {#if showHeader}
20
+ <nav class={`pt-4 px-4 ${typography.h3}`}>
21
+ <div class="flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4">
22
+ <Breadcrumb data={breadcrumb} {title} {subtitle} />
23
+ {#if actions}
24
+ <div class="flex items-center gap-3 flex-shrink-0">
25
+ {@render actions()}
26
+ </div>
27
+ {/if}
28
+ </div>
29
+ </nav>
30
+ {/if}
31
+
32
+ <div class="px-4 pt-4 pb-20 md:pb-6 {className}">
33
+ {#if variant === 'card'}
34
+ <Card className="bg-white dark:bg-gray-800 {maxWidth}">
35
+ {@render children?.()}
36
+ </Card>
37
+ {:else}
38
+ {@render children?.()}
39
+ {/if}
40
+ </div>