oddsgate-ds 1.0.169 → 1.0.174
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/esm/assets/components/quotes.svg +3 -3
- 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/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/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/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 +154 -154
- package/src/components/organisms/Slider/Slider.interface.ts +19 -19
- package/src/components/organisms/Slider/Slider.stories.tsx +146 -146
- package/src/components/organisms/Slider/Slider.theme.ts +145 -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,88 +1,88 @@
|
|
|
1
|
-
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
-
import {
|
|
3
|
-
StyledTabs,
|
|
4
|
-
StyledTabsContent,
|
|
5
|
-
StyledTabsLinks,
|
|
6
|
-
StyledTabsMenu
|
|
7
|
-
} from './Tabs.theme'
|
|
8
|
-
|
|
9
|
-
import Heading from '@/components/atoms/Heading/Heading.component'
|
|
10
|
-
import { ITabs } from './Tabs.interface'
|
|
11
|
-
import { debounce } from '@/helpers/events'
|
|
12
|
-
|
|
13
|
-
const Tabs = ({ id, title, menu, vertical, className, style }: ITabs) => {
|
|
14
|
-
const [active, setActive] = useState(0)
|
|
15
|
-
const tabsContent = useRef<HTMLDivElement>();
|
|
16
|
-
|
|
17
|
-
const setActiveEl = (item, index) => {
|
|
18
|
-
if (item?.onClick) item?.onClick()
|
|
19
|
-
|
|
20
|
-
setActive(index);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const setTabsHeight = debounce(() => {
|
|
25
|
-
if (!tabsContent.current) return;
|
|
26
|
-
|
|
27
|
-
const heights: number[] = [];
|
|
28
|
-
Array.from(tabsContent?.current?.children).map((child: any) => {
|
|
29
|
-
heights.push(child?.offsetHeight as number)
|
|
30
|
-
})
|
|
31
|
-
tabsContent.current.style.height = `${Math.max(...heights)}px`;
|
|
32
|
-
}, 250)
|
|
33
|
-
|
|
34
|
-
useEffect(()=>{
|
|
35
|
-
setTabsHeight();
|
|
36
|
-
window.addEventListener('resize', setTabsHeight);
|
|
37
|
-
|
|
38
|
-
return () => {
|
|
39
|
-
window.removeEventListener('resize', setTabsHeight);
|
|
40
|
-
}
|
|
41
|
-
}, [])
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<StyledTabs id={id} $vertical={vertical} className={className} style={style}>
|
|
46
|
-
<div>
|
|
47
|
-
{title && <Heading tag="h3" size="h1" className='text-uppercase mb-4'>{title}</Heading>}
|
|
48
|
-
<StyledTabsMenu align='left'>
|
|
49
|
-
{menu &&
|
|
50
|
-
menu.map((item, index) => {
|
|
51
|
-
return (
|
|
52
|
-
<div key={`tab-${item.id}`}>
|
|
53
|
-
<StyledTabsLinks
|
|
54
|
-
$active={index === active}
|
|
55
|
-
className='h3 fw-bold'
|
|
56
|
-
onClick={() => {
|
|
57
|
-
setActiveEl(item, index);
|
|
58
|
-
}}
|
|
59
|
-
>
|
|
60
|
-
<span>{item.label}</span>
|
|
61
|
-
</StyledTabsLinks>
|
|
62
|
-
</div>
|
|
63
|
-
)
|
|
64
|
-
})}
|
|
65
|
-
</StyledTabsMenu>
|
|
66
|
-
</div>
|
|
67
|
-
{menu && (
|
|
68
|
-
<div ref={tabsContent as any} className='position-relative'>
|
|
69
|
-
{menu.map((item, index) => {
|
|
70
|
-
return (
|
|
71
|
-
<StyledTabsContent
|
|
72
|
-
key={`tab-content-${item.id}`}
|
|
73
|
-
$active={index === active}
|
|
74
|
-
className='h4'
|
|
75
|
-
>
|
|
76
|
-
|
|
77
|
-
<div>{item.content}</div>
|
|
78
|
-
<Heading tag='span' size='h3' className='color-secondary50 fw-bold mt-5'>{item.label}</Heading>
|
|
79
|
-
</StyledTabsContent>
|
|
80
|
-
)
|
|
81
|
-
})}
|
|
82
|
-
</div>
|
|
83
|
-
)}
|
|
84
|
-
</StyledTabs>
|
|
85
|
-
)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export default Tabs
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
+
import {
|
|
3
|
+
StyledTabs,
|
|
4
|
+
StyledTabsContent,
|
|
5
|
+
StyledTabsLinks,
|
|
6
|
+
StyledTabsMenu
|
|
7
|
+
} from './Tabs.theme'
|
|
8
|
+
|
|
9
|
+
import Heading from '@/components/atoms/Heading/Heading.component'
|
|
10
|
+
import { ITabs } from './Tabs.interface'
|
|
11
|
+
import { debounce } from '@/helpers/events'
|
|
12
|
+
|
|
13
|
+
const Tabs = ({ id, title, menu, vertical, className, style }: ITabs) => {
|
|
14
|
+
const [active, setActive] = useState(0)
|
|
15
|
+
const tabsContent = useRef<HTMLDivElement>();
|
|
16
|
+
|
|
17
|
+
const setActiveEl = (item, index) => {
|
|
18
|
+
if (item?.onClick) item?.onClick()
|
|
19
|
+
|
|
20
|
+
setActive(index);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const setTabsHeight = debounce(() => {
|
|
25
|
+
if (!tabsContent.current) return;
|
|
26
|
+
|
|
27
|
+
const heights: number[] = [];
|
|
28
|
+
Array.from(tabsContent?.current?.children).map((child: any) => {
|
|
29
|
+
heights.push(child?.offsetHeight as number)
|
|
30
|
+
})
|
|
31
|
+
tabsContent.current.style.height = `${Math.max(...heights)}px`;
|
|
32
|
+
}, 250)
|
|
33
|
+
|
|
34
|
+
useEffect(()=>{
|
|
35
|
+
setTabsHeight();
|
|
36
|
+
window.addEventListener('resize', setTabsHeight);
|
|
37
|
+
|
|
38
|
+
return () => {
|
|
39
|
+
window.removeEventListener('resize', setTabsHeight);
|
|
40
|
+
}
|
|
41
|
+
}, [])
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<StyledTabs id={id} $vertical={vertical} className={className} style={style}>
|
|
46
|
+
<div>
|
|
47
|
+
{title && <Heading tag="h3" size="h1" className='text-uppercase mb-4'>{title}</Heading>}
|
|
48
|
+
<StyledTabsMenu align='left'>
|
|
49
|
+
{menu &&
|
|
50
|
+
menu.map((item, index) => {
|
|
51
|
+
return (
|
|
52
|
+
<div key={`tab-${item.id}`}>
|
|
53
|
+
<StyledTabsLinks
|
|
54
|
+
$active={index === active}
|
|
55
|
+
className='h3 fw-bold'
|
|
56
|
+
onClick={() => {
|
|
57
|
+
setActiveEl(item, index);
|
|
58
|
+
}}
|
|
59
|
+
>
|
|
60
|
+
<span>{item.label}</span>
|
|
61
|
+
</StyledTabsLinks>
|
|
62
|
+
</div>
|
|
63
|
+
)
|
|
64
|
+
})}
|
|
65
|
+
</StyledTabsMenu>
|
|
66
|
+
</div>
|
|
67
|
+
{menu && (
|
|
68
|
+
<div ref={tabsContent as any} className='position-relative'>
|
|
69
|
+
{menu.map((item, index) => {
|
|
70
|
+
return (
|
|
71
|
+
<StyledTabsContent
|
|
72
|
+
key={`tab-content-${item.id}`}
|
|
73
|
+
$active={index === active}
|
|
74
|
+
className='h4'
|
|
75
|
+
>
|
|
76
|
+
|
|
77
|
+
<div>{item.content}</div>
|
|
78
|
+
<Heading tag='span' size='h3' className='color-secondary50 fw-bold mt-5'>{item.label}</Heading>
|
|
79
|
+
</StyledTabsContent>
|
|
80
|
+
)
|
|
81
|
+
})}
|
|
82
|
+
</div>
|
|
83
|
+
)}
|
|
84
|
+
</StyledTabs>
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export default Tabs
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { CSSProperties } from 'react';
|
|
2
|
-
|
|
3
|
-
export interface ITabs {
|
|
4
|
-
id?: string
|
|
5
|
-
title?: string
|
|
6
|
-
menu?: ITabsItem[]
|
|
7
|
-
vertical?: boolean
|
|
8
|
-
$vertical?: boolean
|
|
9
|
-
className?: string
|
|
10
|
-
style?: CSSProperties
|
|
11
|
-
}
|
|
12
|
-
export interface ITabsItem {
|
|
13
|
-
id?: string
|
|
14
|
-
label?: string
|
|
15
|
-
$active?: boolean
|
|
16
|
-
content?: React.ReactNode
|
|
17
|
-
onClick?: (event?: React.MouseEvent<HTMLElement>) => void
|
|
18
|
-
}
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ITabs {
|
|
4
|
+
id?: string
|
|
5
|
+
title?: string
|
|
6
|
+
menu?: ITabsItem[]
|
|
7
|
+
vertical?: boolean
|
|
8
|
+
$vertical?: boolean
|
|
9
|
+
className?: string
|
|
10
|
+
style?: CSSProperties
|
|
11
|
+
}
|
|
12
|
+
export interface ITabsItem {
|
|
13
|
+
id?: string
|
|
14
|
+
label?: string
|
|
15
|
+
$active?: boolean
|
|
16
|
+
content?: React.ReactNode
|
|
17
|
+
onClick?: (event?: React.MouseEvent<HTMLElement>) => void
|
|
18
|
+
}
|
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
-
|
|
3
|
-
import { ITabs } from './Tabs.interface'
|
|
4
|
-
import React from 'react'
|
|
5
|
-
import RichText from '@/components/atoms/RichText'
|
|
6
|
-
import Tabs from './Tabs.component'
|
|
7
|
-
|
|
8
|
-
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
|
|
9
|
-
export default {
|
|
10
|
-
title: 'Components/Tabs',
|
|
11
|
-
component: Tabs
|
|
12
|
-
} as Meta
|
|
13
|
-
|
|
14
|
-
export const Simple: StoryObj<ITabs> = {
|
|
15
|
-
render: args => <Tabs {...args}></Tabs>,
|
|
16
|
-
args: {
|
|
17
|
-
title: 'Lorem ipsum dolor sit amet',
|
|
18
|
-
vertical: true,
|
|
19
|
-
menu: [
|
|
20
|
-
{
|
|
21
|
-
id: 'lorem-1',
|
|
22
|
-
label: 'Lorem 1',
|
|
23
|
-
content: (
|
|
24
|
-
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
25
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
26
|
-
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
27
|
-
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
28
|
-
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
29
|
-
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
30
|
-
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
31
|
-
culpa qui officia deserunt mollit anim id est laborum.
|
|
32
|
-
</RichText>
|
|
33
|
-
),
|
|
34
|
-
onClick: () => {
|
|
35
|
-
alert('Tab clicked')
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
id: 'lorem-2',
|
|
40
|
-
label: 'Lorem 2',
|
|
41
|
-
content: (
|
|
42
|
-
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
43
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
44
|
-
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
45
|
-
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
46
|
-
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
47
|
-
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
48
|
-
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
49
|
-
culpa qui officia deserunt mollit anim id est eiusmod tempor
|
|
50
|
-
incididunt ut labore et dolore magna aliqua. Ut enim ad minim
|
|
51
|
-
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
|
|
52
|
-
ea commodo consequat. Duis aute irure dolor in reprehenderit in
|
|
53
|
-
voluptate velit esse cillum dolore eu fugiat nulla pariatur.
|
|
54
|
-
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
|
55
|
-
officia deserunt mollit anim id est laborum.
|
|
56
|
-
</RichText>
|
|
57
|
-
)
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
id: 'lorem-3',
|
|
61
|
-
label: 'Lorem 3',
|
|
62
|
-
content: (
|
|
63
|
-
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
64
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
65
|
-
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
66
|
-
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
67
|
-
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
68
|
-
</RichText>
|
|
69
|
-
)
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
id: 'lorem-4',
|
|
73
|
-
label: 'Lorem 4',
|
|
74
|
-
content: (
|
|
75
|
-
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
76
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
77
|
-
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
78
|
-
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
79
|
-
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
80
|
-
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
81
|
-
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
82
|
-
culpa qui officia deserunt mollit anim id est laborum.
|
|
83
|
-
</RichText>
|
|
84
|
-
)
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
id: 'lorem-5',
|
|
88
|
-
label: 'Lorem 5',
|
|
89
|
-
content: (
|
|
90
|
-
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
91
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
92
|
-
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
93
|
-
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
94
|
-
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
95
|
-
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
96
|
-
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
97
|
-
culpa qui officia deserunt mollit anim id est laborum.
|
|
98
|
-
</RichText>
|
|
99
|
-
)
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
id: 'lorem-6',
|
|
103
|
-
label: 'Lorem 6',
|
|
104
|
-
content: (
|
|
105
|
-
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
106
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
107
|
-
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
108
|
-
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
109
|
-
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
110
|
-
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
111
|
-
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
112
|
-
culpa qui officia deserunt mollit anim id est laborum.
|
|
113
|
-
</RichText>
|
|
114
|
-
)
|
|
115
|
-
}
|
|
116
|
-
]
|
|
117
|
-
}
|
|
118
|
-
}
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
|
|
3
|
+
import { ITabs } from './Tabs.interface'
|
|
4
|
+
import React from 'react'
|
|
5
|
+
import RichText from '@/components/atoms/RichText'
|
|
6
|
+
import Tabs from './Tabs.component'
|
|
7
|
+
|
|
8
|
+
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
|
|
9
|
+
export default {
|
|
10
|
+
title: 'Components/Tabs',
|
|
11
|
+
component: Tabs
|
|
12
|
+
} as Meta
|
|
13
|
+
|
|
14
|
+
export const Simple: StoryObj<ITabs> = {
|
|
15
|
+
render: args => <Tabs {...args}></Tabs>,
|
|
16
|
+
args: {
|
|
17
|
+
title: 'Lorem ipsum dolor sit amet',
|
|
18
|
+
vertical: true,
|
|
19
|
+
menu: [
|
|
20
|
+
{
|
|
21
|
+
id: 'lorem-1',
|
|
22
|
+
label: 'Lorem 1',
|
|
23
|
+
content: (
|
|
24
|
+
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
25
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
26
|
+
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
27
|
+
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
28
|
+
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
29
|
+
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
30
|
+
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
31
|
+
culpa qui officia deserunt mollit anim id est laborum.
|
|
32
|
+
</RichText>
|
|
33
|
+
),
|
|
34
|
+
onClick: () => {
|
|
35
|
+
alert('Tab clicked')
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'lorem-2',
|
|
40
|
+
label: 'Lorem 2',
|
|
41
|
+
content: (
|
|
42
|
+
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
43
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
44
|
+
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
45
|
+
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
46
|
+
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
47
|
+
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
48
|
+
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
49
|
+
culpa qui officia deserunt mollit anim id est eiusmod tempor
|
|
50
|
+
incididunt ut labore et dolore magna aliqua. Ut enim ad minim
|
|
51
|
+
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
|
|
52
|
+
ea commodo consequat. Duis aute irure dolor in reprehenderit in
|
|
53
|
+
voluptate velit esse cillum dolore eu fugiat nulla pariatur.
|
|
54
|
+
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
|
55
|
+
officia deserunt mollit anim id est laborum.
|
|
56
|
+
</RichText>
|
|
57
|
+
)
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 'lorem-3',
|
|
61
|
+
label: 'Lorem 3',
|
|
62
|
+
content: (
|
|
63
|
+
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
64
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
65
|
+
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
66
|
+
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
67
|
+
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
68
|
+
</RichText>
|
|
69
|
+
)
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: 'lorem-4',
|
|
73
|
+
label: 'Lorem 4',
|
|
74
|
+
content: (
|
|
75
|
+
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
76
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
77
|
+
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
78
|
+
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
79
|
+
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
80
|
+
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
81
|
+
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
82
|
+
culpa qui officia deserunt mollit anim id est laborum.
|
|
83
|
+
</RichText>
|
|
84
|
+
)
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: 'lorem-5',
|
|
88
|
+
label: 'Lorem 5',
|
|
89
|
+
content: (
|
|
90
|
+
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
91
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
92
|
+
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
93
|
+
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
94
|
+
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
95
|
+
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
96
|
+
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
97
|
+
culpa qui officia deserunt mollit anim id est laborum.
|
|
98
|
+
</RichText>
|
|
99
|
+
)
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: 'lorem-6',
|
|
103
|
+
label: 'Lorem 6',
|
|
104
|
+
content: (
|
|
105
|
+
<RichText style={{ color: 'var(--color-gray50)' }}>
|
|
106
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
107
|
+
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
|
|
108
|
+
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
|
109
|
+
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
110
|
+
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
111
|
+
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
|
112
|
+
culpa qui officia deserunt mollit anim id est laborum.
|
|
113
|
+
</RichText>
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
}
|