@getmicdrop/svelte-components 5.3.15 → 5.4.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 (225) 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/validation.js +91 -91
  14. package/dist/constants/validation.spec.js +64 -64
  15. package/dist/datetime/constants.d.ts +7 -0
  16. package/dist/datetime/constants.d.ts.map +1 -1
  17. package/dist/datetime/constants.js +26 -0
  18. package/dist/datetime/index.d.ts +3 -2
  19. package/dist/datetime/index.d.ts.map +1 -1
  20. package/dist/datetime/index.js +2 -2
  21. package/dist/datetime/timezone.d.ts +72 -0
  22. package/dist/datetime/timezone.d.ts.map +1 -1
  23. package/dist/datetime/timezone.js +138 -0
  24. package/dist/forms/createFieldTracker.svelte.d.ts.map +1 -1
  25. package/dist/forms/createFieldTracker.svelte.js +3 -6
  26. package/dist/index.js +223 -223
  27. package/dist/patterns/data/DataGrid.svelte +45 -45
  28. package/dist/patterns/data/DataList.svelte +24 -24
  29. package/dist/patterns/data/DataTable.svelte +40 -40
  30. package/dist/patterns/forms/FormActions.spec.js +88 -88
  31. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  32. package/dist/patterns/forms/FormActions.svelte +46 -46
  33. package/dist/patterns/forms/FormGrid.svelte +33 -33
  34. package/dist/patterns/forms/FormSection.svelte +32 -32
  35. package/dist/patterns/forms/FormValidationSummary.spec.js +203 -203
  36. package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
  37. package/dist/patterns/forms/FormValidationSummary.svelte +67 -67
  38. package/dist/patterns/layout/Grid.svelte +35 -35
  39. package/dist/patterns/layout/Sidebar.svelte +39 -39
  40. package/dist/patterns/layout/Stack.svelte +45 -45
  41. package/dist/patterns/navigation/BottomNav.spec.js +130 -130
  42. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  43. package/dist/patterns/navigation/BottomNav.svelte +54 -54
  44. package/dist/patterns/navigation/Header.spec.js +203 -203
  45. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  46. package/dist/patterns/navigation/Header.svelte +240 -240
  47. package/dist/patterns/page/PageHeader.svelte +36 -36
  48. package/dist/patterns/page/PageLayout.svelte +40 -40
  49. package/dist/patterns/page/PageLoader.spec.js +54 -54
  50. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  51. package/dist/patterns/page/PageLoader.svelte +41 -41
  52. package/dist/patterns/page/SectionHeader.svelte +41 -41
  53. package/dist/presets/badges.js +112 -112
  54. package/dist/presets/buttons.js +76 -76
  55. package/dist/presets/index.js +9 -9
  56. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  57. package/dist/primitives/Accordion/Accordion.svelte +61 -61
  58. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  59. package/dist/primitives/Alert/Alert.spec.js +170 -170
  60. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  61. package/dist/primitives/Alert/Alert.svelte +65 -65
  62. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  63. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  64. package/dist/primitives/Badges/Badge.spec.js +103 -103
  65. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  66. package/dist/primitives/Badges/Badge.svelte +142 -142
  67. package/dist/primitives/BottomSheet/BottomSheet.spec.js +127 -127
  68. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  69. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  70. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +120 -120
  71. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  72. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  73. package/dist/primitives/Button/Button.spec.js +211 -211
  74. package/dist/primitives/Button/Button.stories.svelte +76 -76
  75. package/dist/primitives/Button/Button.svelte +301 -301
  76. package/dist/primitives/Button/ButtonSaveDemo.spec.js +48 -48
  77. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  78. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  79. package/dist/primitives/Card.spec.js +49 -49
  80. package/dist/primitives/Card.stories.svelte +22 -22
  81. package/dist/primitives/Card.svelte +28 -28
  82. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  83. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  84. package/dist/primitives/DarkModeToggle.spec.js +357 -357
  85. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  86. package/dist/primitives/DarkModeToggle.svelte +136 -136
  87. package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
  88. package/dist/primitives/Drawer/Drawer.svelte +214 -214
  89. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  90. package/dist/primitives/Dropdown/Dropdown.svelte +148 -148
  91. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  92. package/dist/primitives/Icons/ArrowLeft.svelte +20 -20
  93. package/dist/primitives/Icons/ArrowRight.svelte +20 -20
  94. package/dist/primitives/Icons/Availability.svelte +26 -26
  95. package/dist/primitives/Icons/Back.svelte +26 -26
  96. package/dist/primitives/Icons/CheckCircle.svelte +18 -18
  97. package/dist/primitives/Icons/CheckCircleOutline.svelte +27 -27
  98. package/dist/primitives/Icons/ChevronLeft.svelte +16 -16
  99. package/dist/primitives/Icons/ChevronRight.svelte +16 -16
  100. package/dist/primitives/Icons/Copy.svelte +27 -27
  101. package/dist/primitives/Icons/Cross.svelte +17 -17
  102. package/dist/primitives/Icons/DownArrow.svelte +20 -20
  103. package/dist/primitives/Icons/ErrorCircle.svelte +18 -18
  104. package/dist/primitives/Icons/FacebookIcon.svelte +13 -13
  105. package/dist/primitives/Icons/Home.svelte +27 -27
  106. package/dist/primitives/Icons/Icon.spec.js +175 -175
  107. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  108. package/dist/primitives/Icons/Icon.svelte +63 -63
  109. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  110. package/dist/primitives/Icons/ImageOutline.svelte +19 -19
  111. package/dist/primitives/Icons/Info.svelte +19 -19
  112. package/dist/primitives/Icons/InstagramIcon.svelte +19 -19
  113. package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
  114. package/dist/primitives/Icons/Message.svelte +27 -27
  115. package/dist/primitives/Icons/MoonIcon.svelte +16 -16
  116. package/dist/primitives/Icons/More.svelte +33 -33
  117. package/dist/primitives/Icons/MoreHori.spec.js +67 -67
  118. package/dist/primitives/Icons/MoreHori.svelte +34 -34
  119. package/dist/primitives/Icons/Notification.svelte +26 -26
  120. package/dist/primitives/Icons/Payment.svelte +26 -26
  121. package/dist/primitives/Icons/Profile.svelte +33 -33
  122. package/dist/primitives/Icons/Reload.svelte +41 -41
  123. package/dist/primitives/Icons/Shows.svelte +33 -33
  124. package/dist/primitives/Icons/Signout.svelte +33 -33
  125. package/dist/primitives/Icons/SunIcon.svelte +19 -19
  126. package/dist/primitives/Icons/TiktokIcon.svelte +13 -13
  127. package/dist/primitives/Icons/TrashBinOutline.svelte +19 -19
  128. package/dist/primitives/Icons/TwitterIcon.svelte +13 -13
  129. package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
  130. package/dist/primitives/Icons/WarningIcon.svelte +24 -24
  131. package/dist/primitives/Input/Input.spec.js +573 -573
  132. package/dist/primitives/Input/Input.stories.svelte +139 -139
  133. package/dist/primitives/Input/Input.svelte +444 -444
  134. package/dist/primitives/Input/Select.spec.js +218 -218
  135. package/dist/primitives/Input/Select.stories.svelte +112 -112
  136. package/dist/primitives/Input/Select.svelte +232 -232
  137. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  138. package/dist/primitives/Input/Textarea.svelte +79 -79
  139. package/dist/primitives/Label/Label.svelte +37 -37
  140. package/dist/primitives/Modal/Modal.spec.js +95 -95
  141. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  142. package/dist/primitives/Modal/Modal.svelte +158 -158
  143. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  144. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  145. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  146. package/dist/primitives/Radio/Radio.svelte +67 -67
  147. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  148. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  149. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  150. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  151. package/dist/primitives/Skeleton/Skeleton.svelte +52 -52
  152. package/dist/primitives/Spinner/Spinner.spec.js +75 -75
  153. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  154. package/dist/primitives/Spinner/Spinner.svelte +57 -57
  155. package/dist/primitives/Tabs/TabItem.svelte +51 -51
  156. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  157. package/dist/primitives/Tabs/Tabs.svelte +128 -128
  158. package/dist/primitives/Toggle.spec.js +127 -127
  159. package/dist/primitives/Toggle.stories.svelte +92 -92
  160. package/dist/primitives/Toggle.svelte +71 -71
  161. package/dist/primitives/Typography/Typography.svelte +53 -53
  162. package/dist/primitives/ValidationError.spec.js +103 -103
  163. package/dist/primitives/ValidationError.stories.svelte +111 -111
  164. package/dist/primitives/ValidationError.svelte +29 -29
  165. package/dist/recipes/CropImage/CropImage.spec.js +216 -216
  166. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  167. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  168. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  169. package/dist/recipes/ImageUploader/ImageUploader.svelte +980 -980
  170. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  171. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +47 -47
  172. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  173. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +112 -112
  174. package/dist/recipes/feedback/ErrorDisplay.svelte +38 -38
  175. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +129 -129
  176. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +167 -167
  177. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  178. package/dist/recipes/fields/FormField.svelte +58 -58
  179. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  180. package/dist/recipes/fields/SelectField.svelte +82 -82
  181. package/dist/recipes/fields/TextareaField.svelte +101 -101
  182. package/dist/recipes/fields/ToggleField.svelte +60 -60
  183. package/dist/recipes/fields/index.js +7 -7
  184. package/dist/recipes/inputs/MultiSelect.spec.js +257 -257
  185. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  186. package/dist/recipes/inputs/MultiSelect.svelte +244 -244
  187. package/dist/recipes/inputs/OTPInput.spec.js +238 -238
  188. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  189. package/dist/recipes/inputs/OTPInput.svelte +102 -102
  190. package/dist/recipes/inputs/PasswordInput.svelte +100 -100
  191. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +173 -173
  192. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +108 -108
  193. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +300 -300
  194. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +165 -165
  195. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +337 -337
  196. package/dist/recipes/inputs/Search.svelte +85 -85
  197. package/dist/recipes/inputs/SelectDropdown.svelte +161 -161
  198. package/dist/recipes/modals/AlertModal.svelte +130 -130
  199. package/dist/recipes/modals/ConfirmationModal.spec.js +191 -191
  200. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  201. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  202. package/dist/recipes/modals/InputModal.svelte +182 -182
  203. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  204. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  205. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  206. package/dist/recipes/modals/StatusModal.svelte +206 -206
  207. package/dist/services/EventService.js +75 -75
  208. package/dist/services/EventService.spec.js +217 -217
  209. package/dist/services/ShowService.spec.js +342 -342
  210. package/dist/stores/auth.js +36 -36
  211. package/dist/stores/auth.spec.js +139 -139
  212. package/dist/stores/toaster.js +13 -13
  213. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  214. package/dist/stories/ButtonAuditReview.svelte +427 -427
  215. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  216. package/dist/stories/PatternsGallery.svelte +388 -388
  217. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  218. package/dist/stories/PrimitivesGallery.svelte +752 -752
  219. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  220. package/dist/stories/RecipesGallery.svelte +441 -441
  221. package/dist/stories/button-audit-manifest.json +11186 -11186
  222. package/dist/tailwind/preset.cjs +82 -82
  223. package/dist/tokens/tokens.css +87 -87
  224. package/dist/utils/utils.js +354 -354
  225. package/package.json +274 -274
@@ -1,117 +1,117 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
-
4
- import BottomNav from './BottomNav.svelte';
5
-
6
- const { Story } = defineMeta({
7
- title: 'Components/Layout/BottomNav',
8
- component: BottomNav,
9
- tags: ['autodocs'],
10
- });
11
-
12
- </script>
13
-
14
- <script>
15
-
16
- const defaultLinks = [
17
- { label: 'Home', href: '/', icon: 'Home' },
18
- { label: 'Shows', href: '/shows', icon: 'Shows' },
19
- { label: 'Availability', href: '/availability', icon: 'Availability' },
20
- { label: 'Profile', href: '/profile', icon: 'Profile' },
21
- ];
22
-
23
- const extendedLinks = [
24
- { label: 'Home', href: '/', icon: 'Home' },
25
- { label: 'Shows', href: '/shows', icon: 'Shows' },
26
- { label: 'Availability', href: '/availability', icon: 'Availability' },
27
- { label: 'Messages', href: '/messages', icon: 'Message' },
28
- { label: 'Profile', href: '/profile', icon: 'Profile' },
29
- ];
30
- </script>
31
-
32
- <Story name="Default (4 Tabs)">
33
- <div class="bg-gray-100 dark:bg-gray-700 p-4">
34
- <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">Mobile Bottom Navigation (4 tabs)</p>
35
- <div class="max-w-md mx-auto bg-white dark:bg-gray-900 rounded-lg shadow-lg overflow-hidden">
36
- <div class="h-64 bg-gradient-to-br from-blue-50 to-blue-100 flex items-center justify-center">
37
- <p class="text-gray-500 dark:text-gray-400">Page Content Area</p>
38
- </div>
39
- <div class="flex border-t bg-white dark:bg-gray-900">
40
- <BottomNav links={defaultLinks} />
41
- </div>
42
- </div>
43
- </div>
44
- </Story>
45
-
46
- <Story name="With 5 Tabs">
47
- <div class="bg-gray-100 dark:bg-gray-700 p-4">
48
- <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">Extended Navigation (5 tabs)</p>
49
- <div class="max-w-md mx-auto bg-white dark:bg-gray-900 rounded-lg shadow-lg overflow-hidden">
50
- <div class="h-64 bg-gradient-to-br from-purple-50 to-purple-100 flex items-center justify-center">
51
- <p class="text-gray-500 dark:text-gray-400">Page Content Area</p>
52
- </div>
53
- <div class="flex border-t bg-white dark:bg-gray-900">
54
- <BottomNav links={extendedLinks} />
55
- </div>
56
- </div>
57
- </div>
58
- </Story>
59
-
60
- <Story name="Different Icon Set">
61
- <div class="bg-gray-100 dark:bg-gray-700 p-4">
62
- <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">Custom Icons</p>
63
- <div class="max-w-md mx-auto bg-white dark:bg-gray-900 rounded-lg shadow-lg overflow-hidden">
64
- <div class="h-64 bg-gradient-to-br from-green-50 to-green-100 flex items-center justify-center">
65
- <p class="text-gray-500 dark:text-gray-400">Page Content Area</p>
66
- </div>
67
- <div class="flex border-t bg-white dark:bg-gray-900">
68
- <BottomNav
69
- links={[
70
- { label: 'Dashboard', href: '/', icon: 'Home' },
71
- { label: 'Events', href: '/events', icon: 'Shows' },
72
- { label: 'Notifications', href: '/notifications', icon: 'Notification' },
73
- { label: 'Settings', href: '/settings', icon: 'Profile' },
74
- ]}
75
- />
76
- </div>
77
- </div>
78
- </div>
79
- </Story>
80
-
81
- <Story name="Mobile Viewport">
82
- <div class="max-w-[375px] mx-auto bg-white dark:bg-gray-900 shadow-2xl rounded-3xl overflow-hidden">
83
- <!-- Mock iPhone screen -->
84
- <div class="h-[667px] flex flex-col">
85
- <!-- Status bar -->
86
- <div class="h-6 bg-black flex items-center justify-between px-4">
87
- <span class="text-white text-xs">9:41</span>
88
- <span class="text-white text-xs">100%</span>
89
- </div>
90
-
91
- <!-- Content area -->
92
- <div class="flex-1 bg-gradient-to-br from-blue-50 to-purple-50 p-4">
93
- <h1 class="text-2xl font-bold mb-2">Home</h1>
94
- <p class="text-gray-500 dark:text-gray-400">This is a mobile viewport simulation</p>
95
- </div>
96
-
97
- <!-- Bottom navigation -->
98
- <div class="flex border-t bg-white dark:bg-gray-900 safe-bottom">
99
- <BottomNav links={defaultLinks} />
100
- </div>
101
- </div>
102
- </div>
103
- </Story>
104
-
105
- <Story name="Dark Mode">
106
- <div class="dark bg-gray-900 p-4 min-h-screen">
107
- <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">Dark Mode Bottom Navigation</p>
108
- <div class="max-w-md mx-auto bg-gray-800 rounded-lg shadow-2xl overflow-hidden">
109
- <div class="h-64 bg-gradient-to-br from-gray-900 to-gray-800 flex items-center justify-center">
110
- <p class="text-gray-500 dark:text-gray-400">Dark Mode Content</p>
111
- </div>
112
- <div class="flex border-t border-gray-700 bg-gray-800">
113
- <BottomNav links={defaultLinks} />
114
- </div>
115
- </div>
116
- </div>
117
- </Story>
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+
4
+ import BottomNav from './BottomNav.svelte';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'Components/Layout/BottomNav',
8
+ component: BottomNav,
9
+ tags: ['autodocs'],
10
+ });
11
+
12
+ </script>
13
+
14
+ <script>
15
+
16
+ const defaultLinks = [
17
+ { label: 'Home', href: '/', icon: 'Home' },
18
+ { label: 'Shows', href: '/shows', icon: 'Shows' },
19
+ { label: 'Availability', href: '/availability', icon: 'Availability' },
20
+ { label: 'Profile', href: '/profile', icon: 'Profile' },
21
+ ];
22
+
23
+ const extendedLinks = [
24
+ { label: 'Home', href: '/', icon: 'Home' },
25
+ { label: 'Shows', href: '/shows', icon: 'Shows' },
26
+ { label: 'Availability', href: '/availability', icon: 'Availability' },
27
+ { label: 'Messages', href: '/messages', icon: 'Message' },
28
+ { label: 'Profile', href: '/profile', icon: 'Profile' },
29
+ ];
30
+ </script>
31
+
32
+ <Story name="Default (4 Tabs)">
33
+ <div class="bg-gray-100 dark:bg-gray-700 p-4">
34
+ <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">Mobile Bottom Navigation (4 tabs)</p>
35
+ <div class="max-w-md mx-auto bg-white dark:bg-gray-900 rounded-lg shadow-lg overflow-hidden">
36
+ <div class="h-64 bg-gradient-to-br from-blue-50 to-blue-100 flex items-center justify-center">
37
+ <p class="text-gray-500 dark:text-gray-400">Page Content Area</p>
38
+ </div>
39
+ <div class="flex border-t bg-white dark:bg-gray-900">
40
+ <BottomNav links={defaultLinks} />
41
+ </div>
42
+ </div>
43
+ </div>
44
+ </Story>
45
+
46
+ <Story name="With 5 Tabs">
47
+ <div class="bg-gray-100 dark:bg-gray-700 p-4">
48
+ <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">Extended Navigation (5 tabs)</p>
49
+ <div class="max-w-md mx-auto bg-white dark:bg-gray-900 rounded-lg shadow-lg overflow-hidden">
50
+ <div class="h-64 bg-gradient-to-br from-purple-50 to-purple-100 flex items-center justify-center">
51
+ <p class="text-gray-500 dark:text-gray-400">Page Content Area</p>
52
+ </div>
53
+ <div class="flex border-t bg-white dark:bg-gray-900">
54
+ <BottomNav links={extendedLinks} />
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </Story>
59
+
60
+ <Story name="Different Icon Set">
61
+ <div class="bg-gray-100 dark:bg-gray-700 p-4">
62
+ <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">Custom Icons</p>
63
+ <div class="max-w-md mx-auto bg-white dark:bg-gray-900 rounded-lg shadow-lg overflow-hidden">
64
+ <div class="h-64 bg-gradient-to-br from-green-50 to-green-100 flex items-center justify-center">
65
+ <p class="text-gray-500 dark:text-gray-400">Page Content Area</p>
66
+ </div>
67
+ <div class="flex border-t bg-white dark:bg-gray-900">
68
+ <BottomNav
69
+ links={[
70
+ { label: 'Dashboard', href: '/', icon: 'Home' },
71
+ { label: 'Events', href: '/events', icon: 'Shows' },
72
+ { label: 'Notifications', href: '/notifications', icon: 'Notification' },
73
+ { label: 'Settings', href: '/settings', icon: 'Profile' },
74
+ ]}
75
+ />
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </Story>
80
+
81
+ <Story name="Mobile Viewport">
82
+ <div class="max-w-[375px] mx-auto bg-white dark:bg-gray-900 shadow-2xl rounded-3xl overflow-hidden">
83
+ <!-- Mock iPhone screen -->
84
+ <div class="h-[667px] flex flex-col">
85
+ <!-- Status bar -->
86
+ <div class="h-6 bg-black flex items-center justify-between px-4">
87
+ <span class="text-white text-xs">9:41</span>
88
+ <span class="text-white text-xs">100%</span>
89
+ </div>
90
+
91
+ <!-- Content area -->
92
+ <div class="flex-1 bg-gradient-to-br from-blue-50 to-purple-50 p-4">
93
+ <h1 class="text-2xl font-bold mb-2">Home</h1>
94
+ <p class="text-gray-500 dark:text-gray-400">This is a mobile viewport simulation</p>
95
+ </div>
96
+
97
+ <!-- Bottom navigation -->
98
+ <div class="flex border-t bg-white dark:bg-gray-900 safe-bottom">
99
+ <BottomNav links={defaultLinks} />
100
+ </div>
101
+ </div>
102
+ </div>
103
+ </Story>
104
+
105
+ <Story name="Dark Mode">
106
+ <div class="dark bg-gray-900 p-4 min-h-screen">
107
+ <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">Dark Mode Bottom Navigation</p>
108
+ <div class="max-w-md mx-auto bg-gray-800 rounded-lg shadow-2xl overflow-hidden">
109
+ <div class="h-64 bg-gradient-to-br from-gray-900 to-gray-800 flex items-center justify-center">
110
+ <p class="text-gray-500 dark:text-gray-400">Dark Mode Content</p>
111
+ </div>
112
+ <div class="flex border-t border-gray-700 bg-gray-800">
113
+ <BottomNav links={defaultLinks} />
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </Story>
@@ -1,54 +1,54 @@
1
- <script>
2
- import { page } from '../../__LIB_STORES__.js';
3
- import { base } from '../../__LIB_PATHS__.js';
4
- import Icon from "../../primitives/Icons/Icon.svelte";
5
- import { typography } from '../../tokens/typography';
6
-
7
- let {
8
- links = [],
9
- } = $props();
10
-
11
- let shows = $state({ invitation: [] });
12
-
13
- let currentPath = $derived($page.url.pathname);
14
-
15
- function isActive(href, path) {
16
- if (href === `${base}/` || href === '/') {
17
- return path === href || path === `${base}/`;
18
- }
19
- return path.startsWith(href);
20
- }
21
-
22
- $effect(() => {
23
- (async () => {
24
- try {
25
- const res = await fetch(`/api/getEventsForVenue`);
26
- if (!res.ok) throw new Error("Failed to fetch shows.");
27
- const events = await res.json();
28
- shows.invitation = events.filter((event) => event.acceptedState === 0);
29
- } catch (err) {
30
- console.error("Failed to fetch shows:", err);
31
- }
32
- })();
33
- });
34
- </script>
35
-
36
- {#each links as { label, href, icon }}
37
- <a
38
- {href}
39
- class={`flex-1 flex items-center justify-center py-3 px-2 no-underline bg-transparent border-none cursor-pointer min-w-0
40
- ${typography.textMuted} transition-colors duration-150
41
- hover:text-gray-900 hover:no-underline dark:hover:text-white
42
- select-none touch-manipulation
43
- ${isActive(href, currentPath) ? 'text-blue-700 dark:text-blue-500' : ''}`}
44
- aria-label={label}
45
- style="-webkit-tap-highlight-color: transparent; -webkit-touch-callout: none;"
46
- >
47
- <span class="relative flex items-center justify-center transition-transform duration-150 active:scale-[0.8]">
48
- <Icon name={icon} size="24" />
49
- {#if label === "Shows" && shows?.invitation?.length > 0}
50
- <span class="absolute -top-1 -right-1 w-2 h-2 bg-red-500 rounded-full"></span>
51
- {/if}
52
- </span>
53
- </a>
54
- {/each}
1
+ <script>
2
+ import { page } from '../../__LIB_STORES__.js';
3
+ import { base } from '../../__LIB_PATHS__.js';
4
+ import Icon from "../../primitives/Icons/Icon.svelte";
5
+ import { typography } from '../../tokens/typography';
6
+
7
+ let {
8
+ links = [],
9
+ } = $props();
10
+
11
+ let shows = $state({ invitation: [] });
12
+
13
+ let currentPath = $derived($page.url.pathname);
14
+
15
+ function isActive(href, path) {
16
+ if (href === `${base}/` || href === '/') {
17
+ return path === href || path === `${base}/`;
18
+ }
19
+ return path.startsWith(href);
20
+ }
21
+
22
+ $effect(() => {
23
+ (async () => {
24
+ try {
25
+ const res = await fetch(`/api/getEventsForVenue`);
26
+ if (!res.ok) throw new Error("Failed to fetch shows.");
27
+ const events = await res.json();
28
+ shows.invitation = events.filter((event) => event.acceptedState === 0);
29
+ } catch (err) {
30
+ console.error("Failed to fetch shows:", err);
31
+ }
32
+ })();
33
+ });
34
+ </script>
35
+
36
+ {#each links as { label, href, icon }}
37
+ <a
38
+ {href}
39
+ class={`flex-1 flex items-center justify-center py-3 px-2 no-underline bg-transparent border-none cursor-pointer min-w-0
40
+ ${typography.textMuted} transition-colors duration-150
41
+ hover:text-gray-900 hover:no-underline dark:hover:text-white
42
+ select-none touch-manipulation
43
+ ${isActive(href, currentPath) ? 'text-blue-700 dark:text-blue-500' : ''}`}
44
+ aria-label={label}
45
+ style="-webkit-tap-highlight-color: transparent; -webkit-touch-callout: none;"
46
+ >
47
+ <span class="relative flex items-center justify-center transition-transform duration-150 active:scale-[0.8]">
48
+ <Icon name={icon} size="24" />
49
+ {#if label === "Shows" && shows?.invitation?.length > 0}
50
+ <span class="absolute -top-1 -right-1 w-2 h-2 bg-red-500 rounded-full"></span>
51
+ {/if}
52
+ </span>
53
+ </a>
54
+ {/each}