@getmicdrop/svelte-components 5.10.0 → 5.10.3
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.
- package/dist/calendar/AboutShow/AboutShow.svelte +172 -172
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
- package/dist/calendar/FAQs/FAQs.svelte +75 -75
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
- package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
- package/dist/calendar/PublicCard/PublicCard.svelte +146 -146
- package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
- package/dist/components/Heading.svelte +60 -60
- package/dist/components/Layout/AppShell.svelte +104 -104
- package/dist/components/Layout/ContentSection.svelte +80 -80
- package/dist/components/Layout/Grid.svelte +4 -4
- package/dist/components/Layout/Heading.svelte +81 -81
- package/dist/components/Layout/PageContainer.svelte +69 -69
- package/dist/components/Layout/Responsive.svelte +75 -75
- package/dist/components/Layout/Section.svelte +80 -80
- package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
- package/dist/components/Layout/ShowOnMobile.svelte +37 -37
- package/dist/components/Layout/Sidebar.svelte +108 -108
- package/dist/components/Layout/Stack.spec.js +1 -1
- package/dist/components/Layout/Stack.svelte +6 -6
- package/dist/components/Layout/Text.svelte +87 -87
- package/dist/components/Layout/TwoColumn.svelte +108 -108
- package/dist/components/Text.svelte +53 -53
- package/dist/constants/validation.js +91 -91
- package/dist/constants/validation.spec.js +64 -64
- package/dist/datetime/__tests__/format.test.js +1 -1
- package/dist/datetime/__tests__/parse.test.js +1 -1
- package/dist/datetime/__tests__/timezone.test.js +1 -1
- package/dist/datetime/parse.js +1 -1
- package/dist/forms/createFormStore.svelte.js +1 -0
- package/dist/index.js +51 -51
- package/dist/patterns/data/DataGrid.svelte +45 -45
- package/dist/patterns/data/DataList.svelte +24 -24
- package/dist/patterns/data/DataTable.svelte +36 -36
- package/dist/patterns/forms/FormActions.spec.js +95 -95
- package/dist/patterns/forms/FormActions.stories.svelte +97 -97
- package/dist/patterns/forms/FormActions.svelte +46 -46
- package/dist/patterns/forms/FormGrid.svelte +33 -33
- package/dist/patterns/forms/FormSection.svelte +32 -32
- package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
- package/dist/patterns/forms/FormValidationSummary.svelte +74 -74
- package/dist/patterns/layout/Sidebar.svelte +39 -39
- package/dist/patterns/layout/index.js +29 -29
- package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
- package/dist/patterns/navigation/BottomNav.svelte +74 -74
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +255 -255
- package/dist/patterns/page/PageHeader.svelte +18 -18
- package/dist/patterns/page/PageLayout.svelte +40 -40
- package/dist/patterns/page/PageLoader.spec.js +57 -57
- package/dist/patterns/page/PageLoader.stories.svelte +137 -137
- package/dist/patterns/page/PageLoader.svelte +24 -24
- package/dist/patterns/page/SectionHeader.svelte +29 -29
- package/dist/presets/badges.js +112 -112
- package/dist/presets/buttons.js +76 -76
- package/dist/presets/index.js +9 -9
- package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
- package/dist/primitives/Accordion/Accordion.svelte +42 -42
- package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
- package/dist/primitives/Alert/Alert.spec.js +173 -173
- package/dist/primitives/Alert/Alert.stories.svelte +88 -88
- package/dist/primitives/Alert/Alert.svelte +27 -27
- package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
- package/dist/primitives/Avatar/Avatar.svelte +66 -66
- package/dist/primitives/Badges/Badge.spec.js +144 -144
- package/dist/primitives/Badges/Badge.stories.svelte +86 -86
- package/dist/primitives/Badges/Badge.svelte +99 -99
- package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -136
- package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
- package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -122
- package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +98 -98
- package/dist/primitives/Button/Button.spec.js +223 -223
- package/dist/primitives/Button/Button.stories.svelte +76 -76
- package/dist/primitives/Button/Button.svelte +283 -283
- package/dist/primitives/Button/ButtonGroup.svelte +50 -50
- package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
- package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
- package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
- package/dist/primitives/Card.spec.js +49 -49
- package/dist/primitives/Card.stories.svelte +22 -22
- package/dist/primitives/Card.svelte +28 -28
- package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
- package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
- package/dist/primitives/DarkModeToggle.spec.js +390 -390
- package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
- package/dist/primitives/DarkModeToggle.svelte +136 -136
- package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
- package/dist/primitives/Drawer/Drawer.svelte +120 -120
- package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
- package/dist/primitives/Dropdown/Dropdown.svelte +170 -170
- package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Helper/Helper.svelte +33 -33
- package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
- package/dist/primitives/Icons/ArrowRight.svelte +8 -8
- package/dist/primitives/Icons/Availability.svelte +14 -14
- package/dist/primitives/Icons/Back.svelte +14 -14
- package/dist/primitives/Icons/CheckCircle.svelte +6 -6
- package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
- package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
- package/dist/primitives/Icons/ChevronRight.svelte +4 -4
- package/dist/primitives/Icons/Copy.svelte +15 -15
- package/dist/primitives/Icons/Cross.svelte +5 -5
- package/dist/primitives/Icons/DownArrow.svelte +8 -8
- package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
- package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
- package/dist/primitives/Icons/Home.svelte +15 -15
- package/dist/primitives/Icons/Icon.spec.js +169 -169
- package/dist/primitives/Icons/Icon.stories.svelte +100 -100
- package/dist/primitives/Icons/Icon.svelte +52 -52
- package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
- package/dist/primitives/Icons/Info.svelte +7 -7
- package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
- package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
- package/dist/primitives/Icons/Message.svelte +15 -15
- package/dist/primitives/Icons/MoonIcon.svelte +5 -5
- package/dist/primitives/Icons/More.svelte +21 -21
- package/dist/primitives/Icons/MoreHori.spec.js +61 -61
- package/dist/primitives/Icons/MoreHori.svelte +22 -22
- package/dist/primitives/Icons/Notification.svelte +14 -14
- package/dist/primitives/Icons/Payment.svelte +14 -14
- package/dist/primitives/Icons/Profile.svelte +21 -21
- package/dist/primitives/Icons/Reload.svelte +29 -29
- package/dist/primitives/Icons/Shows.svelte +21 -21
- package/dist/primitives/Icons/Signout.svelte +21 -21
- package/dist/primitives/Icons/SunIcon.svelte +8 -8
- package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
- package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
- package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
- package/dist/primitives/Icons/WarningIcon.svelte +5 -5
- package/dist/primitives/Input/Input.spec.js +573 -573
- package/dist/primitives/Input/Input.stories.svelte +139 -139
- package/dist/primitives/Input/Input.svelte +423 -423
- package/dist/primitives/Input/Select.spec.js +218 -218
- package/dist/primitives/Input/Select.stories.svelte +112 -112
- package/dist/primitives/Input/Select.svelte +252 -252
- package/dist/primitives/Input/Textarea.stories.svelte +137 -137
- package/dist/primitives/Input/Textarea.svelte +105 -105
- package/dist/primitives/Label/Label.svelte +37 -37
- package/dist/primitives/Modal/Modal.spec.js +99 -99
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- package/dist/primitives/Modal/Modal.svelte +157 -157
- package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
- package/dist/primitives/Pagination/Pagination.svelte +261 -261
- package/dist/primitives/Radio/Radio.stories.svelte +80 -80
- package/dist/primitives/Radio/Radio.svelte +67 -67
- package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
- package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
- package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
- package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
- package/dist/primitives/Spinner/Spinner.spec.js +71 -71
- package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
- package/dist/primitives/Spinner/Spinner.svelte +20 -20
- package/dist/primitives/Tabs/TabItem.svelte +49 -49
- package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
- package/dist/primitives/Tabs/Tabs.svelte +137 -137
- package/dist/primitives/Toggle.spec.js +146 -146
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Toggle.svelte +131 -132
- package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
- package/dist/primitives/Typography/Typography.svelte +53 -53
- package/dist/primitives/ValidationError.spec.js +103 -103
- package/dist/primitives/ValidationError.stories.svelte +69 -69
- package/dist/primitives/ValidationError.svelte +29 -29
- package/dist/primitives/index.js +92 -92
- package/dist/recipes/CropImage/CropImage.spec.js +208 -208
- package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
- package/dist/recipes/CropImage/CropImage.svelte +219 -219
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +970 -970
- package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
- package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
- package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
- package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
- package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
- package/dist/recipes/fields/CheckboxField.svelte +85 -85
- package/dist/recipes/fields/FormField.svelte +58 -58
- package/dist/recipes/fields/RadioGroup.svelte +95 -95
- package/dist/recipes/fields/SelectField.svelte +80 -80
- package/dist/recipes/fields/TextareaField.svelte +97 -97
- package/dist/recipes/fields/ToggleField.svelte +60 -60
- package/dist/recipes/fields/index.js +7 -7
- package/dist/recipes/inputs/MultiSelect.spec.js +260 -260
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/MultiSelect.svelte +283 -283
- package/dist/recipes/inputs/OTPInput.spec.js +251 -251
- package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
- package/dist/recipes/inputs/OTPInput.svelte +117 -117
- package/dist/recipes/inputs/PasswordInput.svelte +22 -22
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +131 -117
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +344 -344
- package/dist/recipes/inputs/Search.svelte +102 -102
- package/dist/recipes/inputs/SelectDropdown.svelte +171 -171
- package/dist/recipes/modals/AlertModal.svelte +130 -130
- package/dist/recipes/modals/ConfirmationModal.spec.js +206 -206
- package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
- package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
- package/dist/recipes/modals/InputModal.svelte +182 -182
- package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
- package/dist/recipes/modals/ModalStateManager.svelte +77 -77
- package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
- package/dist/recipes/modals/StatusModal.svelte +206 -206
- package/dist/services/EventService.js +75 -75
- package/dist/services/EventService.spec.js +217 -217
- package/dist/services/ShowService.spec.js +345 -345
- package/dist/stores/toaster.js +13 -13
- package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
- package/dist/stories/ButtonAuditReview.svelte +427 -427
- package/dist/stories/PatternsGallery.stories.svelte +19 -19
- package/dist/stories/PatternsGallery.svelte +206 -206
- package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
- package/dist/stories/PrimitivesGallery.svelte +752 -752
- package/dist/stories/RecipesGallery.stories.svelte +19 -19
- package/dist/stories/RecipesGallery.svelte +471 -471
- package/dist/stories/button-audit-manifest.json +11186 -11186
- package/dist/tailwind/preset.cjs +82 -82
- package/dist/telemetry.js +405 -405
- package/dist/telemetry.spec.js +1169 -1169
- package/dist/tokens/tokens.css +87 -87
- package/dist/tokens/typography-base.css +163 -163
- package/dist/tokens/utilities.css +353 -353
- package/dist/utils/apiConfig.spec.js +219 -219
- package/dist/utils/transitions.js +4 -4
- package/dist/utils/utils.js +693 -693
- 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,132 +1,131 @@
|
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
*
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
border:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
</style>
|
|
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
|
+
></div>
|
|
48
|
+
{#if children}
|
|
49
|
+
<span class="ms-3 text-sm font-medium text-gray-900 dark:text-gray-300">
|
|
50
|
+
{#if typeof children === 'function'}{@render children()}{:else}{children}{/if}
|
|
51
|
+
</span>
|
|
52
|
+
{/if}
|
|
53
|
+
</label>
|
|
54
|
+
|
|
55
|
+
<style>
|
|
56
|
+
/*
|
|
57
|
+
* Toggle track sizes (replaces Tailwind w-* h-* classes)
|
|
58
|
+
* Using CSS instead of Tailwind because these need to work in consuming apps
|
|
59
|
+
*/
|
|
60
|
+
.toggle-sm {
|
|
61
|
+
width: 2.25rem; /* w-9 = 36px */
|
|
62
|
+
height: 1.25rem; /* h-5 = 20px */
|
|
63
|
+
}
|
|
64
|
+
.toggle-md {
|
|
65
|
+
width: 2.75rem; /* w-11 = 44px */
|
|
66
|
+
height: 1.5rem; /* h-6 = 24px */
|
|
67
|
+
}
|
|
68
|
+
.toggle-lg {
|
|
69
|
+
width: 3.5rem; /* w-14 = 56px */
|
|
70
|
+
height: 1.75rem; /* h-7 = 28px */
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/*
|
|
74
|
+
* Toggle thumb (the white circle) - uses ::after pseudo-element
|
|
75
|
+
* Tailwind v4 doesn't generate after: classes from node_modules,
|
|
76
|
+
* so we use explicit CSS here.
|
|
77
|
+
*/
|
|
78
|
+
.toggle-track::after {
|
|
79
|
+
content: '';
|
|
80
|
+
position: absolute;
|
|
81
|
+
background-color: white;
|
|
82
|
+
border: 1px solid #d1d5db; /* gray-300 */
|
|
83
|
+
border-radius: 9999px;
|
|
84
|
+
transition: all 150ms;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Thumb sizes for each toggle size */
|
|
88
|
+
.toggle-sm::after {
|
|
89
|
+
width: 1rem; /* 16px */
|
|
90
|
+
height: 1rem;
|
|
91
|
+
top: 0.125rem; /* 2px */
|
|
92
|
+
inset-inline-start: 0.125rem;
|
|
93
|
+
}
|
|
94
|
+
.toggle-md::after {
|
|
95
|
+
width: 1.25rem; /* 20px */
|
|
96
|
+
height: 1.25rem;
|
|
97
|
+
top: 0.125rem;
|
|
98
|
+
inset-inline-start: 0.125rem;
|
|
99
|
+
}
|
|
100
|
+
.toggle-lg::after {
|
|
101
|
+
width: 1.5rem; /* 24px */
|
|
102
|
+
height: 1.5rem;
|
|
103
|
+
top: 0.125rem;
|
|
104
|
+
inset-inline-start: 0.125rem;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* Checked state - move thumb to the right */
|
|
108
|
+
:global(input.peer:checked) + .toggle-sm::after {
|
|
109
|
+
transform: translateX(1rem); /* 16px */
|
|
110
|
+
border-color: white;
|
|
111
|
+
}
|
|
112
|
+
:global(input.peer:checked) + .toggle-md::after {
|
|
113
|
+
transform: translateX(1.25rem); /* 20px */
|
|
114
|
+
border-color: white;
|
|
115
|
+
}
|
|
116
|
+
:global(input.peer:checked) + .toggle-lg::after {
|
|
117
|
+
transform: translateX(1.5rem); /* 24px */
|
|
118
|
+
border-color: white;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* RTL support - translate in opposite direction */
|
|
122
|
+
:global([dir="rtl"]) :global(input.peer:checked) + .toggle-sm::after {
|
|
123
|
+
transform: translateX(-1rem);
|
|
124
|
+
}
|
|
125
|
+
:global([dir="rtl"]) :global(input.peer:checked) + .toggle-md::after {
|
|
126
|
+
transform: translateX(-1.25rem);
|
|
127
|
+
}
|
|
128
|
+
:global([dir="rtl"]) :global(input.peer:checked) + .toggle-lg::after {
|
|
129
|
+
transform: translateX(-1.5rem);
|
|
130
|
+
}
|
|
131
|
+
</style>
|
|
@@ -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 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>
|