oddsgate-ds 1.0.174 → 1.0.175
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/.babelrc.json +25 -25
- package/.editorconfig +12 -12
- package/.storybook/main.ts +58 -58
- package/.storybook/preview.ts +26 -26
- package/README.md +30 -30
- package/chromatic.config.json +6 -6
- package/dist/cjs/assets/components/quotes.svg +3 -3
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/components/atoms/AwardBadge/AwardBadge.component.d.ts +11 -0
- package/dist/cjs/types/components/atoms/AwardBadge/AwardBadge.interface.d.ts +4 -0
- package/dist/cjs/types/components/atoms/AwardBadge/AwardBadge.theme.d.ts +3 -0
- package/dist/cjs/types/components/atoms/AwardBadge/index.d.ts +1 -0
- package/dist/cjs/types/components/molecules/AwardCard/AwardCard.component.d.ts +15 -0
- package/dist/cjs/types/components/molecules/AwardCard/AwardCard.interface.d.ts +10 -0
- package/dist/cjs/types/components/molecules/AwardCard/AwardCard.theme.d.ts +6 -0
- package/dist/cjs/types/components/molecules/AwardCard/index.d.ts +1 -0
- package/dist/cjs/types/components/organisms/Slider/Slider.component.d.ts +1 -1
- package/dist/cjs/types/components/organisms/Slider/Slider.interface.d.ts +3 -0
- package/dist/esm/assets/components/quotes.svg +3 -3
- package/dist/esm/index.js +5 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/atoms/AwardBadge/AwardBadge.component.d.ts +11 -0
- package/dist/esm/types/components/atoms/AwardBadge/AwardBadge.interface.d.ts +4 -0
- package/dist/esm/types/components/atoms/AwardBadge/AwardBadge.theme.d.ts +3 -0
- package/dist/esm/types/components/atoms/AwardBadge/index.d.ts +1 -0
- package/dist/esm/types/components/molecules/AwardCard/AwardCard.component.d.ts +15 -0
- package/dist/esm/types/components/molecules/AwardCard/AwardCard.interface.d.ts +10 -0
- package/dist/esm/types/components/molecules/AwardCard/AwardCard.theme.d.ts +6 -0
- package/dist/esm/types/components/molecules/AwardCard/index.d.ts +1 -0
- package/dist/esm/types/components/organisms/Slider/Slider.component.d.ts +1 -1
- package/dist/esm/types/components/organisms/Slider/Slider.interface.d.ts +3 -0
- package/dist/public/assets/components/quotes.svg +3 -3
- package/dist/public/assets/empty-state.svg +28 -28
- package/dist/public/fonts/Nichrome/mdnichrome-bold-webfont.svg +241 -241
- package/dist/public/fonts/Nichrome/mdnichrome-regular-webfont.svg +241 -241
- package/dist/public/fonts/miewfont/miewfont.svg +38 -38
- package/dist/types.d.ts +4 -1
- package/package.json +103 -103
- package/prettier.config.js +7 -7
- package/public/assets/components/quotes.svg +3 -3
- package/public/assets/empty-state.svg +28 -28
- package/public/fonts/Nichrome/mdnichrome-bold-webfont.svg +241 -241
- package/public/fonts/Nichrome/mdnichrome-regular-webfont.svg +241 -241
- package/public/fonts/miewfont/miewfont.svg +38 -38
- package/rollup.config.js +98 -98
- package/src/components/atoms/AwardBadge/AwardBadge.component.tsx +25 -0
- package/src/components/atoms/AwardBadge/AwardBadge.interface.ts +4 -0
- package/src/components/atoms/AwardBadge/AwardBadge.stories.tsx +48 -0
- package/src/components/atoms/AwardBadge/AwardBadge.theme.ts +28 -0
- package/src/components/atoms/AwardBadge/index.ts +1 -0
- package/src/components/atoms/Button/Button.component.tsx +60 -60
- package/src/components/atoms/Button/Button.interface.ts +29 -29
- package/src/components/atoms/Button/Button.stories.tsx +65 -65
- package/src/components/atoms/Button/Button.theme.ts +180 -180
- package/src/components/atoms/Button/index.ts +1 -1
- package/src/components/atoms/CardMarquee/CardMarquee.component.tsx +24 -24
- package/src/components/atoms/CardMarquee/CardMarquee.interface.ts +15 -15
- package/src/components/atoms/CardMarquee/CardMarquee.stories.tsx +21 -21
- package/src/components/atoms/CardMarquee/CardMarquee.theme.ts +48 -48
- package/src/components/atoms/CardMarquee/index.ts +1 -1
- package/src/components/atoms/Chip/Chip.component.tsx +30 -30
- package/src/components/atoms/Chip/Chip.interface.ts +14 -14
- package/src/components/atoms/Chip/Chip.stories.tsx +42 -42
- package/src/components/atoms/Chip/Chip.theme.ts +57 -57
- package/src/components/atoms/Chip/index.ts +1 -1
- package/src/components/atoms/CloseButton/CloseButton.component.tsx +17 -17
- package/src/components/atoms/CloseButton/CloseButton.interface.ts +9 -9
- package/src/components/atoms/CloseButton/CloseButton.stories.tsx +24 -24
- package/src/components/atoms/CloseButton/CloseButton.theme.ts +66 -66
- package/src/components/atoms/CloseButton/index.ts +1 -1
- package/src/components/atoms/Counter/Counter.component.tsx +99 -99
- package/src/components/atoms/Counter/Counter.interface.ts +10 -10
- package/src/components/atoms/Counter/Counter.stories.tsx +29 -29
- package/src/components/atoms/Counter/Counter.theme.ts +27 -27
- package/src/components/atoms/Counter/index.ts +1 -1
- package/src/components/atoms/EmptyState/EmptyState.component.tsx +27 -27
- package/src/components/atoms/EmptyState/EmptyState.interface.ts +10 -10
- package/src/components/atoms/EmptyState/EmptyState.stories.tsx +34 -34
- package/src/components/atoms/EmptyState/EmptyState.theme.ts +27 -27
- package/src/components/atoms/EmptyState/index.ts +1 -1
- package/src/components/atoms/Flex/Flex.component.tsx +30 -30
- package/src/components/atoms/Flex/Flex.interface.ts +24 -24
- package/src/components/atoms/Flex/Flex.theme.ts +12 -12
- package/src/components/atoms/Flex/index.ts +1 -1
- package/src/components/atoms/FlexGrid/FlexGrid.component.tsx +62 -62
- package/src/components/atoms/FlexGrid/FlexGrid.interface.ts +55 -55
- package/src/components/atoms/FlexGrid/FlexGrid.stories.tsx +59 -59
- package/src/components/atoms/FlexGrid/FlexGrid.theme.ts +82 -82
- package/src/components/atoms/FlexGrid/index.ts +1 -1
- package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.component.tsx +24 -24
- package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.interface.tsx +6 -6
- package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.theme.ts +134 -134
- package/src/components/atoms/FormField/CheckRadioField/index.ts +1 -1
- package/src/components/atoms/FormField/FormField.component.tsx +37 -37
- package/src/components/atoms/FormField/FormField.interface.ts +10 -10
- package/src/components/atoms/FormField/FormField.stories.tsx +499 -499
- package/src/components/atoms/FormField/FormField.theme.tsx +136 -136
- package/src/components/atoms/FormField/index.ts +1 -1
- package/src/components/atoms/Heading/Heading.component.tsx +18 -18
- package/src/components/atoms/Heading/Heading.interface.tsx +21 -21
- package/src/components/atoms/Heading/Heading.theme.ts +17 -17
- package/src/components/atoms/Heading/index.ts +1 -1
- package/src/components/atoms/Icon/Icon.component.tsx +19 -19
- package/src/components/atoms/Icon/Icon.interface.ts +8 -8
- package/src/components/atoms/Icon/Icon.stories.tsx +26 -26
- package/src/components/atoms/Icon/Icon.theme.ts +115 -115
- package/src/components/atoms/Icon/index.ts +1 -1
- package/src/components/atoms/ImageWrapper/ImageWrapper.component.tsx +42 -42
- package/src/components/atoms/ImageWrapper/ImageWrapper.interface.ts +16 -16
- package/src/components/atoms/ImageWrapper/ImageWrapper.stories.tsx +27 -27
- package/src/components/atoms/ImageWrapper/ImageWrapper.theme.ts +50 -50
- package/src/components/atoms/ImageWrapper/index.ts +1 -1
- package/src/components/atoms/LegalLinks/LegalLinks.component.tsx +35 -35
- package/src/components/atoms/LegalLinks/LegalLinks.interface.ts +12 -12
- package/src/components/atoms/LegalLinks/LegalLinks.stories.tsx +43 -43
- package/src/components/atoms/LegalLinks/LegalLinks.theme.ts +33 -33
- package/src/components/atoms/LegalLinks/index.ts +1 -1
- package/src/components/atoms/Loader/Loader.component.tsx +26 -26
- package/src/components/atoms/Loader/Loader.interface.ts +10 -10
- package/src/components/atoms/Loader/Loader.stories.tsx +33 -33
- package/src/components/atoms/Loader/Loader.theme.ts +51 -51
- package/src/components/atoms/Loader/index.ts +1 -1
- package/src/components/atoms/Marquee/Marquee.component.tsx +32 -32
- package/src/components/atoms/Marquee/Marquee.interface.ts +10 -10
- package/src/components/atoms/Marquee/Marquee.stories.tsx +20 -20
- package/src/components/atoms/Marquee/Marquee.theme.ts +40 -40
- package/src/components/atoms/Marquee/index.ts +1 -1
- package/src/components/atoms/Quote/Quote.component.tsx +29 -29
- package/src/components/atoms/Quote/Quote.interface.ts +10 -10
- package/src/components/atoms/Quote/Quote.stories.tsx +25 -25
- package/src/components/atoms/Quote/Quote.theme.ts +26 -26
- package/src/components/atoms/Quote/index.ts +1 -1
- package/src/components/atoms/RichText/RichText.component.tsx +32 -32
- package/src/components/atoms/RichText/RichText.interface.ts +11 -11
- package/src/components/atoms/RichText/RichText.stories.tsx +73 -73
- package/src/components/atoms/RichText/RichText.theme.ts +34 -34
- package/src/components/atoms/RichText/index.ts +1 -1
- package/src/components/atoms/ScrollingNav/ScrollingNav.component.tsx +18 -18
- package/src/components/atoms/ScrollingNav/ScrollingNav.interface.ts +8 -8
- package/src/components/atoms/ScrollingNav/ScrollingNav.stories.tsx +44 -44
- package/src/components/atoms/ScrollingNav/ScrollingNav.theme.ts +58 -58
- package/src/components/atoms/ScrollingNav/index.ts +1 -1
- package/src/components/atoms/Separator/Separator.component.tsx +19 -19
- package/src/components/atoms/Separator/Separator.interface.tsx +10 -10
- package/src/components/atoms/Separator/Separator.stories.tsx +29 -29
- package/src/components/atoms/Separator/Separator.theme.ts +9 -9
- package/src/components/atoms/Separator/index.ts +1 -1
- package/src/components/atoms/SocialLinks/SocialLinks.component.tsx +42 -42
- package/src/components/atoms/SocialLinks/SocialLinks.interface.ts +8 -8
- package/src/components/atoms/SocialLinks/SocialLinks.stories.tsx +48 -48
- package/src/components/atoms/SocialLinks/SocialLinks.theme.ts +80 -80
- package/src/components/atoms/SocialLinks/index.ts +1 -1
- package/src/components/atoms/Spacer/Spacer.component.tsx +34 -34
- package/src/components/atoms/Spacer/Spacer.interface.ts +24 -24
- package/src/components/atoms/Spacer/Spacer.stories.tsx +99 -99
- package/src/components/atoms/Spacer/Spacer.theme.ts +33 -33
- package/src/components/atoms/Spacer/index.ts +1 -1
- package/src/components/atoms/Video/Video.component.tsx +116 -116
- package/src/components/atoms/Video/Video.interface.ts +13 -13
- package/src/components/atoms/Video/Video.stories.tsx +37 -37
- package/src/components/atoms/Video/Video.theme.ts +44 -44
- package/src/components/atoms/Video/index.ts +1 -1
- package/src/components/atoms/VideoEmbed/VideoEmbed.component.tsx +109 -109
- package/src/components/atoms/VideoEmbed/VideoEmbed.interface.ts +13 -13
- package/src/components/atoms/VideoEmbed/VideoEmbed.stories.tsx +23 -23
- package/src/components/atoms/VideoEmbed/VideoEmbed.theme.ts +45 -45
- package/src/components/atoms/VideoEmbed/index.ts +1 -1
- package/src/components/common/PortalComponent/PortalComponent.tsx +48 -48
- package/src/components/common/PortalComponent/index.ts +1 -1
- package/src/components/molecules/Accordion/Accordion.component.tsx +58 -58
- package/src/components/molecules/Accordion/Accordion.interface.ts +15 -15
- package/src/components/molecules/Accordion/Accordion.stories.tsx +100 -100
- package/src/components/molecules/Accordion/Accordion.theme.ts +93 -93
- package/src/components/molecules/Accordion/index.ts +1 -1
- package/src/components/molecules/AwardCard/AwardCard.component.tsx +51 -0
- package/src/components/molecules/AwardCard/AwardCard.interface.ts +10 -0
- package/src/components/molecules/AwardCard/AwardCard.stories.tsx +34 -0
- package/src/components/molecules/AwardCard/AwardCard.theme.ts +33 -0
- package/src/components/molecules/AwardCard/index.ts +1 -0
- package/src/components/molecules/BlogCard/BlogCard.component.tsx +48 -48
- package/src/components/molecules/BlogCard/BlogCard.interface.ts +10 -10
- package/src/components/molecules/BlogCard/BlogCard.stories.tsx +37 -37
- package/src/components/molecules/BlogCard/BlogCard.theme.ts +41 -41
- package/src/components/molecules/BlogCard/index.ts +1 -1
- package/src/components/molecules/Card/Card.component.tsx +15 -15
- package/src/components/molecules/Card/Card.interface.ts +11 -11
- package/src/components/molecules/Card/Card.theme.ts +54 -54
- package/src/components/molecules/Card/index.ts +1 -1
- package/src/components/molecules/CareersCard/CareersCard.component.tsx +27 -27
- package/src/components/molecules/CareersCard/CareersCard.interface.ts +7 -7
- package/src/components/molecules/CareersCard/CareersCard.stories.tsx +30 -30
- package/src/components/molecules/CareersCard/CareersCard.theme.ts +13 -13
- package/src/components/molecules/CareersCard/index.ts +1 -1
- package/src/components/molecules/Dropdown/Dropdown.component.tsx +67 -67
- package/src/components/molecules/Dropdown/Dropdown.interface.ts +26 -26
- package/src/components/molecules/Dropdown/Dropdown.stories.tsx +54 -54
- package/src/components/molecules/Dropdown/Dropdown.theme.ts +69 -69
- package/src/components/molecules/Dropdown/index.ts +1 -1
- package/src/components/molecules/EventsCard/EventsCard.component.tsx +40 -40
- package/src/components/molecules/EventsCard/EventsCard.interface.ts +9 -9
- package/src/components/molecules/EventsCard/EventsCard.stories.tsx +37 -37
- package/src/components/molecules/EventsCard/EventsCard.theme.ts +33 -33
- package/src/components/molecules/EventsCard/index.ts +1 -1
- package/src/components/molecules/IconBox/IconBox.component.tsx +29 -29
- package/src/components/molecules/IconBox/IconBox.interface.tsx +10 -10
- package/src/components/molecules/IconBox/IconBox.stories.tsx +23 -23
- package/src/components/molecules/IconBox/IconBox.theme.ts +25 -25
- package/src/components/molecules/IconBox/index.ts +1 -1
- package/src/components/molecules/IconTitle/IconTitle.component.tsx +24 -24
- package/src/components/molecules/IconTitle/IconTitle.interface.tsx +10 -10
- package/src/components/molecules/IconTitle/IconTitle.stories.tsx +49 -49
- package/src/components/molecules/IconTitle/IconTitle.theme.ts +10 -10
- package/src/components/molecules/IconTitle/index.ts +1 -1
- package/src/components/molecules/LicenseCard/LicenseCard.component.tsx +27 -27
- package/src/components/molecules/LicenseCard/LicenseCard.interface.ts +6 -6
- package/src/components/molecules/LicenseCard/LicenseCard.stories.tsx +42 -42
- package/src/components/molecules/LicenseCard/LicenseCard.theme.ts +28 -28
- package/src/components/molecules/LicenseCard/index.ts +1 -1
- package/src/components/molecules/LogosCard/LogosCard.component.tsx +14 -14
- package/src/components/molecules/LogosCard/LogosCard.interface.ts +8 -8
- package/src/components/molecules/LogosCard/LogosCard.stories.tsx +38 -38
- package/src/components/molecules/LogosCard/LogosCard.theme.ts +19 -19
- package/src/components/molecules/LogosCard/index.ts +1 -1
- package/src/components/molecules/Modal/Modal.component.tsx +70 -70
- package/src/components/molecules/Modal/Modal.interface.ts +11 -11
- package/src/components/molecules/Modal/Modal.stories.tsx +57 -57
- package/src/components/molecules/Modal/Modal.theme.ts +55 -55
- package/src/components/molecules/Modal/index.ts +1 -1
- package/src/components/molecules/NewsCard/NewsCard.component.tsx +55 -55
- package/src/components/molecules/NewsCard/NewsCard.interface.ts +9 -9
- package/src/components/molecules/NewsCard/NewsCard.stories.tsx +44 -44
- package/src/components/molecules/NewsCard/NewsCard.theme.ts +77 -77
- package/src/components/molecules/NewsCard/index.ts +1 -1
- package/src/components/molecules/OffCanvas/OffCanvas.component.tsx +55 -55
- package/src/components/molecules/OffCanvas/OffCanvas.interface.ts +12 -12
- package/src/components/molecules/OffCanvas/OffCanvas.stories.tsx +55 -55
- package/src/components/molecules/OffCanvas/OffCanvas.theme.ts +50 -50
- package/src/components/molecules/OffCanvas/index.ts +1 -1
- package/src/components/molecules/ProductCard/ProductCard.component.tsx +60 -60
- package/src/components/molecules/ProductCard/ProductCard.interface.ts +7 -7
- package/src/components/molecules/ProductCard/ProductCard.stories.tsx +42 -42
- package/src/components/molecules/ProductCard/ProductCard.theme.ts +26 -26
- package/src/components/molecules/ProductCard/index.ts +1 -1
- package/src/components/molecules/ShareModal/ShareModal.component.tsx +167 -167
- package/src/components/molecules/ShareModal/ShareModal.interface.ts +9 -9
- package/src/components/molecules/ShareModal/ShareModal.stories.tsx +33 -33
- package/src/components/molecules/ShareModal/ShareModal.theme.ts +103 -103
- package/src/components/molecules/ShareModal/index.ts +1 -1
- package/src/components/molecules/TeamCard/TeamCard.component.tsx +31 -31
- package/src/components/molecules/TeamCard/TeamCard.interface.ts +7 -7
- package/src/components/molecules/TeamCard/TeamCard.stories.tsx +33 -33
- package/src/components/molecules/TeamCard/TeamCard.theme.ts +12 -12
- package/src/components/molecules/TeamCard/index.ts +1 -1
- package/src/components/organisms/CircularSlider/CircularSlider.component.tsx +231 -231
- package/src/components/organisms/CircularSlider/CircularSlider.interface.ts +13 -13
- package/src/components/organisms/CircularSlider/CircularSlider.stories.tsx +138 -138
- package/src/components/organisms/CircularSlider/CircularSlider.theme.ts +126 -126
- package/src/components/organisms/CircularSlider/index.ts +1 -1
- package/src/components/organisms/Cover/Cover.component.tsx +46 -46
- package/src/components/organisms/Cover/Cover.interface.ts +14 -14
- package/src/components/organisms/Cover/Cover.stories.tsx +97 -97
- package/src/components/organisms/Cover/Cover.theme.ts +49 -49
- package/src/components/organisms/Cover/index.ts +1 -1
- package/src/components/organisms/ProductsSlider/ProductsSlider.component.tsx +216 -216
- package/src/components/organisms/ProductsSlider/ProductsSlider.interface.ts +12 -12
- package/src/components/organisms/ProductsSlider/ProductsSlider.stories.tsx +132 -132
- package/src/components/organisms/ProductsSlider/ProductsSlider.theme.ts +77 -77
- package/src/components/organisms/ProductsSlider/index.ts +1 -1
- package/src/components/organisms/ProductsSlider//306/222.js +164 -164
- package/src/components/organisms/Slider/Slider.component.tsx +156 -154
- package/src/components/organisms/Slider/Slider.interface.ts +23 -19
- package/src/components/organisms/Slider/Slider.stories.tsx +223 -146
- package/src/components/organisms/Slider/Slider.theme.ts +144 -145
- package/src/components/organisms/Slider/Slider.utils.tsx +19 -19
- package/src/components/organisms/Slider/index.ts +1 -1
- package/src/components/organisms/Tabs/Tabs.component.tsx +88 -88
- package/src/components/organisms/Tabs/Tabs.interface.ts +18 -18
- package/src/components/organisms/Tabs/Tabs.stories.tsx +118 -118
- package/src/components/organisms/Tabs/Tabs.theme.ts +115 -115
- package/src/components/organisms/Tabs/index.ts +1 -1
- package/src/helpers/clickOutsideToClose.tsx +17 -17
- package/src/helpers/events.ts +9 -9
- package/src/helpers/exportCSS.tsx +27 -27
- package/src/helpers/getIcons.ts +5 -5
- package/src/helpers/isTouchDevice.tsx +11 -11
- package/src/helpers/useInterval.ts +25 -25
- package/src/helpers/useMediaMatch.tsx +26 -26
- package/src/helpers/uuid.ts +5 -5
- package/src/iconsList.json +1 -1
- package/src/index.ts +68 -68
- package/src/reportWebVitals.js +13 -13
- package/src/stories/Documentation/Colors.stories.tsx +46 -46
- package/src/stories/Documentation/Headings.stories.tsx +24 -24
- package/src/stories/Documentation/Icons.stories.tsx +73 -73
- package/src/stories/Documentation/JWT.stories.tsx +60 -60
- package/src/stories/Documentation/Utilities.stories.tsx +65 -65
- package/src/styles/Global.ts +301 -301
- package/src/styles/grid.ts +70 -70
- package/src/styles/reset.ts +47 -47
- package/src/styles/utilities.ts +374 -374
- package/src/styles/variables.ts +180 -180
- package/tsconfig.json +31 -31
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import Heading from '@/components/atoms/Heading'
|
|
2
|
-
import { ITeamCard } from './TeamCard.interface'
|
|
3
|
-
import ImageWrapper from '@/components/atoms/ImageWrapper'
|
|
4
|
-
import React from 'react'
|
|
5
|
-
import SocialLinks from '@/components/atoms/SocialLinks/SocialLinks.component'
|
|
6
|
-
import { StyledTeamCard } from './TeamCard.theme'
|
|
7
|
-
|
|
8
|
-
const TeamCard = ({
|
|
9
|
-
title,
|
|
10
|
-
imageElement,
|
|
11
|
-
role,
|
|
12
|
-
description,
|
|
13
|
-
...props
|
|
14
|
-
}: ITeamCard) => {
|
|
15
|
-
return (
|
|
16
|
-
<StyledTeamCard
|
|
17
|
-
imageElement={
|
|
18
|
-
<ImageWrapper aspectRatioHeight={78}>{imageElement}</ImageWrapper>
|
|
19
|
-
}
|
|
20
|
-
>
|
|
21
|
-
<Heading tag={'span'} size={'captions'} className={'text-uppercase mt-4'}>
|
|
22
|
-
{role}
|
|
23
|
-
</Heading>
|
|
24
|
-
<Heading tag={'span'} size={'h6'} className={'fw-light mt-2'}>
|
|
25
|
-
{title}
|
|
26
|
-
</Heading>
|
|
27
|
-
</StyledTeamCard>
|
|
28
|
-
)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export default TeamCard
|
|
1
|
+
import Heading from '@/components/atoms/Heading'
|
|
2
|
+
import { ITeamCard } from './TeamCard.interface'
|
|
3
|
+
import ImageWrapper from '@/components/atoms/ImageWrapper'
|
|
4
|
+
import React from 'react'
|
|
5
|
+
import SocialLinks from '@/components/atoms/SocialLinks/SocialLinks.component'
|
|
6
|
+
import { StyledTeamCard } from './TeamCard.theme'
|
|
7
|
+
|
|
8
|
+
const TeamCard = ({
|
|
9
|
+
title,
|
|
10
|
+
imageElement,
|
|
11
|
+
role,
|
|
12
|
+
description,
|
|
13
|
+
...props
|
|
14
|
+
}: ITeamCard) => {
|
|
15
|
+
return (
|
|
16
|
+
<StyledTeamCard
|
|
17
|
+
imageElement={
|
|
18
|
+
<ImageWrapper aspectRatioHeight={78}>{imageElement}</ImageWrapper>
|
|
19
|
+
}
|
|
20
|
+
>
|
|
21
|
+
<Heading tag={'span'} size={'captions'} className={'text-uppercase mt-4'}>
|
|
22
|
+
{role}
|
|
23
|
+
</Heading>
|
|
24
|
+
<Heading tag={'span'} size={'h6'} className={'fw-light mt-2'}>
|
|
25
|
+
{title}
|
|
26
|
+
</Heading>
|
|
27
|
+
</StyledTeamCard>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default TeamCard
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ICard } from '../Card/Card.interface';
|
|
2
|
-
|
|
3
|
-
export interface ITeamCard extends ICard {
|
|
4
|
-
title?: string
|
|
5
|
-
role?: string,
|
|
6
|
-
description?: string | React.ReactElement
|
|
7
|
-
}
|
|
1
|
+
import { ICard } from '../Card/Card.interface';
|
|
2
|
+
|
|
3
|
+
export interface ITeamCard extends ICard {
|
|
4
|
+
title?: string
|
|
5
|
+
role?: string,
|
|
6
|
+
description?: string | React.ReactElement
|
|
7
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
-
|
|
3
|
-
import { ITeamCard } from './TeamCard.interface'
|
|
4
|
-
import React from 'react'
|
|
5
|
-
import TeamCard from './TeamCard.component'
|
|
6
|
-
|
|
7
|
-
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
|
|
8
|
-
export default {
|
|
9
|
-
title: 'Components/TeamCard',
|
|
10
|
-
component: TeamCard,
|
|
11
|
-
tags: ['autodocs']
|
|
12
|
-
} as Meta
|
|
13
|
-
|
|
14
|
-
const image = (
|
|
15
|
-
<img
|
|
16
|
-
width="100%"
|
|
17
|
-
height="100%"
|
|
18
|
-
sizes="100vw"
|
|
19
|
-
decoding="async"
|
|
20
|
-
src="/assets/placeholder.png"
|
|
21
|
-
alt="Empty state"
|
|
22
|
-
/>
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
export const Simple: StoryObj<ITeamCard> = {
|
|
26
|
-
render: args => <TeamCard {...args} style={{ maxWidth: '220px' }}></TeamCard>,
|
|
27
|
-
args: {
|
|
28
|
-
role: 'Lorem ipsum',
|
|
29
|
-
title: 'Lorem ipsum',
|
|
30
|
-
imageElement: image,
|
|
31
|
-
description: 'Cras vel facilisis tellus'
|
|
32
|
-
}
|
|
33
|
-
}
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
|
|
3
|
+
import { ITeamCard } from './TeamCard.interface'
|
|
4
|
+
import React from 'react'
|
|
5
|
+
import TeamCard from './TeamCard.component'
|
|
6
|
+
|
|
7
|
+
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
|
|
8
|
+
export default {
|
|
9
|
+
title: 'Components/TeamCard',
|
|
10
|
+
component: TeamCard,
|
|
11
|
+
tags: ['autodocs']
|
|
12
|
+
} as Meta
|
|
13
|
+
|
|
14
|
+
const image = (
|
|
15
|
+
<img
|
|
16
|
+
width="100%"
|
|
17
|
+
height="100%"
|
|
18
|
+
sizes="100vw"
|
|
19
|
+
decoding="async"
|
|
20
|
+
src="/assets/placeholder.png"
|
|
21
|
+
alt="Empty state"
|
|
22
|
+
/>
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
export const Simple: StoryObj<ITeamCard> = {
|
|
26
|
+
render: args => <TeamCard {...args} style={{ maxWidth: '220px' }}></TeamCard>,
|
|
27
|
+
args: {
|
|
28
|
+
role: 'Lorem ipsum',
|
|
29
|
+
title: 'Lorem ipsum',
|
|
30
|
+
imageElement: image,
|
|
31
|
+
description: 'Cras vel facilisis tellus'
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import styled, { css } from 'styled-components';
|
|
2
|
-
|
|
3
|
-
import Card from '../Card/Card.component';
|
|
4
|
-
import { ITeamCard } from './TeamCard.interface';
|
|
5
|
-
import { colors } from '@/styles/variables';
|
|
6
|
-
|
|
7
|
-
export const StyledTeamCard = styled(Card) <ITeamCard>`
|
|
8
|
-
overflow: hidden;
|
|
9
|
-
margin-bottom: 24px;
|
|
10
|
-
pointer-events: none;
|
|
11
|
-
`;
|
|
12
|
-
|
|
1
|
+
import styled, { css } from 'styled-components';
|
|
2
|
+
|
|
3
|
+
import Card from '../Card/Card.component';
|
|
4
|
+
import { ITeamCard } from './TeamCard.interface';
|
|
5
|
+
import { colors } from '@/styles/variables';
|
|
6
|
+
|
|
7
|
+
export const StyledTeamCard = styled(Card) <ITeamCard>`
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
margin-bottom: 24px;
|
|
10
|
+
pointer-events: none;
|
|
11
|
+
`;
|
|
12
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from "./TeamCard.component";
|
|
1
|
+
export { default } from "./TeamCard.component";
|
|
@@ -1,231 +1,231 @@
|
|
|
1
|
-
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
-
import {
|
|
3
|
-
StyledCircularSlider,
|
|
4
|
-
StyledCircularSliderContent,
|
|
5
|
-
StyledCircularSliderSlide,
|
|
6
|
-
StyledCircularSliderSlides,
|
|
7
|
-
StyledCircularSliderWrapper
|
|
8
|
-
} from './CircularSlider.theme'
|
|
9
|
-
|
|
10
|
-
import Heading from '@/components/atoms/Heading/Heading.component'
|
|
11
|
-
import { ICircularSlider } from './CircularSlider.interface'
|
|
12
|
-
import { debounce } from '@/helpers/events'
|
|
13
|
-
import useMediaMatch from '@/helpers/useMediaMatch'
|
|
14
|
-
|
|
15
|
-
const CircularSlider = ({
|
|
16
|
-
cta,
|
|
17
|
-
content,
|
|
18
|
-
style,
|
|
19
|
-
className
|
|
20
|
-
}: ICircularSlider) => {
|
|
21
|
-
const [slideContent, setSlideContent] = useState({
|
|
22
|
-
name: content && content[0].name,
|
|
23
|
-
role: content && content[0].role
|
|
24
|
-
})
|
|
25
|
-
const slider = useRef<HTMLDivElement>()
|
|
26
|
-
const wrapper = useRef<HTMLDivElement>()
|
|
27
|
-
const svg = useRef<HTMLDivElement>()
|
|
28
|
-
const slidesHolder = useRef<HTMLDivElement>()
|
|
29
|
-
const contentHolder = useRef<HTMLDivElement>()
|
|
30
|
-
|
|
31
|
-
const isMobile = useMediaMatch()
|
|
32
|
-
|
|
33
|
-
//force 12 items
|
|
34
|
-
if (content && content.length < 12) {
|
|
35
|
-
let counter = 0
|
|
36
|
-
for (let i = content.length; i <= 12; i++) {
|
|
37
|
-
content[i] = content[counter]
|
|
38
|
-
counter++
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
if (!slidesHolder.current) return //bail out;
|
|
44
|
-
|
|
45
|
-
const animationDuration = 600
|
|
46
|
-
|
|
47
|
-
const slides = Array.prototype.slice.call(slidesHolder?.current?.children)
|
|
48
|
-
|
|
49
|
-
let slidesSize = 0
|
|
50
|
-
|
|
51
|
-
let currentAngle = isMobile ? -180 : -90
|
|
52
|
-
|
|
53
|
-
const stepAngle = (2 * Math.PI) / slidesHolder?.current?.children.length
|
|
54
|
-
// const stepAngle = 0.52;
|
|
55
|
-
|
|
56
|
-
let currentSlide = 0
|
|
57
|
-
|
|
58
|
-
slidesHolder.current.style.transitionDuration = animationDuration + 'ms'
|
|
59
|
-
const slidesRepositioning = r => {
|
|
60
|
-
for (let i = 0; i < slides.length; i++) {
|
|
61
|
-
let x = r * Math.cos(stepAngle * i - Math.PI / 2),
|
|
62
|
-
y = r * Math.sin(stepAngle * i - Math.PI / 2)
|
|
63
|
-
|
|
64
|
-
slides[i].style.transform =
|
|
65
|
-
'translate( ' +
|
|
66
|
-
x +
|
|
67
|
-
'px, ' +
|
|
68
|
-
y +
|
|
69
|
-
'px ) rotate( ' +
|
|
70
|
-
(((stepAngle * 180) / Math.PI) * i + 90) +
|
|
71
|
-
'deg )'
|
|
72
|
-
// slides[i].style.transform = 'translate( ' + x + 'px, ' + y + 'px )';
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
const setSize = (radius: number) => {
|
|
76
|
-
if (!wrapper.current || !slidesHolder.current) return //bail out;
|
|
77
|
-
|
|
78
|
-
const slideSize = isMobile ? 0.12 : 0.15
|
|
79
|
-
|
|
80
|
-
wrapper.current.style.width = 2 * radius + 'px'
|
|
81
|
-
wrapper.current.style.height = 2 * radius + 'px'
|
|
82
|
-
|
|
83
|
-
let r = 2 * radius * (1 - slideSize)
|
|
84
|
-
slidesHolder.current.style.width = slidesHolder.current.style.height =
|
|
85
|
-
r + 'px'
|
|
86
|
-
slidesRepositioning(r / 2)
|
|
87
|
-
|
|
88
|
-
slidesSize = Math.min(
|
|
89
|
-
2 * radius * slideSize,
|
|
90
|
-
stepAngle * radius * (1 - slideSize) - 50
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
if (!isMobile) {
|
|
94
|
-
slidesHolder.current.style.marginTop = radius * slideSize + 'px'
|
|
95
|
-
} else {
|
|
96
|
-
wrapper.current.style.marginTop = -(r - slidesSize) + 'px'
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
for (let i = 0; i < slides.length; i++) {
|
|
100
|
-
slides[i].style.width = slides[i].style.height =
|
|
101
|
-
(isMobile ? slidesSize * 1.5 : slidesSize) + 'px'
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const sliderResize = debounce(() => {
|
|
106
|
-
const sliderSize = isMobile ? 1.9 : 1
|
|
107
|
-
|
|
108
|
-
let radius,
|
|
109
|
-
w = slider?.current
|
|
110
|
-
? slider?.current?.getBoundingClientRect().width
|
|
111
|
-
: 0,
|
|
112
|
-
h = slider?.current ? slider?.current.getBoundingClientRect().height : 0
|
|
113
|
-
|
|
114
|
-
2 * h <= w ? (radius = h * sliderSize) : (radius = (w / 2) * sliderSize)
|
|
115
|
-
|
|
116
|
-
setSize(Math.round(radius))
|
|
117
|
-
}, 250)
|
|
118
|
-
|
|
119
|
-
const addStyle = () => {
|
|
120
|
-
setTimeout(() => {
|
|
121
|
-
contentHolder?.current?.classList.add('active')
|
|
122
|
-
slides[currentSlide].classList.add('active')
|
|
123
|
-
}, 400)
|
|
124
|
-
}
|
|
125
|
-
const removeStyle = () => {
|
|
126
|
-
contentHolder?.current?.classList.remove('active')
|
|
127
|
-
const prevElement = slides[currentSlide]
|
|
128
|
-
setTimeout(() => {
|
|
129
|
-
content && setSlideContent(content[currentSlide] as any)
|
|
130
|
-
prevElement.classList.remove('active')
|
|
131
|
-
}, 400)
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
const rotateSlider = e => {
|
|
135
|
-
const newSlide = slides.indexOf(e.target)
|
|
136
|
-
|
|
137
|
-
if (currentSlide === newSlide || !slidesHolder?.current) return
|
|
138
|
-
|
|
139
|
-
removeStyle()
|
|
140
|
-
|
|
141
|
-
let multiplier = 0
|
|
142
|
-
let direction = ''
|
|
143
|
-
|
|
144
|
-
if (currentSlide === 0 && newSlide === slides.length - 1) {
|
|
145
|
-
multiplier = -1
|
|
146
|
-
direction = '-'
|
|
147
|
-
} else if (currentSlide === slides.length - 1 && newSlide === 0) {
|
|
148
|
-
multiplier = 1
|
|
149
|
-
direction = '+'
|
|
150
|
-
} else {
|
|
151
|
-
multiplier = newSlide - currentSlide
|
|
152
|
-
direction = currentSlide < newSlide ? '+' : '-'
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
const newAngle = Math.abs(((stepAngle * 180) / Math.PI) * multiplier)
|
|
156
|
-
|
|
157
|
-
currentAngle =
|
|
158
|
-
direction === '-' ? currentAngle + newAngle : currentAngle - newAngle
|
|
159
|
-
currentSlide = newSlide
|
|
160
|
-
|
|
161
|
-
if (svg?.current)
|
|
162
|
-
svg.current.style.transform =
|
|
163
|
-
'translate(-50%, -50%) rotate( ' + currentAngle * 4 + 'deg )'
|
|
164
|
-
slidesHolder.current.style.transform = 'rotate( ' + currentAngle + 'deg )'
|
|
165
|
-
addStyle()
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
sliderResize()
|
|
169
|
-
addStyle()
|
|
170
|
-
|
|
171
|
-
for (let i = 0; i < slides.length; i++) {
|
|
172
|
-
slides[i].addEventListener('click', rotateSlider, { passive: true })
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
window.addEventListener('resize', sliderResize)
|
|
176
|
-
|
|
177
|
-
return () => {
|
|
178
|
-
for (let i = 0; i < slides.length; i++) {
|
|
179
|
-
slides[i].removeEventListener('click', rotateSlider)
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
window.removeEventListener('resize', sliderResize)
|
|
183
|
-
}
|
|
184
|
-
}, [isMobile])
|
|
185
|
-
|
|
186
|
-
if (!content) return <></>
|
|
187
|
-
|
|
188
|
-
return (
|
|
189
|
-
<StyledCircularSlider
|
|
190
|
-
ref={slider as any}
|
|
191
|
-
className={className}
|
|
192
|
-
style={style}
|
|
193
|
-
>
|
|
194
|
-
<svg
|
|
195
|
-
ref={svg as any}
|
|
196
|
-
viewBox="0 0 907 906"
|
|
197
|
-
fill="none"
|
|
198
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
199
|
-
>
|
|
200
|
-
<path
|
|
201
|
-
d="M887.551 584.892L904.187 504.729L531.591 461.981C531.824 459.769 532.012 457.775 531.984 455.735L906.794 468.208L902.047 386.545L531.043 441.754C530.798 439.669 530.336 437.54 529.829 435.627L895.322 350.347L869.628 272.699L525.63 422.1C524.69 420.097 523.922 418.356 522.981 416.353L853.852 239.821L808.868 171.277L515.038 404.535C513.792 402.92 512.328 401.26 510.82 399.817L784.811 143.459L723.799 88.9898L500.604 390.24C498.834 388.969 497.28 387.742 495.465 386.688L693.744 68.2895L620.714 31.439L483.014 380.262C481.154 379.424 479.032 378.757 477.127 378.136L585.693 19.4255L505.53 2.78951L462.783 375.385C460.571 375.152 458.576 374.964 456.537 374.993L469.01 0.182176L387.347 4.92974L442.556 375.933C440.471 376.179 438.342 376.641 436.429 377.148L351.149 11.6549L273.501 37.3486L422.902 381.346C420.899 382.286 419.158 383.055 417.155 383.995L240.361 53.2959L171.817 98.2799L405.12 391.893C403.505 393.14 401.846 394.603 400.403 396.112L144.261 122.166L89.7918 183.178L391.042 406.373C389.77 408.143 388.544 409.696 387.49 411.511L69.2632 213.494L32.4127 286.524L381.235 424.224C380.397 426.084 379.731 428.206 379.11 430.111L20.2275 321.283L3.59147 401.446L376.187 444.194C375.954 446.405 375.766 448.4 375.795 450.44L0.984138 437.967L5.73169 519.63L376.735 464.42C376.981 466.505 377.443 468.635 377.95 470.548L12.4569 555.828L38.1505 633.476L382.148 484.075C383.088 486.078 383.857 487.819 384.797 489.822L54.0979 666.616L99.0819 735.16L392.695 501.857C393.942 503.471 395.405 505.131 396.914 506.574L122.968 762.715L183.98 817.185L407.175 515.935C408.945 517.206 410.498 518.432 412.313 519.487L214.034 837.885L287.064 874.736L424.765 525.913C426.625 526.751 428.746 527.417 430.651 528.038L322.085 886.749L402.248 903.385L444.996 530.789C447.207 531.022 449.202 531.21 451.242 531.182L438.769 905.992L520.432 901.245L465.222 530.241C467.307 529.996 469.437 529.534 471.35 529.027L556.629 894.52L634.278 868.826L484.876 524.828C486.88 523.888 488.621 523.12 490.624 522.179L667.156 853.05L735.7 808.066L502.442 514.236C504.056 512.99 505.716 511.526 507.159 510.018L763.517 784.009L817.987 722.997L516.737 499.802C518.008 498.032 519.234 496.478 520.289 494.663L838.687 692.942L875.538 619.912L526.715 482.212C527.553 480.352 528.219 478.23 528.84 476.325L887.551 584.892Z"
|
|
202
|
-
fill="#FF4552"
|
|
203
|
-
/>
|
|
204
|
-
</svg>
|
|
205
|
-
<StyledCircularSliderWrapper ref={wrapper as any}>
|
|
206
|
-
<StyledCircularSliderSlides ref={slidesHolder as any}>
|
|
207
|
-
{content?.map((item, index) => {
|
|
208
|
-
return (
|
|
209
|
-
<StyledCircularSliderSlide key={`slide-${index}`}>
|
|
210
|
-
{item.img}
|
|
211
|
-
</StyledCircularSliderSlide>
|
|
212
|
-
)
|
|
213
|
-
})}
|
|
214
|
-
</StyledCircularSliderSlides>
|
|
215
|
-
</StyledCircularSliderWrapper>
|
|
216
|
-
<StyledCircularSliderContent ref={contentHolder as any}>
|
|
217
|
-
<div className="mb-4">
|
|
218
|
-
<Heading tag="span" size="h2" className="color-primary50 fw-bold">
|
|
219
|
-
{slideContent?.name}
|
|
220
|
-
</Heading>
|
|
221
|
-
<Heading tag="span" size="h4" className="color-secondary50">
|
|
222
|
-
{slideContent?.role}
|
|
223
|
-
</Heading>
|
|
224
|
-
</div>
|
|
225
|
-
{cta}
|
|
226
|
-
</StyledCircularSliderContent>
|
|
227
|
-
</StyledCircularSlider>
|
|
228
|
-
)
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
export default CircularSlider
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
+
import {
|
|
3
|
+
StyledCircularSlider,
|
|
4
|
+
StyledCircularSliderContent,
|
|
5
|
+
StyledCircularSliderSlide,
|
|
6
|
+
StyledCircularSliderSlides,
|
|
7
|
+
StyledCircularSliderWrapper
|
|
8
|
+
} from './CircularSlider.theme'
|
|
9
|
+
|
|
10
|
+
import Heading from '@/components/atoms/Heading/Heading.component'
|
|
11
|
+
import { ICircularSlider } from './CircularSlider.interface'
|
|
12
|
+
import { debounce } from '@/helpers/events'
|
|
13
|
+
import useMediaMatch from '@/helpers/useMediaMatch'
|
|
14
|
+
|
|
15
|
+
const CircularSlider = ({
|
|
16
|
+
cta,
|
|
17
|
+
content,
|
|
18
|
+
style,
|
|
19
|
+
className
|
|
20
|
+
}: ICircularSlider) => {
|
|
21
|
+
const [slideContent, setSlideContent] = useState({
|
|
22
|
+
name: content && content[0].name,
|
|
23
|
+
role: content && content[0].role
|
|
24
|
+
})
|
|
25
|
+
const slider = useRef<HTMLDivElement>()
|
|
26
|
+
const wrapper = useRef<HTMLDivElement>()
|
|
27
|
+
const svg = useRef<HTMLDivElement>()
|
|
28
|
+
const slidesHolder = useRef<HTMLDivElement>()
|
|
29
|
+
const contentHolder = useRef<HTMLDivElement>()
|
|
30
|
+
|
|
31
|
+
const isMobile = useMediaMatch()
|
|
32
|
+
|
|
33
|
+
//force 12 items
|
|
34
|
+
if (content && content.length < 12) {
|
|
35
|
+
let counter = 0
|
|
36
|
+
for (let i = content.length; i <= 12; i++) {
|
|
37
|
+
content[i] = content[counter]
|
|
38
|
+
counter++
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (!slidesHolder.current) return //bail out;
|
|
44
|
+
|
|
45
|
+
const animationDuration = 600
|
|
46
|
+
|
|
47
|
+
const slides = Array.prototype.slice.call(slidesHolder?.current?.children)
|
|
48
|
+
|
|
49
|
+
let slidesSize = 0
|
|
50
|
+
|
|
51
|
+
let currentAngle = isMobile ? -180 : -90
|
|
52
|
+
|
|
53
|
+
const stepAngle = (2 * Math.PI) / slidesHolder?.current?.children.length
|
|
54
|
+
// const stepAngle = 0.52;
|
|
55
|
+
|
|
56
|
+
let currentSlide = 0
|
|
57
|
+
|
|
58
|
+
slidesHolder.current.style.transitionDuration = animationDuration + 'ms'
|
|
59
|
+
const slidesRepositioning = r => {
|
|
60
|
+
for (let i = 0; i < slides.length; i++) {
|
|
61
|
+
let x = r * Math.cos(stepAngle * i - Math.PI / 2),
|
|
62
|
+
y = r * Math.sin(stepAngle * i - Math.PI / 2)
|
|
63
|
+
|
|
64
|
+
slides[i].style.transform =
|
|
65
|
+
'translate( ' +
|
|
66
|
+
x +
|
|
67
|
+
'px, ' +
|
|
68
|
+
y +
|
|
69
|
+
'px ) rotate( ' +
|
|
70
|
+
(((stepAngle * 180) / Math.PI) * i + 90) +
|
|
71
|
+
'deg )'
|
|
72
|
+
// slides[i].style.transform = 'translate( ' + x + 'px, ' + y + 'px )';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const setSize = (radius: number) => {
|
|
76
|
+
if (!wrapper.current || !slidesHolder.current) return //bail out;
|
|
77
|
+
|
|
78
|
+
const slideSize = isMobile ? 0.12 : 0.15
|
|
79
|
+
|
|
80
|
+
wrapper.current.style.width = 2 * radius + 'px'
|
|
81
|
+
wrapper.current.style.height = 2 * radius + 'px'
|
|
82
|
+
|
|
83
|
+
let r = 2 * radius * (1 - slideSize)
|
|
84
|
+
slidesHolder.current.style.width = slidesHolder.current.style.height =
|
|
85
|
+
r + 'px'
|
|
86
|
+
slidesRepositioning(r / 2)
|
|
87
|
+
|
|
88
|
+
slidesSize = Math.min(
|
|
89
|
+
2 * radius * slideSize,
|
|
90
|
+
stepAngle * radius * (1 - slideSize) - 50
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
if (!isMobile) {
|
|
94
|
+
slidesHolder.current.style.marginTop = radius * slideSize + 'px'
|
|
95
|
+
} else {
|
|
96
|
+
wrapper.current.style.marginTop = -(r - slidesSize) + 'px'
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
for (let i = 0; i < slides.length; i++) {
|
|
100
|
+
slides[i].style.width = slides[i].style.height =
|
|
101
|
+
(isMobile ? slidesSize * 1.5 : slidesSize) + 'px'
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const sliderResize = debounce(() => {
|
|
106
|
+
const sliderSize = isMobile ? 1.9 : 1
|
|
107
|
+
|
|
108
|
+
let radius,
|
|
109
|
+
w = slider?.current
|
|
110
|
+
? slider?.current?.getBoundingClientRect().width
|
|
111
|
+
: 0,
|
|
112
|
+
h = slider?.current ? slider?.current.getBoundingClientRect().height : 0
|
|
113
|
+
|
|
114
|
+
2 * h <= w ? (radius = h * sliderSize) : (radius = (w / 2) * sliderSize)
|
|
115
|
+
|
|
116
|
+
setSize(Math.round(radius))
|
|
117
|
+
}, 250)
|
|
118
|
+
|
|
119
|
+
const addStyle = () => {
|
|
120
|
+
setTimeout(() => {
|
|
121
|
+
contentHolder?.current?.classList.add('active')
|
|
122
|
+
slides[currentSlide].classList.add('active')
|
|
123
|
+
}, 400)
|
|
124
|
+
}
|
|
125
|
+
const removeStyle = () => {
|
|
126
|
+
contentHolder?.current?.classList.remove('active')
|
|
127
|
+
const prevElement = slides[currentSlide]
|
|
128
|
+
setTimeout(() => {
|
|
129
|
+
content && setSlideContent(content[currentSlide] as any)
|
|
130
|
+
prevElement.classList.remove('active')
|
|
131
|
+
}, 400)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const rotateSlider = e => {
|
|
135
|
+
const newSlide = slides.indexOf(e.target)
|
|
136
|
+
|
|
137
|
+
if (currentSlide === newSlide || !slidesHolder?.current) return
|
|
138
|
+
|
|
139
|
+
removeStyle()
|
|
140
|
+
|
|
141
|
+
let multiplier = 0
|
|
142
|
+
let direction = ''
|
|
143
|
+
|
|
144
|
+
if (currentSlide === 0 && newSlide === slides.length - 1) {
|
|
145
|
+
multiplier = -1
|
|
146
|
+
direction = '-'
|
|
147
|
+
} else if (currentSlide === slides.length - 1 && newSlide === 0) {
|
|
148
|
+
multiplier = 1
|
|
149
|
+
direction = '+'
|
|
150
|
+
} else {
|
|
151
|
+
multiplier = newSlide - currentSlide
|
|
152
|
+
direction = currentSlide < newSlide ? '+' : '-'
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const newAngle = Math.abs(((stepAngle * 180) / Math.PI) * multiplier)
|
|
156
|
+
|
|
157
|
+
currentAngle =
|
|
158
|
+
direction === '-' ? currentAngle + newAngle : currentAngle - newAngle
|
|
159
|
+
currentSlide = newSlide
|
|
160
|
+
|
|
161
|
+
if (svg?.current)
|
|
162
|
+
svg.current.style.transform =
|
|
163
|
+
'translate(-50%, -50%) rotate( ' + currentAngle * 4 + 'deg )'
|
|
164
|
+
slidesHolder.current.style.transform = 'rotate( ' + currentAngle + 'deg )'
|
|
165
|
+
addStyle()
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
sliderResize()
|
|
169
|
+
addStyle()
|
|
170
|
+
|
|
171
|
+
for (let i = 0; i < slides.length; i++) {
|
|
172
|
+
slides[i].addEventListener('click', rotateSlider, { passive: true })
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
window.addEventListener('resize', sliderResize)
|
|
176
|
+
|
|
177
|
+
return () => {
|
|
178
|
+
for (let i = 0; i < slides.length; i++) {
|
|
179
|
+
slides[i].removeEventListener('click', rotateSlider)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
window.removeEventListener('resize', sliderResize)
|
|
183
|
+
}
|
|
184
|
+
}, [isMobile])
|
|
185
|
+
|
|
186
|
+
if (!content) return <></>
|
|
187
|
+
|
|
188
|
+
return (
|
|
189
|
+
<StyledCircularSlider
|
|
190
|
+
ref={slider as any}
|
|
191
|
+
className={className}
|
|
192
|
+
style={style}
|
|
193
|
+
>
|
|
194
|
+
<svg
|
|
195
|
+
ref={svg as any}
|
|
196
|
+
viewBox="0 0 907 906"
|
|
197
|
+
fill="none"
|
|
198
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
199
|
+
>
|
|
200
|
+
<path
|
|
201
|
+
d="M887.551 584.892L904.187 504.729L531.591 461.981C531.824 459.769 532.012 457.775 531.984 455.735L906.794 468.208L902.047 386.545L531.043 441.754C530.798 439.669 530.336 437.54 529.829 435.627L895.322 350.347L869.628 272.699L525.63 422.1C524.69 420.097 523.922 418.356 522.981 416.353L853.852 239.821L808.868 171.277L515.038 404.535C513.792 402.92 512.328 401.26 510.82 399.817L784.811 143.459L723.799 88.9898L500.604 390.24C498.834 388.969 497.28 387.742 495.465 386.688L693.744 68.2895L620.714 31.439L483.014 380.262C481.154 379.424 479.032 378.757 477.127 378.136L585.693 19.4255L505.53 2.78951L462.783 375.385C460.571 375.152 458.576 374.964 456.537 374.993L469.01 0.182176L387.347 4.92974L442.556 375.933C440.471 376.179 438.342 376.641 436.429 377.148L351.149 11.6549L273.501 37.3486L422.902 381.346C420.899 382.286 419.158 383.055 417.155 383.995L240.361 53.2959L171.817 98.2799L405.12 391.893C403.505 393.14 401.846 394.603 400.403 396.112L144.261 122.166L89.7918 183.178L391.042 406.373C389.77 408.143 388.544 409.696 387.49 411.511L69.2632 213.494L32.4127 286.524L381.235 424.224C380.397 426.084 379.731 428.206 379.11 430.111L20.2275 321.283L3.59147 401.446L376.187 444.194C375.954 446.405 375.766 448.4 375.795 450.44L0.984138 437.967L5.73169 519.63L376.735 464.42C376.981 466.505 377.443 468.635 377.95 470.548L12.4569 555.828L38.1505 633.476L382.148 484.075C383.088 486.078 383.857 487.819 384.797 489.822L54.0979 666.616L99.0819 735.16L392.695 501.857C393.942 503.471 395.405 505.131 396.914 506.574L122.968 762.715L183.98 817.185L407.175 515.935C408.945 517.206 410.498 518.432 412.313 519.487L214.034 837.885L287.064 874.736L424.765 525.913C426.625 526.751 428.746 527.417 430.651 528.038L322.085 886.749L402.248 903.385L444.996 530.789C447.207 531.022 449.202 531.21 451.242 531.182L438.769 905.992L520.432 901.245L465.222 530.241C467.307 529.996 469.437 529.534 471.35 529.027L556.629 894.52L634.278 868.826L484.876 524.828C486.88 523.888 488.621 523.12 490.624 522.179L667.156 853.05L735.7 808.066L502.442 514.236C504.056 512.99 505.716 511.526 507.159 510.018L763.517 784.009L817.987 722.997L516.737 499.802C518.008 498.032 519.234 496.478 520.289 494.663L838.687 692.942L875.538 619.912L526.715 482.212C527.553 480.352 528.219 478.23 528.84 476.325L887.551 584.892Z"
|
|
202
|
+
fill="#FF4552"
|
|
203
|
+
/>
|
|
204
|
+
</svg>
|
|
205
|
+
<StyledCircularSliderWrapper ref={wrapper as any}>
|
|
206
|
+
<StyledCircularSliderSlides ref={slidesHolder as any}>
|
|
207
|
+
{content?.map((item, index) => {
|
|
208
|
+
return (
|
|
209
|
+
<StyledCircularSliderSlide key={`slide-${index}`}>
|
|
210
|
+
{item.img}
|
|
211
|
+
</StyledCircularSliderSlide>
|
|
212
|
+
)
|
|
213
|
+
})}
|
|
214
|
+
</StyledCircularSliderSlides>
|
|
215
|
+
</StyledCircularSliderWrapper>
|
|
216
|
+
<StyledCircularSliderContent ref={contentHolder as any}>
|
|
217
|
+
<div className="mb-4">
|
|
218
|
+
<Heading tag="span" size="h2" className="color-primary50 fw-bold">
|
|
219
|
+
{slideContent?.name}
|
|
220
|
+
</Heading>
|
|
221
|
+
<Heading tag="span" size="h4" className="color-secondary50">
|
|
222
|
+
{slideContent?.role}
|
|
223
|
+
</Heading>
|
|
224
|
+
</div>
|
|
225
|
+
{cta}
|
|
226
|
+
</StyledCircularSliderContent>
|
|
227
|
+
</StyledCircularSlider>
|
|
228
|
+
)
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export default CircularSlider
|