@getmicdrop/svelte-components 5.17.4 → 5.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/calendar/AboutShow/AboutShow.svelte +191 -187
- package/dist/calendar/AboutShow/AboutShow.svelte.d.ts +2 -2
- package/dist/calendar/AboutShow/AboutShow.svelte.d.ts.map +1 -1
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte +801 -780
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts +4 -0
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
- package/dist/calendar/FAQs/FAQs.svelte +88 -77
- package/dist/calendar/FAQs/FAQs.svelte.d.ts +6 -4
- package/dist/calendar/FAQs/FAQs.svelte.d.ts.map +1 -1
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +140 -125
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte.d.ts +2 -0
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte.d.ts.map +1 -1
- package/dist/calendar/OrderSummary/OrderSummary.spec.js +3 -3
- package/dist/calendar/OrderSummary/OrderSummary.svelte +461 -457
- package/dist/calendar/OrderSummary/OrderSummary.svelte.d.ts +4 -2
- package/dist/calendar/OrderSummary/OrderSummary.svelte.d.ts.map +1 -1
- package/dist/calendar/PublicCard/PublicCard.svelte +164 -155
- package/dist/calendar/PublicCard/PublicCard.svelte.d.ts +4 -0
- package/dist/calendar/PublicCard/PublicCard.svelte.d.ts.map +1 -1
- package/dist/calendar/ShowCard/ShowCard.svelte +180 -166
- package/dist/calendar/ShowCard/ShowCard.svelte.d.ts +4 -0
- package/dist/calendar/ShowCard/ShowCard.svelte.d.ts.map +1 -1
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +80 -72
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte.d.ts +4 -0
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -1
- package/dist/calendar/index.js +15 -15
- package/dist/components/Heading.spec.js +89 -89
- package/dist/components/Heading.svelte +60 -60
- package/dist/components/Layout/AppShell.svelte +104 -104
- package/dist/components/Layout/ContentSection.svelte +80 -80
- package/dist/components/Layout/Grid.svelte +101 -101
- package/dist/components/Layout/Heading.svelte +81 -81
- package/dist/components/Layout/PageContainer.svelte +69 -69
- package/dist/components/Layout/Responsive.svelte +75 -75
- package/dist/components/Layout/Section.svelte +80 -80
- package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
- package/dist/components/Layout/ShowOnMobile.svelte +37 -37
- package/dist/components/Layout/Sidebar.svelte +108 -108
- package/dist/components/Layout/Stack.spec.js +1 -1
- package/dist/components/Layout/Stack.svelte +52 -52
- package/dist/components/Layout/Text.svelte +87 -87
- package/dist/components/Layout/TwoColumn.svelte +108 -108
- package/dist/components/Text.spec.js +89 -89
- package/dist/components/Text.svelte +53 -53
- package/dist/config.js +151 -151
- 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.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +66 -57
- 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 -95
- package/dist/patterns/chat/ChatBubble.svelte.d.ts +6 -4
- package/dist/patterns/chat/ChatBubble.svelte.d.ts.map +1 -1
- 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 -37
- package/dist/patterns/chat/ChatInvitationBubble.svelte.d.ts +6 -3
- package/dist/patterns/chat/ChatInvitationBubble.svelte.d.ts.map +1 -1
- package/dist/patterns/chat/ChatInvitationNotice.spec.js +32 -32
- package/dist/patterns/chat/ChatInvitationNotice.svelte +36 -27
- package/dist/patterns/chat/ChatInvitationNotice.svelte.d.ts +6 -3
- package/dist/patterns/chat/ChatInvitationNotice.svelte.d.ts.map +1 -1
- package/dist/patterns/chat/ChatMessageGroup.spec.js +58 -58
- package/dist/patterns/chat/ChatMessageGroup.svelte +57 -57
- package/dist/patterns/chat/ChatSlotUpdate.spec.js +65 -65
- package/dist/patterns/chat/ChatSlotUpdate.svelte +46 -46
- package/dist/patterns/chat/ChatStatusBadge.spec.js +79 -79
- package/dist/patterns/chat/ChatStatusBadge.svelte +91 -91
- package/dist/patterns/chat/ChatStatusTransition.spec.js +81 -81
- package/dist/patterns/chat/ChatStatusTransition.svelte +64 -64
- package/dist/patterns/chat/ChatTextBubble.spec.js +35 -35
- package/dist/patterns/chat/ChatTextBubble.svelte +41 -41
- package/dist/patterns/chat/index.js +22 -22
- package/dist/patterns/data/DataGrid.svelte +45 -45
- package/dist/patterns/data/DataList.svelte +24 -24
- package/dist/patterns/data/DataTable.svelte +45 -45
- package/dist/patterns/data/index.js +4 -4
- package/dist/patterns/forms/FormActions.spec.js +95 -95
- package/dist/patterns/forms/FormActions.stories.svelte +97 -97
- package/dist/patterns/forms/FormActions.svelte +46 -46
- package/dist/patterns/forms/FormGrid.svelte +33 -33
- package/dist/patterns/forms/FormSection.svelte +32 -32
- package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
- package/dist/patterns/forms/FormValidationSummary.svelte +82 -74
- package/dist/patterns/forms/FormValidationSummary.svelte.d.ts +5 -3
- package/dist/patterns/forms/FormValidationSummary.svelte.d.ts.map +1 -1
- 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/SidebarTestWrapper.svelte.d.ts +1 -1
- 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 -74
- package/dist/patterns/navigation/BottomNav.svelte.d.ts +10 -9
- package/dist/patterns/navigation/BottomNav.svelte.d.ts.map +1 -1
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +263 -251
- package/dist/patterns/navigation/Header.svelte.d.ts +17 -9
- 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.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 -53
- package/dist/patterns/page/PageLoader.svelte.d.ts +6 -3
- package/dist/patterns/page/PageLoader.svelte.d.ts.map +1 -1
- package/dist/patterns/page/SectionHeader.svelte +51 -51
- package/dist/patterns/page/index.js +5 -5
- package/dist/presets/badges.js +112 -112
- package/dist/presets/buttons.js +76 -76
- package/dist/presets/index.js +9 -9
- package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
- package/dist/primitives/Accordion/Accordion.svelte +62 -62
- package/dist/primitives/Accordion/AccordionItem.svelte +103 -95
- package/dist/primitives/Accordion/AccordionItem.svelte.d.ts +6 -4
- package/dist/primitives/Accordion/AccordionItem.svelte.d.ts.map +1 -1
- 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 -64
- package/dist/primitives/Alert/Alert.svelte.d.ts +6 -4
- package/dist/primitives/Alert/Alert.svelte.d.ts.map +1 -1
- package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
- package/dist/primitives/Avatar/Avatar.svelte +66 -66
- package/dist/primitives/AvatarButton/AvatarButton.svelte +57 -57
- package/dist/primitives/Badges/Badge.spec.js +144 -144
- package/dist/primitives/Badges/Badge.stories.svelte +86 -86
- package/dist/primitives/Badges/Badge.svelte +99 -99
- package/dist/primitives/BottomSheet/BottomSheet.spec.js +238 -238
- package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
- package/dist/primitives/BottomSheet/BottomSheet.svelte +115 -115
- package/dist/primitives/BottomSheet/BottomSheetWithActions.test.svelte +20 -20
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +123 -123
- package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +107 -99
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte.d.ts +13 -9
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
- package/dist/primitives/Button/Button.spec.js +225 -225
- package/dist/primitives/Button/Button.stories.svelte +76 -76
- package/dist/primitives/Button/Button.svelte +278 -278
- package/dist/primitives/Button/ButtonGroup.spec.js +44 -44
- package/dist/primitives/Button/ButtonGroup.svelte +50 -50
- package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
- package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
- package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
- package/dist/primitives/Card.spec.js +49 -49
- package/dist/primitives/Card.stories.svelte +22 -22
- package/dist/primitives/Card.svelte +28 -28
- package/dist/primitives/CardAction/CardAction.svelte +68 -68
- package/dist/primitives/Checkbox/Checkbox.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 -136
- package/dist/primitives/DarkModeToggle.svelte.d.ts +9 -3
- package/dist/primitives/DarkModeToggle.svelte.d.ts.map +1 -1
- package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
- package/dist/primitives/Drawer/Drawer.svelte +224 -224
- package/dist/primitives/Drawer/DrawerTestWrapper.svelte +86 -86
- package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
- package/dist/primitives/Dropdown/Dropdown.svelte +179 -170
- package/dist/primitives/Dropdown/Dropdown.svelte.d.ts +7 -4
- package/dist/primitives/Dropdown/Dropdown.svelte.d.ts.map +1 -1
- package/dist/primitives/Dropdown/DropdownDivider.spec.js +30 -30
- package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Dropdown/DropdownItemTestWrapper.svelte +43 -43
- package/dist/primitives/Helper/Helper.spec.js +57 -57
- package/dist/primitives/Helper/Helper.svelte +33 -33
- package/dist/primitives/Icons/ArrowLeft.svelte +21 -21
- package/dist/primitives/Icons/ArrowRight.svelte +21 -21
- package/dist/primitives/Icons/Availability.svelte +27 -27
- package/dist/primitives/Icons/Back.svelte +27 -27
- package/dist/primitives/Icons/CheckCircle.svelte +19 -19
- package/dist/primitives/Icons/CheckCircleOutline.svelte +28 -28
- package/dist/primitives/Icons/ChevronLeft.svelte +17 -17
- package/dist/primitives/Icons/ChevronRight.svelte +17 -17
- package/dist/primitives/Icons/Copy.svelte +28 -28
- package/dist/primitives/Icons/Cross.svelte +18 -18
- package/dist/primitives/Icons/DownArrow.svelte +21 -21
- package/dist/primitives/Icons/ErrorCircle.svelte +19 -19
- package/dist/primitives/Icons/FacebookIcon.svelte +15 -15
- package/dist/primitives/Icons/Home.svelte +28 -28
- package/dist/primitives/Icons/Icon.spec.js +175 -175
- package/dist/primitives/Icons/Icon.stories.svelte +100 -100
- package/dist/primitives/Icons/Icon.svelte +79 -79
- package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
- package/dist/primitives/Icons/ImageOutline.svelte +21 -21
- package/dist/primitives/Icons/Info.svelte +20 -20
- package/dist/primitives/Icons/InstagramIcon.svelte +21 -21
- package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
- package/dist/primitives/Icons/Message.svelte +28 -28
- package/dist/primitives/Icons/MoonIcon.svelte +18 -18
- package/dist/primitives/Icons/More.svelte +34 -34
- package/dist/primitives/Icons/MoreHori.spec.js +67 -67
- package/dist/primitives/Icons/MoreHori.svelte +35 -35
- package/dist/primitives/Icons/Notification.svelte +27 -27
- package/dist/primitives/Icons/Payment.svelte +27 -27
- package/dist/primitives/Icons/Profile.svelte +34 -34
- package/dist/primitives/Icons/Reload.svelte +42 -42
- package/dist/primitives/Icons/Shows.svelte +34 -34
- package/dist/primitives/Icons/Signout.svelte +34 -34
- package/dist/primitives/Icons/SunIcon.svelte +21 -21
- package/dist/primitives/Icons/TiktokIcon.svelte +15 -15
- package/dist/primitives/Icons/TrashBinOutline.svelte +21 -21
- package/dist/primitives/Icons/TwitterIcon.svelte +15 -15
- package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
- package/dist/primitives/Icons/WarningIcon.svelte +24 -24
- package/dist/primitives/Input/Input.spec.js +1237 -1237
- package/dist/primitives/Input/Input.stories.svelte +139 -139
- package/dist/primitives/Input/Input.svelte +444 -431
- package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
- package/dist/primitives/Input/Select.spec.js +632 -632
- package/dist/primitives/Input/Select.stories.svelte +112 -112
- package/dist/primitives/Input/Select.svelte +252 -252
- package/dist/primitives/Input/Textarea.stories.svelte +137 -137
- package/dist/primitives/Input/Textarea.svelte +105 -105
- package/dist/primitives/Label/Label.svelte +37 -37
- package/dist/primitives/LandingButton/LandingButton.spec.js +61 -61
- package/dist/primitives/LandingButton/LandingButton.svelte +92 -92
- package/dist/primitives/MenuItem/MenuItem.spec.js +130 -130
- package/dist/primitives/MenuItem/MenuItem.svelte +85 -85
- package/dist/primitives/Modal/Modal.spec.js +314 -314
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- package/dist/primitives/Modal/Modal.svelte +181 -181
- package/dist/primitives/NavItem/NavItem.spec.js +97 -97
- package/dist/primitives/NavItem/NavItem.svelte +75 -75
- package/dist/primitives/NumberInput/NumberInput.svelte +113 -105
- package/dist/primitives/NumberInput/NumberInput.svelte.d.ts.map +1 -1
- package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
- package/dist/primitives/Pagination/Pagination.svelte +275 -261
- package/dist/primitives/Pagination/Pagination.svelte.d.ts +14 -6
- package/dist/primitives/Pagination/Pagination.svelte.d.ts.map +1 -1
- package/dist/primitives/Radio/Radio.stories.svelte +80 -80
- package/dist/primitives/Radio/Radio.svelte +67 -67
- package/dist/primitives/SearchResultItem/SearchResultItem.spec.js +78 -78
- package/dist/primitives/SearchResultItem/SearchResultItem.svelte +109 -109
- package/dist/primitives/SidebarToggle/SidebarToggle.spec.js +61 -61
- package/dist/primitives/SidebarToggle/SidebarToggle.svelte +55 -55
- package/dist/primitives/Skeleton/CardPlaceholder.svelte +96 -87
- package/dist/primitives/Skeleton/CardPlaceholder.svelte.d.ts +8 -5
- package/dist/primitives/Skeleton/CardPlaceholder.svelte.d.ts.map +1 -1
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte +68 -59
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte.d.ts +8 -5
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte.d.ts.map +1 -1
- package/dist/primitives/Skeleton/ListPlaceholder.svelte +85 -76
- package/dist/primitives/Skeleton/ListPlaceholder.svelte.d.ts +8 -5
- package/dist/primitives/Skeleton/ListPlaceholder.svelte.d.ts.map +1 -1
- package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
- package/dist/primitives/Skeleton/Skeleton.svelte +55 -46
- package/dist/primitives/Skeleton/Skeleton.svelte.d.ts +7 -4
- package/dist/primitives/Skeleton/Skeleton.svelte.d.ts.map +1 -1
- package/dist/primitives/Spinner/Spinner.spec.js +84 -84
- package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
- package/dist/primitives/Spinner/Spinner.svelte +52 -44
- package/dist/primitives/Spinner/Spinner.svelte.d.ts +6 -4
- package/dist/primitives/Spinner/Spinner.svelte.d.ts.map +1 -1
- package/dist/primitives/Tabs/TabItem.svelte +52 -52
- package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
- package/dist/primitives/Tabs/Tabs.svelte +137 -137
- package/dist/primitives/Toggle.spec.js +221 -221
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Toggle.svelte +141 -141
- package/dist/primitives/ToggleTestWrapper.svelte +30 -30
- package/dist/primitives/Tooltip/Tooltip.spec.js +126 -126
- package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
- package/dist/primitives/Typography/Typography.svelte +53 -53
- package/dist/primitives/ValidationError.spec.js +103 -103
- package/dist/primitives/ValidationError.stories.svelte +112 -112
- package/dist/primitives/ValidationError.svelte +29 -29
- package/dist/primitives/index.js +113 -113
- package/dist/recipes/CropImage/CropImage.spec.js +208 -208
- package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
- package/dist/recipes/CropImage/CropImage.svelte +241 -241
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +994 -992
- package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts +1 -0
- package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts.map +1 -1
- package/dist/recipes/SuperLogin/SuperLogin.svelte +25 -23
- package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
- package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
- package/dist/recipes/feedback/EmptyState/EmptyState.svelte +75 -66
- package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts +7 -4
- package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -1
- package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
- package/dist/recipes/feedback/ErrorDisplay.stories.svelte +113 -113
- package/dist/recipes/feedback/ErrorDisplay.svelte +67 -67
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +176 -176
- package/dist/recipes/feedback/index.js +4 -4
- package/dist/recipes/fields/CheckboxField.svelte +85 -85
- package/dist/recipes/fields/FormField.svelte +58 -58
- package/dist/recipes/fields/RadioGroup.svelte +95 -95
- package/dist/recipes/fields/SelectField.svelte +82 -82
- package/dist/recipes/fields/TextareaField.svelte +101 -101
- package/dist/recipes/fields/ToggleField.svelte +60 -60
- package/dist/recipes/fields/index.js +7 -7
- package/dist/recipes/index.js +24 -24
- package/dist/recipes/inputs/MultiSelect.spec.js +263 -263
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/MultiSelect.svelte +291 -283
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/OTPInput.spec.js +251 -251
- package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
- package/dist/recipes/inputs/OTPInput.svelte +128 -117
- package/dist/recipes/inputs/OTPInput.svelte.d.ts +14 -12
- package/dist/recipes/inputs/OTPInput.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/PasswordInput.svelte +130 -121
- package/dist/recipes/inputs/PasswordInput.svelte.d.ts +7 -4
- package/dist/recipes/inputs/PasswordInput.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +142 -131
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts +8 -3
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/PhoneInput.svelte +254 -0
- package/dist/recipes/inputs/PhoneInput.svelte.d.ts +40 -0
- package/dist/recipes/inputs/PhoneInput.svelte.d.ts.map +1 -0
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +170 -170
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +349 -336
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts +21 -16
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/Search.svelte +110 -102
- package/dist/recipes/inputs/Search.svelte.d.ts +7 -5
- package/dist/recipes/inputs/Search.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/index.d.ts +1 -0
- package/dist/recipes/inputs/index.js +8 -7
- package/dist/recipes/inputs/phoneInput/CountrySelector.svelte +240 -0
- package/dist/recipes/inputs/phoneInput/CountrySelector.svelte.d.ts +15 -0
- package/dist/recipes/inputs/phoneInput/CountrySelector.svelte.d.ts.map +1 -0
- package/dist/recipes/inputs/phoneInput/countryData.d.ts +18 -0
- package/dist/recipes/inputs/phoneInput/countryData.d.ts.map +1 -0
- package/dist/recipes/inputs/phoneInput/countryData.js +211 -0
- package/dist/recipes/modals/AlertModal.svelte +139 -130
- package/dist/recipes/modals/AlertModal.svelte.d.ts +4 -2
- package/dist/recipes/modals/AlertModal.svelte.d.ts.map +1 -1
- 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 -162
- package/dist/recipes/modals/ConfirmationModal.svelte.d.ts +2 -0
- package/dist/recipes/modals/ConfirmationModal.svelte.d.ts.map +1 -1
- package/dist/recipes/modals/InputModal.svelte +194 -182
- package/dist/recipes/modals/InputModal.svelte.d.ts +6 -4
- package/dist/recipes/modals/InputModal.svelte.d.ts.map +1 -1
- package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
- package/dist/recipes/modals/ModalStateManager.svelte +77 -77
- package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
- package/dist/recipes/modals/StatusModal.svelte +216 -206
- package/dist/recipes/modals/StatusModal.svelte.d.ts +4 -2
- package/dist/recipes/modals/StatusModal.svelte.d.ts.map +1 -1
- package/dist/recipes/modals/index.js +7 -7
- package/dist/schemas/common.js +1 -1
- package/dist/schemas/event.d.ts +4 -4
- package/dist/schemas/event.js +1 -1
- package/dist/schemas/order.d.ts +2 -2
- package/dist/schemas/order.js +1 -0
- package/dist/schemas/performer.js +1 -1
- package/dist/schemas/promo.d.ts +4 -4
- package/dist/schemas/promo.js +2 -2
- package/dist/schemas/ticket.js +1 -1
- package/dist/schemas/user.js +2 -1
- package/dist/services/event.service.d.ts +11 -0
- package/dist/services/event.service.d.ts.map +1 -0
- package/dist/services/event.service.js +64 -0
- package/dist/services/event.service.spec.d.ts +2 -0
- package/dist/services/event.service.spec.d.ts.map +1 -0
- package/dist/services/event.service.spec.js +168 -0
- package/dist/services/{ShowService.d.ts → show.service.d.ts} +47 -47
- package/dist/services/show.service.d.ts.map +1 -0
- package/dist/services/show.service.js +115 -0
- package/dist/services/show.service.spec.d.ts +2 -0
- package/dist/services/show.service.spec.d.ts.map +1 -0
- package/dist/services/show.service.spec.js +242 -0
- package/dist/stores/auth.d.ts +8 -8
- package/dist/stores/auth.svelte.spec.js +1 -1
- package/dist/stores/index.js +9 -9
- package/dist/stores/toaster.d.ts +3 -3
- package/dist/stores/toaster.js +13 -13
- package/dist/stores/toaster.spec.js +59 -59
- package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
- package/dist/stories/ButtonAuditReview.svelte +427 -427
- package/dist/stories/PatternsGallery.stories.svelte +19 -19
- package/dist/stories/PatternsGallery.svelte +399 -399
- package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
- package/dist/stories/PrimitivesGallery.svelte +756 -756
- package/dist/stories/RecipesGallery.stories.svelte +19 -19
- package/dist/stories/RecipesGallery.svelte +454 -454
- package/dist/stories/button-audit-manifest.json +11186 -11186
- package/dist/tailwind/preset.cjs +82 -82
- package/dist/telemetry.js +402 -402
- package/dist/telemetry.server.js +212 -212
- package/dist/telemetry.server.spec.js +437 -437
- package/dist/telemetry.spec.js +1173 -1173
- package/dist/tokens/tokens.css +87 -87
- package/dist/tokens/typography-base.css +163 -163
- package/dist/tokens/utilities.css +353 -353
- package/dist/utils/__tests__/auth.test.js +431 -431
- package/dist/utils/apiConfig.d.ts +29 -29
- package/dist/utils/apiConfig.js +117 -117
- package/dist/utils/apiConfig.spec.js +219 -219
- package/dist/utils/assets.d.ts +3 -0
- package/dist/utils/assets.d.ts.map +1 -0
- package/dist/utils/assets.js +3 -0
- package/dist/utils/auth.d.ts +46 -46
- package/dist/utils/auth.js +195 -195
- package/dist/utils/classNames.d.ts +10 -0
- package/dist/utils/classNames.d.ts.map +1 -0
- package/dist/utils/classNames.js +15 -0
- package/dist/utils/cookieHelpers.d.ts +40 -0
- package/dist/utils/cookieHelpers.d.ts.map +1 -0
- package/dist/utils/cookieHelpers.js +102 -0
- package/dist/utils/dateHelpers.d.ts +71 -0
- package/dist/utils/dateHelpers.d.ts.map +1 -0
- package/dist/utils/dateHelpers.js +253 -0
- package/dist/utils/eventFormatters.d.ts +9 -0
- package/dist/utils/eventFormatters.d.ts.map +1 -0
- package/dist/utils/eventFormatters.js +96 -0
- package/dist/utils/fetchHelpers.d.ts +17 -0
- package/dist/utils/fetchHelpers.d.ts.map +1 -0
- package/dist/utils/fetchHelpers.js +44 -0
- package/dist/utils/formatters.d.ts +62 -0
- package/dist/utils/formatters.d.ts.map +1 -1
- package/dist/utils/formatters.js +128 -0
- package/dist/utils/formatters.spec.js +128 -1
- package/dist/utils/greetings.js +187 -187
- package/dist/utils/greetings.spec.js +337 -337
- package/dist/utils/haptic.spec.js +1 -1
- package/dist/utils/imageValidation.js +121 -121
- package/dist/utils/imageValidation.spec.js +223 -223
- package/dist/utils/permissions.d.ts +9 -0
- package/dist/utils/permissions.d.ts.map +1 -0
- package/dist/utils/permissions.js +93 -0
- package/dist/utils/phoneUtils.d.ts +35 -0
- package/dist/utils/phoneUtils.d.ts.map +1 -0
- package/dist/utils/phoneUtils.js +104 -0
- 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/stringHelpers.d.ts +17 -0
- package/dist/utils/stringHelpers.d.ts.map +1 -0
- package/dist/utils/stringHelpers.js +38 -0
- package/dist/utils/transitions.js +4 -4
- package/dist/utils/utils/utils.d.ts +2 -73
- package/dist/utils/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils/utils.js +3 -3
- package/dist/utils/utils/utils.spec.js +698 -698
- package/dist/utils/utils.d.ts +41 -98
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +59 -693
- package/dist/utils/utils.spec.js +643 -643
- package/package.json +301 -292
- package/dist/services/EventService.d.ts +0 -5
- package/dist/services/EventService.d.ts.map +0 -1
- package/dist/services/EventService.js +0 -79
- package/dist/services/EventService.spec.d.ts +0 -2
- package/dist/services/EventService.spec.d.ts.map +0 -1
- package/dist/services/EventService.spec.js +0 -217
- package/dist/services/ShowService.d.ts.map +0 -1
- package/dist/services/ShowService.js +0 -144
- package/dist/services/ShowService.spec.d.ts +0 -2
- package/dist/services/ShowService.spec.d.ts.map +0 -1
- package/dist/services/ShowService.spec.js +0 -345
package/dist/utils/auth.js
CHANGED
|
@@ -1,195 +1,195 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auth Utilities
|
|
3
|
-
*
|
|
4
|
-
* Centralized JWT token handling for Micdrop applications.
|
|
5
|
-
* Single source of truth for performer token extraction and decoding.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { jwtDecode } from 'jwt-decode';
|
|
9
|
-
import { getPerformerToken, getCookie, parseCookies } from './utils.js';
|
|
10
|
-
|
|
11
|
-
// Re-export base cookie utilities
|
|
12
|
-
export { getPerformerToken, getCookie, parseCookies };
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Get performer token from a cookie string (for server-side use).
|
|
16
|
-
* @param {string} [cookieString] - Cookie header string
|
|
17
|
-
* @returns {string|null} Token or null
|
|
18
|
-
*/
|
|
19
|
-
export function getTokenFromCookies(cookieString) {
|
|
20
|
-
if (!cookieString) return null;
|
|
21
|
-
|
|
22
|
-
const cookies = cookieString.split('; ').reduce((acc, cookie) => {
|
|
23
|
-
const [name, ...valueParts] = cookie.split('=');
|
|
24
|
-
if (name) {
|
|
25
|
-
acc[name] = valueParts.join('=');
|
|
26
|
-
}
|
|
27
|
-
return acc;
|
|
28
|
-
}, {});
|
|
29
|
-
|
|
30
|
-
return cookies['performer_token'] || null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Decode a performer JWT token.
|
|
35
|
-
* @param {string|null} [token] - JWT token string
|
|
36
|
-
* @returns {Object|null} Decoded payload or null
|
|
37
|
-
*/
|
|
38
|
-
export function decodePerformerToken(token) {
|
|
39
|
-
if (!token) return null;
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
return jwtDecode(token);
|
|
43
|
-
} catch (error) {
|
|
44
|
-
console.error('Failed to decode performer token:', error);
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Get decoded token payload from cookies.
|
|
51
|
-
* @param {string} [cookieString] - Cookie string (for server-side)
|
|
52
|
-
* @returns {Object|null} Decoded payload or null
|
|
53
|
-
*/
|
|
54
|
-
export function getDecodedToken(cookieString) {
|
|
55
|
-
const token = cookieString
|
|
56
|
-
? getTokenFromCookies(cookieString)
|
|
57
|
-
: getPerformerToken();
|
|
58
|
-
return decodePerformerToken(token);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Extract performer ID from token.
|
|
63
|
-
* @param {string|null} [tokenOrCookies] - JWT token or cookie string
|
|
64
|
-
* @returns {number|null} Performer ID or null
|
|
65
|
-
*/
|
|
66
|
-
export function getPerformerId(tokenOrCookies) {
|
|
67
|
-
const decoded = typeof tokenOrCookies === 'string' && tokenOrCookies.includes('=')
|
|
68
|
-
? getDecodedToken(tokenOrCookies)
|
|
69
|
-
: decodePerformerToken(tokenOrCookies ?? getPerformerToken());
|
|
70
|
-
|
|
71
|
-
if (!decoded) return null;
|
|
72
|
-
|
|
73
|
-
const id = decoded.id ?? decoded.userId ?? decoded.user_id;
|
|
74
|
-
return typeof id === 'number' ? id : null;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Extract performer email from token.
|
|
79
|
-
* @param {string|null} [tokenOrCookies] - JWT token or cookie string
|
|
80
|
-
* @returns {string} Email or empty string
|
|
81
|
-
*/
|
|
82
|
-
export function getPerformerEmail(tokenOrCookies) {
|
|
83
|
-
const decoded = typeof tokenOrCookies === 'string' && tokenOrCookies.includes('=')
|
|
84
|
-
? getDecodedToken(tokenOrCookies)
|
|
85
|
-
: decodePerformerToken(tokenOrCookies ?? getPerformerToken());
|
|
86
|
-
|
|
87
|
-
if (!decoded) return '';
|
|
88
|
-
|
|
89
|
-
const email = decoded.Email ?? decoded.email ?? '';
|
|
90
|
-
|
|
91
|
-
// Guard against literal "undefined" or "null" strings
|
|
92
|
-
if (email === 'undefined' || email === 'null') return '';
|
|
93
|
-
|
|
94
|
-
return email;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Extract performer full name from token.
|
|
99
|
-
* @param {string|null} [tokenOrCookies] - JWT token or cookie string
|
|
100
|
-
* @returns {string} Full name or empty string
|
|
101
|
-
*/
|
|
102
|
-
export function getPerformerName(tokenOrCookies) {
|
|
103
|
-
const decoded = typeof tokenOrCookies === 'string' && tokenOrCookies.includes('=')
|
|
104
|
-
? getDecodedToken(tokenOrCookies)
|
|
105
|
-
: decodePerformerToken(tokenOrCookies ?? getPerformerToken());
|
|
106
|
-
|
|
107
|
-
if (!decoded) return '';
|
|
108
|
-
|
|
109
|
-
const name = decoded.FullName ?? decoded.fullName ?? decoded.full_name ?? '';
|
|
110
|
-
|
|
111
|
-
// Guard against literal "undefined" or "null" strings
|
|
112
|
-
if (name === 'undefined' || name === 'null') return '';
|
|
113
|
-
|
|
114
|
-
return name;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Check if the current token is expired.
|
|
119
|
-
* @param {string|null} [tokenOrCookies] - JWT token or cookie string
|
|
120
|
-
* @returns {boolean} True if expired or no token
|
|
121
|
-
*/
|
|
122
|
-
export function isTokenExpired(tokenOrCookies) {
|
|
123
|
-
// If explicitly passed null/undefined, treat as expired (no token)
|
|
124
|
-
if (tokenOrCookies === null || tokenOrCookies === undefined) {
|
|
125
|
-
// Only fall back to browser cookie if called with no arguments
|
|
126
|
-
const token = arguments.length === 0 ? getPerformerToken() : null;
|
|
127
|
-
const decoded = decodePerformerToken(token);
|
|
128
|
-
if (!decoded?.exp) return true;
|
|
129
|
-
return decoded.exp * 1000 < Date.now();
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
const decoded = typeof tokenOrCookies === 'string' && tokenOrCookies.includes('=')
|
|
133
|
-
? getDecodedToken(tokenOrCookies)
|
|
134
|
-
: decodePerformerToken(tokenOrCookies);
|
|
135
|
-
|
|
136
|
-
if (!decoded?.exp) return true;
|
|
137
|
-
|
|
138
|
-
// exp is in seconds, Date.now() is in milliseconds
|
|
139
|
-
return decoded.exp * 1000 < Date.now();
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Get user details from the userDetails cookie.
|
|
144
|
-
* @param {string} [cookieString] - Cookie string (for server-side)
|
|
145
|
-
* @returns {Object|null} User details or null
|
|
146
|
-
*/
|
|
147
|
-
export function getUserDetailsFromCookie(cookieString) {
|
|
148
|
-
let userDetailsCookie;
|
|
149
|
-
|
|
150
|
-
if (cookieString) {
|
|
151
|
-
const cookies = cookieString.split('; ').reduce((acc, cookie) => {
|
|
152
|
-
const [name, ...valueParts] = cookie.split('=');
|
|
153
|
-
if (name) acc[name] = valueParts.join('=');
|
|
154
|
-
return acc;
|
|
155
|
-
}, {});
|
|
156
|
-
userDetailsCookie = cookies['userDetails'];
|
|
157
|
-
} else {
|
|
158
|
-
userDetailsCookie = getCookie('userDetails');
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
if (!userDetailsCookie) return null;
|
|
162
|
-
|
|
163
|
-
try {
|
|
164
|
-
return JSON.parse(decodeURIComponent(userDetailsCookie));
|
|
165
|
-
} catch (error) {
|
|
166
|
-
console.error('Failed to parse userDetails cookie:', error);
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Get performer name with fallback to userDetails cookie.
|
|
173
|
-
* @param {string} [cookieString] - Cookie string (for server-side)
|
|
174
|
-
* @returns {string} Name or empty string
|
|
175
|
-
*/
|
|
176
|
-
export function getPerformerNameWithFallback(cookieString) {
|
|
177
|
-
const name = getPerformerName(cookieString);
|
|
178
|
-
if (name) return name;
|
|
179
|
-
|
|
180
|
-
const userDetails = getUserDetailsFromCookie(cookieString);
|
|
181
|
-
return userDetails?.firstName ?? '';
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Get performer email with fallback to userDetails cookie.
|
|
186
|
-
* @param {string} [cookieString] - Cookie string (for server-side)
|
|
187
|
-
* @returns {string} Email or empty string
|
|
188
|
-
*/
|
|
189
|
-
export function getPerformerEmailWithFallback(cookieString) {
|
|
190
|
-
const email = getPerformerEmail(cookieString);
|
|
191
|
-
if (email) return email;
|
|
192
|
-
|
|
193
|
-
const userDetails = getUserDetailsFromCookie(cookieString);
|
|
194
|
-
return userDetails?.email ?? '';
|
|
195
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Auth Utilities
|
|
3
|
+
*
|
|
4
|
+
* Centralized JWT token handling for Micdrop applications.
|
|
5
|
+
* Single source of truth for performer token extraction and decoding.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { jwtDecode } from 'jwt-decode';
|
|
9
|
+
import { getPerformerToken, getCookie, parseCookies } from './utils.js';
|
|
10
|
+
|
|
11
|
+
// Re-export base cookie utilities
|
|
12
|
+
export { getPerformerToken, getCookie, parseCookies };
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Get performer token from a cookie string (for server-side use).
|
|
16
|
+
* @param {string} [cookieString] - Cookie header string
|
|
17
|
+
* @returns {string|null} Token or null
|
|
18
|
+
*/
|
|
19
|
+
export function getTokenFromCookies(cookieString) {
|
|
20
|
+
if (!cookieString) return null;
|
|
21
|
+
|
|
22
|
+
const cookies = cookieString.split('; ').reduce((acc, cookie) => {
|
|
23
|
+
const [name, ...valueParts] = cookie.split('=');
|
|
24
|
+
if (name) {
|
|
25
|
+
acc[name] = valueParts.join('=');
|
|
26
|
+
}
|
|
27
|
+
return acc;
|
|
28
|
+
}, {});
|
|
29
|
+
|
|
30
|
+
return cookies['performer_token'] || null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Decode a performer JWT token.
|
|
35
|
+
* @param {string|null} [token] - JWT token string
|
|
36
|
+
* @returns {Object|null} Decoded payload or null
|
|
37
|
+
*/
|
|
38
|
+
export function decodePerformerToken(token) {
|
|
39
|
+
if (!token) return null;
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
return jwtDecode(token);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error('Failed to decode performer token:', error);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get decoded token payload from cookies.
|
|
51
|
+
* @param {string} [cookieString] - Cookie string (for server-side)
|
|
52
|
+
* @returns {Object|null} Decoded payload or null
|
|
53
|
+
*/
|
|
54
|
+
export function getDecodedToken(cookieString) {
|
|
55
|
+
const token = cookieString
|
|
56
|
+
? getTokenFromCookies(cookieString)
|
|
57
|
+
: getPerformerToken();
|
|
58
|
+
return decodePerformerToken(token);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Extract performer ID from token.
|
|
63
|
+
* @param {string|null} [tokenOrCookies] - JWT token or cookie string
|
|
64
|
+
* @returns {number|null} Performer ID or null
|
|
65
|
+
*/
|
|
66
|
+
export function getPerformerId(tokenOrCookies) {
|
|
67
|
+
const decoded = typeof tokenOrCookies === 'string' && tokenOrCookies.includes('=')
|
|
68
|
+
? getDecodedToken(tokenOrCookies)
|
|
69
|
+
: decodePerformerToken(tokenOrCookies ?? getPerformerToken());
|
|
70
|
+
|
|
71
|
+
if (!decoded) return null;
|
|
72
|
+
|
|
73
|
+
const id = decoded.id ?? decoded.userId ?? decoded.user_id;
|
|
74
|
+
return typeof id === 'number' ? id : null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Extract performer email from token.
|
|
79
|
+
* @param {string|null} [tokenOrCookies] - JWT token or cookie string
|
|
80
|
+
* @returns {string} Email or empty string
|
|
81
|
+
*/
|
|
82
|
+
export function getPerformerEmail(tokenOrCookies) {
|
|
83
|
+
const decoded = typeof tokenOrCookies === 'string' && tokenOrCookies.includes('=')
|
|
84
|
+
? getDecodedToken(tokenOrCookies)
|
|
85
|
+
: decodePerformerToken(tokenOrCookies ?? getPerformerToken());
|
|
86
|
+
|
|
87
|
+
if (!decoded) return '';
|
|
88
|
+
|
|
89
|
+
const email = decoded.Email ?? decoded.email ?? '';
|
|
90
|
+
|
|
91
|
+
// Guard against literal "undefined" or "null" strings
|
|
92
|
+
if (email === 'undefined' || email === 'null') return '';
|
|
93
|
+
|
|
94
|
+
return email;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Extract performer full name from token.
|
|
99
|
+
* @param {string|null} [tokenOrCookies] - JWT token or cookie string
|
|
100
|
+
* @returns {string} Full name or empty string
|
|
101
|
+
*/
|
|
102
|
+
export function getPerformerName(tokenOrCookies) {
|
|
103
|
+
const decoded = typeof tokenOrCookies === 'string' && tokenOrCookies.includes('=')
|
|
104
|
+
? getDecodedToken(tokenOrCookies)
|
|
105
|
+
: decodePerformerToken(tokenOrCookies ?? getPerformerToken());
|
|
106
|
+
|
|
107
|
+
if (!decoded) return '';
|
|
108
|
+
|
|
109
|
+
const name = decoded.FullName ?? decoded.fullName ?? decoded.full_name ?? '';
|
|
110
|
+
|
|
111
|
+
// Guard against literal "undefined" or "null" strings
|
|
112
|
+
if (name === 'undefined' || name === 'null') return '';
|
|
113
|
+
|
|
114
|
+
return name;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Check if the current token is expired.
|
|
119
|
+
* @param {string|null} [tokenOrCookies] - JWT token or cookie string
|
|
120
|
+
* @returns {boolean} True if expired or no token
|
|
121
|
+
*/
|
|
122
|
+
export function isTokenExpired(tokenOrCookies) {
|
|
123
|
+
// If explicitly passed null/undefined, treat as expired (no token)
|
|
124
|
+
if (tokenOrCookies === null || tokenOrCookies === undefined) {
|
|
125
|
+
// Only fall back to browser cookie if called with no arguments
|
|
126
|
+
const token = arguments.length === 0 ? getPerformerToken() : null;
|
|
127
|
+
const decoded = decodePerformerToken(token);
|
|
128
|
+
if (!decoded?.exp) return true;
|
|
129
|
+
return decoded.exp * 1000 < Date.now();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const decoded = typeof tokenOrCookies === 'string' && tokenOrCookies.includes('=')
|
|
133
|
+
? getDecodedToken(tokenOrCookies)
|
|
134
|
+
: decodePerformerToken(tokenOrCookies);
|
|
135
|
+
|
|
136
|
+
if (!decoded?.exp) return true;
|
|
137
|
+
|
|
138
|
+
// exp is in seconds, Date.now() is in milliseconds
|
|
139
|
+
return decoded.exp * 1000 < Date.now();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Get user details from the userDetails cookie.
|
|
144
|
+
* @param {string} [cookieString] - Cookie string (for server-side)
|
|
145
|
+
* @returns {Object|null} User details or null
|
|
146
|
+
*/
|
|
147
|
+
export function getUserDetailsFromCookie(cookieString) {
|
|
148
|
+
let userDetailsCookie;
|
|
149
|
+
|
|
150
|
+
if (cookieString) {
|
|
151
|
+
const cookies = cookieString.split('; ').reduce((acc, cookie) => {
|
|
152
|
+
const [name, ...valueParts] = cookie.split('=');
|
|
153
|
+
if (name) acc[name] = valueParts.join('=');
|
|
154
|
+
return acc;
|
|
155
|
+
}, {});
|
|
156
|
+
userDetailsCookie = cookies['userDetails'];
|
|
157
|
+
} else {
|
|
158
|
+
userDetailsCookie = getCookie('userDetails');
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (!userDetailsCookie) return null;
|
|
162
|
+
|
|
163
|
+
try {
|
|
164
|
+
return JSON.parse(decodeURIComponent(userDetailsCookie));
|
|
165
|
+
} catch (error) {
|
|
166
|
+
console.error('Failed to parse userDetails cookie:', error);
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Get performer name with fallback to userDetails cookie.
|
|
173
|
+
* @param {string} [cookieString] - Cookie string (for server-side)
|
|
174
|
+
* @returns {string} Name or empty string
|
|
175
|
+
*/
|
|
176
|
+
export function getPerformerNameWithFallback(cookieString) {
|
|
177
|
+
const name = getPerformerName(cookieString);
|
|
178
|
+
if (name) return name;
|
|
179
|
+
|
|
180
|
+
const userDetails = getUserDetailsFromCookie(cookieString);
|
|
181
|
+
return userDetails?.firstName ?? '';
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Get performer email with fallback to userDetails cookie.
|
|
186
|
+
* @param {string} [cookieString] - Cookie string (for server-side)
|
|
187
|
+
* @returns {string} Email or empty string
|
|
188
|
+
*/
|
|
189
|
+
export function getPerformerEmailWithFallback(cookieString) {
|
|
190
|
+
const email = getPerformerEmail(cookieString);
|
|
191
|
+
if (email) return email;
|
|
192
|
+
|
|
193
|
+
const userDetails = getUserDetailsFromCookie(cookieString);
|
|
194
|
+
return userDetails?.email ?? '';
|
|
195
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Join class names, filtering out falsy values.
|
|
3
|
+
*/
|
|
4
|
+
export declare function classNames(...classes: unknown[]): string;
|
|
5
|
+
/**
|
|
6
|
+
* Merge Tailwind CSS classes with conflict resolution.
|
|
7
|
+
* Combines clsx (conditional classes) with tailwind-merge (conflict resolution).
|
|
8
|
+
*/
|
|
9
|
+
export declare function cn(...inputs: unknown[]): string;
|
|
10
|
+
//# sourceMappingURL=classNames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classNames.d.ts","sourceRoot":"","sources":["../../src/lib/utils/classNames.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAE/C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { twMerge } from "tailwind-merge";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
/**
|
|
4
|
+
* Join class names, filtering out falsy values.
|
|
5
|
+
*/
|
|
6
|
+
export function classNames(...classes) {
|
|
7
|
+
return classes.filter(Boolean).join(" ");
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Merge Tailwind CSS classes with conflict resolution.
|
|
11
|
+
* Combines clsx (conditional classes) with tailwind-merge (conflict resolution).
|
|
12
|
+
*/
|
|
13
|
+
export function cn(...inputs) {
|
|
14
|
+
return twMerge(clsx(inputs));
|
|
15
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse all cookies into an object.
|
|
3
|
+
*/
|
|
4
|
+
export declare function parseCookies(): Record<string, string>;
|
|
5
|
+
/**
|
|
6
|
+
* Get a specific cookie value by name.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getCookie(name: string): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Set a cookie with options.
|
|
11
|
+
*/
|
|
12
|
+
export declare function setCookie(name: string, value: string, options?: {
|
|
13
|
+
maxAge?: number;
|
|
14
|
+
path?: string;
|
|
15
|
+
}): void;
|
|
16
|
+
/**
|
|
17
|
+
* Get the performer token from cookies.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getPerformerToken(): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Get user details from cookies, parsed as JSON.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getUserDetails(): Record<string, unknown> | null;
|
|
24
|
+
/**
|
|
25
|
+
* Get suppressed alert IDs from cookies.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getSuppressedAlerts(): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Save suppressed alert IDs to cookies (1 year expiry).
|
|
30
|
+
*/
|
|
31
|
+
export declare function saveSuppressedAlerts(alertIds: string[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Set authentication cookies with proper domain and security settings.
|
|
34
|
+
*/
|
|
35
|
+
export declare function setAuthCookies(token: string, userDetails: Record<string, unknown>, rememberMe?: boolean, refreshToken?: string | null): void;
|
|
36
|
+
/**
|
|
37
|
+
* Clear authentication cookies.
|
|
38
|
+
*/
|
|
39
|
+
export declare function clearAuthCookies(): void;
|
|
40
|
+
//# sourceMappingURL=cookieHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookieHelpers.d.ts","sourceRoot":"","sources":["../../src/lib/utils/cookieHelpers.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQ/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAQ9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAE7D;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,UAAU,GAAE,OAAc,EAC1B,YAAY,GAAE,MAAM,GAAG,IAAW,GACjC,IAAI,CAcN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAOvC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// COOKIE UTILITIES
|
|
3
|
+
// ============================================
|
|
4
|
+
/**
|
|
5
|
+
* Parse all cookies into an object.
|
|
6
|
+
*/
|
|
7
|
+
export function parseCookies() {
|
|
8
|
+
if (typeof document === "undefined")
|
|
9
|
+
return {};
|
|
10
|
+
return document.cookie.split("; ").reduce((acc, cookie) => {
|
|
11
|
+
if (!cookie)
|
|
12
|
+
return acc;
|
|
13
|
+
const [name, ...valueParts] = cookie.split("=");
|
|
14
|
+
acc[name] = decodeURIComponent(valueParts.join("="));
|
|
15
|
+
return acc;
|
|
16
|
+
}, {});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get a specific cookie value by name.
|
|
20
|
+
*/
|
|
21
|
+
export function getCookie(name) {
|
|
22
|
+
const cookies = parseCookies();
|
|
23
|
+
return cookies[name] || null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Set a cookie with options.
|
|
27
|
+
*/
|
|
28
|
+
export function setCookie(name, value, options = {}) {
|
|
29
|
+
const isProd = typeof window !== "undefined" && window.location.hostname.includes("get-micdrop.com");
|
|
30
|
+
const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
|
|
31
|
+
const secureAttr = typeof window !== "undefined" && window.location.protocol === "https:" ? "secure;" : "";
|
|
32
|
+
const maxAge = options.maxAge ? `max-age=${options.maxAge};` : "";
|
|
33
|
+
const path = options.path || "/";
|
|
34
|
+
document.cookie = `${name}=${encodeURIComponent(value)}; path=${path}; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the performer token from cookies.
|
|
38
|
+
*/
|
|
39
|
+
export function getPerformerToken() {
|
|
40
|
+
return getCookie("performer_token");
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get user details from cookies, parsed as JSON.
|
|
44
|
+
*/
|
|
45
|
+
export function getUserDetails() {
|
|
46
|
+
const details = getCookie("userDetails");
|
|
47
|
+
if (!details)
|
|
48
|
+
return null;
|
|
49
|
+
try {
|
|
50
|
+
return JSON.parse(details);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get suppressed alert IDs from cookies.
|
|
58
|
+
*/
|
|
59
|
+
export function getSuppressedAlerts() {
|
|
60
|
+
const alerts = getCookie("suppressedAlerts");
|
|
61
|
+
if (!alerts)
|
|
62
|
+
return [];
|
|
63
|
+
try {
|
|
64
|
+
return JSON.parse(alerts);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Save suppressed alert IDs to cookies (1 year expiry).
|
|
72
|
+
*/
|
|
73
|
+
export function saveSuppressedAlerts(alertIds) {
|
|
74
|
+
setCookie("suppressedAlerts", JSON.stringify(alertIds), { maxAge: 31536000 });
|
|
75
|
+
}
|
|
76
|
+
// ============================================
|
|
77
|
+
// AUTH COOKIE HELPERS
|
|
78
|
+
// ============================================
|
|
79
|
+
/**
|
|
80
|
+
* Set authentication cookies with proper domain and security settings.
|
|
81
|
+
*/
|
|
82
|
+
export function setAuthCookies(token, userDetails, rememberMe = true, refreshToken = null) {
|
|
83
|
+
const isProd = window.location.hostname.includes("get-micdrop.com");
|
|
84
|
+
const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
|
|
85
|
+
const secureAttr = window.location.protocol === "https:" ? "secure;" : "";
|
|
86
|
+
const maxAge = rememberMe ? "max-age=2592000;" : ""; // 30 days or session
|
|
87
|
+
document.cookie = `performer_token=${token}; path=/; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
|
|
88
|
+
document.cookie = `userDetails=${encodeURIComponent(JSON.stringify(userDetails))}; path=/; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
|
|
89
|
+
if (refreshToken) {
|
|
90
|
+
document.cookie = `performer_refresh_token=${refreshToken}; path=/; ${maxAge} ${domainAttr} ${secureAttr} samesite=lax`;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Clear authentication cookies.
|
|
95
|
+
*/
|
|
96
|
+
export function clearAuthCookies() {
|
|
97
|
+
const isProd = window.location.hostname.includes("get-micdrop.com");
|
|
98
|
+
const domainAttr = isProd ? "domain=.get-micdrop.com;" : "";
|
|
99
|
+
document.cookie = `userDetails=; path=/; max-age=0; ${domainAttr}`;
|
|
100
|
+
document.cookie = `performer_token=; path=/; max-age=0; ${domainAttr}`;
|
|
101
|
+
document.cookie = `performer_refresh_token=; path=/; max-age=0; ${domainAttr}`;
|
|
102
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a value to a date string using Date.toDateString().
|
|
3
|
+
* Returns null if the value is falsy.
|
|
4
|
+
*/
|
|
5
|
+
export declare function convertToDate(value: string | null | undefined): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Convert an ISO date string to a local Date using UTC components (date only, no time).
|
|
8
|
+
*/
|
|
9
|
+
export declare function convertToCustomDateFormat(isoString: string): Date;
|
|
10
|
+
/**
|
|
11
|
+
* Convert an ISO date string to a UTC Date preserving hours and minutes.
|
|
12
|
+
*/
|
|
13
|
+
export declare function convertToCustomDateTimeFormat(isoDateString: string): Date;
|
|
14
|
+
/**
|
|
15
|
+
* Format a date string's time as "H:MM AM/PM" using UTC hours.
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatHour(dateString: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Format a date as short form: "Thu, Oct 24".
|
|
20
|
+
*/
|
|
21
|
+
export declare function formattedDate(date: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Format a date as long form with ordinal: "Thursday, October 24th, 2024".
|
|
24
|
+
*/
|
|
25
|
+
export declare function formattedFullDate(date: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Format a datetime string using Intl.DateTimeFormat with timezone support.
|
|
28
|
+
*/
|
|
29
|
+
export declare const formatDateTime: (dateTimeString: string, timeZone?: string) => string;
|
|
30
|
+
/**
|
|
31
|
+
* Format a start datetime as a single "H:MM AM/PM" time string (UTC).
|
|
32
|
+
*/
|
|
33
|
+
export declare const formatTimeline: (startDateTime: string) => string;
|
|
34
|
+
/**
|
|
35
|
+
* Format a time range as "H:MM AM - H:MM PM" (UTC).
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatTimeRange(startDate: string, endDate: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Get an array of date strings between two dates (inclusive), formatted as "YYYY-M-D".
|
|
40
|
+
*/
|
|
41
|
+
export declare function getDateRange(startDate: string, endDate: string): string[];
|
|
42
|
+
/**
|
|
43
|
+
* Get abbreviated day of week from a date string (e.g., "Mon", "Tue").
|
|
44
|
+
*/
|
|
45
|
+
export declare const getDay: (dateString: string) => string;
|
|
46
|
+
/**
|
|
47
|
+
* Get abbreviated month from a date string (e.g., "Jan", "Feb").
|
|
48
|
+
*/
|
|
49
|
+
export declare const getMonth: (dateString: string) => string;
|
|
50
|
+
/**
|
|
51
|
+
* Get the day of the month (1-31) from a date string.
|
|
52
|
+
*/
|
|
53
|
+
export declare const getDateOfMonth: (dateString: string) => number;
|
|
54
|
+
/**
|
|
55
|
+
* Relative time string (e.g., "5 minutes ago", "2 days ago").
|
|
56
|
+
*/
|
|
57
|
+
export declare function timeAgo(date: string | Date): string;
|
|
58
|
+
interface DayOption {
|
|
59
|
+
value: string;
|
|
60
|
+
label: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get day options: weekdays if "weeks", or numbered days 1-31 with ordinal suffixes.
|
|
64
|
+
*/
|
|
65
|
+
export declare function getDays(params: string): DayOption[];
|
|
66
|
+
/**
|
|
67
|
+
* Get numeric options based on time unit: 12 for months, 10 for weeks, 31 for days.
|
|
68
|
+
*/
|
|
69
|
+
export declare function getDaysNumberOptions(timeUnit: string): DayOption[];
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=dateHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateHelpers.d.ts","sourceRoot":"","sources":["../../src/lib/utils/dateHelpers.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQjE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAWzE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CASrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlD;AAiBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CActD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,EAAE,WAAU,MAAc,KAAG,MAcjF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,eAAe,MAAM,KAAG,MAYtD,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAgB1E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAezE;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,YAAY,MAAM,KAAG,MAI3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,YAAY,MAAM,KAAG,MAO7C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,KAAG,MAGnD,CAAC;AAEF;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAsBnD;AAMD,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CA0BnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAiBlE"}
|