@getmicdrop/svelte-components 5.6.0 → 5.7.1
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 +134 -134
- package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
- package/dist/components/Heading.svelte +57 -0
- package/dist/components/Heading.svelte.d.ts +12 -0
- package/dist/components/Heading.svelte.d.ts.map +1 -0
- 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/Layout/__tests__/AppShell.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/AppShell.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/AppShell.test.js +95 -0
- package/dist/components/Layout/__tests__/ContentSection.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/ContentSection.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/ContentSection.test.js +112 -0
- package/dist/components/Layout/__tests__/PageContainer.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/PageContainer.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/PageContainer.test.js +133 -0
- package/dist/components/Layout/__tests__/Responsive.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/Responsive.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/Responsive.test.js +123 -0
- package/dist/components/Layout/index.d.ts +11 -0
- package/dist/components/Layout/index.d.ts.map +1 -0
- package/dist/components/Layout/index.js +14 -0
- package/dist/components/Text.svelte +40 -0
- package/dist/components/Text.svelte.d.ts +11 -0
- package/dist/components/Text.svelte.d.ts.map +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +12 -0
- 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 +1 -0
- package/dist/index.js +50 -40
- 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/navigation/BottomNav.stories.svelte +117 -117
- package/dist/patterns/navigation/BottomNav.svelte +74 -64
- package/dist/patterns/navigation/BottomNav.svelte.d.ts.map +1 -1
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +193 -193
- 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/Accordion/AccordionItemWrapper.test.svelte +107 -107
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts +2 -2
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts.map +1 -1
- 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 +79 -79
- 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 +89 -89
- package/dist/primitives/Button/Button.spec.js +223 -223
- package/dist/primitives/Button/Button.stories.svelte +76 -76
- package/dist/primitives/Button/Button.svelte +270 -270
- 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 +14 -14
- package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -0
- package/dist/primitives/Dropdown/DropdownDivider.svelte.d.ts +7 -0
- package/dist/primitives/Dropdown/DropdownDivider.svelte.d.ts.map +1 -0
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Helper/Helper.svelte +33 -0
- package/dist/primitives/Helper/Helper.svelte.d.ts +18 -0
- package/dist/primitives/Helper/Helper.svelte.d.ts.map +1 -0
- 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 +416 -417
- package/dist/primitives/Input/Input.svelte.d.ts +2 -4
- package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
- package/dist/primitives/Input/Select.spec.js +212 -212
- package/dist/primitives/Input/Select.stories.svelte +112 -112
- package/dist/primitives/Input/Select.svelte +128 -128
- package/dist/primitives/Input/Textarea.stories.svelte +137 -137
- package/dist/primitives/Input/Textarea.svelte +35 -35
- 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 -158
- package/dist/primitives/Modal/Modal.svelte.d.ts +6 -8
- package/dist/primitives/Modal/Modal.svelte.d.ts.map +1 -1
- package/dist/primitives/NumberInput/NumberInput.svelte +105 -106
- package/dist/primitives/NumberInput/NumberInput.svelte.d.ts +0 -2
- package/dist/primitives/NumberInput/NumberInput.svelte.d.ts.map +1 -1
- 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 +123 -123
- package/dist/primitives/Toggle.spec.js +143 -143
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Toggle.svelte +70 -71
- package/dist/primitives/Toggle.svelte.d.ts +2 -4
- package/dist/primitives/Toggle.svelte.d.ts.map +1 -1
- package/dist/primitives/Tooltip/Tooltip.svelte +83 -0
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +15 -0
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts.map +1 -0
- 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 +3 -0
- package/dist/primitives/index.js +91 -84
- package/dist/recipes/CropImage/CropImage.spec.js +208 -208
- package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
- package/dist/recipes/CropImage/CropImage.svelte +238 -238
- package/dist/recipes/ImageUploader/ImageUploader.spec.js +6 -5
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
- 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 +258 -258
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/MultiSelect.svelte +277 -256
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts +54 -21
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/OTPInput.spec.js +251 -251
- package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
- package/dist/recipes/inputs/OTPInput.svelte +29 -29
- package/dist/recipes/inputs/PasswordInput.svelte +22 -22
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -117
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +9 -4
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +332 -327
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts +12 -1
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/Search.svelte +37 -37
- package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
- 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/auth.js +36 -36
- package/dist/stores/auth.spec.js +139 -139
- 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 +725 -725
- package/dist/stories/RecipesGallery.stories.svelte +19 -19
- package/dist/stories/RecipesGallery.svelte +271 -271
- 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.server.spec.js +11 -8
- package/dist/telemetry.spec.js +1169 -1144
- package/dist/tokens/tokens.css +87 -87
- package/dist/tokens/typography-base.css +163 -163
- package/dist/utils/apiConfig.spec.js +219 -219
- package/dist/utils/imageValidation.spec.js +62 -59
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/transitions.js +62 -62
- package/dist/utils/utils.js +354 -354
- package/package.json +296 -292
|
@@ -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>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
6
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl';
|
|
7
|
+
weight?: 'normal' | 'medium' | 'semibold' | 'bold';
|
|
8
|
+
class?: string;
|
|
9
|
+
children: Snippet;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
level = 2,
|
|
14
|
+
size = 'lg',
|
|
15
|
+
weight,
|
|
16
|
+
class: className = '',
|
|
17
|
+
children,
|
|
18
|
+
}: Props = $props();
|
|
19
|
+
|
|
20
|
+
const sizeClasses: Record<string, string> = {
|
|
21
|
+
xs: 'text-xs',
|
|
22
|
+
sm: 'text-sm',
|
|
23
|
+
md: 'text-base',
|
|
24
|
+
lg: 'text-lg',
|
|
25
|
+
xl: 'text-xl',
|
|
26
|
+
'2xl': 'text-2xl',
|
|
27
|
+
'3xl': 'text-3xl',
|
|
28
|
+
'4xl': 'text-4xl',
|
|
29
|
+
'5xl': 'text-5xl',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const weightClasses: Record<string, string> = {
|
|
33
|
+
normal: 'font-normal',
|
|
34
|
+
medium: 'font-medium',
|
|
35
|
+
semibold: 'font-semibold',
|
|
36
|
+
bold: 'font-bold',
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const baseClasses = 'text-gray-900 dark:text-white';
|
|
40
|
+
const sizeClass = sizeClasses[size] || 'text-lg';
|
|
41
|
+
const weightClass = weight ? weightClasses[weight] : '';
|
|
42
|
+
const classes = `${baseClasses} ${sizeClass} ${weightClass} ${className}`.trim();
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
{#if level === 1}
|
|
46
|
+
<h1 class={classes}>{@render children()}</h1>
|
|
47
|
+
{:else if level === 2}
|
|
48
|
+
<h2 class={classes}>{@render children()}</h2>
|
|
49
|
+
{:else if level === 3}
|
|
50
|
+
<h3 class={classes}>{@render children()}</h3>
|
|
51
|
+
{:else if level === 4}
|
|
52
|
+
<h4 class={classes}>{@render children()}</h4>
|
|
53
|
+
{:else if level === 5}
|
|
54
|
+
<h5 class={classes}>{@render children()}</h5>
|
|
55
|
+
{:else}
|
|
56
|
+
<h6 class={classes}>{@render children()}</h6>
|
|
57
|
+
{/if}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
4
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl';
|
|
5
|
+
weight?: 'normal' | 'medium' | 'semibold' | 'bold';
|
|
6
|
+
class?: string;
|
|
7
|
+
children: Snippet;
|
|
8
|
+
}
|
|
9
|
+
declare const Heading: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type Heading = ReturnType<typeof Heading>;
|
|
11
|
+
export default Heading;
|
|
12
|
+
//# sourceMappingURL=Heading.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Heading.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/Heading.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACxE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAsDH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
|
|
4
|
-
type Variant = 'admin' | 'performer' | 'public' | 'minimal';
|
|
5
|
-
|
|
6
|
-
interface Props {
|
|
7
|
-
/** Shell variant determines overall styling */
|
|
8
|
-
variant?: Variant;
|
|
9
|
-
/** Whether sidebar is collapsed (only for admin variant) */
|
|
10
|
-
sidebarCollapsed?: boolean;
|
|
11
|
-
/** Whether to show bottom navigation on mobile */
|
|
12
|
-
showBottomNav?: boolean;
|
|
13
|
-
/** Fixed header */
|
|
14
|
-
fixedHeader?: boolean;
|
|
15
|
-
/** Additional CSS classes for main content area */
|
|
16
|
-
class?: string;
|
|
17
|
-
/** Header slot */
|
|
18
|
-
header?: Snippet;
|
|
19
|
-
/** Sidebar slot (left side) */
|
|
20
|
-
sidebar?: Snippet;
|
|
21
|
-
/** Bottom navigation slot (mobile) */
|
|
22
|
-
bottomNav?: Snippet;
|
|
23
|
-
/** Main content */
|
|
24
|
-
children?: Snippet;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
let {
|
|
28
|
-
variant = 'admin',
|
|
29
|
-
sidebarCollapsed = false,
|
|
30
|
-
showBottomNav = true,
|
|
31
|
-
fixedHeader = true,
|
|
32
|
-
class: className = '',
|
|
33
|
-
header,
|
|
34
|
-
sidebar,
|
|
35
|
-
bottomNav,
|
|
36
|
-
children,
|
|
37
|
-
}: Props = $props();
|
|
38
|
-
|
|
39
|
-
// Background classes based on variant
|
|
40
|
-
const variantBackgrounds: Record<Variant, string> = {
|
|
41
|
-
admin: 'bg-gray-50 dark:bg-gray-800',
|
|
42
|
-
performer: 'bg-gray-50 dark:bg-gray-800',
|
|
43
|
-
public: 'bg-white dark:bg-gray-900',
|
|
44
|
-
minimal: 'bg-white dark:bg-gray-900',
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
// Sidebar width classes
|
|
48
|
-
const sidebarWidthExpanded = 'md:ml-64';
|
|
49
|
-
const sidebarWidthCollapsed = 'md:ml-20';
|
|
50
|
-
|
|
51
|
-
let mainMarginClass = $derived(
|
|
52
|
-
sidebar
|
|
53
|
-
? sidebarCollapsed
|
|
54
|
-
? sidebarWidthCollapsed
|
|
55
|
-
: sidebarWidthExpanded
|
|
56
|
-
: ''
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
let headerPadding = $derived(fixedHeader ? 'pt-16' : '');
|
|
60
|
-
let bottomPadding = $derived(showBottomNav && bottomNav ? 'pb-16 md:pb-0' : '');
|
|
61
|
-
</script>
|
|
62
|
-
|
|
63
|
-
<div class="min-h-screen {variantBackgrounds[variant]}">
|
|
64
|
-
<!-- Header -->
|
|
65
|
-
{#if header}
|
|
66
|
-
<header
|
|
67
|
-
class="w-full z-30"
|
|
68
|
-
class:fixed={fixedHeader}
|
|
69
|
-
class:top-0={fixedHeader}
|
|
70
|
-
class:left-0={fixedHeader}
|
|
71
|
-
>
|
|
72
|
-
{@render header()}
|
|
73
|
-
</header>
|
|
74
|
-
{/if}
|
|
75
|
-
|
|
76
|
-
<!-- Sidebar -->
|
|
77
|
-
{#if sidebar}
|
|
78
|
-
<aside
|
|
79
|
-
class="fixed top-0 left-0 z-20 h-screen transition-all duration-300 hidden md:block"
|
|
80
|
-
class:w-64={!sidebarCollapsed}
|
|
81
|
-
class:w-20={sidebarCollapsed}
|
|
82
|
-
>
|
|
83
|
-
{@render sidebar()}
|
|
84
|
-
</aside>
|
|
85
|
-
{/if}
|
|
86
|
-
|
|
87
|
-
<!-- Main Content -->
|
|
88
|
-
<main
|
|
89
|
-
class="transition-all duration-300 {headerPadding} {mainMarginClass} {bottomPadding} {className}"
|
|
90
|
-
>
|
|
91
|
-
<div class="{variantBackgrounds[variant]} min-h-screen">
|
|
92
|
-
{#if children}
|
|
93
|
-
{@render children()}
|
|
94
|
-
{/if}
|
|
95
|
-
</div>
|
|
96
|
-
</main>
|
|
97
|
-
|
|
98
|
-
<!-- Bottom Navigation (Mobile) -->
|
|
99
|
-
{#if showBottomNav && bottomNav}
|
|
100
|
-
<nav class="fixed bottom-0 left-0 right-0 z-30 md:hidden">
|
|
101
|
-
{@render bottomNav()}
|
|
102
|
-
</nav>
|
|
103
|
-
{/if}
|
|
104
|
-
</div>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
type Variant = 'admin' | 'performer' | 'public' | 'minimal';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
/** Shell variant determines overall styling */
|
|
8
|
+
variant?: Variant;
|
|
9
|
+
/** Whether sidebar is collapsed (only for admin variant) */
|
|
10
|
+
sidebarCollapsed?: boolean;
|
|
11
|
+
/** Whether to show bottom navigation on mobile */
|
|
12
|
+
showBottomNav?: boolean;
|
|
13
|
+
/** Fixed header */
|
|
14
|
+
fixedHeader?: boolean;
|
|
15
|
+
/** Additional CSS classes for main content area */
|
|
16
|
+
class?: string;
|
|
17
|
+
/** Header slot */
|
|
18
|
+
header?: Snippet;
|
|
19
|
+
/** Sidebar slot (left side) */
|
|
20
|
+
sidebar?: Snippet;
|
|
21
|
+
/** Bottom navigation slot (mobile) */
|
|
22
|
+
bottomNav?: Snippet;
|
|
23
|
+
/** Main content */
|
|
24
|
+
children?: Snippet;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let {
|
|
28
|
+
variant = 'admin',
|
|
29
|
+
sidebarCollapsed = false,
|
|
30
|
+
showBottomNav = true,
|
|
31
|
+
fixedHeader = true,
|
|
32
|
+
class: className = '',
|
|
33
|
+
header,
|
|
34
|
+
sidebar,
|
|
35
|
+
bottomNav,
|
|
36
|
+
children,
|
|
37
|
+
}: Props = $props();
|
|
38
|
+
|
|
39
|
+
// Background classes based on variant
|
|
40
|
+
const variantBackgrounds: Record<Variant, string> = {
|
|
41
|
+
admin: 'bg-gray-50 dark:bg-gray-800',
|
|
42
|
+
performer: 'bg-gray-50 dark:bg-gray-800',
|
|
43
|
+
public: 'bg-white dark:bg-gray-900',
|
|
44
|
+
minimal: 'bg-white dark:bg-gray-900',
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Sidebar width classes
|
|
48
|
+
const sidebarWidthExpanded = 'md:ml-64';
|
|
49
|
+
const sidebarWidthCollapsed = 'md:ml-20';
|
|
50
|
+
|
|
51
|
+
let mainMarginClass = $derived(
|
|
52
|
+
sidebar
|
|
53
|
+
? sidebarCollapsed
|
|
54
|
+
? sidebarWidthCollapsed
|
|
55
|
+
: sidebarWidthExpanded
|
|
56
|
+
: ''
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
let headerPadding = $derived(fixedHeader ? 'pt-16' : '');
|
|
60
|
+
let bottomPadding = $derived(showBottomNav && bottomNav ? 'pb-16 md:pb-0' : '');
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<div class="min-h-screen {variantBackgrounds[variant]}">
|
|
64
|
+
<!-- Header -->
|
|
65
|
+
{#if header}
|
|
66
|
+
<header
|
|
67
|
+
class="w-full z-30"
|
|
68
|
+
class:fixed={fixedHeader}
|
|
69
|
+
class:top-0={fixedHeader}
|
|
70
|
+
class:left-0={fixedHeader}
|
|
71
|
+
>
|
|
72
|
+
{@render header()}
|
|
73
|
+
</header>
|
|
74
|
+
{/if}
|
|
75
|
+
|
|
76
|
+
<!-- Sidebar -->
|
|
77
|
+
{#if sidebar}
|
|
78
|
+
<aside
|
|
79
|
+
class="fixed top-0 left-0 z-20 h-screen transition-all duration-300 hidden md:block"
|
|
80
|
+
class:w-64={!sidebarCollapsed}
|
|
81
|
+
class:w-20={sidebarCollapsed}
|
|
82
|
+
>
|
|
83
|
+
{@render sidebar()}
|
|
84
|
+
</aside>
|
|
85
|
+
{/if}
|
|
86
|
+
|
|
87
|
+
<!-- Main Content -->
|
|
88
|
+
<main
|
|
89
|
+
class="transition-all duration-300 {headerPadding} {mainMarginClass} {bottomPadding} {className}"
|
|
90
|
+
>
|
|
91
|
+
<div class="{variantBackgrounds[variant]} min-h-screen">
|
|
92
|
+
{#if children}
|
|
93
|
+
{@render children()}
|
|
94
|
+
{/if}
|
|
95
|
+
</div>
|
|
96
|
+
</main>
|
|
97
|
+
|
|
98
|
+
<!-- Bottom Navigation (Mobile) -->
|
|
99
|
+
{#if showBottomNav && bottomNav}
|
|
100
|
+
<nav class="fixed bottom-0 left-0 right-0 z-30 md:hidden">
|
|
101
|
+
{@render bottomNav()}
|
|
102
|
+
</nav>
|
|
103
|
+
{/if}
|
|
104
|
+
</div>
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
|
|
4
|
-
interface Props {
|
|
5
|
-
/** Section title */
|
|
6
|
-
title?: string;
|
|
7
|
-
/** Optional subtitle */
|
|
8
|
-
subtitle?: string;
|
|
9
|
-
/** Heading level for the title (2-6) */
|
|
10
|
-
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
11
|
-
/** Size variant for title */
|
|
12
|
-
titleSize?: 'sm' | 'base' | 'lg' | 'xl';
|
|
13
|
-
/** Spacing below the section */
|
|
14
|
-
spacing?: 'none' | 'sm' | 'md' | 'lg';
|
|
15
|
-
/** Additional CSS classes */
|
|
16
|
-
class?: string;
|
|
17
|
-
/** Action slot (buttons, links) */
|
|
18
|
-
actions?: Snippet;
|
|
19
|
-
/** Child content */
|
|
20
|
-
children?: Snippet;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
let {
|
|
24
|
-
title = '',
|
|
25
|
-
subtitle = '',
|
|
26
|
-
headingLevel = 2,
|
|
27
|
-
titleSize = 'lg',
|
|
28
|
-
spacing = 'md',
|
|
29
|
-
class: className = '',
|
|
30
|
-
actions,
|
|
31
|
-
children,
|
|
32
|
-
}: Props = $props();
|
|
33
|
-
|
|
34
|
-
const titleSizeClasses = {
|
|
35
|
-
sm: 'text-base',
|
|
36
|
-
base: 'text-lg',
|
|
37
|
-
lg: 'text-xl',
|
|
38
|
-
xl: 'text-2xl',
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const spacingClasses = {
|
|
42
|
-
none: '',
|
|
43
|
-
sm: 'mb-4',
|
|
44
|
-
md: 'mb-6',
|
|
45
|
-
lg: 'mb-8',
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
let headingElement = $derived(`h${headingLevel}` as 'h2' | 'h3' | 'h4' | 'h5' | 'h6');
|
|
49
|
-
</script>
|
|
50
|
-
|
|
51
|
-
<section class="{spacingClasses[spacing]} {className}">
|
|
52
|
-
{#if title || actions}
|
|
53
|
-
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2 mb-4">
|
|
54
|
-
<div>
|
|
55
|
-
{#if title}
|
|
56
|
-
<svelte:element
|
|
57
|
-
this={headingElement}
|
|
58
|
-
class="{titleSizeClasses[titleSize]} font-semibold text-gray-900 dark:text-white"
|
|
59
|
-
>
|
|
60
|
-
{title}
|
|
61
|
-
</svelte:element>
|
|
62
|
-
{/if}
|
|
63
|
-
{#if subtitle}
|
|
64
|
-
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">
|
|
65
|
-
{subtitle}
|
|
66
|
-
</p>
|
|
67
|
-
{/if}
|
|
68
|
-
</div>
|
|
69
|
-
{#if actions}
|
|
70
|
-
<div class="flex items-center gap-3 flex-shrink-0">
|
|
71
|
-
{@render actions()}
|
|
72
|
-
</div>
|
|
73
|
-
{/if}
|
|
74
|
-
</div>
|
|
75
|
-
{/if}
|
|
76
|
-
|
|
77
|
-
{#if children}
|
|
78
|
-
{@render children()}
|
|
79
|
-
{/if}
|
|
80
|
-
</section>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
/** Section title */
|
|
6
|
+
title?: string;
|
|
7
|
+
/** Optional subtitle */
|
|
8
|
+
subtitle?: string;
|
|
9
|
+
/** Heading level for the title (2-6) */
|
|
10
|
+
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
11
|
+
/** Size variant for title */
|
|
12
|
+
titleSize?: 'sm' | 'base' | 'lg' | 'xl';
|
|
13
|
+
/** Spacing below the section */
|
|
14
|
+
spacing?: 'none' | 'sm' | 'md' | 'lg';
|
|
15
|
+
/** Additional CSS classes */
|
|
16
|
+
class?: string;
|
|
17
|
+
/** Action slot (buttons, links) */
|
|
18
|
+
actions?: Snippet;
|
|
19
|
+
/** Child content */
|
|
20
|
+
children?: Snippet;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let {
|
|
24
|
+
title = '',
|
|
25
|
+
subtitle = '',
|
|
26
|
+
headingLevel = 2,
|
|
27
|
+
titleSize = 'lg',
|
|
28
|
+
spacing = 'md',
|
|
29
|
+
class: className = '',
|
|
30
|
+
actions,
|
|
31
|
+
children,
|
|
32
|
+
}: Props = $props();
|
|
33
|
+
|
|
34
|
+
const titleSizeClasses = {
|
|
35
|
+
sm: 'text-base',
|
|
36
|
+
base: 'text-lg',
|
|
37
|
+
lg: 'text-xl',
|
|
38
|
+
xl: 'text-2xl',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const spacingClasses = {
|
|
42
|
+
none: '',
|
|
43
|
+
sm: 'mb-4',
|
|
44
|
+
md: 'mb-6',
|
|
45
|
+
lg: 'mb-8',
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
let headingElement = $derived(`h${headingLevel}` as 'h2' | 'h3' | 'h4' | 'h5' | 'h6');
|
|
49
|
+
</script>
|
|
50
|
+
|
|
51
|
+
<section class="{spacingClasses[spacing]} {className}">
|
|
52
|
+
{#if title || actions}
|
|
53
|
+
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2 mb-4">
|
|
54
|
+
<div>
|
|
55
|
+
{#if title}
|
|
56
|
+
<svelte:element
|
|
57
|
+
this={headingElement}
|
|
58
|
+
class="{titleSizeClasses[titleSize]} font-semibold text-gray-900 dark:text-white"
|
|
59
|
+
>
|
|
60
|
+
{title}
|
|
61
|
+
</svelte:element>
|
|
62
|
+
{/if}
|
|
63
|
+
{#if subtitle}
|
|
64
|
+
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">
|
|
65
|
+
{subtitle}
|
|
66
|
+
</p>
|
|
67
|
+
{/if}
|
|
68
|
+
</div>
|
|
69
|
+
{#if actions}
|
|
70
|
+
<div class="flex items-center gap-3 flex-shrink-0">
|
|
71
|
+
{@render actions()}
|
|
72
|
+
</div>
|
|
73
|
+
{/if}
|
|
74
|
+
</div>
|
|
75
|
+
{/if}
|
|
76
|
+
|
|
77
|
+
{#if children}
|
|
78
|
+
{@render children()}
|
|
79
|
+
{/if}
|
|
80
|
+
</section>
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
].filter(Boolean).join(' ')
|
|
96
96
|
);
|
|
97
97
|
</script>
|
|
98
|
-
|
|
99
|
-
<svelte:element this={as} class={classes} style={gridStyle || undefined}>
|
|
100
|
-
{@render children?.()}
|
|
101
|
-
</svelte:element>
|
|
98
|
+
|
|
99
|
+
<svelte:element this={as} class={classes} style={gridStyle || undefined}>
|
|
100
|
+
{@render children?.()}
|
|
101
|
+
</svelte:element>
|