@getmicdrop/svelte-components 5.3.12 → 5.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +145 -145
- package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
- package/dist/components/Layout/Grid.svelte +109 -109
- package/dist/components/Layout/Section.svelte +80 -80
- package/dist/components/Layout/Sidebar.svelte +108 -108
- package/dist/components/Layout/Stack.svelte +90 -90
- package/dist/constants/formOptions.js +26 -26
- package/dist/constants/validation.js +91 -91
- package/dist/constants/validation.spec.js +64 -64
- package/dist/datetime/__tests__/format.test.d.ts +2 -0
- package/dist/datetime/__tests__/format.test.d.ts.map +1 -0
- package/dist/datetime/__tests__/format.test.js +268 -0
- package/dist/datetime/__tests__/integration.test.d.ts +2 -0
- package/dist/datetime/__tests__/integration.test.d.ts.map +1 -0
- package/dist/datetime/__tests__/integration.test.js +243 -0
- package/dist/datetime/__tests__/parse.test.d.ts +2 -0
- package/dist/datetime/__tests__/parse.test.d.ts.map +1 -0
- package/dist/datetime/__tests__/parse.test.js +261 -0
- package/dist/datetime/__tests__/timezone.test.d.ts +2 -0
- package/dist/datetime/__tests__/timezone.test.d.ts.map +1 -0
- package/dist/datetime/__tests__/timezone.test.js +214 -0
- package/dist/datetime/constants.d.ts +133 -0
- package/dist/datetime/constants.d.ts.map +1 -0
- package/dist/datetime/constants.js +112 -0
- package/dist/datetime/format.d.ts +158 -0
- package/dist/datetime/format.d.ts.map +1 -0
- package/dist/datetime/format.js +315 -0
- package/dist/datetime/index.d.ts +42 -0
- package/dist/datetime/index.d.ts.map +1 -0
- package/dist/datetime/index.js +44 -0
- package/dist/datetime/parse.d.ts +149 -0
- package/dist/datetime/parse.d.ts.map +1 -0
- package/dist/datetime/parse.js +276 -0
- package/dist/datetime/timezone.d.ts +95 -0
- package/dist/datetime/timezone.d.ts.map +1 -0
- package/dist/datetime/timezone.js +241 -0
- package/dist/datetime/types.d.ts +105 -0
- package/dist/datetime/types.d.ts.map +1 -0
- package/dist/datetime/types.js +31 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +232 -218
- package/dist/patterns/data/DataGrid.svelte +45 -45
- package/dist/patterns/data/DataList.svelte +24 -24
- package/dist/patterns/data/DataTable.svelte +40 -40
- package/dist/patterns/forms/FormActions.spec.js +88 -88
- 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.spec.js +203 -203
- package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
- package/dist/patterns/forms/FormValidationSummary.svelte +67 -67
- package/dist/patterns/layout/Grid.svelte +35 -35
- package/dist/patterns/layout/Sidebar.svelte +39 -39
- package/dist/patterns/layout/Stack.svelte +45 -45
- package/dist/patterns/navigation/BottomNav.spec.js +130 -130
- package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
- package/dist/patterns/navigation/BottomNav.svelte +54 -54
- package/dist/patterns/navigation/Header.spec.js +203 -203
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +240 -240
- package/dist/patterns/page/PageHeader.svelte +36 -36
- package/dist/patterns/page/PageLayout.svelte +40 -40
- package/dist/patterns/page/PageLoader.spec.js +54 -54
- package/dist/patterns/page/PageLoader.stories.svelte +137 -137
- package/dist/patterns/page/PageLoader.svelte +41 -41
- package/dist/patterns/page/SectionHeader.svelte +41 -41
- 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 +61 -61
- package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
- package/dist/primitives/Alert/Alert.spec.js +170 -170
- package/dist/primitives/Alert/Alert.stories.svelte +88 -88
- package/dist/primitives/Alert/Alert.svelte +65 -65
- package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
- package/dist/primitives/Avatar/Avatar.svelte +66 -66
- package/dist/primitives/Badges/Badge.spec.js +103 -103
- package/dist/primitives/Badges/Badge.stories.svelte +86 -86
- package/dist/primitives/Badges/Badge.svelte +142 -142
- package/dist/primitives/BottomSheet/BottomSheet.spec.js +127 -127
- package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
- package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +120 -120
- package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
- package/dist/primitives/Button/Button.spec.js +211 -211
- package/dist/primitives/Button/Button.stories.svelte +76 -76
- package/dist/primitives/Button/Button.svelte +301 -301
- package/dist/primitives/Button/ButtonSaveDemo.spec.js +48 -48
- 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 +357 -357
- package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
- package/dist/primitives/DarkModeToggle.svelte +136 -136
- package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
- package/dist/primitives/Drawer/Drawer.svelte +214 -214
- package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
- package/dist/primitives/Dropdown/Dropdown.svelte +148 -148
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Icons/ArrowLeft.svelte +20 -20
- package/dist/primitives/Icons/ArrowRight.svelte +20 -20
- package/dist/primitives/Icons/Availability.svelte +26 -26
- package/dist/primitives/Icons/Back.svelte +26 -26
- package/dist/primitives/Icons/CheckCircle.svelte +18 -18
- package/dist/primitives/Icons/CheckCircleOutline.svelte +27 -27
- package/dist/primitives/Icons/ChevronLeft.svelte +16 -16
- package/dist/primitives/Icons/ChevronRight.svelte +16 -16
- package/dist/primitives/Icons/Copy.svelte +27 -27
- package/dist/primitives/Icons/Cross.svelte +17 -17
- package/dist/primitives/Icons/DownArrow.svelte +20 -20
- package/dist/primitives/Icons/ErrorCircle.svelte +18 -18
- package/dist/primitives/Icons/FacebookIcon.svelte +13 -13
- package/dist/primitives/Icons/Home.svelte +27 -27
- package/dist/primitives/Icons/Icon.spec.js +175 -175
- package/dist/primitives/Icons/Icon.stories.svelte +100 -100
- package/dist/primitives/Icons/Icon.svelte +63 -63
- package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
- package/dist/primitives/Icons/ImageOutline.svelte +19 -19
- package/dist/primitives/Icons/Info.svelte +19 -19
- package/dist/primitives/Icons/InstagramIcon.svelte +19 -19
- package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
- package/dist/primitives/Icons/Message.svelte +27 -27
- package/dist/primitives/Icons/MoonIcon.svelte +16 -16
- package/dist/primitives/Icons/More.svelte +33 -33
- package/dist/primitives/Icons/MoreHori.spec.js +67 -67
- package/dist/primitives/Icons/MoreHori.svelte +34 -34
- package/dist/primitives/Icons/Notification.svelte +26 -26
- package/dist/primitives/Icons/Payment.svelte +26 -26
- package/dist/primitives/Icons/Profile.svelte +33 -33
- package/dist/primitives/Icons/Reload.svelte +41 -41
- package/dist/primitives/Icons/Shows.svelte +33 -33
- package/dist/primitives/Icons/Signout.svelte +33 -33
- package/dist/primitives/Icons/SunIcon.svelte +19 -19
- package/dist/primitives/Icons/TiktokIcon.svelte +13 -13
- package/dist/primitives/Icons/TrashBinOutline.svelte +19 -19
- package/dist/primitives/Icons/TwitterIcon.svelte +13 -13
- package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
- package/dist/primitives/Icons/WarningIcon.svelte +24 -24
- package/dist/primitives/Input/Input.spec.js +573 -573
- package/dist/primitives/Input/Input.stories.svelte +139 -139
- package/dist/primitives/Input/Input.svelte +444 -444
- package/dist/primitives/Input/Select.spec.js +218 -218
- package/dist/primitives/Input/Select.stories.svelte +112 -112
- package/dist/primitives/Input/Select.svelte +232 -232
- package/dist/primitives/Input/Textarea.stories.svelte +137 -137
- package/dist/primitives/Input/Textarea.svelte +79 -79
- package/dist/primitives/Label/Label.svelte +37 -37
- package/dist/primitives/Modal/Modal.spec.js +95 -95
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- package/dist/primitives/Modal/Modal.svelte +158 -158
- 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 +52 -52
- package/dist/primitives/Spinner/Spinner.spec.js +75 -75
- package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
- package/dist/primitives/Spinner/Spinner.svelte +57 -57
- package/dist/primitives/Tabs/TabItem.svelte +51 -51
- package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
- package/dist/primitives/Tabs/Tabs.svelte +128 -128
- package/dist/primitives/Toggle.spec.js +127 -127
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Toggle.svelte +71 -71
- package/dist/primitives/Typography/Typography.svelte +53 -53
- package/dist/primitives/ValidationError.spec.js +103 -103
- package/dist/primitives/ValidationError.stories.svelte +111 -111
- package/dist/primitives/ValidationError.svelte +29 -29
- package/dist/recipes/CropImage/CropImage.spec.js +216 -216
- package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
- package/dist/recipes/CropImage/CropImage.svelte +238 -238
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +980 -980
- package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
- package/dist/recipes/feedback/EmptyState/EmptyState.svelte +47 -47
- package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
- package/dist/recipes/feedback/ErrorDisplay.stories.svelte +112 -112
- package/dist/recipes/feedback/ErrorDisplay.svelte +38 -38
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +129 -129
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +167 -167
- 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 +82 -82
- package/dist/recipes/fields/TextareaField.svelte +101 -101
- package/dist/recipes/fields/ToggleField.svelte +60 -60
- package/dist/recipes/fields/index.js +7 -7
- package/dist/recipes/inputs/MultiSelect.spec.js +257 -257
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/MultiSelect.svelte +244 -244
- package/dist/recipes/inputs/OTPInput.spec.js +238 -238
- package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
- package/dist/recipes/inputs/OTPInput.svelte +102 -102
- package/dist/recipes/inputs/PasswordInput.svelte +100 -100
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +173 -173
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +108 -108
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +300 -300
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +165 -165
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +337 -337
- package/dist/recipes/inputs/Search.svelte +85 -85
- package/dist/recipes/inputs/SelectDropdown.svelte +161 -161
- package/dist/recipes/modals/AlertModal.svelte +130 -130
- package/dist/recipes/modals/ConfirmationModal.spec.js +191 -191
- 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 +342 -342
- package/dist/stores/auth.js +93 -6
- package/dist/stores/auth.spec.js +310 -2
- 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 +388 -388
- 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 +441 -441
- package/dist/stories/button-audit-manifest.json +11186 -11186
- package/dist/tailwind/preset.cjs +82 -82
- package/dist/telemetry.js +357 -357
- package/dist/tokens/tokens.css +87 -87
- package/dist/utils/apiConfig.js +49 -49
- package/dist/utils/utils.js +9 -1
- package/package.json +233 -191
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { typography } from '../../tokens/typography';
|
|
3
|
-
|
|
4
|
-
let {
|
|
5
|
-
day = '',
|
|
6
|
-
date = '',
|
|
7
|
-
time = '',
|
|
8
|
-
isSelected = false,
|
|
9
|
-
onselect,
|
|
10
|
-
} = $props();
|
|
11
|
-
|
|
12
|
-
function handleCardClick() {
|
|
13
|
-
onselect?.({ date });
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function handleKeydown(e) {
|
|
17
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
18
|
-
e.preventDefault();
|
|
19
|
-
handleCardClick();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function formatHour(timeStr) {
|
|
24
|
-
if (!timeStr) return '';
|
|
25
|
-
const d = new Date(`1970-01-01T${timeStr}`);
|
|
26
|
-
if (isNaN(d.getTime())) return timeStr;
|
|
27
|
-
return d.toLocaleTimeString('en-US', {
|
|
28
|
-
hour: 'numeric',
|
|
29
|
-
minute: '2-digit',
|
|
30
|
-
hour12: true
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function formatDate(dateStr) {
|
|
35
|
-
if (!dateStr) return '';
|
|
36
|
-
const d = new Date(dateStr);
|
|
37
|
-
if (isNaN(d.getTime())) return dateStr;
|
|
38
|
-
return d.toLocaleDateString('en-US', {
|
|
39
|
-
month: 'short',
|
|
40
|
-
day: 'numeric',
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<div
|
|
46
|
-
class="w-full h-28 rounded-lg flex flex-col justify-center items-center gap-1.5 cursor-pointer border-2 px-1 transition-colors bg-white dark:bg-gray-800 {isSelected
|
|
47
|
-
? 'border-blue-700 dark:border-blue-500'
|
|
48
|
-
: 'border-gray-200 dark:border-gray-700 hover:border-blue-700 dark:hover:border-blue-500'}"
|
|
49
|
-
onclick={handleCardClick}
|
|
50
|
-
onkeydown={handleKeydown}
|
|
51
|
-
tabindex="0"
|
|
52
|
-
role="button"
|
|
53
|
-
aria-label={`${day} ${formatDate(date)} at ${formatHour(time)}${isSelected ? ', selected' : ''}`}
|
|
54
|
-
aria-pressed={isSelected}
|
|
55
|
-
>
|
|
56
|
-
<span class="{typography.label} text-sm {typography.textMuted}">{day}</span>
|
|
57
|
-
<span class="{typography.label} text-base {isSelected ? 'text-blue-700 dark:text-blue-500' : ''}">
|
|
58
|
-
{formatDate(date)}
|
|
59
|
-
</span>
|
|
60
|
-
<span class="{typography.label} text-sm {typography.textMuted}">{formatHour(time)}</span>
|
|
61
|
-
</div>
|
|
1
|
+
<script>
|
|
2
|
+
import { typography } from '../../tokens/typography';
|
|
3
|
+
|
|
4
|
+
let {
|
|
5
|
+
day = '',
|
|
6
|
+
date = '',
|
|
7
|
+
time = '',
|
|
8
|
+
isSelected = false,
|
|
9
|
+
onselect,
|
|
10
|
+
} = $props();
|
|
11
|
+
|
|
12
|
+
function handleCardClick() {
|
|
13
|
+
onselect?.({ date });
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function handleKeydown(e) {
|
|
17
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
18
|
+
e.preventDefault();
|
|
19
|
+
handleCardClick();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function formatHour(timeStr) {
|
|
24
|
+
if (!timeStr) return '';
|
|
25
|
+
const d = new Date(`1970-01-01T${timeStr}`);
|
|
26
|
+
if (isNaN(d.getTime())) return timeStr;
|
|
27
|
+
return d.toLocaleTimeString('en-US', {
|
|
28
|
+
hour: 'numeric',
|
|
29
|
+
minute: '2-digit',
|
|
30
|
+
hour12: true
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function formatDate(dateStr) {
|
|
35
|
+
if (!dateStr) return '';
|
|
36
|
+
const d = new Date(dateStr);
|
|
37
|
+
if (isNaN(d.getTime())) return dateStr;
|
|
38
|
+
return d.toLocaleDateString('en-US', {
|
|
39
|
+
month: 'short',
|
|
40
|
+
day: 'numeric',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<div
|
|
46
|
+
class="w-full h-28 rounded-lg flex flex-col justify-center items-center gap-1.5 cursor-pointer border-2 px-1 transition-colors bg-white dark:bg-gray-800 {isSelected
|
|
47
|
+
? 'border-blue-700 dark:border-blue-500'
|
|
48
|
+
: 'border-gray-200 dark:border-gray-700 hover:border-blue-700 dark:hover:border-blue-500'}"
|
|
49
|
+
onclick={handleCardClick}
|
|
50
|
+
onkeydown={handleKeydown}
|
|
51
|
+
tabindex="0"
|
|
52
|
+
role="button"
|
|
53
|
+
aria-label={`${day} ${formatDate(date)} at ${formatHour(time)}${isSelected ? ', selected' : ''}`}
|
|
54
|
+
aria-pressed={isSelected}
|
|
55
|
+
>
|
|
56
|
+
<span class="{typography.label} text-sm {typography.textMuted}">{day}</span>
|
|
57
|
+
<span class="{typography.label} text-base {isSelected ? 'text-blue-700 dark:text-blue-500' : ''}">
|
|
58
|
+
{formatDate(date)}
|
|
59
|
+
</span>
|
|
60
|
+
<span class="{typography.label} text-sm {typography.textMuted}">{formatHour(time)}</span>
|
|
61
|
+
</div>
|
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Grid - Responsive grid container with automatic column sizing
|
|
6
|
-
*
|
|
7
|
-
* Use Grid for laying out cards, stats, or any items in a responsive grid.
|
|
8
|
-
* Automatically stacks on mobile and expands on larger screens.
|
|
9
|
-
*
|
|
10
|
-
* @example Numeric gap
|
|
11
|
-
* <Grid cols="3" gap="6">
|
|
12
|
-
* <StatsCard>Revenue</StatsCard>
|
|
13
|
-
* <StatsCard>Users</StatsCard>
|
|
14
|
-
* <StatsCard>Orders</StatsCard>
|
|
15
|
-
* </Grid>
|
|
16
|
-
*
|
|
17
|
-
* @example Semantic gap (recommended)
|
|
18
|
-
* <Grid cols="3" gap="section">
|
|
19
|
-
* <Card>Card 1</Card>
|
|
20
|
-
* <Card>Card 2</Card>
|
|
21
|
-
* <Card>Card 3</Card>
|
|
22
|
-
* </Grid>
|
|
23
|
-
*
|
|
24
|
-
* @example Auto-fit columns
|
|
25
|
-
* <Grid cols="auto" minWidth="300px" gap="section">
|
|
26
|
-
* {#each items as item}
|
|
27
|
-
* <Card>{item.name}</Card>
|
|
28
|
-
* {/each}
|
|
29
|
-
* </Grid>
|
|
30
|
-
*
|
|
31
|
-
* Semantic Gap Values (Flowbite/8px grid):
|
|
32
|
-
* - tight: 16px (4) - Tight grid items
|
|
33
|
-
* - standard: 24px (6) - Standard grid items (default)
|
|
34
|
-
* - spacious: 32px (8) - Spacious grid items
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
interface Props {
|
|
38
|
-
/** Number of columns or 'auto' for auto-fit */
|
|
39
|
-
cols?: '1' | '2' | '3' | '4' | '6' | 'auto';
|
|
40
|
-
/** Gap between grid items - semantic names or Tailwind spacing scale */
|
|
41
|
-
gap?: 'tight' | 'standard' | 'spacious' | '0' | '2' | '3' | '4' | '6' | '8';
|
|
42
|
-
/** Minimum width for auto-fit columns (only used when cols='auto') */
|
|
43
|
-
minWidth?: string;
|
|
44
|
-
/** HTML element to render as */
|
|
45
|
-
as?: 'div' | 'section' | 'ul';
|
|
46
|
-
/** Additional CSS classes */
|
|
47
|
-
class?: string;
|
|
48
|
-
/** Child content */
|
|
49
|
-
children?: Snippet;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
let {
|
|
53
|
-
cols = '3',
|
|
54
|
-
gap = '4',
|
|
55
|
-
minWidth = '280px',
|
|
56
|
-
as = 'div',
|
|
57
|
-
class: className = '',
|
|
58
|
-
children
|
|
59
|
-
}: Props = $props();
|
|
60
|
-
|
|
61
|
-
// Semantic gap names for grids
|
|
62
|
-
const semanticGapMap: Record<string, string> = {
|
|
63
|
-
'tight': 'gap-4', // 16px - Tight grid items
|
|
64
|
-
'standard': 'gap-6', // 24px - Standard grid items
|
|
65
|
-
'spacious': 'gap-8', // 32px - Spacious grid items
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
// Numeric gap values (backwards compatible)
|
|
69
|
-
const numericGapMap: Record<string, string> = {
|
|
70
|
-
'0': 'gap-0',
|
|
71
|
-
'2': 'gap-2',
|
|
72
|
-
'3': 'gap-3',
|
|
73
|
-
'4': 'gap-4',
|
|
74
|
-
'6': 'gap-6',
|
|
75
|
-
'8': 'gap-8'
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
// Combined map
|
|
79
|
-
const gapMap: Record<string, string> = { ...numericGapMap, ...semanticGapMap };
|
|
80
|
-
|
|
81
|
-
// Responsive column mappings - stack on mobile, expand on larger screens
|
|
82
|
-
const colsMap: Record<string, string> = {
|
|
83
|
-
'1': 'grid-cols-1',
|
|
84
|
-
'2': 'grid-cols-1 md:grid-cols-2',
|
|
85
|
-
'3': 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
|
|
86
|
-
'4': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',
|
|
87
|
-
'6': 'grid-cols-2 md:grid-cols-3 lg:grid-cols-6',
|
|
88
|
-
'auto': '' // Uses inline style
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
let gridStyle = $derived(
|
|
92
|
-
cols === 'auto'
|
|
93
|
-
? `grid-template-columns: repeat(auto-fit, minmax(${minWidth}, 1fr));`
|
|
94
|
-
: ''
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
let classes = $derived(
|
|
98
|
-
[
|
|
99
|
-
'grid',
|
|
100
|
-
cols !== 'auto' ? colsMap[cols] : '',
|
|
101
|
-
gapMap[gap] || 'gap-4',
|
|
102
|
-
className
|
|
103
|
-
].filter(Boolean).join(' ')
|
|
104
|
-
);
|
|
105
|
-
</script>
|
|
106
|
-
|
|
107
|
-
<svelte:element this={as} class={classes} style={gridStyle || undefined}>
|
|
108
|
-
{@render children?.()}
|
|
109
|
-
</svelte:element>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Grid - Responsive grid container with automatic column sizing
|
|
6
|
+
*
|
|
7
|
+
* Use Grid for laying out cards, stats, or any items in a responsive grid.
|
|
8
|
+
* Automatically stacks on mobile and expands on larger screens.
|
|
9
|
+
*
|
|
10
|
+
* @example Numeric gap
|
|
11
|
+
* <Grid cols="3" gap="6">
|
|
12
|
+
* <StatsCard>Revenue</StatsCard>
|
|
13
|
+
* <StatsCard>Users</StatsCard>
|
|
14
|
+
* <StatsCard>Orders</StatsCard>
|
|
15
|
+
* </Grid>
|
|
16
|
+
*
|
|
17
|
+
* @example Semantic gap (recommended)
|
|
18
|
+
* <Grid cols="3" gap="section">
|
|
19
|
+
* <Card>Card 1</Card>
|
|
20
|
+
* <Card>Card 2</Card>
|
|
21
|
+
* <Card>Card 3</Card>
|
|
22
|
+
* </Grid>
|
|
23
|
+
*
|
|
24
|
+
* @example Auto-fit columns
|
|
25
|
+
* <Grid cols="auto" minWidth="300px" gap="section">
|
|
26
|
+
* {#each items as item}
|
|
27
|
+
* <Card>{item.name}</Card>
|
|
28
|
+
* {/each}
|
|
29
|
+
* </Grid>
|
|
30
|
+
*
|
|
31
|
+
* Semantic Gap Values (Flowbite/8px grid):
|
|
32
|
+
* - tight: 16px (4) - Tight grid items
|
|
33
|
+
* - standard: 24px (6) - Standard grid items (default)
|
|
34
|
+
* - spacious: 32px (8) - Spacious grid items
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
interface Props {
|
|
38
|
+
/** Number of columns or 'auto' for auto-fit */
|
|
39
|
+
cols?: '1' | '2' | '3' | '4' | '6' | 'auto';
|
|
40
|
+
/** Gap between grid items - semantic names or Tailwind spacing scale */
|
|
41
|
+
gap?: 'tight' | 'standard' | 'spacious' | '0' | '2' | '3' | '4' | '6' | '8';
|
|
42
|
+
/** Minimum width for auto-fit columns (only used when cols='auto') */
|
|
43
|
+
minWidth?: string;
|
|
44
|
+
/** HTML element to render as */
|
|
45
|
+
as?: 'div' | 'section' | 'ul';
|
|
46
|
+
/** Additional CSS classes */
|
|
47
|
+
class?: string;
|
|
48
|
+
/** Child content */
|
|
49
|
+
children?: Snippet;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let {
|
|
53
|
+
cols = '3',
|
|
54
|
+
gap = '4',
|
|
55
|
+
minWidth = '280px',
|
|
56
|
+
as = 'div',
|
|
57
|
+
class: className = '',
|
|
58
|
+
children
|
|
59
|
+
}: Props = $props();
|
|
60
|
+
|
|
61
|
+
// Semantic gap names for grids
|
|
62
|
+
const semanticGapMap: Record<string, string> = {
|
|
63
|
+
'tight': 'gap-4', // 16px - Tight grid items
|
|
64
|
+
'standard': 'gap-6', // 24px - Standard grid items
|
|
65
|
+
'spacious': 'gap-8', // 32px - Spacious grid items
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// Numeric gap values (backwards compatible)
|
|
69
|
+
const numericGapMap: Record<string, string> = {
|
|
70
|
+
'0': 'gap-0',
|
|
71
|
+
'2': 'gap-2',
|
|
72
|
+
'3': 'gap-3',
|
|
73
|
+
'4': 'gap-4',
|
|
74
|
+
'6': 'gap-6',
|
|
75
|
+
'8': 'gap-8'
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// Combined map
|
|
79
|
+
const gapMap: Record<string, string> = { ...numericGapMap, ...semanticGapMap };
|
|
80
|
+
|
|
81
|
+
// Responsive column mappings - stack on mobile, expand on larger screens
|
|
82
|
+
const colsMap: Record<string, string> = {
|
|
83
|
+
'1': 'grid-cols-1',
|
|
84
|
+
'2': 'grid-cols-1 md:grid-cols-2',
|
|
85
|
+
'3': 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
|
|
86
|
+
'4': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',
|
|
87
|
+
'6': 'grid-cols-2 md:grid-cols-3 lg:grid-cols-6',
|
|
88
|
+
'auto': '' // Uses inline style
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
let gridStyle = $derived(
|
|
92
|
+
cols === 'auto'
|
|
93
|
+
? `grid-template-columns: repeat(auto-fit, minmax(${minWidth}, 1fr));`
|
|
94
|
+
: ''
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
let classes = $derived(
|
|
98
|
+
[
|
|
99
|
+
'grid',
|
|
100
|
+
cols !== 'auto' ? colsMap[cols] : '',
|
|
101
|
+
gapMap[gap] || 'gap-4',
|
|
102
|
+
className
|
|
103
|
+
].filter(Boolean).join(' ')
|
|
104
|
+
);
|
|
105
|
+
</script>
|
|
106
|
+
|
|
107
|
+
<svelte:element this={as} class={classes} style={gridStyle || undefined}>
|
|
108
|
+
{@render children?.()}
|
|
109
|
+
</svelte:element>
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
import { typography } from '../../tokens/typography';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Section - Semantic section wrapper with optional title
|
|
7
|
-
*
|
|
8
|
-
* Use Section to group related content with consistent spacing.
|
|
9
|
-
* Provides proper HTML5 semantics with <section> element.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* <Section title="Recent Orders">
|
|
13
|
-
* <OrdersTable />
|
|
14
|
-
* </Section>
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* <Section>
|
|
18
|
-
* <Chart />
|
|
19
|
-
* </Section>
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
interface Props {
|
|
23
|
-
/** Section title (optional) */
|
|
24
|
-
title?: string;
|
|
25
|
-
/** Title size */
|
|
26
|
-
titleSize?: 'sm' | 'md' | 'lg';
|
|
27
|
-
/** Gap between title and content */
|
|
28
|
-
gap?: '2' | '3' | '4' | '6';
|
|
29
|
-
/** Additional CSS classes for the section */
|
|
30
|
-
class?: string;
|
|
31
|
-
/** Additional CSS classes for the title */
|
|
32
|
-
titleClass?: string;
|
|
33
|
-
/** Child content */
|
|
34
|
-
children?: Snippet;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
let {
|
|
38
|
-
title = '',
|
|
39
|
-
titleSize = 'md',
|
|
40
|
-
gap = '4',
|
|
41
|
-
class: className = '',
|
|
42
|
-
titleClass = '',
|
|
43
|
-
children
|
|
44
|
-
}: Props = $props();
|
|
45
|
-
|
|
46
|
-
const titleSizeMap: Record<string, string> = {
|
|
47
|
-
sm: typography.h4,
|
|
48
|
-
md: typography.h3,
|
|
49
|
-
lg: typography.h2
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const gapMap: Record<string, string> = {
|
|
53
|
-
'2': 'space-y-2',
|
|
54
|
-
'3': 'space-y-3',
|
|
55
|
-
'4': 'space-y-4',
|
|
56
|
-
'6': 'space-y-6'
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
let sectionClasses = $derived(
|
|
60
|
-
[
|
|
61
|
-
title ? gapMap[gap] || 'space-y-4' : '',
|
|
62
|
-
className
|
|
63
|
-
].filter(Boolean).join(' ')
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
let titleClasses = $derived(
|
|
67
|
-
[
|
|
68
|
-
titleSizeMap[titleSize] || titleSizeMap.md,
|
|
69
|
-
titleClass
|
|
70
|
-
].filter(Boolean).join(' ')
|
|
71
|
-
);
|
|
72
|
-
</script>
|
|
73
|
-
|
|
74
|
-
<section class={sectionClasses} aria-label={title || undefined}>
|
|
75
|
-
{#if title}
|
|
76
|
-
<h2 class={titleClasses}>{title}</h2>
|
|
77
|
-
{/if}
|
|
78
|
-
|
|
79
|
-
{@render children?.()}
|
|
80
|
-
</section>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import { typography } from '../../tokens/typography';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Section - Semantic section wrapper with optional title
|
|
7
|
+
*
|
|
8
|
+
* Use Section to group related content with consistent spacing.
|
|
9
|
+
* Provides proper HTML5 semantics with <section> element.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Section title="Recent Orders">
|
|
13
|
+
* <OrdersTable />
|
|
14
|
+
* </Section>
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* <Section>
|
|
18
|
+
* <Chart />
|
|
19
|
+
* </Section>
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
interface Props {
|
|
23
|
+
/** Section title (optional) */
|
|
24
|
+
title?: string;
|
|
25
|
+
/** Title size */
|
|
26
|
+
titleSize?: 'sm' | 'md' | 'lg';
|
|
27
|
+
/** Gap between title and content */
|
|
28
|
+
gap?: '2' | '3' | '4' | '6';
|
|
29
|
+
/** Additional CSS classes for the section */
|
|
30
|
+
class?: string;
|
|
31
|
+
/** Additional CSS classes for the title */
|
|
32
|
+
titleClass?: string;
|
|
33
|
+
/** Child content */
|
|
34
|
+
children?: Snippet;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let {
|
|
38
|
+
title = '',
|
|
39
|
+
titleSize = 'md',
|
|
40
|
+
gap = '4',
|
|
41
|
+
class: className = '',
|
|
42
|
+
titleClass = '',
|
|
43
|
+
children
|
|
44
|
+
}: Props = $props();
|
|
45
|
+
|
|
46
|
+
const titleSizeMap: Record<string, string> = {
|
|
47
|
+
sm: typography.h4,
|
|
48
|
+
md: typography.h3,
|
|
49
|
+
lg: typography.h2
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const gapMap: Record<string, string> = {
|
|
53
|
+
'2': 'space-y-2',
|
|
54
|
+
'3': 'space-y-3',
|
|
55
|
+
'4': 'space-y-4',
|
|
56
|
+
'6': 'space-y-6'
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
let sectionClasses = $derived(
|
|
60
|
+
[
|
|
61
|
+
title ? gapMap[gap] || 'space-y-4' : '',
|
|
62
|
+
className
|
|
63
|
+
].filter(Boolean).join(' ')
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
let titleClasses = $derived(
|
|
67
|
+
[
|
|
68
|
+
titleSizeMap[titleSize] || titleSizeMap.md,
|
|
69
|
+
titleClass
|
|
70
|
+
].filter(Boolean).join(' ')
|
|
71
|
+
);
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
<section class={sectionClasses} aria-label={title || undefined}>
|
|
75
|
+
{#if title}
|
|
76
|
+
<h2 class={titleClasses}>{title}</h2>
|
|
77
|
+
{/if}
|
|
78
|
+
|
|
79
|
+
{@render children?.()}
|
|
80
|
+
</section>
|