@getmicdrop/svelte-components 5.9.6 → 5.10.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 (284) 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 +146 -146
  7. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  8. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  9. package/dist/calendar/index.js +15 -15
  10. package/dist/components/Heading.svelte +60 -60
  11. package/dist/components/Layout/AppShell.svelte +104 -104
  12. package/dist/components/Layout/ContentSection.svelte +80 -80
  13. package/dist/components/Layout/Grid.svelte +101 -101
  14. package/dist/components/Layout/Heading.svelte +81 -81
  15. package/dist/components/Layout/PageContainer.svelte +69 -69
  16. package/dist/components/Layout/Responsive.svelte +75 -75
  17. package/dist/components/Layout/Section.svelte +80 -80
  18. package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
  19. package/dist/components/Layout/ShowOnMobile.svelte +37 -37
  20. package/dist/components/Layout/Sidebar.svelte +108 -108
  21. package/dist/components/Layout/Stack.spec.js +1 -1
  22. package/dist/components/Layout/Stack.svelte +52 -52
  23. package/dist/components/Layout/Text.svelte +87 -87
  24. package/dist/components/Layout/TwoColumn.svelte +108 -108
  25. package/dist/components/Text.svelte +53 -53
  26. package/dist/config.js +5 -5
  27. package/dist/config.spec.js +29 -29
  28. package/dist/constants/formOptions.js +48 -48
  29. package/dist/constants/validation.js +91 -91
  30. package/dist/constants/validation.spec.js +64 -64
  31. package/dist/datetime/__tests__/format.test.js +1 -1
  32. package/dist/datetime/__tests__/parse.test.js +1 -1
  33. package/dist/datetime/__tests__/timezone.test.js +1 -1
  34. package/dist/datetime/parse.js +1 -1
  35. package/dist/forms/createFormStore.svelte.js +0 -1
  36. package/dist/index.js +51 -51
  37. package/dist/index.spec.js +370 -370
  38. package/dist/patterns/data/DataGrid.svelte +45 -45
  39. package/dist/patterns/data/DataList.svelte +24 -24
  40. package/dist/patterns/data/DataTable.svelte +45 -45
  41. package/dist/patterns/data/index.js +4 -4
  42. package/dist/patterns/forms/FormActions.spec.js +95 -95
  43. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  44. package/dist/patterns/forms/FormActions.svelte +46 -46
  45. package/dist/patterns/forms/FormGrid.svelte +33 -33
  46. package/dist/patterns/forms/FormSection.svelte +32 -32
  47. package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
  48. package/dist/patterns/forms/FormValidationSummary.svelte +74 -74
  49. package/dist/patterns/forms/index.js +5 -5
  50. package/dist/patterns/index.js +18 -18
  51. package/dist/patterns/layout/Sidebar.svelte +39 -39
  52. package/dist/patterns/layout/Stack.svelte +61 -61
  53. package/dist/patterns/layout/index.js +29 -29
  54. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  55. package/dist/patterns/navigation/BottomNav.svelte +74 -74
  56. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  57. package/dist/patterns/navigation/Header.svelte +255 -255
  58. package/dist/patterns/navigation/index.js +3 -3
  59. package/dist/patterns/page/PageHeader.svelte +49 -49
  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 +53 -53
  64. package/dist/patterns/page/SectionHeader.svelte +51 -51
  65. package/dist/patterns/page/index.js +5 -5
  66. package/dist/presets/badges.js +112 -112
  67. package/dist/presets/buttons.js +76 -76
  68. package/dist/presets/index.js +9 -9
  69. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  70. package/dist/primitives/Accordion/Accordion.svelte +62 -62
  71. package/dist/primitives/Accordion/AccordionItem.spec.js +2 -2
  72. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  73. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -107
  74. package/dist/primitives/Alert/Alert.spec.js +173 -173
  75. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  76. package/dist/primitives/Alert/Alert.svelte +64 -64
  77. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  78. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  79. package/dist/primitives/Badges/Badge.spec.js +144 -144
  80. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  81. package/dist/primitives/Badges/Badge.svelte +99 -99
  82. package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -136
  83. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  84. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  85. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -122
  86. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  87. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +98 -98
  88. package/dist/primitives/Button/Button.spec.js +223 -223
  89. package/dist/primitives/Button/Button.stories.svelte +76 -76
  90. package/dist/primitives/Button/Button.svelte +283 -283
  91. package/dist/primitives/Button/ButtonGroup.svelte +50 -50
  92. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
  93. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  94. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  95. package/dist/primitives/Card.spec.js +49 -49
  96. package/dist/primitives/Card.stories.svelte +22 -22
  97. package/dist/primitives/Card.svelte +28 -28
  98. package/dist/primitives/Checkbox/Checkbox.spec.js +2 -2
  99. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  100. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  101. package/dist/primitives/DarkModeToggle.spec.js +390 -390
  102. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  103. package/dist/primitives/DarkModeToggle.svelte +136 -136
  104. package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
  105. package/dist/primitives/Drawer/Drawer.svelte +236 -236
  106. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  107. package/dist/primitives/Dropdown/Dropdown.svelte +170 -170
  108. package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
  109. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  110. package/dist/primitives/Helper/Helper.svelte +33 -33
  111. package/dist/primitives/Icons/ArrowLeft.svelte +21 -21
  112. package/dist/primitives/Icons/ArrowRight.svelte +21 -21
  113. package/dist/primitives/Icons/Availability.svelte +27 -27
  114. package/dist/primitives/Icons/Back.svelte +27 -27
  115. package/dist/primitives/Icons/CheckCircle.svelte +19 -19
  116. package/dist/primitives/Icons/CheckCircleOutline.svelte +28 -28
  117. package/dist/primitives/Icons/ChevronLeft.svelte +17 -17
  118. package/dist/primitives/Icons/ChevronRight.svelte +17 -17
  119. package/dist/primitives/Icons/Copy.svelte +28 -28
  120. package/dist/primitives/Icons/Cross.svelte +18 -18
  121. package/dist/primitives/Icons/DownArrow.svelte +21 -21
  122. package/dist/primitives/Icons/ErrorCircle.svelte +19 -19
  123. package/dist/primitives/Icons/FacebookIcon.svelte +15 -15
  124. package/dist/primitives/Icons/Home.svelte +28 -28
  125. package/dist/primitives/Icons/Icon.spec.js +175 -175
  126. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  127. package/dist/primitives/Icons/Icon.svelte +79 -79
  128. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  129. package/dist/primitives/Icons/ImageOutline.svelte +21 -21
  130. package/dist/primitives/Icons/Info.svelte +20 -20
  131. package/dist/primitives/Icons/InstagramIcon.svelte +21 -21
  132. package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
  133. package/dist/primitives/Icons/Message.svelte +28 -28
  134. package/dist/primitives/Icons/MoonIcon.svelte +18 -18
  135. package/dist/primitives/Icons/More.svelte +34 -34
  136. package/dist/primitives/Icons/MoreHori.spec.js +67 -67
  137. package/dist/primitives/Icons/MoreHori.svelte +35 -35
  138. package/dist/primitives/Icons/Notification.svelte +27 -27
  139. package/dist/primitives/Icons/Payment.svelte +27 -27
  140. package/dist/primitives/Icons/Profile.svelte +34 -34
  141. package/dist/primitives/Icons/Reload.svelte +42 -42
  142. package/dist/primitives/Icons/Shows.svelte +34 -34
  143. package/dist/primitives/Icons/Signout.svelte +34 -34
  144. package/dist/primitives/Icons/SunIcon.svelte +21 -21
  145. package/dist/primitives/Icons/TiktokIcon.svelte +15 -15
  146. package/dist/primitives/Icons/TrashBinOutline.svelte +21 -21
  147. package/dist/primitives/Icons/TwitterIcon.svelte +15 -15
  148. package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
  149. package/dist/primitives/Icons/WarningIcon.svelte +24 -24
  150. package/dist/primitives/Input/Input.spec.js +573 -573
  151. package/dist/primitives/Input/Input.stories.svelte +139 -139
  152. package/dist/primitives/Input/Input.svelte +423 -433
  153. package/dist/primitives/Input/Select.spec.js +218 -218
  154. package/dist/primitives/Input/Select.stories.svelte +112 -112
  155. package/dist/primitives/Input/Select.svelte +252 -252
  156. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  157. package/dist/primitives/Input/Textarea.svelte +105 -105
  158. package/dist/primitives/Label/Label.svelte +37 -37
  159. package/dist/primitives/Modal/Modal.spec.js +99 -99
  160. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  161. package/dist/primitives/Modal/Modal.svelte +157 -157
  162. package/dist/primitives/NumberInput/NumberInput.svelte +105 -105
  163. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  164. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  165. package/dist/primitives/Radio/Radio.spec.js +2 -2
  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 +46 -46
  173. package/dist/primitives/Spinner/Spinner.spec.js +71 -71
  174. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  175. package/dist/primitives/Spinner/Spinner.svelte +44 -44
  176. package/dist/primitives/Tabs/TabItem.svelte +52 -52
  177. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  178. package/dist/primitives/Tabs/Tabs.svelte +137 -137
  179. package/dist/primitives/Toggle.spec.js +146 -143
  180. package/dist/primitives/Toggle.stories.svelte +92 -92
  181. package/dist/primitives/Toggle.svelte +132 -70
  182. package/dist/primitives/Toggle.svelte.d.ts.map +1 -1
  183. package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
  184. package/dist/primitives/Typography/Typography.svelte +53 -53
  185. package/dist/primitives/ValidationError.spec.js +103 -103
  186. package/dist/primitives/ValidationError.stories.svelte +112 -112
  187. package/dist/primitives/ValidationError.svelte +29 -29
  188. package/dist/primitives/index.js +92 -92
  189. package/dist/recipes/CropImage/CropImage.spec.js +208 -208
  190. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  191. package/dist/recipes/CropImage/CropImage.svelte +219 -219
  192. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  193. package/dist/recipes/ImageUploader/ImageUploader.svelte +970 -970
  194. package/dist/recipes/SuperLogin/SuperLogin.svelte +1 -1
  195. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  196. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +66 -66
  197. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  198. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +113 -113
  199. package/dist/recipes/feedback/ErrorDisplay.svelte +67 -67
  200. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
  201. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +176 -176
  202. package/dist/recipes/feedback/index.js +4 -4
  203. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  204. package/dist/recipes/fields/FormField.svelte +58 -58
  205. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  206. package/dist/recipes/fields/SelectField.svelte +82 -82
  207. package/dist/recipes/fields/TextareaField.svelte +101 -101
  208. package/dist/recipes/fields/ToggleField.svelte +60 -60
  209. package/dist/recipes/fields/index.js +7 -7
  210. package/dist/recipes/index.js +24 -24
  211. package/dist/recipes/inputs/MultiSelect.spec.js +260 -260
  212. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  213. package/dist/recipes/inputs/MultiSelect.svelte +283 -283
  214. package/dist/recipes/inputs/OTPInput.spec.js +251 -251
  215. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  216. package/dist/recipes/inputs/OTPInput.svelte +117 -117
  217. package/dist/recipes/inputs/PasswordInput.svelte +121 -121
  218. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -117
  219. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +170 -170
  220. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +344 -344
  221. package/dist/recipes/inputs/Search.svelte +102 -102
  222. package/dist/recipes/inputs/SelectDropdown.svelte +171 -171
  223. package/dist/recipes/inputs/index.js +8 -8
  224. package/dist/recipes/modals/AlertModal.svelte +130 -130
  225. package/dist/recipes/modals/ConfirmationModal.spec.js +206 -206
  226. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  227. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  228. package/dist/recipes/modals/InputModal.svelte +182 -182
  229. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  230. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  231. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  232. package/dist/recipes/modals/StatusModal.svelte +206 -206
  233. package/dist/recipes/modals/index.js +7 -7
  234. package/dist/services/EventService.js +75 -75
  235. package/dist/services/EventService.spec.js +217 -217
  236. package/dist/services/ShowService.d.ts +46 -46
  237. package/dist/services/ShowService.js +143 -143
  238. package/dist/services/ShowService.spec.js +345 -345
  239. package/dist/stores/auth.d.ts +8 -8
  240. package/dist/stores/index.js +9 -9
  241. package/dist/stores/toaster.d.ts +3 -3
  242. package/dist/stores/toaster.js +13 -13
  243. package/dist/stores/toaster.spec.js +59 -59
  244. package/dist/stories/ButtonAuditDashboard.spec.js +1 -1
  245. package/dist/stories/ButtonAuditDashboard.svelte +25 -25
  246. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  247. package/dist/stories/ButtonAuditReview.svelte +427 -427
  248. package/dist/stories/ButtonGridView.svelte +1 -1
  249. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  250. package/dist/stories/PatternsGallery.svelte +399 -399
  251. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  252. package/dist/stories/PrimitivesGallery.svelte +752 -752
  253. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  254. package/dist/stories/RecipesGallery.svelte +471 -471
  255. package/dist/stories/button-audit-manifest.json +11186 -11186
  256. package/dist/tailwind/preset.cjs +82 -82
  257. package/dist/telemetry.js +405 -405
  258. package/dist/telemetry.server.js +212 -212
  259. package/dist/telemetry.server.spec.js +438 -438
  260. package/dist/telemetry.spec.js +1169 -1169
  261. package/dist/tokens/tokens.css +87 -87
  262. package/dist/tokens/typography-base.css +163 -163
  263. package/dist/tokens/utilities.css +353 -353
  264. package/dist/utils/__tests__/auth.test.js +431 -431
  265. package/dist/utils/apiConfig.d.ts +29 -29
  266. package/dist/utils/apiConfig.js +120 -120
  267. package/dist/utils/apiConfig.spec.js +219 -219
  268. package/dist/utils/auth.d.ts +46 -46
  269. package/dist/utils/auth.js +195 -195
  270. package/dist/utils/greetings.js +187 -187
  271. package/dist/utils/greetings.spec.js +337 -337
  272. package/dist/utils/imageValidation.js +121 -121
  273. package/dist/utils/imageValidation.spec.js +223 -223
  274. package/dist/utils/portal.d.ts +11 -11
  275. package/dist/utils/portal.js +25 -25
  276. package/dist/utils/portal.spec.js +143 -143
  277. package/dist/utils/transitions.js +4 -4
  278. package/dist/utils/utils/utils.d.ts +72 -72
  279. package/dist/utils/utils/utils.js +3 -3
  280. package/dist/utils/utils/utils.spec.js +698 -698
  281. package/dist/utils/utils.d.ts +97 -97
  282. package/dist/utils/utils.js +693 -693
  283. package/dist/utils/utils.spec.js +643 -643
  284. package/package.json +297 -297
@@ -1,92 +1,92 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
-
4
- import Toggle from './Toggle.svelte';
5
-
6
- const { Story } = defineMeta({
7
- title: 'Components/Toggle',
8
- component: Toggle,
9
- tags: ['autodocs'],
10
- argTypes: {
11
- checked: { control: 'boolean' },
12
- disabled: { control: 'boolean' },
13
- },
14
- });
15
-
16
- </script>
17
-
18
- <script>
19
-
20
- let toggleState = false;
21
- let disabledToggle = true;
22
- </script>
23
-
24
-
25
- <Story
26
- name="Default (Unchecked)"
27
- args={{
28
- checked: false,
29
- disabled: false,
30
- }}
31
- />
32
-
33
- <Story
34
- name="Checked"
35
- args={{
36
- checked: true,
37
- disabled: false,
38
- }}
39
- />
40
-
41
- <Story
42
- name="Disabled Unchecked"
43
- args={{
44
- checked: false,
45
- disabled: true,
46
- }}
47
- />
48
-
49
- <Story
50
- name="Disabled Checked"
51
- args={{
52
- checked: true,
53
- disabled: true,
54
- }}
55
- />
56
-
57
- <Story name="Interactive">
58
- <div class="space-y-4">
59
- <div class="flex items-center gap-3">
60
- <Toggle bind:checked={toggleState} />
61
- <span class="text-sm">State: {toggleState ? 'On' : 'Off'}</span>
62
- </div>
63
- </div>
64
- </Story>
65
-
66
- <Story name="Settings List">
67
- <div class="max-w-md space-y-4">
68
- <div class="flex items-center justify-between p-4 bg-white dark:bg-gray-900 rounded-lg border">
69
- <div>
70
- <div class="font-medium">Email Notifications</div>
71
- <div class="text-sm text-gray-500 dark:text-gray-400">Receive updates via email</div>
72
- </div>
73
- <Toggle bind:checked={toggleState} />
74
- </div>
75
-
76
- <div class="flex items-center justify-between p-4 bg-white dark:bg-gray-900 rounded-lg border">
77
- <div>
78
- <div class="font-medium">Dark Mode</div>
79
- <div class="text-sm text-gray-500 dark:text-gray-400">Use dark color scheme</div>
80
- </div>
81
- <Toggle checked={false} />
82
- </div>
83
-
84
- <div class="flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-800 rounded-lg border">
85
- <div>
86
- <div class="font-medium text-gray-500 dark:text-gray-400">Premium Feature</div>
87
- <div class="text-sm text-gray-500 dark:text-gray-400">Requires subscription</div>
88
- </div>
89
- <Toggle disabled={true} checked={false} />
90
- </div>
91
- </div>
92
- </Story>
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+
4
+ import Toggle from './Toggle.svelte';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'Components/Toggle',
8
+ component: Toggle,
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ checked: { control: 'boolean' },
12
+ disabled: { control: 'boolean' },
13
+ },
14
+ });
15
+
16
+ </script>
17
+
18
+ <script>
19
+
20
+ let toggleState = false;
21
+ let disabledToggle = true;
22
+ </script>
23
+
24
+
25
+ <Story
26
+ name="Default (Unchecked)"
27
+ args={{
28
+ checked: false,
29
+ disabled: false,
30
+ }}
31
+ />
32
+
33
+ <Story
34
+ name="Checked"
35
+ args={{
36
+ checked: true,
37
+ disabled: false,
38
+ }}
39
+ />
40
+
41
+ <Story
42
+ name="Disabled Unchecked"
43
+ args={{
44
+ checked: false,
45
+ disabled: true,
46
+ }}
47
+ />
48
+
49
+ <Story
50
+ name="Disabled Checked"
51
+ args={{
52
+ checked: true,
53
+ disabled: true,
54
+ }}
55
+ />
56
+
57
+ <Story name="Interactive">
58
+ <div class="space-y-4">
59
+ <div class="flex items-center gap-3">
60
+ <Toggle bind:checked={toggleState} />
61
+ <span class="text-sm">State: {toggleState ? 'On' : 'Off'}</span>
62
+ </div>
63
+ </div>
64
+ </Story>
65
+
66
+ <Story name="Settings List">
67
+ <div class="max-w-md space-y-4">
68
+ <div class="flex items-center justify-between p-4 bg-white dark:bg-gray-900 rounded-lg border">
69
+ <div>
70
+ <div class="font-medium">Email Notifications</div>
71
+ <div class="text-sm text-gray-500 dark:text-gray-400">Receive updates via email</div>
72
+ </div>
73
+ <Toggle bind:checked={toggleState} />
74
+ </div>
75
+
76
+ <div class="flex items-center justify-between p-4 bg-white dark:bg-gray-900 rounded-lg border">
77
+ <div>
78
+ <div class="font-medium">Dark Mode</div>
79
+ <div class="text-sm text-gray-500 dark:text-gray-400">Use dark color scheme</div>
80
+ </div>
81
+ <Toggle checked={false} />
82
+ </div>
83
+
84
+ <div class="flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-800 rounded-lg border">
85
+ <div>
86
+ <div class="font-medium text-gray-500 dark:text-gray-400">Premium Feature</div>
87
+ <div class="text-sm text-gray-500 dark:text-gray-400">Requires subscription</div>
88
+ </div>
89
+ <Toggle disabled={true} checked={false} />
90
+ </div>
91
+ </div>
92
+ </Story>
@@ -1,70 +1,132 @@
1
- <script>
2
- /**
3
- * Toggle Component - Flowbite Native
4
- * Migrated to Svelte 5 runes
5
- */
6
-
7
- /** @type {{
8
- checked?: boolean,
9
- disabled?: boolean,
10
- size?: 'sm' | 'md' | 'lg',
11
- class?: string,
12
- onchange?: (detail: { checked: boolean }) => void,
13
- children?: import('svelte').Snippet,
14
- }} */
15
- let {
16
- checked = $bindable(false),
17
- disabled = false,
18
- size = 'md',
19
- class: className = '',
20
- onchange,
21
- children,
22
- ...restProps
23
- } = $props();
24
-
25
- function handleChange(event) {
26
- checked = event.target.checked;
27
- onchange?.({ checked });
28
- }
29
-
30
- // Flowbite toggle sizes - thumb uses after: pseudo-element
31
- const sizes = {
32
- sm: {
33
- track: 'w-9 h-5',
34
- thumb: 'after:h-4 after:w-4 after:top-0.5 after:start-0.5',
35
- translate: 'peer-checked:after:translate-x-full'
36
- },
37
- md: {
38
- track: 'w-11 h-6',
39
- thumb: 'after:h-5 after:w-5 after:top-0.5 after:start-0.5',
40
- translate: 'peer-checked:after:translate-x-full'
41
- },
42
- lg: {
43
- track: 'w-14 h-7',
44
- thumb: 'after:h-6 after:w-6 after:top-0.5 after:start-0.5',
45
- translate: 'peer-checked:after:translate-x-full'
46
- }
47
- };
48
-
49
- let sizeConfig = $derived(sizes[size] || sizes.md);
50
- </script>
51
-
52
- <label class="inline-flex items-center {disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'} {className}" {...restProps}>
53
- <input
54
- type="checkbox"
55
- bind:checked
56
- {disabled}
57
- onchange={handleChange}
58
- class="sr-only peer"
59
- />
60
- <div
61
- class="relative {sizeConfig.track} bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute {sizeConfig.thumb} after:bg-white after:border-gray-300 after:border after:rounded-full after:transition-all dark:border-gray-600 peer-checked:bg-blue-600"
62
- role="switch"
63
- aria-checked={checked}
64
- ></div>
65
- {#if children}
66
- <span class="ms-3 text-sm font-medium text-gray-900 dark:text-gray-300">
67
- {#if typeof children === 'function'}{@render children()}{:else}{children}{/if}
68
- </span>
69
- {/if}
70
- </label>
1
+ <script>
2
+ /**
3
+ * Toggle Component - Flowbite Native
4
+ * Migrated to Svelte 5 runes
5
+ *
6
+ * Note: Uses CSS style block for pseudo-element styling instead of Tailwind
7
+ * after: classes, because Tailwind v4 doesn't generate after: classes from
8
+ * node_modules when this component is consumed by other apps.
9
+ */
10
+
11
+ /** @type {{
12
+ checked?: boolean,
13
+ disabled?: boolean,
14
+ size?: 'sm' | 'md' | 'lg',
15
+ class?: string,
16
+ onchange?: (detail: { checked: boolean }) => void,
17
+ children?: import('svelte').Snippet,
18
+ }} */
19
+ let {
20
+ checked = $bindable(false),
21
+ disabled = false,
22
+ size = 'md',
23
+ class: className = '',
24
+ onchange,
25
+ children,
26
+ ...restProps
27
+ } = $props();
28
+
29
+ function handleChange(event) {
30
+ checked = event.target.checked;
31
+ onchange?.({ checked });
32
+ }
33
+ </script>
34
+
35
+ <label class="inline-flex items-center {disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'} {className}" {...restProps}>
36
+ <input
37
+ type="checkbox"
38
+ bind:checked
39
+ {disabled}
40
+ onchange={handleChange}
41
+ class="sr-only peer"
42
+ />
43
+ <div
44
+ class="toggle-track toggle-{size} relative bg-gray-200 peer-focus:outline-hidden peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:bg-blue-600"
45
+ role="switch"
46
+ aria-checked={checked}
47
+ style="--toggle-translate: {sizeConfig.translatePx}"
48
+ ></div>
49
+ {#if children}
50
+ <span class="ms-3 text-sm font-medium text-gray-900 dark:text-gray-300">
51
+ {#if typeof children === 'function'}{@render children()}{:else}{children}{/if}
52
+ </span>
53
+ {/if}
54
+ </label>
55
+
56
+ <style>
57
+ /*
58
+ * Toggle track sizes (replaces Tailwind w-* h-* classes)
59
+ * Using CSS instead of Tailwind because these need to work in consuming apps
60
+ */
61
+ .toggle-sm {
62
+ width: 2.25rem; /* w-9 = 36px */
63
+ height: 1.25rem; /* h-5 = 20px */
64
+ }
65
+ .toggle-md {
66
+ width: 2.75rem; /* w-11 = 44px */
67
+ height: 1.5rem; /* h-6 = 24px */
68
+ }
69
+ .toggle-lg {
70
+ width: 3.5rem; /* w-14 = 56px */
71
+ height: 1.75rem; /* h-7 = 28px */
72
+ }
73
+
74
+ /*
75
+ * Toggle thumb (the white circle) - uses ::after pseudo-element
76
+ * Tailwind v4 doesn't generate after: classes from node_modules,
77
+ * so we use explicit CSS here.
78
+ */
79
+ .toggle-track::after {
80
+ content: '';
81
+ position: absolute;
82
+ background-color: white;
83
+ border: 1px solid #d1d5db; /* gray-300 */
84
+ border-radius: 9999px;
85
+ transition: all 150ms;
86
+ }
87
+
88
+ /* Thumb sizes for each toggle size */
89
+ .toggle-sm::after {
90
+ width: 1rem; /* 16px */
91
+ height: 1rem;
92
+ top: 0.125rem; /* 2px */
93
+ inset-inline-start: 0.125rem;
94
+ }
95
+ .toggle-md::after {
96
+ width: 1.25rem; /* 20px */
97
+ height: 1.25rem;
98
+ top: 0.125rem;
99
+ inset-inline-start: 0.125rem;
100
+ }
101
+ .toggle-lg::after {
102
+ width: 1.5rem; /* 24px */
103
+ height: 1.5rem;
104
+ top: 0.125rem;
105
+ inset-inline-start: 0.125rem;
106
+ }
107
+
108
+ /* Checked state - move thumb to the right */
109
+ :global(input.peer:checked) + .toggle-sm::after {
110
+ transform: translateX(1rem); /* 16px */
111
+ border-color: white;
112
+ }
113
+ :global(input.peer:checked) + .toggle-md::after {
114
+ transform: translateX(1.25rem); /* 20px */
115
+ border-color: white;
116
+ }
117
+ :global(input.peer:checked) + .toggle-lg::after {
118
+ transform: translateX(1.5rem); /* 24px */
119
+ border-color: white;
120
+ }
121
+
122
+ /* RTL support - translate in opposite direction */
123
+ :global([dir="rtl"]) :global(input.peer:checked) + .toggle-sm::after {
124
+ transform: translateX(-1rem);
125
+ }
126
+ :global([dir="rtl"]) :global(input.peer:checked) + .toggle-md::after {
127
+ transform: translateX(-1.25rem);
128
+ }
129
+ :global([dir="rtl"]) :global(input.peer:checked) + .toggle-lg::after {
130
+ transform: translateX(-1.5rem);
131
+ }
132
+ </style>
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/primitives/Toggle.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAyEA;cAPc,OAAO;eACN,OAAO;WACX,IAAI,GAAG,IAAI,GAAG,IAAI;YACjB,MAAM;eACH,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI;eACtC,OAAO,QAAQ,EAAE,OAAO;kBAEc"}
1
+ {"version":3,"file":"Toggle.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/primitives/Toggle.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;AA0DA;cAPc,OAAO;eACN,OAAO;WACX,IAAI,GAAG,IAAI,GAAG,IAAI;YACjB,MAAM;eACH,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI;eACtC,OAAO,QAAQ,EAAE,OAAO;kBAEc"}
@@ -1,83 +1,83 @@
1
- <script lang="ts">
2
- /**
3
- * Tooltip Component - Native implementation
4
- *
5
- * Displays a tooltip on hover/focus with configurable placement
6
- */
7
- import { fly } from 'svelte/transition';
8
- import type { Snippet } from 'svelte';
9
-
10
- interface Props {
11
- /** Tooltip content text */
12
- content: string;
13
- /** Placement relative to trigger */
14
- placement?: 'top' | 'bottom' | 'left' | 'right';
15
- /** Additional CSS classes for the tooltip */
16
- class?: string;
17
- /** Child content (trigger element) */
18
- children?: Snippet;
19
- }
20
-
21
- let {
22
- content,
23
- placement = 'top',
24
- class: className = '',
25
- children
26
- }: Props = $props();
27
-
28
- let visible = $state(false);
29
-
30
- // Placement-specific classes
31
- const placementClasses: Record<string, string> = {
32
- top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',
33
- bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',
34
- left: 'right-full top-1/2 -translate-y-1/2 mr-2',
35
- right: 'left-full top-1/2 -translate-y-1/2 ml-2'
36
- };
37
-
38
- // Arrow placement classes
39
- const arrowClasses: Record<string, string> = {
40
- top: 'top-full left-1/2 -translate-x-1/2 border-t-gray-900 dark:border-t-gray-700 border-l-transparent border-r-transparent border-b-transparent',
41
- bottom: 'bottom-full left-1/2 -translate-x-1/2 border-b-gray-900 dark:border-b-gray-700 border-l-transparent border-r-transparent border-t-transparent',
42
- left: 'left-full top-1/2 -translate-y-1/2 border-l-gray-900 dark:border-l-gray-700 border-t-transparent border-b-transparent border-r-transparent',
43
- right: 'right-full top-1/2 -translate-y-1/2 border-r-gray-900 dark:border-r-gray-700 border-t-transparent border-b-transparent border-l-transparent'
44
- };
45
-
46
- function handleMouseEnter() {
47
- visible = true;
48
- }
49
-
50
- function handleMouseLeave() {
51
- visible = false;
52
- }
53
-
54
- function handleFocus() {
55
- visible = true;
56
- }
57
-
58
- function handleBlur() {
59
- visible = false;
60
- }
61
- </script>
62
-
63
- <div
64
- class="relative inline-block"
65
- onmouseenter={handleMouseEnter}
66
- onmouseleave={handleMouseLeave}
67
- onfocus={handleFocus}
68
- onblur={handleBlur}
69
- role="tooltip"
70
- >
71
- {#if children}{@render children()}{/if}
72
-
73
- {#if visible && content}
74
- <div
75
- class="absolute z-50 px-3 py-2 text-sm text-white bg-gray-900 rounded-lg shadow-sm whitespace-nowrap pointer-events-none dark:bg-gray-700 {placementClasses[placement]} {className}"
76
- transition:fly={{ y: placement === 'top' ? 5 : placement === 'bottom' ? -5 : 0, x: placement === 'left' ? 5 : placement === 'right' ? -5 : 0, duration: 150 }}
77
- >
78
- {content}
79
- <!-- Arrow -->
80
- <div class="absolute w-0 h-0 border-4 {arrowClasses[placement]}"></div>
81
- </div>
82
- {/if}
83
- </div>
1
+ <script lang="ts">
2
+ /**
3
+ * Tooltip Component - Native implementation
4
+ *
5
+ * Displays a tooltip on hover/focus with configurable placement
6
+ */
7
+ import { fly } from 'svelte/transition';
8
+ import type { Snippet } from 'svelte';
9
+
10
+ interface Props {
11
+ /** Tooltip content text */
12
+ content: string;
13
+ /** Placement relative to trigger */
14
+ placement?: 'top' | 'bottom' | 'left' | 'right';
15
+ /** Additional CSS classes for the tooltip */
16
+ class?: string;
17
+ /** Child content (trigger element) */
18
+ children?: Snippet;
19
+ }
20
+
21
+ let {
22
+ content,
23
+ placement = 'top',
24
+ class: className = '',
25
+ children
26
+ }: Props = $props();
27
+
28
+ let visible = $state(false);
29
+
30
+ // Placement-specific classes
31
+ const placementClasses: Record<string, string> = {
32
+ top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',
33
+ bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',
34
+ left: 'right-full top-1/2 -translate-y-1/2 mr-2',
35
+ right: 'left-full top-1/2 -translate-y-1/2 ml-2'
36
+ };
37
+
38
+ // Arrow placement classes
39
+ const arrowClasses: Record<string, string> = {
40
+ top: 'top-full left-1/2 -translate-x-1/2 border-t-gray-900 dark:border-t-gray-700 border-l-transparent border-r-transparent border-b-transparent',
41
+ bottom: 'bottom-full left-1/2 -translate-x-1/2 border-b-gray-900 dark:border-b-gray-700 border-l-transparent border-r-transparent border-t-transparent',
42
+ left: 'left-full top-1/2 -translate-y-1/2 border-l-gray-900 dark:border-l-gray-700 border-t-transparent border-b-transparent border-r-transparent',
43
+ right: 'right-full top-1/2 -translate-y-1/2 border-r-gray-900 dark:border-r-gray-700 border-t-transparent border-b-transparent border-l-transparent'
44
+ };
45
+
46
+ function handleMouseEnter() {
47
+ visible = true;
48
+ }
49
+
50
+ function handleMouseLeave() {
51
+ visible = false;
52
+ }
53
+
54
+ function handleFocus() {
55
+ visible = true;
56
+ }
57
+
58
+ function handleBlur() {
59
+ visible = false;
60
+ }
61
+ </script>
62
+
63
+ <div
64
+ class="relative inline-block"
65
+ onmouseenter={handleMouseEnter}
66
+ onmouseleave={handleMouseLeave}
67
+ onfocus={handleFocus}
68
+ onblur={handleBlur}
69
+ role="tooltip"
70
+ >
71
+ {#if children}{@render children()}{/if}
72
+
73
+ {#if visible && content}
74
+ <div
75
+ class="absolute z-50 px-3 py-2 text-sm text-white bg-gray-900 rounded-lg shadow whitespace-nowrap pointer-events-none dark:bg-gray-700 {placementClasses[placement]} {className}"
76
+ transition:fly={{ y: placement === 'top' ? 5 : placement === 'bottom' ? -5 : 0, x: placement === 'left' ? 5 : placement === 'right' ? -5 : 0, duration: 150 }}
77
+ >
78
+ {content}
79
+ <!-- Arrow -->
80
+ <div class="absolute w-0 h-0 border-4 {arrowClasses[placement]}"></div>
81
+ </div>
82
+ {/if}
83
+ </div>
@@ -1,53 +1,53 @@
1
- <script lang="ts">
2
- import type { Snippet } from 'svelte';
3
- import type { HTMLAttributes } from 'svelte/elements';
4
-
5
- interface Props extends HTMLAttributes<HTMLElement> {
6
- /** The semantic element to render */
7
- variant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p';
8
- /** Font weight variant */
9
- weight?: 'bold' | 'semibold' | 'medium' | 'regular';
10
- /** Additional CSS classes */
11
- class?: string;
12
- /** Text content (alternative to children) */
13
- text?: string;
14
- /** Child content */
15
- children?: Snippet;
16
- }
17
-
18
- let {
19
- variant = 'p',
20
- weight = 'regular',
21
- class: className = '',
22
- text = '',
23
- children,
24
- ...restProps
25
- }: Props = $props();
26
-
27
- const sizeMap: Record<string, string> = {
28
- h1: 'text-3xl',
29
- h2: 'text-2xl',
30
- h3: 'text-xl',
31
- h4: 'text-lg',
32
- h5: 'text-base',
33
- h6: 'text-xs',
34
- p: 'text-sm',
35
- };
36
-
37
- const weightMap: Record<string, string> = {
38
- bold: 'font-bold',
39
- semibold: 'font-semibold',
40
- medium: 'font-medium',
41
- regular: 'font-normal',
42
- };
43
-
44
- let computedClass = $derived(`${sizeMap[variant]} ${weightMap[weight]} ${className}`.trim());
45
- </script>
46
-
47
- <svelte:element this={variant} class={computedClass} {...restProps}>
48
- {#if text}
49
- {text}
50
- {:else}
51
- {@render children?.()}
52
- {/if}
53
- </svelte:element>
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+
5
+ interface Props extends HTMLAttributes<HTMLElement> {
6
+ /** The semantic element to render */
7
+ variant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p';
8
+ /** Font weight variant */
9
+ weight?: 'bold' | 'semibold' | 'medium' | 'regular';
10
+ /** Additional CSS classes */
11
+ class?: string;
12
+ /** Text content (alternative to children) */
13
+ text?: string;
14
+ /** Child content */
15
+ children?: Snippet;
16
+ }
17
+
18
+ let {
19
+ variant = 'p',
20
+ weight = 'regular',
21
+ class: className = '',
22
+ text = '',
23
+ children,
24
+ ...restProps
25
+ }: Props = $props();
26
+
27
+ const sizeMap: Record<string, string> = {
28
+ h1: 'text-3xl',
29
+ h2: 'text-2xl',
30
+ h3: 'text-xl',
31
+ h4: 'text-lg',
32
+ h5: 'text-base',
33
+ h6: 'text-xs',
34
+ p: 'text-sm',
35
+ };
36
+
37
+ const weightMap: Record<string, string> = {
38
+ bold: 'font-bold',
39
+ semibold: 'font-semibold',
40
+ medium: 'font-medium',
41
+ regular: 'font-normal',
42
+ };
43
+
44
+ let computedClass = $derived(`${sizeMap[variant]} ${weightMap[weight]} ${className}`.trim());
45
+ </script>
46
+
47
+ <svelte:element this={variant} class={computedClass} {...restProps}>
48
+ {#if text}
49
+ {text}
50
+ {:else}
51
+ {@render children?.()}
52
+ {/if}
53
+ </svelte:element>