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.
Files changed (268) hide show
  1. package/.babelrc.json +25 -25
  2. package/.editorconfig +12 -12
  3. package/.storybook/main.ts +58 -58
  4. package/.storybook/preview.ts +26 -26
  5. package/README.md +30 -30
  6. package/chromatic.config.json +6 -6
  7. package/dist/cjs/assets/components/quotes.svg +3 -3
  8. package/dist/esm/assets/components/quotes.svg +3 -3
  9. package/dist/public/assets/components/quotes.svg +3 -3
  10. package/dist/public/assets/empty-state.svg +28 -28
  11. package/dist/public/fonts/Nichrome/mdnichrome-bold-webfont.svg +241 -241
  12. package/dist/public/fonts/Nichrome/mdnichrome-regular-webfont.svg +241 -241
  13. package/dist/public/fonts/miewfont/miewfont.svg +38 -38
  14. package/package.json +103 -103
  15. package/prettier.config.js +7 -7
  16. package/public/assets/components/quotes.svg +3 -3
  17. package/public/assets/empty-state.svg +28 -28
  18. package/public/fonts/Nichrome/mdnichrome-bold-webfont.svg +241 -241
  19. package/public/fonts/Nichrome/mdnichrome-regular-webfont.svg +241 -241
  20. package/public/fonts/miewfont/miewfont.svg +38 -38
  21. package/rollup.config.js +98 -98
  22. package/src/components/atoms/Button/Button.component.tsx +60 -60
  23. package/src/components/atoms/Button/Button.interface.ts +29 -29
  24. package/src/components/atoms/Button/Button.stories.tsx +65 -65
  25. package/src/components/atoms/Button/Button.theme.ts +180 -180
  26. package/src/components/atoms/Button/index.ts +1 -1
  27. package/src/components/atoms/CardMarquee/CardMarquee.component.tsx +24 -24
  28. package/src/components/atoms/CardMarquee/CardMarquee.interface.ts +15 -15
  29. package/src/components/atoms/CardMarquee/CardMarquee.stories.tsx +21 -21
  30. package/src/components/atoms/CardMarquee/CardMarquee.theme.ts +48 -48
  31. package/src/components/atoms/CardMarquee/index.ts +1 -1
  32. package/src/components/atoms/Chip/Chip.component.tsx +30 -30
  33. package/src/components/atoms/Chip/Chip.interface.ts +14 -14
  34. package/src/components/atoms/Chip/Chip.stories.tsx +42 -42
  35. package/src/components/atoms/Chip/Chip.theme.ts +57 -57
  36. package/src/components/atoms/Chip/index.ts +1 -1
  37. package/src/components/atoms/CloseButton/CloseButton.component.tsx +17 -17
  38. package/src/components/atoms/CloseButton/CloseButton.interface.ts +9 -9
  39. package/src/components/atoms/CloseButton/CloseButton.stories.tsx +24 -24
  40. package/src/components/atoms/CloseButton/CloseButton.theme.ts +66 -66
  41. package/src/components/atoms/CloseButton/index.ts +1 -1
  42. package/src/components/atoms/Counter/Counter.component.tsx +99 -99
  43. package/src/components/atoms/Counter/Counter.interface.ts +10 -10
  44. package/src/components/atoms/Counter/Counter.stories.tsx +29 -29
  45. package/src/components/atoms/Counter/Counter.theme.ts +27 -27
  46. package/src/components/atoms/Counter/index.ts +1 -1
  47. package/src/components/atoms/EmptyState/EmptyState.component.tsx +27 -27
  48. package/src/components/atoms/EmptyState/EmptyState.interface.ts +10 -10
  49. package/src/components/atoms/EmptyState/EmptyState.stories.tsx +34 -34
  50. package/src/components/atoms/EmptyState/EmptyState.theme.ts +27 -27
  51. package/src/components/atoms/EmptyState/index.ts +1 -1
  52. package/src/components/atoms/Flex/Flex.component.tsx +30 -30
  53. package/src/components/atoms/Flex/Flex.interface.ts +24 -24
  54. package/src/components/atoms/Flex/Flex.theme.ts +12 -12
  55. package/src/components/atoms/Flex/index.ts +1 -1
  56. package/src/components/atoms/FlexGrid/FlexGrid.component.tsx +62 -62
  57. package/src/components/atoms/FlexGrid/FlexGrid.interface.ts +55 -55
  58. package/src/components/atoms/FlexGrid/FlexGrid.stories.tsx +59 -59
  59. package/src/components/atoms/FlexGrid/FlexGrid.theme.ts +82 -82
  60. package/src/components/atoms/FlexGrid/index.ts +1 -1
  61. package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.component.tsx +24 -24
  62. package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.interface.tsx +6 -6
  63. package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.theme.ts +134 -134
  64. package/src/components/atoms/FormField/CheckRadioField/index.ts +1 -1
  65. package/src/components/atoms/FormField/FormField.component.tsx +37 -37
  66. package/src/components/atoms/FormField/FormField.interface.ts +10 -10
  67. package/src/components/atoms/FormField/FormField.stories.tsx +499 -499
  68. package/src/components/atoms/FormField/FormField.theme.tsx +136 -136
  69. package/src/components/atoms/FormField/index.ts +1 -1
  70. package/src/components/atoms/Heading/Heading.component.tsx +18 -18
  71. package/src/components/atoms/Heading/Heading.interface.tsx +21 -21
  72. package/src/components/atoms/Heading/Heading.theme.ts +17 -17
  73. package/src/components/atoms/Heading/index.ts +1 -1
  74. package/src/components/atoms/Icon/Icon.component.tsx +19 -19
  75. package/src/components/atoms/Icon/Icon.interface.ts +8 -8
  76. package/src/components/atoms/Icon/Icon.stories.tsx +26 -26
  77. package/src/components/atoms/Icon/Icon.theme.ts +115 -115
  78. package/src/components/atoms/Icon/index.ts +1 -1
  79. package/src/components/atoms/ImageWrapper/ImageWrapper.component.tsx +42 -42
  80. package/src/components/atoms/ImageWrapper/ImageWrapper.interface.ts +16 -16
  81. package/src/components/atoms/ImageWrapper/ImageWrapper.stories.tsx +27 -27
  82. package/src/components/atoms/ImageWrapper/ImageWrapper.theme.ts +50 -50
  83. package/src/components/atoms/ImageWrapper/index.ts +1 -1
  84. package/src/components/atoms/LegalLinks/LegalLinks.component.tsx +35 -35
  85. package/src/components/atoms/LegalLinks/LegalLinks.interface.ts +12 -12
  86. package/src/components/atoms/LegalLinks/LegalLinks.stories.tsx +43 -43
  87. package/src/components/atoms/LegalLinks/LegalLinks.theme.ts +33 -33
  88. package/src/components/atoms/LegalLinks/index.ts +1 -1
  89. package/src/components/atoms/Loader/Loader.component.tsx +26 -26
  90. package/src/components/atoms/Loader/Loader.interface.ts +10 -10
  91. package/src/components/atoms/Loader/Loader.stories.tsx +33 -33
  92. package/src/components/atoms/Loader/Loader.theme.ts +51 -51
  93. package/src/components/atoms/Loader/index.ts +1 -1
  94. package/src/components/atoms/Marquee/Marquee.component.tsx +32 -32
  95. package/src/components/atoms/Marquee/Marquee.interface.ts +10 -10
  96. package/src/components/atoms/Marquee/Marquee.stories.tsx +20 -20
  97. package/src/components/atoms/Marquee/Marquee.theme.ts +40 -40
  98. package/src/components/atoms/Marquee/index.ts +1 -1
  99. package/src/components/atoms/Quote/Quote.component.tsx +29 -29
  100. package/src/components/atoms/Quote/Quote.interface.ts +10 -10
  101. package/src/components/atoms/Quote/Quote.stories.tsx +25 -25
  102. package/src/components/atoms/Quote/Quote.theme.ts +26 -26
  103. package/src/components/atoms/Quote/index.ts +1 -1
  104. package/src/components/atoms/RichText/RichText.component.tsx +32 -32
  105. package/src/components/atoms/RichText/RichText.interface.ts +11 -11
  106. package/src/components/atoms/RichText/RichText.stories.tsx +73 -73
  107. package/src/components/atoms/RichText/RichText.theme.ts +34 -34
  108. package/src/components/atoms/RichText/index.ts +1 -1
  109. package/src/components/atoms/ScrollingNav/ScrollingNav.component.tsx +18 -18
  110. package/src/components/atoms/ScrollingNav/ScrollingNav.interface.ts +8 -8
  111. package/src/components/atoms/ScrollingNav/ScrollingNav.stories.tsx +44 -44
  112. package/src/components/atoms/ScrollingNav/ScrollingNav.theme.ts +58 -58
  113. package/src/components/atoms/ScrollingNav/index.ts +1 -1
  114. package/src/components/atoms/Separator/Separator.component.tsx +19 -19
  115. package/src/components/atoms/Separator/Separator.interface.tsx +10 -10
  116. package/src/components/atoms/Separator/Separator.stories.tsx +29 -29
  117. package/src/components/atoms/Separator/Separator.theme.ts +9 -9
  118. package/src/components/atoms/Separator/index.ts +1 -1
  119. package/src/components/atoms/SocialLinks/SocialLinks.component.tsx +42 -42
  120. package/src/components/atoms/SocialLinks/SocialLinks.interface.ts +8 -8
  121. package/src/components/atoms/SocialLinks/SocialLinks.stories.tsx +48 -48
  122. package/src/components/atoms/SocialLinks/SocialLinks.theme.ts +80 -80
  123. package/src/components/atoms/SocialLinks/index.ts +1 -1
  124. package/src/components/atoms/Spacer/Spacer.component.tsx +34 -34
  125. package/src/components/atoms/Spacer/Spacer.interface.ts +24 -24
  126. package/src/components/atoms/Spacer/Spacer.stories.tsx +99 -99
  127. package/src/components/atoms/Spacer/Spacer.theme.ts +33 -33
  128. package/src/components/atoms/Spacer/index.ts +1 -1
  129. package/src/components/atoms/Video/Video.component.tsx +116 -116
  130. package/src/components/atoms/Video/Video.interface.ts +13 -13
  131. package/src/components/atoms/Video/Video.stories.tsx +37 -37
  132. package/src/components/atoms/Video/Video.theme.ts +44 -44
  133. package/src/components/atoms/Video/index.ts +1 -1
  134. package/src/components/atoms/VideoEmbed/VideoEmbed.component.tsx +109 -109
  135. package/src/components/atoms/VideoEmbed/VideoEmbed.interface.ts +13 -13
  136. package/src/components/atoms/VideoEmbed/VideoEmbed.stories.tsx +23 -23
  137. package/src/components/atoms/VideoEmbed/VideoEmbed.theme.ts +45 -45
  138. package/src/components/atoms/VideoEmbed/index.ts +1 -1
  139. package/src/components/common/PortalComponent/PortalComponent.tsx +48 -48
  140. package/src/components/common/PortalComponent/index.ts +1 -1
  141. package/src/components/molecules/Accordion/Accordion.component.tsx +58 -58
  142. package/src/components/molecules/Accordion/Accordion.interface.ts +15 -15
  143. package/src/components/molecules/Accordion/Accordion.stories.tsx +100 -100
  144. package/src/components/molecules/Accordion/Accordion.theme.ts +93 -93
  145. package/src/components/molecules/Accordion/index.ts +1 -1
  146. package/src/components/molecules/BlogCard/BlogCard.component.tsx +48 -48
  147. package/src/components/molecules/BlogCard/BlogCard.interface.ts +10 -10
  148. package/src/components/molecules/BlogCard/BlogCard.stories.tsx +37 -37
  149. package/src/components/molecules/BlogCard/BlogCard.theme.ts +41 -41
  150. package/src/components/molecules/BlogCard/index.ts +1 -1
  151. package/src/components/molecules/Card/Card.component.tsx +15 -15
  152. package/src/components/molecules/Card/Card.interface.ts +11 -11
  153. package/src/components/molecules/Card/Card.theme.ts +54 -54
  154. package/src/components/molecules/Card/index.ts +1 -1
  155. package/src/components/molecules/CareersCard/CareersCard.component.tsx +27 -27
  156. package/src/components/molecules/CareersCard/CareersCard.interface.ts +7 -7
  157. package/src/components/molecules/CareersCard/CareersCard.stories.tsx +30 -30
  158. package/src/components/molecules/CareersCard/CareersCard.theme.ts +13 -13
  159. package/src/components/molecules/CareersCard/index.ts +1 -1
  160. package/src/components/molecules/Dropdown/Dropdown.component.tsx +67 -67
  161. package/src/components/molecules/Dropdown/Dropdown.interface.ts +26 -26
  162. package/src/components/molecules/Dropdown/Dropdown.stories.tsx +54 -54
  163. package/src/components/molecules/Dropdown/Dropdown.theme.ts +69 -69
  164. package/src/components/molecules/Dropdown/index.ts +1 -1
  165. package/src/components/molecules/EventsCard/EventsCard.component.tsx +40 -40
  166. package/src/components/molecules/EventsCard/EventsCard.interface.ts +9 -9
  167. package/src/components/molecules/EventsCard/EventsCard.stories.tsx +37 -37
  168. package/src/components/molecules/EventsCard/EventsCard.theme.ts +33 -33
  169. package/src/components/molecules/EventsCard/index.ts +1 -1
  170. package/src/components/molecules/IconBox/IconBox.component.tsx +29 -29
  171. package/src/components/molecules/IconBox/IconBox.interface.tsx +10 -10
  172. package/src/components/molecules/IconBox/IconBox.stories.tsx +23 -23
  173. package/src/components/molecules/IconBox/IconBox.theme.ts +25 -25
  174. package/src/components/molecules/IconBox/index.ts +1 -1
  175. package/src/components/molecules/IconTitle/IconTitle.component.tsx +24 -24
  176. package/src/components/molecules/IconTitle/IconTitle.interface.tsx +10 -10
  177. package/src/components/molecules/IconTitle/IconTitle.stories.tsx +49 -49
  178. package/src/components/molecules/IconTitle/IconTitle.theme.ts +10 -10
  179. package/src/components/molecules/IconTitle/index.ts +1 -1
  180. package/src/components/molecules/LicenseCard/LicenseCard.component.tsx +27 -27
  181. package/src/components/molecules/LicenseCard/LicenseCard.interface.ts +6 -6
  182. package/src/components/molecules/LicenseCard/LicenseCard.stories.tsx +42 -42
  183. package/src/components/molecules/LicenseCard/LicenseCard.theme.ts +28 -28
  184. package/src/components/molecules/LicenseCard/index.ts +1 -1
  185. package/src/components/molecules/LogosCard/LogosCard.component.tsx +14 -14
  186. package/src/components/molecules/LogosCard/LogosCard.interface.ts +8 -8
  187. package/src/components/molecules/LogosCard/LogosCard.stories.tsx +38 -38
  188. package/src/components/molecules/LogosCard/LogosCard.theme.ts +19 -19
  189. package/src/components/molecules/LogosCard/index.ts +1 -1
  190. package/src/components/molecules/Modal/Modal.component.tsx +70 -70
  191. package/src/components/molecules/Modal/Modal.interface.ts +11 -11
  192. package/src/components/molecules/Modal/Modal.stories.tsx +57 -57
  193. package/src/components/molecules/Modal/Modal.theme.ts +55 -55
  194. package/src/components/molecules/Modal/index.ts +1 -1
  195. package/src/components/molecules/NewsCard/NewsCard.component.tsx +55 -55
  196. package/src/components/molecules/NewsCard/NewsCard.interface.ts +9 -9
  197. package/src/components/molecules/NewsCard/NewsCard.stories.tsx +44 -44
  198. package/src/components/molecules/NewsCard/NewsCard.theme.ts +77 -77
  199. package/src/components/molecules/NewsCard/index.ts +1 -1
  200. package/src/components/molecules/OffCanvas/OffCanvas.component.tsx +55 -55
  201. package/src/components/molecules/OffCanvas/OffCanvas.interface.ts +12 -12
  202. package/src/components/molecules/OffCanvas/OffCanvas.stories.tsx +55 -55
  203. package/src/components/molecules/OffCanvas/OffCanvas.theme.ts +50 -50
  204. package/src/components/molecules/OffCanvas/index.ts +1 -1
  205. package/src/components/molecules/ProductCard/ProductCard.component.tsx +60 -60
  206. package/src/components/molecules/ProductCard/ProductCard.interface.ts +7 -7
  207. package/src/components/molecules/ProductCard/ProductCard.stories.tsx +42 -42
  208. package/src/components/molecules/ProductCard/ProductCard.theme.ts +26 -26
  209. package/src/components/molecules/ProductCard/index.ts +1 -1
  210. package/src/components/molecules/ShareModal/ShareModal.component.tsx +167 -167
  211. package/src/components/molecules/ShareModal/ShareModal.interface.ts +9 -9
  212. package/src/components/molecules/ShareModal/ShareModal.stories.tsx +33 -33
  213. package/src/components/molecules/ShareModal/ShareModal.theme.ts +103 -103
  214. package/src/components/molecules/ShareModal/index.ts +1 -1
  215. package/src/components/molecules/TeamCard/TeamCard.component.tsx +31 -31
  216. package/src/components/molecules/TeamCard/TeamCard.interface.ts +7 -7
  217. package/src/components/molecules/TeamCard/TeamCard.stories.tsx +33 -33
  218. package/src/components/molecules/TeamCard/TeamCard.theme.ts +12 -12
  219. package/src/components/molecules/TeamCard/index.ts +1 -1
  220. package/src/components/organisms/CircularSlider/CircularSlider.component.tsx +231 -231
  221. package/src/components/organisms/CircularSlider/CircularSlider.interface.ts +13 -13
  222. package/src/components/organisms/CircularSlider/CircularSlider.stories.tsx +138 -138
  223. package/src/components/organisms/CircularSlider/CircularSlider.theme.ts +126 -126
  224. package/src/components/organisms/CircularSlider/index.ts +1 -1
  225. package/src/components/organisms/Cover/Cover.component.tsx +46 -46
  226. package/src/components/organisms/Cover/Cover.interface.ts +14 -14
  227. package/src/components/organisms/Cover/Cover.stories.tsx +97 -97
  228. package/src/components/organisms/Cover/Cover.theme.ts +49 -49
  229. package/src/components/organisms/Cover/index.ts +1 -1
  230. package/src/components/organisms/ProductsSlider/ProductsSlider.component.tsx +216 -216
  231. package/src/components/organisms/ProductsSlider/ProductsSlider.interface.ts +12 -12
  232. package/src/components/organisms/ProductsSlider/ProductsSlider.stories.tsx +132 -132
  233. package/src/components/organisms/ProductsSlider/ProductsSlider.theme.ts +77 -77
  234. package/src/components/organisms/ProductsSlider/index.ts +1 -1
  235. package/src/components/organisms/ProductsSlider//306/222.js +164 -164
  236. package/src/components/organisms/Slider/Slider.component.tsx +154 -154
  237. package/src/components/organisms/Slider/Slider.interface.ts +19 -19
  238. package/src/components/organisms/Slider/Slider.stories.tsx +146 -146
  239. package/src/components/organisms/Slider/Slider.theme.ts +145 -145
  240. package/src/components/organisms/Slider/Slider.utils.tsx +19 -19
  241. package/src/components/organisms/Slider/index.ts +1 -1
  242. package/src/components/organisms/Tabs/Tabs.component.tsx +88 -88
  243. package/src/components/organisms/Tabs/Tabs.interface.ts +18 -18
  244. package/src/components/organisms/Tabs/Tabs.stories.tsx +118 -118
  245. package/src/components/organisms/Tabs/Tabs.theme.ts +115 -115
  246. package/src/components/organisms/Tabs/index.ts +1 -1
  247. package/src/helpers/clickOutsideToClose.tsx +17 -17
  248. package/src/helpers/events.ts +9 -9
  249. package/src/helpers/exportCSS.tsx +27 -27
  250. package/src/helpers/getIcons.ts +5 -5
  251. package/src/helpers/isTouchDevice.tsx +11 -11
  252. package/src/helpers/useInterval.ts +25 -25
  253. package/src/helpers/useMediaMatch.tsx +26 -26
  254. package/src/helpers/uuid.ts +5 -5
  255. package/src/iconsList.json +1 -1
  256. package/src/index.ts +68 -68
  257. package/src/reportWebVitals.js +13 -13
  258. package/src/stories/Documentation/Colors.stories.tsx +46 -46
  259. package/src/stories/Documentation/Headings.stories.tsx +24 -24
  260. package/src/stories/Documentation/Icons.stories.tsx +73 -73
  261. package/src/stories/Documentation/JWT.stories.tsx +60 -60
  262. package/src/stories/Documentation/Utilities.stories.tsx +65 -65
  263. package/src/styles/Global.ts +301 -301
  264. package/src/styles/grid.ts +70 -70
  265. package/src/styles/reset.ts +47 -47
  266. package/src/styles/utilities.ts +374 -374
  267. package/src/styles/variables.ts +180 -180
  268. package/tsconfig.json +31 -31
@@ -1,164 +1,164 @@
1
- import React, { useEffect, useMemo, useRef, useState } from 'react'
2
- import {
3
- StyledProductsSlider,
4
- StyledProductsSliderContent,
5
- StyledProductsSliderSlide,
6
- StyledProductsSliderSlides,
7
- StyledProductsSliderWrapper
8
- } from './ProductsSlider.theme'
9
-
10
- import Heading from '@/components/atoms/Heading/Heading.component';
11
- import { IProductsSlider } from './ProductsSlider.interface'
12
- import ProductCard from '@/components/molecules/ProductCard/ProductCard.component';
13
- import { debounce } from '@/helpers/events';
14
- import useMediaMatch from '@/helpers/useMediaMatch';
15
-
16
- const ProductsSlider = ({
17
- content,
18
- style,
19
- className,
20
- }: IProductsSlider) => {
21
-
22
- const [activeElement, setActiveElement] = useState(content && content[0]);
23
- const slider = useRef<HTMLDivElement>();
24
- const wrapper = useRef<HTMLDivElement>();
25
- const slidesHolder = useRef<HTMLDivElement>();
26
- const contentHolder = useRef<HTMLDivElement>();
27
- const isMobile = useMediaMatch();
28
-
29
-
30
- //force 26 items
31
- const newContent = useMemo(() => {
32
- if (isMobile) {
33
- return content;
34
- } else if (content && content.length < 26) {
35
- let counter = 0;
36
- for (let i = content.length; i <= 26; i++) {
37
- content[i] = content[counter];
38
- counter++;
39
- }
40
- return content;
41
- }
42
- }, [isMobile, content])
43
-
44
- useEffect(() => {
45
- const _options = {
46
- type: "equal", // compact, equal
47
- size: 1, // 0, 1
48
- reflection: 0.6, // 0, 1
49
- rotateY: 0, // 0, 360
50
- reverse: false,
51
- shiftX: 0,
52
- shiftY: 0,
53
- }
54
-
55
- const render = () => {
56
- if (!slidesHolder.current) return //bail out;
57
-
58
- const targetBound = slidesHolder?.current.getBoundingClientRect();
59
- const childItems = Array.prototype.slice.call(slidesHolder?.current?.children);
60
-
61
- let coordinates = equalCoordinates(childItems.length, targetBound.width / 2, targetBound.height, targetBound.width / 2, targetBound.height)
62
-
63
- childItems.forEach((child, index) => {
64
- if (coordinates[index]) {
65
- const left = coordinates[index][0] - (child.clientWidth / 2) + _options.shiftX;
66
- const top = coordinates[index][1] - (child.clientHeight / 2) + _options.shiftY;
67
- child.style.left = left + "px";
68
- child.style.top = top + "px";
69
- }
70
- })
71
- }
72
-
73
- const _computeDpt = (r1, r2, theta, rotateY = 0) => {
74
- const dpt_sin = Math.pow(r1 * Math.sin(theta + rotateY), 2)
75
- const dpt_cos = Math.pow(r2 * Math.cos(theta + rotateY), 2)
76
- return Math.sqrt(dpt_sin + dpt_cos)
77
- }
78
-
79
- const equalCoordinates = (n, r1, r2, centerX, centerY) => {
80
- // type options
81
- let reflection = -(_options.reflection);
82
-
83
- let deltaTheta = 0.001
84
-
85
- let coordinates: number[][] = [];
86
- let theta = 0;
87
-
88
- const twoPi = (Math.PI * 2 * _options.size);
89
- const numIntegrals = Math.round(twoPi / deltaTheta);
90
-
91
- let circ = 0;
92
- let dpt = 0;
93
-
94
- /* integrate over the ellipse to get the circumference */
95
- for (let i = 1; i < numIntegrals; i++) {
96
- theta += i * deltaTheta;
97
- dpt = _computeDpt(r1, r2, theta);
98
- circ += dpt;
99
- }
100
-
101
- let nextPoint = 0;
102
- let run = 0;
103
- theta = 0;
104
-
105
- const rotateY = (Math.PI / 2 * (_options.rotateY * 4 / 360));
106
- for (let i = 0; i < numIntegrals; i++) {
107
- theta += deltaTheta;
108
- let subIntegral = n * run / circ;
109
- if (subIntegral >= nextPoint) {
110
- let x: number = Math.floor((centerX - r1 * Math.cos(theta + rotateY)) * 100) / 100;
111
- let y: number = Math.floor((centerY + r2 * Math.sin(theta + rotateY) * reflection) * 100) / 100;
112
- coordinates.push([x, y]);
113
-
114
- nextPoint++;
115
- }
116
-
117
- run += _computeDpt(r1, r2, theta, rotateY);
118
- }
119
-
120
- return coordinates;
121
- }
122
-
123
- render();
124
- window.addEventListener("resize", render);
125
-
126
- return () => {
127
- window.removeEventListener('resize', render)
128
- }
129
- }, [isMobile])
130
-
131
- if (!content) return <></>
132
-
133
- return (
134
- <StyledProductsSlider ref={slider as any} className={className} style={style}>
135
- <StyledProductsSliderWrapper ref={wrapper as any}>
136
- <StyledProductsSliderSlides ref={slidesHolder as any}>
137
- {newContent?.map((item, index) => {
138
- return (
139
- <StyledProductsSliderSlide key={`ProductCard-${index}`}>
140
- <ProductCard
141
- imageElement={item.imageElement}
142
- title={item.title}
143
- description={isMobile ? item?.description : ""}
144
- />
145
- </StyledProductsSliderSlide>
146
- )
147
- })}
148
- </StyledProductsSliderSlides>
149
- </StyledProductsSliderWrapper>
150
- {!isMobile && (
151
- <StyledProductsSliderContent ref={contentHolder as any}>
152
- <Heading tag="h5" size="h5">
153
- <strong>{activeElement?.title}</strong>
154
- <br />
155
- {activeElement?.description}
156
- </Heading>
157
- </StyledProductsSliderContent>
158
- )}
159
- </StyledProductsSlider>
160
-
161
- )
162
- }
163
-
164
- export default ProductsSlider
1
+ import React, { useEffect, useMemo, useRef, useState } from 'react'
2
+ import {
3
+ StyledProductsSlider,
4
+ StyledProductsSliderContent,
5
+ StyledProductsSliderSlide,
6
+ StyledProductsSliderSlides,
7
+ StyledProductsSliderWrapper
8
+ } from './ProductsSlider.theme'
9
+
10
+ import Heading from '@/components/atoms/Heading/Heading.component';
11
+ import { IProductsSlider } from './ProductsSlider.interface'
12
+ import ProductCard from '@/components/molecules/ProductCard/ProductCard.component';
13
+ import { debounce } from '@/helpers/events';
14
+ import useMediaMatch from '@/helpers/useMediaMatch';
15
+
16
+ const ProductsSlider = ({
17
+ content,
18
+ style,
19
+ className,
20
+ }: IProductsSlider) => {
21
+
22
+ const [activeElement, setActiveElement] = useState(content && content[0]);
23
+ const slider = useRef<HTMLDivElement>();
24
+ const wrapper = useRef<HTMLDivElement>();
25
+ const slidesHolder = useRef<HTMLDivElement>();
26
+ const contentHolder = useRef<HTMLDivElement>();
27
+ const isMobile = useMediaMatch();
28
+
29
+
30
+ //force 26 items
31
+ const newContent = useMemo(() => {
32
+ if (isMobile) {
33
+ return content;
34
+ } else if (content && content.length < 26) {
35
+ let counter = 0;
36
+ for (let i = content.length; i <= 26; i++) {
37
+ content[i] = content[counter];
38
+ counter++;
39
+ }
40
+ return content;
41
+ }
42
+ }, [isMobile, content])
43
+
44
+ useEffect(() => {
45
+ const _options = {
46
+ type: "equal", // compact, equal
47
+ size: 1, // 0, 1
48
+ reflection: 0.6, // 0, 1
49
+ rotateY: 0, // 0, 360
50
+ reverse: false,
51
+ shiftX: 0,
52
+ shiftY: 0,
53
+ }
54
+
55
+ const render = () => {
56
+ if (!slidesHolder.current) return //bail out;
57
+
58
+ const targetBound = slidesHolder?.current.getBoundingClientRect();
59
+ const childItems = Array.prototype.slice.call(slidesHolder?.current?.children);
60
+
61
+ let coordinates = equalCoordinates(childItems.length, targetBound.width / 2, targetBound.height, targetBound.width / 2, targetBound.height)
62
+
63
+ childItems.forEach((child, index) => {
64
+ if (coordinates[index]) {
65
+ const left = coordinates[index][0] - (child.clientWidth / 2) + _options.shiftX;
66
+ const top = coordinates[index][1] - (child.clientHeight / 2) + _options.shiftY;
67
+ child.style.left = left + "px";
68
+ child.style.top = top + "px";
69
+ }
70
+ })
71
+ }
72
+
73
+ const _computeDpt = (r1, r2, theta, rotateY = 0) => {
74
+ const dpt_sin = Math.pow(r1 * Math.sin(theta + rotateY), 2)
75
+ const dpt_cos = Math.pow(r2 * Math.cos(theta + rotateY), 2)
76
+ return Math.sqrt(dpt_sin + dpt_cos)
77
+ }
78
+
79
+ const equalCoordinates = (n, r1, r2, centerX, centerY) => {
80
+ // type options
81
+ let reflection = -(_options.reflection);
82
+
83
+ let deltaTheta = 0.001
84
+
85
+ let coordinates: number[][] = [];
86
+ let theta = 0;
87
+
88
+ const twoPi = (Math.PI * 2 * _options.size);
89
+ const numIntegrals = Math.round(twoPi / deltaTheta);
90
+
91
+ let circ = 0;
92
+ let dpt = 0;
93
+
94
+ /* integrate over the ellipse to get the circumference */
95
+ for (let i = 1; i < numIntegrals; i++) {
96
+ theta += i * deltaTheta;
97
+ dpt = _computeDpt(r1, r2, theta);
98
+ circ += dpt;
99
+ }
100
+
101
+ let nextPoint = 0;
102
+ let run = 0;
103
+ theta = 0;
104
+
105
+ const rotateY = (Math.PI / 2 * (_options.rotateY * 4 / 360));
106
+ for (let i = 0; i < numIntegrals; i++) {
107
+ theta += deltaTheta;
108
+ let subIntegral = n * run / circ;
109
+ if (subIntegral >= nextPoint) {
110
+ let x: number = Math.floor((centerX - r1 * Math.cos(theta + rotateY)) * 100) / 100;
111
+ let y: number = Math.floor((centerY + r2 * Math.sin(theta + rotateY) * reflection) * 100) / 100;
112
+ coordinates.push([x, y]);
113
+
114
+ nextPoint++;
115
+ }
116
+
117
+ run += _computeDpt(r1, r2, theta, rotateY);
118
+ }
119
+
120
+ return coordinates;
121
+ }
122
+
123
+ render();
124
+ window.addEventListener("resize", render);
125
+
126
+ return () => {
127
+ window.removeEventListener('resize', render)
128
+ }
129
+ }, [isMobile])
130
+
131
+ if (!content) return <></>
132
+
133
+ return (
134
+ <StyledProductsSlider ref={slider as any} className={className} style={style}>
135
+ <StyledProductsSliderWrapper ref={wrapper as any}>
136
+ <StyledProductsSliderSlides ref={slidesHolder as any}>
137
+ {newContent?.map((item, index) => {
138
+ return (
139
+ <StyledProductsSliderSlide key={`ProductCard-${index}`}>
140
+ <ProductCard
141
+ imageElement={item.imageElement}
142
+ title={item.title}
143
+ description={isMobile ? item?.description : ""}
144
+ />
145
+ </StyledProductsSliderSlide>
146
+ )
147
+ })}
148
+ </StyledProductsSliderSlides>
149
+ </StyledProductsSliderWrapper>
150
+ {!isMobile && (
151
+ <StyledProductsSliderContent ref={contentHolder as any}>
152
+ <Heading tag="h5" size="h5">
153
+ <strong>{activeElement?.title}</strong>
154
+ <br />
155
+ {activeElement?.description}
156
+ </Heading>
157
+ </StyledProductsSliderContent>
158
+ )}
159
+ </StyledProductsSlider>
160
+
161
+ )
162
+ }
163
+
164
+ export default ProductsSlider
@@ -1,154 +1,154 @@
1
- import React, { useEffect } from 'react'
2
-
3
- import Button from '@/components/atoms/Button/Button.component'
4
- import { ISlider } from './Slider.interface'
5
- import Icon from '@/components/atoms/Icon/Icon.component'
6
- import { StyledSlider } from './Slider.theme'
7
- import isTouchDevice from '@/helpers/isTouchDevice'
8
- import { useBlazeSlider } from './Slider.utils'
9
-
10
- const Slider = ({
11
- arrows,
12
- dots,
13
- slidesToShow,
14
- slidesToScroll,
15
- infinite,
16
- autoplay,
17
- spacing,
18
- mediaQueries,
19
- mobileOnly,
20
- className,
21
- style,
22
- children,
23
- onSlide,
24
- ...props
25
- }: ISlider) => {
26
- let responsive: any = []
27
- let responsiveCSS: string = ''
28
- let elRef: any = null
29
- let sliderRef: any = null
30
-
31
- const isMobile = isTouchDevice();
32
-
33
- const setConfig = () => {
34
- if (sliderRef?.current) sliderRef.current.destroy()
35
- responsiveCSS = `
36
- --slides-to-show: ${slidesToShow ? slidesToShow : 4} !important;
37
- --slide-gap: ${spacing ? spacing : '1rem'} !important;
38
- `
39
-
40
- if (mediaQueries) {
41
- const responsiveKeys = Object.keys(mediaQueries).reverse()
42
- const responsiveValues = Object.values(mediaQueries).reverse()
43
-
44
- mediaQueries &&
45
- responsiveKeys.map((value: string, index: number) => {
46
- responsive[`(max-width: ${value}px)`] = {
47
- slidesToShow: responsiveValues[index].slidesToShow
48
- }
49
- responsiveCSS += `@media screen and (max-width:${value}px){
50
- --slides-to-show: ${responsiveValues[index].slidesToShow} !important;
51
- }`
52
- })
53
- }
54
-
55
- const refs = useBlazeSlider({
56
- all: {
57
- // layout
58
- slidesToShow: slidesToShow ? slidesToShow : 4,
59
- slidesToScroll: slidesToScroll ? slidesToScroll : 1,
60
- slideGap: spacing ? spacing : '1rem',
61
-
62
- // loop
63
- loop: infinite,
64
-
65
- // autoplay
66
- enableAutoplay: autoplay ? autoplay : false,
67
- stopAutoplayOnInteraction: false,
68
- autoplayInterval: 3000,
69
- autoplayDirection: 'to left',
70
-
71
- // pagination
72
- enablePagination: dots,
73
-
74
- // transition
75
- transitionDuration: 500,
76
- transitionTimingFunction: 'ease'
77
- },
78
- ...responsive,
79
- onSlide: (
80
- pageIndex: number,
81
- firstVisibleSlideIndex: number,
82
- lastVisibleSlideIndex: number
83
- ) => {
84
- if (onSlide) onSlide
85
- }
86
- })
87
-
88
- elRef = refs.elRef
89
- sliderRef = refs.sliderRef
90
- }
91
-
92
- // useEffect(() => {
93
- // if (sliderRef && sliderRef.current) {
94
- // console.log(sliderRef?.current)
95
- // sliderRef.current.destroy()
96
- // setConfig()
97
- // }
98
- // }, [
99
- // arrows,
100
- // dots,
101
- // slidesToShow,
102
- // slidesToScroll,
103
- // infinite,
104
- // spacing,
105
- // mediaQueries
106
- // ])
107
-
108
- if (mobileOnly) {
109
- isMobile && setConfig();
110
- } else {
111
- setConfig();
112
- }
113
-
114
- return (
115
- <StyledSlider
116
- $responsiveCSS={responsiveCSS}
117
- $mobileOnly={mobileOnly}
118
- className={className}
119
- style={style}
120
- >
121
- <div className="blaze-slider" ref={elRef}>
122
- <div className="blaze-container">
123
- <div className="blaze-track-container">
124
- <div className="blaze-track">{children}</div>
125
- </div>
126
- </div>
127
-
128
- {React.Children.count(children) > 1 && (
129
- <div className="blaze-controls">
130
- {dots && <div className="blaze-pagination"></div>}
131
- <div className="blaze-arrows">
132
- {arrows && (
133
- <Button
134
- variant="icon"
135
- leftIcon={<Icon icon="icon-left-chevron" />}
136
- className="blaze-prev"
137
- ></Button>
138
- )}
139
- {arrows && (
140
- <Button
141
- variant="icon"
142
- leftIcon={<Icon icon="icon-right-chevron" />}
143
- className="blaze-next"
144
- ></Button>
145
- )}
146
- </div>
147
- </div>
148
- )}
149
- </div>
150
- </StyledSlider>
151
- )
152
- }
153
-
154
- export default Slider
1
+ import React, { useEffect } from 'react'
2
+
3
+ import Button from '@/components/atoms/Button/Button.component'
4
+ import { ISlider } from './Slider.interface'
5
+ import Icon from '@/components/atoms/Icon/Icon.component'
6
+ import { StyledSlider } from './Slider.theme'
7
+ import isTouchDevice from '@/helpers/isTouchDevice'
8
+ import { useBlazeSlider } from './Slider.utils'
9
+
10
+ const Slider = ({
11
+ arrows,
12
+ dots,
13
+ slidesToShow,
14
+ slidesToScroll,
15
+ infinite,
16
+ autoplay,
17
+ spacing,
18
+ mediaQueries,
19
+ mobileOnly,
20
+ className,
21
+ style,
22
+ children,
23
+ onSlide,
24
+ ...props
25
+ }: ISlider) => {
26
+ let responsive: any = []
27
+ let responsiveCSS: string = ''
28
+ let elRef: any = null
29
+ let sliderRef: any = null
30
+
31
+ const isMobile = isTouchDevice();
32
+
33
+ const setConfig = () => {
34
+ if (sliderRef?.current) sliderRef.current.destroy()
35
+ responsiveCSS = `
36
+ --slides-to-show: ${slidesToShow ? slidesToShow : 4} !important;
37
+ --slide-gap: ${spacing ? spacing : '1rem'} !important;
38
+ `
39
+
40
+ if (mediaQueries) {
41
+ const responsiveKeys = Object.keys(mediaQueries).reverse()
42
+ const responsiveValues = Object.values(mediaQueries).reverse()
43
+
44
+ mediaQueries &&
45
+ responsiveKeys.map((value: string, index: number) => {
46
+ responsive[`(max-width: ${value}px)`] = {
47
+ slidesToShow: responsiveValues[index].slidesToShow
48
+ }
49
+ responsiveCSS += `@media screen and (max-width:${value}px){
50
+ --slides-to-show: ${responsiveValues[index].slidesToShow} !important;
51
+ }`
52
+ })
53
+ }
54
+
55
+ const refs = useBlazeSlider({
56
+ all: {
57
+ // layout
58
+ slidesToShow: slidesToShow ? slidesToShow : 4,
59
+ slidesToScroll: slidesToScroll ? slidesToScroll : 1,
60
+ slideGap: spacing ? spacing : '1rem',
61
+
62
+ // loop
63
+ loop: infinite,
64
+
65
+ // autoplay
66
+ enableAutoplay: autoplay ? autoplay : false,
67
+ stopAutoplayOnInteraction: false,
68
+ autoplayInterval: 3000,
69
+ autoplayDirection: 'to left',
70
+
71
+ // pagination
72
+ enablePagination: dots,
73
+
74
+ // transition
75
+ transitionDuration: 500,
76
+ transitionTimingFunction: 'ease'
77
+ },
78
+ ...responsive,
79
+ onSlide: (
80
+ pageIndex: number,
81
+ firstVisibleSlideIndex: number,
82
+ lastVisibleSlideIndex: number
83
+ ) => {
84
+ if (onSlide) onSlide
85
+ }
86
+ })
87
+
88
+ elRef = refs.elRef
89
+ sliderRef = refs.sliderRef
90
+ }
91
+
92
+ // useEffect(() => {
93
+ // if (sliderRef && sliderRef.current) {
94
+ // console.log(sliderRef?.current)
95
+ // sliderRef.current.destroy()
96
+ // setConfig()
97
+ // }
98
+ // }, [
99
+ // arrows,
100
+ // dots,
101
+ // slidesToShow,
102
+ // slidesToScroll,
103
+ // infinite,
104
+ // spacing,
105
+ // mediaQueries
106
+ // ])
107
+
108
+ if (mobileOnly) {
109
+ isMobile && setConfig();
110
+ } else {
111
+ setConfig();
112
+ }
113
+
114
+ return (
115
+ <StyledSlider
116
+ $responsiveCSS={responsiveCSS}
117
+ $mobileOnly={mobileOnly}
118
+ className={className}
119
+ style={style}
120
+ >
121
+ <div className="blaze-slider" ref={elRef}>
122
+ <div className="blaze-container">
123
+ <div className="blaze-track-container">
124
+ <div className="blaze-track">{children}</div>
125
+ </div>
126
+ </div>
127
+
128
+ {React.Children.count(children) > 1 && (
129
+ <div className="blaze-controls">
130
+ {dots && <div className="blaze-pagination"></div>}
131
+ <div className="blaze-arrows">
132
+ {arrows && (
133
+ <Button
134
+ variant="icon"
135
+ leftIcon={<Icon icon="icon-left-chevron" />}
136
+ className="blaze-prev"
137
+ ></Button>
138
+ )}
139
+ {arrows && (
140
+ <Button
141
+ variant="icon"
142
+ leftIcon={<Icon icon="icon-right-chevron" />}
143
+ className="blaze-next"
144
+ ></Button>
145
+ )}
146
+ </div>
147
+ </div>
148
+ )}
149
+ </div>
150
+ </StyledSlider>
151
+ )
152
+ }
153
+
154
+ export default Slider
@@ -1,19 +1,19 @@
1
- import { CSSProperties } from 'react';
2
-
3
- export interface ISlider {
4
- $responsiveCSS?: string,
5
- arrows?: boolean,
6
- dots?: boolean,
7
- slidesToShow?: number
8
- slidesToScroll?: number
9
- infinite?: boolean
10
- autoplay?: boolean
11
- spacing?: string
12
- mediaQueries?: object
13
- $mobileOnly?: boolean
14
- mobileOnly?: boolean
15
- onSlide?: () => void
16
- className?: string
17
- style?: CSSProperties
18
- children: React.ReactNode
19
- }
1
+ import { CSSProperties } from 'react';
2
+
3
+ export interface ISlider {
4
+ $responsiveCSS?: string,
5
+ arrows?: boolean,
6
+ dots?: boolean,
7
+ slidesToShow?: number
8
+ slidesToScroll?: number
9
+ infinite?: boolean
10
+ autoplay?: boolean
11
+ spacing?: string
12
+ mediaQueries?: object
13
+ $mobileOnly?: boolean
14
+ mobileOnly?: boolean
15
+ onSlide?: () => void
16
+ className?: string
17
+ style?: CSSProperties
18
+ children: React.ReactNode
19
+ }