@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,130 +1,130 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* PasswordInput - Password field with show/hide toggle and strength indicator
|
|
4
|
-
*
|
|
5
|
-
* Combines Input (password type) with PasswordStrengthIndicator for
|
|
6
|
-
* a complete password entry experience.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* <PasswordInput
|
|
10
|
-
* label="New Password"
|
|
11
|
-
* bind:value={password}
|
|
12
|
-
* showStrength
|
|
13
|
-
* error={$errors.password}
|
|
14
|
-
* required
|
|
15
|
-
* />
|
|
16
|
-
*/
|
|
17
|
-
import Input from '../../primitives/Input/Input.svelte';
|
|
18
|
-
import PasswordStrengthIndicator from './PasswordStrengthIndicator/PasswordStrengthIndicator.svelte';
|
|
19
|
-
|
|
20
|
-
const defaultLabels = {
|
|
21
|
-
passwordStrength: 'Password strength:',
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
interface Props {
|
|
25
|
-
/** Password value */
|
|
26
|
-
value?: string;
|
|
27
|
-
/** Label text */
|
|
28
|
-
label?: string;
|
|
29
|
-
/** Placeholder text */
|
|
30
|
-
placeholder?: string;
|
|
31
|
-
/** Input name attribute */
|
|
32
|
-
name?: string;
|
|
33
|
-
/** Input id attribute */
|
|
34
|
-
id?: string;
|
|
35
|
-
/** Whether the field is required */
|
|
36
|
-
required?: boolean;
|
|
37
|
-
/** Whether the field is disabled */
|
|
38
|
-
disabled?: boolean;
|
|
39
|
-
/** Error message to display */
|
|
40
|
-
error?: string;
|
|
41
|
-
/** Hint text shown below input */
|
|
42
|
-
hint?: string;
|
|
43
|
-
/** Show password strength indicator */
|
|
44
|
-
showStrength?: boolean;
|
|
45
|
-
/** Size variant */
|
|
46
|
-
size?: 'sm' | 'md' | 'lg';
|
|
47
|
-
/** Minimum password length */
|
|
48
|
-
minlength?: number | null;
|
|
49
|
-
/** Maximum password length */
|
|
50
|
-
maxlength?: number | null;
|
|
51
|
-
/** Autocomplete attribute */
|
|
52
|
-
autocomplete?: string;
|
|
53
|
-
/** Whether to show the password toggle button */
|
|
54
|
-
showPasswordToggle?: boolean;
|
|
55
|
-
/** Additional class for the wrapper div */
|
|
56
|
-
class?: string;
|
|
57
|
-
// Optional callbacks (matching Input component signatures)
|
|
58
|
-
oninput?: (value: string) => void;
|
|
59
|
-
onblur?: () => void;
|
|
60
|
-
onfocus?: () => void;
|
|
61
|
-
/** Override user-visible strings */
|
|
62
|
-
labels?: Partial<typeof defaultLabels>;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
let {
|
|
66
|
-
value = $bindable(''),
|
|
67
|
-
label = '',
|
|
68
|
-
placeholder = '',
|
|
69
|
-
name = '',
|
|
70
|
-
id = '',
|
|
71
|
-
required = false,
|
|
72
|
-
disabled = false,
|
|
73
|
-
error = '',
|
|
74
|
-
hint = '',
|
|
75
|
-
showStrength = false,
|
|
76
|
-
size = 'md',
|
|
77
|
-
minlength = null,
|
|
78
|
-
maxlength = null,
|
|
79
|
-
autocomplete = 'new-password',
|
|
80
|
-
showPasswordToggle = true,
|
|
81
|
-
class: className = '',
|
|
82
|
-
oninput,
|
|
83
|
-
onblur,
|
|
84
|
-
onfocus,
|
|
85
|
-
labels: userLabels = {},
|
|
86
|
-
}: Props = $props();
|
|
87
|
-
|
|
88
|
-
let labels = $derived({ ...defaultLabels, ...userLabels });
|
|
89
|
-
|
|
90
|
-
// Password strength tracking
|
|
91
|
-
let strengthScore = $state(-1);
|
|
92
|
-
let strengthText = $state('');
|
|
93
|
-
let strengthColor = $state('');
|
|
94
|
-
</script>
|
|
95
|
-
|
|
96
|
-
<div class={className}>
|
|
97
|
-
<Input
|
|
98
|
-
type="password"
|
|
99
|
-
{id}
|
|
100
|
-
{name}
|
|
101
|
-
{placeholder}
|
|
102
|
-
{label}
|
|
103
|
-
{required}
|
|
104
|
-
{disabled}
|
|
105
|
-
{size}
|
|
106
|
-
{minlength}
|
|
107
|
-
{maxlength}
|
|
108
|
-
{autocomplete}
|
|
109
|
-
{showPasswordToggle}
|
|
110
|
-
errorText={error}
|
|
111
|
-
hintText={hint}
|
|
112
|
-
bind:value
|
|
113
|
-
oninputchange={oninput}
|
|
114
|
-
{onblur}
|
|
115
|
-
{onfocus}
|
|
116
|
-
/>
|
|
117
|
-
|
|
118
|
-
{#if showStrength && value}
|
|
119
|
-
<PasswordStrengthIndicator
|
|
120
|
-
password={value}
|
|
121
|
-
bind:score={strengthScore}
|
|
122
|
-
bind:strengthText
|
|
123
|
-
bind:textColor={strengthColor}
|
|
124
|
-
>
|
|
125
|
-
<p class="text-xs {strengthColor}">
|
|
126
|
-
{labels.passwordStrength} {strengthText}
|
|
127
|
-
</p>
|
|
128
|
-
</PasswordStrengthIndicator>
|
|
129
|
-
{/if}
|
|
130
|
-
</div>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* PasswordInput - Password field with show/hide toggle and strength indicator
|
|
4
|
+
*
|
|
5
|
+
* Combines Input (password type) with PasswordStrengthIndicator for
|
|
6
|
+
* a complete password entry experience.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* <PasswordInput
|
|
10
|
+
* label="New Password"
|
|
11
|
+
* bind:value={password}
|
|
12
|
+
* showStrength
|
|
13
|
+
* error={$errors.password}
|
|
14
|
+
* required
|
|
15
|
+
* />
|
|
16
|
+
*/
|
|
17
|
+
import Input from '../../primitives/Input/Input.svelte';
|
|
18
|
+
import PasswordStrengthIndicator from './PasswordStrengthIndicator/PasswordStrengthIndicator.svelte';
|
|
19
|
+
|
|
20
|
+
const defaultLabels = {
|
|
21
|
+
passwordStrength: 'Password strength:',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
interface Props {
|
|
25
|
+
/** Password value */
|
|
26
|
+
value?: string;
|
|
27
|
+
/** Label text */
|
|
28
|
+
label?: string;
|
|
29
|
+
/** Placeholder text */
|
|
30
|
+
placeholder?: string;
|
|
31
|
+
/** Input name attribute */
|
|
32
|
+
name?: string;
|
|
33
|
+
/** Input id attribute */
|
|
34
|
+
id?: string;
|
|
35
|
+
/** Whether the field is required */
|
|
36
|
+
required?: boolean;
|
|
37
|
+
/** Whether the field is disabled */
|
|
38
|
+
disabled?: boolean;
|
|
39
|
+
/** Error message to display */
|
|
40
|
+
error?: string;
|
|
41
|
+
/** Hint text shown below input */
|
|
42
|
+
hint?: string;
|
|
43
|
+
/** Show password strength indicator */
|
|
44
|
+
showStrength?: boolean;
|
|
45
|
+
/** Size variant */
|
|
46
|
+
size?: 'sm' | 'md' | 'lg';
|
|
47
|
+
/** Minimum password length */
|
|
48
|
+
minlength?: number | null;
|
|
49
|
+
/** Maximum password length */
|
|
50
|
+
maxlength?: number | null;
|
|
51
|
+
/** Autocomplete attribute */
|
|
52
|
+
autocomplete?: string;
|
|
53
|
+
/** Whether to show the password toggle button */
|
|
54
|
+
showPasswordToggle?: boolean;
|
|
55
|
+
/** Additional class for the wrapper div */
|
|
56
|
+
class?: string;
|
|
57
|
+
// Optional callbacks (matching Input component signatures)
|
|
58
|
+
oninput?: (value: string) => void;
|
|
59
|
+
onblur?: () => void;
|
|
60
|
+
onfocus?: () => void;
|
|
61
|
+
/** Override user-visible strings */
|
|
62
|
+
labels?: Partial<typeof defaultLabels>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
let {
|
|
66
|
+
value = $bindable(''),
|
|
67
|
+
label = '',
|
|
68
|
+
placeholder = '',
|
|
69
|
+
name = '',
|
|
70
|
+
id = '',
|
|
71
|
+
required = false,
|
|
72
|
+
disabled = false,
|
|
73
|
+
error = '',
|
|
74
|
+
hint = '',
|
|
75
|
+
showStrength = false,
|
|
76
|
+
size = 'md',
|
|
77
|
+
minlength = null,
|
|
78
|
+
maxlength = null,
|
|
79
|
+
autocomplete = 'new-password',
|
|
80
|
+
showPasswordToggle = true,
|
|
81
|
+
class: className = '',
|
|
82
|
+
oninput,
|
|
83
|
+
onblur,
|
|
84
|
+
onfocus,
|
|
85
|
+
labels: userLabels = {},
|
|
86
|
+
}: Props = $props();
|
|
87
|
+
|
|
88
|
+
let labels = $derived({ ...defaultLabels, ...userLabels });
|
|
89
|
+
|
|
90
|
+
// Password strength tracking
|
|
91
|
+
let strengthScore = $state(-1);
|
|
92
|
+
let strengthText = $state('');
|
|
93
|
+
let strengthColor = $state('');
|
|
94
|
+
</script>
|
|
95
|
+
|
|
96
|
+
<div class={className}>
|
|
97
|
+
<Input
|
|
98
|
+
type="password"
|
|
99
|
+
{id}
|
|
100
|
+
{name}
|
|
101
|
+
{placeholder}
|
|
102
|
+
{label}
|
|
103
|
+
{required}
|
|
104
|
+
{disabled}
|
|
105
|
+
{size}
|
|
106
|
+
{minlength}
|
|
107
|
+
{maxlength}
|
|
108
|
+
{autocomplete}
|
|
109
|
+
{showPasswordToggle}
|
|
110
|
+
errorText={error}
|
|
111
|
+
hintText={hint}
|
|
112
|
+
bind:value
|
|
113
|
+
oninputchange={oninput}
|
|
114
|
+
{onblur}
|
|
115
|
+
{onfocus}
|
|
116
|
+
/>
|
|
117
|
+
|
|
118
|
+
{#if showStrength && value}
|
|
119
|
+
<PasswordStrengthIndicator
|
|
120
|
+
password={value}
|
|
121
|
+
bind:score={strengthScore}
|
|
122
|
+
bind:strengthText
|
|
123
|
+
bind:textColor={strengthColor}
|
|
124
|
+
>
|
|
125
|
+
<p class="text-xs {strengthColor}">
|
|
126
|
+
{labels.passwordStrength} {strengthText}
|
|
127
|
+
</p>
|
|
128
|
+
</PasswordStrengthIndicator>
|
|
129
|
+
{/if}
|
|
130
|
+
</div>
|
|
@@ -55,7 +55,7 @@ describe('PasswordStrengthIndicator Component - Strength Calculation', () => {
|
|
|
55
55
|
props: { password: 'VeryStrongPass123!' }
|
|
56
56
|
});
|
|
57
57
|
expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
|
|
58
|
-
const greenBars = container.querySelectorAll('.bg-
|
|
58
|
+
const greenBars = container.querySelectorAll('.bg-accent-success');
|
|
59
59
|
expect(greenBars.length).toBeGreaterThan(0);
|
|
60
60
|
});
|
|
61
61
|
|
|
@@ -72,7 +72,7 @@ describe('PasswordStrengthIndicator Component - Visual Indicators', () => {
|
|
|
72
72
|
const { container } = render(TestWrapper, {
|
|
73
73
|
props: { password: 'ab' }
|
|
74
74
|
});
|
|
75
|
-
const filledBars = container.querySelectorAll('.bg-
|
|
75
|
+
const filledBars = container.querySelectorAll('.bg-accent-danger');
|
|
76
76
|
expect(filledBars.length).toBeGreaterThanOrEqual(1);
|
|
77
77
|
});
|
|
78
78
|
|
|
@@ -98,7 +98,7 @@ describe('PasswordStrengthIndicator Component - Visual Indicators', () => {
|
|
|
98
98
|
});
|
|
99
99
|
const indicator = container.querySelector('.pt-2.space-y-2');
|
|
100
100
|
expect(indicator).toBeInTheDocument();
|
|
101
|
-
const greenBars = container.querySelectorAll('.bg-
|
|
101
|
+
const greenBars = container.querySelectorAll('.bg-accent-success');
|
|
102
102
|
expect(greenBars.length).toBe(3);
|
|
103
103
|
});
|
|
104
104
|
|
|
@@ -106,7 +106,7 @@ describe('PasswordStrengthIndicator Component - Visual Indicators', () => {
|
|
|
106
106
|
const { container } = render(TestWrapper, {
|
|
107
107
|
props: { password: 'ab' }
|
|
108
108
|
});
|
|
109
|
-
const grayBars = container.querySelectorAll('.bg-
|
|
109
|
+
const grayBars = container.querySelectorAll('.bg-bg-tertiary');
|
|
110
110
|
expect(grayBars.length).toBeGreaterThan(0);
|
|
111
111
|
});
|
|
112
112
|
|
|
@@ -132,7 +132,7 @@ describe('PasswordStrengthIndicator Component - Color Coding', () => {
|
|
|
132
132
|
const { container } = render(TestWrapper, {
|
|
133
133
|
props: { password: 'ab' }
|
|
134
134
|
});
|
|
135
|
-
const redBars = container.querySelectorAll('.bg-
|
|
135
|
+
const redBars = container.querySelectorAll('.bg-accent-danger');
|
|
136
136
|
expect(redBars.length).toBeGreaterThan(0);
|
|
137
137
|
});
|
|
138
138
|
|
|
@@ -141,7 +141,7 @@ describe('PasswordStrengthIndicator Component - Color Coding', () => {
|
|
|
141
141
|
props: { password: 'test12' }
|
|
142
142
|
});
|
|
143
143
|
expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
|
|
144
|
-
const redBars = container.querySelectorAll('.bg-
|
|
144
|
+
const redBars = container.querySelectorAll('.bg-accent-danger');
|
|
145
145
|
expect(redBars.length).toBeGreaterThan(0);
|
|
146
146
|
});
|
|
147
147
|
|
|
@@ -150,7 +150,7 @@ describe('PasswordStrengthIndicator Component - Color Coding', () => {
|
|
|
150
150
|
props: { password: 'Test1234' }
|
|
151
151
|
});
|
|
152
152
|
expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
|
|
153
|
-
const greenBars = container.querySelectorAll('.bg-
|
|
153
|
+
const greenBars = container.querySelectorAll('.bg-accent-success');
|
|
154
154
|
expect(greenBars.length).toBeGreaterThan(0);
|
|
155
155
|
});
|
|
156
156
|
|
|
@@ -158,7 +158,7 @@ describe('PasswordStrengthIndicator Component - Color Coding', () => {
|
|
|
158
158
|
const { container } = render(TestWrapper, {
|
|
159
159
|
props: { password: 'VeryStrongPass123!' }
|
|
160
160
|
});
|
|
161
|
-
const greenBars = container.querySelectorAll('.bg-
|
|
161
|
+
const greenBars = container.querySelectorAll('.bg-accent-success');
|
|
162
162
|
expect(greenBars.length).toBeGreaterThan(0);
|
|
163
163
|
});
|
|
164
164
|
});
|
|
@@ -179,7 +179,7 @@ describe('PasswordStrengthIndicator Component - Edge Cases', () => {
|
|
|
179
179
|
props: { password: longPassword }
|
|
180
180
|
});
|
|
181
181
|
expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
|
|
182
|
-
const greenBars = container.querySelectorAll('.bg-
|
|
182
|
+
const greenBars = container.querySelectorAll('.bg-accent-success');
|
|
183
183
|
expect(greenBars.length).toBe(3);
|
|
184
184
|
});
|
|
185
185
|
|
|
@@ -195,7 +195,7 @@ describe('PasswordStrengthIndicator Component - Edge Cases', () => {
|
|
|
195
195
|
props: { password: 'TestPass12345' }
|
|
196
196
|
});
|
|
197
197
|
expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
|
|
198
|
-
const greenBars = container.querySelectorAll('.bg-
|
|
198
|
+
const greenBars = container.querySelectorAll('.bg-accent-success');
|
|
199
199
|
expect(greenBars.length).toBe(3);
|
|
200
200
|
});
|
|
201
201
|
|
|
@@ -214,12 +214,12 @@ describe('PasswordStrengthIndicator Component - Edge Cases', () => {
|
|
|
214
214
|
});
|
|
215
215
|
});
|
|
216
216
|
|
|
217
|
-
describe('PasswordStrengthIndicator Component -
|
|
218
|
-
test('unfilled bars have
|
|
217
|
+
describe('PasswordStrengthIndicator Component - Token-Based Styling', () => {
|
|
218
|
+
test('unfilled bars have token-based background class', () => {
|
|
219
219
|
const { container } = render(TestWrapper, {
|
|
220
220
|
props: { password: 'abc' }
|
|
221
221
|
});
|
|
222
|
-
const bars = container.querySelectorAll('.
|
|
222
|
+
const bars = container.querySelectorAll('.bg-bg-tertiary');
|
|
223
223
|
expect(bars.length).toBeGreaterThan(0);
|
|
224
224
|
});
|
|
225
225
|
});
|
|
@@ -232,7 +232,7 @@ describe('PasswordStrengthIndicator Component - Bar Filling', () => {
|
|
|
232
232
|
const allBars = container.querySelectorAll('.h-1.flex-1.rounded-full');
|
|
233
233
|
expect(allBars).toHaveLength(3);
|
|
234
234
|
|
|
235
|
-
const filledBars = container.querySelectorAll('.bg-
|
|
235
|
+
const filledBars = container.querySelectorAll('.bg-accent-danger, .bg-accent-success');
|
|
236
236
|
expect(filledBars.length).toBeGreaterThan(0);
|
|
237
237
|
});
|
|
238
238
|
|
|
@@ -1,142 +1,142 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
import { passwordStrength } from "check-password-strength";
|
|
4
|
-
import { safeSlide } from "../../../utils/transitions.js";
|
|
5
|
-
import { cubicOut } from "svelte/easing";
|
|
6
|
-
import { untrack } from "svelte";
|
|
7
|
-
|
|
8
|
-
const defaultLabels = {
|
|
9
|
-
tooWeak: 'Too weak',
|
|
10
|
-
weak: 'Weak',
|
|
11
|
-
good: 'Good',
|
|
12
|
-
strong: 'Strong',
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
interface Props {
|
|
16
|
-
password?: string;
|
|
17
|
-
strengthText?: string;
|
|
18
|
-
score?: number;
|
|
19
|
-
textColor?: string;
|
|
20
|
-
children?: Snippet;
|
|
21
|
-
labels?: Partial<typeof defaultLabels>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
let {
|
|
25
|
-
password = "",
|
|
26
|
-
strengthText = $bindable(""),
|
|
27
|
-
score = $bindable(-1),
|
|
28
|
-
textColor = $bindable(""),
|
|
29
|
-
children,
|
|
30
|
-
labels: userLabels = {},
|
|
31
|
-
}: Props = $props();
|
|
32
|
-
|
|
33
|
-
let labels = $derived({ ...defaultLabels, ...userLabels });
|
|
34
|
-
|
|
35
|
-
let debouncedPassword = $state("");
|
|
36
|
-
// Use a plain variable for timer to avoid reactive dependency
|
|
37
|
-
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
38
|
-
|
|
39
|
-
let customOptions = $derived([
|
|
40
|
-
{
|
|
41
|
-
id: 0,
|
|
42
|
-
value: labels.tooWeak,
|
|
43
|
-
minDiversity: 0,
|
|
44
|
-
minLength: 0,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
id: 1,
|
|
48
|
-
value: labels.weak,
|
|
49
|
-
minDiversity: 1,
|
|
50
|
-
minLength: 6,
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
id: 2,
|
|
54
|
-
value: labels.good,
|
|
55
|
-
minDiversity: 2,
|
|
56
|
-
minLength: 8,
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
id: 3,
|
|
60
|
-
value: labels.strong,
|
|
61
|
-
minDiversity: 3,
|
|
62
|
-
minLength: 10,
|
|
63
|
-
},
|
|
64
|
-
] as const);
|
|
65
|
-
|
|
66
|
-
// Debounce password updates - timer is not reactive to avoid dependency cycle
|
|
67
|
-
$effect(() => {
|
|
68
|
-
clearTimeout(timer);
|
|
69
|
-
if (password.length === 0) {
|
|
70
|
-
debouncedPassword = "";
|
|
71
|
-
} else {
|
|
72
|
-
timer = setTimeout(() => {
|
|
73
|
-
debouncedPassword = password;
|
|
74
|
-
}, 400); // 400ms delay as requested
|
|
75
|
-
}
|
|
76
|
-
return () => clearTimeout(timer);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
let strength = $derived(debouncedPassword
|
|
80
|
-
? passwordStrength(debouncedPassword, customOptions as any)
|
|
81
|
-
: null);
|
|
82
|
-
|
|
83
|
-
// Derive score based on password length and strength
|
|
84
|
-
let computedScore = $derived(debouncedPassword.length > 12 ? 3 : (strength?.id ?? -1));
|
|
85
|
-
|
|
86
|
-
// Sync computed values to bindable props using effects with untrack
|
|
87
|
-
$effect(() => {
|
|
88
|
-
const newScore = computedScore;
|
|
89
|
-
if (untrack(() => score) !== newScore) {
|
|
90
|
-
score = newScore;
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
// Derive text and color from computedScore (not from bindable score)
|
|
95
|
-
let computedStrengthText = $derived(
|
|
96
|
-
computedScore === 0 ? labels.tooWeak :
|
|
97
|
-
computedScore === 1 ? labels.weak :
|
|
98
|
-
computedScore === 2 ? labels.good :
|
|
99
|
-
computedScore === 3 ? labels.strong : ""
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
let computedTextColor = $derived(computedScore <= 1 ? "text-
|
|
103
|
-
|
|
104
|
-
$effect(() => {
|
|
105
|
-
const newText = computedStrengthText;
|
|
106
|
-
if (untrack(() => strengthText) !== newText) {
|
|
107
|
-
strengthText = newText;
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
let strengthColor = $derived(computedScore <= 1 ? "bg-
|
|
112
|
-
|
|
113
|
-
$effect(() => {
|
|
114
|
-
const newColor = computedTextColor;
|
|
115
|
-
if (untrack(() => textColor) !== newColor) {
|
|
116
|
-
textColor = newColor;
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
// Calculate how many bars to fill (1-3)
|
|
121
|
-
let filledBars = $derived(computedScore === 0 ? 1 : computedScore === 1 ? 2 : computedScore >= 2 ? 3 : 0);
|
|
122
|
-
</script>
|
|
123
|
-
|
|
124
|
-
{#if debouncedPassword.length > 0}
|
|
125
|
-
<div
|
|
126
|
-
transition:safeSlide={{ duration: 600, easing: cubicOut }}
|
|
127
|
-
class="pt-2 space-y-2"
|
|
128
|
-
>
|
|
129
|
-
<!-- 3 segment bars -->
|
|
130
|
-
<div class="flex gap-1.5">
|
|
131
|
-
{#each [0, 1, 2] as barIndex}
|
|
132
|
-
<div
|
|
133
|
-
class="h-1 flex-1 rounded-full transition-colors duration-300 {barIndex <
|
|
134
|
-
filledBars
|
|
135
|
-
? strengthColor
|
|
136
|
-
: 'bg-
|
|
137
|
-
></div>
|
|
138
|
-
{/each}
|
|
139
|
-
</div>
|
|
140
|
-
{@render children?.()}
|
|
141
|
-
</div>
|
|
142
|
-
{/if}
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import { passwordStrength } from "check-password-strength";
|
|
4
|
+
import { safeSlide } from "../../../utils/transitions.js";
|
|
5
|
+
import { cubicOut } from "svelte/easing";
|
|
6
|
+
import { untrack } from "svelte";
|
|
7
|
+
|
|
8
|
+
const defaultLabels = {
|
|
9
|
+
tooWeak: 'Too weak',
|
|
10
|
+
weak: 'Weak',
|
|
11
|
+
good: 'Good',
|
|
12
|
+
strong: 'Strong',
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
interface Props {
|
|
16
|
+
password?: string;
|
|
17
|
+
strengthText?: string;
|
|
18
|
+
score?: number;
|
|
19
|
+
textColor?: string;
|
|
20
|
+
children?: Snippet;
|
|
21
|
+
labels?: Partial<typeof defaultLabels>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let {
|
|
25
|
+
password = "",
|
|
26
|
+
strengthText = $bindable(""),
|
|
27
|
+
score = $bindable(-1),
|
|
28
|
+
textColor = $bindable(""),
|
|
29
|
+
children,
|
|
30
|
+
labels: userLabels = {},
|
|
31
|
+
}: Props = $props();
|
|
32
|
+
|
|
33
|
+
let labels = $derived({ ...defaultLabels, ...userLabels });
|
|
34
|
+
|
|
35
|
+
let debouncedPassword = $state("");
|
|
36
|
+
// Use a plain variable for timer to avoid reactive dependency
|
|
37
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
38
|
+
|
|
39
|
+
let customOptions = $derived([
|
|
40
|
+
{
|
|
41
|
+
id: 0,
|
|
42
|
+
value: labels.tooWeak,
|
|
43
|
+
minDiversity: 0,
|
|
44
|
+
minLength: 0,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 1,
|
|
48
|
+
value: labels.weak,
|
|
49
|
+
minDiversity: 1,
|
|
50
|
+
minLength: 6,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 2,
|
|
54
|
+
value: labels.good,
|
|
55
|
+
minDiversity: 2,
|
|
56
|
+
minLength: 8,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 3,
|
|
60
|
+
value: labels.strong,
|
|
61
|
+
minDiversity: 3,
|
|
62
|
+
minLength: 10,
|
|
63
|
+
},
|
|
64
|
+
] as const);
|
|
65
|
+
|
|
66
|
+
// Debounce password updates - timer is not reactive to avoid dependency cycle
|
|
67
|
+
$effect(() => {
|
|
68
|
+
clearTimeout(timer);
|
|
69
|
+
if (password.length === 0) {
|
|
70
|
+
debouncedPassword = "";
|
|
71
|
+
} else {
|
|
72
|
+
timer = setTimeout(() => {
|
|
73
|
+
debouncedPassword = password;
|
|
74
|
+
}, 400); // 400ms delay as requested
|
|
75
|
+
}
|
|
76
|
+
return () => clearTimeout(timer);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
let strength = $derived(debouncedPassword
|
|
80
|
+
? passwordStrength(debouncedPassword, customOptions as any)
|
|
81
|
+
: null);
|
|
82
|
+
|
|
83
|
+
// Derive score based on password length and strength
|
|
84
|
+
let computedScore = $derived(debouncedPassword.length > 12 ? 3 : (strength?.id ?? -1));
|
|
85
|
+
|
|
86
|
+
// Sync computed values to bindable props using effects with untrack
|
|
87
|
+
$effect(() => {
|
|
88
|
+
const newScore = computedScore;
|
|
89
|
+
if (untrack(() => score) !== newScore) {
|
|
90
|
+
score = newScore;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Derive text and color from computedScore (not from bindable score)
|
|
95
|
+
let computedStrengthText = $derived(
|
|
96
|
+
computedScore === 0 ? labels.tooWeak :
|
|
97
|
+
computedScore === 1 ? labels.weak :
|
|
98
|
+
computedScore === 2 ? labels.good :
|
|
99
|
+
computedScore === 3 ? labels.strong : ""
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
let computedTextColor = $derived(computedScore <= 1 ? "text-accent-danger" : "text-accent-success");
|
|
103
|
+
|
|
104
|
+
$effect(() => {
|
|
105
|
+
const newText = computedStrengthText;
|
|
106
|
+
if (untrack(() => strengthText) !== newText) {
|
|
107
|
+
strengthText = newText;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
let strengthColor = $derived(computedScore <= 1 ? "bg-accent-danger" : "bg-accent-success");
|
|
112
|
+
|
|
113
|
+
$effect(() => {
|
|
114
|
+
const newColor = computedTextColor;
|
|
115
|
+
if (untrack(() => textColor) !== newColor) {
|
|
116
|
+
textColor = newColor;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Calculate how many bars to fill (1-3)
|
|
121
|
+
let filledBars = $derived(computedScore === 0 ? 1 : computedScore === 1 ? 2 : computedScore >= 2 ? 3 : 0);
|
|
122
|
+
</script>
|
|
123
|
+
|
|
124
|
+
{#if debouncedPassword.length > 0}
|
|
125
|
+
<div
|
|
126
|
+
transition:safeSlide={{ duration: 600, easing: cubicOut }}
|
|
127
|
+
class="pt-2 space-y-2"
|
|
128
|
+
>
|
|
129
|
+
<!-- 3 segment bars -->
|
|
130
|
+
<div class="flex gap-1.5">
|
|
131
|
+
{#each [0, 1, 2] as barIndex}
|
|
132
|
+
<div
|
|
133
|
+
class="h-1 flex-1 rounded-full transition-colors duration-300 {barIndex <
|
|
134
|
+
filledBars
|
|
135
|
+
? strengthColor
|
|
136
|
+
: 'bg-bg-tertiary'}"
|
|
137
|
+
></div>
|
|
138
|
+
{/each}
|
|
139
|
+
</div>
|
|
140
|
+
{@render children?.()}
|
|
141
|
+
</div>
|
|
142
|
+
{/if}
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
// Compute score based on password length and strength
|
|
48
48
|
let score = $derived(password.length > 12 ? 3 : (strength?.id ?? -1));
|
|
49
49
|
|
|
50
|
-
let strengthColor = $derived(score <= 1 ? "bg-
|
|
50
|
+
let strengthColor = $derived(score <= 1 ? "bg-accent-danger" : "bg-accent-success");
|
|
51
51
|
|
|
52
52
|
// Calculate how many bars to fill (1-3)
|
|
53
53
|
let filledBars = $derived(score === 0 ? 1 : score === 1 ? 2 : score >= 2 ? 3 : 0);
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
class="h-1 flex-1 rounded-full transition-colors duration-300 {barIndex <
|
|
63
63
|
filledBars
|
|
64
64
|
? strengthColor
|
|
65
|
-
: 'bg-
|
|
65
|
+
: 'bg-bg-tertiary'}"
|
|
66
66
|
></div>
|
|
67
67
|
{/each}
|
|
68
68
|
</div>
|