@getmicdrop/svelte-components 5.21.0 → 5.21.2
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.spec.js +10 -10
- package/dist/calendar/AboutShow/AboutShow.svelte +191 -191
- package/dist/calendar/Calendar/MiniMonthCalendar.spec.js +9 -8
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte +800 -803
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
- package/dist/calendar/FAQs/FAQs.spec.js +6 -6
- package/dist/calendar/FAQs/FAQs.svelte +88 -88
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +136 -140
- package/dist/calendar/OrderSummary/OrderSummary.svelte +461 -461
- package/dist/calendar/PublicCard/PublicCard.spec.js +3 -3
- package/dist/calendar/PublicCard/PublicCard.svelte +164 -164
- package/dist/calendar/ShowCard/ShowCard.spec.js +8 -8
- package/dist/calendar/ShowCard/ShowCard.svelte +180 -180
- package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.js +4 -4
- 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 -66
- 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.spec.js +4 -4
- 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/Layout/__tests__/AppShell.test.js +5 -5
- package/dist/components/Layout/__tests__/ContentSection.test.js +1 -1
- package/dist/components/Layout/__tests__/Heading.test.js +3 -3
- package/dist/components/Layout/__tests__/PageContainer.test.js +4 -4
- package/dist/components/Layout/__tests__/Text.test.js +9 -9
- package/dist/components/Text.spec.js +89 -89
- package/dist/components/Text.svelte +64 -64
- package/dist/config.js +160 -160
- package/dist/config.spec.js +29 -29
- package/dist/constants/formOptions.js +48 -48
- 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 +1 -0
- package/dist/forms/createFormStore.svelte.spec.js +1 -0
- package/dist/index.js +85 -85
- 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.spec.js +5 -5
- package/dist/patterns/data/DataList.svelte +24 -24
- package/dist/patterns/data/DataTable.spec.js +18 -18
- 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.spec.js +4 -4
- package/dist/patterns/forms/FormSection.svelte +33 -33
- package/dist/patterns/forms/FormValidationSummary.spec.js +2 -2
- 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.spec.js +9 -9
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +261 -263
- package/dist/patterns/navigation/Header.svelte.d.ts.map +1 -1
- package/dist/patterns/navigation/index.js +3 -3
- package/dist/patterns/page/PageHeader.svelte +49 -49
- package/dist/patterns/page/PageLayout.spec.js +5 -5
- 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.spec.js +8 -8
- 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/buttons.spec.js +4 -4
- package/dist/presets/index.js +9 -9
- package/dist/primitives/Accordion/Accordion.spec.js +5 -5
- package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
- package/dist/primitives/Accordion/Accordion.svelte +62 -62
- package/dist/primitives/Accordion/AccordionItem.spec.js +19 -28
- 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.spec.js +11 -11
- package/dist/primitives/Avatar/Avatar.stories.svelte +95 -94
- package/dist/primitives/Avatar/Avatar.stories.svelte.d.ts.map +1 -1
- 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 +125 -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.spec.js +1 -1
- 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 +16 -16
- 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.spec.js +4 -4
- 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.spec.js +9 -9
- 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.spec.js +8 -15
- 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/Icons.spec.js +3 -3
- 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.spec.js +8 -8
- package/dist/primitives/Input/Textarea.stories.svelte +137 -137
- package/dist/primitives/Input/Textarea.svelte +105 -105
- package/dist/primitives/Label/Label.spec.js +20 -21
- 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.spec.js +17 -17
- package/dist/primitives/NumberInput/NumberInput.svelte +113 -113
- package/dist/primitives/Pagination/DotIndicator.svelte +66 -66
- package/dist/primitives/Pagination/Pagination.spec.js +6 -6
- package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
- package/dist/primitives/Pagination/Pagination.svelte +275 -275
- package/dist/primitives/Radio/Radio.spec.js +19 -19
- 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.spec.js +1 -1
- package/dist/primitives/Skeleton/CardPlaceholder.svelte +96 -96
- package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +2 -2
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte +68 -68
- package/dist/primitives/Skeleton/ListPlaceholder.spec.js +2 -2
- package/dist/primitives/Skeleton/ListPlaceholder.svelte +85 -85
- package/dist/primitives/Skeleton/Skeleton.spec.js +7 -7
- package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
- package/dist/primitives/Skeleton/Skeleton.svelte +55 -55
- package/dist/primitives/Spinner/Spinner.spec.js +83 -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.spec.js +14 -14
- package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
- package/dist/primitives/Tabs/Tabs.svelte +137 -137
- package/dist/primitives/Toggle.spec.js +219 -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.js +114 -114
- 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.spec.js +1 -1
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +972 -994
- package/dist/recipes/SuperLogin/SuperLogin.svelte +24 -24
- 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.spec.js +2 -2
- package/dist/recipes/fields/CheckboxField.svelte +85 -85
- package/dist/recipes/fields/FormField.spec.js +4 -4
- package/dist/recipes/fields/FormField.svelte +58 -58
- package/dist/recipes/fields/RadioGroup.spec.js +1 -1
- package/dist/recipes/fields/RadioGroup.svelte +95 -95
- package/dist/recipes/fields/SelectField.spec.js +2 -2
- package/dist/recipes/fields/SelectField.svelte +82 -82
- package/dist/recipes/fields/TextareaField.spec.js +2 -2
- package/dist/recipes/fields/TextareaField.svelte +101 -101
- package/dist/recipes/fields/ToggleField.spec.js +2 -2
- 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.spec.js +2 -2
- package/dist/recipes/inputs/PasswordInput.svelte +130 -130
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +14 -14
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +142 -142
- package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +2 -2
- package/dist/recipes/inputs/PhoneInput.svelte +254 -254
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +10 -10
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +170 -170
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +346 -349
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/Search.spec.js +3 -3
- 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.spec.js +36 -36
- 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 -205
- package/dist/recipes/modals/InputModal.spec.js +17 -17
- 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.spec.js +7 -7
- package/dist/recipes/modals/StatusModal.svelte +216 -216
- package/dist/recipes/modals/index.js +8 -8
- package/dist/schemas/__tests__/order.test.js +1 -1
- package/dist/schemas/auth.d.ts +107 -17
- package/dist/schemas/auth.d.ts.map +1 -1
- package/dist/schemas/common.d.ts +41 -13
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +1 -1
- package/dist/schemas/event.d.ts +147 -41
- package/dist/schemas/event.d.ts.map +1 -1
- package/dist/schemas/event.js +1 -1
- package/dist/schemas/order.d.ts +208 -51
- package/dist/schemas/order.d.ts.map +1 -1
- package/dist/schemas/order.js +1 -0
- package/dist/schemas/performer.d.ts +199 -44
- package/dist/schemas/performer.d.ts.map +1 -1
- package/dist/schemas/performer.js +1 -1
- package/dist/schemas/promo.d.ts +221 -55
- package/dist/schemas/promo.d.ts.map +1 -1
- package/dist/schemas/promo.js +2 -2
- package/dist/schemas/ticket.d.ts +187 -61
- package/dist/schemas/ticket.d.ts.map +1 -1
- package/dist/schemas/ticket.js +1 -1
- package/dist/schemas/user.d.ts +114 -54
- package/dist/schemas/user.d.ts.map +1 -1
- package/dist/schemas/user.js +2 -1
- package/dist/schemas/venue.d.ts +238 -20
- package/dist/schemas/venue.d.ts.map +1 -1
- 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/ButtonAuditDashboard.spec.js +12 -12
- package/dist/stories/ButtonAuditDashboard.svelte +55 -55
- package/dist/stories/ButtonAuditReview.spec.js +8 -8
- package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
- package/dist/stories/ButtonAuditReview.svelte +427 -427
- package/dist/stories/ButtonGridView.spec.js +27 -27
- package/dist/stories/ButtonGridView.svelte +22 -22
- package/dist/stories/ButtonShowcase.spec.js +4 -4
- package/dist/stories/ButtonShowcase.svelte +119 -119
- package/dist/stories/ComponentConsolidation.stories.svelte +453 -453
- package/dist/stories/DesignSystemAudit.stories.svelte +127 -127
- package/dist/stories/PatternsGallery.spec.js +3 -3
- package/dist/stories/PatternsGallery.stories.svelte +19 -19
- package/dist/stories/PatternsGallery.svelte +399 -399
- package/dist/stories/PrimitivesGallery.spec.js +9 -9
- 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 +107 -87
- package/dist/tailwind/preset.d.cts +16 -0
- package/dist/tailwind/preset.d.cts.map +1 -1
- package/dist/telemetry.js +401 -401
- package/dist/telemetry.server.js +212 -212
- package/dist/telemetry.server.spec.js +437 -437
- package/dist/telemetry.spec.js +1273 -1273
- package/dist/tokens/__tests__/typography-base.test.js +5 -5
- package/dist/tokens/__tests__/typography.test.js +32 -36
- package/dist/tokens/__tests__/variants.test.js +63 -78
- package/dist/tokens/tokens.css +123 -87
- package/dist/tokens/typography-base.css +163 -163
- package/dist/tokens/typography.d.ts +29 -29
- package/dist/tokens/typography.js +29 -29
- package/dist/tokens/utilities.css +418 -430
- package/dist/tokens/variants.d.ts +32 -32
- package/dist/tokens/variants.js +32 -32
- package/dist/utils/__tests__/auth.test.js +431 -431
- package/dist/utils/apiConfig.d.ts +29 -29
- package/dist/utils/apiConfig.js +142 -142
- package/dist/utils/auth.d.ts +46 -46
- package/dist/utils/auth.js +195 -195
- 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/portal.d.ts +11 -11
- package/dist/utils/portal.js +25 -25
- package/dist/utils/portal.spec.js +143 -143
- package/dist/utils/transitions.js +16 -16
- 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 +306 -306
|
@@ -1,240 +1,240 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { onMount, tick } from "svelte";
|
|
3
|
-
import { ChevronDownOutline } from "../../../primitives/Icons";
|
|
4
|
-
import { typography } from "../../../tokens/typography";
|
|
5
|
-
import { bloom } from "../../../utils/transitions.js";
|
|
6
|
-
import { COUNTRIES, type Country } from "./countryData";
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
country?: Country;
|
|
10
|
-
disabled?: boolean;
|
|
11
|
-
size?: "sm" | "md" | "lg";
|
|
12
|
-
labels?: {
|
|
13
|
-
searchPlaceholder?: string;
|
|
14
|
-
noResults?: string;
|
|
15
|
-
countrySelector?: string;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const defaultLabels = {
|
|
20
|
-
searchPlaceholder: 'Search...',
|
|
21
|
-
noResults: 'No countries found',
|
|
22
|
-
countrySelector: 'Select country',
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
let {
|
|
26
|
-
country = $bindable(COUNTRIES.find((c) => c.code === 'US')!),
|
|
27
|
-
disabled = false,
|
|
28
|
-
size = "md",
|
|
29
|
-
labels: userLabels = {},
|
|
30
|
-
}: Props = $props();
|
|
31
|
-
|
|
32
|
-
let labels = $derived({ ...defaultLabels, ...userLabels });
|
|
33
|
-
|
|
34
|
-
let isOpen = $state(false);
|
|
35
|
-
let searchQuery = $state('');
|
|
36
|
-
let triggerElement = $state<HTMLButtonElement | null>(null);
|
|
37
|
-
let dropdownElement = $state<HTMLDivElement | null>(null);
|
|
38
|
-
let searchInputElement = $state<HTMLInputElement | null>(null);
|
|
39
|
-
let focusedIndex = $state(-1);
|
|
40
|
-
let dropdownPosition = $state({ top: 0, left: 0, width: 0 });
|
|
41
|
-
|
|
42
|
-
const instanceId = Math.random().toString(36).substring(2, 9);
|
|
43
|
-
|
|
44
|
-
let filteredCountries = $derived.by(() => {
|
|
45
|
-
if (!searchQuery) return COUNTRIES;
|
|
46
|
-
const q = searchQuery.toLowerCase();
|
|
47
|
-
return COUNTRIES.filter(
|
|
48
|
-
(c) =>
|
|
49
|
-
c.name.toLowerCase().includes(q) ||
|
|
50
|
-
c.dialCode.includes(q) ||
|
|
51
|
-
c.code.toLowerCase().includes(q)
|
|
52
|
-
);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
const sizeMap = {
|
|
56
|
-
sm: 'h-9 px-2 text-sm gap-1',
|
|
57
|
-
md: 'h-10 px-2.5 text-sm gap-1.5',
|
|
58
|
-
lg: 'h-12 px-3 text-base gap-2',
|
|
59
|
-
} as const;
|
|
60
|
-
|
|
61
|
-
let sizeClass = $derived(sizeMap[size] || sizeMap.md);
|
|
62
|
-
|
|
63
|
-
function updateDropdownPosition() {
|
|
64
|
-
if (!triggerElement) return;
|
|
65
|
-
const rect = triggerElement.getBoundingClientRect();
|
|
66
|
-
dropdownPosition = {
|
|
67
|
-
top: rect.bottom + 4,
|
|
68
|
-
left: rect.left,
|
|
69
|
-
width: Math.max(280, rect.width),
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async function toggle() {
|
|
74
|
-
if (disabled) return;
|
|
75
|
-
isOpen = !isOpen;
|
|
76
|
-
if (isOpen) {
|
|
77
|
-
searchQuery = '';
|
|
78
|
-
focusedIndex = -1;
|
|
79
|
-
window.dispatchEvent(new CustomEvent('select-opened', { detail: { instanceId } }));
|
|
80
|
-
await tick();
|
|
81
|
-
updateDropdownPosition();
|
|
82
|
-
searchInputElement?.focus();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function handleOtherSelectOpened(event: Event) {
|
|
87
|
-
const customEvent = event as CustomEvent<{ instanceId: string }>;
|
|
88
|
-
if (customEvent.detail.instanceId !== instanceId && isOpen) {
|
|
89
|
-
close();
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function close() {
|
|
94
|
-
isOpen = false;
|
|
95
|
-
searchQuery = '';
|
|
96
|
-
focusedIndex = -1;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function selectCountry(c: Country) {
|
|
100
|
-
country = c;
|
|
101
|
-
close();
|
|
102
|
-
triggerElement?.focus();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function handleKeydown(event: KeyboardEvent) {
|
|
106
|
-
if (disabled) return;
|
|
107
|
-
|
|
108
|
-
switch (event.key) {
|
|
109
|
-
case "Enter":
|
|
110
|
-
event.preventDefault();
|
|
111
|
-
if (isOpen && focusedIndex >= 0 && focusedIndex < filteredCountries.length) {
|
|
112
|
-
selectCountry(filteredCountries[focusedIndex]);
|
|
113
|
-
} else if (!isOpen) {
|
|
114
|
-
toggle();
|
|
115
|
-
}
|
|
116
|
-
break;
|
|
117
|
-
case "ArrowDown":
|
|
118
|
-
event.preventDefault();
|
|
119
|
-
if (!isOpen) {
|
|
120
|
-
toggle();
|
|
121
|
-
} else {
|
|
122
|
-
focusedIndex = Math.min(focusedIndex + 1, filteredCountries.length - 1);
|
|
123
|
-
scrollToFocused();
|
|
124
|
-
}
|
|
125
|
-
break;
|
|
126
|
-
case "ArrowUp":
|
|
127
|
-
event.preventDefault();
|
|
128
|
-
if (isOpen) {
|
|
129
|
-
focusedIndex = Math.max(focusedIndex - 1, 0);
|
|
130
|
-
scrollToFocused();
|
|
131
|
-
}
|
|
132
|
-
break;
|
|
133
|
-
case "Escape":
|
|
134
|
-
event.preventDefault();
|
|
135
|
-
close();
|
|
136
|
-
triggerElement?.focus();
|
|
137
|
-
break;
|
|
138
|
-
case "Tab":
|
|
139
|
-
close();
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function scrollToFocused() {
|
|
145
|
-
tick().then(() => {
|
|
146
|
-
const el = dropdownElement?.querySelector(`[data-index="${focusedIndex}"]`);
|
|
147
|
-
el?.scrollIntoView({ block: 'nearest' });
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function handleClickOutside(event: MouseEvent) {
|
|
152
|
-
if (!isOpen) return;
|
|
153
|
-
const target = event.target as Node;
|
|
154
|
-
const clickedOutsideTrigger = triggerElement && !triggerElement.contains(target);
|
|
155
|
-
const clickedOutsideDropdown = !dropdownElement || !dropdownElement.contains(target);
|
|
156
|
-
if (clickedOutsideTrigger && clickedOutsideDropdown) {
|
|
157
|
-
close();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
onMount(() => {
|
|
162
|
-
document.addEventListener("click", handleClickOutside, true);
|
|
163
|
-
window.addEventListener("select-opened", handleOtherSelectOpened);
|
|
164
|
-
window.addEventListener("scroll", updateDropdownPosition, true);
|
|
165
|
-
window.addEventListener("resize", updateDropdownPosition);
|
|
166
|
-
|
|
167
|
-
return () => {
|
|
168
|
-
document.removeEventListener("click", handleClickOutside, true);
|
|
169
|
-
window.removeEventListener("select-opened", handleOtherSelectOpened);
|
|
170
|
-
window.removeEventListener("scroll", updateDropdownPosition, true);
|
|
171
|
-
window.removeEventListener("resize", updateDropdownPosition);
|
|
172
|
-
};
|
|
173
|
-
});
|
|
174
|
-
</script>
|
|
175
|
-
|
|
176
|
-
<div class="relative shrink-0">
|
|
177
|
-
<button
|
|
178
|
-
type="button"
|
|
179
|
-
bind:this={triggerElement}
|
|
180
|
-
class="flex items-center {sizeClass} bg-
|
|
181
|
-
{disabled}
|
|
182
|
-
aria-haspopup="listbox"
|
|
183
|
-
aria-expanded={isOpen}
|
|
184
|
-
aria-label={labels.countrySelector}
|
|
185
|
-
onclick={toggle}
|
|
186
|
-
onkeydown={handleKeydown}
|
|
187
|
-
>
|
|
188
|
-
<span class="text-lg leading-none">{country.flag}</span>
|
|
189
|
-
<span class={`${typography.sm} whitespace-nowrap`}>{country.dialCode}</span>
|
|
190
|
-
<ChevronDownOutline class="w-3 h-3 shrink-0 {typography.iconMuted} transition-transform duration-200 {isOpen ? 'rotate-180' : ''}" />
|
|
191
|
-
</button>
|
|
192
|
-
|
|
193
|
-
{#if isOpen}
|
|
194
|
-
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
195
|
-
<div
|
|
196
|
-
bind:this={dropdownElement}
|
|
197
|
-
class="fixed z-[100] bg-
|
|
198
|
-
style="top: {dropdownPosition.top}px; left: {dropdownPosition.left}px; width: {dropdownPosition.width}px;"
|
|
199
|
-
role="listbox"
|
|
200
|
-
tabindex="-1"
|
|
201
|
-
aria-label={labels.countrySelector}
|
|
202
|
-
transition:bloom={{ origin: "top left" }}
|
|
203
|
-
>
|
|
204
|
-
<!-- Search -->
|
|
205
|
-
<div class="p-2 border-b border-
|
|
206
|
-
<input
|
|
207
|
-
bind:this={searchInputElement}
|
|
208
|
-
type="text"
|
|
209
|
-
class="w-full px-3 py-2 text-sm bg-
|
|
210
|
-
placeholder={labels.searchPlaceholder}
|
|
211
|
-
bind:value={searchQuery}
|
|
212
|
-
onkeydown={handleKeydown}
|
|
213
|
-
/>
|
|
214
|
-
</div>
|
|
215
|
-
|
|
216
|
-
<!-- List -->
|
|
217
|
-
<div class="max-h-60 overflow-y-auto py-1">
|
|
218
|
-
{#each filteredCountries as c, idx}
|
|
219
|
-
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
220
|
-
<li
|
|
221
|
-
class={`flex items-center gap-3 px-3 py-2 cursor-pointer ${typography.sm} transition-colors ${c.code === country.code ? '' : typography.textMuted} ${idx === focusedIndex ? 'bg-
|
|
222
|
-
role="option"
|
|
223
|
-
aria-selected={c.code === country.code}
|
|
224
|
-
data-index={idx}
|
|
225
|
-
onclick={() => selectCountry(c)}
|
|
226
|
-
onmouseenter={() => (focusedIndex = idx)}
|
|
227
|
-
>
|
|
228
|
-
<span class="text-lg leading-none">{c.flag}</span>
|
|
229
|
-
<span class="flex-1">{c.name}</span>
|
|
230
|
-
<span class={typography.textMuted}>{c.dialCode}</span>
|
|
231
|
-
</li>
|
|
232
|
-
{:else}
|
|
233
|
-
<div class={`px-3 py-4 text-center ${typography.textMuted}`}>
|
|
234
|
-
{labels.noResults}
|
|
235
|
-
</div>
|
|
236
|
-
{/each}
|
|
237
|
-
</div>
|
|
238
|
-
</div>
|
|
239
|
-
{/if}
|
|
240
|
-
</div>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount, tick } from "svelte";
|
|
3
|
+
import { ChevronDownOutline } from "../../../primitives/Icons";
|
|
4
|
+
import { typography } from "../../../tokens/typography";
|
|
5
|
+
import { bloom } from "../../../utils/transitions.js";
|
|
6
|
+
import { COUNTRIES, type Country } from "./countryData";
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
country?: Country;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
size?: "sm" | "md" | "lg";
|
|
12
|
+
labels?: {
|
|
13
|
+
searchPlaceholder?: string;
|
|
14
|
+
noResults?: string;
|
|
15
|
+
countrySelector?: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const defaultLabels = {
|
|
20
|
+
searchPlaceholder: 'Search...',
|
|
21
|
+
noResults: 'No countries found',
|
|
22
|
+
countrySelector: 'Select country',
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
let {
|
|
26
|
+
country = $bindable(COUNTRIES.find((c) => c.code === 'US')!),
|
|
27
|
+
disabled = false,
|
|
28
|
+
size = "md",
|
|
29
|
+
labels: userLabels = {},
|
|
30
|
+
}: Props = $props();
|
|
31
|
+
|
|
32
|
+
let labels = $derived({ ...defaultLabels, ...userLabels });
|
|
33
|
+
|
|
34
|
+
let isOpen = $state(false);
|
|
35
|
+
let searchQuery = $state('');
|
|
36
|
+
let triggerElement = $state<HTMLButtonElement | null>(null);
|
|
37
|
+
let dropdownElement = $state<HTMLDivElement | null>(null);
|
|
38
|
+
let searchInputElement = $state<HTMLInputElement | null>(null);
|
|
39
|
+
let focusedIndex = $state(-1);
|
|
40
|
+
let dropdownPosition = $state({ top: 0, left: 0, width: 0 });
|
|
41
|
+
|
|
42
|
+
const instanceId = Math.random().toString(36).substring(2, 9);
|
|
43
|
+
|
|
44
|
+
let filteredCountries = $derived.by(() => {
|
|
45
|
+
if (!searchQuery) return COUNTRIES;
|
|
46
|
+
const q = searchQuery.toLowerCase();
|
|
47
|
+
return COUNTRIES.filter(
|
|
48
|
+
(c) =>
|
|
49
|
+
c.name.toLowerCase().includes(q) ||
|
|
50
|
+
c.dialCode.includes(q) ||
|
|
51
|
+
c.code.toLowerCase().includes(q)
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const sizeMap = {
|
|
56
|
+
sm: 'h-9 px-2 text-sm gap-1',
|
|
57
|
+
md: 'h-10 px-2.5 text-sm gap-1.5',
|
|
58
|
+
lg: 'h-12 px-3 text-base gap-2',
|
|
59
|
+
} as const;
|
|
60
|
+
|
|
61
|
+
let sizeClass = $derived(sizeMap[size] || sizeMap.md);
|
|
62
|
+
|
|
63
|
+
function updateDropdownPosition() {
|
|
64
|
+
if (!triggerElement) return;
|
|
65
|
+
const rect = triggerElement.getBoundingClientRect();
|
|
66
|
+
dropdownPosition = {
|
|
67
|
+
top: rect.bottom + 4,
|
|
68
|
+
left: rect.left,
|
|
69
|
+
width: Math.max(280, rect.width),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async function toggle() {
|
|
74
|
+
if (disabled) return;
|
|
75
|
+
isOpen = !isOpen;
|
|
76
|
+
if (isOpen) {
|
|
77
|
+
searchQuery = '';
|
|
78
|
+
focusedIndex = -1;
|
|
79
|
+
window.dispatchEvent(new CustomEvent('select-opened', { detail: { instanceId } }));
|
|
80
|
+
await tick();
|
|
81
|
+
updateDropdownPosition();
|
|
82
|
+
searchInputElement?.focus();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function handleOtherSelectOpened(event: Event) {
|
|
87
|
+
const customEvent = event as CustomEvent<{ instanceId: string }>;
|
|
88
|
+
if (customEvent.detail.instanceId !== instanceId && isOpen) {
|
|
89
|
+
close();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function close() {
|
|
94
|
+
isOpen = false;
|
|
95
|
+
searchQuery = '';
|
|
96
|
+
focusedIndex = -1;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function selectCountry(c: Country) {
|
|
100
|
+
country = c;
|
|
101
|
+
close();
|
|
102
|
+
triggerElement?.focus();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function handleKeydown(event: KeyboardEvent) {
|
|
106
|
+
if (disabled) return;
|
|
107
|
+
|
|
108
|
+
switch (event.key) {
|
|
109
|
+
case "Enter":
|
|
110
|
+
event.preventDefault();
|
|
111
|
+
if (isOpen && focusedIndex >= 0 && focusedIndex < filteredCountries.length) {
|
|
112
|
+
selectCountry(filteredCountries[focusedIndex]);
|
|
113
|
+
} else if (!isOpen) {
|
|
114
|
+
toggle();
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
case "ArrowDown":
|
|
118
|
+
event.preventDefault();
|
|
119
|
+
if (!isOpen) {
|
|
120
|
+
toggle();
|
|
121
|
+
} else {
|
|
122
|
+
focusedIndex = Math.min(focusedIndex + 1, filteredCountries.length - 1);
|
|
123
|
+
scrollToFocused();
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
case "ArrowUp":
|
|
127
|
+
event.preventDefault();
|
|
128
|
+
if (isOpen) {
|
|
129
|
+
focusedIndex = Math.max(focusedIndex - 1, 0);
|
|
130
|
+
scrollToFocused();
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
case "Escape":
|
|
134
|
+
event.preventDefault();
|
|
135
|
+
close();
|
|
136
|
+
triggerElement?.focus();
|
|
137
|
+
break;
|
|
138
|
+
case "Tab":
|
|
139
|
+
close();
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function scrollToFocused() {
|
|
145
|
+
tick().then(() => {
|
|
146
|
+
const el = dropdownElement?.querySelector(`[data-index="${focusedIndex}"]`);
|
|
147
|
+
el?.scrollIntoView({ block: 'nearest' });
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function handleClickOutside(event: MouseEvent) {
|
|
152
|
+
if (!isOpen) return;
|
|
153
|
+
const target = event.target as Node;
|
|
154
|
+
const clickedOutsideTrigger = triggerElement && !triggerElement.contains(target);
|
|
155
|
+
const clickedOutsideDropdown = !dropdownElement || !dropdownElement.contains(target);
|
|
156
|
+
if (clickedOutsideTrigger && clickedOutsideDropdown) {
|
|
157
|
+
close();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
onMount(() => {
|
|
162
|
+
document.addEventListener("click", handleClickOutside, true);
|
|
163
|
+
window.addEventListener("select-opened", handleOtherSelectOpened);
|
|
164
|
+
window.addEventListener("scroll", updateDropdownPosition, true);
|
|
165
|
+
window.addEventListener("resize", updateDropdownPosition);
|
|
166
|
+
|
|
167
|
+
return () => {
|
|
168
|
+
document.removeEventListener("click", handleClickOutside, true);
|
|
169
|
+
window.removeEventListener("select-opened", handleOtherSelectOpened);
|
|
170
|
+
window.removeEventListener("scroll", updateDropdownPosition, true);
|
|
171
|
+
window.removeEventListener("resize", updateDropdownPosition);
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
</script>
|
|
175
|
+
|
|
176
|
+
<div class="relative shrink-0">
|
|
177
|
+
<button
|
|
178
|
+
type="button"
|
|
179
|
+
bind:this={triggerElement}
|
|
180
|
+
class="flex items-center {sizeClass} bg-bg-secondary border border-r-0 rounded-l-lg cursor-pointer transition-colors text-left focus:outline-hidden focus:ring-4 focus:ring-focus-ring border-stroke-primary hover:border-interactive-border {disabled ? 'opacity-50 cursor-not-allowed' : ''}"
|
|
181
|
+
{disabled}
|
|
182
|
+
aria-haspopup="listbox"
|
|
183
|
+
aria-expanded={isOpen}
|
|
184
|
+
aria-label={labels.countrySelector}
|
|
185
|
+
onclick={toggle}
|
|
186
|
+
onkeydown={handleKeydown}
|
|
187
|
+
>
|
|
188
|
+
<span class="text-lg leading-none">{country.flag}</span>
|
|
189
|
+
<span class={`${typography.sm} whitespace-nowrap`}>{country.dialCode}</span>
|
|
190
|
+
<ChevronDownOutline class="w-3 h-3 shrink-0 {typography.iconMuted} transition-transform duration-200 {isOpen ? 'rotate-180' : ''}" />
|
|
191
|
+
</button>
|
|
192
|
+
|
|
193
|
+
{#if isOpen}
|
|
194
|
+
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
195
|
+
<div
|
|
196
|
+
bind:this={dropdownElement}
|
|
197
|
+
class="fixed z-[100] bg-card border border-stroke-primary rounded-lg shadow-lg overflow-hidden"
|
|
198
|
+
style="top: {dropdownPosition.top}px; left: {dropdownPosition.left}px; width: {dropdownPosition.width}px;"
|
|
199
|
+
role="listbox"
|
|
200
|
+
tabindex="-1"
|
|
201
|
+
aria-label={labels.countrySelector}
|
|
202
|
+
transition:bloom={{ origin: "top left" }}
|
|
203
|
+
>
|
|
204
|
+
<!-- Search -->
|
|
205
|
+
<div class="p-2 border-b border-border">
|
|
206
|
+
<input
|
|
207
|
+
bind:this={searchInputElement}
|
|
208
|
+
type="text"
|
|
209
|
+
class="w-full px-3 py-2 text-sm bg-bg-secondary border border-stroke-primary rounded-lg text-text-primary focus:outline-hidden focus:ring-2 focus:ring-focus-ring placeholder-muted-foreground"
|
|
210
|
+
placeholder={labels.searchPlaceholder}
|
|
211
|
+
bind:value={searchQuery}
|
|
212
|
+
onkeydown={handleKeydown}
|
|
213
|
+
/>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
<!-- List -->
|
|
217
|
+
<div class="max-h-60 overflow-y-auto py-1">
|
|
218
|
+
{#each filteredCountries as c, idx}
|
|
219
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
220
|
+
<li
|
|
221
|
+
class={`flex items-center gap-3 px-3 py-2 cursor-pointer ${typography.sm} transition-colors ${c.code === country.code ? '' : typography.textMuted} ${idx === focusedIndex ? 'bg-muted' : 'hover:bg-muted'}`}
|
|
222
|
+
role="option"
|
|
223
|
+
aria-selected={c.code === country.code}
|
|
224
|
+
data-index={idx}
|
|
225
|
+
onclick={() => selectCountry(c)}
|
|
226
|
+
onmouseenter={() => (focusedIndex = idx)}
|
|
227
|
+
>
|
|
228
|
+
<span class="text-lg leading-none">{c.flag}</span>
|
|
229
|
+
<span class="flex-1">{c.name}</span>
|
|
230
|
+
<span class={typography.textMuted}>{c.dialCode}</span>
|
|
231
|
+
</li>
|
|
232
|
+
{:else}
|
|
233
|
+
<div class={`px-3 py-4 text-center ${typography.textMuted}`}>
|
|
234
|
+
{labels.noResults}
|
|
235
|
+
</div>
|
|
236
|
+
{/each}
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
{/if}
|
|
240
|
+
</div>
|
|
@@ -127,98 +127,98 @@ describe("AlertModal Component Tests", () => {
|
|
|
127
127
|
test("Renders success variant with correct icon", () => {
|
|
128
128
|
setupTest({ variant: "success" });
|
|
129
129
|
// CheckOutline icon should be present
|
|
130
|
-
const iconContainer = document.querySelector(".bg-
|
|
130
|
+
const iconContainer = document.querySelector(".bg-status-success-bg");
|
|
131
131
|
expect(iconContainer).toBeInTheDocument();
|
|
132
|
-
const icon = iconContainer?.querySelector(".text-
|
|
132
|
+
const icon = iconContainer?.querySelector(".text-accent-success");
|
|
133
133
|
expect(icon).toBeInTheDocument();
|
|
134
134
|
});
|
|
135
135
|
|
|
136
136
|
test("Success variant has green styling", () => {
|
|
137
137
|
setupTest({ variant: "success" });
|
|
138
|
-
const iconContainer = document.querySelector(".bg-
|
|
139
|
-
expect(iconContainer).toHaveClass("bg-
|
|
138
|
+
const iconContainer = document.querySelector(".bg-status-success-bg");
|
|
139
|
+
expect(iconContainer).toHaveClass("bg-status-success-bg");
|
|
140
140
|
});
|
|
141
141
|
|
|
142
142
|
test("Success variant button uses default variant", () => {
|
|
143
143
|
setupTest({ variant: "success" });
|
|
144
144
|
const button = screen.getAllByText("OK")[0].closest("button");
|
|
145
145
|
// Default variant has primary/blue styling
|
|
146
|
-
expect(button).toHaveClass("bg-
|
|
146
|
+
expect(button).toHaveClass("bg-brand-primary");
|
|
147
147
|
});
|
|
148
148
|
|
|
149
149
|
// Variant tests - Error
|
|
150
150
|
test("Renders error variant with correct icon", () => {
|
|
151
151
|
setupTest({ variant: "error" });
|
|
152
152
|
// CloseOutline icon should be present
|
|
153
|
-
const iconContainer = document.querySelector(".bg-
|
|
153
|
+
const iconContainer = document.querySelector(".bg-status-error-bg");
|
|
154
154
|
expect(iconContainer).toBeInTheDocument();
|
|
155
|
-
const icon = iconContainer?.querySelector(".text-
|
|
155
|
+
const icon = iconContainer?.querySelector(".text-accent-danger");
|
|
156
156
|
expect(icon).toBeInTheDocument();
|
|
157
157
|
});
|
|
158
158
|
|
|
159
159
|
test("Error variant has red styling", () => {
|
|
160
160
|
setupTest({ variant: "error" });
|
|
161
|
-
const iconContainer = document.querySelector(".bg-
|
|
162
|
-
expect(iconContainer).toHaveClass("bg-
|
|
161
|
+
const iconContainer = document.querySelector(".bg-status-error-bg");
|
|
162
|
+
expect(iconContainer).toHaveClass("bg-status-error-bg");
|
|
163
163
|
});
|
|
164
164
|
|
|
165
165
|
test("Error variant button uses red variant", () => {
|
|
166
166
|
setupTest({ variant: "error" });
|
|
167
167
|
const button = screen.getAllByText("OK")[0].closest("button");
|
|
168
168
|
// Red variant has red styling
|
|
169
|
-
expect(button).toHaveClass("bg-
|
|
169
|
+
expect(button).toHaveClass("bg-accent-danger");
|
|
170
170
|
});
|
|
171
171
|
|
|
172
172
|
// Variant tests - Warning
|
|
173
173
|
test("Renders warning variant with correct icon", () => {
|
|
174
174
|
setupTest({ variant: "warning" });
|
|
175
175
|
// ExclamationTriangleOutline icon should be present
|
|
176
|
-
const iconContainer = document.querySelector(".bg-
|
|
176
|
+
const iconContainer = document.querySelector(".bg-status-warning-bg");
|
|
177
177
|
expect(iconContainer).toBeInTheDocument();
|
|
178
|
-
const icon = iconContainer?.querySelector(".text-
|
|
178
|
+
const icon = iconContainer?.querySelector(".text-accent-warning");
|
|
179
179
|
expect(icon).toBeInTheDocument();
|
|
180
180
|
});
|
|
181
181
|
|
|
182
182
|
test("Warning variant has amber styling", () => {
|
|
183
183
|
setupTest({ variant: "warning" });
|
|
184
|
-
const iconContainer = document.querySelector(".bg-
|
|
185
|
-
expect(iconContainer).toHaveClass("bg-
|
|
184
|
+
const iconContainer = document.querySelector(".bg-status-warning-bg");
|
|
185
|
+
expect(iconContainer).toHaveClass("bg-status-warning-bg");
|
|
186
186
|
});
|
|
187
187
|
|
|
188
188
|
test("Warning variant button uses default variant", () => {
|
|
189
189
|
setupTest({ variant: "warning" });
|
|
190
190
|
const button = screen.getAllByText("OK")[0].closest("button");
|
|
191
191
|
// Default variant has primary/blue styling
|
|
192
|
-
expect(button).toHaveClass("bg-
|
|
192
|
+
expect(button).toHaveClass("bg-brand-primary");
|
|
193
193
|
});
|
|
194
194
|
|
|
195
195
|
// Variant tests - Info
|
|
196
196
|
test("Renders info variant with correct icon", () => {
|
|
197
197
|
setupTest({ variant: "info" });
|
|
198
198
|
// InfoCircleOutline icon should be present
|
|
199
|
-
const iconContainer = document.querySelector(".bg-
|
|
199
|
+
const iconContainer = document.querySelector(".bg-status-info-bg");
|
|
200
200
|
expect(iconContainer).toBeInTheDocument();
|
|
201
|
-
const icon = iconContainer?.querySelector(".text-
|
|
201
|
+
const icon = iconContainer?.querySelector(".text-brand-primary");
|
|
202
202
|
expect(icon).toBeInTheDocument();
|
|
203
203
|
});
|
|
204
204
|
|
|
205
205
|
test("Info variant has blue styling", () => {
|
|
206
206
|
setupTest({ variant: "info" });
|
|
207
|
-
const iconContainer = document.querySelector(".bg-
|
|
208
|
-
expect(iconContainer).toHaveClass("bg-
|
|
207
|
+
const iconContainer = document.querySelector(".bg-status-info-bg");
|
|
208
|
+
expect(iconContainer).toHaveClass("bg-status-info-bg");
|
|
209
209
|
});
|
|
210
210
|
|
|
211
211
|
test("Info variant button uses default variant", () => {
|
|
212
212
|
setupTest({ variant: "info" });
|
|
213
213
|
const button = screen.getAllByText("OK")[0].closest("button");
|
|
214
214
|
// Default variant has primary/blue styling
|
|
215
|
-
expect(button).toHaveClass("bg-
|
|
215
|
+
expect(button).toHaveClass("bg-brand-primary");
|
|
216
216
|
});
|
|
217
217
|
|
|
218
218
|
test("Defaults to info variant when invalid variant provided", () => {
|
|
219
219
|
setupTest({ variant: "invalid" });
|
|
220
220
|
// Should fall back to info variant
|
|
221
|
-
const iconContainer = document.querySelector(".bg-
|
|
221
|
+
const iconContainer = document.querySelector(".bg-status-info-bg");
|
|
222
222
|
expect(iconContainer).toBeInTheDocument();
|
|
223
223
|
});
|
|
224
224
|
|
|
@@ -337,29 +337,29 @@ describe("AlertModal Component Tests", () => {
|
|
|
337
337
|
expect(header).toBeInTheDocument();
|
|
338
338
|
});
|
|
339
339
|
|
|
340
|
-
//
|
|
341
|
-
test("Success variant
|
|
340
|
+
// Token-based styling tests
|
|
341
|
+
test("Success variant uses token-based classes", () => {
|
|
342
342
|
setupTest({ variant: "success" });
|
|
343
|
-
const iconContainer = document.querySelector(".bg-
|
|
344
|
-
expect(iconContainer).
|
|
343
|
+
const iconContainer = document.querySelector(".bg-status-success-bg");
|
|
344
|
+
expect(iconContainer).toBeInTheDocument();
|
|
345
345
|
});
|
|
346
346
|
|
|
347
|
-
test("Error variant
|
|
347
|
+
test("Error variant uses token-based classes", () => {
|
|
348
348
|
setupTest({ variant: "error" });
|
|
349
|
-
const iconContainer = document.querySelector(".bg-
|
|
350
|
-
expect(iconContainer).
|
|
349
|
+
const iconContainer = document.querySelector(".bg-status-error-bg");
|
|
350
|
+
expect(iconContainer).toBeInTheDocument();
|
|
351
351
|
});
|
|
352
352
|
|
|
353
|
-
test("Warning variant
|
|
353
|
+
test("Warning variant uses token-based classes", () => {
|
|
354
354
|
setupTest({ variant: "warning" });
|
|
355
|
-
const iconContainer = document.querySelector(".bg-
|
|
356
|
-
expect(iconContainer).
|
|
355
|
+
const iconContainer = document.querySelector(".bg-status-warning-bg");
|
|
356
|
+
expect(iconContainer).toBeInTheDocument();
|
|
357
357
|
});
|
|
358
358
|
|
|
359
|
-
test("Info variant
|
|
359
|
+
test("Info variant uses token-based classes", () => {
|
|
360
360
|
setupTest({ variant: "info" });
|
|
361
|
-
const iconContainer = document.querySelector(".bg-
|
|
362
|
-
expect(iconContainer).
|
|
361
|
+
const iconContainer = document.querySelector(".bg-status-info-bg");
|
|
362
|
+
expect(iconContainer).toBeInTheDocument();
|
|
363
363
|
});
|
|
364
364
|
|
|
365
365
|
// Integration tests
|
|
@@ -384,7 +384,7 @@ describe("AlertModal Component Tests", () => {
|
|
|
384
384
|
expect(screen.getAllByText("Great").length).toBeGreaterThan(0);
|
|
385
385
|
|
|
386
386
|
// Verify success styling
|
|
387
|
-
expect(document.querySelector(".bg-
|
|
387
|
+
expect(document.querySelector(".bg-status-success-bg")).toBeInTheDocument();
|
|
388
388
|
|
|
389
389
|
// Click button
|
|
390
390
|
const button = screen.getAllByText("Great")[0];
|
|
@@ -416,7 +416,7 @@ describe("AlertModal Component Tests", () => {
|
|
|
416
416
|
).toBeGreaterThan(0);
|
|
417
417
|
|
|
418
418
|
// Verify error styling
|
|
419
|
-
expect(document.querySelector(".bg-
|
|
419
|
+
expect(document.querySelector(".bg-status-error-bg")).toBeInTheDocument();
|
|
420
420
|
|
|
421
421
|
// Advance time to trigger auto-close
|
|
422
422
|
await vi.advanceTimersByTimeAsync(2000);
|