@getmicdrop/svelte-components 5.10.3 → 5.13.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.
- 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 +0 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -51
- package/dist/index.spec.js +0 -1
- 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 +251 -255
- package/dist/patterns/navigation/Header.svelte.d.ts.map +1 -1
- 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/AvatarButton/AvatarButton.svelte +57 -0
- package/dist/primitives/AvatarButton/AvatarButton.svelte.d.ts +18 -0
- package/dist/primitives/AvatarButton/AvatarButton.svelte.d.ts.map +1 -0
- 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/BottomSheet/BottomSheet.svelte.d.ts +2 -2
- package/dist/primitives/BottomSheet/BottomSheet.svelte.d.ts.map +1 -1
- package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte +3 -3
- package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts +1 -1
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +123 -122
- package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +99 -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 +278 -283
- package/dist/primitives/Button/Button.svelte.d.ts +2 -0
- package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
- 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/CardAction/CardAction.svelte +68 -0
- package/dist/primitives/CardAction/CardAction.svelte.d.ts +20 -0
- package/dist/primitives/CardAction/CardAction.svelte.d.ts.map +1 -0
- 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.spec.js +33 -33
- package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
- package/dist/primitives/Drawer/Drawer.svelte +123 -127
- package/dist/primitives/Drawer/Drawer.svelte.d.ts +2 -3
- package/dist/primitives/Drawer/Drawer.svelte.d.ts.map +1 -1
- 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/LandingButton/LandingButton.svelte +92 -0
- package/dist/primitives/LandingButton/LandingButton.svelte.d.ts +22 -0
- package/dist/primitives/LandingButton/LandingButton.svelte.d.ts.map +1 -0
- package/dist/primitives/MenuItem/MenuItem.svelte +85 -0
- package/dist/primitives/MenuItem/MenuItem.svelte.d.ts +24 -0
- package/dist/primitives/MenuItem/MenuItem.svelte.d.ts.map +1 -0
- package/dist/primitives/Modal/Modal.spec.js +99 -99
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- package/dist/primitives/Modal/Modal.svelte +181 -157
- package/dist/primitives/Modal/Modal.svelte.d.ts +7 -5
- package/dist/primitives/Modal/Modal.svelte.d.ts.map +1 -1
- package/dist/primitives/Modal/ModalTestWrapper.svelte +3 -3
- package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts +2 -2
- package/dist/primitives/NavItem/NavItem.svelte +75 -0
- package/dist/primitives/NavItem/NavItem.svelte.d.ts +20 -0
- package/dist/primitives/NavItem/NavItem.svelte.d.ts.map +1 -0
- 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/SearchResultItem/SearchResultItem.svelte +109 -0
- package/dist/primitives/SearchResultItem/SearchResultItem.svelte.d.ts +26 -0
- package/dist/primitives/SearchResultItem/SearchResultItem.svelte.d.ts.map +1 -0
- package/dist/primitives/SidebarToggle/SidebarToggle.svelte +55 -0
- package/dist/primitives/SidebarToggle/SidebarToggle.svelte.d.ts +18 -0
- package/dist/primitives/SidebarToggle/SidebarToggle.svelte.d.ts.map +1 -0
- 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 +141 -131
- package/dist/primitives/Toggle.svelte.d.ts +2 -0
- package/dist/primitives/Toggle.svelte.d.ts.map +1 -1
- 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.d.ts +7 -0
- package/dist/primitives/index.js +113 -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/SuperLogin/SuperLogin.svelte +3 -3
- package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
- 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 -131
- 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/index.d.ts +0 -1
- package/dist/recipes/inputs/index.js +0 -1
- package/dist/recipes/modals/AlertModal.spec.js +2 -2
- package/dist/recipes/modals/AlertModal.svelte +130 -130
- package/dist/recipes/modals/AlertModal.svelte.d.ts +3 -3
- package/dist/recipes/modals/ConfirmationModal.spec.js +206 -206
- package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
- package/dist/recipes/modals/ConfirmationModal.svelte +162 -152
- package/dist/recipes/modals/ConfirmationModal.svelte.d.ts +5 -3
- package/dist/recipes/modals/ConfirmationModal.svelte.d.ts.map +1 -1
- package/dist/recipes/modals/InputModal.spec.js +2 -2
- package/dist/recipes/modals/InputModal.svelte +182 -182
- package/dist/recipes/modals/InputModal.svelte.d.ts +3 -3
- package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
- package/dist/recipes/modals/ModalStateManager.svelte +77 -77
- package/dist/recipes/modals/ModalTestWrapper.spec.js +49 -49
- package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
- package/dist/recipes/modals/ModalTestWrapper.svelte.d.ts +2 -2
- package/dist/recipes/modals/StatusModal.spec.js +2 -2
- package/dist/recipes/modals/StatusModal.svelte +206 -206
- package/dist/recipes/modals/StatusModal.svelte.d.ts +3 -3
- 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/ComponentConsolidation.stories.svelte +10 -10
- 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 +756 -752
- package/dist/stories/PrimitivesGallery.svelte.d.ts.map +1 -1
- package/dist/stories/RecipesGallery.spec.js +9 -18
- package/dist/stories/RecipesGallery.stories.svelte +19 -19
- package/dist/stories/RecipesGallery.svelte +454 -471
- package/dist/stories/RecipesGallery.svelte.d.ts.map +1 -1
- 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/haptic.d.ts +41 -0
- package/dist/utils/haptic.d.ts.map +1 -0
- package/dist/utils/haptic.js +115 -0
- package/dist/utils/transitions.js +4 -4
- package/dist/utils/utils.js +693 -693
- package/package.json +297 -297
- package/dist/recipes/inputs/SelectDropdown.spec.d.ts +0 -2
- package/dist/recipes/inputs/SelectDropdown.spec.d.ts.map +0 -1
- package/dist/recipes/inputs/SelectDropdown.spec.js +0 -518
- package/dist/recipes/inputs/SelectDropdown.svelte +0 -171
- package/dist/recipes/inputs/SelectDropdown.svelte.d.ts +0 -16
- package/dist/recipes/inputs/SelectDropdown.svelte.d.ts.map +0 -1
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
-
import Drawer from './Drawer.svelte';
|
|
4
|
-
import Button from '../Button/Button.svelte';
|
|
5
|
-
|
|
6
|
-
const { Story } = defineMeta({
|
|
7
|
-
title: 'Primitives/Drawer',
|
|
8
|
-
component: Drawer,
|
|
9
|
-
tags: ['autodocs'],
|
|
10
|
-
argTypes: {
|
|
11
|
-
position: {
|
|
12
|
-
control: 'select',
|
|
13
|
-
options: ['left', 'right'],
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
parameters: {
|
|
17
|
-
docs: {
|
|
18
|
-
description: {
|
|
19
|
-
component: 'Sliding panel overlay that appears from the side of the screen.',
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
let openLeft = $state(false);
|
|
26
|
-
let openRight = $state(false);
|
|
27
|
-
</script>
|
|
28
|
-
|
|
29
|
-
<Story name="Right (Default)">
|
|
30
|
-
{#snippet template()}
|
|
31
|
-
<div>
|
|
32
|
-
<Button onclick={() => openRight = true}>Open Right Drawer</Button>
|
|
33
|
-
<Drawer bind:open={openRight} position="right">
|
|
34
|
-
<div class="p-6">
|
|
35
|
-
<h2 class="text-xl font-semibold mb-4">Drawer Title</h2>
|
|
36
|
-
<p class="text-gray-600 mb-4">
|
|
37
|
-
This drawer slides in from the right side. Click outside or use the close button to dismiss.
|
|
38
|
-
</p>
|
|
39
|
-
<div class="space-y-4">
|
|
40
|
-
<p class="text-sm text-gray-500">Some content here...</p>
|
|
41
|
-
<Button onclick={() => openRight = false}>Close</Button>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
</Drawer>
|
|
45
|
-
</div>
|
|
46
|
-
{/snippet}
|
|
47
|
-
</Story>
|
|
48
|
-
|
|
49
|
-
<Story name="Left">
|
|
50
|
-
{#snippet template()}
|
|
51
|
-
<div>
|
|
52
|
-
<Button onclick={() => openLeft = true}>Open Left Drawer</Button>
|
|
53
|
-
<Drawer bind:open={openLeft} position="left">
|
|
54
|
-
<div class="p-6">
|
|
55
|
-
<h2 class="text-xl font-semibold mb-4">Navigation</h2>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import Drawer from './Drawer.svelte';
|
|
4
|
+
import Button from '../Button/Button.svelte';
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: 'Primitives/Drawer',
|
|
8
|
+
component: Drawer,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
argTypes: {
|
|
11
|
+
position: {
|
|
12
|
+
control: 'select',
|
|
13
|
+
options: ['left', 'right'],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
parameters: {
|
|
17
|
+
docs: {
|
|
18
|
+
description: {
|
|
19
|
+
component: 'Sliding panel overlay that appears from the side of the screen.',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
let openLeft = $state(false);
|
|
26
|
+
let openRight = $state(false);
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<Story name="Right (Default)">
|
|
30
|
+
{#snippet template()}
|
|
31
|
+
<div>
|
|
32
|
+
<Button onclick={() => openRight = true}>Open Right Drawer</Button>
|
|
33
|
+
<Drawer bind:open={openRight} position="right">
|
|
34
|
+
<div class="p-6">
|
|
35
|
+
<h2 class="text-xl font-semibold mb-4">Drawer Title</h2>
|
|
36
|
+
<p class="text-gray-600 mb-4">
|
|
37
|
+
This drawer slides in from the right side. Click outside or use the close button to dismiss.
|
|
38
|
+
</p>
|
|
39
|
+
<div class="space-y-4">
|
|
40
|
+
<p class="text-sm text-gray-500">Some content here...</p>
|
|
41
|
+
<Button onclick={() => openRight = false}>Close</Button>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</Drawer>
|
|
45
|
+
</div>
|
|
46
|
+
{/snippet}
|
|
47
|
+
</Story>
|
|
48
|
+
|
|
49
|
+
<Story name="Left">
|
|
50
|
+
{#snippet template()}
|
|
51
|
+
<div>
|
|
52
|
+
<Button onclick={() => openLeft = true}>Open Left Drawer</Button>
|
|
53
|
+
<Drawer bind:open={openLeft} position="left">
|
|
54
|
+
<div class="p-6">
|
|
55
|
+
<h2 class="text-xl font-semibold mb-4">Navigation</h2>
|
|
56
56
|
<nav class="space-y-2">
|
|
57
57
|
<a href="/dashboard" class="block px-3 py-2 rounded hover:bg-gray-100">Dashboard</a>
|
|
58
58
|
<a href="/shows" class="block px-3 py-2 rounded hover:bg-gray-100">Shows</a>
|
|
59
59
|
<a href="/performers" class="block px-3 py-2 rounded hover:bg-gray-100">Performers</a>
|
|
60
60
|
<a href="/settings" class="block px-3 py-2 rounded hover:bg-gray-100">Settings</a>
|
|
61
61
|
</nav>
|
|
62
|
-
<div class="mt-6">
|
|
63
|
-
<Button variant="ghost" onclick={() => openLeft = false}>Close</Button>
|
|
64
|
-
</div>
|
|
65
|
-
</div>
|
|
66
|
-
</Drawer>
|
|
67
|
-
</div>
|
|
68
|
-
{/snippet}
|
|
69
|
-
</Story>
|
|
70
|
-
|
|
71
|
-
<Story name="With Form">
|
|
72
|
-
{#snippet template()}
|
|
73
|
-
<div>
|
|
74
|
-
<Button onclick={() => openRight = true}>Edit Profile</Button>
|
|
75
|
-
<Drawer bind:open={openRight} position="right">
|
|
76
|
-
<div class="p-6">
|
|
77
|
-
<h2 class="text-xl font-semibold mb-6">Edit Profile</h2>
|
|
62
|
+
<div class="mt-6">
|
|
63
|
+
<Button variant="ghost" onclick={() => openLeft = false}>Close</Button>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</Drawer>
|
|
67
|
+
</div>
|
|
68
|
+
{/snippet}
|
|
69
|
+
</Story>
|
|
70
|
+
|
|
71
|
+
<Story name="With Form">
|
|
72
|
+
{#snippet template()}
|
|
73
|
+
<div>
|
|
74
|
+
<Button onclick={() => openRight = true}>Edit Profile</Button>
|
|
75
|
+
<Drawer bind:open={openRight} position="right">
|
|
76
|
+
<div class="p-6">
|
|
77
|
+
<h2 class="text-xl font-semibold mb-6">Edit Profile</h2>
|
|
78
78
|
<form class="space-y-4">
|
|
79
79
|
<div>
|
|
80
80
|
<label for="drawer-name" class="block text-sm font-medium mb-1">Name</label>
|
|
@@ -89,12 +89,12 @@
|
|
|
89
89
|
<textarea id="drawer-bio" class="w-full border rounded px-3 py-2" rows="3" placeholder="Tell us about yourself"></textarea>
|
|
90
90
|
</div>
|
|
91
91
|
</form>
|
|
92
|
-
<div class="flex gap-2 mt-6">
|
|
93
|
-
<Button variant="ghost" onclick={() => openRight = false}>Cancel</Button>
|
|
94
|
-
<Button onclick={() => openRight = false}>Save Changes</Button>
|
|
95
|
-
</div>
|
|
96
|
-
</div>
|
|
97
|
-
</Drawer>
|
|
98
|
-
</div>
|
|
99
|
-
{/snippet}
|
|
100
|
-
</Story>
|
|
92
|
+
<div class="flex gap-2 mt-6">
|
|
93
|
+
<Button variant="ghost" onclick={() => openRight = false}>Cancel</Button>
|
|
94
|
+
<Button onclick={() => openRight = false}>Save Changes</Button>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</Drawer>
|
|
98
|
+
</div>
|
|
99
|
+
{/snippet}
|
|
100
|
+
</Story>
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
import type { Snippet } from "svelte";
|
|
6
6
|
|
|
7
7
|
interface Props {
|
|
8
|
-
|
|
9
|
-
hidden?: boolean;
|
|
8
|
+
open?: boolean;
|
|
10
9
|
title?: string;
|
|
11
10
|
placement?: string;
|
|
12
11
|
width?: string;
|
|
@@ -26,8 +25,7 @@
|
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
let {
|
|
29
|
-
|
|
30
|
-
hidden = $bindable(true),
|
|
28
|
+
open = $bindable(false),
|
|
31
29
|
title = "",
|
|
32
30
|
placement = "left",
|
|
33
31
|
width = "md",
|
|
@@ -46,7 +44,7 @@
|
|
|
46
44
|
...restProps
|
|
47
45
|
}: Props = $props();
|
|
48
46
|
|
|
49
|
-
let isVisible = $derived(
|
|
47
|
+
let isVisible = $derived(open);
|
|
50
48
|
let drawerElement: HTMLElement | null = $state(null);
|
|
51
49
|
let previouslyFocusedElement: Element | null = $state(null);
|
|
52
50
|
|
|
@@ -59,38 +57,37 @@
|
|
|
59
57
|
};
|
|
60
58
|
|
|
61
59
|
let widthClass = $derived(widthClasses[width] || widthClasses.md);
|
|
62
|
-
|
|
63
|
-
// Compute fly transition direction based on placement
|
|
64
|
-
let flyParams = $derived.by(() => {
|
|
65
|
-
const distance = 400;
|
|
66
|
-
switch (placement) {
|
|
67
|
-
case 'left': return { x: -distance, duration: 300 };
|
|
68
|
-
case 'right': return { x: distance, duration: 300 };
|
|
69
|
-
case 'top': return { y: -distance, duration: 300 };
|
|
70
|
-
case 'bottom': return { y: distance, duration: 300 };
|
|
71
|
-
default: return { x: -distance, duration: 300 };
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
// Placement classes (without transform - we use Svelte transitions now)
|
|
76
|
-
let placementClasses = $derived.by(() => {
|
|
77
|
-
switch (placement) {
|
|
78
|
-
case 'left':
|
|
79
|
-
return `top-0 left-0 h-screen ${widthClass} max-w-full border-r border-gray-200 dark:border-gray-700`;
|
|
80
|
-
case 'right':
|
|
81
|
-
return `top-0 right-0 h-screen ${widthClass} max-w-full border-l border-gray-200 dark:border-gray-700`;
|
|
82
|
-
case 'top':
|
|
83
|
-
return `top-0 left-0 right-0 w-full border-b border-gray-200 dark:border-gray-700`;
|
|
84
|
-
case 'bottom':
|
|
85
|
-
return `bottom-0 left-0 right-0 w-full border-t border-gray-200 dark:border-gray-700`;
|
|
86
|
-
default:
|
|
87
|
-
return `top-0 left-0 h-screen ${widthClass} max-w-full border-r border-gray-200 dark:border-gray-700`;
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
|
|
60
|
+
|
|
61
|
+
// Compute fly transition direction based on placement
|
|
62
|
+
let flyParams = $derived.by(() => {
|
|
63
|
+
const distance = 400;
|
|
64
|
+
switch (placement) {
|
|
65
|
+
case 'left': return { x: -distance, duration: 300 };
|
|
66
|
+
case 'right': return { x: distance, duration: 300 };
|
|
67
|
+
case 'top': return { y: -distance, duration: 300 };
|
|
68
|
+
case 'bottom': return { y: distance, duration: 300 };
|
|
69
|
+
default: return { x: -distance, duration: 300 };
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Placement classes (without transform - we use Svelte transitions now)
|
|
74
|
+
let placementClasses = $derived.by(() => {
|
|
75
|
+
switch (placement) {
|
|
76
|
+
case 'left':
|
|
77
|
+
return `top-0 left-0 h-screen ${widthClass} max-w-full border-r border-gray-200 dark:border-gray-700`;
|
|
78
|
+
case 'right':
|
|
79
|
+
return `top-0 right-0 h-screen ${widthClass} max-w-full border-l border-gray-200 dark:border-gray-700`;
|
|
80
|
+
case 'top':
|
|
81
|
+
return `top-0 left-0 right-0 w-full border-b border-gray-200 dark:border-gray-700`;
|
|
82
|
+
case 'bottom':
|
|
83
|
+
return `bottom-0 left-0 right-0 w-full border-t border-gray-200 dark:border-gray-700`;
|
|
84
|
+
default:
|
|
85
|
+
return `top-0 left-0 h-screen ${widthClass} max-w-full border-r border-gray-200 dark:border-gray-700`;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
91
89
|
function close() {
|
|
92
|
-
|
|
93
|
-
show = false;
|
|
90
|
+
open = false;
|
|
94
91
|
onclose?.();
|
|
95
92
|
}
|
|
96
93
|
|
|
@@ -125,15 +122,14 @@
|
|
|
125
122
|
}
|
|
126
123
|
}
|
|
127
124
|
}
|
|
128
|
-
|
|
129
|
-
function handleEdgeClick() {
|
|
130
|
-
if (edge && placement === "bottom") {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
125
|
+
|
|
126
|
+
function handleEdgeClick() {
|
|
127
|
+
if (edge && placement === "bottom") {
|
|
128
|
+
open = true;
|
|
129
|
+
onopen?.();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
137
133
|
// Lock body scroll when drawer is open
|
|
138
134
|
$effect(() => {
|
|
139
135
|
if (typeof document !== "undefined") {
|
|
@@ -152,85 +148,85 @@
|
|
|
152
148
|
}
|
|
153
149
|
}
|
|
154
150
|
});
|
|
155
|
-
|
|
156
|
-
onDestroy(() => {
|
|
157
|
-
if (typeof document !== "undefined") {
|
|
158
|
-
document.body.style.overflow = "";
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
</script>
|
|
162
|
-
|
|
163
|
-
<svelte:window onkeydown={handleKeydown} />
|
|
164
|
-
|
|
165
|
-
<!-- Edge trigger for bottom placement -->
|
|
166
|
-
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
167
|
-
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
168
|
-
{#if edge && placement === "bottom" && !isVisible}
|
|
169
|
-
<div
|
|
170
|
-
class="fixed bottom-0 left-0 right-0 z-40 flex justify-center w-full p-4 cursor-pointer bg-white border-t border-gray-200 hover:bg-gray-50 dark:bg-gray-800 dark:border-gray-700 dark:hover:bg-gray-700 transition-colors"
|
|
171
|
-
style="bottom: {edgeOffset}px"
|
|
172
|
-
onclick={handleEdgeClick}
|
|
173
|
-
>
|
|
174
|
-
<span class="absolute w-8 h-1 -translate-x-1/2 bg-gray-300 rounded-lg top-3 left-1/2 dark:bg-gray-600"></span>
|
|
175
|
-
</div>
|
|
176
|
-
{/if}
|
|
177
|
-
|
|
178
|
-
<!-- Only render when visible - no transform issues with portals! -->
|
|
179
|
-
{#if isVisible}
|
|
180
|
-
<!-- Backdrop -->
|
|
181
|
-
{#if backdrop}
|
|
182
|
-
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
183
|
-
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
184
|
-
<div
|
|
185
|
-
class="fixed inset-0 z-30 bg-gray-900/50 dark:bg-gray-900/80"
|
|
186
|
-
onclick={handleBackdropClick}
|
|
187
|
-
transition:fade={{ duration: 200 }}
|
|
188
|
-
role="presentation"
|
|
189
|
-
></div>
|
|
190
|
-
{/if}
|
|
191
|
-
|
|
192
|
-
<!-- Drawer panel - proper dialog with focus trap -->
|
|
193
|
-
<aside
|
|
194
|
-
bind:this={drawerElement}
|
|
195
|
-
{id}
|
|
196
|
-
class="
|
|
197
|
-
fixed z-40 flex flex-col bg-white dark:bg-gray-800
|
|
198
|
-
{placementClasses}
|
|
199
|
-
{className}
|
|
200
|
-
"
|
|
201
|
-
role="dialog"
|
|
202
|
-
aria-modal="true"
|
|
203
|
-
aria-labelledby={title ? `${id}-label` : undefined}
|
|
204
|
-
tabindex="-1"
|
|
205
|
-
transition:fly={flyParams}
|
|
206
|
-
{...restProps}
|
|
207
|
-
>
|
|
208
|
-
<!-- Header (sticky) -->
|
|
209
|
-
{#if title || header}
|
|
210
|
-
<header class="shrink-0 p-4 border-b border-gray-200 dark:border-gray-700">
|
|
211
|
-
{#if header}
|
|
212
|
-
{@render header()}
|
|
213
|
-
{:else}
|
|
214
|
-
<h5
|
|
215
|
-
id={id ? `${id}-label` : undefined}
|
|
216
|
-
class={typography.h3}
|
|
217
|
-
>
|
|
218
|
-
{title}
|
|
219
|
-
</h5>
|
|
220
|
-
{/if}
|
|
221
|
-
</header>
|
|
222
|
-
{/if}
|
|
223
|
-
|
|
224
|
-
<!-- Content (single scrollable area) -->
|
|
225
|
-
<div class="flex-1 overflow-y-auto overscroll-contain">
|
|
226
|
-
{#if children}{@render children()}{/if}
|
|
227
|
-
</div>
|
|
228
|
-
|
|
229
|
-
<!-- Actions (sticky footer) -->
|
|
230
|
-
{#if actions}
|
|
231
|
-
<footer class="shrink-0 p-4 border-t border-gray-200 dark:border-gray-700 flex flex-col gap-3">
|
|
232
|
-
{@render actions()}
|
|
233
|
-
</footer>
|
|
234
|
-
{/if}
|
|
235
|
-
</aside>
|
|
236
|
-
{/if}
|
|
151
|
+
|
|
152
|
+
onDestroy(() => {
|
|
153
|
+
if (typeof document !== "undefined") {
|
|
154
|
+
document.body.style.overflow = "";
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
</script>
|
|
158
|
+
|
|
159
|
+
<svelte:window onkeydown={handleKeydown} />
|
|
160
|
+
|
|
161
|
+
<!-- Edge trigger for bottom placement -->
|
|
162
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
163
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
164
|
+
{#if edge && placement === "bottom" && !isVisible}
|
|
165
|
+
<div
|
|
166
|
+
class="fixed bottom-0 left-0 right-0 z-40 flex justify-center w-full p-4 cursor-pointer bg-white border-t border-gray-200 hover:bg-gray-50 dark:bg-gray-800 dark:border-gray-700 dark:hover:bg-gray-700 transition-colors"
|
|
167
|
+
style="bottom: {edgeOffset}px"
|
|
168
|
+
onclick={handleEdgeClick}
|
|
169
|
+
>
|
|
170
|
+
<span class="absolute w-8 h-1 -translate-x-1/2 bg-gray-300 rounded-lg top-3 left-1/2 dark:bg-gray-600"></span>
|
|
171
|
+
</div>
|
|
172
|
+
{/if}
|
|
173
|
+
|
|
174
|
+
<!-- Only render when visible - no transform issues with portals! -->
|
|
175
|
+
{#if isVisible}
|
|
176
|
+
<!-- Backdrop -->
|
|
177
|
+
{#if backdrop}
|
|
178
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
179
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
180
|
+
<div
|
|
181
|
+
class="fixed inset-0 z-30 bg-gray-900/50 dark:bg-gray-900/80"
|
|
182
|
+
onclick={handleBackdropClick}
|
|
183
|
+
transition:fade={{ duration: 200 }}
|
|
184
|
+
role="presentation"
|
|
185
|
+
></div>
|
|
186
|
+
{/if}
|
|
187
|
+
|
|
188
|
+
<!-- Drawer panel - proper dialog with focus trap -->
|
|
189
|
+
<aside
|
|
190
|
+
bind:this={drawerElement}
|
|
191
|
+
{id}
|
|
192
|
+
class="
|
|
193
|
+
fixed z-40 flex flex-col bg-white dark:bg-gray-800
|
|
194
|
+
{placementClasses}
|
|
195
|
+
{className}
|
|
196
|
+
"
|
|
197
|
+
role="dialog"
|
|
198
|
+
aria-modal="true"
|
|
199
|
+
aria-labelledby={title ? `${id}-label` : undefined}
|
|
200
|
+
tabindex="-1"
|
|
201
|
+
transition:fly={flyParams}
|
|
202
|
+
{...restProps}
|
|
203
|
+
>
|
|
204
|
+
<!-- Header (sticky) -->
|
|
205
|
+
{#if title || header}
|
|
206
|
+
<header class="shrink-0 p-4 border-b border-gray-200 dark:border-gray-700">
|
|
207
|
+
{#if header}
|
|
208
|
+
{@render header()}
|
|
209
|
+
{:else}
|
|
210
|
+
<h5
|
|
211
|
+
id={id ? `${id}-label` : undefined}
|
|
212
|
+
class={typography.h3}
|
|
213
|
+
>
|
|
214
|
+
{title}
|
|
215
|
+
</h5>
|
|
216
|
+
{/if}
|
|
217
|
+
</header>
|
|
218
|
+
{/if}
|
|
219
|
+
|
|
220
|
+
<!-- Content (single scrollable area) -->
|
|
221
|
+
<div class="flex-1 overflow-y-auto overscroll-contain">
|
|
222
|
+
{#if children}{@render children()}{/if}
|
|
223
|
+
</div>
|
|
224
|
+
|
|
225
|
+
<!-- Actions (sticky footer) -->
|
|
226
|
+
{#if actions}
|
|
227
|
+
<footer class="shrink-0 p-4 border-t border-gray-200 dark:border-gray-700 flex flex-col gap-3">
|
|
228
|
+
{@render actions()}
|
|
229
|
+
</footer>
|
|
230
|
+
{/if}
|
|
231
|
+
</aside>
|
|
232
|
+
{/if}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
2
|
interface Props {
|
|
3
|
-
|
|
4
|
-
hidden?: boolean;
|
|
3
|
+
open?: boolean;
|
|
5
4
|
title?: string;
|
|
6
5
|
placement?: string;
|
|
7
6
|
width?: string;
|
|
@@ -19,7 +18,7 @@ interface Props {
|
|
|
19
18
|
class?: string;
|
|
20
19
|
[key: string]: unknown;
|
|
21
20
|
}
|
|
22
|
-
declare const Drawer: import("svelte").Component<Props, {}, "
|
|
21
|
+
declare const Drawer: import("svelte").Component<Props, {}, "open">;
|
|
23
22
|
type Drawer = ReturnType<typeof Drawer>;
|
|
24
23
|
export default Drawer;
|
|
25
24
|
//# sourceMappingURL=Drawer.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Drawer/Drawer.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"Drawer.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Drawer/Drawer.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAmMH,QAAA,MAAM,MAAM,+CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
|