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.
Files changed (41) hide show
  1. package/dist/cjs/index.js +5 -5
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/components/atoms/Marquee/Marquee.component.d.ts +1 -1
  4. package/dist/cjs/types/components/atoms/Marquee/Marquee.interface.d.ts +11 -5
  5. package/dist/cjs/types/components/molecules/ProductCard/ProductCard.component.d.ts +1 -1
  6. package/dist/cjs/types/components/molecules/ProductCard/ProductCard.interface.d.ts +1 -0
  7. package/dist/cjs/types/components/organisms/CircularSliderTeste/CircularSliderTeste.component.d.ts +4 -0
  8. package/dist/cjs/types/components/organisms/CircularSliderTeste/CircularSliderTeste.interface.d.ts +12 -0
  9. package/dist/cjs/types/components/organisms/CircularSliderTeste/CircularSliderTeste.theme.d.ts +7 -0
  10. package/dist/cjs/types/components/organisms/CircularSliderTeste/index.d.ts +1 -0
  11. package/dist/esm/index.js +5 -5
  12. package/dist/esm/index.js.map +1 -1
  13. package/dist/esm/types/components/atoms/Marquee/Marquee.component.d.ts +1 -1
  14. package/dist/esm/types/components/atoms/Marquee/Marquee.interface.d.ts +11 -5
  15. package/dist/esm/types/components/molecules/ProductCard/ProductCard.component.d.ts +1 -1
  16. package/dist/esm/types/components/molecules/ProductCard/ProductCard.interface.d.ts +1 -0
  17. package/dist/esm/types/components/organisms/CircularSliderTeste/CircularSliderTeste.component.d.ts +4 -0
  18. package/dist/esm/types/components/organisms/CircularSliderTeste/CircularSliderTeste.interface.d.ts +12 -0
  19. package/dist/esm/types/components/organisms/CircularSliderTeste/CircularSliderTeste.theme.d.ts +7 -0
  20. package/dist/esm/types/components/organisms/CircularSliderTeste/index.d.ts +1 -0
  21. package/dist/types.d.ts +14 -7
  22. package/package.json +1 -1
  23. package/src/components/atoms/FormField/FormField.theme.tsx +2 -0
  24. package/src/components/atoms/Marquee/Marquee.component.tsx +12 -7
  25. package/src/components/atoms/Marquee/Marquee.interface.ts +12 -5
  26. package/src/components/atoms/Marquee/Marquee.stories.tsx +3 -1
  27. package/src/components/atoms/Marquee/Marquee.theme.ts +35 -27
  28. package/src/components/atoms/RichText/RichText.theme.ts +2 -0
  29. package/src/components/molecules/BlogCard/BlogCard.component.tsx +2 -2
  30. package/src/components/molecules/BlogCard/BlogCard.theme.ts +3 -1
  31. package/src/components/molecules/NewsCard/NewsCard.component.tsx +8 -7
  32. package/src/components/molecules/NewsCard/NewsCard.theme.ts +7 -3
  33. package/src/components/molecules/ProductCard/ProductCard.component.tsx +5 -2
  34. package/src/components/molecules/ProductCard/ProductCard.interface.ts +1 -0
  35. package/src/components/organisms/CircularSlider/CircularSlider.component.tsx +5 -3
  36. package/src/components/organisms/CircularSlider/CircularSlider.theme.ts +7 -1
  37. package/src/components/organisms/CircularSliderTeste/CircularSliderTeste.component.tsx +190 -0
  38. package/src/components/organisms/CircularSliderTeste/CircularSliderTeste.interface.ts +13 -0
  39. package/src/components/organisms/CircularSliderTeste/CircularSliderTeste.stories.tsx +134 -0
  40. package/src/components/organisms/CircularSliderTeste/CircularSliderTeste.theme.ts +65 -0
  41. 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,13 @@
1
+ import { CSSProperties } from 'react';
2
+
3
+ export type ICircularSliderTeste = {
4
+ id?: string;
5
+ className?: string;
6
+ style?: CSSProperties;
7
+ content?: {
8
+ name?: string,
9
+ role?: string,
10
+ img?: React.ReactNode
11
+ }[],
12
+ cta?: React.ReactNode
13
+ }
@@ -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'