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,37 +1,37 @@
1
- import type { Meta, StoryObj } from '@storybook/react'
2
-
3
- import Heading from '@/components/atoms/Heading'
4
- import { IVideo } from './Video.interface'
5
- import React from 'react'
6
- import Spacer from '@/components/atoms/Spacer'
7
- import Video from './Video.component'
8
-
9
- // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
10
- export default {
11
- title: 'Components/Video',
12
- component: Video,
13
- argTypes: {}
14
- } as Meta
15
-
16
- export const Default: StoryObj<IVideo> = {
17
- render: args => (
18
- <div>
19
- <Video {...args} />
20
- <Spacer customHeight={'3rem'} />
21
- <Heading tag="h2" size="h2">
22
- Scroll to see autoplay in action
23
- </Heading>
24
- <Spacer customHeight={'38rem'} />
25
- </div>
26
- ),
27
- args: {
28
- autoplay: true,
29
- controls: true,
30
- loop: true,
31
- muted: true,
32
- playsInline: true,
33
- poster:
34
- 'https://miew.pt/wp-content/uploads/2021/02/featured-thumb-bmcar-2x-scaled.jpg',
35
- src: 'https://miew.pt/wp-content/uploads/2021/01/miew_emotion_wide_v5.mp4'
36
- }
37
- }
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+
3
+ import Heading from '@/components/atoms/Heading'
4
+ import { IVideo } from './Video.interface'
5
+ import React from 'react'
6
+ import Spacer from '@/components/atoms/Spacer'
7
+ import Video from './Video.component'
8
+
9
+ // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
10
+ export default {
11
+ title: 'Components/Video',
12
+ component: Video,
13
+ argTypes: {}
14
+ } as Meta
15
+
16
+ export const Default: StoryObj<IVideo> = {
17
+ render: args => (
18
+ <div>
19
+ <Video {...args} />
20
+ <Spacer customHeight={'3rem'} />
21
+ <Heading tag="h2" size="h2">
22
+ Scroll to see autoplay in action
23
+ </Heading>
24
+ <Spacer customHeight={'38rem'} />
25
+ </div>
26
+ ),
27
+ args: {
28
+ autoplay: true,
29
+ controls: true,
30
+ loop: true,
31
+ muted: true,
32
+ playsInline: true,
33
+ poster:
34
+ 'https://miew.pt/wp-content/uploads/2021/02/featured-thumb-bmcar-2x-scaled.jpg',
35
+ src: 'https://miew.pt/wp-content/uploads/2021/01/miew_emotion_wide_v5.mp4'
36
+ }
37
+ }
@@ -1,44 +1,44 @@
1
- import { colors, radius } from '@/styles/variables';
2
- import styled, { css } from 'styled-components';
3
-
4
- import { IVideo } from './Video.interface';
5
-
6
- export const StyledVideo = styled.div<IVideo>`
7
- display: block;
8
- position: relative;
9
- border-radius: ${radius.md};
10
- overflow: hidden;
11
-
12
- & video {
13
- width: 100%;
14
- border-radius: inherit;
15
- }
16
- `;
17
- export const StyledVideoMask = styled.div<IVideo>`
18
- aspect-ratio: 16/9;
19
-
20
- background-position: center;
21
- background-repeat: no-repeat;
22
- background-size: cover;
23
-
24
- cursor: pointer;
25
- `;
26
-
27
-
28
- export const StyledVideoPlay = styled.div<IVideo>`
29
- position: absolute;
30
- left: 50%;
31
- top: 50%;
32
- width: 10%;
33
- transform: translate(-50%,-50%);
34
- z-index: 1;
35
-
36
- pointer-events: none;
37
-
38
- & svg {
39
- fill: ${colors.white};
40
- width: 100%;
41
- height: auto;
42
- transition: all 0.4s linear;
43
- }
44
- `;
1
+ import { colors, radius } from '@/styles/variables';
2
+ import styled, { css } from 'styled-components';
3
+
4
+ import { IVideo } from './Video.interface';
5
+
6
+ export const StyledVideo = styled.div<IVideo>`
7
+ display: block;
8
+ position: relative;
9
+ border-radius: ${radius.md};
10
+ overflow: hidden;
11
+
12
+ & video {
13
+ width: 100%;
14
+ border-radius: inherit;
15
+ }
16
+ `;
17
+ export const StyledVideoMask = styled.div<IVideo>`
18
+ aspect-ratio: 16/9;
19
+
20
+ background-position: center;
21
+ background-repeat: no-repeat;
22
+ background-size: cover;
23
+
24
+ cursor: pointer;
25
+ `;
26
+
27
+
28
+ export const StyledVideoPlay = styled.div<IVideo>`
29
+ position: absolute;
30
+ left: 50%;
31
+ top: 50%;
32
+ width: 10%;
33
+ transform: translate(-50%,-50%);
34
+ z-index: 1;
35
+
36
+ pointer-events: none;
37
+
38
+ & svg {
39
+ fill: ${colors.white};
40
+ width: 100%;
41
+ height: auto;
42
+ transition: all 0.4s linear;
43
+ }
44
+ `;
@@ -1 +1 @@
1
- export { default } from "./Video.component";
1
+ export { default } from "./Video.component";
@@ -1,109 +1,109 @@
1
- import React, { useRef } from 'react'
2
- import {
3
- StyledVideo,
4
- StyledVideoMask,
5
- StyledVideoPlay
6
- } from './VideoEmbed.theme'
7
-
8
- import { IVideoEmbed } from './VideoEmbed.interface'
9
-
10
- const VideoEmbed = ({
11
- embed,
12
- poster,
13
- autoplay,
14
- controls,
15
- loop,
16
- muted,
17
- playsInline,
18
- className,
19
- style,
20
- ...props
21
- }: IVideoEmbed) => {
22
- const maskRef: any = useRef()
23
-
24
- const framed: boolean = false
25
- let videoId: any = []
26
- let thumb: string = poster || ''
27
- let embedElement: string = ''
28
-
29
- if (embed && !framed) {
30
- if (embed.indexOf('/watch?v=') !== -1) {
31
- videoId = embed.split('/watch?v=')
32
- videoId = videoId[videoId.length - 1]
33
- if (embed.indexOf('&') !== -1) {
34
- videoId = videoId.split('&')
35
- videoId = videoId[0]
36
- }
37
- } else if (embed.indexOf('/') !== -1) {
38
- videoId = embed.split('/')
39
- videoId = videoId[videoId.length - 1]
40
- if (embed.indexOf('?') !== -1) {
41
- videoId = videoId.split('?')
42
- videoId = videoId[0]
43
- }
44
- }
45
-
46
- const videoAttrs = `autoPlay=${autoplay}&controls=${controls}&loop=${loop}&muted=${muted}&playsInline=${playsInline}`
47
-
48
- if (embed.indexOf('youtube') >= 0) {
49
- embedElement = `https://www.youtube.com/embed/${videoId}?${videoAttrs}&enablejsapi=1`
50
-
51
- if (!poster) {
52
- thumb = `https://i.ytimg.com/vi/${videoId}/maxresdefault.jpg`
53
- }
54
- } else if (embed.indexOf('vimeo') >= 0) {
55
- embedElement = `https://player.vimeo.com/video/${videoId}?${videoAttrs}`
56
-
57
- if (!poster) {
58
- thumb = `https://i.vimeocdn.com/video/${videoId}_640.jpg`
59
- }
60
- }
61
- }
62
-
63
- const setFramed = () => {
64
- const iframe = document.createElement('iframe')
65
-
66
- iframe.setAttribute('frameborder', '0')
67
- iframe.setAttribute('allow', 'fullscreen; autoplay')
68
- iframe.setAttribute('allowfullscreen', '1')
69
-
70
- iframe.setAttribute('src', embedElement)
71
-
72
- maskRef.current.replaceWith(iframe)
73
-
74
- setTimeout(() => {
75
- iframe?.contentWindow?.postMessage(
76
- '{"event":"command","func":"playVideo","args":""}',
77
- '*'
78
- )
79
- }, 500)
80
- }
81
-
82
- return (
83
- <StyledVideo className={className} style={style}>
84
- <StyledVideoMask
85
- ref={maskRef}
86
- style={{ backgroundImage: `url(${thumb})` }}
87
- onClick={() => {
88
- setFramed()
89
- }}
90
- >
91
- <StyledVideoPlay>
92
- <svg
93
- viewBox="0 0 62 72"
94
- fill="none"
95
- xmlns="http://www.w3.org/2000/svg"
96
- >
97
- <path
98
- fillRule="evenodd"
99
- clipRule="evenodd"
100
- d="M1.30184 71.661C1.70029 71.8869 2.1419 72 2.58334 72C3.03735 72.0002 3.49152 71.8797 3.89774 71.6435L60.7311 38.2131C61.5182 37.7486 62 36.9073 62 35.9982C62 35.0891 61.5182 34.2478 60.7311 33.7832L3.89774 0.352633C3.10067 -0.109486 2.11412 -0.119525 1.30184 0.335024C0.496993 0.792041 0 1.64337 0 2.56761V69.4284C0 70.3526 0.496993 71.204 1.30184 71.661ZM5 65V7L54 36.0001L5 65Z"
101
- />
102
- </svg>
103
- </StyledVideoPlay>
104
- </StyledVideoMask>
105
- </StyledVideo>
106
- )
107
- }
108
-
109
- export default VideoEmbed
1
+ import React, { useRef } from 'react'
2
+ import {
3
+ StyledVideo,
4
+ StyledVideoMask,
5
+ StyledVideoPlay
6
+ } from './VideoEmbed.theme'
7
+
8
+ import { IVideoEmbed } from './VideoEmbed.interface'
9
+
10
+ const VideoEmbed = ({
11
+ embed,
12
+ poster,
13
+ autoplay,
14
+ controls,
15
+ loop,
16
+ muted,
17
+ playsInline,
18
+ className,
19
+ style,
20
+ ...props
21
+ }: IVideoEmbed) => {
22
+ const maskRef: any = useRef()
23
+
24
+ const framed: boolean = false
25
+ let videoId: any = []
26
+ let thumb: string = poster || ''
27
+ let embedElement: string = ''
28
+
29
+ if (embed && !framed) {
30
+ if (embed.indexOf('/watch?v=') !== -1) {
31
+ videoId = embed.split('/watch?v=')
32
+ videoId = videoId[videoId.length - 1]
33
+ if (embed.indexOf('&') !== -1) {
34
+ videoId = videoId.split('&')
35
+ videoId = videoId[0]
36
+ }
37
+ } else if (embed.indexOf('/') !== -1) {
38
+ videoId = embed.split('/')
39
+ videoId = videoId[videoId.length - 1]
40
+ if (embed.indexOf('?') !== -1) {
41
+ videoId = videoId.split('?')
42
+ videoId = videoId[0]
43
+ }
44
+ }
45
+
46
+ const videoAttrs = `autoPlay=${autoplay}&controls=${controls}&loop=${loop}&muted=${muted}&playsInline=${playsInline}`
47
+
48
+ if (embed.indexOf('youtube') >= 0) {
49
+ embedElement = `https://www.youtube.com/embed/${videoId}?${videoAttrs}&enablejsapi=1`
50
+
51
+ if (!poster) {
52
+ thumb = `https://i.ytimg.com/vi/${videoId}/maxresdefault.jpg`
53
+ }
54
+ } else if (embed.indexOf('vimeo') >= 0) {
55
+ embedElement = `https://player.vimeo.com/video/${videoId}?${videoAttrs}`
56
+
57
+ if (!poster) {
58
+ thumb = `https://i.vimeocdn.com/video/${videoId}_640.jpg`
59
+ }
60
+ }
61
+ }
62
+
63
+ const setFramed = () => {
64
+ const iframe = document.createElement('iframe')
65
+
66
+ iframe.setAttribute('frameborder', '0')
67
+ iframe.setAttribute('allow', 'fullscreen; autoplay')
68
+ iframe.setAttribute('allowfullscreen', '1')
69
+
70
+ iframe.setAttribute('src', embedElement)
71
+
72
+ maskRef.current.replaceWith(iframe)
73
+
74
+ setTimeout(() => {
75
+ iframe?.contentWindow?.postMessage(
76
+ '{"event":"command","func":"playVideo","args":""}',
77
+ '*'
78
+ )
79
+ }, 500)
80
+ }
81
+
82
+ return (
83
+ <StyledVideo className={className} style={style}>
84
+ <StyledVideoMask
85
+ ref={maskRef}
86
+ style={{ backgroundImage: `url(${thumb})` }}
87
+ onClick={() => {
88
+ setFramed()
89
+ }}
90
+ >
91
+ <StyledVideoPlay>
92
+ <svg
93
+ viewBox="0 0 62 72"
94
+ fill="none"
95
+ xmlns="http://www.w3.org/2000/svg"
96
+ >
97
+ <path
98
+ fillRule="evenodd"
99
+ clipRule="evenodd"
100
+ d="M1.30184 71.661C1.70029 71.8869 2.1419 72 2.58334 72C3.03735 72.0002 3.49152 71.8797 3.89774 71.6435L60.7311 38.2131C61.5182 37.7486 62 36.9073 62 35.9982C62 35.0891 61.5182 34.2478 60.7311 33.7832L3.89774 0.352633C3.10067 -0.109486 2.11412 -0.119525 1.30184 0.335024C0.496993 0.792041 0 1.64337 0 2.56761V69.4284C0 70.3526 0.496993 71.204 1.30184 71.661ZM5 65V7L54 36.0001L5 65Z"
101
+ />
102
+ </svg>
103
+ </StyledVideoPlay>
104
+ </StyledVideoMask>
105
+ </StyledVideo>
106
+ )
107
+ }
108
+
109
+ export default VideoEmbed
@@ -1,13 +1,13 @@
1
- import { CSSProperties } from 'react'
2
-
3
- export type IVideoEmbed = {
4
- embed?: string
5
- poster?: string
6
- autoplay?: boolean
7
- controls?: boolean
8
- loop?: boolean
9
- muted?: boolean
10
- playsInline?: boolean
11
- className?: string
12
- style?: CSSProperties
13
- }
1
+ import { CSSProperties } from 'react'
2
+
3
+ export type IVideoEmbed = {
4
+ embed?: string
5
+ poster?: string
6
+ autoplay?: boolean
7
+ controls?: boolean
8
+ loop?: boolean
9
+ muted?: boolean
10
+ playsInline?: boolean
11
+ className?: string
12
+ style?: CSSProperties
13
+ }
@@ -1,23 +1,23 @@
1
- import type { Meta, StoryObj } from '@storybook/react'
2
-
3
- import { IVideoEmbed } from './VideoEmbed.interface'
4
- import VideoEmbed from './VideoEmbed.component'
5
-
6
- // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
7
- export default {
8
- title: 'Components/VideoEmbed',
9
- component: VideoEmbed,
10
- argTypes: {}
11
- } as Meta
12
-
13
- export const Embed: StoryObj<IVideoEmbed> = {
14
- args: {
15
- autoplay: true,
16
- controls: true,
17
- loop: true,
18
- muted: true,
19
- playsInline: true,
20
- poster: '',
21
- embed: 'https://www.youtube.com/watch?v=Ijk4j-r7qPA'
22
- }
23
- }
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+
3
+ import { IVideoEmbed } from './VideoEmbed.interface'
4
+ import VideoEmbed from './VideoEmbed.component'
5
+
6
+ // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
7
+ export default {
8
+ title: 'Components/VideoEmbed',
9
+ component: VideoEmbed,
10
+ argTypes: {}
11
+ } as Meta
12
+
13
+ export const Embed: StoryObj<IVideoEmbed> = {
14
+ args: {
15
+ autoplay: true,
16
+ controls: true,
17
+ loop: true,
18
+ muted: true,
19
+ playsInline: true,
20
+ poster: '',
21
+ embed: 'https://www.youtube.com/watch?v=Ijk4j-r7qPA'
22
+ }
23
+ }
@@ -1,45 +1,45 @@
1
- import { colors, radius } from '@/styles/variables';
2
- import styled, { css } from 'styled-components';
3
-
4
- import { IVideoEmbed } from './VideoEmbed.interface';
5
-
6
- export const StyledVideo = styled.div<IVideoEmbed>`
7
- display: block;
8
- position: relative;
9
- border-radius: ${radius.md};
10
- overflow: hidden;
11
-
12
- & iframe {
13
- width: 100%;
14
- aspect-ratio: 16/9;
15
- border-radius: inherit;
16
- }
17
- `;
18
-
19
- export const StyledVideoMask = styled.div<IVideoEmbed>`
20
- aspect-ratio: 16/9;
21
-
22
- background-position: center;
23
- background-repeat: no-repeat;
24
- background-size: cover;
25
-
26
- cursor: pointer;
27
- `;
28
-
29
- export const StyledVideoPlay = styled.div<IVideoEmbed>`
30
- position: absolute;
31
- left: 50%;
32
- top: 50%;
33
- width: 10%;
34
- transform: translate(-50%,-50%);
35
- z-index: 1;
36
-
37
- pointer-events: none;
38
-
39
- & svg {
40
- fill: ${colors.white};
41
- width: 100%;
42
- height: auto;
43
- transition: all 0.4s linear;
44
- }
45
- `;
1
+ import { colors, radius } from '@/styles/variables';
2
+ import styled, { css } from 'styled-components';
3
+
4
+ import { IVideoEmbed } from './VideoEmbed.interface';
5
+
6
+ export const StyledVideo = styled.div<IVideoEmbed>`
7
+ display: block;
8
+ position: relative;
9
+ border-radius: ${radius.md};
10
+ overflow: hidden;
11
+
12
+ & iframe {
13
+ width: 100%;
14
+ aspect-ratio: 16/9;
15
+ border-radius: inherit;
16
+ }
17
+ `;
18
+
19
+ export const StyledVideoMask = styled.div<IVideoEmbed>`
20
+ aspect-ratio: 16/9;
21
+
22
+ background-position: center;
23
+ background-repeat: no-repeat;
24
+ background-size: cover;
25
+
26
+ cursor: pointer;
27
+ `;
28
+
29
+ export const StyledVideoPlay = styled.div<IVideoEmbed>`
30
+ position: absolute;
31
+ left: 50%;
32
+ top: 50%;
33
+ width: 10%;
34
+ transform: translate(-50%,-50%);
35
+ z-index: 1;
36
+
37
+ pointer-events: none;
38
+
39
+ & svg {
40
+ fill: ${colors.white};
41
+ width: 100%;
42
+ height: auto;
43
+ transition: all 0.4s linear;
44
+ }
45
+ `;
@@ -1 +1 @@
1
- export { default } from "./VideoEmbed.component";
1
+ export { default } from "./VideoEmbed.component";
@@ -1,48 +1,48 @@
1
- import { useLayoutEffect, useState } from 'react'
2
-
3
- import { createPortal } from 'react-dom'
4
-
5
- function createWrapperAndAppendToBody(wrapperId: string) {
6
- const wrapperElement = document.createElement('div')
7
- wrapperElement.setAttribute('id', wrapperId)
8
- document.body.appendChild(wrapperElement)
9
- return wrapperElement
10
- }
11
-
12
- type PortalComponentProps = {
13
- wrapperId: string
14
- children?: React.ReactNode
15
- }
16
-
17
- function PortalComponent({
18
- wrapperId = 'react-portal-wrapper',
19
- children
20
- }: PortalComponentProps): React.ReactPortal | null {
21
- const [wrapperElement, setWrapperElement] = useState<HTMLElement | null>(null)
22
-
23
- useLayoutEffect(() => {
24
- let element = document.getElementById(wrapperId)
25
- let systemCreated = false
26
- // if element is not found with wrapperId or wrapperId is not provided,
27
- // create and append to body
28
- if (!element) {
29
- systemCreated = true
30
- element = createWrapperAndAppendToBody(wrapperId)
31
- }
32
- setWrapperElement(element)
33
-
34
- return () => {
35
- // delete the programatically created element
36
- if (systemCreated && element && element.parentNode) {
37
- element.parentNode.removeChild(element)
38
- }
39
- }
40
- }, [wrapperId])
41
-
42
- // wrapperElement state will be null on very first render.
43
- if (wrapperElement === null) return null
44
-
45
- return createPortal(children, wrapperElement)
46
- }
47
-
48
- export default PortalComponent
1
+ import { useLayoutEffect, useState } from 'react'
2
+
3
+ import { createPortal } from 'react-dom'
4
+
5
+ function createWrapperAndAppendToBody(wrapperId: string) {
6
+ const wrapperElement = document.createElement('div')
7
+ wrapperElement.setAttribute('id', wrapperId)
8
+ document.body.appendChild(wrapperElement)
9
+ return wrapperElement
10
+ }
11
+
12
+ type PortalComponentProps = {
13
+ wrapperId: string
14
+ children?: React.ReactNode
15
+ }
16
+
17
+ function PortalComponent({
18
+ wrapperId = 'react-portal-wrapper',
19
+ children
20
+ }: PortalComponentProps): React.ReactPortal | null {
21
+ const [wrapperElement, setWrapperElement] = useState<HTMLElement | null>(null)
22
+
23
+ useLayoutEffect(() => {
24
+ let element = document.getElementById(wrapperId)
25
+ let systemCreated = false
26
+ // if element is not found with wrapperId or wrapperId is not provided,
27
+ // create and append to body
28
+ if (!element) {
29
+ systemCreated = true
30
+ element = createWrapperAndAppendToBody(wrapperId)
31
+ }
32
+ setWrapperElement(element)
33
+
34
+ return () => {
35
+ // delete the programatically created element
36
+ if (systemCreated && element && element.parentNode) {
37
+ element.parentNode.removeChild(element)
38
+ }
39
+ }
40
+ }, [wrapperId])
41
+
42
+ // wrapperElement state will be null on very first render.
43
+ if (wrapperElement === null) return null
44
+
45
+ return createPortal(children, wrapperElement)
46
+ }
47
+
48
+ export default PortalComponent
@@ -1 +1 @@
1
- export { default } from './PortalComponent'
1
+ export { default } from './PortalComponent'