@evolve.ui/core-components 1.0.1 → 1.1.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/evolve-ui.entries.json +556 -0
- package/fileUpload/testUtils/mockFilesAndImages.d.cts +3 -3
- package/fileUpload/testUtils/mockFilesAndImages.d.cts.map +1 -1
- package/fileUpload/testUtils/mockFilesAndImages.d.mts +3 -3
- package/fileUpload/testUtils/mockFilesAndImages.d.mts.map +1 -1
- package/fileUpload/testUtils/testUtils.d.cts +1 -1
- package/fileUpload/testUtils/testUtils.d.cts.map +1 -1
- package/fileUpload/testUtils/testUtils.d.mts +1 -1
- package/fileUpload/testUtils/testUtils.d.mts.map +1 -1
- package/package.json +2 -2
- package/src/Accordion/Accordion.tsx +233 -0
- package/src/AddressDisplay/AddressDisplay.tsx +43 -0
- package/src/AddressDisplay/components/addressComponents.tsx +111 -0
- package/src/AddressDisplay/components/addressField.tsx +25 -0
- package/src/AddressDisplay/components/addressSection.tsx +8 -0
- package/src/AddressDisplay/components/getCountryValue.tsx +31 -0
- package/src/AddressDisplay/types.ts +26 -0
- package/src/AutomatedCarousel/AutomatedCarousel.tsx +163 -0
- package/src/AutomatedCarousel/automatedCarousel.types.ts +7 -0
- package/src/AutomatedCarousel/components/CarouselProgressBar/CarouselProgressBar.tsx +139 -0
- package/src/AutomatedCarousel/components/CarouselProgressBar/components/CarouselProgressBarUnit/CarouselProgressBarUnit.tsx +165 -0
- package/src/Badge/Badge.tsx +104 -0
- package/src/Badge/Badge.types.ts +58 -0
- package/src/Badge/ItemBadge.tsx +97 -0
- package/src/Badge/LiveStatusBadge.tsx +93 -0
- package/src/BannerNotification/BannerNotification.tsx +157 -0
- package/src/BannerNotification/components/BannerNotificationSkeleton.tsx +39 -0
- package/src/BannerNotification/components/CalloutIcon/BannerIcon.tsx +48 -0
- package/src/BannerNotification/utils/getRandomTooltipId.ts +3 -0
- package/src/BottomSheet/BottomSheet.tsx +476 -0
- package/src/BottomSheet/components/BottomSheetBackdrop/BottomSheetBackdrop.tsx +47 -0
- package/src/BottomSheet/components/BottomSheetContentArea/BottomSheetContentArea.tsx +92 -0
- package/src/BottomSheet/components/BottomSheetOverlay/BottomSheetOverlayTranslate3d.tsx +196 -0
- package/src/BottomSheet/components/SheetDescription/SheetDescription.tsx +22 -0
- package/src/BottomSheet/components/SheetTitle/SheetTitle.tsx +21 -0
- package/src/BottomSheet/components/index.tsx +5 -0
- package/src/BottomSheet/hooks/index.tsx +13 -0
- package/src/BottomSheet/hooks/useAriaHider.tsx +91 -0
- package/src/BottomSheet/hooks/useBottomSheetServices.tsx +224 -0
- package/src/BottomSheet/hooks/useDragHandler.tsx +282 -0
- package/src/BottomSheet/hooks/useFocusTrap.tsx +113 -0
- package/src/BottomSheet/hooks/useLayoutEffect.tsx +4 -0
- package/src/BottomSheet/hooks/useOptimizedResizeObserver.tsx +94 -0
- package/src/BottomSheet/hooks/useOptimizedScrollState.tsx +87 -0
- package/src/BottomSheet/hooks/useReady.tsx +34 -0
- package/src/BottomSheet/hooks/useReducedMotion.tsx +22 -0
- package/src/BottomSheet/hooks/useScrollLock.tsx +143 -0
- package/src/BottomSheet/hooks/useSnapPoints.tsx +355 -0
- package/src/BottomSheet/hooks/useSpring.tsx +47 -0
- package/src/BottomSheet/hooks/useSpringInterpolationsTranslate3d.tsx +101 -0
- package/src/BottomSheet/index.tsx +237 -0
- package/src/BottomSheet/state/atoms.ts +147 -0
- package/src/BottomSheet/state/useBottomSheetStateMachine.ts +246 -0
- package/src/BottomSheet/types.ts +172 -0
- package/src/BottomSheet/utils.ts +65 -0
- package/src/Breadcrumbs/Breadcrumbs.tsx +126 -0
- package/src/Button/Button.tsx +164 -0
- package/src/Button/Button.types.ts +80 -0
- package/src/Button/buttonColorClasses.ts +53 -0
- package/src/Callout/Callout.tsx +136 -0
- package/src/Callout/Callout.types.ts +29 -0
- package/src/Callout/components/CalloutIcon/CalloutIcon.tsx +56 -0
- package/src/Card/CardGrid.tsx +263 -0
- package/src/Card/SingleCard.tsx +22 -0
- package/src/Card/cardFactory.tsx +176 -0
- package/src/Card/components/createBadge.tsx +34 -0
- package/src/Card/components/createFavoriteButton.tsx +40 -0
- package/src/Card/components/createImage.tsx +64 -0
- package/src/Card/components/createInfo.tsx +84 -0
- package/src/Card/components/createName.tsx +63 -0
- package/src/Card/components/createPriceStatus.tsx +100 -0
- package/src/Card/components/types.ts +4 -0
- package/src/Card/hooks/useCardVisibilityTracking.ts +82 -0
- package/src/Card/sharedProps.ts +12 -0
- package/src/Card/types.ts +62 -0
- package/src/Carousel/Carousel.tsx +513 -0
- package/src/Carousel/Carousel.types.ts +43 -0
- package/src/Carousel/Carousel.utils.ts +63 -0
- package/src/Carousel/components/DotButton/DotButton.tsx +42 -0
- package/src/Carousel/components/NavigationButtons/NavigationButtons.tsx +77 -0
- package/src/Carousel/components/TitleSection/TitleSection.tsx +61 -0
- package/src/Carousel/components/TitleSection/components/SubHeaderLeft/SubHeaderLeft.tsx +53 -0
- package/src/Carousel/components/TitleSection/components/Title/Title.tsx +46 -0
- package/src/Carousel/index.ts +2 -0
- package/src/Carousel/testUtils.ts +10 -0
- package/src/Chips/Chip.tsx +153 -0
- package/src/Chips/ChipGroup.tsx +173 -0
- package/src/Chips/SuggestionChip.tsx +15 -0
- package/src/Chips/chipTypes.ts +113 -0
- package/src/Chips/index.ts +4 -0
- package/src/ChoiceListItem/Checkbox.tsx +69 -0
- package/src/ChoiceListItem/Radio.tsx +61 -0
- package/src/ChoiceListItem/choiceListItem.tsx +99 -0
- package/src/ChoiceListItem/common.tsx +148 -0
- package/src/ChoiceListItem/index.ts +3 -0
- package/src/Collapsible/Collapsible.tsx +58 -0
- package/src/Confetti/Confetti.tsx +270 -0
- package/src/Confetti/index.ts +2 -0
- package/src/ContentPager/ContentPager.tsx +189 -0
- package/src/ContentPager/components/Page.tsx +24 -0
- package/src/CookieConsent/components/CookieCategoryRow/CookieCategoryRow.tsx +30 -0
- package/src/CookieConsent/components/CookieConsent/CookieConsent.tsx +74 -0
- package/src/CookieConsent/components/CookieConsentBanner/CookieConsentBanner.tsx +51 -0
- package/src/CookieConsent/components/CookieConsentModal/CookieConsentModal.tsx +64 -0
- package/src/CookieConsent/hooks/useCookieConsent.ts +170 -0
- package/src/CookieConsent/hooks/useCookieConsentState.ts +142 -0
- package/src/CookieConsent/index.ts +16 -0
- package/src/CookieConsent/types/cookieConsent.types.ts +79 -0
- package/src/CookieConsent/types/index.ts +7 -0
- package/src/Countdown/Countdown.tsx +161 -0
- package/src/Countdown/Countdown.types.ts +4 -0
- package/src/Countdown/hooks/useGetCountdown.ts +103 -0
- package/src/DateTimeInput/dateInput/DateInput.tsx +199 -0
- package/src/DateTimeInput/datePicker/DatePicker.tsx +138 -0
- package/src/DateTimeInput/datePicker/components/calendar/Calendar.tsx +72 -0
- package/src/DateTimeInput/datePicker/index.ts +2 -0
- package/src/DateTimeInput/timeInput/TimeInput.tsx +128 -0
- package/src/DateTimeInput/timePicker/TimePicker.tsx +118 -0
- package/src/DateTimeInput/timePicker/components/TimePopover/AmPmSwitch.tsx +103 -0
- package/src/DateTimeInput/timePicker/components/TimePopover/TimeFieldInput.tsx +26 -0
- package/src/DateTimeInput/timePicker/components/TimePopover/TimePopover.tsx +84 -0
- package/src/DateTimeInput/timePicker/components/TimePopover/TimePopover.utils.ts +67 -0
- package/src/DateTimeInput/timePicker/components/TimePopover/TimePopoverActions.tsx +26 -0
- package/src/DateTimeInput/timePicker/index.ts +2 -0
- package/src/DateTimeInput/utils/getDisplayDate.ts +15 -0
- package/src/DateTimeInput/utils/getDisplayTime.ts +15 -0
- package/src/DateTimeInput/utils/index.ts +2 -0
- package/src/DateTimeInput/utils/parseTimeValue.ts +54 -0
- package/src/Drawer/Drawer.tsx +446 -0
- package/src/Drawer/atoms.ts +4 -0
- package/src/Drawer/components/DialogActions/DialogActions.tsx +33 -0
- package/src/Drawer/components/DialogContent/DialogContent.tsx +80 -0
- package/src/Drawer/components/DialogHeader/DialogHeader.tsx +68 -0
- package/src/EducationalPopover/EducationalPopover.tsx +174 -0
- package/src/FavoriteButton/FavoriteButton.tsx +64 -0
- package/src/FavoriteButton/components/IconOnlyFavoriteButton/IconOnlyFavoriteButton.tsx +80 -0
- package/src/FavoriteButton/components/LabeledAnimatedFavoriteButton/LabeledAnimatedFavoriteButton.tsx +179 -0
- package/src/FavoriteButton/components/LabeledFavoriteButton/LabeledFavoriteButton.tsx +71 -0
- package/src/FavoriteButton/components/SmallHeartStraightIcon/SmallHeartStraightIcon.tsx +14 -0
- package/src/FavoriteButton/hooks/useFavoriteButtonState.ts +30 -0
- package/src/FavoriteButton/index.ts +2 -0
- package/src/FavoriteButton/types/favoriteButton.ts +87 -0
- package/src/FeatureFlags/devTools/FeatureFlagDevToolsUI.tsx +226 -0
- package/src/FeatureFlags/devTools/getFeatureFlagCookieOverrides.ts +30 -0
- package/src/FeatureFlags/devTools/utils/cookies.ts +169 -0
- package/src/FeatureFlags/hooks/index.ts +2 -0
- package/src/FeatureFlags/hooks/useFeatureFlag.tsx +19 -0
- package/src/FeatureFlags/hooks/useFeatureFlags.tsx +15 -0
- package/src/FileUpload/components/FileCard/FileCard.tsx +50 -0
- package/src/FileUpload/components/FileDropzone/FileDropzone.tsx +221 -0
- package/src/FileUpload/components/FileDropzone/components/DropzoneContent/DropzoneContent.tsx +28 -0
- package/src/FileUpload/components/FileDropzone/components/DropzoneContent/DropzoneText.tsx +81 -0
- package/src/FileUpload/components/FileDropzone/components/FileDropzoneDebugger/FileDropzoneDebugger.tsx +40 -0
- package/src/FileUpload/components/FileDropzone/components/FileDropzoneDebugger/FileRejectionsDisplay.tsx +110 -0
- package/src/FileUpload/components/FileDropzoneOverlay/FileDropzoneOverlay.tsx +183 -0
- package/src/FileUpload/components/FileDropzoneOverlay/components/OverlayDropzoneContent.tsx +146 -0
- package/src/FileUpload/components/FileDropzoneOverlay/components/OverlayDropzoneDragText.tsx +42 -0
- package/src/FileUpload/components/FileDropzoneOverlay/styles.ts +79 -0
- package/src/FileUpload/components/FilePreviewList/FilePreviewList.tsx +251 -0
- package/src/FileUpload/components/FilePreviewList/virtualizerComponents/FilePreviewVirtualizedList/FilePreviewVirtualizedList.tsx +88 -0
- package/src/FileUpload/components/FileUpload/FileUpload.tsx +63 -0
- package/src/FileUpload/components/FileUploadCanvas/FileUploadCanvas.tsx +125 -0
- package/src/FileUpload/components/GridFileCard/GridFileCard.tsx +364 -0
- package/src/FileUpload/components/GridFileCard/utils/sortable.ts +48 -0
- package/src/FileUpload/components/ListFileCard/ListFileCard.tsx +259 -0
- package/src/FileUpload/components/types.ts +78 -0
- package/src/FileUpload/hooks/filePreview/useImageFilePreviewUrl.ts +62 -0
- package/src/FileUpload/hooks/index.ts +11 -0
- package/src/FileUpload/hooks/upload/useHandleDragEnter/useHandleDragEnter.ts +154 -0
- package/src/FileUpload/hooks/upload/useHandleDrop/createFileRejectionHelpers.ts +273 -0
- package/src/FileUpload/hooks/upload/useHandleDrop/useHandleDrop.ts +153 -0
- package/src/FileUpload/hooks/upload/useUploadAvailability/useUploadAvailability.ts +44 -0
- package/src/FileUpload/hooks/validation/createDropzoneValidator.ts +41 -0
- package/src/FileUpload/hooks/validation/useFileValidation.ts +25 -0
- package/src/FileUpload/hooks/validation/useFileValidationLogic.ts +107 -0
- package/src/FileUpload/hooks/validation/useValidationMessages.ts +92 -0
- package/src/FileUpload/hooks/validation/useValidationState.ts +171 -0
- package/src/FileUpload/index.ts +57 -0
- package/src/FileUpload/providers/FileUploadProvider.tsx +219 -0
- package/src/FileUpload/providers/UploadValidationProvider.tsx +159 -0
- package/src/FileUpload/testUtils/mockFilesAndImages.ts +64 -0
- package/src/FileUpload/testUtils/testUtils.ts +111 -0
- package/src/FileUpload/types/commonTypes.ts +267 -0
- package/src/FileUpload/types/index.ts +31 -0
- package/src/FileUpload/types/sharedTypes.ts +159 -0
- package/src/FileUpload/utils/constants.ts +79 -0
- package/src/FileUpload/utils/createMessageContext.ts +180 -0
- package/src/FileUpload/utils/getFileExtensionsFromAcceptedTypes.ts +73 -0
- package/src/FileUpload/utils/getFilePluralizationText.ts +68 -0
- package/src/FileUpload/utils/getMimeTypes.ts +26 -0
- package/src/FileUpload/utils/messageUtils.ts +41 -0
- package/src/FileUpload/utils/styles.ts +68 -0
- package/src/FormLabel/FormLabel.tsx +212 -0
- package/src/IconButton/IconButton.tsx +154 -0
- package/src/Icons/CreditCardIcon/CreditCardIcon.tsx +73 -0
- package/src/Icons/CreditCardIcon/cardIcons.tsx +270 -0
- package/src/Icons/IconBase.tsx +133 -0
- package/src/Icons/anyIcon.ts +3 -0
- package/src/Icons/generatedIcons/Archive.tsx +48 -0
- package/src/Icons/generatedIcons/ArrowClockwise.tsx +48 -0
- package/src/Icons/generatedIcons/ArrowDown.tsx +48 -0
- package/src/Icons/generatedIcons/ArrowLeft.tsx +48 -0
- package/src/Icons/generatedIcons/ArrowRight.tsx +48 -0
- package/src/Icons/generatedIcons/ArrowSquareOut.tsx +51 -0
- package/src/Icons/generatedIcons/ArrowSquareRight.tsx +51 -0
- package/src/Icons/generatedIcons/ArrowUp.tsx +48 -0
- package/src/Icons/generatedIcons/ArrowsCounterClockwise.tsx +48 -0
- package/src/Icons/generatedIcons/ArrowsLeftRight.tsx +48 -0
- package/src/Icons/generatedIcons/ArrowsOutCardinal.tsx +48 -0
- package/src/Icons/generatedIcons/Bank.tsx +48 -0
- package/src/Icons/generatedIcons/Bell.tsx +51 -0
- package/src/Icons/generatedIcons/BookBookmark.tsx +51 -0
- package/src/Icons/generatedIcons/BookmarksSimple.tsx +51 -0
- package/src/Icons/generatedIcons/Broadcast.tsx +48 -0
- package/src/Icons/generatedIcons/CalendarBlank.tsx +48 -0
- package/src/Icons/generatedIcons/CalendarStar.tsx +51 -0
- package/src/Icons/generatedIcons/Camera.tsx +51 -0
- package/src/Icons/generatedIcons/CaretDown.tsx +48 -0
- package/src/Icons/generatedIcons/CaretLeft.tsx +48 -0
- package/src/Icons/generatedIcons/CaretRight.tsx +48 -0
- package/src/Icons/generatedIcons/CaretUp.tsx +48 -0
- package/src/Icons/generatedIcons/Certificate.tsx +51 -0
- package/src/Icons/generatedIcons/ChartBar.tsx +48 -0
- package/src/Icons/generatedIcons/Check.tsx +51 -0
- package/src/Icons/generatedIcons/CheckCircle.tsx +48 -0
- package/src/Icons/generatedIcons/CirclesFour.tsx +51 -0
- package/src/Icons/generatedIcons/Clock.tsx +48 -0
- package/src/Icons/generatedIcons/ClockCountdown.tsx +48 -0
- package/src/Icons/generatedIcons/Close.tsx +51 -0
- package/src/Icons/generatedIcons/CloudArrowUp.tsx +51 -0
- package/src/Icons/generatedIcons/CloudWarning.tsx +51 -0
- package/src/Icons/generatedIcons/Code.tsx +48 -0
- package/src/Icons/generatedIcons/Compass.tsx +51 -0
- package/src/Icons/generatedIcons/Confetti.tsx +51 -0
- package/src/Icons/generatedIcons/Copy.tsx +48 -0
- package/src/Icons/generatedIcons/CornersOut.tsx +48 -0
- package/src/Icons/generatedIcons/CreditCard.tsx +48 -0
- package/src/Icons/generatedIcons/Crown.tsx +51 -0
- package/src/Icons/generatedIcons/CrownSimple.tsx +51 -0
- package/src/Icons/generatedIcons/CurrencyCircleDollar.tsx +48 -0
- package/src/Icons/generatedIcons/CurrencyDollarSimple.tsx +51 -0
- package/src/Icons/generatedIcons/Desktop.tsx +51 -0
- package/src/Icons/generatedIcons/Detective.tsx +51 -0
- package/src/Icons/generatedIcons/DotOutline.tsx +46 -0
- package/src/Icons/generatedIcons/DotsSixVertical.tsx +51 -0
- package/src/Icons/generatedIcons/DotsThreeOutline.tsx +51 -0
- package/src/Icons/generatedIcons/DotsThreeOutlineVertical.tsx +51 -0
- package/src/Icons/generatedIcons/DownloadSimple.tsx +51 -0
- package/src/Icons/generatedIcons/EnvelopeSimple.tsx +48 -0
- package/src/Icons/generatedIcons/Eraser.tsx +51 -0
- package/src/Icons/generatedIcons/Eye.tsx +51 -0
- package/src/Icons/generatedIcons/EyeSlash.tsx +51 -0
- package/src/Icons/generatedIcons/FacebookLogo.tsx +48 -0
- package/src/Icons/generatedIcons/FileArchive.tsx +48 -0
- package/src/Icons/generatedIcons/FileArrowDown.tsx +48 -0
- package/src/Icons/generatedIcons/FileCsv.tsx +48 -0
- package/src/Icons/generatedIcons/FilePdf.tsx +48 -0
- package/src/Icons/generatedIcons/FileText.tsx +48 -0
- package/src/Icons/generatedIcons/Files.tsx +51 -0
- package/src/Icons/generatedIcons/Fire.tsx +51 -0
- package/src/Icons/generatedIcons/Flag.tsx +51 -0
- package/src/Icons/generatedIcons/FlagBannerFold.tsx +48 -0
- package/src/Icons/generatedIcons/FloppyDisk.tsx +51 -0
- package/src/Icons/generatedIcons/Gauge.tsx +51 -0
- package/src/Icons/generatedIcons/Gavel.tsx +51 -0
- package/src/Icons/generatedIcons/Gear.tsx +51 -0
- package/src/Icons/generatedIcons/GlobeHemisphereWest.tsx +51 -0
- package/src/Icons/generatedIcons/GoogleLogo.tsx +48 -0
- package/src/Icons/generatedIcons/GridNine.tsx +51 -0
- package/src/Icons/generatedIcons/HandCoins.tsx +51 -0
- package/src/Icons/generatedIcons/HandbagSimple.tsx +51 -0
- package/src/Icons/generatedIcons/Headset.tsx +51 -0
- package/src/Icons/generatedIcons/HeartStraight.tsx +51 -0
- package/src/Icons/generatedIcons/HourglassLow.tsx +48 -0
- package/src/Icons/generatedIcons/House.tsx +51 -0
- package/src/Icons/generatedIcons/Image.tsx +51 -0
- package/src/Icons/generatedIcons/ImageSquare.tsx +51 -0
- package/src/Icons/generatedIcons/ImagesSquare.tsx +51 -0
- package/src/Icons/generatedIcons/Info.tsx +48 -0
- package/src/Icons/generatedIcons/InstagramLogo.tsx +51 -0
- package/src/Icons/generatedIcons/Lightning.tsx +48 -0
- package/src/Icons/generatedIcons/Link.tsx +51 -0
- package/src/Icons/generatedIcons/LinkedinLogo.tsx +51 -0
- package/src/Icons/generatedIcons/List.tsx +48 -0
- package/src/Icons/generatedIcons/Lock.tsx +51 -0
- package/src/Icons/generatedIcons/LockOpen.tsx +51 -0
- package/src/Icons/generatedIcons/MagnifyingGlass.tsx +48 -0
- package/src/Icons/generatedIcons/MapPin.tsx +51 -0
- package/src/Icons/generatedIcons/MapPinSimpleArea.tsx +48 -0
- package/src/Icons/generatedIcons/Medal.tsx +48 -0
- package/src/Icons/generatedIcons/Megaphone.tsx +48 -0
- package/src/Icons/generatedIcons/Minus.tsx +45 -0
- package/src/Icons/generatedIcons/Money.tsx +51 -0
- package/src/Icons/generatedIcons/Notches.tsx +48 -0
- package/src/Icons/generatedIcons/NotePencil.tsx +48 -0
- package/src/Icons/generatedIcons/Package.tsx +51 -0
- package/src/Icons/generatedIcons/PaintBrush.tsx +51 -0
- package/src/Icons/generatedIcons/PaperPlaneTilt.tsx +51 -0
- package/src/Icons/generatedIcons/Paperclip.tsx +51 -0
- package/src/Icons/generatedIcons/Pause.tsx +51 -0
- package/src/Icons/generatedIcons/PencilLine.tsx +51 -0
- package/src/Icons/generatedIcons/PencilRuler.tsx +51 -0
- package/src/Icons/generatedIcons/PencilSimple.tsx +51 -0
- package/src/Icons/generatedIcons/Phone.tsx +51 -0
- package/src/Icons/generatedIcons/PinterestLogo.tsx +51 -0
- package/src/Icons/generatedIcons/Play.tsx +51 -0
- package/src/Icons/generatedIcons/Plus.tsx +51 -0
- package/src/Icons/generatedIcons/PlusCircle.tsx +48 -0
- package/src/Icons/generatedIcons/Printer.tsx +51 -0
- package/src/Icons/generatedIcons/Question.tsx +48 -0
- package/src/Icons/generatedIcons/Receipt.tsx +51 -0
- package/src/Icons/generatedIcons/Rows.tsx +51 -0
- package/src/Icons/generatedIcons/SealCheck.tsx +51 -0
- package/src/Icons/generatedIcons/SelectionSlash.tsx +48 -0
- package/src/Icons/generatedIcons/ShareNetwork.tsx +51 -0
- package/src/Icons/generatedIcons/ShieldCheck.tsx +51 -0
- package/src/Icons/generatedIcons/ShieldStar.tsx +51 -0
- package/src/Icons/generatedIcons/ShoppingCart.tsx +48 -0
- package/src/Icons/generatedIcons/ShuffleAngular.tsx +48 -0
- package/src/Icons/generatedIcons/SidebarSimple.tsx +48 -0
- package/src/Icons/generatedIcons/SlidersHorizontal.tsx +51 -0
- package/src/Icons/generatedIcons/Smiley.tsx +48 -0
- package/src/Icons/generatedIcons/Sparkle.tsx +51 -0
- package/src/Icons/generatedIcons/SpinnerGap.tsx +48 -0
- package/src/Icons/generatedIcons/StackPlus.tsx +48 -0
- package/src/Icons/generatedIcons/Star.tsx +51 -0
- package/src/Icons/generatedIcons/Storefront.tsx +51 -0
- package/src/Icons/generatedIcons/Swap.tsx +51 -0
- package/src/Icons/generatedIcons/Tag.tsx +51 -0
- package/src/Icons/generatedIcons/ThumbsDown.tsx +48 -0
- package/src/Icons/generatedIcons/ThumbsUp.tsx +48 -0
- package/src/Icons/generatedIcons/Toolbox.tsx +48 -0
- package/src/Icons/generatedIcons/Trash.tsx +48 -0
- package/src/Icons/generatedIcons/TrendUp.tsx +48 -0
- package/src/Icons/generatedIcons/Trophy.tsx +51 -0
- package/src/Icons/generatedIcons/Truck.tsx +51 -0
- package/src/Icons/generatedIcons/UploadSimple.tsx +51 -0
- package/src/Icons/generatedIcons/User.tsx +48 -0
- package/src/Icons/generatedIcons/Users.tsx +48 -0
- package/src/Icons/generatedIcons/UsersThree.tsx +51 -0
- package/src/Icons/generatedIcons/VideoCamera.tsx +51 -0
- package/src/Icons/generatedIcons/Warning.tsx +51 -0
- package/src/Icons/generatedIcons/WarningCircle.tsx +48 -0
- package/src/Icons/generatedIcons/WifiHigh.tsx +51 -0
- package/src/Icons/generatedIcons/XCircle.tsx +48 -0
- package/src/Icons/generatedIcons/XLogo.tsx +48 -0
- package/src/Icons/generatedIcons/YoutubeLogo.tsx +51 -0
- package/src/Icons/importedIcons.ts +152 -0
- package/src/Icons/index.ts +149 -0
- package/src/Icons/socialIcons/appleSocialIcon.tsx +50 -0
- package/src/Icons/socialIcons/facebookSocialIcon.tsx +41 -0
- package/src/Icons/socialIcons/googleSocialIcon.tsx +134 -0
- package/src/ImageCluster/ImageCluster.tsx +125 -0
- package/src/ImageSlider/ImageSlider.tsx +582 -0
- package/src/ImageSlider/ImageSlider.types.ts +90 -0
- package/src/ImageSlider/components/IndexIndicator/IndexIndicator.tsx +21 -0
- package/src/ImageSlider/components/NavigationButtons/NavigationButtons.tsx +113 -0
- package/src/ImageSlider/components/ResponsiveImage/ResponsiveImage.tsx +114 -0
- package/src/ImageSlider/components/ResponsiveImage/index.ts +1 -0
- package/src/ImageSlider/components/Thumbnails/Thumbnails.tsx +184 -0
- package/src/ImageSlider/constants.ts +59 -0
- package/src/ImageSlider/hooks/index.ts +3 -0
- package/src/ImageSlider/hooks/useImageSlider.ts +57 -0
- package/src/ImageSlider/hooks/useImageSliderNavigation.ts +133 -0
- package/src/ImageSlider/hooks/useImageSliderScrollHandler.ts +171 -0
- package/src/ImageSlider/index.ts +3 -0
- package/src/ImageSlider/utils/imageOptimization.ts +97 -0
- package/src/ImageSlider/utils/index.ts +1 -0
- package/src/InlineNotification/InlineNotification.tsx +95 -0
- package/src/JumpMenu/JumpMenu.tsx +395 -0
- package/src/JumpMenu/components/JumpMenuItem/JumpMenuItem.tsx +62 -0
- package/src/JumpMenu/hooks/useContainerTracking.ts +171 -0
- package/src/JumpMenu/hooks/useIntersectionObserver.ts +77 -0
- package/src/JumpMenu/hooks/useKeyboardNavigation.ts +102 -0
- package/src/JumpMenu/hooks/useResizeObserver.ts +53 -0
- package/src/JumpMenu/hooks/useSectionObserver.ts +102 -0
- package/src/JumpMenu/index.ts +2 -0
- package/src/JumpMenu/types/index.ts +19 -0
- package/src/Loading/Loading.tsx +39 -0
- package/src/Loading/components/LoadingDot/LoadingDot.tsx +16 -0
- package/src/LoadingSpinner/LoadingSpinner.tsx +20 -0
- package/src/Menu/Menu.tsx +372 -0
- package/src/Menu/components/MenuDivider/MenuDivider.tsx +5 -0
- package/src/Menu/components/MenuItem/MenuItem.tsx +298 -0
- package/src/Menu/context/menuContext.tsx +20 -0
- package/src/Menu/hooks/useMenu.tsx +18 -0
- package/src/Menu/index.ts +3 -0
- package/src/Modal/ComposableModal.tsx +313 -0
- package/src/Modal/Modal.tsx +231 -0
- package/src/Modal/components/BackButton/BackButton.tsx +43 -0
- package/src/Modal/components/Backdrop/Backdrop.tsx +62 -0
- package/src/Modal/components/CloseButton/CloseButton.tsx +55 -0
- package/src/Modal/components/ModalActions/ModalActions.tsx +135 -0
- package/src/Modal/components/ModalContent/ModalContent.tsx +163 -0
- package/src/Modal/components/ModalHeader/ModalHeader.tsx +84 -0
- package/src/Modal/components/ModalHeader/hooks/useHeaderAnimation.tsx +49 -0
- package/src/Modal/components/ModalProgressSteps/ModalProgressSteps.tsx +26 -0
- package/src/Modal/components/ModalSubTitle/ModalSubTitle.tsx +29 -0
- package/src/Modal/components/ModalTitle/ModalTitle.tsx +22 -0
- package/src/Modal/components/PreventModalScroll/PreventModalScroll.tsx +106 -0
- package/src/Modal/components/index.ts +12 -0
- package/src/Modal/context.ts +33 -0
- package/src/Modal/hooks/useCloseModal.ts +133 -0
- package/src/NotificationBadge/NotificationBadge.tsx +34 -0
- package/src/Pagination/AdvancedPagination.tsx +48 -0
- package/src/Pagination/Pagination.tsx +216 -0
- package/src/Pagination/components/AdvancedPaginator/AdvancedPaginator.tsx +52 -0
- package/src/Pagination/components/AdvancedPaginator/components/PageSelect/PageSelect.tsx +43 -0
- package/src/Pagination/components/ItemCountDisplay/ItemCountDisplay.tsx +32 -0
- package/src/Pagination/components/ItemCountSelect/ItemCountSelect.tsx +33 -0
- package/src/Pagination/index.tsx +3 -0
- package/src/Pagination/paginationProvider.tsx +234 -0
- package/src/Pagination/utils.tsx +36 -0
- package/src/PhoneInput/PhoneInput.tsx +509 -0
- package/src/PhoneInput/useDropdownLogic.tsx +163 -0
- package/src/ProgressCircle/ProgressCircle.tsx +246 -0
- package/src/ProgressCircle/hooks/useProgressStatusTransitions.ts +49 -0
- package/src/ProgressCircle/utils/progressCircle.constants.ts +27 -0
- package/src/ProgressSteps/ProgressSteps.tsx +160 -0
- package/src/SaveConfetti/SaveConfetti.tsx +277 -0
- package/src/SaveConfetti/index.ts +2 -0
- package/src/SearchInput/SearchInput.tsx +236 -0
- package/src/SegmentedControl/SegmentedControl.tsx +111 -0
- package/src/SegmentedControl/SegmentedControlGroup.tsx +94 -0
- package/src/SegmentedControl/index.ts +4 -0
- package/src/Select/Select.tsx +154 -0
- package/src/Select/SelectAsync.tsx +13 -0
- package/src/Select/SelectAsyncCreatable.tsx +14 -0
- package/src/Select/SelectCreatable.tsx +12 -0
- package/src/Select/reexportedComponents.tsx +5 -0
- package/src/Select/selectComponents.tsx +306 -0
- package/src/Skeleton/Skeleton.tsx +13 -0
- package/src/SplitButton/SplitButton.tsx +298 -0
- package/src/SplitButton/SplitButtonTrigger.tsx +55 -0
- package/src/StarRating/StarRating.tsx +165 -0
- package/src/StarRating/components/StarComponent/StarComponent.tsx +44 -0
- package/src/Table/Table.tsx +474 -0
- package/src/Table/components/TableHeader/TableHeader.tsx +166 -0
- package/src/Table/components/TablePagination/TablePagination.tsx +18 -0
- package/src/Table/components/TablePagination/components/ItemCountDisplay/ItemCountDisplay.tsx +17 -0
- package/src/Table/components/TablePagination/components/ItemCountSelect/ItemCountSelect.tsx +31 -0
- package/src/Table/components/TablePagination/components/TablePaginator/TablePaginator.tsx +37 -0
- package/src/Table/components/TablePagination/components/TablePaginator/components/PageSelect/PageSelect.tsx +32 -0
- package/src/Table/components/TableRow/TableRows.tsx +147 -0
- package/src/Table/components/TableRow/components/TableRowCell/TableRowCell.tsx +49 -0
- package/src/Table/components/TableShadow/TableShadow.tsx +46 -0
- package/src/Table/index.ts +2 -0
- package/src/Table/sharedState.ts +30 -0
- package/src/Table/sharedStyles.ts +1 -0
- package/src/Table/types.ts +55 -0
- package/src/Tabs/Tabs.tsx +358 -0
- package/src/TextArea/TextArea.tsx +157 -0
- package/src/TextInput/TextInput.tsx +173 -0
- package/src/Toast/Toast.tsx +64 -0
- package/src/Toast/components/ToastContainer/ToastContainer.tsx +48 -0
- package/src/Toast/index.ts +2 -0
- package/src/Toast/types/role.ts +1 -0
- package/src/Toast/utils/getIcon.tsx +41 -0
- package/src/ToggleSwitch/ToggleSwitch.tsx +188 -0
- package/src/Tooltip/InfoIconTooltip.tsx +47 -0
- package/src/Tooltip/Tooltip.tsx +41 -0
- package/src/Typography/InlineButton/InlineButton.tsx +166 -0
- package/src/Typography/Links/Links.tsx +113 -0
- package/src/Typography/Text/Text.tsx +239 -0
- package/src/ViewMore/ViewMore.tsx +226 -0
- package/src/WebRTCPlayer/WebRTCPlayer.tsx +325 -0
- package/src/WebRTCPlayer/adaptor/NativeWebRTCAdaptor.ts +588 -0
- package/src/WebRTCPlayer/hooks/useWebRTCStream.ts +571 -0
- package/src/WebRTCPlayer/index.ts +22 -0
- package/src/WebRTCPlayer/types.ts +95 -0
- package/src/breakpoints/index.tsx +1 -0
- package/src/breakpoints/utils.tsx +50 -0
- package/src/declarations.d.ts +7 -0
- package/src/grid/gridHighlighter.tsx +83 -0
- package/src/grid/index.ts +3 -0
- package/src/grid/pageGrid.tsx +37 -0
- package/src/grid/useSubGridCSS.tsx +214 -0
- package/src/hooks/useHorizontalScrollFade.ts +44 -0
- package/src/hooks/usePrevious.ts +14 -0
- package/src/index.ts +351 -0
- package/src/intl/index.ts +4 -0
- package/src/intl/utils.ts +67 -0
- package/src/mixins/horizontalScrollFadeMixin.ts +56 -0
- package/src/mixins/index.ts +18 -0
- package/src/mixins/propMixins.ts +389 -0
- package/src/providers/createContextProvider.ts +22 -0
- package/src/providers/designSystemProvider.tsx +218 -0
- package/src/providers/errorBoundaryProvider.tsx +179 -0
- package/src/providers/featureFlagProvider.tsx +18 -0
- package/src/providers/gridSizeProvider.tsx +23 -0
- package/src/providers/index.ts +12 -0
- package/src/providers/linkProvider.tsx +32 -0
- package/src/providers/normalize.tsx +93 -0
- package/src/providers/targets/DatePickerTarget.tsx +10 -0
- package/src/providers/targets/ModalTarget.tsx +14 -0
- package/src/providers/targets/TimePickerTarget.tsx +10 -0
- package/src/providers/themeContext.tsx +24 -0
- package/src/providers/windowSizeProvider.tsx +125 -0
- package/src/spacing/index.ts +1 -0
- package/src/spacing/spacing.ts +11 -0
- package/src/utils/countriesWithISOCodes.ts +1419 -0
- package/src/utils/dateTimeFormat.ts +257 -0
- package/src/utils/effectEventListener.ts +11 -0
- package/src/utils/formatFileSize.ts +18 -0
- package/src/utils/isClientSide.ts +1 -0
- package/src/utils/keepTransition.ts +15 -0
- package/src/utils/nodeEnv.ts +9 -0
- package/src/utils/smoothScrollTo.ts +47 -0
- package/src/utils/utilityTypes.ts +13 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { type ErrorInfo, Component, createContext, type ReactNode, useCallback, useContext } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Button } from '../Button/Button';
|
|
4
|
+
import { BodyPrimary, BodySecondary } from '../Typography/Text/Text';
|
|
5
|
+
|
|
6
|
+
export type ErrorBoundaryMeta = {
|
|
7
|
+
/** Additional metadata properties. */
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
/** Required name to identify the error boundary. */
|
|
10
|
+
name: string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Callback function when an error is caught.
|
|
15
|
+
*/
|
|
16
|
+
type OnErrorCallback = (error: Error, errorInfo: ErrorInfo, meta: ErrorBoundaryMeta) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Default fallback render function.
|
|
19
|
+
*/
|
|
20
|
+
type DefaultFallbackFunction = (error: Error, resetError: () => void) => ReactNode;
|
|
21
|
+
|
|
22
|
+
type ErrorBoundaryContextValue = {
|
|
23
|
+
defaultFallback?: DefaultFallbackFunction;
|
|
24
|
+
onError: OnErrorCallback;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const ErrorBoundaryContext = createContext<ErrorBoundaryContextValue | undefined>(undefined);
|
|
28
|
+
|
|
29
|
+
type ErrorBoundaryProviderProps = {
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Optional default fallback UI to use across all ErrorBoundaries in this provider.
|
|
33
|
+
* Individual ErrorBoundaries can still override this with their own `fallback` prop.
|
|
34
|
+
*/
|
|
35
|
+
defaultFallback?: DefaultFallbackFunction;
|
|
36
|
+
/** Callback when an error is caught. */
|
|
37
|
+
onError: OnErrorCallback;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Provider that powers all ErrorBoundary components below it.
|
|
42
|
+
* A global provider can be overwritten by a more specific provider for section-level handling.
|
|
43
|
+
*/
|
|
44
|
+
export const ErrorBoundaryProvider = ({ children, defaultFallback, onError }: ErrorBoundaryProviderProps) => (
|
|
45
|
+
<ErrorBoundaryContext.Provider value={{ defaultFallback, onError }}>{children}</ErrorBoundaryContext.Provider>
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
ErrorBoundaryProvider.displayName = 'ErrorBoundaryProvider';
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Hook to get the error callback from context.
|
|
52
|
+
*/
|
|
53
|
+
export const useOnError = () => {
|
|
54
|
+
const context = useContext(ErrorBoundaryContext);
|
|
55
|
+
return context?.onError;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Hook that provides a callback with resetError functionality.
|
|
60
|
+
* Useful for creating custom error UIs that need to reset the boundary.
|
|
61
|
+
*/
|
|
62
|
+
export const useErrorBoundaryReset = () => {
|
|
63
|
+
const onError = useOnError();
|
|
64
|
+
|
|
65
|
+
return useCallback(
|
|
66
|
+
(error: Error, errorInfo: ErrorInfo, meta: ErrorBoundaryMeta) => {
|
|
67
|
+
onError?.(error, errorInfo, meta);
|
|
68
|
+
},
|
|
69
|
+
[onError]
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
type ErrorBoundaryState = {
|
|
74
|
+
hasError: boolean;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
type ErrorBoundaryProps = {
|
|
78
|
+
children: ReactNode;
|
|
79
|
+
/** Optional custom fallback UI to render when an error occurs. */
|
|
80
|
+
fallback?: (error: Error, resetError: () => void) => ReactNode;
|
|
81
|
+
/**
|
|
82
|
+
* Force the error boundary to throw an error for testing/demo purposes.
|
|
83
|
+
* Useful for previewing fallback UI in Storybook or tests.
|
|
84
|
+
*/
|
|
85
|
+
forceError?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Metadata to identify and provide context about this error boundary.
|
|
88
|
+
* The `name` field is required.
|
|
89
|
+
*/
|
|
90
|
+
meta: ErrorBoundaryMeta;
|
|
91
|
+
/** Optional custom onError callback that overrides the context callback. */
|
|
92
|
+
onError?: OnErrorCallback;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Component that throws an error for testing/demo purposes.
|
|
97
|
+
*/
|
|
98
|
+
const ErrorThrower = ({ message }: { message: string }) => {
|
|
99
|
+
throw new Error(message);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// React error boundaries still require class components.
|
|
103
|
+
/**
|
|
104
|
+
* Catches errors in children, reports them through props or provider context, then renders a fallback UI.
|
|
105
|
+
*/
|
|
106
|
+
export class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
107
|
+
static contextType = ErrorBoundaryContext;
|
|
108
|
+
|
|
109
|
+
static getDerivedStateFromError(): ErrorBoundaryState {
|
|
110
|
+
return { hasError: true };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
declare context: React.ContextType<typeof ErrorBoundaryContext>;
|
|
114
|
+
private errorCache: { error: Error; errorInfo: ErrorInfo } | null = null;
|
|
115
|
+
|
|
116
|
+
constructor(props: ErrorBoundaryProps) {
|
|
117
|
+
super(props);
|
|
118
|
+
this.state = { hasError: false };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo) {
|
|
122
|
+
// Cache the error for the fallback render.
|
|
123
|
+
this.errorCache = { error, errorInfo };
|
|
124
|
+
// Force a re-render now that errorCache is set.
|
|
125
|
+
this.forceUpdate();
|
|
126
|
+
|
|
127
|
+
// Call the onError callback from props or context with metadata.
|
|
128
|
+
const onError = this.props.onError || this.context?.onError;
|
|
129
|
+
onError?.(error, errorInfo, this.props.meta);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
resetError = () => {
|
|
133
|
+
this.errorCache = null;
|
|
134
|
+
this.setState({ hasError: false });
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
render() {
|
|
138
|
+
if (this.state.hasError) {
|
|
139
|
+
// Wait for errorCache to be populated by componentDidCatch.
|
|
140
|
+
if (!this.errorCache) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Priority 1: If a custom fallback is provided on the ErrorBoundary, use it.
|
|
145
|
+
if (this.props.fallback) {
|
|
146
|
+
return this.props.fallback(this.errorCache.error, this.resetError);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Priority 2: If a default fallback is provided by the provider, use it.
|
|
150
|
+
if (this.context?.defaultFallback) {
|
|
151
|
+
return this.context.defaultFallback(this.errorCache.error, this.resetError);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Priority 3: Built-in default fallback.
|
|
155
|
+
return (
|
|
156
|
+
<div className="flex h-full w-full flex-col items-center justify-center gap-sm rounded-container border border-border-secondary p-md text-center">
|
|
157
|
+
<div className="flex flex-col gap-xs">
|
|
158
|
+
<BodyPrimary>Something went wrong</BodyPrimary>
|
|
159
|
+
<BodySecondary color="secondary">We're working on resolving the issue</BodySecondary>
|
|
160
|
+
</div>
|
|
161
|
+
<Button
|
|
162
|
+
onClick={this.resetError}
|
|
163
|
+
size="sm"
|
|
164
|
+
variant="outlined"
|
|
165
|
+
>
|
|
166
|
+
Try Again
|
|
167
|
+
</Button>
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Force an error for testing/demo purposes.
|
|
173
|
+
if (this.props.forceError) {
|
|
174
|
+
return <ErrorThrower message={`Forced error in ${this.props.meta.name}`} />;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return this.props.children;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createContext, type ReactNode, useContext } from 'react';
|
|
2
|
+
|
|
3
|
+
export type FeatureFlags = Record<string, boolean | undefined>;
|
|
4
|
+
|
|
5
|
+
const FeatureFlagContext = createContext<FeatureFlags>({});
|
|
6
|
+
|
|
7
|
+
type FeatureFlagProviderProps = {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
featureFlags: FeatureFlags;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const FeatureFlagProvider = ({ children, featureFlags }: FeatureFlagProviderProps) => (
|
|
13
|
+
<FeatureFlagContext.Provider value={featureFlags}>{children}</FeatureFlagContext.Provider>
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
FeatureFlagProvider.displayName = 'FeatureFlagProvider';
|
|
17
|
+
|
|
18
|
+
export const useFeatureFlagsContext = () => useContext(FeatureFlagContext);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { breakpoints } from '@evolve.ui/theme-system/themes/common';
|
|
2
|
+
import { atom, useAtomValue } from 'jotai';
|
|
3
|
+
|
|
4
|
+
import { mobileAtom, widthAtom } from './windowSizeProvider';
|
|
5
|
+
|
|
6
|
+
const gridSizeAtom = atom<{
|
|
7
|
+
columnCount: number;
|
|
8
|
+
columnSize: number;
|
|
9
|
+
gapSize: number;
|
|
10
|
+
}>((get) => {
|
|
11
|
+
const width = get(widthAtom);
|
|
12
|
+
const mobile = get(mobileAtom);
|
|
13
|
+
|
|
14
|
+
return mobile
|
|
15
|
+
? { columnCount: 4, columnSize: (width - 16 * 5) / 4, gapSize: 16 }
|
|
16
|
+
: {
|
|
17
|
+
columnCount: 12,
|
|
18
|
+
columnSize: (Math.min(width, breakpoints.mdMaxValue) - 24 * 13) / 12,
|
|
19
|
+
gapSize: 24,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export const useGridSize = () => useAtomValue(gridSizeAtom);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './windowSizeProvider';
|
|
2
|
+
export * from './gridSizeProvider';
|
|
3
|
+
export * from './designSystemProvider';
|
|
4
|
+
export * from './linkProvider';
|
|
5
|
+
export * from './errorBoundaryProvider';
|
|
6
|
+
export * from './featureFlagProvider';
|
|
7
|
+
export * from './themeContext';
|
|
8
|
+
export * from './createContextProvider';
|
|
9
|
+
export * from './normalize';
|
|
10
|
+
export * from './targets/ModalTarget';
|
|
11
|
+
export * from './targets/DatePickerTarget';
|
|
12
|
+
export * from './targets/TimePickerTarget';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createContext, type MouseEvent, type ReactNode, useCallback, useContext } from 'react';
|
|
2
|
+
|
|
3
|
+
const LinkContext = createContext<(href: string) => void>(() => {
|
|
4
|
+
throw new Error(
|
|
5
|
+
'No onLinkClick found. Did you forget to add onLinkClick to DesignSystemProvider (or the separate LinkProvider)?'
|
|
6
|
+
);
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
type LinkProviderProps = {
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
onLinkClick: (href: string) => void;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const LinkProvider = ({ children, onLinkClick }: LinkProviderProps) => (
|
|
15
|
+
<LinkContext.Provider value={onLinkClick}>{children}</LinkContext.Provider>
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
LinkProvider.displayName = 'LinkProvider';
|
|
19
|
+
|
|
20
|
+
export const useOnLinkClick = () => useContext(LinkContext);
|
|
21
|
+
|
|
22
|
+
export const usePreventDefaultLinkOnClick = () => {
|
|
23
|
+
const onLinkClick = useOnLinkClick();
|
|
24
|
+
|
|
25
|
+
return useCallback(
|
|
26
|
+
(href: string) => (event: MouseEvent<HTMLAnchorElement>) => {
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
onLinkClick(href);
|
|
29
|
+
},
|
|
30
|
+
[onLinkClick]
|
|
31
|
+
);
|
|
32
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { cn } from '@evolve.ui/theme-system/cn';
|
|
2
|
+
import { forwardRef, type HTMLProps, useEffect } from 'react';
|
|
3
|
+
|
|
4
|
+
export const GLOBAL_NORMALIZE_CSS = `
|
|
5
|
+
html {
|
|
6
|
+
-webkit-font-smoothing: antialiased;
|
|
7
|
+
-moz-osx-font-smoothing: grayscale;
|
|
8
|
+
}
|
|
9
|
+
body {
|
|
10
|
+
margin: 0;
|
|
11
|
+
}
|
|
12
|
+
main {
|
|
13
|
+
display: block;
|
|
14
|
+
}
|
|
15
|
+
a {
|
|
16
|
+
background-color: transparent;
|
|
17
|
+
}
|
|
18
|
+
img {
|
|
19
|
+
border-style: none;
|
|
20
|
+
}
|
|
21
|
+
button,
|
|
22
|
+
input,
|
|
23
|
+
optgroup,
|
|
24
|
+
select,
|
|
25
|
+
textarea {
|
|
26
|
+
font-family: inherit;
|
|
27
|
+
font-size: 100%;
|
|
28
|
+
line-height: 1.15;
|
|
29
|
+
margin: 0;
|
|
30
|
+
}
|
|
31
|
+
button,
|
|
32
|
+
input {
|
|
33
|
+
overflow: visible;
|
|
34
|
+
}
|
|
35
|
+
button,
|
|
36
|
+
select {
|
|
37
|
+
text-transform: none;
|
|
38
|
+
}
|
|
39
|
+
button,
|
|
40
|
+
[type="button"],
|
|
41
|
+
[type="reset"],
|
|
42
|
+
[type="submit"] {
|
|
43
|
+
-webkit-appearance: button;
|
|
44
|
+
}
|
|
45
|
+
button::-moz-focus-inner,
|
|
46
|
+
[type="button"]::-moz-focus-inner,
|
|
47
|
+
[type="reset"]::-moz-focus-inner,
|
|
48
|
+
[type="submit"]::-moz-focus-inner {
|
|
49
|
+
border-style: none;
|
|
50
|
+
padding: 0;
|
|
51
|
+
}
|
|
52
|
+
*,
|
|
53
|
+
::before,
|
|
54
|
+
::after {
|
|
55
|
+
box-sizing: border-box;
|
|
56
|
+
}
|
|
57
|
+
`.trim();
|
|
58
|
+
|
|
59
|
+
export const GlobalNormalize = () => {
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
const style = document.createElement('style');
|
|
62
|
+
style.textContent = GLOBAL_NORMALIZE_CSS;
|
|
63
|
+
document.head.appendChild(style);
|
|
64
|
+
|
|
65
|
+
return () => {
|
|
66
|
+
style.remove();
|
|
67
|
+
};
|
|
68
|
+
}, []);
|
|
69
|
+
|
|
70
|
+
return null;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
GlobalNormalize.displayName = 'GlobalNormalize';
|
|
74
|
+
|
|
75
|
+
export const LocalNormalize = forwardRef<HTMLDivElement, HTMLProps<HTMLDivElement>>(
|
|
76
|
+
({ children, className, ...rest }, ref) => (
|
|
77
|
+
<div
|
|
78
|
+
className={cn(
|
|
79
|
+
'[text-size-adjust:100%]',
|
|
80
|
+
'm-0',
|
|
81
|
+
'antialiased',
|
|
82
|
+
'box-border [&_*]:box-border [&_::after]:box-border [&_::before]:box-border',
|
|
83
|
+
className
|
|
84
|
+
)}
|
|
85
|
+
ref={ref}
|
|
86
|
+
{...rest}
|
|
87
|
+
>
|
|
88
|
+
{children}
|
|
89
|
+
</div>
|
|
90
|
+
)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
LocalNormalize.displayName = 'LocalNormalize';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The place where the date picker popover is rendered using `createPortal`.
|
|
3
|
+
*
|
|
4
|
+
* DatePicker's `FloatingPortal` locates this slot via the `hui-datepicker-target` id.
|
|
5
|
+
*/
|
|
6
|
+
export const DatePickerTargetId = 'hui-datepicker-target';
|
|
7
|
+
|
|
8
|
+
export const DatePickerTarget = () => <div id={DatePickerTargetId} />;
|
|
9
|
+
|
|
10
|
+
DatePickerTarget.displayName = 'DatePickerTarget';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The place where the modal is rendered using `createPortal`.
|
|
3
|
+
*
|
|
4
|
+
* Consumers that portal into this slot (Modal, BottomSheet) locate it via the
|
|
5
|
+
* `hui-modal-target` class / id.
|
|
6
|
+
*/
|
|
7
|
+
export const ModalTarget = () => (
|
|
8
|
+
<div
|
|
9
|
+
className="hui-modal-target"
|
|
10
|
+
id="hui-modal-target"
|
|
11
|
+
/>
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
ModalTarget.displayName = 'ModalTarget';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The place where the time picker popover is rendered using `createPortal`.
|
|
3
|
+
*
|
|
4
|
+
* TimePicker's `FloatingPortal` locates this slot via the `hui-timepicker-target` id.
|
|
5
|
+
*/
|
|
6
|
+
export const TimePickerTargetId = 'hui-timepicker-target';
|
|
7
|
+
|
|
8
|
+
export const TimePickerTarget = () => <div id={TimePickerTargetId} />;
|
|
9
|
+
|
|
10
|
+
TimePickerTarget.displayName = 'TimePickerTarget';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CleanTheme } from '@evolve.ui/theme-system/themes/themeType';
|
|
2
|
+
|
|
3
|
+
import { createContext, useContext } from 'react';
|
|
4
|
+
|
|
5
|
+
const ThemeContext = createContext<CleanTheme | undefined>(undefined);
|
|
6
|
+
ThemeContext.displayName = 'ThemeContext';
|
|
7
|
+
|
|
8
|
+
export const ThemeProvider = ThemeContext.Provider;
|
|
9
|
+
|
|
10
|
+
export const useTheme = (): CleanTheme => {
|
|
11
|
+
const theme = useContext(ThemeContext);
|
|
12
|
+
|
|
13
|
+
if (!theme) {
|
|
14
|
+
throw new Error('useTheme must be used within DesignSystemProvider');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return theme;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/** @deprecated Renamed to `ThemeProvider`. This alias ships for one major and is removed in a future release. */
|
|
21
|
+
export const HammerThemeProvider = ThemeProvider;
|
|
22
|
+
|
|
23
|
+
/** @deprecated Renamed to `useTheme`. This alias ships for one major and is removed in a future release. */
|
|
24
|
+
export const useHammerTheme = useTheme;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { breakpoints } from '@evolve.ui/theme-system/themes/common';
|
|
2
|
+
import { atom, useAtomValue, useStore } from 'jotai';
|
|
3
|
+
import { type ReactNode, useEffect, useMemo } from 'react';
|
|
4
|
+
import { useThrottledCallback } from 'use-debounce';
|
|
5
|
+
|
|
6
|
+
import { isClientSide } from '../utils/isClientSide';
|
|
7
|
+
|
|
8
|
+
export const heightAtom = atom(isClientSide ? window.innerHeight : 0);
|
|
9
|
+
// Use window.innerWidth for accurate viewport width, including the scrollbar measurement area.
|
|
10
|
+
export const widthAtom = atom(isClientSide ? window.innerWidth : 0);
|
|
11
|
+
|
|
12
|
+
export const desktopAtom = atom((get) => get(widthAtom) >= breakpoints.smMinValue);
|
|
13
|
+
export const mobileAtom = atom((get) => get(widthAtom) <= breakpoints.xsMaxValue);
|
|
14
|
+
export const tabletAtom = atom(
|
|
15
|
+
(get) => get(widthAtom) >= breakpoints.smMinValue && get(widthAtom) <= breakpoints.smMaxValue
|
|
16
|
+
);
|
|
17
|
+
export const tabletOrMobileAtom = atom((get) => get(widthAtom) <= breakpoints.smMaxValue);
|
|
18
|
+
|
|
19
|
+
type WindowSizeProviderProps = {
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* Only applies to first render. Useful for SSR when the screen height is known.
|
|
23
|
+
*
|
|
24
|
+
* @default window.innerHeight ?? 0
|
|
25
|
+
*/
|
|
26
|
+
defaultHeight?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Only applies to first render. Useful for SSR when the screen width is known.
|
|
29
|
+
*
|
|
30
|
+
* @default window.innerWidth ?? 0
|
|
31
|
+
*/
|
|
32
|
+
defaultWidth?: number;
|
|
33
|
+
/**
|
|
34
|
+
* How often to refresh window size while resizing.
|
|
35
|
+
*
|
|
36
|
+
* Set this to milliseconds to wait, or `0` for per-animation-frame updates.
|
|
37
|
+
*/
|
|
38
|
+
windowSizeThrottle?: number;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const WindowSizeProvider = ({
|
|
42
|
+
children,
|
|
43
|
+
defaultHeight: givenDefaultHeight,
|
|
44
|
+
defaultWidth: givenDefaultWidth,
|
|
45
|
+
windowSizeThrottle = 0,
|
|
46
|
+
}: WindowSizeProviderProps) => {
|
|
47
|
+
const store = useStore();
|
|
48
|
+
|
|
49
|
+
useMemo(() => {
|
|
50
|
+
if (!isClientSide) {
|
|
51
|
+
// SSR: use provided defaults when available.
|
|
52
|
+
if (givenDefaultHeight) {
|
|
53
|
+
store.set(heightAtom, givenDefaultHeight);
|
|
54
|
+
}
|
|
55
|
+
if (givenDefaultWidth) {
|
|
56
|
+
store.set(widthAtom, givenDefaultWidth);
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Client-side: use provided defaults only when the browser reports zero.
|
|
62
|
+
const initialHeight = window.innerHeight === 0 && givenDefaultHeight ? givenDefaultHeight : window.innerHeight;
|
|
63
|
+
const initialWidth = window.innerWidth === 0 && givenDefaultWidth ? givenDefaultWidth : window.innerWidth;
|
|
64
|
+
|
|
65
|
+
if (initialHeight !== 0 && store.get(heightAtom) !== initialHeight) {
|
|
66
|
+
store.set(heightAtom, initialHeight);
|
|
67
|
+
}
|
|
68
|
+
if (initialWidth !== 0 && store.get(widthAtom) !== initialWidth) {
|
|
69
|
+
store.set(widthAtom, initialWidth);
|
|
70
|
+
}
|
|
71
|
+
// No need to rerender since we only want to allow initial values.
|
|
72
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
73
|
+
}, []);
|
|
74
|
+
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
if (!isClientSide) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Update from window if different and not using defaults.
|
|
81
|
+
const currentHeight = window.innerHeight === 0 && givenDefaultHeight ? givenDefaultHeight : window.innerHeight;
|
|
82
|
+
const currentWidth = window.innerWidth === 0 && givenDefaultWidth ? givenDefaultWidth : window.innerWidth;
|
|
83
|
+
|
|
84
|
+
if (store.get(heightAtom) !== currentHeight && currentHeight !== 0) {
|
|
85
|
+
store.set(heightAtom, currentHeight);
|
|
86
|
+
}
|
|
87
|
+
if (store.get(widthAtom) !== currentWidth && currentWidth !== 0) {
|
|
88
|
+
store.set(widthAtom, currentWidth);
|
|
89
|
+
}
|
|
90
|
+
}, [givenDefaultHeight, givenDefaultWidth, store]);
|
|
91
|
+
|
|
92
|
+
const handleResize = useThrottledCallback(
|
|
93
|
+
() => {
|
|
94
|
+
store.set(heightAtom, window.innerHeight);
|
|
95
|
+
store.set(widthAtom, window.innerWidth);
|
|
96
|
+
},
|
|
97
|
+
windowSizeThrottle,
|
|
98
|
+
{ trailing: true }
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
if (!isClientSide) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
window.addEventListener('resize', handleResize);
|
|
107
|
+
window.addEventListener('orientationchange', handleResize);
|
|
108
|
+
|
|
109
|
+
return () => {
|
|
110
|
+
window.removeEventListener('resize', handleResize);
|
|
111
|
+
window.removeEventListener('orientationchange', handleResize);
|
|
112
|
+
};
|
|
113
|
+
}, [handleResize]);
|
|
114
|
+
|
|
115
|
+
return children;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
WindowSizeProvider.displayName = 'WindowSizeProvider';
|
|
119
|
+
|
|
120
|
+
export const useWindowIsDesktop = () => useAtomValue(desktopAtom);
|
|
121
|
+
export const useWindowIsMobile = () => useAtomValue(mobileAtom);
|
|
122
|
+
export const useWindowIsTablet = () => useAtomValue(tabletAtom);
|
|
123
|
+
export const useWindowIsTabletOrMobile = () => useAtomValue(tabletOrMobileAtom);
|
|
124
|
+
export const useWindowHeight = () => useAtomValue(heightAtom);
|
|
125
|
+
export const useWindowWidth = () => useAtomValue(widthAtom);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LG, MD, SM, XL, XS, XXL, XXS, XXXL, XXXS } from './spacing';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { spacing as themeSpacing } from '@evolve.ui/theme-system/themes/common';
|
|
2
|
+
|
|
3
|
+
export const XXXS = themeSpacing.xxxs;
|
|
4
|
+
export const XXS = themeSpacing.xxs;
|
|
5
|
+
export const XS = themeSpacing.xs;
|
|
6
|
+
export const SM = themeSpacing.sm;
|
|
7
|
+
export const MD = themeSpacing.md;
|
|
8
|
+
export const LG = themeSpacing.lg;
|
|
9
|
+
export const XL = themeSpacing.xl;
|
|
10
|
+
export const XXL = themeSpacing.xxl;
|
|
11
|
+
export const XXXL = themeSpacing.xxxl;
|