oddsgate-ds 1.0.169 → 1.0.171

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 (277) 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/cjs/index.js +4 -4
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/types/components/molecules/EventsCard/EventsCard.component.d.ts +1 -1
  11. package/dist/cjs/types/components/molecules/EventsCard/EventsCard.interface.d.ts +1 -0
  12. package/dist/esm/assets/components/quotes.svg +3 -3
  13. package/dist/esm/index.js +1 -1
  14. package/dist/esm/index.js.map +1 -1
  15. package/dist/esm/types/components/molecules/EventsCard/EventsCard.component.d.ts +1 -1
  16. package/dist/esm/types/components/molecules/EventsCard/EventsCard.interface.d.ts +1 -0
  17. package/dist/public/assets/components/quotes.svg +3 -3
  18. package/dist/public/assets/empty-state.svg +28 -28
  19. package/dist/public/fonts/Nichrome/mdnichrome-bold-webfont.svg +241 -241
  20. package/dist/public/fonts/Nichrome/mdnichrome-regular-webfont.svg +241 -241
  21. package/dist/public/fonts/miewfont/miewfont.svg +38 -38
  22. package/dist/types.d.ts +2 -1
  23. package/package.json +103 -103
  24. package/prettier.config.js +7 -7
  25. package/public/assets/components/quotes.svg +3 -3
  26. package/public/assets/empty-state.svg +28 -28
  27. package/public/fonts/Nichrome/mdnichrome-bold-webfont.svg +241 -241
  28. package/public/fonts/Nichrome/mdnichrome-regular-webfont.svg +241 -241
  29. package/public/fonts/miewfont/miewfont.svg +38 -38
  30. package/rollup.config.js +98 -98
  31. package/src/components/atoms/Button/Button.component.tsx +60 -60
  32. package/src/components/atoms/Button/Button.interface.ts +29 -29
  33. package/src/components/atoms/Button/Button.stories.tsx +65 -65
  34. package/src/components/atoms/Button/Button.theme.ts +180 -180
  35. package/src/components/atoms/Button/index.ts +1 -1
  36. package/src/components/atoms/CardMarquee/CardMarquee.component.tsx +24 -24
  37. package/src/components/atoms/CardMarquee/CardMarquee.interface.ts +15 -15
  38. package/src/components/atoms/CardMarquee/CardMarquee.stories.tsx +21 -21
  39. package/src/components/atoms/CardMarquee/CardMarquee.theme.ts +48 -48
  40. package/src/components/atoms/CardMarquee/index.ts +1 -1
  41. package/src/components/atoms/Chip/Chip.component.tsx +30 -30
  42. package/src/components/atoms/Chip/Chip.interface.ts +14 -14
  43. package/src/components/atoms/Chip/Chip.stories.tsx +42 -42
  44. package/src/components/atoms/Chip/Chip.theme.ts +57 -57
  45. package/src/components/atoms/Chip/index.ts +1 -1
  46. package/src/components/atoms/CloseButton/CloseButton.component.tsx +17 -17
  47. package/src/components/atoms/CloseButton/CloseButton.interface.ts +9 -9
  48. package/src/components/atoms/CloseButton/CloseButton.stories.tsx +24 -24
  49. package/src/components/atoms/CloseButton/CloseButton.theme.ts +66 -66
  50. package/src/components/atoms/CloseButton/index.ts +1 -1
  51. package/src/components/atoms/Counter/Counter.component.tsx +99 -99
  52. package/src/components/atoms/Counter/Counter.interface.ts +10 -10
  53. package/src/components/atoms/Counter/Counter.stories.tsx +29 -29
  54. package/src/components/atoms/Counter/Counter.theme.ts +27 -27
  55. package/src/components/atoms/Counter/index.ts +1 -1
  56. package/src/components/atoms/EmptyState/EmptyState.component.tsx +27 -27
  57. package/src/components/atoms/EmptyState/EmptyState.interface.ts +10 -10
  58. package/src/components/atoms/EmptyState/EmptyState.stories.tsx +34 -34
  59. package/src/components/atoms/EmptyState/EmptyState.theme.ts +27 -27
  60. package/src/components/atoms/EmptyState/index.ts +1 -1
  61. package/src/components/atoms/Flex/Flex.component.tsx +30 -30
  62. package/src/components/atoms/Flex/Flex.interface.ts +24 -24
  63. package/src/components/atoms/Flex/Flex.theme.ts +12 -12
  64. package/src/components/atoms/Flex/index.ts +1 -1
  65. package/src/components/atoms/FlexGrid/FlexGrid.component.tsx +62 -62
  66. package/src/components/atoms/FlexGrid/FlexGrid.interface.ts +55 -55
  67. package/src/components/atoms/FlexGrid/FlexGrid.stories.tsx +59 -59
  68. package/src/components/atoms/FlexGrid/FlexGrid.theme.ts +82 -82
  69. package/src/components/atoms/FlexGrid/index.ts +1 -1
  70. package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.component.tsx +24 -24
  71. package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.interface.tsx +6 -6
  72. package/src/components/atoms/FormField/CheckRadioField/CheckRadioField.theme.ts +134 -134
  73. package/src/components/atoms/FormField/CheckRadioField/index.ts +1 -1
  74. package/src/components/atoms/FormField/FormField.component.tsx +37 -37
  75. package/src/components/atoms/FormField/FormField.interface.ts +10 -10
  76. package/src/components/atoms/FormField/FormField.stories.tsx +499 -499
  77. package/src/components/atoms/FormField/FormField.theme.tsx +136 -136
  78. package/src/components/atoms/FormField/index.ts +1 -1
  79. package/src/components/atoms/Heading/Heading.component.tsx +18 -18
  80. package/src/components/atoms/Heading/Heading.interface.tsx +21 -21
  81. package/src/components/atoms/Heading/Heading.theme.ts +17 -17
  82. package/src/components/atoms/Heading/index.ts +1 -1
  83. package/src/components/atoms/Icon/Icon.component.tsx +19 -19
  84. package/src/components/atoms/Icon/Icon.interface.ts +8 -8
  85. package/src/components/atoms/Icon/Icon.stories.tsx +26 -26
  86. package/src/components/atoms/Icon/Icon.theme.ts +115 -115
  87. package/src/components/atoms/Icon/index.ts +1 -1
  88. package/src/components/atoms/ImageWrapper/ImageWrapper.component.tsx +42 -42
  89. package/src/components/atoms/ImageWrapper/ImageWrapper.interface.ts +16 -16
  90. package/src/components/atoms/ImageWrapper/ImageWrapper.stories.tsx +27 -27
  91. package/src/components/atoms/ImageWrapper/ImageWrapper.theme.ts +50 -50
  92. package/src/components/atoms/ImageWrapper/index.ts +1 -1
  93. package/src/components/atoms/LegalLinks/LegalLinks.component.tsx +35 -35
  94. package/src/components/atoms/LegalLinks/LegalLinks.interface.ts +12 -12
  95. package/src/components/atoms/LegalLinks/LegalLinks.stories.tsx +43 -43
  96. package/src/components/atoms/LegalLinks/LegalLinks.theme.ts +33 -33
  97. package/src/components/atoms/LegalLinks/index.ts +1 -1
  98. package/src/components/atoms/Loader/Loader.component.tsx +26 -26
  99. package/src/components/atoms/Loader/Loader.interface.ts +10 -10
  100. package/src/components/atoms/Loader/Loader.stories.tsx +33 -33
  101. package/src/components/atoms/Loader/Loader.theme.ts +51 -51
  102. package/src/components/atoms/Loader/index.ts +1 -1
  103. package/src/components/atoms/Marquee/Marquee.component.tsx +32 -32
  104. package/src/components/atoms/Marquee/Marquee.interface.ts +10 -10
  105. package/src/components/atoms/Marquee/Marquee.stories.tsx +20 -20
  106. package/src/components/atoms/Marquee/Marquee.theme.ts +40 -40
  107. package/src/components/atoms/Marquee/index.ts +1 -1
  108. package/src/components/atoms/Quote/Quote.component.tsx +29 -29
  109. package/src/components/atoms/Quote/Quote.interface.ts +10 -10
  110. package/src/components/atoms/Quote/Quote.stories.tsx +25 -25
  111. package/src/components/atoms/Quote/Quote.theme.ts +26 -26
  112. package/src/components/atoms/Quote/index.ts +1 -1
  113. package/src/components/atoms/RichText/RichText.component.tsx +32 -32
  114. package/src/components/atoms/RichText/RichText.interface.ts +11 -11
  115. package/src/components/atoms/RichText/RichText.stories.tsx +73 -73
  116. package/src/components/atoms/RichText/RichText.theme.ts +34 -34
  117. package/src/components/atoms/RichText/index.ts +1 -1
  118. package/src/components/atoms/ScrollingNav/ScrollingNav.component.tsx +18 -18
  119. package/src/components/atoms/ScrollingNav/ScrollingNav.interface.ts +8 -8
  120. package/src/components/atoms/ScrollingNav/ScrollingNav.stories.tsx +44 -44
  121. package/src/components/atoms/ScrollingNav/ScrollingNav.theme.ts +58 -58
  122. package/src/components/atoms/ScrollingNav/index.ts +1 -1
  123. package/src/components/atoms/Separator/Separator.component.tsx +19 -19
  124. package/src/components/atoms/Separator/Separator.interface.tsx +10 -10
  125. package/src/components/atoms/Separator/Separator.stories.tsx +29 -29
  126. package/src/components/atoms/Separator/Separator.theme.ts +9 -9
  127. package/src/components/atoms/Separator/index.ts +1 -1
  128. package/src/components/atoms/SocialLinks/SocialLinks.component.tsx +42 -42
  129. package/src/components/atoms/SocialLinks/SocialLinks.interface.ts +8 -8
  130. package/src/components/atoms/SocialLinks/SocialLinks.stories.tsx +48 -48
  131. package/src/components/atoms/SocialLinks/SocialLinks.theme.ts +80 -80
  132. package/src/components/atoms/SocialLinks/index.ts +1 -1
  133. package/src/components/atoms/Spacer/Spacer.component.tsx +34 -34
  134. package/src/components/atoms/Spacer/Spacer.interface.ts +24 -24
  135. package/src/components/atoms/Spacer/Spacer.stories.tsx +99 -99
  136. package/src/components/atoms/Spacer/Spacer.theme.ts +33 -33
  137. package/src/components/atoms/Spacer/index.ts +1 -1
  138. package/src/components/atoms/Video/Video.component.tsx +116 -116
  139. package/src/components/atoms/Video/Video.interface.ts +13 -13
  140. package/src/components/atoms/Video/Video.stories.tsx +37 -37
  141. package/src/components/atoms/Video/Video.theme.ts +44 -44
  142. package/src/components/atoms/Video/index.ts +1 -1
  143. package/src/components/atoms/VideoEmbed/VideoEmbed.component.tsx +109 -109
  144. package/src/components/atoms/VideoEmbed/VideoEmbed.interface.ts +13 -13
  145. package/src/components/atoms/VideoEmbed/VideoEmbed.stories.tsx +23 -23
  146. package/src/components/atoms/VideoEmbed/VideoEmbed.theme.ts +45 -45
  147. package/src/components/atoms/VideoEmbed/index.ts +1 -1
  148. package/src/components/common/PortalComponent/PortalComponent.tsx +48 -48
  149. package/src/components/common/PortalComponent/index.ts +1 -1
  150. package/src/components/molecules/Accordion/Accordion.component.tsx +58 -58
  151. package/src/components/molecules/Accordion/Accordion.interface.ts +15 -15
  152. package/src/components/molecules/Accordion/Accordion.stories.tsx +100 -100
  153. package/src/components/molecules/Accordion/Accordion.theme.ts +93 -93
  154. package/src/components/molecules/Accordion/index.ts +1 -1
  155. package/src/components/molecules/BlogCard/BlogCard.component.tsx +48 -48
  156. package/src/components/molecules/BlogCard/BlogCard.interface.ts +10 -10
  157. package/src/components/molecules/BlogCard/BlogCard.stories.tsx +37 -37
  158. package/src/components/molecules/BlogCard/BlogCard.theme.ts +41 -41
  159. package/src/components/molecules/BlogCard/index.ts +1 -1
  160. package/src/components/molecules/Card/Card.component.tsx +15 -15
  161. package/src/components/molecules/Card/Card.interface.ts +11 -11
  162. package/src/components/molecules/Card/Card.theme.ts +54 -54
  163. package/src/components/molecules/Card/index.ts +1 -1
  164. package/src/components/molecules/CareersCard/CareersCard.component.tsx +27 -27
  165. package/src/components/molecules/CareersCard/CareersCard.interface.ts +7 -7
  166. package/src/components/molecules/CareersCard/CareersCard.stories.tsx +30 -30
  167. package/src/components/molecules/CareersCard/CareersCard.theme.ts +13 -13
  168. package/src/components/molecules/CareersCard/index.ts +1 -1
  169. package/src/components/molecules/Dropdown/Dropdown.component.tsx +67 -67
  170. package/src/components/molecules/Dropdown/Dropdown.interface.ts +26 -26
  171. package/src/components/molecules/Dropdown/Dropdown.stories.tsx +54 -54
  172. package/src/components/molecules/Dropdown/Dropdown.theme.ts +69 -69
  173. package/src/components/molecules/Dropdown/index.ts +1 -1
  174. package/src/components/molecules/EventsCard/EventsCard.component.tsx +41 -40
  175. package/src/components/molecules/EventsCard/EventsCard.interface.ts +10 -9
  176. package/src/components/molecules/EventsCard/EventsCard.stories.tsx +38 -37
  177. package/src/components/molecules/EventsCard/EventsCard.theme.ts +33 -33
  178. package/src/components/molecules/EventsCard/index.ts +1 -1
  179. package/src/components/molecules/IconBox/IconBox.component.tsx +29 -29
  180. package/src/components/molecules/IconBox/IconBox.interface.tsx +10 -10
  181. package/src/components/molecules/IconBox/IconBox.stories.tsx +23 -23
  182. package/src/components/molecules/IconBox/IconBox.theme.ts +25 -25
  183. package/src/components/molecules/IconBox/index.ts +1 -1
  184. package/src/components/molecules/IconTitle/IconTitle.component.tsx +24 -24
  185. package/src/components/molecules/IconTitle/IconTitle.interface.tsx +10 -10
  186. package/src/components/molecules/IconTitle/IconTitle.stories.tsx +49 -49
  187. package/src/components/molecules/IconTitle/IconTitle.theme.ts +10 -10
  188. package/src/components/molecules/IconTitle/index.ts +1 -1
  189. package/src/components/molecules/LicenseCard/LicenseCard.component.tsx +27 -27
  190. package/src/components/molecules/LicenseCard/LicenseCard.interface.ts +6 -6
  191. package/src/components/molecules/LicenseCard/LicenseCard.stories.tsx +42 -42
  192. package/src/components/molecules/LicenseCard/LicenseCard.theme.ts +28 -28
  193. package/src/components/molecules/LicenseCard/index.ts +1 -1
  194. package/src/components/molecules/LogosCard/LogosCard.component.tsx +14 -14
  195. package/src/components/molecules/LogosCard/LogosCard.interface.ts +8 -8
  196. package/src/components/molecules/LogosCard/LogosCard.stories.tsx +38 -38
  197. package/src/components/molecules/LogosCard/LogosCard.theme.ts +19 -19
  198. package/src/components/molecules/LogosCard/index.ts +1 -1
  199. package/src/components/molecules/Modal/Modal.component.tsx +70 -70
  200. package/src/components/molecules/Modal/Modal.interface.ts +11 -11
  201. package/src/components/molecules/Modal/Modal.stories.tsx +57 -57
  202. package/src/components/molecules/Modal/Modal.theme.ts +55 -55
  203. package/src/components/molecules/Modal/index.ts +1 -1
  204. package/src/components/molecules/NewsCard/NewsCard.component.tsx +55 -55
  205. package/src/components/molecules/NewsCard/NewsCard.interface.ts +9 -9
  206. package/src/components/molecules/NewsCard/NewsCard.stories.tsx +44 -44
  207. package/src/components/molecules/NewsCard/NewsCard.theme.ts +77 -77
  208. package/src/components/molecules/NewsCard/index.ts +1 -1
  209. package/src/components/molecules/OffCanvas/OffCanvas.component.tsx +55 -55
  210. package/src/components/molecules/OffCanvas/OffCanvas.interface.ts +12 -12
  211. package/src/components/molecules/OffCanvas/OffCanvas.stories.tsx +55 -55
  212. package/src/components/molecules/OffCanvas/OffCanvas.theme.ts +50 -50
  213. package/src/components/molecules/OffCanvas/index.ts +1 -1
  214. package/src/components/molecules/ProductCard/ProductCard.component.tsx +60 -60
  215. package/src/components/molecules/ProductCard/ProductCard.interface.ts +7 -7
  216. package/src/components/molecules/ProductCard/ProductCard.stories.tsx +42 -42
  217. package/src/components/molecules/ProductCard/ProductCard.theme.ts +26 -26
  218. package/src/components/molecules/ProductCard/index.ts +1 -1
  219. package/src/components/molecules/ShareModal/ShareModal.component.tsx +167 -167
  220. package/src/components/molecules/ShareModal/ShareModal.interface.ts +9 -9
  221. package/src/components/molecules/ShareModal/ShareModal.stories.tsx +33 -33
  222. package/src/components/molecules/ShareModal/ShareModal.theme.ts +103 -103
  223. package/src/components/molecules/ShareModal/index.ts +1 -1
  224. package/src/components/molecules/TeamCard/TeamCard.component.tsx +31 -31
  225. package/src/components/molecules/TeamCard/TeamCard.interface.ts +7 -7
  226. package/src/components/molecules/TeamCard/TeamCard.stories.tsx +33 -33
  227. package/src/components/molecules/TeamCard/TeamCard.theme.ts +12 -12
  228. package/src/components/molecules/TeamCard/index.ts +1 -1
  229. package/src/components/organisms/CircularSlider/CircularSlider.component.tsx +231 -231
  230. package/src/components/organisms/CircularSlider/CircularSlider.interface.ts +13 -13
  231. package/src/components/organisms/CircularSlider/CircularSlider.stories.tsx +138 -138
  232. package/src/components/organisms/CircularSlider/CircularSlider.theme.ts +126 -126
  233. package/src/components/organisms/CircularSlider/index.ts +1 -1
  234. package/src/components/organisms/Cover/Cover.component.tsx +46 -46
  235. package/src/components/organisms/Cover/Cover.interface.ts +14 -14
  236. package/src/components/organisms/Cover/Cover.stories.tsx +97 -97
  237. package/src/components/organisms/Cover/Cover.theme.ts +49 -49
  238. package/src/components/organisms/Cover/index.ts +1 -1
  239. package/src/components/organisms/ProductsSlider/ProductsSlider.component.tsx +216 -216
  240. package/src/components/organisms/ProductsSlider/ProductsSlider.interface.ts +12 -12
  241. package/src/components/organisms/ProductsSlider/ProductsSlider.stories.tsx +132 -132
  242. package/src/components/organisms/ProductsSlider/ProductsSlider.theme.ts +77 -77
  243. package/src/components/organisms/ProductsSlider/index.ts +1 -1
  244. package/src/components/organisms/ProductsSlider//306/222.js +164 -164
  245. package/src/components/organisms/Slider/Slider.component.tsx +154 -154
  246. package/src/components/organisms/Slider/Slider.interface.ts +19 -19
  247. package/src/components/organisms/Slider/Slider.stories.tsx +146 -146
  248. package/src/components/organisms/Slider/Slider.theme.ts +145 -145
  249. package/src/components/organisms/Slider/Slider.utils.tsx +19 -19
  250. package/src/components/organisms/Slider/index.ts +1 -1
  251. package/src/components/organisms/Tabs/Tabs.component.tsx +88 -88
  252. package/src/components/organisms/Tabs/Tabs.interface.ts +18 -18
  253. package/src/components/organisms/Tabs/Tabs.stories.tsx +118 -118
  254. package/src/components/organisms/Tabs/Tabs.theme.ts +115 -115
  255. package/src/components/organisms/Tabs/index.ts +1 -1
  256. package/src/helpers/clickOutsideToClose.tsx +17 -17
  257. package/src/helpers/events.ts +9 -9
  258. package/src/helpers/exportCSS.tsx +27 -27
  259. package/src/helpers/getIcons.ts +5 -5
  260. package/src/helpers/isTouchDevice.tsx +11 -11
  261. package/src/helpers/useInterval.ts +25 -25
  262. package/src/helpers/useMediaMatch.tsx +26 -26
  263. package/src/helpers/uuid.ts +5 -5
  264. package/src/iconsList.json +1 -1
  265. package/src/index.ts +68 -68
  266. package/src/reportWebVitals.js +13 -13
  267. package/src/stories/Documentation/Colors.stories.tsx +46 -46
  268. package/src/stories/Documentation/Headings.stories.tsx +24 -24
  269. package/src/stories/Documentation/Icons.stories.tsx +73 -73
  270. package/src/stories/Documentation/JWT.stories.tsx +60 -60
  271. package/src/stories/Documentation/Utilities.stories.tsx +65 -65
  272. package/src/styles/Global.ts +301 -301
  273. package/src/styles/grid.ts +70 -70
  274. package/src/styles/reset.ts +47 -47
  275. package/src/styles/utilities.ts +374 -374
  276. package/src/styles/variables.ts +180 -180
  277. 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
+ }