@getmicdrop/svelte-components 5.19.0 → 5.20.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/base.css +18 -0
- package/dist/calendar/AboutShow/AboutShow.svelte +191 -191
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte +803 -801
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
- package/dist/calendar/FAQs/FAQs.svelte +88 -88
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +140 -140
- package/dist/calendar/OrderSummary/OrderSummary.svelte +461 -461
- package/dist/calendar/PublicCard/PublicCard.svelte +164 -164
- package/dist/calendar/ShowCard/ShowCard.svelte +180 -180
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +80 -80
- package/dist/calendar/index.js +15 -15
- package/dist/components/Heading.spec.js +89 -89
- package/dist/components/Heading.svelte +66 -60
- package/dist/components/Heading.svelte.d.ts +1 -0
- package/dist/components/Heading.svelte.d.ts.map +1 -1
- package/dist/components/Layout/AppShell.svelte +104 -104
- package/dist/components/Layout/ContentSection.svelte +80 -80
- package/dist/components/Layout/Grid.svelte +101 -101
- 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 +52 -52
- package/dist/components/Layout/Text.svelte +87 -87
- package/dist/components/Layout/TwoColumn.svelte +108 -108
- package/dist/components/Text.spec.js +89 -89
- package/dist/components/Text.svelte +64 -53
- package/dist/components/Text.svelte.d.ts +2 -1
- package/dist/components/Text.svelte.d.ts.map +1 -1
- package/dist/config.js +151 -151
- package/dist/config.spec.js +29 -29
- package/dist/constants/formOptions.d.ts +2 -5
- package/dist/constants/formOptions.d.ts.map +1 -1
- package/dist/constants/formOptions.js +48 -48
- package/dist/constants/formOptions.spec.js +2 -7
- package/dist/constants/validation.js +91 -91
- package/dist/constants/validation.spec.js +64 -64
- package/dist/datetime/README.md +323 -323
- 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/forms/createFormStore.svelte.spec.js +0 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -66
- package/dist/index.spec.js +369 -369
- package/dist/patterns/chat/ChatActivityNotice.spec.js +59 -59
- package/dist/patterns/chat/ChatActivityNotice.svelte +41 -41
- package/dist/patterns/chat/ChatBubble.spec.js +91 -91
- package/dist/patterns/chat/ChatBubble.svelte +103 -103
- package/dist/patterns/chat/ChatContainer.spec.js +30 -30
- package/dist/patterns/chat/ChatContainer.svelte +46 -46
- package/dist/patterns/chat/ChatDateDivider.spec.js +30 -30
- package/dist/patterns/chat/ChatDateDivider.svelte +27 -27
- package/dist/patterns/chat/ChatInvitationBubble.spec.js +46 -46
- package/dist/patterns/chat/ChatInvitationBubble.svelte +46 -46
- package/dist/patterns/chat/ChatInvitationNotice.spec.js +32 -32
- package/dist/patterns/chat/ChatInvitationNotice.svelte +36 -36
- package/dist/patterns/chat/ChatMessageGroup.spec.js +58 -58
- package/dist/patterns/chat/ChatMessageGroup.svelte +57 -57
- package/dist/patterns/chat/ChatSlotUpdate.spec.js +65 -65
- package/dist/patterns/chat/ChatSlotUpdate.svelte +46 -46
- package/dist/patterns/chat/ChatStatusBadge.spec.js +79 -79
- package/dist/patterns/chat/ChatStatusBadge.svelte +91 -91
- package/dist/patterns/chat/ChatStatusTransition.spec.js +81 -81
- package/dist/patterns/chat/ChatStatusTransition.svelte +64 -64
- package/dist/patterns/chat/ChatTextBubble.spec.js +35 -35
- package/dist/patterns/chat/ChatTextBubble.svelte +41 -41
- package/dist/patterns/chat/index.js +22 -22
- package/dist/patterns/data/DataGrid.svelte +45 -45
- package/dist/patterns/data/DataList.svelte +24 -24
- package/dist/patterns/data/DataTable.svelte +45 -45
- package/dist/patterns/data/index.js +4 -4
- 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 +33 -32
- package/dist/patterns/forms/FormSection.svelte.d.ts +2 -0
- package/dist/patterns/forms/FormSection.svelte.d.ts.map +1 -1
- package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
- package/dist/patterns/forms/FormValidationSummary.svelte +82 -82
- package/dist/patterns/forms/index.js +5 -5
- package/dist/patterns/index.js +21 -21
- package/dist/patterns/layout/Sidebar.svelte +39 -39
- package/dist/patterns/layout/SidebarTestWrapper.svelte +34 -34
- package/dist/patterns/layout/Stack.svelte +61 -61
- package/dist/patterns/layout/index.js +29 -29
- package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
- package/dist/patterns/navigation/BottomNav.svelte +82 -82
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +263 -263
- package/dist/patterns/navigation/index.js +3 -3
- package/dist/patterns/page/PageHeader.svelte +49 -49
- 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 +62 -62
- package/dist/patterns/page/SectionHeader.svelte +51 -51
- package/dist/patterns/page/index.js +5 -5
- 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 +62 -62
- package/dist/primitives/Accordion/AccordionItem.svelte +103 -103
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -107
- package/dist/primitives/Accordion/AccordionToggleWrapper.test.svelte +28 -28
- package/dist/primitives/Alert/Alert.spec.js +173 -173
- package/dist/primitives/Alert/Alert.stories.svelte +88 -88
- package/dist/primitives/Alert/Alert.svelte +72 -72
- package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
- package/dist/primitives/Avatar/Avatar.svelte +66 -66
- package/dist/primitives/AvatarButton/AvatarButton.svelte +57 -57
- 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 +238 -238
- package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
- package/dist/primitives/BottomSheet/BottomSheet.svelte +115 -115
- package/dist/primitives/BottomSheet/BottomSheetWithActions.test.svelte +20 -20
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +123 -123
- package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +107 -107
- package/dist/primitives/Button/Button.spec.js +225 -225
- package/dist/primitives/Button/Button.stories.svelte +76 -76
- package/dist/primitives/Button/Button.svelte +278 -278
- package/dist/primitives/Button/ButtonGroup.spec.js +44 -44
- 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 -68
- package/dist/primitives/Checkbox/Checkbox.spec.js +4 -15
- 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 +147 -147
- package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
- package/dist/primitives/Drawer/Drawer.svelte +224 -224
- package/dist/primitives/Drawer/DrawerTestWrapper.svelte +86 -86
- package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
- package/dist/primitives/Dropdown/Dropdown.svelte +179 -179
- package/dist/primitives/Dropdown/DropdownDivider.spec.js +30 -30
- package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Dropdown/DropdownItemTestWrapper.svelte +43 -43
- package/dist/primitives/Helper/Helper.spec.js +57 -57
- package/dist/primitives/Helper/Helper.svelte +33 -33
- package/dist/primitives/Icons/ArrowLeft.svelte +21 -21
- package/dist/primitives/Icons/ArrowRight.svelte +21 -21
- package/dist/primitives/Icons/Availability.svelte +27 -27
- package/dist/primitives/Icons/Back.svelte +27 -27
- package/dist/primitives/Icons/CheckCircle.svelte +19 -19
- package/dist/primitives/Icons/CheckCircleOutline.svelte +28 -28
- package/dist/primitives/Icons/ChevronLeft.svelte +17 -17
- package/dist/primitives/Icons/ChevronRight.svelte +17 -17
- package/dist/primitives/Icons/Copy.svelte +28 -28
- package/dist/primitives/Icons/Cross.svelte +18 -18
- package/dist/primitives/Icons/DownArrow.svelte +21 -21
- package/dist/primitives/Icons/ErrorCircle.svelte +19 -19
- package/dist/primitives/Icons/FacebookIcon.svelte +15 -15
- package/dist/primitives/Icons/Home.svelte +28 -28
- package/dist/primitives/Icons/Icon.spec.js +175 -175
- package/dist/primitives/Icons/Icon.stories.svelte +100 -100
- package/dist/primitives/Icons/Icon.svelte +79 -79
- package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
- package/dist/primitives/Icons/ImageOutline.svelte +21 -21
- package/dist/primitives/Icons/Info.svelte +20 -20
- package/dist/primitives/Icons/InstagramIcon.svelte +21 -21
- package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
- package/dist/primitives/Icons/Message.svelte +28 -28
- package/dist/primitives/Icons/MoonIcon.svelte +18 -18
- package/dist/primitives/Icons/More.svelte +34 -34
- package/dist/primitives/Icons/MoreHori.spec.js +67 -67
- package/dist/primitives/Icons/MoreHori.svelte +35 -35
- package/dist/primitives/Icons/Notification.svelte +27 -27
- package/dist/primitives/Icons/Payment.svelte +27 -27
- package/dist/primitives/Icons/Profile.svelte +34 -34
- package/dist/primitives/Icons/Reload.svelte +42 -42
- package/dist/primitives/Icons/Shows.svelte +34 -34
- package/dist/primitives/Icons/Signout.svelte +34 -34
- package/dist/primitives/Icons/SunIcon.svelte +21 -21
- package/dist/primitives/Icons/TiktokIcon.svelte +15 -15
- package/dist/primitives/Icons/TrashBinOutline.svelte +21 -21
- package/dist/primitives/Icons/TwitterIcon.svelte +15 -15
- package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
- package/dist/primitives/Icons/WarningIcon.svelte +24 -24
- package/dist/primitives/Input/Input.spec.js +1237 -1237
- package/dist/primitives/Input/Input.stories.svelte +139 -139
- package/dist/primitives/Input/Input.svelte +444 -444
- package/dist/primitives/Input/Select.spec.js +632 -632
- 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.spec.js +61 -61
- package/dist/primitives/LandingButton/LandingButton.svelte +92 -92
- package/dist/primitives/MenuItem/MenuItem.spec.js +130 -130
- package/dist/primitives/MenuItem/MenuItem.svelte +85 -85
- package/dist/primitives/Modal/Modal.spec.js +314 -314
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- package/dist/primitives/Modal/Modal.svelte +181 -181
- package/dist/primitives/NavItem/NavItem.spec.js +97 -97
- package/dist/primitives/NavItem/NavItem.svelte +75 -75
- package/dist/primitives/NumberInput/NumberInput.svelte +113 -113
- package/dist/primitives/Pagination/DotIndicator.svelte +66 -0
- package/dist/primitives/Pagination/DotIndicator.svelte.d.ts +18 -0
- package/dist/primitives/Pagination/DotIndicator.svelte.d.ts.map +1 -0
- package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
- package/dist/primitives/Pagination/Pagination.svelte +275 -275
- package/dist/primitives/Radio/Radio.stories.svelte +80 -80
- package/dist/primitives/Radio/Radio.svelte +67 -67
- package/dist/primitives/SearchResultItem/SearchResultItem.spec.js +78 -78
- package/dist/primitives/SearchResultItem/SearchResultItem.svelte +109 -109
- package/dist/primitives/SidebarToggle/SidebarToggle.spec.js +61 -61
- package/dist/primitives/SidebarToggle/SidebarToggle.svelte +55 -55
- package/dist/primitives/Skeleton/CardPlaceholder.svelte +96 -96
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte +68 -68
- package/dist/primitives/Skeleton/ListPlaceholder.svelte +85 -85
- package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
- package/dist/primitives/Skeleton/Skeleton.svelte +55 -55
- package/dist/primitives/Spinner/Spinner.spec.js +84 -84
- package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
- package/dist/primitives/Spinner/Spinner.svelte +52 -52
- package/dist/primitives/Tabs/TabItem.svelte +52 -52
- package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
- package/dist/primitives/Tabs/Tabs.svelte +137 -137
- package/dist/primitives/Toggle.spec.js +221 -221
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Toggle.svelte +141 -141
- package/dist/primitives/ToggleTestWrapper.svelte +30 -30
- package/dist/primitives/Tooltip/Tooltip.spec.js +126 -126
- 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 +112 -112
- package/dist/primitives/ValidationError.svelte +29 -29
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.js +114 -113
- package/dist/recipes/CropImage/CropImage.spec.js +208 -208
- package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
- package/dist/recipes/CropImage/CropImage.svelte +241 -241
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +994 -994
- package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
- package/dist/recipes/feedback/EmptyState/EmptyState.svelte +75 -75
- package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
- package/dist/recipes/feedback/ErrorDisplay.stories.svelte +113 -113
- package/dist/recipes/feedback/ErrorDisplay.svelte +67 -67
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +176 -176
- package/dist/recipes/feedback/index.js +4 -4
- 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/index.js +24 -24
- package/dist/recipes/inputs/MultiSelect.spec.js +263 -263
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/MultiSelect.svelte +291 -291
- package/dist/recipes/inputs/OTPInput.spec.js +251 -251
- package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
- package/dist/recipes/inputs/OTPInput.svelte +128 -128
- package/dist/recipes/inputs/PasswordInput.svelte +130 -130
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +142 -142
- package/dist/recipes/inputs/PhoneInput.svelte +254 -254
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +170 -170
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +349 -349
- package/dist/recipes/inputs/Search.svelte +110 -110
- package/dist/recipes/inputs/index.js +8 -8
- package/dist/recipes/inputs/phoneInput/CountrySelector.svelte +240 -240
- package/dist/recipes/modals/AlertModal.svelte +139 -139
- package/dist/recipes/modals/ConfirmationModal.spec.js +396 -396
- package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
- package/dist/recipes/modals/ConfirmationModal.svelte +169 -169
- package/dist/recipes/modals/FeedbackModal.svelte +205 -0
- package/dist/recipes/modals/FeedbackModal.svelte.d.ts +24 -0
- package/dist/recipes/modals/FeedbackModal.svelte.d.ts.map +1 -0
- package/dist/recipes/modals/InputModal.svelte +194 -194
- 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 +216 -216
- package/dist/recipes/modals/index.d.ts +1 -0
- package/dist/recipes/modals/index.js +8 -7
- package/dist/schemas/common.js +1 -1
- package/dist/schemas/event.js +1 -1
- package/dist/schemas/order.js +0 -1
- package/dist/schemas/performer.js +1 -1
- package/dist/schemas/promo.js +2 -2
- package/dist/schemas/ticket.js +1 -1
- package/dist/schemas/user.js +1 -2
- package/dist/services/show.service.d.ts +46 -46
- package/dist/stores/auth.d.ts +8 -8
- package/dist/stores/auth.svelte.spec.js +1 -1
- package/dist/stores/index.js +9 -9
- package/dist/stores/toaster.d.ts +3 -3
- package/dist/stores/toaster.js +13 -13
- package/dist/stores/toaster.spec.js +59 -59
- 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 +399 -399
- package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
- package/dist/stories/PrimitivesGallery.svelte +756 -756
- package/dist/stories/RecipesGallery.stories.svelte +19 -19
- package/dist/stories/RecipesGallery.svelte +454 -454
- package/dist/stories/button-audit-manifest.json +11186 -11186
- package/dist/tailwind/preset.cjs +87 -82
- package/dist/tailwind/preset.d.cts +2 -0
- package/dist/tailwind/preset.d.cts.map +1 -1
- package/dist/telemetry.js +402 -402
- package/dist/telemetry.server.js +212 -212
- package/dist/telemetry.server.spec.js +437 -437
- package/dist/telemetry.spec.js +1173 -1173
- package/dist/tokens/__tests__/spacing.test.js +2 -2
- package/dist/tokens/__tests__/variants.test.js +12 -4
- package/dist/tokens/base-resets.css +124 -0
- package/dist/tokens/spacing.d.ts +2 -0
- package/dist/tokens/spacing.d.ts.map +1 -1
- package/dist/tokens/spacing.js +1 -0
- package/dist/tokens/tokens.css +87 -87
- package/dist/tokens/typography-base.css +163 -163
- package/dist/tokens/utilities.css +430 -353
- package/dist/tokens/variants.d.ts +4 -4
- package/dist/tokens/variants.js +4 -4
- package/dist/utils/__tests__/auth.test.js +431 -431
- package/dist/utils/apiConfig.d.ts +29 -29
- package/dist/utils/apiConfig.js +117 -117
- package/dist/utils/apiConfig.spec.js +226 -219
- package/dist/utils/auth.d.ts +46 -46
- package/dist/utils/auth.js +195 -195
- package/dist/utils/clickOutside.d.ts +4 -0
- package/dist/utils/clickOutside.d.ts.map +1 -0
- package/dist/utils/clickOutside.js +13 -0
- package/dist/utils/feedbackContext.d.ts +24 -0
- package/dist/utils/feedbackContext.d.ts.map +1 -0
- package/dist/utils/feedbackContext.js +19 -0
- package/dist/utils/fetchHelpers.d.ts.map +1 -1
- package/dist/utils/fetchHelpers.js +1 -0
- package/dist/utils/focusTrap.d.ts +20 -0
- package/dist/utils/focusTrap.d.ts.map +1 -0
- package/dist/utils/focusTrap.js +130 -0
- package/dist/utils/formatters.js +1 -1
- package/dist/utils/greetings.js +187 -187
- package/dist/utils/greetings.spec.js +337 -337
- package/dist/utils/haptic.spec.js +1 -1
- package/dist/utils/imageValidation.js +121 -121
- package/dist/utils/imageValidation.spec.js +223 -223
- package/dist/utils/logger.d.ts +25 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +59 -1
- package/dist/utils/logger.spec.js +99 -1
- package/dist/utils/portal.d.ts +11 -11
- package/dist/utils/portal.js +25 -25
- package/dist/utils/portal.spec.js +143 -143
- package/dist/utils/transitions.d.ts +99 -1
- package/dist/utils/transitions.d.ts.map +1 -1
- package/dist/utils/transitions.js +148 -6
- package/dist/utils/utils/utils.d.ts +2 -2
- package/dist/utils/utils/utils.js +3 -3
- package/dist/utils/utils/utils.spec.js +698 -698
- package/dist/utils/utils.d.ts +41 -41
- package/dist/utils/utils.js +59 -59
- package/dist/utils/utils.spec.js +643 -643
- package/package.json +310 -301
|
@@ -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 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 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,101 +1,101 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
import { gapMap, type GapKey } from '../../tokens/spacing.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Grid - Responsive grid container with automatic column sizing
|
|
7
|
-
*
|
|
8
|
-
* Use Grid for laying out cards, stats, or any items in a responsive grid.
|
|
9
|
-
* Automatically stacks on mobile and expands on larger screens.
|
|
10
|
-
*
|
|
11
|
-
* @example Numeric gap
|
|
12
|
-
* <Grid cols="3" gap="6">
|
|
13
|
-
* <StatsCard>Revenue</StatsCard>
|
|
14
|
-
* <StatsCard>Users</StatsCard>
|
|
15
|
-
* <StatsCard>Orders</StatsCard>
|
|
16
|
-
* </Grid>
|
|
17
|
-
*
|
|
18
|
-
* @example Semantic gap (recommended)
|
|
19
|
-
* <Grid cols="3" gap="section">
|
|
20
|
-
* <Card>Card 1</Card>
|
|
21
|
-
* <Card>Card 2</Card>
|
|
22
|
-
* <Card>Card 3</Card>
|
|
23
|
-
* </Grid>
|
|
24
|
-
*
|
|
25
|
-
* @example Auto-fit columns
|
|
26
|
-
* <Grid cols="auto" minWidth="300px" gap="section">
|
|
27
|
-
* {#each items as item}
|
|
28
|
-
* <Card>{item.name}</Card>
|
|
29
|
-
* {/each}
|
|
30
|
-
* </Grid>
|
|
31
|
-
*
|
|
32
|
-
* @example 12-column layout grid
|
|
33
|
-
* <Grid cols="12" gap="none">
|
|
34
|
-
* <div class="col-span-4">Sidebar</div>
|
|
35
|
-
* <div class="col-span-8">Content</div>
|
|
36
|
-
* </Grid>
|
|
37
|
-
*
|
|
38
|
-
* Semantic Gap Values (from tokens/spacing.ts):
|
|
39
|
-
* - none: 0px - No gap (for 12-col layouts)
|
|
40
|
-
* - xs: 4px (1) - Extra small gap
|
|
41
|
-
* - sm: 8px (2) - Small gap
|
|
42
|
-
* - tight: 16px (4) - Tight grid items (alias: md, content)
|
|
43
|
-
* - standard: 24px (6) - Standard grid items (alias: lg, section)
|
|
44
|
-
* - spacious: 32px (8) - Spacious grid items (alias: xl, layout)
|
|
45
|
-
*/
|
|
46
|
-
|
|
47
|
-
interface Props {
|
|
48
|
-
/** Number of columns or 'auto' for auto-fit */
|
|
49
|
-
cols?: '1' | '2' | '3' | '4' | '5' | '6' | '12' | 'auto';
|
|
50
|
-
/** Gap between grid items - semantic names or Tailwind spacing scale */
|
|
51
|
-
gap?: GapKey;
|
|
52
|
-
/** Minimum width for auto-fit columns (only used when cols='auto') */
|
|
53
|
-
minWidth?: string;
|
|
54
|
-
/** HTML element to render as */
|
|
55
|
-
as?: 'div' | 'section' | 'ul';
|
|
56
|
-
/** Additional CSS classes */
|
|
57
|
-
class?: string;
|
|
58
|
-
/** Child content */
|
|
59
|
-
children?: Snippet;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
let {
|
|
63
|
-
cols = '3',
|
|
64
|
-
gap = '4',
|
|
65
|
-
minWidth = '280px',
|
|
66
|
-
as = 'div',
|
|
67
|
-
class: className = '',
|
|
68
|
-
children
|
|
69
|
-
}: Props = $props();
|
|
70
|
-
|
|
71
|
-
// Responsive column mappings - stack on mobile, expand on larger screens
|
|
72
|
-
const colsMap: Record<string, string> = {
|
|
73
|
-
'1': 'grid-cols-1',
|
|
74
|
-
'2': 'grid-cols-1 md:grid-cols-2',
|
|
75
|
-
'3': 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
|
|
76
|
-
'4': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',
|
|
77
|
-
'5': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-5',
|
|
78
|
-
'6': 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6',
|
|
79
|
-
'12': 'grid-cols-12',
|
|
80
|
-
'auto': '' // Uses inline style
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
let gridStyle = $derived(
|
|
84
|
-
cols === 'auto'
|
|
85
|
-
? `grid-template-columns: repeat(auto-fit, minmax(${minWidth}, 1fr));`
|
|
86
|
-
: ''
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
let classes = $derived(
|
|
90
|
-
[
|
|
91
|
-
'grid',
|
|
92
|
-
cols !== 'auto' ? colsMap[cols] : '',
|
|
93
|
-
gapMap[gap] || 'gap-4',
|
|
94
|
-
className
|
|
95
|
-
].filter(Boolean).join(' ')
|
|
96
|
-
);
|
|
97
|
-
</script>
|
|
98
|
-
|
|
99
|
-
<svelte:element this={as} class={classes} style={gridStyle || undefined}>
|
|
100
|
-
{@render children?.()}
|
|
101
|
-
</svelte:element>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import { gapMap, type GapKey } from '../../tokens/spacing.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Grid - Responsive grid container with automatic column sizing
|
|
7
|
+
*
|
|
8
|
+
* Use Grid for laying out cards, stats, or any items in a responsive grid.
|
|
9
|
+
* Automatically stacks on mobile and expands on larger screens.
|
|
10
|
+
*
|
|
11
|
+
* @example Numeric gap
|
|
12
|
+
* <Grid cols="3" gap="6">
|
|
13
|
+
* <StatsCard>Revenue</StatsCard>
|
|
14
|
+
* <StatsCard>Users</StatsCard>
|
|
15
|
+
* <StatsCard>Orders</StatsCard>
|
|
16
|
+
* </Grid>
|
|
17
|
+
*
|
|
18
|
+
* @example Semantic gap (recommended)
|
|
19
|
+
* <Grid cols="3" gap="section">
|
|
20
|
+
* <Card>Card 1</Card>
|
|
21
|
+
* <Card>Card 2</Card>
|
|
22
|
+
* <Card>Card 3</Card>
|
|
23
|
+
* </Grid>
|
|
24
|
+
*
|
|
25
|
+
* @example Auto-fit columns
|
|
26
|
+
* <Grid cols="auto" minWidth="300px" gap="section">
|
|
27
|
+
* {#each items as item}
|
|
28
|
+
* <Card>{item.name}</Card>
|
|
29
|
+
* {/each}
|
|
30
|
+
* </Grid>
|
|
31
|
+
*
|
|
32
|
+
* @example 12-column layout grid
|
|
33
|
+
* <Grid cols="12" gap="none">
|
|
34
|
+
* <div class="col-span-4">Sidebar</div>
|
|
35
|
+
* <div class="col-span-8">Content</div>
|
|
36
|
+
* </Grid>
|
|
37
|
+
*
|
|
38
|
+
* Semantic Gap Values (from tokens/spacing.ts):
|
|
39
|
+
* - none: 0px - No gap (for 12-col layouts)
|
|
40
|
+
* - xs: 4px (1) - Extra small gap
|
|
41
|
+
* - sm: 8px (2) - Small gap
|
|
42
|
+
* - tight: 16px (4) - Tight grid items (alias: md, content)
|
|
43
|
+
* - standard: 24px (6) - Standard grid items (alias: lg, section)
|
|
44
|
+
* - spacious: 32px (8) - Spacious grid items (alias: xl, layout)
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
interface Props {
|
|
48
|
+
/** Number of columns or 'auto' for auto-fit */
|
|
49
|
+
cols?: '1' | '2' | '3' | '4' | '5' | '6' | '12' | 'auto';
|
|
50
|
+
/** Gap between grid items - semantic names or Tailwind spacing scale */
|
|
51
|
+
gap?: GapKey;
|
|
52
|
+
/** Minimum width for auto-fit columns (only used when cols='auto') */
|
|
53
|
+
minWidth?: string;
|
|
54
|
+
/** HTML element to render as */
|
|
55
|
+
as?: 'div' | 'section' | 'ul';
|
|
56
|
+
/** Additional CSS classes */
|
|
57
|
+
class?: string;
|
|
58
|
+
/** Child content */
|
|
59
|
+
children?: Snippet;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let {
|
|
63
|
+
cols = '3',
|
|
64
|
+
gap = '4',
|
|
65
|
+
minWidth = '280px',
|
|
66
|
+
as = 'div',
|
|
67
|
+
class: className = '',
|
|
68
|
+
children
|
|
69
|
+
}: Props = $props();
|
|
70
|
+
|
|
71
|
+
// Responsive column mappings - stack on mobile, expand on larger screens
|
|
72
|
+
const colsMap: Record<string, string> = {
|
|
73
|
+
'1': 'grid-cols-1',
|
|
74
|
+
'2': 'grid-cols-1 md:grid-cols-2',
|
|
75
|
+
'3': 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
|
|
76
|
+
'4': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',
|
|
77
|
+
'5': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-5',
|
|
78
|
+
'6': 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6',
|
|
79
|
+
'12': 'grid-cols-12',
|
|
80
|
+
'auto': '' // Uses inline style
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
let gridStyle = $derived(
|
|
84
|
+
cols === 'auto'
|
|
85
|
+
? `grid-template-columns: repeat(auto-fit, minmax(${minWidth}, 1fr));`
|
|
86
|
+
: ''
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
let classes = $derived(
|
|
90
|
+
[
|
|
91
|
+
'grid',
|
|
92
|
+
cols !== 'auto' ? colsMap[cols] : '',
|
|
93
|
+
gapMap[gap] || 'gap-4',
|
|
94
|
+
className
|
|
95
|
+
].filter(Boolean).join(' ')
|
|
96
|
+
);
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<svelte:element this={as} class={classes} style={gridStyle || undefined}>
|
|
100
|
+
{@render children?.()}
|
|
101
|
+
</svelte:element>
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
|
|
4
|
-
type Level = 1 | 2 | 3 | 4 | 5 | 6;
|
|
5
|
-
type Size = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
|
|
6
|
-
type Variant = 'default' | 'muted' | 'primary';
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
/** Semantic heading level (1-6) */
|
|
10
|
-
level?: Level;
|
|
11
|
-
/** Visual size override (optional - defaults based on level) */
|
|
12
|
-
size?: Size;
|
|
13
|
-
/** Color variant */
|
|
14
|
-
variant?: Variant;
|
|
15
|
-
/** Font weight */
|
|
16
|
-
weight?: 'medium' | 'semibold' | 'bold';
|
|
17
|
-
/** Additional CSS classes */
|
|
18
|
-
class?: string;
|
|
19
|
-
/** Child content */
|
|
20
|
-
children?: Snippet;
|
|
21
|
-
/** Rest props */
|
|
22
|
-
[key: string]: unknown;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let {
|
|
26
|
-
level = 2,
|
|
27
|
-
size,
|
|
28
|
-
variant = 'default',
|
|
29
|
-
weight = 'semibold',
|
|
30
|
-
class: className = '',
|
|
31
|
-
children,
|
|
32
|
-
...restProps
|
|
33
|
-
}: Props = $props();
|
|
34
|
-
|
|
35
|
-
// Default size mapping based on heading level
|
|
36
|
-
const levelToSize: Record<Level, Size> = {
|
|
37
|
-
1: '3xl',
|
|
38
|
-
2: '2xl',
|
|
39
|
-
3: 'xl',
|
|
40
|
-
4: 'lg',
|
|
41
|
-
5: 'base',
|
|
42
|
-
6: 'sm',
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const sizeClasses: Record<Size, string> = {
|
|
46
|
-
xs: 'text-xs',
|
|
47
|
-
sm: 'text-sm',
|
|
48
|
-
base: 'text-base',
|
|
49
|
-
lg: 'text-lg',
|
|
50
|
-
xl: 'text-xl',
|
|
51
|
-
'2xl': 'text-2xl',
|
|
52
|
-
'3xl': 'text-3xl',
|
|
53
|
-
'4xl': 'text-4xl',
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
const variantClasses: Record<Variant, string> = {
|
|
57
|
-
default: 'text-gray-900 dark:text-white',
|
|
58
|
-
muted: 'text-gray-600 dark:text-gray-400',
|
|
59
|
-
primary: 'text-primary dark:text-primary',
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const weightClasses: Record<string, string> = {
|
|
63
|
-
medium: 'font-medium',
|
|
64
|
-
semibold: 'font-semibold',
|
|
65
|
-
bold: 'font-bold',
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
let effectiveSize = $derived(size || levelToSize[level]);
|
|
69
|
-
let element = $derived(`h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6');
|
|
70
|
-
|
|
71
|
-
let classes = $derived([
|
|
72
|
-
sizeClasses[effectiveSize],
|
|
73
|
-
variantClasses[variant],
|
|
74
|
-
weightClasses[weight],
|
|
75
|
-
className,
|
|
76
|
-
].filter(Boolean).join(' '));
|
|
77
|
-
</script>
|
|
78
|
-
|
|
79
|
-
<svelte:element this={element} class={classes} {...restProps}>
|
|
80
|
-
{#if children}{@render children()}{/if}
|
|
81
|
-
</svelte:element>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
type Level = 1 | 2 | 3 | 4 | 5 | 6;
|
|
5
|
+
type Size = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
|
|
6
|
+
type Variant = 'default' | 'muted' | 'primary';
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
/** Semantic heading level (1-6) */
|
|
10
|
+
level?: Level;
|
|
11
|
+
/** Visual size override (optional - defaults based on level) */
|
|
12
|
+
size?: Size;
|
|
13
|
+
/** Color variant */
|
|
14
|
+
variant?: Variant;
|
|
15
|
+
/** Font weight */
|
|
16
|
+
weight?: 'medium' | 'semibold' | 'bold';
|
|
17
|
+
/** Additional CSS classes */
|
|
18
|
+
class?: string;
|
|
19
|
+
/** Child content */
|
|
20
|
+
children?: Snippet;
|
|
21
|
+
/** Rest props */
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let {
|
|
26
|
+
level = 2,
|
|
27
|
+
size,
|
|
28
|
+
variant = 'default',
|
|
29
|
+
weight = 'semibold',
|
|
30
|
+
class: className = '',
|
|
31
|
+
children,
|
|
32
|
+
...restProps
|
|
33
|
+
}: Props = $props();
|
|
34
|
+
|
|
35
|
+
// Default size mapping based on heading level
|
|
36
|
+
const levelToSize: Record<Level, Size> = {
|
|
37
|
+
1: '3xl',
|
|
38
|
+
2: '2xl',
|
|
39
|
+
3: 'xl',
|
|
40
|
+
4: 'lg',
|
|
41
|
+
5: 'base',
|
|
42
|
+
6: 'sm',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const sizeClasses: Record<Size, string> = {
|
|
46
|
+
xs: 'text-xs',
|
|
47
|
+
sm: 'text-sm',
|
|
48
|
+
base: 'text-base',
|
|
49
|
+
lg: 'text-lg',
|
|
50
|
+
xl: 'text-xl',
|
|
51
|
+
'2xl': 'text-2xl',
|
|
52
|
+
'3xl': 'text-3xl',
|
|
53
|
+
'4xl': 'text-4xl',
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const variantClasses: Record<Variant, string> = {
|
|
57
|
+
default: 'text-gray-900 dark:text-white',
|
|
58
|
+
muted: 'text-gray-600 dark:text-gray-400',
|
|
59
|
+
primary: 'text-primary dark:text-primary',
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const weightClasses: Record<string, string> = {
|
|
63
|
+
medium: 'font-medium',
|
|
64
|
+
semibold: 'font-semibold',
|
|
65
|
+
bold: 'font-bold',
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
let effectiveSize = $derived(size || levelToSize[level]);
|
|
69
|
+
let element = $derived(`h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6');
|
|
70
|
+
|
|
71
|
+
let classes = $derived([
|
|
72
|
+
sizeClasses[effectiveSize],
|
|
73
|
+
variantClasses[variant],
|
|
74
|
+
weightClasses[weight],
|
|
75
|
+
className,
|
|
76
|
+
].filter(Boolean).join(' '));
|
|
77
|
+
</script>
|
|
78
|
+
|
|
79
|
+
<svelte:element this={element} class={classes} {...restProps}>
|
|
80
|
+
{#if children}{@render children()}{/if}
|
|
81
|
+
</svelte:element>
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
|
|
4
|
-
type MaxWidth = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '4xl' | '6xl' | 'full';
|
|
5
|
-
type Padding = 'none' | 'tight' | 'default' | 'spacious';
|
|
6
|
-
|
|
7
|
-
interface Props {
|
|
8
|
-
/** Maximum width of the container */
|
|
9
|
-
maxWidth?: MaxWidth;
|
|
10
|
-
/** Padding variant */
|
|
11
|
-
padding?: Padding;
|
|
12
|
-
/** Center the container */
|
|
13
|
-
center?: boolean;
|
|
14
|
-
/** Background color variant */
|
|
15
|
-
background?: 'none' | 'white' | 'gray';
|
|
16
|
-
/** Additional CSS classes */
|
|
17
|
-
class?: string;
|
|
18
|
-
/** Child content */
|
|
19
|
-
children?: Snippet;
|
|
20
|
-
/** Rest props */
|
|
21
|
-
[key: string]: unknown;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
let {
|
|
25
|
-
maxWidth = 'full',
|
|
26
|
-
padding = 'default',
|
|
27
|
-
center = true,
|
|
28
|
-
background = 'none',
|
|
29
|
-
class: className = '',
|
|
30
|
-
children,
|
|
31
|
-
...restProps
|
|
32
|
-
}: Props = $props();
|
|
33
|
-
|
|
34
|
-
const maxWidthClasses: Record<MaxWidth, string> = {
|
|
35
|
-
sm: 'max-w-sm',
|
|
36
|
-
md: 'max-w-md',
|
|
37
|
-
lg: 'max-w-lg',
|
|
38
|
-
xl: 'max-w-xl',
|
|
39
|
-
'2xl': 'max-w-2xl',
|
|
40
|
-
'4xl': 'max-w-4xl',
|
|
41
|
-
'6xl': 'max-w-6xl',
|
|
42
|
-
full: 'max-w-full',
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const paddingClasses: Record<Padding, string> = {
|
|
46
|
-
none: '',
|
|
47
|
-
tight: 'px-2 py-2 md:px-4 md:py-4',
|
|
48
|
-
default: 'px-4 py-6 md:py-8',
|
|
49
|
-
spacious: 'px-4 py-8 md:px-6 md:py-12',
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const backgroundClasses: Record<string, string> = {
|
|
53
|
-
none: '',
|
|
54
|
-
white: 'bg-white dark:bg-gray-900',
|
|
55
|
-
gray: 'bg-gray-50 dark:bg-gray-800',
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
let classes = $derived([
|
|
59
|
-
maxWidthClasses[maxWidth],
|
|
60
|
-
paddingClasses[padding],
|
|
61
|
-
backgroundClasses[background],
|
|
62
|
-
center ? 'mx-auto' : '',
|
|
63
|
-
className,
|
|
64
|
-
].filter(Boolean).join(' '));
|
|
65
|
-
</script>
|
|
66
|
-
|
|
67
|
-
<div class={classes} {...restProps}>
|
|
68
|
-
{#if children}{@render children()}{/if}
|
|
69
|
-
</div>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
type MaxWidth = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '4xl' | '6xl' | 'full';
|
|
5
|
+
type Padding = 'none' | 'tight' | 'default' | 'spacious';
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
/** Maximum width of the container */
|
|
9
|
+
maxWidth?: MaxWidth;
|
|
10
|
+
/** Padding variant */
|
|
11
|
+
padding?: Padding;
|
|
12
|
+
/** Center the container */
|
|
13
|
+
center?: boolean;
|
|
14
|
+
/** Background color variant */
|
|
15
|
+
background?: 'none' | 'white' | 'gray';
|
|
16
|
+
/** Additional CSS classes */
|
|
17
|
+
class?: string;
|
|
18
|
+
/** Child content */
|
|
19
|
+
children?: Snippet;
|
|
20
|
+
/** Rest props */
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let {
|
|
25
|
+
maxWidth = 'full',
|
|
26
|
+
padding = 'default',
|
|
27
|
+
center = true,
|
|
28
|
+
background = 'none',
|
|
29
|
+
class: className = '',
|
|
30
|
+
children,
|
|
31
|
+
...restProps
|
|
32
|
+
}: Props = $props();
|
|
33
|
+
|
|
34
|
+
const maxWidthClasses: Record<MaxWidth, string> = {
|
|
35
|
+
sm: 'max-w-sm',
|
|
36
|
+
md: 'max-w-md',
|
|
37
|
+
lg: 'max-w-lg',
|
|
38
|
+
xl: 'max-w-xl',
|
|
39
|
+
'2xl': 'max-w-2xl',
|
|
40
|
+
'4xl': 'max-w-4xl',
|
|
41
|
+
'6xl': 'max-w-6xl',
|
|
42
|
+
full: 'max-w-full',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const paddingClasses: Record<Padding, string> = {
|
|
46
|
+
none: '',
|
|
47
|
+
tight: 'px-2 py-2 md:px-4 md:py-4',
|
|
48
|
+
default: 'px-4 py-6 md:py-8',
|
|
49
|
+
spacious: 'px-4 py-8 md:px-6 md:py-12',
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const backgroundClasses: Record<string, string> = {
|
|
53
|
+
none: '',
|
|
54
|
+
white: 'bg-white dark:bg-gray-900',
|
|
55
|
+
gray: 'bg-gray-50 dark:bg-gray-800',
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
let classes = $derived([
|
|
59
|
+
maxWidthClasses[maxWidth],
|
|
60
|
+
paddingClasses[padding],
|
|
61
|
+
backgroundClasses[background],
|
|
62
|
+
center ? 'mx-auto' : '',
|
|
63
|
+
className,
|
|
64
|
+
].filter(Boolean).join(' '));
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<div class={classes} {...restProps}>
|
|
68
|
+
{#if children}{@render children()}{/if}
|
|
69
|
+
</div>
|