@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,117 +1,117 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
-
|
|
4
|
-
import BottomNav from './BottomNav.svelte';
|
|
5
|
-
|
|
6
|
-
const { Story } = defineMeta({
|
|
7
|
-
title: 'Components/Layout/BottomNav',
|
|
8
|
-
component: BottomNav,
|
|
9
|
-
tags: ['autodocs'],
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
<script>
|
|
15
|
-
|
|
16
|
-
const defaultLinks = [
|
|
17
|
-
{ label: 'Home', href: '/', icon: 'Home' },
|
|
18
|
-
{ label: 'Shows', href: '/shows', icon: 'Shows' },
|
|
19
|
-
{ label: 'Availability', href: '/availability', icon: 'Availability' },
|
|
20
|
-
{ label: 'Profile', href: '/profile', icon: 'Profile' },
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
const extendedLinks = [
|
|
24
|
-
{ label: 'Home', href: '/', icon: 'Home' },
|
|
25
|
-
{ label: 'Shows', href: '/shows', icon: 'Shows' },
|
|
26
|
-
{ label: 'Availability', href: '/availability', icon: 'Availability' },
|
|
27
|
-
{ label: 'Messages', href: '/messages', icon: 'Message' },
|
|
28
|
-
{ label: 'Profile', href: '/profile', icon: 'Profile' },
|
|
29
|
-
];
|
|
30
|
-
</script>
|
|
31
|
-
|
|
32
|
-
<Story name="Default (4 Tabs)">
|
|
33
|
-
<div class="bg-
|
|
34
|
-
<p class="text-sm text-
|
|
35
|
-
<div class="max-w-md mx-auto bg-
|
|
36
|
-
<div class="h-64 bg-gradient-to-br from-blue-50 to-blue-100 flex items-center justify-center">
|
|
37
|
-
<p class="text-
|
|
38
|
-
</div>
|
|
39
|
-
<div class="flex border-t bg-
|
|
40
|
-
<BottomNav links={defaultLinks} />
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
</Story>
|
|
45
|
-
|
|
46
|
-
<Story name="With 5 Tabs">
|
|
47
|
-
<div class="bg-
|
|
48
|
-
<p class="text-sm text-
|
|
49
|
-
<div class="max-w-md mx-auto bg-
|
|
50
|
-
<div class="h-64 bg-gradient-to-br from-purple-50 to-purple-100 flex items-center justify-center">
|
|
51
|
-
<p class="text-
|
|
52
|
-
</div>
|
|
53
|
-
<div class="flex border-t bg-
|
|
54
|
-
<BottomNav links={extendedLinks} />
|
|
55
|
-
</div>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
</Story>
|
|
59
|
-
|
|
60
|
-
<Story name="Different Icon Set">
|
|
61
|
-
<div class="bg-
|
|
62
|
-
<p class="text-sm text-
|
|
63
|
-
<div class="max-w-md mx-auto bg-
|
|
64
|
-
<div class="h-64 bg-gradient-to-br from-green-50 to-green-100 flex items-center justify-center">
|
|
65
|
-
<p class="text-
|
|
66
|
-
</div>
|
|
67
|
-
<div class="flex border-t bg-
|
|
68
|
-
<BottomNav
|
|
69
|
-
links={[
|
|
70
|
-
{ label: 'Dashboard', href: '/', icon: 'Home' },
|
|
71
|
-
{ label: 'Events', href: '/events', icon: 'Shows' },
|
|
72
|
-
{ label: 'Notifications', href: '/notifications', icon: 'Notification' },
|
|
73
|
-
{ label: 'Settings', href: '/settings', icon: 'Profile' },
|
|
74
|
-
]}
|
|
75
|
-
/>
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
</Story>
|
|
80
|
-
|
|
81
|
-
<Story name="Mobile Viewport">
|
|
82
|
-
<div class="max-w-[375px] mx-auto bg-
|
|
83
|
-
<!-- Mock iPhone screen -->
|
|
84
|
-
<div class="h-[667px] flex flex-col">
|
|
85
|
-
<!-- Status bar -->
|
|
86
|
-
<div class="h-6 bg-black flex items-center justify-between px-4">
|
|
87
|
-
<span class="text-white text-xs">9:41</span>
|
|
88
|
-
<span class="text-white text-xs">100%</span>
|
|
89
|
-
</div>
|
|
90
|
-
|
|
91
|
-
<!-- Content area -->
|
|
92
|
-
<div class="flex-1 bg-gradient-to-br from-blue-50 to-purple-50 p-4">
|
|
93
|
-
<h1 class="text-2xl font-bold mb-2">Home</h1>
|
|
94
|
-
<p class="text-
|
|
95
|
-
</div>
|
|
96
|
-
|
|
97
|
-
<!-- Bottom navigation -->
|
|
98
|
-
<div class="flex border-t bg-
|
|
99
|
-
<BottomNav links={defaultLinks} />
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
</Story>
|
|
104
|
-
|
|
105
|
-
<Story name="Dark Mode">
|
|
106
|
-
<div class="dark bg-
|
|
107
|
-
<p class="text-sm text-
|
|
108
|
-
<div class="max-w-md mx-auto bg-
|
|
109
|
-
<div class="h-64 bg-gradient-to-br from-gray-900 to-gray-800 flex items-center justify-center">
|
|
110
|
-
<p class="text-
|
|
111
|
-
</div>
|
|
112
|
-
<div class="flex border-t border-
|
|
113
|
-
<BottomNav links={defaultLinks} />
|
|
114
|
-
</div>
|
|
115
|
-
</div>
|
|
116
|
-
</div>
|
|
117
|
-
</Story>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
|
|
4
|
+
import BottomNav from './BottomNav.svelte';
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: 'Components/Layout/BottomNav',
|
|
8
|
+
component: BottomNav,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<script>
|
|
15
|
+
|
|
16
|
+
const defaultLinks = [
|
|
17
|
+
{ label: 'Home', href: '/', icon: 'Home' },
|
|
18
|
+
{ label: 'Shows', href: '/shows', icon: 'Shows' },
|
|
19
|
+
{ label: 'Availability', href: '/availability', icon: 'Availability' },
|
|
20
|
+
{ label: 'Profile', href: '/profile', icon: 'Profile' },
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const extendedLinks = [
|
|
24
|
+
{ label: 'Home', href: '/', icon: 'Home' },
|
|
25
|
+
{ label: 'Shows', href: '/shows', icon: 'Shows' },
|
|
26
|
+
{ label: 'Availability', href: '/availability', icon: 'Availability' },
|
|
27
|
+
{ label: 'Messages', href: '/messages', icon: 'Message' },
|
|
28
|
+
{ label: 'Profile', href: '/profile', icon: 'Profile' },
|
|
29
|
+
];
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<Story name="Default (4 Tabs)">
|
|
33
|
+
<div class="bg-muted p-4">
|
|
34
|
+
<p class="text-sm text-muted-foreground mb-4">Mobile Bottom Navigation (4 tabs)</p>
|
|
35
|
+
<div class="max-w-md mx-auto bg-card rounded-lg shadow-lg overflow-hidden">
|
|
36
|
+
<div class="h-64 bg-gradient-to-br from-blue-50 to-blue-100 flex items-center justify-center">
|
|
37
|
+
<p class="text-muted-foreground">Page Content Area</p>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="flex border-t bg-card">
|
|
40
|
+
<BottomNav links={defaultLinks} />
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</Story>
|
|
45
|
+
|
|
46
|
+
<Story name="With 5 Tabs">
|
|
47
|
+
<div class="bg-muted p-4">
|
|
48
|
+
<p class="text-sm text-muted-foreground mb-4">Extended Navigation (5 tabs)</p>
|
|
49
|
+
<div class="max-w-md mx-auto bg-card rounded-lg shadow-lg overflow-hidden">
|
|
50
|
+
<div class="h-64 bg-gradient-to-br from-purple-50 to-purple-100 flex items-center justify-center">
|
|
51
|
+
<p class="text-muted-foreground">Page Content Area</p>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="flex border-t bg-card">
|
|
54
|
+
<BottomNav links={extendedLinks} />
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</Story>
|
|
59
|
+
|
|
60
|
+
<Story name="Different Icon Set">
|
|
61
|
+
<div class="bg-muted p-4">
|
|
62
|
+
<p class="text-sm text-muted-foreground mb-4">Custom Icons</p>
|
|
63
|
+
<div class="max-w-md mx-auto bg-card rounded-lg shadow-lg overflow-hidden">
|
|
64
|
+
<div class="h-64 bg-gradient-to-br from-green-50 to-green-100 flex items-center justify-center">
|
|
65
|
+
<p class="text-muted-foreground">Page Content Area</p>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="flex border-t bg-card">
|
|
68
|
+
<BottomNav
|
|
69
|
+
links={[
|
|
70
|
+
{ label: 'Dashboard', href: '/', icon: 'Home' },
|
|
71
|
+
{ label: 'Events', href: '/events', icon: 'Shows' },
|
|
72
|
+
{ label: 'Notifications', href: '/notifications', icon: 'Notification' },
|
|
73
|
+
{ label: 'Settings', href: '/settings', icon: 'Profile' },
|
|
74
|
+
]}
|
|
75
|
+
/>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</Story>
|
|
80
|
+
|
|
81
|
+
<Story name="Mobile Viewport">
|
|
82
|
+
<div class="max-w-[375px] mx-auto bg-card shadow-2xl rounded-3xl overflow-hidden">
|
|
83
|
+
<!-- Mock iPhone screen -->
|
|
84
|
+
<div class="h-[667px] flex flex-col">
|
|
85
|
+
<!-- Status bar -->
|
|
86
|
+
<div class="h-6 bg-black flex items-center justify-between px-4">
|
|
87
|
+
<span class="text-white text-xs">9:41</span>
|
|
88
|
+
<span class="text-white text-xs">100%</span>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<!-- Content area -->
|
|
92
|
+
<div class="flex-1 bg-gradient-to-br from-blue-50 to-purple-50 p-4">
|
|
93
|
+
<h1 class="text-2xl font-bold mb-2">Home</h1>
|
|
94
|
+
<p class="text-muted-foreground">This is a mobile viewport simulation</p>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<!-- Bottom navigation -->
|
|
98
|
+
<div class="flex border-t bg-card safe-bottom">
|
|
99
|
+
<BottomNav links={defaultLinks} />
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</Story>
|
|
104
|
+
|
|
105
|
+
<Story name="Dark Mode">
|
|
106
|
+
<div class="dark bg-bg-primary p-4 min-h-screen">
|
|
107
|
+
<p class="text-sm text-muted-foreground mb-4">Dark Mode Bottom Navigation</p>
|
|
108
|
+
<div class="max-w-md mx-auto bg-bg-secondary rounded-lg shadow-2xl overflow-hidden">
|
|
109
|
+
<div class="h-64 bg-gradient-to-br from-gray-900 to-gray-800 flex items-center justify-center">
|
|
110
|
+
<p class="text-muted-foreground">Dark Mode Content</p>
|
|
111
|
+
</div>
|
|
112
|
+
<div class="flex border-t border-stroke-primary bg-bg-secondary">
|
|
113
|
+
<BottomNav links={defaultLinks} />
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
</Story>
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { page } from '../../__LIB_STORES__.js';
|
|
3
|
-
import { base } from '../../__LIB_PATHS__.js';
|
|
4
|
-
import { browser } from '../../__LIB_ENVIRONMENT__.js';
|
|
5
|
-
import { onMount } from "svelte";
|
|
6
|
-
import Icon from "../../primitives/Icons/Icon.svelte";
|
|
7
|
-
import { typography } from '../../tokens/typography';
|
|
8
|
-
|
|
9
|
-
interface NavLink {
|
|
10
|
-
label: string;
|
|
11
|
-
href: string;
|
|
12
|
-
icon: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const defaultLabels = {
|
|
16
|
-
showsLabel: 'Shows',
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
interface Props {
|
|
20
|
-
links?: NavLink[];
|
|
21
|
-
labels?: Partial<typeof defaultLabels>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
let {
|
|
25
|
-
links = [],
|
|
26
|
-
labels: userLabels = {},
|
|
27
|
-
}: Props = $props();
|
|
28
|
-
|
|
29
|
-
let labels = $derived({ ...defaultLabels, ...userLabels });
|
|
30
|
-
|
|
31
|
-
let invitationCount = $state(0);
|
|
32
|
-
|
|
33
|
-
let currentPath = $derived($page.url.pathname);
|
|
34
|
-
|
|
35
|
-
function isActive(href: string, path: string): boolean {
|
|
36
|
-
if (href === `${base}/` || href === '/') {
|
|
37
|
-
return path === href || path === `${base}/`;
|
|
38
|
-
}
|
|
39
|
-
return path.startsWith(href);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
onMount(() => {
|
|
43
|
-
async function fetchShows() {
|
|
44
|
-
try {
|
|
45
|
-
const res = await fetch(`/api/getEventsForVenue`);
|
|
46
|
-
if (!res.ok) {
|
|
47
|
-
// Silently ignore auth errors - user may not be logged in yet
|
|
48
|
-
if (res.status === 401) return;
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const events = await res.json();
|
|
52
|
-
invitationCount = events.filter((event: { acceptedState: number }) => event.acceptedState === 0).length;
|
|
53
|
-
} catch (_err) {
|
|
54
|
-
// Silently fail - this is non-critical UI enhancement
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (browser) {
|
|
59
|
-
fetchShows();
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
</script>
|
|
63
|
-
|
|
64
|
-
{#each links as { label, href, icon }}
|
|
65
|
-
<a
|
|
66
|
-
{href}
|
|
67
|
-
class={`bottom-nav-item flex-1 flex items-center justify-center py-3 px-2 no-underline bg-transparent border-none cursor-pointer min-w-0
|
|
68
|
-
${typography.textMuted} transition-colors duration-150
|
|
69
|
-
hover:text-
|
|
70
|
-
select-none touch-manipulation
|
|
71
|
-
${isActive(href, currentPath) ? 'active text-
|
|
72
|
-
aria-label={label}
|
|
73
|
-
style="-webkit-tap-highlight-color: transparent; -webkit-touch-callout: none;"
|
|
74
|
-
>
|
|
75
|
-
<span class="bottom-nav-icon relative flex items-center justify-center transition-transform duration-150 active:scale-[0.8]">
|
|
76
|
-
<Icon name={icon} size="24" />
|
|
77
|
-
{#if label === labels.showsLabel && invitationCount > 0}
|
|
78
|
-
<span class="notification-dot absolute -top-1 -right-1 w-2 h-2 bg-
|
|
79
|
-
{/if}
|
|
80
|
-
</span>
|
|
81
|
-
</a>
|
|
82
|
-
{/each}
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { page } from '../../__LIB_STORES__.js';
|
|
3
|
+
import { base } from '../../__LIB_PATHS__.js';
|
|
4
|
+
import { browser } from '../../__LIB_ENVIRONMENT__.js';
|
|
5
|
+
import { onMount } from "svelte";
|
|
6
|
+
import Icon from "../../primitives/Icons/Icon.svelte";
|
|
7
|
+
import { typography } from '../../tokens/typography';
|
|
8
|
+
|
|
9
|
+
interface NavLink {
|
|
10
|
+
label: string;
|
|
11
|
+
href: string;
|
|
12
|
+
icon: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const defaultLabels = {
|
|
16
|
+
showsLabel: 'Shows',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
interface Props {
|
|
20
|
+
links?: NavLink[];
|
|
21
|
+
labels?: Partial<typeof defaultLabels>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let {
|
|
25
|
+
links = [],
|
|
26
|
+
labels: userLabels = {},
|
|
27
|
+
}: Props = $props();
|
|
28
|
+
|
|
29
|
+
let labels = $derived({ ...defaultLabels, ...userLabels });
|
|
30
|
+
|
|
31
|
+
let invitationCount = $state(0);
|
|
32
|
+
|
|
33
|
+
let currentPath = $derived($page.url.pathname);
|
|
34
|
+
|
|
35
|
+
function isActive(href: string, path: string): boolean {
|
|
36
|
+
if (href === `${base}/` || href === '/') {
|
|
37
|
+
return path === href || path === `${base}/`;
|
|
38
|
+
}
|
|
39
|
+
return path.startsWith(href);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
onMount(() => {
|
|
43
|
+
async function fetchShows() {
|
|
44
|
+
try {
|
|
45
|
+
const res = await fetch(`/api/getEventsForVenue`);
|
|
46
|
+
if (!res.ok) {
|
|
47
|
+
// Silently ignore auth errors - user may not be logged in yet
|
|
48
|
+
if (res.status === 401) return;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const events = await res.json();
|
|
52
|
+
invitationCount = events.filter((event: { acceptedState: number }) => event.acceptedState === 0).length;
|
|
53
|
+
} catch (_err) {
|
|
54
|
+
// Silently fail - this is non-critical UI enhancement
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (browser) {
|
|
59
|
+
fetchShows();
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
{#each links as { label, href, icon }}
|
|
65
|
+
<a
|
|
66
|
+
{href}
|
|
67
|
+
class={`bottom-nav-item flex-1 flex items-center justify-center py-3 px-2 no-underline bg-transparent border-none cursor-pointer min-w-0
|
|
68
|
+
${typography.textMuted} transition-colors duration-150
|
|
69
|
+
hover:text-text-primary hover:no-underline
|
|
70
|
+
select-none touch-manipulation
|
|
71
|
+
${isActive(href, currentPath) ? 'active text-brand-primary' : ''}`}
|
|
72
|
+
aria-label={label}
|
|
73
|
+
style="-webkit-tap-highlight-color: transparent; -webkit-touch-callout: none;"
|
|
74
|
+
>
|
|
75
|
+
<span class="bottom-nav-icon relative flex items-center justify-center transition-transform duration-150 active:scale-[0.8]">
|
|
76
|
+
<Icon name={icon} size="24" />
|
|
77
|
+
{#if label === labels.showsLabel && invitationCount > 0}
|
|
78
|
+
<span class="notification-dot absolute -top-1 -right-1 w-2 h-2 bg-accent-danger rounded-full"></span>
|
|
79
|
+
{/if}
|
|
80
|
+
</span>
|
|
81
|
+
</a>
|
|
82
|
+
{/each}
|
|
@@ -159,7 +159,7 @@ describe('Header', () => {
|
|
|
159
159
|
await fireEvent.click(mobileButton);
|
|
160
160
|
// The mobile sheet uses portal action to render to document.body,
|
|
161
161
|
// so we need to check in document.body instead of container
|
|
162
|
-
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-
|
|
162
|
+
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-overlay-bg');
|
|
163
163
|
expect(mobileSheet).toBeTruthy();
|
|
164
164
|
});
|
|
165
165
|
it('navigates when a mobile sheet dropdown link is clicked', async () => {
|
|
@@ -168,7 +168,7 @@ describe('Header', () => {
|
|
|
168
168
|
const mobileButton = container.querySelector('button.block.md\\:hidden');
|
|
169
169
|
await fireEvent.click(mobileButton);
|
|
170
170
|
// Mobile sheet renders via portal in document.body
|
|
171
|
-
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-
|
|
171
|
+
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-overlay-bg');
|
|
172
172
|
expect(mobileSheet).toBeTruthy();
|
|
173
173
|
// Click the first dropdown link in the mobile sheet
|
|
174
174
|
const menuItems = mobileSheet.querySelectorAll('button');
|
|
@@ -183,7 +183,7 @@ describe('Header', () => {
|
|
|
183
183
|
const { container } = render(Header, { ...defaultProps, signoutHandler });
|
|
184
184
|
const mobileButton = container.querySelector('button.block.md\\:hidden');
|
|
185
185
|
await fireEvent.click(mobileButton);
|
|
186
|
-
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-
|
|
186
|
+
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-overlay-bg');
|
|
187
187
|
expect(mobileSheet).toBeTruthy();
|
|
188
188
|
// Find the Sign Out button in the mobile sheet
|
|
189
189
|
const menuItems = mobileSheet.querySelectorAll('button');
|
|
@@ -230,8 +230,8 @@ describe('Header', () => {
|
|
|
230
230
|
it('marks current path as active', () => {
|
|
231
231
|
const { container } = render(Header, defaultProps);
|
|
232
232
|
const showsLink = container.querySelector('a[href="/shows"]');
|
|
233
|
-
// The active link should have 'text-
|
|
234
|
-
expect(showsLink.classList.contains('text-
|
|
233
|
+
// The active link should have 'text-brand-primary' class (or dark mode '')
|
|
234
|
+
expect(showsLink.classList.contains('text-brand-primary')).toBe(true);
|
|
235
235
|
});
|
|
236
236
|
});
|
|
237
237
|
describe('default values', () => {
|
|
@@ -245,7 +245,7 @@ describe('Header', () => {
|
|
|
245
245
|
const { container } = render(Header, { ...defaultProps, name: 'Jane Doe' });
|
|
246
246
|
const mobileButton = container.querySelector('button.block.md\\:hidden');
|
|
247
247
|
await fireEvent.click(mobileButton);
|
|
248
|
-
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-
|
|
248
|
+
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-overlay-bg');
|
|
249
249
|
expect(mobileSheet).toBeTruthy();
|
|
250
250
|
expect(mobileSheet.textContent).toContain('Jane Doe');
|
|
251
251
|
});
|
|
@@ -253,7 +253,7 @@ describe('Header', () => {
|
|
|
253
253
|
const { container } = render(Header, { ...defaultProps, name: '' });
|
|
254
254
|
const mobileButton = container.querySelector('button.block.md\\:hidden');
|
|
255
255
|
await fireEvent.click(mobileButton);
|
|
256
|
-
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-
|
|
256
|
+
const mobileSheet = document.body.querySelector('div.fixed.inset-0.bg-overlay-bg');
|
|
257
257
|
expect(mobileSheet).toBeTruthy();
|
|
258
258
|
expect(mobileSheet.textContent).toContain('Performer');
|
|
259
259
|
});
|
|
@@ -281,13 +281,13 @@ describe('Header', () => {
|
|
|
281
281
|
const { container } = render(Header, propsWithRoot);
|
|
282
282
|
const homeLink = container.querySelector('a[href="/performers/"]');
|
|
283
283
|
// /shows does not match /performers/, so it should NOT be active
|
|
284
|
-
expect(homeLink.classList.contains('text-
|
|
284
|
+
expect(homeLink.classList.contains('text-brand-primary')).toBe(false);
|
|
285
285
|
});
|
|
286
286
|
it('marks link as active using startsWith for non-root paths', () => {
|
|
287
287
|
const { container } = render(Header, defaultProps);
|
|
288
288
|
// '/shows' starts with '/shows' so it should be active
|
|
289
289
|
const showsLink = container.querySelector('a[href="/shows"]');
|
|
290
|
-
expect(showsLink.classList.contains('text-
|
|
290
|
+
expect(showsLink.classList.contains('text-brand-primary')).toBe(true);
|
|
291
291
|
});
|
|
292
292
|
});
|
|
293
293
|
});
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
-
|
|
4
|
-
import Header from "./Header.svelte";
|
|
5
|
-
|
|
6
|
-
const { Story } = defineMeta({
|
|
7
|
-
title: "Components/Layout/Header",
|
|
8
|
-
component: Header,
|
|
9
|
-
argTypes: {
|
|
10
|
-
name: { control: "text" },
|
|
11
|
-
email: { control: "text" },
|
|
12
|
-
avatar: { control: "text" },
|
|
13
|
-
signoutHandler: { action: "signout" },
|
|
14
|
-
},
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
function handleSignout() {
|
|
18
|
-
alert("User signed out");
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
</script>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
<Story
|
|
25
|
-
name="Default Header"
|
|
26
|
-
args={{
|
|
27
|
-
name: "John Performer",
|
|
28
|
-
email: "john@example.com",
|
|
29
|
-
avatar: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=12",
|
|
30
|
-
signoutHandler: handleSignout
|
|
31
|
-
}}
|
|
32
|
-
/>
|
|
33
|
-
|
|
34
|
-
<Story name="With Long Name">
|
|
35
|
-
<Header
|
|
36
|
-
name="Alexander Christopher Wellington"
|
|
37
|
-
email="alexander.wellington@performersportal.com"
|
|
38
|
-
avatar="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=33"
|
|
39
|
-
signoutHandler={handleSignout}
|
|
40
|
-
/>
|
|
41
|
-
</Story>
|
|
42
|
-
|
|
43
|
-
<Story name="With Short Name">
|
|
44
|
-
<Header
|
|
45
|
-
name="Jo"
|
|
46
|
-
email="jo@test.com"
|
|
47
|
-
avatar="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=5"
|
|
48
|
-
signoutHandler={handleSignout}
|
|
49
|
-
/>
|
|
50
|
-
</Story>
|
|
51
|
-
|
|
52
|
-
<Story name="Female Performer">
|
|
53
|
-
<Header
|
|
54
|
-
name="Sarah Johnson"
|
|
55
|
-
email="sarah.johnson@comedy.com"
|
|
56
|
-
avatar="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=47"
|
|
57
|
-
signoutHandler={handleSignout}
|
|
58
|
-
/>
|
|
59
|
-
</Story>
|
|
60
|
-
|
|
61
|
-
<Story name="Without Email">
|
|
62
|
-
<Header
|
|
63
|
-
name="Anonymous Performer"
|
|
64
|
-
email=""
|
|
65
|
-
avatar="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=68"
|
|
66
|
-
signoutHandler={handleSignout}
|
|
67
|
-
/>
|
|
68
|
-
</Story>
|
|
69
|
-
|
|
70
|
-
<Story name="With Default Avatar">
|
|
71
|
-
<Header
|
|
72
|
-
name="Default User"
|
|
73
|
-
email="default@performers.com"
|
|
74
|
-
avatar=""
|
|
75
|
-
signoutHandler={handleSignout}
|
|
76
|
-
/>
|
|
77
|
-
</Story>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
|
|
4
|
+
import Header from "./Header.svelte";
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: "Components/Layout/Header",
|
|
8
|
+
component: Header,
|
|
9
|
+
argTypes: {
|
|
10
|
+
name: { control: "text" },
|
|
11
|
+
email: { control: "text" },
|
|
12
|
+
avatar: { control: "text" },
|
|
13
|
+
signoutHandler: { action: "signout" },
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
function handleSignout() {
|
|
18
|
+
alert("User signed out");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
<Story
|
|
25
|
+
name="Default Header"
|
|
26
|
+
args={{
|
|
27
|
+
name: "John Performer",
|
|
28
|
+
email: "john@example.com",
|
|
29
|
+
avatar: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=12",
|
|
30
|
+
signoutHandler: handleSignout
|
|
31
|
+
}}
|
|
32
|
+
/>
|
|
33
|
+
|
|
34
|
+
<Story name="With Long Name">
|
|
35
|
+
<Header
|
|
36
|
+
name="Alexander Christopher Wellington"
|
|
37
|
+
email="alexander.wellington@performersportal.com"
|
|
38
|
+
avatar="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=33"
|
|
39
|
+
signoutHandler={handleSignout}
|
|
40
|
+
/>
|
|
41
|
+
</Story>
|
|
42
|
+
|
|
43
|
+
<Story name="With Short Name">
|
|
44
|
+
<Header
|
|
45
|
+
name="Jo"
|
|
46
|
+
email="jo@test.com"
|
|
47
|
+
avatar="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=5"
|
|
48
|
+
signoutHandler={handleSignout}
|
|
49
|
+
/>
|
|
50
|
+
</Story>
|
|
51
|
+
|
|
52
|
+
<Story name="Female Performer">
|
|
53
|
+
<Header
|
|
54
|
+
name="Sarah Johnson"
|
|
55
|
+
email="sarah.johnson@comedy.com"
|
|
56
|
+
avatar="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=47"
|
|
57
|
+
signoutHandler={handleSignout}
|
|
58
|
+
/>
|
|
59
|
+
</Story>
|
|
60
|
+
|
|
61
|
+
<Story name="Without Email">
|
|
62
|
+
<Header
|
|
63
|
+
name="Anonymous Performer"
|
|
64
|
+
email=""
|
|
65
|
+
avatar="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect width='150' height='150' fill='%236366f1'/%3E%3Ccircle cx='75' cy='55' r='30' fill='%23fff'/%3E%3Cellipse cx='75' cy='130' rx='45' ry='35' fill='%23fff'/%3E%3C/svg%3E?demo=68"
|
|
66
|
+
signoutHandler={handleSignout}
|
|
67
|
+
/>
|
|
68
|
+
</Story>
|
|
69
|
+
|
|
70
|
+
<Story name="With Default Avatar">
|
|
71
|
+
<Header
|
|
72
|
+
name="Default User"
|
|
73
|
+
email="default@performers.com"
|
|
74
|
+
avatar=""
|
|
75
|
+
signoutHandler={handleSignout}
|
|
76
|
+
/>
|
|
77
|
+
</Story>
|