oddsgate-ds 1.0.112 → 1.0.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/components/atoms/Marquee/Marquee.component.d.ts +1 -1
- package/dist/cjs/types/components/atoms/Marquee/Marquee.interface.d.ts +11 -5
- package/dist/cjs/types/components/molecules/ProductCard/ProductCard.component.d.ts +1 -1
- package/dist/cjs/types/components/molecules/ProductCard/ProductCard.interface.d.ts +1 -0
- package/dist/cjs/types/components/organisms/CircularSliderTeste/CircularSliderTeste.component.d.ts +4 -0
- package/dist/cjs/types/components/organisms/CircularSliderTeste/CircularSliderTeste.interface.d.ts +12 -0
- package/dist/cjs/types/components/organisms/CircularSliderTeste/CircularSliderTeste.theme.d.ts +7 -0
- package/dist/cjs/types/components/organisms/CircularSliderTeste/index.d.ts +1 -0
- package/dist/esm/index.js +5 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/atoms/Marquee/Marquee.component.d.ts +1 -1
- package/dist/esm/types/components/atoms/Marquee/Marquee.interface.d.ts +11 -5
- package/dist/esm/types/components/molecules/ProductCard/ProductCard.component.d.ts +1 -1
- package/dist/esm/types/components/molecules/ProductCard/ProductCard.interface.d.ts +1 -0
- package/dist/esm/types/components/organisms/CircularSliderTeste/CircularSliderTeste.component.d.ts +4 -0
- package/dist/esm/types/components/organisms/CircularSliderTeste/CircularSliderTeste.interface.d.ts +12 -0
- package/dist/esm/types/components/organisms/CircularSliderTeste/CircularSliderTeste.theme.d.ts +7 -0
- package/dist/esm/types/components/organisms/CircularSliderTeste/index.d.ts +1 -0
- package/dist/types.d.ts +14 -7
- package/package.json +1 -1
- package/src/components/atoms/FormField/FormField.theme.tsx +2 -0
- package/src/components/atoms/Marquee/Marquee.component.tsx +12 -7
- package/src/components/atoms/Marquee/Marquee.interface.ts +12 -5
- package/src/components/atoms/Marquee/Marquee.stories.tsx +3 -1
- package/src/components/atoms/Marquee/Marquee.theme.ts +35 -27
- package/src/components/atoms/RichText/RichText.theme.ts +2 -0
- package/src/components/molecules/BlogCard/BlogCard.component.tsx +2 -2
- package/src/components/molecules/BlogCard/BlogCard.theme.ts +3 -1
- package/src/components/molecules/NewsCard/NewsCard.component.tsx +8 -7
- package/src/components/molecules/NewsCard/NewsCard.theme.ts +7 -3
- package/src/components/molecules/ProductCard/ProductCard.component.tsx +5 -2
- package/src/components/molecules/ProductCard/ProductCard.interface.ts +1 -0
- package/src/components/organisms/CircularSlider/CircularSlider.component.tsx +5 -3
- package/src/components/organisms/CircularSlider/CircularSlider.theme.ts +7 -1
- package/src/components/organisms/CircularSliderTeste/CircularSliderTeste.component.tsx +190 -0
- package/src/components/organisms/CircularSliderTeste/CircularSliderTeste.interface.ts +13 -0
- package/src/components/organisms/CircularSliderTeste/CircularSliderTeste.stories.tsx +134 -0
- package/src/components/organisms/CircularSliderTeste/CircularSliderTeste.theme.ts +65 -0
- package/src/components/organisms/CircularSliderTeste/index.ts +1 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
+
import {
|
|
3
|
+
StyledCircularSliderTeste,
|
|
4
|
+
StyledCircularSliderTesteContent,
|
|
5
|
+
StyledCircularSliderTesteSlide,
|
|
6
|
+
StyledCircularSliderTesteSlides,
|
|
7
|
+
StyledCircularSliderTesteWrapper
|
|
8
|
+
} from './CircularSliderTeste.theme'
|
|
9
|
+
|
|
10
|
+
import Heading from '@/components/atoms/Heading/Heading.component';
|
|
11
|
+
import { ICircularSliderTeste } from './CircularSliderTeste.interface'
|
|
12
|
+
import { debounce } from '@/helpers/events';
|
|
13
|
+
import useMediaMatch from '@/helpers/useMediaMatch';
|
|
14
|
+
|
|
15
|
+
const CircularSliderTeste = ({
|
|
16
|
+
cta,
|
|
17
|
+
content,
|
|
18
|
+
style,
|
|
19
|
+
className,
|
|
20
|
+
}: ICircularSliderTeste) => {
|
|
21
|
+
|
|
22
|
+
const [slideContent, setSlideContent] = useState({
|
|
23
|
+
name: content && content[0].name,
|
|
24
|
+
role: content && content[0].role,
|
|
25
|
+
});
|
|
26
|
+
const slider = useRef<HTMLDivElement>();
|
|
27
|
+
const wrapper = useRef<HTMLDivElement>();
|
|
28
|
+
const slidesHolder = useRef<HTMLDivElement>();
|
|
29
|
+
const contentHolder = useRef<HTMLDivElement>();
|
|
30
|
+
|
|
31
|
+
//force 12 items
|
|
32
|
+
if (content && content.length < 12) {
|
|
33
|
+
let counter = 0;
|
|
34
|
+
for (let i = content.length; i <= 12; i++) {
|
|
35
|
+
content[i] = content[counter];
|
|
36
|
+
counter++;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (!slidesHolder.current) return //bail out;
|
|
42
|
+
|
|
43
|
+
const animationDuration = 600;
|
|
44
|
+
|
|
45
|
+
const slides = Array.prototype.slice.call(slidesHolder?.current?.children);
|
|
46
|
+
|
|
47
|
+
let slidesSize = 0;
|
|
48
|
+
|
|
49
|
+
let currentAngle = -180;
|
|
50
|
+
|
|
51
|
+
const stepAngle = 2 * Math.PI / slidesHolder?.current?.children.length;
|
|
52
|
+
// const stepAngle = 0.52;
|
|
53
|
+
|
|
54
|
+
let currentSlide = 0;
|
|
55
|
+
|
|
56
|
+
slidesHolder.current.style.transitionDuration = animationDuration + 'ms';
|
|
57
|
+
const slidesRepositioning = (r) => {
|
|
58
|
+
for (let i = 0; i < slides.length; i++) {
|
|
59
|
+
|
|
60
|
+
let x = r * Math.cos(stepAngle * i - Math.PI / 2),
|
|
61
|
+
y = r * Math.sin(stepAngle * i - Math.PI / 2);
|
|
62
|
+
|
|
63
|
+
slides[i].style.transform = 'translate( ' + x + 'px, ' + y + 'px ) rotate( ' + ((stepAngle * 180 / Math.PI * i) + 4) + 'deg )';
|
|
64
|
+
// slides[i].style.transform = 'translate( ' + x + 'px, ' + y + 'px )';
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const setSize = (radius: number) => {
|
|
68
|
+
if (!wrapper.current || !slidesHolder.current) return //bail out;
|
|
69
|
+
|
|
70
|
+
const slideSize = 0.15;
|
|
71
|
+
|
|
72
|
+
wrapper.current.style.width = 2 * radius + 'px';
|
|
73
|
+
wrapper.current.style.height = 2 * radius + 'px';
|
|
74
|
+
|
|
75
|
+
let r = 2 * radius * (1 - slideSize);
|
|
76
|
+
slidesHolder.current.style.width = r*2 + 'px';
|
|
77
|
+
slidesHolder.current.style.height = r/2 + 'px';
|
|
78
|
+
slidesRepositioning(r / 2);
|
|
79
|
+
|
|
80
|
+
slidesSize = Math.min(2 * radius * slideSize, stepAngle * radius * (1 - slideSize) - 50);
|
|
81
|
+
|
|
82
|
+
for (let i = 0; i < slides.length; i++) {
|
|
83
|
+
slides[i].style.width = slides[i].style.height = slidesSize + 'px';
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const sliderResize = debounce(() => {
|
|
89
|
+
const sliderSize = 1;
|
|
90
|
+
|
|
91
|
+
let radius,
|
|
92
|
+
w = slider?.current ? slider?.current?.getBoundingClientRect().width : 0,
|
|
93
|
+
h = slider?.current ? slider?.current.getBoundingClientRect().height : 0;
|
|
94
|
+
|
|
95
|
+
2 * h <= w ? radius = h * sliderSize : radius = (w / 2) * sliderSize;
|
|
96
|
+
|
|
97
|
+
setSize(Math.round(radius));
|
|
98
|
+
}, 250)
|
|
99
|
+
|
|
100
|
+
const addStyle = () => {
|
|
101
|
+
setTimeout(() => {
|
|
102
|
+
contentHolder?.current?.classList.add('active');
|
|
103
|
+
slides[currentSlide].classList.add('active');
|
|
104
|
+
}, 400);
|
|
105
|
+
};
|
|
106
|
+
const removeStyle = () => {
|
|
107
|
+
contentHolder?.current?.classList.remove('active');
|
|
108
|
+
const prevElement = slides[currentSlide];
|
|
109
|
+
setTimeout(() => {
|
|
110
|
+
content && setSlideContent(content[currentSlide] as any)
|
|
111
|
+
prevElement.classList.remove('active');
|
|
112
|
+
}, 400);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const rotateSlider = (e) => {
|
|
116
|
+
const newSlide = slides.indexOf(e.target);
|
|
117
|
+
|
|
118
|
+
if (currentSlide === newSlide || !slidesHolder?.current) return;
|
|
119
|
+
|
|
120
|
+
removeStyle();
|
|
121
|
+
|
|
122
|
+
let multiplier = 0;
|
|
123
|
+
let direction = "";
|
|
124
|
+
|
|
125
|
+
if (currentSlide === 0 && newSlide === (slides.length - 1)) {
|
|
126
|
+
multiplier = -1;
|
|
127
|
+
direction = "-";
|
|
128
|
+
} else if (currentSlide === (slides.length - 1) && newSlide === 0) {
|
|
129
|
+
multiplier = 1;
|
|
130
|
+
direction = "+";
|
|
131
|
+
} else {
|
|
132
|
+
multiplier = newSlide - currentSlide
|
|
133
|
+
direction = currentSlide < newSlide ? "+" : "-";
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const newAngle = Math.abs((stepAngle * 180 / Math.PI) * multiplier);
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
currentAngle = direction === "-" ? (currentAngle + newAngle) : (currentAngle - newAngle);
|
|
140
|
+
currentSlide = newSlide;
|
|
141
|
+
|
|
142
|
+
slidesHolder.current.style.transform = 'rotate( ' + currentAngle + 'deg )';
|
|
143
|
+
addStyle();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
sliderResize();
|
|
147
|
+
addStyle();
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
for (let i = 0; i < slides.length; i++) {
|
|
151
|
+
slides[i].addEventListener('click', rotateSlider, { passive: true });
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
window.addEventListener('resize', sliderResize)
|
|
155
|
+
|
|
156
|
+
return () => {
|
|
157
|
+
for (let i = 0; i < slides.length; i++) {
|
|
158
|
+
slides[i].removeEventListener('click', rotateSlider);
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
window.removeEventListener('resize', sliderResize)
|
|
162
|
+
}
|
|
163
|
+
}, [])
|
|
164
|
+
|
|
165
|
+
if (!content) return <></>
|
|
166
|
+
|
|
167
|
+
return (
|
|
168
|
+
<StyledCircularSliderTeste ref={slider as any} className={className} style={style}>
|
|
169
|
+
<StyledCircularSliderTesteWrapper ref={wrapper as any}>
|
|
170
|
+
<StyledCircularSliderTesteSlides ref={slidesHolder as any}>
|
|
171
|
+
{content?.map((item, index) => {
|
|
172
|
+
return (
|
|
173
|
+
<StyledCircularSliderTesteSlide key={`slide-${index}`}>{item.img}</StyledCircularSliderTesteSlide>
|
|
174
|
+
)
|
|
175
|
+
})}
|
|
176
|
+
</StyledCircularSliderTesteSlides>
|
|
177
|
+
</StyledCircularSliderTesteWrapper>
|
|
178
|
+
<StyledCircularSliderTesteContent ref={contentHolder as any}>
|
|
179
|
+
<div className='mb-4'>
|
|
180
|
+
<Heading tag="span" size="h2" className='color-primary50 fw-bold'>{slideContent?.name}</Heading>
|
|
181
|
+
<Heading tag="span" size="h4" className='color-secondary50'>{slideContent?.role}</Heading>
|
|
182
|
+
</div>
|
|
183
|
+
{cta}
|
|
184
|
+
</StyledCircularSliderTesteContent>
|
|
185
|
+
</StyledCircularSliderTeste>
|
|
186
|
+
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export default CircularSliderTeste
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
|
|
3
|
+
import Button from '@/components/atoms/Button/Button.component'
|
|
4
|
+
import CircularSliderTeste from './CircularSliderTeste.component'
|
|
5
|
+
import { ICircularSliderTeste } from './CircularSliderTeste.interface'
|
|
6
|
+
import React from 'react'
|
|
7
|
+
|
|
8
|
+
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
|
|
9
|
+
export default {
|
|
10
|
+
title: 'Components/CircularSliderTeste',
|
|
11
|
+
component: CircularSliderTeste,
|
|
12
|
+
tags: ['autodocs']
|
|
13
|
+
} as Meta
|
|
14
|
+
|
|
15
|
+
const image = (
|
|
16
|
+
<img
|
|
17
|
+
width="100%"
|
|
18
|
+
height="100%"
|
|
19
|
+
sizes="100vw"
|
|
20
|
+
decoding="async"
|
|
21
|
+
src="/assets/placeholder.png"
|
|
22
|
+
alt="Empty state"
|
|
23
|
+
/>
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
export const Simple: StoryObj<ICircularSliderTeste> = {
|
|
27
|
+
render: args => <div style={{ width: "100%", height: "200dvh" }}><CircularSliderTeste {...args}></CircularSliderTeste></div>,
|
|
28
|
+
args: {
|
|
29
|
+
cta: <Button variant={'secondary'}>Join the Team</Button>,
|
|
30
|
+
content: [
|
|
31
|
+
{
|
|
32
|
+
name: 'My name 1',
|
|
33
|
+
role: 'My role',
|
|
34
|
+
img: image
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'My name 2',
|
|
38
|
+
role: 'My role',
|
|
39
|
+
img: image
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'My name 3',
|
|
43
|
+
role: 'My role',
|
|
44
|
+
img: image
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'My name 4',
|
|
48
|
+
role: 'My role',
|
|
49
|
+
img: image
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'My name 5',
|
|
53
|
+
role: 'My role',
|
|
54
|
+
img: image
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'My name 6',
|
|
58
|
+
role: 'My role',
|
|
59
|
+
img: image
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'My name 7',
|
|
63
|
+
role: 'My role',
|
|
64
|
+
img: image
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'My name 9',
|
|
68
|
+
role: 'My role',
|
|
69
|
+
img: image
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'My name 9',
|
|
73
|
+
role: 'My role',
|
|
74
|
+
img: image
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'My name 10',
|
|
78
|
+
role: 'My role',
|
|
79
|
+
img: image
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'My name 11',
|
|
83
|
+
role: 'My role',
|
|
84
|
+
img: image
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'My name 1§2',
|
|
88
|
+
role: 'My role',
|
|
89
|
+
img: image
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'My name 13',
|
|
93
|
+
role: 'My role',
|
|
94
|
+
img: image
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'My name 14',
|
|
98
|
+
role: 'My role',
|
|
99
|
+
img: image
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'My name 15',
|
|
103
|
+
role: 'My role',
|
|
104
|
+
img: image
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'My name 16',
|
|
108
|
+
role: 'My role',
|
|
109
|
+
img: image
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'My name 17',
|
|
113
|
+
role: 'My role',
|
|
114
|
+
img: image
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'My name 19',
|
|
118
|
+
role: 'My role',
|
|
119
|
+
img: image
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'My name 19',
|
|
123
|
+
role: 'My role',
|
|
124
|
+
img: image
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'My name 20',
|
|
128
|
+
role: 'My role',
|
|
129
|
+
img: image
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
className: "h-100",
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ICircularSliderTeste } from './CircularSliderTeste.interface';
|
|
2
|
+
import { responsiveMedia } from '@/styles/variables';
|
|
3
|
+
import styled from 'styled-components';
|
|
4
|
+
|
|
5
|
+
export const StyledCircularSliderTeste = styled.div<ICircularSliderTeste>`
|
|
6
|
+
position: relative;
|
|
7
|
+
width: 100%;
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
`;
|
|
10
|
+
|
|
11
|
+
export const StyledCircularSliderTesteWrapper = styled.div<ICircularSliderTeste>`
|
|
12
|
+
position: relative;
|
|
13
|
+
display: flex;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
margin: 0 auto;
|
|
16
|
+
margin-right: 0;
|
|
17
|
+
`;
|
|
18
|
+
|
|
19
|
+
export const StyledCircularSliderTesteSlides = styled.div<ICircularSliderTeste>`
|
|
20
|
+
transform-origin: center;
|
|
21
|
+
display: flex;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
align-items: center;
|
|
24
|
+
position: relative;
|
|
25
|
+
z-index: 100;
|
|
26
|
+
transform: rotate(-180deg);
|
|
27
|
+
`;
|
|
28
|
+
export const StyledCircularSliderTesteSlide = styled.div<ICircularSliderTeste>`
|
|
29
|
+
position: absolute;
|
|
30
|
+
transform-origin: center;
|
|
31
|
+
transition: .3s linear all;
|
|
32
|
+
filter: brightness(70%);
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
|
|
35
|
+
& img{
|
|
36
|
+
height: 100%;
|
|
37
|
+
object-fit: cover;
|
|
38
|
+
pointer-events:none;
|
|
39
|
+
filter: grayscale(100%);
|
|
40
|
+
transform: rotate(90deg);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&.active{
|
|
44
|
+
filter: brightness(100%);
|
|
45
|
+
}
|
|
46
|
+
`;
|
|
47
|
+
|
|
48
|
+
export const StyledCircularSliderTesteContent = styled.div<ICircularSliderTeste>`
|
|
49
|
+
width: 50%;
|
|
50
|
+
text-align: center;
|
|
51
|
+
margin: auto;
|
|
52
|
+
|
|
53
|
+
&>div{
|
|
54
|
+
opacity: 0;
|
|
55
|
+
transform: translate(0%, 5%);
|
|
56
|
+
transition: all 0.3s ease;
|
|
57
|
+
}
|
|
58
|
+
&.active{
|
|
59
|
+
&>div{
|
|
60
|
+
opacity: 1;
|
|
61
|
+
transform: translate(0%, 0%);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
65
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './CircularSliderTeste.component'
|