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,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'