@faststore/ui 1.9.4 → 1.9.10
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/CHANGELOG.md +744 -2291
- package/README.md +2 -0
- package/dist/atoms/Badge/Badge.d.ts +11 -11
- package/dist/atoms/Badge/Badge.js +6 -0
- package/dist/atoms/Badge/Badge.js.map +1 -0
- package/dist/atoms/Badge/index.d.ts +2 -2
- package/dist/atoms/Badge/index.js +2 -0
- package/dist/atoms/Badge/index.js.map +1 -0
- package/dist/atoms/Button/Button.d.ts +10 -10
- package/dist/atoms/Button/Button.js +6 -0
- package/dist/atoms/Button/Button.js.map +1 -0
- package/dist/atoms/Button/index.d.ts +2 -2
- package/dist/atoms/Button/index.js +2 -0
- package/dist/atoms/Button/index.js.map +1 -0
- package/dist/atoms/Checkbox/Checkbox.d.ts +10 -10
- package/dist/atoms/Checkbox/Checkbox.js +6 -0
- package/dist/atoms/Checkbox/Checkbox.js.map +1 -0
- package/dist/atoms/Checkbox/index.d.ts +2 -2
- package/dist/atoms/Checkbox/index.js +2 -0
- package/dist/atoms/Checkbox/index.js.map +1 -0
- package/dist/atoms/Icon/Icon.d.ts +14 -14
- package/dist/atoms/Icon/Icon.js +6 -0
- package/dist/atoms/Icon/Icon.js.map +1 -0
- package/dist/atoms/Icon/index.d.ts +2 -2
- package/dist/atoms/Icon/index.js +2 -0
- package/dist/atoms/Icon/index.js.map +1 -0
- package/dist/atoms/Icon/stories/assets/ShoppingCart.d.ts +3 -3
- package/dist/atoms/Icon/stories/assets/ShoppingCart.js +8 -0
- package/dist/atoms/Icon/stories/assets/ShoppingCart.js.map +1 -0
- package/dist/atoms/Incentive/Incentive.d.ts +11 -11
- package/dist/atoms/Incentive/Incentive.js +6 -0
- package/dist/atoms/Incentive/Incentive.js.map +1 -0
- package/dist/atoms/Incentive/index.d.ts +2 -2
- package/dist/atoms/Incentive/index.js +2 -0
- package/dist/atoms/Incentive/index.js.map +1 -0
- package/dist/atoms/Incentive/stories/assets/Icons.d.ts +2 -2
- package/dist/atoms/Incentive/stories/assets/Icons.js +6 -0
- package/dist/atoms/Incentive/stories/assets/Icons.js.map +1 -0
- package/dist/atoms/Input/Input.d.ts +14 -14
- package/dist/atoms/Input/Input.js +10 -0
- package/dist/atoms/Input/Input.js.map +1 -0
- package/dist/atoms/Input/index.d.ts +2 -2
- package/dist/atoms/Input/index.js +2 -0
- package/dist/atoms/Input/index.js.map +1 -0
- package/dist/atoms/Label/Label.d.ts +10 -10
- package/dist/atoms/Label/Label.js +6 -0
- package/dist/atoms/Label/Label.js.map +1 -0
- package/dist/atoms/Label/index.d.ts +2 -2
- package/dist/atoms/Label/index.js +2 -0
- package/dist/atoms/Label/index.js.map +1 -0
- package/dist/atoms/Link/Link.d.ts +19 -19
- package/dist/atoms/Link/Link.js +13 -0
- package/dist/atoms/Link/Link.js.map +1 -0
- package/dist/atoms/Link/index.d.ts +2 -2
- package/dist/atoms/Link/index.js +2 -0
- package/dist/atoms/Link/index.js.map +1 -0
- package/dist/atoms/List/List.d.ts +12 -12
- package/dist/atoms/List/List.js +16 -0
- package/dist/atoms/List/List.js.map +1 -0
- package/dist/atoms/List/index.d.ts +2 -2
- package/dist/atoms/List/index.js +2 -0
- package/dist/atoms/List/index.js.map +1 -0
- package/dist/atoms/Overlay/Overlay.d.ts +10 -10
- package/dist/atoms/Overlay/Overlay.js +6 -0
- package/dist/atoms/Overlay/Overlay.js.map +1 -0
- package/dist/atoms/Overlay/index.d.ts +2 -2
- package/dist/atoms/Overlay/index.js +2 -0
- package/dist/atoms/Overlay/index.js.map +1 -0
- package/dist/atoms/Popover/Popover.d.ts +15 -15
- package/dist/atoms/Popover/Popover.js +7 -0
- package/dist/atoms/Popover/Popover.js.map +1 -0
- package/dist/atoms/Popover/index.d.ts +2 -2
- package/dist/atoms/Popover/index.js +2 -0
- package/dist/atoms/Popover/index.js.map +1 -0
- package/dist/atoms/Price/Price.d.ts +28 -28
- package/dist/atoms/Price/Price.js +7 -0
- package/dist/atoms/Price/Price.js.map +1 -0
- package/dist/atoms/Price/index.d.ts +2 -2
- package/dist/atoms/Price/index.js +2 -0
- package/dist/atoms/Price/index.js.map +1 -0
- package/dist/atoms/Radio/Radio.d.ts +7 -7
- package/dist/atoms/Radio/Radio.js +6 -0
- package/dist/atoms/Radio/Radio.js.map +1 -0
- package/dist/atoms/Radio/index.d.ts +2 -2
- package/dist/atoms/Radio/index.js +2 -0
- package/dist/atoms/Radio/index.js.map +1 -0
- package/dist/atoms/Select/Select.d.ts +10 -10
- package/dist/atoms/Select/Select.js +6 -0
- package/dist/atoms/Select/Select.js.map +1 -0
- package/dist/atoms/Select/index.d.ts +2 -2
- package/dist/atoms/Select/index.js +2 -0
- package/dist/atoms/Select/index.js.map +1 -0
- package/dist/atoms/Skeleton/Skeleton.d.ts +10 -10
- package/dist/atoms/Skeleton/Skeleton.js +6 -0
- package/dist/atoms/Skeleton/Skeleton.js.map +1 -0
- package/dist/atoms/Skeleton/index.d.ts +2 -2
- package/dist/atoms/Skeleton/index.js +2 -0
- package/dist/atoms/Skeleton/index.js.map +1 -0
- package/dist/atoms/Slider/Slider.d.ts +37 -37
- package/dist/atoms/Slider/Slider.js +46 -0
- package/dist/atoms/Slider/Slider.js.map +1 -0
- package/dist/atoms/Slider/index.d.ts +2 -2
- package/dist/atoms/Slider/index.js +2 -0
- package/dist/atoms/Slider/index.js.map +1 -0
- package/dist/atoms/Spinner/Spinner.d.ts +11 -11
- package/dist/atoms/Spinner/Spinner.js +6 -0
- package/dist/atoms/Spinner/Spinner.js.map +1 -0
- package/dist/atoms/Spinner/index.d.ts +2 -2
- package/dist/atoms/Spinner/index.js +2 -0
- package/dist/atoms/Spinner/index.js.map +1 -0
- package/dist/atoms/TextArea/TextArea.d.ts +14 -14
- package/dist/atoms/TextArea/TextArea.js +10 -0
- package/dist/atoms/TextArea/TextArea.js.map +1 -0
- package/dist/atoms/TextArea/index.d.ts +2 -2
- package/dist/atoms/TextArea/index.js +2 -0
- package/dist/atoms/TextArea/index.js.map +1 -0
- package/dist/hooks/useSlider/index.d.ts +2 -2
- package/dist/hooks/useSlider/index.js +3 -0
- package/dist/hooks/useSlider/index.js.map +1 -0
- package/dist/hooks/useSlider/useSlider.d.ts +62 -62
- package/dist/hooks/useSlider/useSlider.js +108 -0
- package/dist/hooks/useSlider/useSlider.js.map +1 -0
- package/dist/index.d.ts +80 -80
- package/dist/index.js +45 -8
- package/dist/index.js.map +1 -0
- package/dist/molecules/Accordion/Accordion.d.ts +26 -26
- package/dist/molecules/Accordion/Accordion.js +21 -0
- package/dist/molecules/Accordion/Accordion.js.map +1 -0
- package/dist/molecules/Accordion/AccordionButton.d.ts +10 -10
- package/dist/molecules/Accordion/AccordionButton.js +37 -0
- package/dist/molecules/Accordion/AccordionButton.js.map +1 -0
- package/dist/molecules/Accordion/AccordionItem.d.ts +28 -28
- package/dist/molecules/Accordion/AccordionItem.js +21 -0
- package/dist/molecules/Accordion/AccordionItem.js.map +1 -0
- package/dist/molecules/Accordion/AccordionPanel.d.ts +10 -10
- package/dist/molecules/Accordion/AccordionPanel.js +10 -0
- package/dist/molecules/Accordion/AccordionPanel.js.map +1 -0
- package/dist/molecules/Accordion/index.d.ts +8 -8
- package/dist/molecules/Accordion/index.js +5 -0
- package/dist/molecules/Accordion/index.js.map +1 -0
- package/dist/molecules/AggregateRating/AggregateRating.d.ts +18 -18
- package/dist/molecules/AggregateRating/AggregateRating.js +26 -0
- package/dist/molecules/AggregateRating/AggregateRating.js.map +1 -0
- package/dist/molecules/AggregateRating/index.d.ts +2 -2
- package/dist/molecules/AggregateRating/index.js +2 -0
- package/dist/molecules/AggregateRating/index.js.map +1 -0
- package/dist/molecules/Alert/Alert.d.ts +11 -11
- package/dist/molecules/Alert/Alert.js +6 -0
- package/dist/molecules/Alert/Alert.js.map +1 -0
- package/dist/molecules/Alert/index.d.ts +2 -2
- package/dist/molecules/Alert/index.js +2 -0
- package/dist/molecules/Alert/index.js.map +1 -0
- package/dist/molecules/Banner/Banner.d.ts +14 -14
- package/dist/molecules/Banner/Banner.js +6 -0
- package/dist/molecules/Banner/Banner.js.map +1 -0
- package/dist/molecules/Banner/BannerContent.d.ts +10 -10
- package/dist/molecules/Banner/BannerContent.js +6 -0
- package/dist/molecules/Banner/BannerContent.js.map +1 -0
- package/dist/molecules/Banner/BannerImage.d.ts +10 -10
- package/dist/molecules/Banner/BannerImage.js +6 -0
- package/dist/molecules/Banner/BannerImage.js.map +1 -0
- package/dist/molecules/Banner/BannerLink.d.ts +10 -10
- package/dist/molecules/Banner/BannerLink.js +6 -0
- package/dist/molecules/Banner/BannerLink.js.map +1 -0
- package/dist/molecules/Banner/index.d.ts +8 -8
- package/dist/molecules/Banner/index.js +5 -0
- package/dist/molecules/Banner/index.js.map +1 -0
- package/dist/molecules/Breadcrumb/Breadcrumb.d.ts +14 -14
- package/dist/molecules/Breadcrumb/Breadcrumb.js +38 -0
- package/dist/molecules/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/molecules/Breadcrumb/index.d.ts +2 -2
- package/dist/molecules/Breadcrumb/index.js +2 -0
- package/dist/molecules/Breadcrumb/index.js.map +1 -0
- package/dist/molecules/Bullets/Bullets.d.ts +35 -35
- package/dist/molecules/Bullets/Bullets.js +12 -0
- package/dist/molecules/Bullets/Bullets.js.map +1 -0
- package/dist/molecules/Bullets/index.d.ts +2 -2
- package/dist/molecules/Bullets/index.js +2 -0
- package/dist/molecules/Bullets/index.js.map +1 -0
- package/dist/molecules/Card/Card.d.ts +10 -10
- package/dist/molecules/Card/Card.js +6 -0
- package/dist/molecules/Card/Card.js.map +1 -0
- package/dist/molecules/Card/CardActions.d.ts +10 -10
- package/dist/molecules/Card/CardActions.js +6 -0
- package/dist/molecules/Card/CardActions.js.map +1 -0
- package/dist/molecules/Card/CardContent.d.ts +10 -10
- package/dist/molecules/Card/CardContent.js +6 -0
- package/dist/molecules/Card/CardContent.js.map +1 -0
- package/dist/molecules/Card/CardImage.d.ts +10 -10
- package/dist/molecules/Card/CardImage.js +6 -0
- package/dist/molecules/Card/CardImage.js.map +1 -0
- package/dist/molecules/Card/index.d.ts +8 -8
- package/dist/molecules/Card/index.js +5 -0
- package/dist/molecules/Card/index.js.map +1 -0
- package/dist/molecules/Carousel/Arrows.d.ts +12 -12
- package/dist/molecules/Carousel/Arrows.js +6 -0
- package/dist/molecules/Carousel/Arrows.js.map +1 -0
- package/dist/molecules/Carousel/Carousel.d.ts +16 -16
- package/dist/molecules/Carousel/Carousel.js +124 -0
- package/dist/molecules/Carousel/Carousel.js.map +1 -0
- package/dist/molecules/Carousel/hooks/useSlideVisibility.d.ts +9 -9
- package/dist/molecules/Carousel/hooks/useSlideVisibility.js +29 -0
- package/dist/molecules/Carousel/hooks/useSlideVisibility.js.map +1 -0
- package/dist/molecules/Carousel/index.d.ts +2 -2
- package/dist/molecules/Carousel/index.js +3 -0
- package/dist/molecules/Carousel/index.js.map +1 -0
- package/dist/molecules/Dropdown/Dropdown.d.ts +9 -9
- package/dist/molecules/Dropdown/Dropdown.js +67 -0
- package/dist/molecules/Dropdown/Dropdown.js.map +1 -0
- package/dist/molecules/Dropdown/DropdownButton.d.ts +10 -10
- package/dist/molecules/Dropdown/DropdownButton.js +11 -0
- package/dist/molecules/Dropdown/DropdownButton.js.map +1 -0
- package/dist/molecules/Dropdown/DropdownItem.d.ts +10 -10
- package/dist/molecules/Dropdown/DropdownItem.js +26 -0
- package/dist/molecules/Dropdown/DropdownItem.js.map +1 -0
- package/dist/molecules/Dropdown/DropdownMenu.d.ts +22 -22
- package/dist/molecules/Dropdown/DropdownMenu.js +65 -0
- package/dist/molecules/Dropdown/DropdownMenu.js.map +1 -0
- package/dist/molecules/Dropdown/contexts/DropdownContext.d.ts +41 -41
- package/dist/molecules/Dropdown/contexts/DropdownContext.js +11 -0
- package/dist/molecules/Dropdown/contexts/DropdownContext.js.map +1 -0
- package/dist/molecules/Dropdown/hooks/useDropdown.d.ts +6 -6
- package/dist/molecules/Dropdown/hooks/useDropdown.js +14 -0
- package/dist/molecules/Dropdown/hooks/useDropdown.js.map +1 -0
- package/dist/molecules/Dropdown/hooks/useDropdownPosition.d.ts +8 -8
- package/dist/molecules/Dropdown/hooks/useDropdownPosition.js +25 -0
- package/dist/molecules/Dropdown/hooks/useDropdownPosition.js.map +1 -0
- package/dist/molecules/Dropdown/index.d.ts +8 -8
- package/dist/molecules/Dropdown/index.js +5 -0
- package/dist/molecules/Dropdown/index.js.map +1 -0
- package/dist/molecules/Dropdown/stories/assets/Caret.d.ts +2 -2
- package/dist/molecules/Dropdown/stories/assets/Caret.js +4 -0
- package/dist/molecules/Dropdown/stories/assets/Caret.js.map +1 -0
- package/dist/molecules/Form/Form.d.ts +11 -11
- package/dist/molecules/Form/Form.js +6 -0
- package/dist/molecules/Form/Form.js.map +1 -0
- package/dist/molecules/Form/index.d.ts +2 -2
- package/dist/molecules/Form/index.js +2 -0
- package/dist/molecules/Form/index.js.map +1 -0
- package/dist/molecules/IconButton/IconButton.d.ts +19 -19
- package/dist/molecules/IconButton/IconButton.js +9 -0
- package/dist/molecules/IconButton/IconButton.js.map +1 -0
- package/dist/molecules/IconButton/index.d.ts +2 -2
- package/dist/molecules/IconButton/index.js +2 -0
- package/dist/molecules/IconButton/index.js.map +1 -0
- package/dist/molecules/LoadingButton/LoadingButton.d.ts +14 -14
- package/dist/molecules/LoadingButton/LoadingButton.js +8 -0
- package/dist/molecules/LoadingButton/LoadingButton.js.map +1 -0
- package/dist/molecules/LoadingButton/index.d.ts +2 -2
- package/dist/molecules/LoadingButton/index.js +2 -0
- package/dist/molecules/LoadingButton/index.js.map +1 -0
- package/dist/molecules/Modal/Modal.d.ts +25 -25
- package/dist/molecules/Modal/Modal.js +31 -0
- package/dist/molecules/Modal/Modal.js.map +1 -0
- package/dist/molecules/Modal/ModalContent.d.ts +10 -10
- package/dist/molecules/Modal/ModalContent.js +23 -0
- package/dist/molecules/Modal/ModalContent.js.map +1 -0
- package/dist/molecules/Modal/index.d.ts +2 -2
- package/dist/molecules/Modal/index.js +2 -0
- package/dist/molecules/Modal/index.js.map +1 -0
- package/dist/molecules/Modal/useTrapFocus.d.ts +8 -8
- package/dist/molecules/Modal/useTrapFocus.js +76 -0
- package/dist/molecules/Modal/useTrapFocus.js.map +1 -0
- package/dist/molecules/PaymentMethods/PaymentMethods.d.ts +26 -26
- package/dist/molecules/PaymentMethods/PaymentMethods.js +8 -0
- package/dist/molecules/PaymentMethods/PaymentMethods.js.map +1 -0
- package/dist/molecules/PaymentMethods/index.d.ts +2 -2
- package/dist/molecules/PaymentMethods/index.js +2 -0
- package/dist/molecules/PaymentMethods/index.js.map +1 -0
- package/dist/molecules/PaymentMethods/stories/assets/Icons.d.ts +9 -9
- package/dist/molecules/PaymentMethods/stories/assets/Icons.js +26 -0
- package/dist/molecules/PaymentMethods/stories/assets/Icons.js.map +1 -0
- package/dist/molecules/PriceRange/PriceRange.d.ts +23 -23
- package/dist/molecules/PriceRange/PriceRange.js +23 -0
- package/dist/molecules/PriceRange/PriceRange.js.map +1 -0
- package/dist/molecules/PriceRange/index.d.ts +2 -2
- package/dist/molecules/PriceRange/index.js +2 -0
- package/dist/molecules/PriceRange/index.js.map +1 -0
- package/dist/molecules/ProductCard/ProductCard.d.ts +11 -11
- package/dist/molecules/ProductCard/ProductCard.js +6 -0
- package/dist/molecules/ProductCard/ProductCard.js.map +1 -0
- package/dist/molecules/ProductCard/ProductCardActions.d.ts +10 -10
- package/dist/molecules/ProductCard/ProductCardActions.js +6 -0
- package/dist/molecules/ProductCard/ProductCardActions.js.map +1 -0
- package/dist/molecules/ProductCard/ProductCardContent.d.ts +10 -10
- package/dist/molecules/ProductCard/ProductCardContent.js +6 -0
- package/dist/molecules/ProductCard/ProductCardContent.js.map +1 -0
- package/dist/molecules/ProductCard/ProductCardImage.d.ts +10 -10
- package/dist/molecules/ProductCard/ProductCardImage.js +6 -0
- package/dist/molecules/ProductCard/ProductCardImage.js.map +1 -0
- package/dist/molecules/ProductCard/index.d.ts +8 -8
- package/dist/molecules/ProductCard/index.js +5 -0
- package/dist/molecules/ProductCard/index.js.map +1 -0
- package/dist/molecules/QuantitySelector/QuantitySelector.d.ts +30 -30
- package/dist/molecules/QuantitySelector/QuantitySelector.js +11 -0
- package/dist/molecules/QuantitySelector/QuantitySelector.js.map +1 -0
- package/dist/molecules/QuantitySelector/index.d.ts +2 -2
- package/dist/molecules/QuantitySelector/index.js +2 -0
- package/dist/molecules/QuantitySelector/index.js.map +1 -0
- package/dist/molecules/QuantitySelector/stories/assets/Icons.d.ts +7 -7
- package/dist/molecules/QuantitySelector/stories/assets/Icons.js +11 -0
- package/dist/molecules/QuantitySelector/stories/assets/Icons.js.map +1 -0
- package/dist/molecules/RadioGroup/RadioGroup.d.ts +5 -5
- package/dist/molecules/RadioGroup/RadioGroup.js +10 -0
- package/dist/molecules/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/molecules/RadioGroup/RadioOption.d.ts +19 -19
- package/dist/molecules/RadioGroup/RadioOption.js +11 -0
- package/dist/molecules/RadioGroup/RadioOption.js.map +1 -0
- package/dist/molecules/RadioGroup/index.d.ts +4 -4
- package/dist/molecules/RadioGroup/index.js +3 -0
- package/dist/molecules/RadioGroup/index.js.map +1 -0
- package/dist/molecules/RadioGroup/useRadioGroup.d.ts +17 -17
- package/dist/molecules/RadioGroup/useRadioGroup.js +10 -0
- package/dist/molecules/RadioGroup/useRadioGroup.js.map +1 -0
- package/dist/molecules/SearchInput/SearchInput.d.ts +28 -28
- package/dist/molecules/SearchInput/SearchInput.js +28 -0
- package/dist/molecules/SearchInput/SearchInput.js.map +1 -0
- package/dist/molecules/SearchInput/index.d.ts +2 -2
- package/dist/molecules/SearchInput/index.js +2 -0
- package/dist/molecules/SearchInput/index.js.map +1 -0
- package/dist/molecules/SearchInput/stories/assets/CustomIcon.d.ts +3 -3
- package/dist/molecules/SearchInput/stories/assets/CustomIcon.js +7 -0
- package/dist/molecules/SearchInput/stories/assets/CustomIcon.js.map +1 -0
- package/dist/molecules/Table/Table.d.ts +11 -11
- package/dist/molecules/Table/Table.js +6 -0
- package/dist/molecules/Table/Table.js.map +1 -0
- package/dist/molecules/Table/TableBody.d.ts +11 -11
- package/dist/molecules/Table/TableBody.js +6 -0
- package/dist/molecules/Table/TableBody.js.map +1 -0
- package/dist/molecules/Table/TableCell.d.ts +20 -20
- package/dist/molecules/Table/TableCell.js +7 -0
- package/dist/molecules/Table/TableCell.js.map +1 -0
- package/dist/molecules/Table/TableFooter.d.ts +11 -11
- package/dist/molecules/Table/TableFooter.js +6 -0
- package/dist/molecules/Table/TableFooter.js.map +1 -0
- package/dist/molecules/Table/TableHead.d.ts +11 -11
- package/dist/molecules/Table/TableHead.js +6 -0
- package/dist/molecules/Table/TableHead.js.map +1 -0
- package/dist/molecules/Table/TableRow.d.ts +11 -11
- package/dist/molecules/Table/TableRow.js +6 -0
- package/dist/molecules/Table/TableRow.js.map +1 -0
- package/dist/molecules/Table/index.d.ts +12 -12
- package/dist/molecules/Table/index.js +7 -0
- package/dist/molecules/Table/index.js.map +1 -0
- package/dist/organisms/Hero/Hero.d.ts +11 -11
- package/dist/organisms/Hero/Hero.js +6 -0
- package/dist/organisms/Hero/Hero.js.map +1 -0
- package/dist/organisms/Hero/HeroHeading.d.ts +10 -10
- package/dist/organisms/Hero/HeroHeading.js +6 -0
- package/dist/organisms/Hero/HeroHeading.js.map +1 -0
- package/dist/organisms/Hero/HeroImage.d.ts +10 -10
- package/dist/organisms/Hero/HeroImage.js +6 -0
- package/dist/organisms/Hero/HeroImage.js.map +1 -0
- package/dist/organisms/Hero/index.d.ts +6 -6
- package/dist/organisms/Hero/index.js +4 -0
- package/dist/organisms/Hero/index.js.map +1 -0
- package/dist/organisms/OutOfStock/OutOfStock.d.ts +21 -21
- package/dist/organisms/OutOfStock/OutOfStock.js +8 -0
- package/dist/organisms/OutOfStock/OutOfStock.js.map +1 -0
- package/dist/organisms/OutOfStock/OutOfStockMessage.d.ts +9 -9
- package/dist/organisms/OutOfStock/OutOfStockMessage.js +5 -0
- package/dist/organisms/OutOfStock/OutOfStockMessage.js.map +1 -0
- package/dist/organisms/OutOfStock/OutOfStockTitle.d.ts +9 -9
- package/dist/organisms/OutOfStock/OutOfStockTitle.js +5 -0
- package/dist/organisms/OutOfStock/OutOfStockTitle.js.map +1 -0
- package/dist/organisms/OutOfStock/index.d.ts +6 -6
- package/dist/organisms/OutOfStock/index.js +4 -0
- package/dist/organisms/OutOfStock/index.js.map +1 -0
- package/dist/setupTests.d.ts +1 -1
- package/dist/setupTests.js +6 -0
- package/dist/setupTests.js.map +1 -0
- package/dist/typings/PolymorphicGenerics.d.ts +28 -28
- package/dist/typings/PolymorphicGenerics.js +8 -0
- package/dist/typings/PolymorphicGenerics.js.map +1 -0
- package/dist/typings/index.d.ts +1 -1
- package/dist/typings/index.js +2 -0
- package/dist/typings/index.js.map +1 -0
- package/dist/utils/toHaveNoIncomplete.d.ts +17 -17
- package/dist/utils/toHaveNoIncomplete.js +43 -0
- package/dist/utils/toHaveNoIncomplete.js.map +1 -0
- package/package.json +9 -13
- package/src/molecules/Accordion/Accordion.test.tsx +3 -3
- package/src/molecules/AggregateRating/stories/AggregateRating.stories.tsx +2 -3
- package/src/molecules/Bullets/Bullets.test.tsx +6 -6
- package/src/molecules/Bullets/Bullets.tsx +4 -3
- package/src/molecules/Dropdown/DropdownItem.tsx +2 -5
- package/src/molecules/Dropdown/DropdownMenu.tsx +2 -7
- package/src/molecules/Modal/ModalContent.tsx +0 -1
- package/src/typings/PolymorphicGenerics.ts +2 -3
- package/dist/atoms/Badge/stories/Badge.stories.d.ts +0 -17
- package/dist/atoms/Button/stories/Button.stories.d.ts +0 -14
- package/dist/atoms/Checkbox/stories/Checkbox.stories.d.ts +0 -4
- package/dist/atoms/Icon/stories/Icon.stories.d.ts +0 -14
- package/dist/atoms/Incentive/stories/Incentive.stories.d.ts +0 -4
- package/dist/atoms/Input/stories/Input.stories.d.ts +0 -14
- package/dist/atoms/Label/stories/Label.stories.d.ts +0 -14
- package/dist/atoms/List/stories/List.stories.d.ts +0 -22
- package/dist/atoms/Overlay/stories/Overlay.stories.d.ts +0 -8
- package/dist/atoms/Popover/stories/Popover.stories.d.ts +0 -14
- package/dist/atoms/Price/stories/Price.stories.d.ts +0 -18
- package/dist/atoms/Radio/stories/Radio.stories.d.ts +0 -4
- package/dist/atoms/Select/stories/Select.stories.d.ts +0 -20
- package/dist/atoms/Skeleton/stories/Skeleton.stories.d.ts +0 -12
- package/dist/atoms/Slider/stories/Slider.stories.d.ts +0 -4
- package/dist/atoms/Spinner/stories/Spinner.stories.d.ts +0 -12
- package/dist/atoms/TextArea/stories/TextArea.stories.d.ts +0 -4
- package/dist/molecules/Accordion/stories/Accordion.stories.d.ts +0 -14
- package/dist/molecules/AggregateRating/stories/AggregateRating.stories.d.ts +0 -16
- package/dist/molecules/Alert/stories/Alert.stories.d.ts +0 -5
- package/dist/molecules/Banner/stories/Banner.stories.d.ts +0 -4
- package/dist/molecules/Breadcrumb/stories/Breadcrumb.stories.d.ts +0 -15
- package/dist/molecules/Bullets/stories/Bullets.stories.d.ts +0 -15
- package/dist/molecules/Card/stories/Card.stories.d.ts +0 -4
- package/dist/molecules/Carousel/stories/Carousel.stories.d.ts +0 -18
- package/dist/molecules/Dropdown/stories/Dropdown.stories.d.ts +0 -7
- package/dist/molecules/Form/stories/Form.stories.d.ts +0 -12
- package/dist/molecules/IconButton/stories/IconButton.stories.d.ts +0 -5
- package/dist/molecules/LoadingButton/stories/LoadingButton.stories.d.ts +0 -14
- package/dist/molecules/Modal/stories/Modal.stories.d.ts +0 -5
- package/dist/molecules/PaymentMethods/stories/PaymentMethods.stories.d.ts +0 -4
- package/dist/molecules/PriceRange/stories/PriceRange.stories.d.ts +0 -4
- package/dist/molecules/ProductCard/stories/ProductCard.stories.d.ts +0 -4
- package/dist/molecules/QuantitySelector/stories/QuantitySelector.stories.d.ts +0 -5
- package/dist/molecules/RadioGroup/stories/RadioGroup.stories.d.ts +0 -15
- package/dist/molecules/SearchInput/stories/SearchInput.stories.d.ts +0 -15
- package/dist/molecules/Table/stories/Table.stories.d.ts +0 -12
- package/dist/organisms/Hero/stories/Hero.stories.d.ts +0 -4
- package/dist/organisms/OutOfStock/stories/OutOfStock.stories.d.ts +0 -10
- package/dist/ui.cjs.development.js +0 -2109
- package/dist/ui.cjs.development.js.map +0 -1
- package/dist/ui.cjs.production.min.js +0 -2
- package/dist/ui.cjs.production.min.js.map +0 -1
- package/dist/ui.esm.js +0 -2037
- package/dist/ui.esm.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ui.cjs.production.min.js","sources":["../src/atoms/Link/Link.tsx","../src/atoms/Button/Button.tsx","../src/atoms/Input/Input.tsx","../src/atoms/Icon/Icon.tsx","../src/atoms/Price/Price.tsx","../src/atoms/TextArea/TextArea.tsx","../src/atoms/Checkbox/Checkbox.tsx","../src/atoms/Overlay/Overlay.tsx","../src/atoms/Select/Select.tsx","../src/atoms/Radio/Radio.tsx","../src/atoms/Badge/Badge.tsx","../src/atoms/Slider/Slider.tsx","../src/atoms/List/List.tsx","../src/atoms/Skeleton/Skeleton.tsx","../src/atoms/Spinner/Spinner.tsx","../src/atoms/Label/Label.tsx","../src/atoms/Incentive/Incentive.tsx","../src/molecules/ProductCard/ProductCard.tsx","../src/molecules/ProductCard/ProductCardImage.tsx","../src/molecules/ProductCard/ProductCardContent.tsx","../src/molecules/ProductCard/ProductCardActions.tsx","../src/molecules/Card/Card.tsx","../src/molecules/Card/CardImage.tsx","../src/molecules/Card/CardContent.tsx","../src/molecules/Card/CardActions.tsx","../src/molecules/Bullets/Bullets.tsx","../src/molecules/Form/Form.tsx","../src/molecules/SearchInput/SearchInput.tsx","../src/molecules/Carousel/Arrows.tsx","../src/hooks/useSlider/useSlider.ts","../src/molecules/IconButton/IconButton.tsx","../src/molecules/Modal/ModalContent.tsx","../src/molecules/Modal/useTrapFocus.ts","../src/molecules/Banner/Banner.tsx","../src/molecules/Banner/BannerImage.tsx","../src/molecules/Banner/BannerContent.tsx","../src/molecules/Banner/BannerLink.tsx","../src/molecules/PaymentMethods/PaymentMethods.tsx","../src/molecules/Breadcrumb/Breadcrumb.tsx","../src/molecules/LoadingButton/LoadingButton.tsx","../src/molecules/RadioGroup/useRadioGroup.ts","../src/molecules/RadioGroup/RadioOption.tsx","../src/molecules/Accordion/Accordion.tsx","../src/molecules/Accordion/AccordionItem.tsx","../src/molecules/Accordion/AccordionButton.tsx","../src/molecules/Accordion/AccordionPanel.tsx","../src/molecules/Table/Table.tsx","../src/molecules/Table/TableRow.tsx","../src/molecules/Table/TableCell.tsx","../src/molecules/Table/TableBody.tsx","../src/molecules/Table/TableHead.tsx","../src/molecules/Table/TableFooter.tsx","../src/molecules/Alert/Alert.tsx","../src/molecules/QuantitySelector/QuantitySelector.tsx","../src/molecules/Dropdown/contexts/DropdownContext.ts","../src/molecules/Dropdown/hooks/useDropdown.ts","../src/molecules/Dropdown/DropdownButton.tsx","../src/molecules/Dropdown/DropdownItem.tsx","../src/organisms/Hero/Hero.tsx","../src/organisms/Hero/HeroImage.tsx","../src/organisms/Hero/HeroHeading.tsx","../src/molecules/Carousel/Carousel.tsx","../src/molecules/Carousel/hooks/useSlideVisibility.ts","../src/molecules/Dropdown/Dropdown.tsx","../src/molecules/Dropdown/DropdownMenu.tsx","../src/molecules/Dropdown/hooks/useDropdownPosition.ts","../src/molecules/Modal/Modal.tsx","../src/organisms/OutOfStock/OutOfStock.tsx","../src/organisms/OutOfStock/OutOfStockMessage.tsx","../src/organisms/OutOfStock/OutOfStockTitle.tsx","../src/atoms/Popover/Popover.tsx","../src/molecules/PriceRange/PriceRange.tsx","../src/molecules/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport type { FC, ElementType, ReactElement } from 'react'\n\nimport type {\n PolymorphicRef,\n PolymorphicComponentPropsWithRef,\n} from '../../typings'\n\ninterface Props {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nexport type LinkProps<C extends ElementType> = PolymorphicComponentPropsWithRef<\n C,\n Props\n>\n\ntype LinkComponent = <C extends ElementType = 'a'>(\n props: LinkProps<C>\n) => ReactElement | null\n\nconst Link: LinkComponent = forwardRef(function Link<\n C extends ElementType = 'a'\n>(\n { as, children, testId = 'store-link', ...otherProps }: LinkProps<C>,\n ref?: PolymorphicRef<C>\n) {\n const Component = as ?? 'a'\n\n return (\n <Component ref={ref} data-store-link data-testid={testId} {...otherProps}>\n {children}\n </Component>\n )\n})\n\n/**\n * This is only being exported to make it easier to use in Storybook.\n * **DON'T** import this directly to use this component, use the default export\n * instead.\n */\nexport const StorybookLink = Link as FC<Props>\n\nexport default Link\n","import type { ButtonHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface ButtonProps<T = HTMLButtonElement>\n extends ButtonHTMLAttributes<T> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { children, testId = 'store-button', ...otherProps },\n ref\n) {\n return (\n <button ref={ref} data-store-button data-testid={testId} {...otherProps}>\n {children}\n </button>\n )\n})\n\nexport default Button\n","/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\nimport type { InputHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n /**\n * Current variant of the input.\n */\n variant?: 'success' | 'error'\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { variant, testId = 'store-input', ...otherProps },\n ref\n) {\n const variants = {\n 'data-error': variant === 'error' || undefined,\n 'data-success': variant === 'success' || undefined,\n }\n\n return (\n <input\n ref={ref}\n data-store-input\n data-testid={testId}\n {...variants}\n {...otherProps}\n />\n )\n})\n\nexport default Input\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface IconProps extends HTMLAttributes<HTMLSpanElement> {\n /**\n * A React component that will be rendered as an icon.\n */\n component: ReactNode\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Icon = forwardRef<HTMLSpanElement, IconProps>(function Button(\n { component, testId = 'store-icon', ...otherProps }: IconProps,\n ref\n) {\n return (\n <span ref={ref} data-store-icon data-testid={testId} {...otherProps}>\n {component}\n </span>\n )\n})\n\nexport default Icon\n","import type { HTMLAttributes, ElementType, ReactNode } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport type PriceVariant =\n | 'selling'\n | 'listing'\n | 'spot'\n | 'savings'\n | 'installment'\n\nexport type PriceFormatter = (price: number, variant: PriceVariant) => ReactNode\n\nexport interface PriceProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n /**\n * Set the HTML element tag of this component.\n */\n as?: ElementType\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n /**\n * The raw price value.\n */\n value: number\n /**\n * Formatter function that transforms the raw price value and render the result.\n */\n formatter?: PriceFormatter\n /**\n * The current use case variant for prices.\n */\n variant?: PriceVariant\n}\n\nexport const Price = forwardRef<Omit<HTMLSpanElement, 'children'>, PriceProps>(\n function Price(\n {\n as: Component = 'span',\n testId = 'store-price',\n value,\n formatter = (price) => price,\n variant = 'selling',\n ...otherProps\n },\n ref\n ) {\n const formattedPrice = formatter(value, variant)\n\n return (\n <Component\n ref={ref}\n data-store-price\n data-testid={testId}\n data-variant={variant}\n {...otherProps}\n >\n {formattedPrice}\n </Component>\n )\n }\n)\n\nexport default Price\n","import type { TextareaHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface TextAreaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'children'> {\n /**\n * Current variant of the input.\n */\n variant?: 'success' | 'error'\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n function TextArea(\n { variant, testId = 'store-textarea', ...otherProps },\n ref\n ) {\n const variants = {\n 'data-success': variant === 'success' || undefined,\n 'data-error': variant === 'error' || undefined,\n }\n\n return (\n <textarea\n ref={ref}\n data-store-textarea\n data-testid={testId}\n {...variants}\n {...otherProps}\n />\n )\n }\n)\n\nexport default TextArea\n","import React, { forwardRef } from 'react'\nimport type { InputHTMLAttributes } from 'react'\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { testId = 'store-checkbox', ...otherProps }: CheckboxProps,\n ref\n) {\n return (\n <input\n ref={ref}\n data-store-checkbox\n data-testid={testId}\n type=\"checkbox\"\n {...otherProps}\n />\n )\n})\n\nexport default Checkbox\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface Props extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Overlay = forwardRef<HTMLDivElement, Props>(function Overlay(\n { testId = 'store-overlay', ...otherProps },\n ref\n) {\n return (\n <div\n role=\"presentation\"\n data-store-overlay\n data-testid={testId}\n ref={ref}\n {...otherProps}\n />\n )\n})\n\nexport default Overlay\n","import type { SelectHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\n { children, testId = 'store-select', ...otherProps },\n ref\n) {\n return (\n <select ref={ref} data-store-select data-testid={testId} {...otherProps}>\n {children}\n </select>\n )\n})\n\nexport default Select\n","import React, { forwardRef } from 'react'\nimport type { InputHTMLAttributes } from 'react'\n\nexport interface RadioProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n testId?: string\n}\n\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { testId = 'store-radio', ...otherProps }: RadioProps,\n ref\n) {\n return (\n <input\n ref={ref}\n data-store-radio\n data-testid={testId}\n type=\"radio\"\n {...otherProps}\n />\n )\n})\n\nexport default Radio\n","import type { ReactNode, HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n children?: ReactNode\n}\n\nconst Badge = forwardRef<HTMLDivElement, BadgeProps>(function Badge(\n { testId = 'store-badge', children, ...otherProps }: BadgeProps,\n ref\n) {\n return (\n <div ref={ref} data-store-badge data-testid={testId} {...otherProps}>\n {children}\n </div>\n )\n})\n\nexport default Badge\n","/**\n * This code is inspired by the work of [sandra-lewis](https://codesandbox.io/u/sandra-lewis)\n */\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type SliderProps = {\n /**\n * The minimum value of the slider.\n */\n min: number\n /**\n * The maximum value of the slider.\n */\n max: number\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n *\n * @default 'store-slider'\n */\n testId?: string\n /**\n * Callback that fires when the slider value changes.\n */\n onChange?: (value: { min: number; max: number }) => void\n /**\n * A function used to set a human-readable value text based on the slider's current value.\n */\n getAriaValueText?(value: number, thumb?: 'min' | 'max'): string\n /**\n * Returns the value of element's class content attribute.\n */\n className?: string\n}\n\nconst Slider = ({\n min,\n max,\n onChange,\n testId = 'store-slider',\n getAriaValueText,\n className,\n}: SliderProps) => {\n const [minVal, setMinVal] = useState(min)\n const [maxVal, setMaxVal] = useState(max)\n\n const minValRef = useRef(min)\n const maxValRef = useRef(max)\n const range = useRef<HTMLDivElement>(null)\n\n const getPercent = useCallback(\n (value: number) => Math.round(((value - min) / (max - min)) * 100),\n [min, max]\n )\n\n // width of the range to reduce from the left side\n useEffect(() => {\n const minPercent = getPercent(minVal)\n const maxPercent = getPercent(maxValRef.current)\n\n if (range.current) {\n range.current.style.left = `${minPercent}%`\n range.current.style.width = `${maxPercent - minPercent}%`\n }\n }, [minVal, getPercent])\n\n // width of the range to reduce from the right side\n useEffect(() => {\n const minPercent = getPercent(minValRef.current)\n const maxPercent = getPercent(maxVal)\n\n if (range.current) {\n range.current.style.width = `${maxPercent - minPercent}%`\n }\n }, [maxVal, getPercent])\n\n useEffect(() => {\n onChange?.({ min: minVal, max: maxVal })\n }, [minVal, maxVal, onChange])\n\n return (\n <div data-store-slider data-testid={testId} className={className}>\n <div ref={range} data-slider-range />\n <input\n type=\"range\"\n min={min}\n max={max}\n value={minVal}\n onChange={(event) => {\n const value = Math.min(Number(event.target.value), maxVal - 1)\n\n setMinVal(value)\n minValRef.current = value\n }}\n data-slider-thumb=\"left\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={minVal}\n aria-label={String(minVal)}\n aria-labelledby={\n getAriaValueText ? getAriaValueText(minVal, 'min') : undefined\n }\n />\n <input\n type=\"range\"\n min={min}\n max={max}\n value={maxVal}\n onChange={(event) => {\n const value = Math.max(Number(event.target.value), minVal + 1)\n\n setMaxVal(value)\n maxValRef.current = value\n }}\n data-slider-thumb=\"right\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={maxVal}\n aria-label={String(maxVal)}\n aria-labelledby={\n getAriaValueText ? getAriaValueText(maxVal, 'max') : undefined\n }\n />\n </div>\n )\n}\n\nexport default Slider\n","import React, { forwardRef } from 'react'\nimport type { ElementType, HTMLAttributes } from 'react'\n\nconst variantToElement = {\n description: 'dl',\n unordered: 'ul',\n ordered: 'ol',\n}\n\nexport interface ListProps<T = HTMLElement> extends HTMLAttributes<T> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n variant?: 'description' | 'ordered' | 'unordered'\n as?: ElementType\n}\n\nconst List = forwardRef<HTMLUListElement, ListProps>(function List(\n {\n testId = 'store-list',\n variant = 'unordered',\n as: MaybeComponent,\n ...otherProps\n },\n ref\n) {\n const dataAttributes = {\n 'data-testid': testId,\n 'data-store-list': variant,\n }\n\n const Component = MaybeComponent ?? variantToElement[variant] ?? 'ul'\n\n return <Component ref={ref} {...dataAttributes} {...otherProps} />\n})\n\nexport default List\n","import React, { forwardRef } from 'react'\nimport type { HTMLAttributes } from 'react'\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n { testId = 'store-skeleton', ...otherProps },\n ref\n) {\n return (\n <div ref={ref} data-store-skeleton data-testid={testId} {...otherProps} />\n )\n})\n\nexport default Skeleton\n","import type { PropsWithChildren } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport type SpinnerProps = {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Spinner = forwardRef<HTMLDivElement, PropsWithChildren<SpinnerProps>>(\n function Spinner({ children, testId = 'store-spinner', ...otherProps }, ref) {\n return (\n <span ref={ref} data-store-spinner data-testid={testId} {...otherProps} />\n )\n }\n)\n\nexport default Spinner\n","import type { LabelHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(function Label(\n { testId = 'store-label', children, ...otherProps },\n ref\n) {\n return (\n <label ref={ref} data-store-label data-testid={testId} {...otherProps}>\n {children}\n </label>\n )\n})\n\nexport default Label\n","import React, { forwardRef } from 'react'\nimport type { HTMLAttributes } from 'react'\n\nexport interface IncentiveProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n}\n\nconst Incentive = forwardRef<HTMLDivElement, IncentiveProps>(function Incentive(\n { testId = 'store-incentive', children, ...otherProps },\n ref\n) {\n return (\n <div ref={ref} data-store-incentive data-testid={testId} {...otherProps}>\n {children}\n </div>\n )\n})\n\nexport default Incentive\n","import React, { forwardRef } from 'react'\nimport type { HTMLAttributes } from 'react'\n\nexport interface ProductCardProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n}\n\nconst ProductCard = forwardRef<HTMLDivElement, ProductCardProps>(function Card(\n { testId = 'store-product-card', children, ...otherProps },\n ref\n) {\n return (\n <article\n ref={ref}\n data-store-product-card\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </article>\n )\n})\n\nexport default ProductCard\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface ProductCardImageProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst ProductCardImage = forwardRef<HTMLDivElement, ProductCardImageProps>(\n function ProductCardImage(\n { testId = 'store-product-card-image', children, ...otherProps },\n ref\n ) {\n return (\n <div\n ref={ref}\n data-product-card-image\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </div>\n )\n }\n)\n\nexport default ProductCardImage\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface ProductCardContentProps extends HTMLAttributes<HTMLElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst ProductCardContent = forwardRef<HTMLElement, ProductCardContentProps>(\n function CardContent(\n { testId = 'store-product-card-content', children, ...otherProps },\n ref\n ) {\n return (\n <section\n ref={ref}\n data-product-card-content\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </section>\n )\n }\n)\n\nexport default ProductCardContent\n","import React, { forwardRef } from 'react'\nimport type { HTMLAttributes } from 'react'\n\nexport interface ProductCardActionsProps\n extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst ProductCardActions = forwardRef<HTMLDivElement, ProductCardActionsProps>(\n function CardActions(\n { testId = 'store-product-card-actions', children, ...otherProps },\n ref\n ) {\n return (\n <div\n ref={ref}\n data-product-card-actions\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </div>\n )\n }\n)\n\nexport default ProductCardActions\n","import React, { forwardRef } from 'react'\nimport type { HTMLAttributes } from 'react'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { testId = 'store-card', children, ...otherProps },\n ref\n) {\n return (\n <article ref={ref} data-store-card data-testid={testId} {...otherProps}>\n {children}\n </article>\n )\n})\n\nexport default Card\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface CardImageProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst CardImage = forwardRef<HTMLDivElement, CardImageProps>(function CardImage(\n { testId = 'store-card-image', children, ...otherProps },\n ref\n) {\n return (\n <div ref={ref} data-card-image data-testid={testId} {...otherProps}>\n {children}\n </div>\n )\n})\n\nexport default CardImage\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface CardContentProps extends HTMLAttributes<HTMLElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst CardContent = forwardRef<HTMLElement, CardContentProps>(\n function CardContent(\n { testId = 'store-card-content', children, ...otherProps },\n ref\n ) {\n return (\n <section ref={ref} data-card-content data-testid={testId} {...otherProps}>\n {children}\n </section>\n )\n }\n)\n\nexport default CardContent\n","import React, { forwardRef } from 'react'\nimport type { HTMLAttributes } from 'react'\n\nexport interface CardActionsProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst CardActions = forwardRef<HTMLDivElement, CardActionsProps>(\n function CardActions(\n { testId = 'store-card-actions', children, ...otherProps },\n ref\n ) {\n return (\n <div ref={ref} data-card-actions data-testid={testId} {...otherProps}>\n {children}\n </div>\n )\n }\n)\n\nexport default CardActions\n","import type { HTMLAttributes, MouseEvent } from 'react'\nimport React, { forwardRef, useMemo } from 'react'\n\nimport Button from '../../atoms/Button'\n\nexport interface BulletsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onClick' | 'role'> {\n /**\n * Number of bullets that should be rendered.\n */\n totalQuantity: number\n /**\n * The currently active bullet (zero-indexed).\n */\n activeBullet: number\n /**\n * Event handler for clicks on each bullet. The handler will be called with\n * the index of the bullet that received the click.\n */\n onClick: (e: MouseEvent, bulletIdx: number) => void\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n /**\n * Function that should be used to generate the aria-label attribute added\n * to each bullet that is inactive. It receives the bullet index as an\n * argument so that it can be interpolated in the generated string.\n */\n ariaLabelGenerator?: (index: number, isActive: boolean) => string\n /**\n * Function that should be used to generate the aria-controls attribute added\n * to each bullet. It receives the bullet index as argument and should return a string.\n */\n ariaControlsGenerator?: (index: number) => string\n}\n\nconst defaultAriaLabel = (idx: number, isActive: boolean) =>\n isActive ? 'Current page' : `Go to page ${idx + 1}`\n\nconst Bullets = forwardRef<HTMLDivElement, BulletsProps>(function Bullets(\n {\n totalQuantity,\n activeBullet,\n onClick,\n testId = 'store-bullets',\n ariaLabelGenerator = defaultAriaLabel,\n ariaControlsGenerator,\n ...otherProps\n },\n ref\n) {\n const bulletIndexes = useMemo(() => Array(totalQuantity).fill(0), [\n totalQuantity,\n ])\n\n return (\n <div\n ref={ref}\n data-store-bullets\n data-testid={testId}\n role=\"tablist\"\n {...otherProps}\n >\n {bulletIndexes.map((_, idx) => {\n const isActive = activeBullet === idx\n\n return (\n <Button\n data-bullet-item\n role=\"tab\"\n tabIndex={-1}\n key={idx}\n testId={`${testId}-item`}\n onClick={(e) => onClick(e, idx)}\n aria-label={ariaLabelGenerator(idx, isActive)}\n aria-controls={ariaControlsGenerator?.(idx)}\n aria-selected={isActive}\n />\n )\n })}\n </div>\n )\n})\n\nexport default Bullets\n","import type { FormHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface FormProps extends FormHTMLAttributes<HTMLFormElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n}\n\nconst Form = forwardRef<HTMLFormElement, FormProps>(function Form(\n { testId = 'store-form', children, ...otherProps },\n ref\n) {\n return (\n <form ref={ref} data-store-form data-testid={testId} {...otherProps}>\n {children}\n </form>\n )\n})\n\nexport default Form\n","import type {\n AriaAttributes,\n FormEvent,\n InputHTMLAttributes,\n ReactNode,\n} from 'react'\nimport React, { useImperativeHandle, forwardRef, useRef } from 'react'\n\nimport Button from '../../atoms/Button'\nimport Icon from '../../atoms/Icon'\nimport Input from '../../atoms/Input'\nimport Form from '../Form'\n\nconst SearchIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n)\n\ntype InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'onSubmit'>\n\nexport interface SearchInputProps extends InputProps {\n /**\n * Callback function when submitted.\n */\n onSubmit: (value: string) => void\n /**\n * Custom icon inside the submit button.\n */\n icon?: ReactNode\n /**\n * Custom aria-label for input and button.\n */\n 'aria-label'?: AriaAttributes['aria-label']\n /**\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nexport interface SearchInputRef {\n inputRef?: HTMLInputElement | null\n formRef?: HTMLFormElement | null\n}\n\nconst SearchInput = forwardRef<SearchInputRef | null, SearchInputProps>(\n function SearchInput(\n {\n onSubmit,\n icon,\n 'aria-label': ariaLabel = 'search',\n testId = 'store-search-input',\n ...otherProps\n },\n ref\n ) {\n const inputRef = useRef<HTMLInputElement>(null)\n const formRef = useRef<HTMLFormElement>(null)\n\n const handleSubmit = (event: FormEvent) => {\n event.preventDefault()\n\n if (inputRef.current?.value !== '') {\n onSubmit(inputRef.current!.value)\n }\n }\n\n useImperativeHandle(ref, () => ({\n inputRef: inputRef.current,\n formRef: formRef.current,\n }))\n\n return (\n <Form\n ref={formRef}\n data-store-search-input\n data-testid={testId}\n onSubmit={handleSubmit}\n role=\"search\"\n >\n <Input ref={inputRef} aria-label={ariaLabel} {...otherProps} />\n <Button type=\"submit\" aria-label=\"Submit Search\">\n <Icon component={icon ?? <SearchIcon />} />\n </Button>\n </Form>\n )\n }\n)\n\nexport default SearchInput\n","import React from 'react'\n\ninterface IconProps {\n size?: {\n width: number\n height: number\n }\n viewBox?: string\n color?: string\n}\n\nexport const LeftArrowIcon = ({\n size = { width: 25, height: 25 },\n viewBox = '0 0 16 16',\n color = 'currentColor',\n}: IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox={viewBox}\n width={size.width}\n height={size.height}\n >\n <path\n d=\"M11 1L4 8L11 15\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n stroke={color}\n fill=\"none\"\n />\n </svg>\n)\n\nexport const RightArrowIcon = ({\n size = { width: 25, height: 25 },\n viewBox = '0 0 16 16',\n color = 'currentColor',\n}: IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox={viewBox}\n width={size.width}\n height={size.height}\n >\n <path\n d=\"M5 15L12 8L5 1\"\n strokeWidth=\"2\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n stroke={color}\n fill=\"none\"\n />\n </svg>\n)\n","import type { Dispatch } from 'react'\nimport { useReducer } from 'react'\nimport type { SwipeableProps } from 'react-swipeable'\nimport { useSwipeable } from 'react-swipeable'\n\nexport type SlideDirection = 'next' | 'previous'\n\ninterface NextPageAction {\n type: 'NEXT_PAGE'\n}\n\ninterface PreviousPageAction {\n type: 'PREVIOUS_PAGE'\n}\n\ninterface GoToPageAction {\n type: 'GO_TO_PAGE'\n payload: {\n pageIndex: number\n shouldSlide: boolean\n }\n}\n\ninterface StopSlideAction {\n type: 'STOP_SLIDE'\n}\n\nexport type Action =\n | NextPageAction\n | PreviousPageAction\n | StopSlideAction\n | GoToPageAction\n\nexport type SliderDispatch = Dispatch<Action>\n\nexport interface SliderState {\n /**\n * The `currentItem` in a Slider with multiple items in a single page is\n * always **the one with the lowest index** in the current page.\n */\n currentItem: number\n /** Currently active page */\n currentPage: number\n /**\n * Whether or not the Slider is currently sliding. This is useful to\n * manipulate the `transition` property in a component.\n */\n sliding: boolean\n /** The direction in which the Slider is sliding. */\n slideDirection: SlideDirection\n /** The total number of unique items in the slider. */\n totalItems: number\n /** The number of items in a single page. */\n itemsPerPage: number\n /** The total number of pages in the slider. */\n totalPages: number\n /** Whether or not the slider is infinite. */\n infinite: boolean\n}\n\nexport const nextPage = (current: number, total: number) =>\n (current + 1) % total\n\nexport const previousPage = (current: number, total: number) =>\n (total - ((total - current + 1) % total)) % total\n\nfunction reducer(state: SliderState, action: Action): SliderState {\n switch (action.type) {\n case 'NEXT_PAGE': {\n // If `state.infinite` is true, we need to take into account an extra\n // page in the calculation. This extra page is a clone of the first page.\n const adjustedTotalPages = state.infinite\n ? state.totalPages + 1\n : state.totalPages\n\n const nextPageIndex = nextPage(state.currentPage, adjustedTotalPages)\n\n const nextItemIndex =\n (nextPageIndex % adjustedTotalPages) * state.itemsPerPage\n\n return {\n ...state,\n sliding: true,\n slideDirection: 'next',\n currentItem: nextItemIndex,\n currentPage: nextPageIndex,\n }\n }\n\n case 'PREVIOUS_PAGE': {\n // If `state.infinite` is true, we need to take into account an extra\n // page in the calculation. This extra page is a clone of the first page.\n const adjustedTotalPages = state.infinite\n ? state.totalPages + 1\n : state.totalPages\n\n // If `state.infinite` is true and we're currently on page 0, we need to\n // let the slider go to page -1. This -1 page is a clone of the last page.\n const shouldGoToClone = state.infinite && state.currentPage === 0\n const previousPageIndex = shouldGoToClone\n ? -1\n : previousPage(state.currentPage, state.totalPages)\n\n return {\n ...state,\n sliding: true,\n slideDirection: 'previous',\n currentItem:\n (previousPageIndex % adjustedTotalPages) * state.itemsPerPage,\n currentPage: previousPageIndex,\n }\n }\n\n case 'GO_TO_PAGE': {\n if (action.payload.pageIndex === state.currentPage) {\n return state\n }\n\n return {\n ...state,\n sliding: action.payload.shouldSlide,\n slideDirection:\n action.payload.pageIndex > state.currentPage ? 'next' : 'previous',\n currentItem:\n (action.payload.pageIndex % state.totalPages) * state.itemsPerPage,\n currentPage: action.payload.pageIndex,\n }\n }\n\n case 'STOP_SLIDE':\n return { ...state, sliding: false }\n\n default:\n return state\n }\n}\n\nconst defaultSliderState = (\n totalItems: number,\n itemsPerPage: number,\n infinite: boolean\n): SliderState => ({\n currentItem: 0,\n currentPage: 0,\n sliding: false,\n slideDirection: 'next',\n totalItems,\n itemsPerPage,\n totalPages: Math.ceil(totalItems / itemsPerPage),\n infinite,\n})\n\nconst slide = (page: SlideDirection | number, dispatch: Dispatch<Action>) => {\n if (page === 'next') {\n dispatch({\n type: 'NEXT_PAGE',\n })\n }\n\n if (page === 'previous') {\n dispatch({\n type: 'PREVIOUS_PAGE',\n })\n }\n\n if (typeof page === 'number') {\n dispatch({\n type: 'GO_TO_PAGE',\n payload: {\n pageIndex: page,\n shouldSlide: true,\n },\n })\n }\n}\n\nexport interface UseSliderArgs extends SwipeableProps {\n /** The total number of unique items in the slider. */\n totalItems: number\n /** The number of items in a single slider page. */\n itemsPerPage?: number\n /** Whether or not the slider is infinite. */\n infiniteMode?: boolean\n}\n\nexport default function useSlider({\n totalItems,\n itemsPerPage = 1,\n infiniteMode = false,\n ...swipeableConfigOverrides\n}: UseSliderArgs) {\n const [sliderState, sliderDispatch] = useReducer(reducer, undefined, () =>\n defaultSliderState(totalItems, itemsPerPage, infiniteMode)\n )\n\n const handlers = useSwipeable({\n onSwipedRight: () => slide('previous', sliderDispatch),\n onSwipedLeft: () => slide('next', sliderDispatch),\n preventDefaultTouchmoveEvent: true,\n trackMouse: true,\n ...swipeableConfigOverrides,\n })\n\n return {\n handlers,\n slide,\n sliderState,\n sliderDispatch,\n }\n}\n","import type { ReactNode } from 'react'\nimport React, { forwardRef } from 'react'\n\nimport Button from '../../atoms/Button'\nimport type { ButtonProps } from '../../atoms/Button'\nimport Icon from '../../atoms/Icon'\n\nexport interface Props extends Omit<ButtonProps, 'children' | 'aria-label'> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n /**\n * A React component that will be rendered as an icon.\n */\n icon: ReactNode\n\n /**\n * Label to be required for accessibility.\n */\n 'aria-label': string\n}\n\nconst IconButton = forwardRef<HTMLButtonElement, Props>(function IconButton(\n { icon, testId = 'store-icon-button', ...buttonProps },\n ref\n) {\n return (\n <Button ref={ref} data-store-icon-button testId={testId} {...buttonProps}>\n <Icon component={icon} />\n </Button>\n )\n})\n\nexport default IconButton\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\nimport type {\n DetailedHTMLProps,\n HTMLAttributes,\n MouseEvent,\n RefObject,\n} from 'react'\nimport React, { useRef } from 'react'\n\nimport useTrapFocus from './useTrapFocus'\n\ninterface ModalContentPureProps\n extends Omit<\n DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>,\n 'ref'\n > {\n beforeElementRef: RefObject<HTMLDivElement>\n trapFocusRef: RefObject<HTMLDivElement>\n afterElementRef: RefObject<HTMLDivElement>\n testId?: string\n}\n\nconst ModalContentPure = ({\n beforeElementRef,\n trapFocusRef,\n afterElementRef,\n testId = 'store-modal-content',\n children,\n ...otherProps\n}: ModalContentPureProps) => {\n return (\n <>\n <div\n ref={beforeElementRef}\n data-testid=\"beforeElement\"\n tabIndex={0}\n aria-hidden=\"true\"\n />\n <div\n data-store-modal-content\n data-testid={testId}\n ref={trapFocusRef}\n aria-modal=\"true\"\n role=\"dialog\"\n tabIndex={-1}\n {...otherProps}\n >\n {children}\n </div>\n <div\n ref={afterElementRef}\n data-testid=\"afterElement\"\n tabIndex={0}\n aria-hidden=\"true\"\n />\n </>\n )\n}\n\nexport type ModalContentProps = Omit<\n ModalContentPureProps,\n 'trapFocusRef' | 'onClick' | 'beforeElementRef' | 'afterElementRef'\n>\n\nconst ModalContent = ({ children, ...otherProps }: ModalContentProps) => {\n const trapFocusRef = useRef<HTMLDivElement>(null)\n const beforeElementRef = useRef<HTMLDivElement>(null)\n const afterElementRef = useRef<HTMLDivElement>(null)\n\n useTrapFocus({\n beforeElementRef,\n trapFocusRef,\n afterElementRef,\n })\n\n return (\n <ModalContentPure\n {...otherProps}\n trapFocusRef={trapFocusRef}\n beforeElementRef={beforeElementRef}\n afterElementRef={afterElementRef}\n onClick={(event: MouseEvent) => {\n event.stopPropagation()\n }}\n >\n {children}\n </ModalContentPure>\n )\n}\n\nexport default ModalContent\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\nimport type { FocusableElement } from 'tabbable'\nimport { tabbable } from 'tabbable'\n\ninterface TrapFocusParams {\n beforeElementRef: RefObject<HTMLElement>\n trapFocusRef: RefObject<HTMLElement>\n afterElementRef: RefObject<HTMLElement>\n}\n\n/*\n * Element that will maintain the focus inside trapFocusRef, focus the first element,\n * and focus back on the element that was in focus when useTrapFocus was triggered.\n *\n * Inspired by Reakit useTrapFocus https://github.com/reakit/reakit/blob/a211d94da9f3b683182568a56479b91afb1b85ae/packages/reakit/src/Dialog/__utils/useFocusTrap.ts\n */\nconst useTrapFocus = ({\n trapFocusRef,\n beforeElementRef,\n afterElementRef,\n}: TrapFocusParams) => {\n const tabbableNodesRef = useRef<FocusableElement[]>()\n const nodeToRestoreRef = useRef<HTMLElement | null>(\n document.hasFocus() ? (document.activeElement as HTMLElement) : null\n )\n\n // Focus back on the element that was focused when useTrapFocus is triggered.\n useEffect(() => {\n const nodeToRestore = nodeToRestoreRef.current\n\n return () => {\n nodeToRestore?.focus()\n }\n }, [nodeToRestoreRef])\n\n // Set focus on first tabbable element\n useEffect(() => {\n if (!trapFocusRef.current) {\n return\n }\n\n if (!tabbableNodesRef.current) {\n tabbableNodesRef.current = tabbable(trapFocusRef.current)\n }\n\n const [firstTabbable] = tabbableNodesRef.current\n\n if (!firstTabbable) {\n trapFocusRef.current.focus()\n\n return\n }\n\n firstTabbable.focus()\n }, [trapFocusRef])\n\n // Handle loop focus. Set keydown and focusin event listeners\n useEffect(() => {\n if (\n !trapFocusRef.current ||\n !beforeElementRef.current ||\n !afterElementRef.current\n ) {\n return\n }\n\n const beforeElement = beforeElementRef.current\n const afterElement = afterElementRef.current\n const trapFocus = trapFocusRef.current\n\n const handleLoopFocus = (nativeEvent: FocusEvent) => {\n if (!document.hasFocus()) {\n return\n }\n\n tabbableNodesRef.current = tabbable(trapFocusRef.current!)\n\n if (!tabbableNodesRef.current.length) {\n trapFocus.focus()\n }\n\n /*\n * Handle loop focus from beforeElementRef. This node can only be focused if the user press shift tab.\n * It will focus the last element of the trapFocusRef.\n */\n if (nativeEvent.target === beforeElement) {\n tabbableNodesRef.current[tabbableNodesRef.current.length - 1]?.focus()\n }\n\n /*\n * Handle loop focus from afterElementRef. This node can only be focused if the user press tab.\n * It will focus the first element of the trapFocusRef.\n */\n if (nativeEvent.target === afterElement) {\n tabbableNodesRef.current[0]?.focus()\n }\n }\n\n beforeElement?.addEventListener('focusin', handleLoopFocus)\n afterElement?.addEventListener('focusin', handleLoopFocus)\n\n return () => {\n beforeElement?.removeEventListener('focusin', handleLoopFocus)\n afterElement?.removeEventListener('focusin', handleLoopFocus)\n }\n }, [tabbableNodesRef, afterElementRef, beforeElementRef, trapFocusRef])\n}\n\nexport default useTrapFocus\n","import React, { forwardRef } from 'react'\nimport type { HTMLAttributes } from 'react'\n\ntype BannerDirectionVariant = 'vertical' | 'horizontal'\nexport interface BannerProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n children: React.ReactNode\n variant?: BannerDirectionVariant\n}\n\nconst Banner = forwardRef<HTMLDivElement, BannerProps>(function Banner(\n { testId = 'store-banner', children, variant = 'vertical', ...otherProps },\n ref\n) {\n return (\n <article\n ref={ref}\n data-store-banner={variant}\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </article>\n )\n})\n\nexport default Banner\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface BannerImageProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst BannerImage = forwardRef<HTMLDivElement, BannerImageProps>(\n function BannerImage(\n { testId = 'store-banner-image', children, ...otherProps },\n ref\n ) {\n return (\n <div ref={ref} data-banner-image data-testid={testId} {...otherProps}>\n {children}\n </div>\n )\n }\n)\n\nexport default BannerImage\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface BannerContentProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst BannerContent = forwardRef<HTMLDivElement, BannerContentProps>(\n function BannerContent(\n { testId = 'store-banner-content', children, ...otherProps },\n ref\n ) {\n return (\n <div ref={ref} data-banner-content data-testid={testId} {...otherProps}>\n {children}\n </div>\n )\n }\n)\n\nexport default BannerContent\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface BannerLinkProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst BannerLink = forwardRef<HTMLDivElement, BannerLinkProps>(\n function BannerLink(\n { testId = 'store-banner-link', children, ...otherProps },\n ref\n ) {\n return (\n <div ref={ref} data-banner-link data-testid={testId} {...otherProps}>\n {children}\n </div>\n )\n }\n)\n\nexport default BannerLink\n","import type { ReactNode, AriaAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface PaymentMethodsProps {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n /**\n * Title of the payment methods section (e.g.: \"Payment methods\",\n * \"Accepted Cards\").\n */\n title?: ReactNode\n /**\n * Defines a string value that labels the current element when\n * title is not used.\n */\n 'aria-label'?: AriaAttributes['aria-label']\n /**\n * Children will receive the flags to be displayed in the payment\n * methods section (e.g.:, visa, mastercard, etc).\n */\n children: ReactNode\n}\n\nconst PaymentMethods = forwardRef<HTMLDivElement, PaymentMethodsProps>(\n function PaymentMethods(\n {\n testId = 'store-payment-methods',\n title,\n 'aria-label': ariaLabel = 'Payment Methods',\n children,\n ...otherProps\n },\n ref\n ) {\n return (\n <div\n ref={ref}\n data-store-payment-methods\n data-testid={testId}\n {...otherProps}\n >\n {!!title && <div>{title}</div>}\n <div\n data-payment-methods-flags\n aria-label={title ? undefined : ariaLabel}\n >\n {children}\n </div>\n </div>\n )\n }\n)\n\nexport default PaymentMethods\n","import React, { forwardRef } from 'react'\nimport type { FC, HTMLAttributes, ReactNode } from 'react'\n\nimport List from '../../atoms/List'\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * A ReactNode that will be rendered as the Divider icon.\n */\n divider?: ReactNode\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst Divider: FC<BreadcrumbProps> = ({ divider, testId }) => {\n const props = {\n 'data-breadcrumb-divider': true,\n 'aria-hidden': true,\n 'data-testid': `${testId}-divider`,\n }\n\n if (React.isValidElement(divider)) {\n return React.cloneElement(divider, props)\n }\n\n return <span {...props}>{divider ?? '/'}</span>\n}\n\ntype ListItemProps = {\n children: ReactNode\n isLastItem: boolean\n divider: BreadcrumbProps['divider']\n testId: string\n}\n\nconst ListItem: FC<ListItemProps> = ({\n children,\n isLastItem,\n divider,\n testId,\n}) => {\n const props = {\n 'data-testid': `${testId}-item`,\n 'data-breadcrumb-item': isLastItem ? 'current' : true,\n 'aria-current': isLastItem ? ('page' as const) : undefined,\n }\n\n if (!React.isValidElement(children)) {\n return (\n <li data-breadcrumb-list-item>\n <span {...props}>\n {children}\n {isLastItem ? null : <Divider divider={divider} testId={testId} />}\n </span>\n </li>\n )\n }\n\n return (\n <li data-breadcrumb-list-item>\n {React.cloneElement(children, props)}\n {isLastItem ? null : <Divider divider={divider} testId={testId} />}\n </li>\n )\n}\n\nconst Breadcrumb = forwardRef<HTMLDivElement, BreadcrumbProps>(\n function Breadcrumb(\n {\n children,\n divider: rawDivider,\n testId = 'store-breadcrumb',\n ...otherProps\n },\n ref\n ) {\n return (\n <nav\n aria-label=\"Breadcrumb\"\n role=\"navigation\"\n ref={ref}\n data-store-breadcrumb\n data-testid={testId}\n {...otherProps}\n >\n <List data-breadcrumb-list variant=\"ordered\">\n {React.Children.toArray(children).map(\n (child, index, childrenArray) => {\n const isLastItem = index === childrenArray.length - 1\n\n return (\n <ListItem\n isLastItem={isLastItem}\n divider={rawDivider}\n key={`breadcrumb-${index}`}\n testId={testId}\n >\n {child}\n </ListItem>\n )\n }\n )}\n </List>\n </nav>\n )\n }\n)\n\nexport default Breadcrumb\n","import React, { forwardRef } from 'react'\n\nimport Button from '../../atoms/Button'\nimport type { ButtonProps } from '../../atoms/Button'\nimport Spinner from '../../atoms/Spinner'\n\nexport interface LoadingButtonProps extends ButtonProps {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n /**\n * The current loading state of the button.\n */\n loading: boolean\n}\n\nconst LoadingButton = forwardRef<HTMLButtonElement, LoadingButtonProps>(\n function LoadingButton(\n { children, loading, testId = 'store-loading-button', ...otherProps },\n ref\n ) {\n return (\n <Button\n ref={ref}\n data-store-loading-button\n testId={testId}\n {...otherProps}\n >\n {loading ? <Spinner /> : children}\n </Button>\n )\n }\n)\n\nexport default LoadingButton\n","import type { ChangeEventHandler } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport interface RadioGroupContext {\n /**\n * Name to link children by context.\n */\n name: string\n /**\n * Value of checked child.\n */\n selectedValue?: string | number\n /**\n * Function that is triggered when any children is checked.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>\n}\n\nexport const RadioGroupContext = createContext<RadioGroupContext | undefined>(\n undefined\n)\n\nexport function useRadioGroup() {\n const context = useContext(RadioGroupContext)\n\n if (!context) {\n throw new Error(\n `useRadioOption hook cannot be used outside the RadioGroup context`\n )\n }\n\n return context\n}\n","import type { InputHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nimport Radio from '../../atoms/Radio'\nimport { useRadioGroup } from './useRadioGroup'\n\nexport interface RadioOptionProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n /**\n * Attribute to set aria-label option as required.\n */\n label: string\n /**\n * Value to be emitted when radio is clicked.\n */\n value: string | number\n}\n\nconst RadioOption = forwardRef<HTMLInputElement, RadioOptionProps>(\n function RadioOption(\n { label, value, children, testId = 'store-radio-option', ...otherProps },\n ref\n ) {\n const { name, selectedValue, onChange } = useRadioGroup()\n\n return (\n <label aria-label={label} data-store-radio-option>\n <Radio\n data-store-radio-option-item\n ref={ref}\n name={name}\n checked={value === selectedValue}\n onChange={onChange}\n value={value}\n testId={testId}\n {...otherProps}\n />\n {children}\n </label>\n )\n }\n)\n\nexport default RadioOption\n","import type { HTMLAttributes, ReactElement } from 'react'\nimport React, {\n useContext,\n cloneElement,\n forwardRef,\n createContext,\n} from 'react'\n\ninterface AccordionContext {\n indices: Set<number>\n onChange: (index: number) => void\n numberOfItems: number\n}\n\nconst AccordionContext = createContext<AccordionContext | undefined>(undefined)\n\nexport interface AccordionProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n /**\n * Indices that indicate which accordion items are opened.\n */\n indices: Iterable<number>\n /**\n * Function that is triggered when an accordion item is opened/closed.\n */\n onChange: (index: number) => void\n}\n\nconst Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n { testId = 'store-accordion', indices, onChange, children, ...otherProps },\n ref\n) {\n const childrenWithIndex = React.Children.map(\n children as ReactElement,\n (child, index) => cloneElement(child, { index: child.props.index ?? index })\n )\n\n const context = {\n indices: new Set(indices),\n onChange,\n numberOfItems: childrenWithIndex.length,\n }\n\n return (\n <AccordionContext.Provider value={context}>\n <div\n ref={ref}\n data-store-accordion\n data-testid={testId}\n role=\"region\"\n {...otherProps}\n >\n {childrenWithIndex}\n </div>\n </AccordionContext.Provider>\n )\n})\n\nexport function useAccordion() {\n const context = useContext(AccordionContext)\n\n if (context === undefined) {\n throw new Error(\n 'Do not use Accordion components outside the Accordion context.'\n )\n }\n\n return context\n}\n\nexport default Accordion\n","import type { HTMLAttributes } from 'react'\nimport React, { useContext, forwardRef, createContext } from 'react'\n\ninterface AccordionItemContext {\n index: number\n panel: string\n button: string\n prefixId: string\n}\n\nconst AccordionItemContext = createContext<AccordionItemContext | undefined>(\n undefined\n)\n\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n /**\n * Index of the current accordion item within the accordion.\n */\n index?: number\n /**\n * Namespace ID prefix for the current Accordion item's panel and button\n * to avoid ID duplication when multiple instances are on the same page.\n */\n prefixId?: string\n}\n\nconst AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n function AccordionItem(\n {\n testId = 'store-accordion-item',\n children,\n prefixId = '',\n index = 0,\n ...otherProps\n },\n ref\n ) {\n const context = {\n index,\n prefixId,\n panel: `${prefixId && `${prefixId}-`}panel--${index}`,\n button: `${prefixId && `${prefixId}-`}button--${index}`,\n }\n\n return (\n <AccordionItemContext.Provider value={context}>\n <div ref={ref} data-accordion-item data-testid={testId} {...otherProps}>\n {children}\n </div>\n </AccordionItemContext.Provider>\n )\n }\n)\n\nexport function useAccordionItem() {\n const context = useContext(AccordionItemContext)\n\n if (context === undefined) {\n throw new Error(\n 'Do not use AccordionItem components outside the AccordionItem context.'\n )\n }\n\n return context\n}\n\nexport default AccordionItem\n","import type { ButtonHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nimport Button from '../../atoms/Button'\nimport { useAccordion } from './Accordion'\nimport { useAccordionItem } from './AccordionItem'\n\nexport interface AccordionButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst AccordionButton = forwardRef<HTMLButtonElement, AccordionButtonProps>(\n function AccordionButton(\n { testId = 'store-accordion-button', children, ...otherProps },\n ref\n ) {\n const { indices, onChange, numberOfItems } = useAccordion()\n const { index, panel, button, prefixId } = useAccordionItem()\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n if (!['ArrowDown', 'ArrowUp'].includes(event.key)) {\n return\n }\n\n const getNext = () => {\n const next = Number(index) + 1 === numberOfItems ? 0 : Number(index) + 1\n\n return document.getElementById(\n `${prefixId && `${prefixId}-`}button--${next}`\n )\n }\n\n const getPrevious = () => {\n const previous =\n Number(index) - 1 < 0 ? numberOfItems - 1 : Number(index) - 1\n\n return document.getElementById(\n `${prefixId && `${prefixId}-`}button--${previous}`\n )\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n getNext()?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n getPrevious()?.focus()\n break\n\n default:\n }\n }\n\n return (\n <Button\n ref={ref}\n id={button}\n aria-expanded={indices.has(index)}\n aria-controls={panel}\n data-accordion-button\n data-testid={testId}\n onKeyDown={onKeyDown}\n onClick={() => {\n onChange(index)\n }}\n {...otherProps}\n >\n {children}\n </Button>\n )\n }\n)\n\nexport default AccordionButton\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nimport { useAccordion } from './Accordion'\nimport { useAccordionItem } from './AccordionItem'\n\nexport interface AccordionPanelProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst AccordionPanel = forwardRef<HTMLDivElement, AccordionPanelProps>(\n function AccordionPanel(\n { testId = 'store-accordion-panel', children, ...otherProps },\n ref\n ) {\n const { indices } = useAccordion()\n const { index, button, panel } = useAccordionItem()\n\n return (\n <div\n ref={ref}\n id={panel}\n aria-labelledby={button}\n role=\"region\"\n data-accordion-panel\n data-testid={testId}\n hidden={!indices.has(index)}\n {...otherProps}\n >\n {children}\n </div>\n )\n }\n)\n\nexport default AccordionPanel\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n children: React.ReactNode\n}\n\nconst Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n { testId = 'store-table', children, ...otherProps },\n ref\n) {\n return (\n <table ref={ref} data-store-table data-testid={testId} {...otherProps}>\n {children}\n </table>\n )\n})\n\nexport default Table\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n children: React.ReactNode\n}\n\nconst TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(\n function TableRow(\n { testId = 'store-table-row', children, ...otherProps },\n ref\n ) {\n return (\n <tr ref={ref} data-table-row data-testid={testId} {...otherProps}>\n {children}\n </tr>\n )\n }\n)\n\nexport default TableRow\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\ntype TableCellVariant = 'data' | 'header'\n\nexport interface TableCellProps extends HTMLAttributes<HTMLTableCellElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n /**\n * Specify if this component should be rendered as a header (`<th>`) or as a data cell (`<td>`).\n */\n variant?: TableCellVariant\n /**\n * Defines the cells that the header element (`<th>`) relates to.\n * @see scope https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-scope\n */\n scope?: 'col' | 'row' | 'rowgroup' | 'colgroup'\n}\n\nconst TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(\n function TableCell(\n {\n testId = 'store-table-cell',\n children,\n variant = 'data',\n scope,\n ...otherProps\n },\n ref\n ) {\n const Cell = variant === 'header' ? 'th' : 'td'\n\n return (\n <Cell\n ref={ref}\n data-table-cell={variant}\n data-testid={testId}\n scope={scope}\n {...otherProps}\n >\n {children}\n </Cell>\n )\n }\n)\n\nexport default TableCell\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface TableBodyProps\n extends HTMLAttributes<HTMLTableSectionElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n children: React.ReactNode\n}\n\nconst TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(\n function TableBody(\n { children, testId = 'store-table-body', ...otherProps },\n ref\n ) {\n return (\n <tbody ref={ref} data-testid={testId} data-table-body {...otherProps}>\n {children}\n </tbody>\n )\n }\n)\n\nexport default TableBody\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface TableHeadProps\n extends HTMLAttributes<HTMLTableSectionElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n children: React.ReactNode\n}\n\nconst TableHead = forwardRef<HTMLTableSectionElement, TableHeadProps>(\n function TableHead(\n { children, testId = 'store-table-head', ...otherProps },\n ref\n ) {\n return (\n <thead ref={ref} data-testid={testId} data-table-head {...otherProps}>\n {children}\n </thead>\n )\n }\n)\n\nexport default TableHead\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface TableFooterProps\n extends HTMLAttributes<HTMLTableSectionElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n children: React.ReactNode\n}\n\nconst TableFooter = forwardRef<HTMLTableSectionElement, TableFooterProps>(\n function TableFooter(\n { children, testId = 'store-table-footer', ...otherProps },\n ref\n ) {\n return (\n <tfoot ref={ref} data-testid={testId} data-table-footer {...otherProps}>\n {children}\n </tfoot>\n )\n }\n)\n\nexport default TableFooter\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n}\n\nconst Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n { testId = 'store-alert', children, ...otherProps },\n ref\n) {\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-store-alert\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </div>\n )\n})\n\nexport default Alert\n","import type { InputHTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nimport type { InputProps } from '../../atoms/Input'\nimport Input from '../../atoms/Input'\nimport type { IconButtonProps } from '../IconButton'\nimport IconButton from '../IconButton'\n\nexport interface QuantitySelectorProps\n extends InputHTMLAttributes<HTMLDivElement> {\n /**\n * Sets the current value that should be displayed on the input at the center of the quantity selector.\n */\n quantity: number | string\n\n /**\n * Object with properties that will be passed forward the inner IconButton atom at the left of the input.\n */\n leftButtonProps: Omit<IconButtonProps, 'aria-label'>\n\n /**\n * Object with properties that will be passed forward the inner Input atom between the two buttons.\n */\n inputProps: InputProps\n\n /**\n * Object with properties that will be passed forward the inner IconButton atom at the right of the input.\n */\n rightButtonProps: Omit<IconButtonProps, 'aria-label'>\n\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n *\n * @default 'store-quantity-selector'\n */\n testId?: string\n}\n\nconst QuantitySelector = forwardRef<HTMLDivElement, QuantitySelectorProps>(\n function QuantitySelector(\n {\n quantity,\n testId = 'store-quantity-selector',\n leftButtonProps,\n inputProps,\n rightButtonProps,\n ...otherProps\n }: QuantitySelectorProps,\n ref\n ) {\n return (\n <div\n data-store-quantity-selector\n data-testid={testId}\n ref={ref}\n {...otherProps}\n >\n <IconButton\n aria-controls=\"quantity-selector-input\"\n aria-label=\"Decrement Quantity\"\n data-quantity-selector-button=\"left\"\n {...leftButtonProps}\n />\n <Input\n aria-label=\"Quantity\"\n data-quantity-selector-input\n id=\"quantity-selector-input\"\n value={quantity}\n {...inputProps}\n />\n <IconButton\n aria-controls=\"quantity-selector-input\"\n aria-label=\"Increment Quantity\"\n data-quantity-selector-button=\"right\"\n {...rightButtonProps}\n />\n </div>\n )\n }\n)\n\nexport default QuantitySelector\n","import { createContext } from 'react'\n\nexport type DropdownContextState = {\n /**\n * Control de Dropdown state as Opened (true) or Closed (false).\n */\n isOpen: boolean\n /**\n * Reference to DropdownButton, used to calculate a position for the DropdownMenu.\n */\n dropdownButtonRef: React.RefObject<HTMLButtonElement> | null\n /**\n * Reference to a selected DropdownItem, used to manipulate focus.\n */\n selectedDropdownItemIndexRef: React.MutableRefObject<number> | null\n /**\n * Array of References to dropdownItems in a DropdownMenu.\n */\n dropdownItemsRef: React.MutableRefObject<HTMLButtonElement[]> | null\n /**\n * Close DropdownMenu event inherited from Modal.\n */\n onDismiss?(): void\n /**\n * Function responsible for close the DropdownMenu in this context.\n */\n close?(): void\n /**\n * Function responsible for open the DropdownMenu in this context.\n */\n open?(): void\n /**\n * Function responsible for switch the the DropdownMenu state in this context.\n */\n toggle?(): void\n\n /**\n * Identifier to be used in aria-controls\n */\n id: string\n}\n\nconst defaultState: DropdownContextState = {\n isOpen: false,\n dropdownButtonRef: null,\n selectedDropdownItemIndexRef: null,\n dropdownItemsRef: null,\n id: 'store-dropdown',\n}\n\nconst DropdownContext = createContext<DropdownContextState>(defaultState)\n\nexport default DropdownContext\n","import { useContext } from 'react'\n\nimport type { DropdownContextState } from '../contexts/DropdownContext'\nimport DropdownContext from '../contexts/DropdownContext'\n\n/**\n * Hook to use the Dropdown context.\n * @returns Dropdown context.\n */\nexport const useDropdown = () => {\n const context = useContext<DropdownContextState>(DropdownContext)\n\n if (context === undefined) {\n throw new Error('Do not use useDropdown hook outside the Dropdown context.')\n }\n\n return context\n}\n","import type { ButtonHTMLAttributes } from 'react'\nimport React, { forwardRef, useImperativeHandle } from 'react'\n\nimport { useDropdown } from './hooks/useDropdown'\n\nexport interface DropdownButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst DropdownButton = forwardRef<HTMLButtonElement, DropdownButtonProps>(\n function Button(\n { children, testId = 'store-dropdown-button', ...otherProps },\n ref\n ) {\n const { toggle, dropdownButtonRef, isOpen, id } = useDropdown()\n\n useImperativeHandle(ref, () => dropdownButtonRef!.current!, [\n dropdownButtonRef,\n ])\n\n return (\n <button\n data-store-dropdown-button\n onClick={toggle}\n data-testid={testId}\n ref={dropdownButtonRef}\n aria-expanded={isOpen}\n aria-haspopup=\"menu\"\n aria-controls={id}\n {...otherProps}\n >\n {children}\n </button>\n )\n }\n)\n\nexport default DropdownButton\n","import type { ButtonHTMLAttributes } from 'react'\nimport React, { useImperativeHandle, forwardRef, useRef, useState } from 'react'\n\nimport { useDropdown } from './hooks/useDropdown'\n\nexport interface DropdownItemProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst DropdownItem = forwardRef<HTMLButtonElement, DropdownItemProps>(\n function Button(\n { children, onClick, testId = 'store-dropdown-item', ...otherProps },\n ref\n ) {\n const {\n dropdownItemsRef,\n selectedDropdownItemIndexRef,\n close,\n } = useDropdown()\n\n const [dropdownItemIndex, setDropdownItemIndex] = useState(0)\n const dropdownItemRef = useRef<HTMLButtonElement>()\n\n const addToRefs = (el: HTMLButtonElement) => {\n if (el && !dropdownItemsRef?.current.includes(el)) {\n dropdownItemsRef?.current.push(el)\n setDropdownItemIndex(\n dropdownItemsRef?.current.findIndex((element) => element === el) ?? 0\n )\n }\n\n dropdownItemRef.current = el\n }\n\n const onFocusItem = () => {\n selectedDropdownItemIndexRef!.current = dropdownItemIndex\n dropdownItemsRef?.current[selectedDropdownItemIndexRef!.current]?.focus()\n }\n\n const handleOnClickItem = (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => {\n onClick?.(event)\n close?.()\n }\n\n useImperativeHandle(ref, () => dropdownItemRef.current!, [])\n\n return (\n <button\n data-store-dropdown-item\n data-testid={testId}\n ref={addToRefs}\n onFocus={onFocusItem}\n onMouseEnter={onFocusItem}\n onClick={handleOnClickItem}\n role=\"menuitem\"\n tabIndex={-1}\n data-index={dropdownItemIndex}\n {...otherProps}\n >\n {children}\n </button>\n )\n }\n)\n\nexport default DropdownItem\n","import React, { forwardRef } from 'react'\nimport type { HTMLAttributes } from 'react'\n\nexport interface HeroProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n}\n\nconst Hero = forwardRef<HTMLDivElement, HeroProps>(function Hero(\n { testId = 'store-hero', children, ...otherProps },\n ref\n) {\n return (\n <article ref={ref} data-store-hero data-testid={testId} {...otherProps}>\n {children}\n </article>\n )\n})\n\nexport default Hero\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface HeroImageProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst HeroImage = forwardRef<HTMLDivElement, HeroImageProps>(function HeroImage(\n { testId = 'store-hero-image', children, ...otherProps },\n ref\n) {\n return (\n <div ref={ref} data-hero-image data-testid={testId} {...otherProps}>\n {children}\n </div>\n )\n})\n\nexport default HeroImage\n","import type { HTMLAttributes } from 'react'\nimport React, { forwardRef } from 'react'\n\nexport interface HeroHeadingProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n}\n\nconst HeroHeading = forwardRef<HTMLDivElement, HeroHeadingProps>(\n function HeroHeading(\n { testId = 'store-hero-heading', children, ...otherProps },\n ref\n ) {\n return (\n <header ref={ref} data-hero-heading data-testid={testId} {...otherProps}>\n {children}\n </header>\n )\n }\n)\n\nexport default HeroHeading\n","import type { KeyboardEvent, PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\nimport type { SwipeableProps } from 'react-swipeable'\n\nimport { RightArrowIcon, LeftArrowIcon } from './Arrows'\nimport useSlider from '../../hooks/useSlider/useSlider'\nimport useSlideVisibility from './hooks/useSlideVisibility'\nimport Bullets from '../Bullets'\nimport IconButton from '../IconButton'\n\nconst createTransformValues = (infinite: boolean, totalItems: number) => {\n const transformMap: Record<number, number> = {}\n const slideWidth = 100 / totalItems\n\n for (let idx = 0; idx < totalItems; ++idx) {\n const currIdx = infinite ? idx - 1 : idx\n const transformValue = -(slideWidth * idx)\n\n transformMap[currIdx] = transformValue\n }\n\n return transformMap\n}\n\nexport interface CarouselProps extends SwipeableProps {\n id?: string\n testId?: string\n infiniteMode?: boolean\n controls?: 'complete' | 'navigationArrows' | 'paginationBullets'\n transition?: {\n duration: number\n property: string\n delay?: number\n timing?: string\n }\n}\n\nfunction Carousel({\n infiniteMode = true,\n controls = 'complete',\n testId = 'store-carousel',\n transition = {\n duration: 400,\n property: 'transform',\n },\n children,\n id = 'store-carousel',\n ...swipeableConfigOverrides\n}: PropsWithChildren<CarouselProps>) {\n const childrenArray = React.Children.toArray(children)\n const childrenCount = childrenArray.length\n const numberOfSlides = infiniteMode ? childrenCount + 2 : childrenCount\n const slidingTransition = `${transition.property} ${transition.duration}ms ${\n transition.timing ?? ''\n } ${transition.delay ?? ''}`\n\n const showNavigationArrows =\n controls === 'complete' || controls === 'navigationArrows'\n\n const showPaginationBullets =\n controls === 'complete' || controls === 'paginationBullets'\n\n const transformValues = useMemo(\n () => createTransformValues(infiniteMode, numberOfSlides),\n [numberOfSlides, infiniteMode]\n )\n\n const { handlers, slide, sliderState, sliderDispatch } = useSlider({\n totalItems: childrenCount,\n itemsPerPage: 1,\n infiniteMode,\n ...swipeableConfigOverrides,\n })\n\n const { isItemVisible, shouldRenderItem } = useSlideVisibility({\n itemsPerPage: sliderState.itemsPerPage,\n currentSlide: sliderState.currentItem,\n totalItems: childrenCount,\n })\n\n const postRenderedSlides =\n infiniteMode && children ? childrenArray.slice(0, 1) : []\n\n const preRenderedSlides =\n infiniteMode && children ? childrenArray.slice(childrenCount - 1) : []\n\n const slides = preRenderedSlides.concat(\n (children as any) ?? [],\n postRenderedSlides\n )\n\n const slidePrevious = () => {\n if (\n sliderState.sliding ||\n (!infiniteMode && sliderState.currentPage === 0)\n ) {\n return\n }\n\n slide('previous', sliderDispatch)\n }\n\n const slideNext = () => {\n if (\n sliderState.sliding ||\n (!infiniteMode && sliderState.currentPage === childrenCount - 1)\n ) {\n return\n }\n\n slide('next', sliderDispatch)\n }\n\n // accessible behavior for tablist\n const handleBulletsKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowLeft': {\n slidePrevious()\n break\n }\n\n case 'ArrowRight': {\n slideNext()\n break\n }\n\n case 'Home': {\n slide(0, sliderDispatch)\n break\n }\n\n case 'End': {\n slide(childrenCount - 1, sliderDispatch)\n break\n }\n\n default:\n }\n }\n\n return (\n <section\n id={id}\n data-store-carousel\n data-testid={testId}\n aria-label=\"carousel\"\n aria-roledescription=\"carousel\"\n >\n <div\n data-carousel-track-container\n style={{ overflow: 'hidden', width: '100%' }}\n {...handlers}\n >\n <div\n data-carousel-track\n style={{\n display: 'flex',\n transition: sliderState.sliding ? slidingTransition : undefined,\n width: `${numberOfSlides * 100}%`,\n transform: `translate3d(${\n transformValues[sliderState.currentPage]\n }%, 0, 0)`,\n }}\n onTransitionEnd={() => {\n sliderDispatch({\n type: 'STOP_SLIDE',\n })\n\n if (sliderState.currentItem >= childrenCount) {\n sliderDispatch({\n type: 'GO_TO_PAGE',\n payload: {\n pageIndex: 0,\n shouldSlide: false,\n },\n })\n }\n\n if (sliderState.currentItem < 0) {\n sliderDispatch({\n type: 'GO_TO_PAGE',\n payload: {\n pageIndex: sliderState.totalPages - 1,\n shouldSlide: false,\n },\n })\n }\n }}\n aria-live=\"polite\"\n >\n {slides.map((currentSlide, idx) => (\n <div\n role=\"tabpanel\"\n aria-roledescription=\"slide\"\n key={idx}\n id={`carousel-item-${idx}`}\n data-carousel-item\n style={{ width: '100%' }}\n data-visible={\n isItemVisible(idx - Number(infiniteMode)) || undefined\n }\n >\n {shouldRenderItem(idx - Number(infiniteMode))\n ? currentSlide\n : null}\n </div>\n ))}\n </div>\n </div>\n\n {showNavigationArrows && (\n <div data-carousel-controls>\n <IconButton\n aria-label=\"previous\"\n data-arrow=\"left\"\n aria-controls={id}\n onClick={slidePrevious}\n icon={<LeftArrowIcon />}\n />\n <IconButton\n aria-label=\"next\"\n data-arrow=\"right\"\n aria-controls={id}\n onClick={slideNext}\n icon={<RightArrowIcon />}\n />\n </div>\n )}\n\n {showPaginationBullets && (\n <div data-carousel-bullets>\n <Bullets\n tabIndex={0}\n totalQuantity={childrenCount}\n activeBullet={sliderState.currentPage}\n onClick={(_, idx) => {\n if (sliderState.sliding) {\n return\n }\n\n slide(idx, sliderDispatch)\n }}\n ariaControlsGenerator={(idx) => `carousel-item-${idx}`}\n onKeyDown={handleBulletsKeyDown}\n onFocus={(event) => {\n event.currentTarget.focus()\n }}\n />\n </div>\n )}\n </section>\n )\n}\n\nexport default Carousel\n","import { useRef, useEffect } from 'react'\n\nexport interface UseSlideVisibilityArgs {\n currentSlide: number\n itemsPerPage: number\n totalItems: number\n}\n\ninterface IsSlideVisibleArgs {\n itemsPerPage: number\n currentSlide: number\n slideIdx: number\n totalItems: number\n}\n\nfunction isSlideVisible({\n itemsPerPage,\n currentSlide,\n slideIdx,\n totalItems,\n}: IsSlideVisibleArgs) {\n const isClonedSlide = currentSlide < 0 || currentSlide >= totalItems\n const isVisible =\n slideIdx >= currentSlide && slideIdx < currentSlide + itemsPerPage\n\n return isClonedSlide || isVisible\n}\n\nexport default function useSlideVisibility({\n currentSlide,\n itemsPerPage,\n totalItems,\n}: UseSlideVisibilityArgs) {\n /** Keeps track of slides that have been visualized before.\n * We want to keep rendering them because the issue is mostly rendering\n * slides that might never be viewed; On the other hand, hiding slides\n * that were visible causes visual glitches */\n const visitedSlides = useRef<Set<number>>(new Set())\n\n useEffect(() => {\n for (let i = 0; i < itemsPerPage; i++) {\n visitedSlides.current.add(currentSlide + i)\n }\n }, [currentSlide, itemsPerPage])\n\n const isItemVisible = (index: number) =>\n isSlideVisible({\n slideIdx: index,\n currentSlide,\n itemsPerPage,\n totalItems,\n })\n\n const shouldRenderItem = (index: number) => {\n return visitedSlides.current.has(index) || isItemVisible(index)\n }\n\n return { shouldRenderItem, isItemVisible }\n}\n","import type { ReactNode } from 'react'\nimport React, { useRef, useMemo, useState, useEffect, useCallback } from 'react'\n\nimport DropdownContext from './contexts/DropdownContext'\n\nexport type DropdownProps = {\n children: ReactNode\n onDismiss?(): void\n isOpen?: boolean\n id?: string\n}\n\nconst Dropdown = ({\n children,\n isOpen: isOpenDefault = false,\n onDismiss,\n id = 'store-dropdown',\n}: DropdownProps) => {\n const [isOpen, setIsOpen] = useState(isOpenDefault)\n const dropdownItemsRef = useRef<HTMLButtonElement[]>([])\n const selectedDropdownItemIndexRef = useRef(0)\n const dropdownButtonRef = useRef<HTMLButtonElement>(null)\n\n const close = useCallback(() => {\n setIsOpen(false)\n onDismiss?.()\n dropdownButtonRef.current?.focus()\n }, [onDismiss])\n\n const open = () => {\n setIsOpen(true)\n }\n\n const toggle = useCallback(() => {\n setIsOpen((old) => {\n if (old) {\n onDismiss?.()\n dropdownButtonRef.current?.focus()\n }\n\n return !old\n })\n }, [onDismiss])\n\n useEffect(() => {\n setIsOpen(isOpenDefault)\n }, [isOpenDefault])\n\n useEffect(() => {\n isOpen && dropdownItemsRef?.current[0]?.focus()\n }, [isOpen])\n\n useEffect(() => {\n let firstClick = true\n\n const event = (e: MouseEvent) => {\n const someItemWasClicked = dropdownItemsRef?.current.some(\n (item) => e.target === item\n )\n\n if (firstClick) {\n firstClick = false\n\n return\n }\n\n !someItemWasClicked && close()\n }\n\n if (isOpen) {\n document.addEventListener('click', event)\n } else {\n document.removeEventListener('click', event)\n }\n\n return () => {\n document.removeEventListener('click', event)\n }\n }, [close, isOpen])\n\n const value = useMemo(() => {\n return {\n isOpen,\n close,\n open,\n toggle,\n dropdownButtonRef,\n onDismiss,\n selectedDropdownItemIndexRef,\n dropdownItemsRef,\n id,\n }\n }, [close, id, isOpen, onDismiss, toggle])\n\n return (\n <DropdownContext.Provider value={value}>\n {children}\n </DropdownContext.Provider>\n )\n}\n\nexport default Dropdown\n","import type {\n AriaAttributes,\n KeyboardEvent,\n PropsWithChildren,\n MouseEvent,\n ReactNode,\n} from 'react'\nimport React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { ModalContentProps } from '../Modal/ModalContent'\nimport { useDropdown } from './hooks/useDropdown'\nimport { useDropdownPosition } from './hooks/useDropdownPosition'\n\nexport interface DropdownMenuProps extends ModalContentProps {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n /**\n * Identifies the element (or elements) that labels the current element.\n * @see aria-labelledby https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby\n */\n 'aria-labelledby'?: AriaAttributes['aria-label']\n\n /**\n * This function is called whenever the user hits \"Escape\" or clicks outside\n * the dialog.\n */\n onDismiss?: (event: MouseEvent | KeyboardEvent) => void\n\n children: ReactNode[] | ReactNode\n}\n\n/*\n * This component is based on @reach/dialog.\n * https://github.com/reach/reach-ui/blob/main/packages/dialog/src/index.tsx\n * https://reach.tech/dialog\n */\n\nconst DropdownMenu = ({\n children,\n testId = 'store-dropdown-menu',\n style,\n ...otherProps\n}: PropsWithChildren<DropdownMenuProps>) => {\n const {\n isOpen,\n close,\n dropdownItemsRef,\n selectedDropdownItemIndexRef,\n id,\n } = useDropdown()\n\n const dropdownPosition = useDropdownPosition()\n\n const childrenLength = React.Children.toArray(children).length\n\n const handleDownPress = () => {\n if (selectedDropdownItemIndexRef!.current < childrenLength - 1) {\n selectedDropdownItemIndexRef!.current++\n } else {\n selectedDropdownItemIndexRef!.current = 0\n }\n\n dropdownItemsRef?.current[selectedDropdownItemIndexRef!.current]?.focus()\n }\n\n const handleUpPress = () => {\n if (selectedDropdownItemIndexRef!.current > 0) {\n selectedDropdownItemIndexRef!.current--\n } else {\n selectedDropdownItemIndexRef!.current = childrenLength - 1\n }\n\n dropdownItemsRef?.current[selectedDropdownItemIndexRef!.current]?.focus()\n }\n\n const handleHomePress = () => {\n selectedDropdownItemIndexRef!.current = 0\n dropdownItemsRef?.current[selectedDropdownItemIndexRef!.current]?.focus()\n }\n\n const handleEndPress = () => {\n selectedDropdownItemIndexRef!.current = childrenLength - 1\n dropdownItemsRef?.current[selectedDropdownItemIndexRef!.current]?.focus()\n }\n\n const handleEscapePress = () => {\n close?.()\n }\n\n const handleBackdropKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.key === 'Enter') {\n return\n }\n\n event.preventDefault()\n\n event.key === 'Escape' && handleEscapePress()\n\n event.key === 'ArrowDown' && handleDownPress()\n\n event.key === 'ArrowUp' && handleUpPress()\n\n event.key === 'Home' && handleHomePress()\n\n event.key === 'End' && handleEndPress()\n\n event.stopPropagation()\n }\n\n const clearChildrenReferences = () => {\n dropdownItemsRef!.current = []\n\n return null\n }\n\n return isOpen\n ? createPortal(\n <div\n role=\"presentation\"\n data-store-dropdown-overlay\n onKeyDown={handleBackdropKeyDown}\n data-testid={`${testId}-overlay`}\n >\n <div\n role=\"menu\"\n aria-orientation=\"vertical\"\n data-store-dropdown-menu\n data-testid={testId}\n style={{ ...dropdownPosition, ...style }}\n id={id}\n {...otherProps}\n >\n {children}\n </div>\n </div>,\n document.body\n )\n : clearChildrenReferences()\n}\n\nexport default DropdownMenu\n","import { useDropdown } from './useDropdown'\n\ntype DropdownPosition = Pick<React.CSSProperties, 'position' | 'top' | 'left'>\n\n/**\n * Hook used to find the DropdownMenu position in relation to DropdownButton\n * @returns Style with positions.\n */\nexport const useDropdownPosition = (): DropdownPosition => {\n const { dropdownButtonRef } = useDropdown()\n\n // Necessary to use this component in SSR\n const isBrowser = typeof window !== 'undefined'\n\n const buttonRect = dropdownButtonRef?.current?.getBoundingClientRect()\n const topLevel = buttonRect?.top ?? 0\n const topOffset = buttonRect?.height ?? 0\n const leftLevel = buttonRect?.left ?? 0\n\n // The scroll properties fix the position of DropdownMenu when the scroll is activated.\n const scrollTop = isBrowser ? document?.documentElement?.scrollTop : 0\n const scrollLeft = isBrowser ? document?.documentElement?.scrollLeft : 0\n\n const topPosition = topLevel + topOffset + scrollTop\n\n const leftPosition = leftLevel + scrollLeft\n\n return {\n position: 'absolute',\n top: topPosition,\n left: leftPosition,\n }\n}\n","import type {\n AriaAttributes,\n KeyboardEvent,\n MouseEvent,\n PropsWithChildren,\n} from 'react'\nimport React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport Overlay from '../../atoms/Overlay'\nimport ModalContent from './ModalContent'\nimport type { ModalContentProps } from './ModalContent'\n\nexport interface ModalProps extends ModalContentProps {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n /**\n * Identifies the element (or elements) that labels the current element.\n * @see aria-labelledby https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby\n */\n 'aria-labelledby'?: AriaAttributes['aria-label']\n\n /**\n * This function is called whenever the user hits \"Escape\" or clicks outside\n * the dialog.\n */\n onDismiss?: (event: MouseEvent | KeyboardEvent) => void\n /**\n * Controls whether or not the dialog is open.\n */\n isOpen: boolean\n}\n\n/*\n * This component is based on @reach/dialog.\n * https://github.com/reach/reach-ui/blob/main/packages/dialog/src/index.tsx\n * https://reach.tech/dialog\n */\n\nconst Modal = ({\n isOpen,\n children,\n onDismiss,\n testId = 'store-modal',\n ...otherProps\n}: PropsWithChildren<ModalProps>) => {\n const handleBackdropClick = (event: MouseEvent) => {\n if (event.defaultPrevented) {\n return\n }\n\n event.stopPropagation()\n onDismiss?.(event)\n }\n\n const handleBackdropKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || event.defaultPrevented) {\n return\n }\n\n event.stopPropagation()\n onDismiss?.(event)\n }\n\n return isOpen\n ? createPortal(\n <Overlay\n data-modal-overlay\n onClick={handleBackdropClick}\n onKeyDown={handleBackdropKeyDown}\n >\n <ModalContent {...otherProps} testId={testId}>\n {children}\n </ModalContent>\n </Overlay>,\n document.body\n )\n : null\n}\n\nexport default Modal\n","import React from 'react'\nimport type { ReactNode, FormHTMLAttributes } from 'react'\n\nimport Form from '../../molecules/Form'\n\nexport type OutOfStockBaseProps = {\n /**\n * ID to find this component in testing tools (e.g.: cypress,\n * testing-library, and jest).\n */\n testId?: string\n /**\n * Children for Out of Stock components.\n */\n children: string | ReactNode\n}\n\nexport type OutOfStockProps = OutOfStockBaseProps & {\n /**\n * Event emitted when form is submitted.\n */\n onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void\n} & FormHTMLAttributes<HTMLFormElement>\n\nconst OutOfStock = ({\n testId = 'store-out-of-stock',\n children,\n ...otherProps\n}: OutOfStockProps) => {\n return (\n <section data-store-out-of-stock data-testid={testId}>\n <Form data-out-of-stock-form testId={`${testId}-form`} {...otherProps}>\n {children}\n </Form>\n </section>\n )\n}\n\nexport default OutOfStock\n","import React from 'react'\n\nimport type { OutOfStockBaseProps } from './OutOfStock'\n\nexport type OutOfStockMessageProps = {\n /**\n * Attribute used for polymorphic component.\n */\n as?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'\n} & OutOfStockBaseProps\n\nexport const OutOfStockMessage = ({\n as: MessageComponent = 'p',\n testId = 'store-out-of-stock-message',\n children,\n ...otherProps\n}: OutOfStockMessageProps) => {\n return (\n <MessageComponent\n data-out-of-stock-message\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </MessageComponent>\n )\n}\n","import React from 'react'\n\nimport type { OutOfStockBaseProps } from './OutOfStock'\n\nexport type OutOfStockTitleProps = {\n /**\n * Attribute used for polymorphic component.\n */\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p'\n} & OutOfStockBaseProps\n\nexport const OutOfStockTitle = ({\n as: TitleComponent = 'h2',\n testId = 'store-out-of-stock-title',\n children,\n ...otherProps\n}: OutOfStockTitleProps) => {\n return (\n <TitleComponent\n data-out-of-stock-title\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </TitleComponent>\n )\n}\n","import type { PopoverProps as ReachPopoverProps } from '@reach/popover'\nimport ReachPopover, { positionDefault } from '@reach/popover'\nimport type { ReactNode } from 'react'\nimport React from 'react'\n\nexport type PopoverProps = Omit<ReachPopoverProps, 'position' | 'targetRef'> & {\n /**\n * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).\n */\n testId?: string\n /**\n * Ref for the component initial position.\n */\n targetRef: ReachPopoverProps['targetRef']\n children: ReactNode\n}\n\nconst Popover = ({\n targetRef,\n testId = 'store-popover',\n children,\n ...otherProps\n}: PopoverProps) => {\n return (\n <ReachPopover\n data-store-popover\n data-testid={testId}\n position={positionDefault}\n targetRef={targetRef}\n {...otherProps}\n >\n {children}\n </ReachPopover>\n )\n}\n\nexport default Popover\n","import type { AriaAttributes } from 'react'\nimport React, { useState } from 'react'\n\nimport type { PriceProps } from '../../atoms/Price'\nimport Price from '../../atoms/Price'\nimport type { SliderProps } from '../../atoms/Slider'\nimport Slider from '../../atoms/Slider'\n\nexport type PriceRangeProps = SliderProps & {\n /**\n * The current use case variant for prices.\n */\n variant?: PriceProps['variant']\n /**\n * Formatter function that transforms the raw price value and render the result.\n */\n formatter: PriceProps['formatter']\n /**\n * Returns the value of element's class content attribute.\n */\n className?: string\n /**\n * Defines a string value that labels the current element.\n */\n 'aria-label'?: AriaAttributes['aria-label']\n}\n\nconst PriceRange = ({\n className,\n formatter,\n max,\n min,\n onChange,\n testId = 'store-price-range',\n variant,\n 'aria-label': ariaLabel,\n}: PriceRangeProps) => {\n const [minVal, setMinVal] = useState(min)\n const [maxVal, setMaxVal] = useState(max)\n\n const handleChange: SliderProps['onChange'] = (values) => {\n if (values.min !== minVal) {\n setMinVal(values.min)\n }\n\n if (values.max !== maxVal) {\n setMaxVal(values.max)\n }\n\n onChange?.(values)\n }\n\n return (\n <div data-store-price-range data-testid={testId} className={className}>\n <Slider\n min={min}\n max={max}\n onChange={handleChange}\n aria-label={ariaLabel}\n />\n <div data-price-range-values>\n <Price\n formatter={formatter}\n data-price-range-value=\"min\"\n value={minVal}\n variant={variant}\n />\n <Price\n formatter={formatter}\n data-price-range-value=\"max\"\n value={maxVal}\n variant={variant}\n />\n </div>\n </div>\n )\n}\n\nexport default PriceRange\n","import type { PropsWithChildren } from 'react'\nimport React from 'react'\n\nimport { RadioGroupContext } from './useRadioGroup'\n\nexport type RadioGroupProps = PropsWithChildren<RadioGroupContext>\n\nconst RadioGroup = ({\n name,\n onChange,\n children,\n selectedValue,\n}: RadioGroupProps) => {\n const contextValues = React.useMemo(() => {\n return { name, selectedValue, onChange }\n }, [name, selectedValue, onChange])\n\n return (\n <RadioGroupContext.Provider value={contextValues}>\n {children}\n </RadioGroupContext.Provider>\n )\n}\n\nexport default RadioGroup\n"],"names":["Link","forwardRef","as","children","testId","otherProps","ref","React","Button","Input","variant","undefined","Icon","component","Price","Component","value","formatter","price","formattedPrice","TextArea","Checkbox","type","Overlay","role","Select","Radio","Badge","Slider","min","max","onChange","getAriaValueText","className","minVal","setMinVal","useState","maxVal","setMaxVal","minValRef","useRef","maxValRef","range","getPercent","useCallback","Math","round","useEffect","minPercent","maxPercent","current","style","left","width","event","Number","target","String","variantToElement","description","unordered","ordered","List","MaybeComponent","Skeleton","Spinner","Label","Incentive","ProductCard","ProductCardImage","ProductCardContent","ProductCardActions","Card","CardImage","CardContent","CardActions","defaultAriaLabel","idx","isActive","Bullets","totalQuantity","activeBullet","onClick","ariaLabelGenerator","ariaControlsGenerator","bulletIndexes","useMemo","Array","fill","map","_","tabIndex","key","e","Form","SearchIcon","xmlns","height","viewBox","stroke","strokeWidth","strokeLinecap","strokeLinejoin","cx","cy","r","x1","y1","x2","y2","SearchInput","onSubmit","icon","ariaLabel","inputRef","formRef","useImperativeHandle","preventDefault","LeftArrowIcon","size","color","xmlnsXlink","d","strokeMiterlimit","RightArrowIcon","reducer","state","action","adjustedTotalPages","infinite","totalPages","nextPageIndex","currentPage","nextItemIndex","itemsPerPage","sliding","slideDirection","currentItem","previousPageIndex","total","previousPage","payload","pageIndex","shouldSlide","slide","page","dispatch","useSlider","totalItems","infiniteMode","swipeableConfigOverrides","sliderState","sliderDispatch","useReducer","ceil","defaultSliderState","handlers","useSwipeable","onSwipedRight","onSwipedLeft","preventDefaultTouchmoveEvent","trackMouse","IconButton","buttonProps","ModalContentPure","beforeElementRef","trapFocusRef","afterElementRef","ModalContent","tabbableNodesRef","nodeToRestoreRef","document","hasFocus","activeElement","nodeToRestore","focus","tabbable","firstTabbable","beforeElement","afterElement","trapFocus","handleLoopFocus","nativeEvent","length","addEventListener","removeEventListener","useTrapFocus","stopPropagation","Banner","BannerImage","BannerContent","BannerLink","PaymentMethods","title","Divider","divider","props","isValidElement","cloneElement","ListItem","isLastItem","Breadcrumb","rawDivider","Children","toArray","child","index","childrenArray","LoadingButton","loading","RadioGroupContext","createContext","RadioOption","label","name","selectedValue","context","useContext","Error","useRadioGroup","checked","AccordionContext","Accordion","indices","childrenWithIndex","Set","numberOfItems","Provider","useAccordion","AccordionItemContext","AccordionItem","prefixId","panel","button","useAccordionItem","AccordionButton","id","has","onKeyDown","includes","next","getElementById","getNext","previous","getPrevious","AccordionPanel","hidden","Table","TableRow","TableCell","scope","TableBody","TableHead","TableFooter","Alert","QuantitySelector","quantity","leftButtonProps","inputProps","rightButtonProps","DropdownContext","isOpen","dropdownButtonRef","selectedDropdownItemIndexRef","dropdownItemsRef","useDropdown","DropdownButton","toggle","DropdownItem","close","dropdownItemIndex","setDropdownItemIndex","dropdownItemRef","onFocusItem","el","push","findIndex","element","onFocus","onMouseEnter","Hero","HeroImage","HeroHeading","controls","transition","duration","property","childrenCount","numberOfSlides","slidingTransition","timing","delay","showNavigationArrows","showPaginationBullets","transformValues","transformMap","slideWidth","createTransformValues","isItemVisible","shouldRenderItem","currentSlide","visitedSlides","i","add","slideIdx","isSlideVisible","useSlideVisibility","postRenderedSlides","slice","slides","concat","slidePrevious","slideNext","overflow","display","transform","onTransitionEnd","currentTarget","isOpenDefault","onDismiss","setIsOpen","open","old","_dropdownItemsRef$cur","firstClick","someItemWasClicked","some","item","dropdownPosition","isBrowser","window","buttonRect","_dropdownButtonRef$cu","getBoundingClientRect","topLevel","top","topOffset","leftLevel","position","_document","documentElement","_document$documentEle","scrollTop","_document2","_document2$documentEl","scrollLeft","useDropdownPosition","childrenLength","createPortal","defaultPrevented","body","MessageComponent","TitleComponent","targetRef","ReachPopover","positionDefault","values","contextValues"],"mappings":"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"}
|