@reuters-graphics/graphics-components 2.0.2 → 3.0.0

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 (547) hide show
  1. package/dist/actions/cssVariables/cssVariables.mdx +4 -5
  2. package/dist/actions/cssVariables/index.d.ts +2 -2
  3. package/dist/actions/cssVariables/index.js +14 -16
  4. package/dist/actions/resizeObserver/index.d.ts +1 -1
  5. package/dist/actions/resizeObserver/index.js +18 -20
  6. package/dist/actions/resizeObserver/resizeObserver.mdx +1 -1
  7. package/dist/app.html +11 -0
  8. package/dist/components/@types/global.d.ts +9 -7
  9. package/dist/components/AdSlot/AdScripts.svelte +15 -12
  10. package/dist/components/AdSlot/AdScripts.svelte.d.ts +16 -14
  11. package/dist/components/AdSlot/AdSlot.svelte +53 -31
  12. package/dist/components/AdSlot/AdSlot.svelte.d.ts +10 -21
  13. package/dist/components/AdSlot/{stories/docs/inline.md → InlineAd.mdx} +14 -4
  14. package/dist/components/AdSlot/InlineAd.stories.svelte +11 -14
  15. package/dist/components/AdSlot/InlineAd.stories.svelte.d.ts +17 -21
  16. package/dist/components/AdSlot/InlineAd.svelte +18 -7
  17. package/dist/components/AdSlot/InlineAd.svelte.d.ts +12 -20
  18. package/dist/components/AdSlot/{stories/docs/leaderboard.md → LeaderboardAd.mdx} +10 -0
  19. package/dist/components/AdSlot/LeaderboardAd.stories.svelte +13 -16
  20. package/dist/components/AdSlot/LeaderboardAd.stories.svelte.d.ts +17 -21
  21. package/dist/components/AdSlot/LeaderboardAd.svelte +45 -29
  22. package/dist/components/AdSlot/LeaderboardAd.svelte.d.ts +10 -19
  23. package/dist/components/AdSlot/OneTrust.svelte +39 -34
  24. package/dist/components/AdSlot/OneTrust.svelte.d.ts +16 -14
  25. package/dist/components/AdSlot/ResponsiveAd.svelte +69 -45
  26. package/dist/components/AdSlot/ResponsiveAd.svelte.d.ts +6 -18
  27. package/dist/components/AdSlot/{stories/docs/sponsorship.md → SponsorshipAd.mdx} +11 -1
  28. package/dist/components/AdSlot/SponsorshipAd.stories.svelte +11 -15
  29. package/dist/components/AdSlot/SponsorshipAd.stories.svelte.d.ts +17 -21
  30. package/dist/components/AdSlot/SponsorshipAd.svelte +21 -7
  31. package/dist/components/AdSlot/SponsorshipAd.svelte.d.ts +14 -22
  32. package/dist/components/Analytics/Analytics.mdx +73 -0
  33. package/dist/components/Analytics/Analytics.stories.svelte +11 -31
  34. package/dist/components/Analytics/Analytics.stories.svelte.d.ts +17 -21
  35. package/dist/components/Analytics/Analytics.svelte +27 -11
  36. package/dist/components/Analytics/Analytics.svelte.d.ts +14 -23
  37. package/dist/components/Article/Article.mdx +117 -0
  38. package/dist/components/Article/Article.stories.svelte +39 -40
  39. package/dist/components/Article/Article.stories.svelte.d.ts +17 -21
  40. package/dist/components/Article/Article.svelte +50 -20
  41. package/dist/components/Article/Article.svelte.d.ts +26 -34
  42. package/dist/components/BeforeAfter/BeforeAfter.mdx +111 -0
  43. package/dist/components/BeforeAfter/BeforeAfter.stories.svelte +38 -80
  44. package/dist/components/BeforeAfter/BeforeAfter.stories.svelte.d.ts +17 -30
  45. package/dist/components/BeforeAfter/BeforeAfter.svelte +240 -141
  46. package/dist/components/BeforeAfter/BeforeAfter.svelte.d.ts +60 -62
  47. package/dist/components/Block/Block.mdx +99 -0
  48. package/dist/components/Block/Block.stories.svelte +82 -72
  49. package/dist/components/Block/Block.stories.svelte.d.ts +17 -30
  50. package/dist/components/Block/Block.svelte +33 -11
  51. package/dist/components/Block/Block.svelte.d.ts +20 -25
  52. package/dist/components/BodyText/BodyText.mdx +115 -0
  53. package/dist/components/BodyText/BodyText.stories.svelte +28 -194
  54. package/dist/components/BodyText/BodyText.stories.svelte.d.ts +17 -21
  55. package/dist/components/BodyText/BodyText.svelte +14 -7
  56. package/dist/components/BodyText/BodyText.svelte.d.ts +11 -24
  57. package/dist/components/Byline/Byline.mdx +110 -0
  58. package/dist/components/Byline/Byline.stories.svelte +50 -26
  59. package/dist/components/Byline/Byline.stories.svelte.d.ts +17 -27
  60. package/dist/components/Byline/Byline.svelte +109 -43
  61. package/dist/components/Byline/Byline.svelte.d.ts +48 -48
  62. package/dist/components/DatawrapperChart/{stories/docs/component.md → DatawrapperChart.mdx} +20 -0
  63. package/dist/components/DatawrapperChart/DatawrapperChart.stories.svelte +31 -39
  64. package/dist/components/DatawrapperChart/DatawrapperChart.stories.svelte.d.ts +17 -27
  65. package/dist/components/DatawrapperChart/DatawrapperChart.svelte +94 -40
  66. package/dist/components/DatawrapperChart/DatawrapperChart.svelte.d.ts +42 -53
  67. package/dist/components/DocumentCloud/DocumentCloud.mdx +26 -0
  68. package/dist/components/DocumentCloud/DocumentCloud.stories.svelte +16 -25
  69. package/dist/components/DocumentCloud/DocumentCloud.stories.svelte.d.ts +17 -27
  70. package/dist/components/DocumentCloud/DocumentCloud.svelte +31 -10
  71. package/dist/components/DocumentCloud/DocumentCloud.svelte.d.ts +21 -30
  72. package/dist/components/EmbedPreviewerLink/EmbedPreviewerLink.mdx +19 -0
  73. package/dist/components/EmbedPreviewerLink/EmbedPreviewerLink.stories.svelte +11 -18
  74. package/dist/components/EmbedPreviewerLink/EmbedPreviewerLink.stories.svelte.d.ts +17 -21
  75. package/dist/components/EmbedPreviewerLink/EmbedPreviewerLink.svelte +9 -4
  76. package/dist/components/EmbedPreviewerLink/EmbedPreviewerLink.svelte.d.ts +5 -17
  77. package/dist/components/EndNotes/EndNotes.mdx +67 -0
  78. package/dist/components/EndNotes/EndNotes.stories.svelte +10 -15
  79. package/dist/components/EndNotes/EndNotes.stories.svelte.d.ts +17 -21
  80. package/dist/components/EndNotes/EndNotes.svelte +30 -14
  81. package/dist/components/EndNotes/EndNotes.svelte.d.ts +19 -31
  82. package/dist/components/FeaturePhoto/FeaturePhoto.mdx +72 -0
  83. package/dist/components/FeaturePhoto/FeaturePhoto.stories.svelte +24 -49
  84. package/dist/components/FeaturePhoto/FeaturePhoto.stories.svelte.d.ts +17 -31
  85. package/dist/components/FeaturePhoto/FeaturePhoto.svelte +108 -43
  86. package/dist/components/FeaturePhoto/FeaturePhoto.svelte.d.ts +57 -58
  87. package/dist/components/Framer/Framer.mdx +19 -0
  88. package/dist/components/Framer/Framer.stories.svelte +11 -18
  89. package/dist/components/Framer/Framer.stories.svelte.d.ts +17 -21
  90. package/dist/components/Framer/Framer.svelte +97 -69
  91. package/dist/components/Framer/Framer.svelte.d.ts +8 -30
  92. package/dist/components/Framer/Resizer/index.svelte +54 -41
  93. package/dist/components/Framer/Resizer/index.svelte.d.ts +7 -28
  94. package/dist/components/Framer/Typeahead/Search.svelte +101 -0
  95. package/dist/components/Framer/Typeahead/Search.svelte.d.ts +18 -0
  96. package/dist/components/Framer/Typeahead/fuzzy.d.ts +22 -9
  97. package/dist/components/Framer/Typeahead/fuzzy.js +70 -129
  98. package/dist/components/Framer/Typeahead/index.svelte +133 -121
  99. package/dist/components/Framer/Typeahead/index.svelte.d.ts +31 -138
  100. package/dist/components/Framer/stores.d.ts +1 -1
  101. package/dist/components/Framer/stores.js +0 -1
  102. package/dist/components/Framer/stories/docs/component.md +1 -1
  103. package/dist/components/Framer/uniqNames.d.ts +1 -1
  104. package/dist/components/Framer/uniqNames.js +45 -49
  105. package/dist/components/GraphicBlock/GraphicBlock.mdx +215 -0
  106. package/dist/components/GraphicBlock/GraphicBlock.stories.svelte +80 -60
  107. package/dist/components/GraphicBlock/GraphicBlock.stories.svelte.d.ts +17 -31
  108. package/dist/components/GraphicBlock/GraphicBlock.svelte +130 -69
  109. package/dist/components/GraphicBlock/GraphicBlock.svelte.d.ts +50 -65
  110. package/dist/components/GraphicBlock/components/AriaHidden.svelte +22 -0
  111. package/dist/components/GraphicBlock/components/AriaHidden.svelte.d.ts +12 -0
  112. package/dist/components/GraphicBlock/components/TextBlock.svelte +23 -0
  113. package/dist/components/GraphicBlock/components/TextBlock.svelte.d.ts +11 -0
  114. package/dist/components/GraphicBlock/{stories → demo}/ai2svelte/ai-chart.svelte +7 -11
  115. package/dist/components/GraphicBlock/demo/ai2svelte/ai-chart.svelte.d.ts +3 -0
  116. package/dist/components/Headline/Headline.mdx +150 -0
  117. package/dist/components/Headline/Headline.stories.svelte +78 -92
  118. package/dist/components/Headline/Headline.stories.svelte.d.ts +17 -31
  119. package/dist/components/Headline/Headline.svelte +108 -49
  120. package/dist/components/Headline/Headline.svelte.d.ts +42 -53
  121. package/dist/components/Headline/{stories → demo}/graphic.svelte +8 -9
  122. package/dist/components/Headline/demo/graphic.svelte.d.ts +6 -0
  123. package/dist/components/HeroHeadline/HeroHeadline.mdx +329 -0
  124. package/dist/components/HeroHeadline/HeroHeadline.stories.svelte +264 -0
  125. package/dist/components/HeroHeadline/HeroHeadline.stories.svelte.d.ts +19 -0
  126. package/dist/components/HeroHeadline/HeroHeadline.svelte +277 -0
  127. package/dist/components/HeroHeadline/HeroHeadline.svelte.d.ts +84 -0
  128. package/dist/components/HeroHeadline/{stories → demo}/graphics/crash.svelte +8 -15
  129. package/dist/components/HeroHeadline/demo/graphics/crash.svelte.d.ts +6 -0
  130. package/dist/components/HeroHeadline/{stories → demo}/graphics/quakemap.svelte +7 -7
  131. package/dist/components/HeroHeadline/demo/graphics/quakemap.svelte.d.ts +6 -0
  132. package/dist/components/InfoBox/InfoBox.mdx +122 -0
  133. package/dist/components/InfoBox/InfoBox.stories.svelte +86 -38
  134. package/dist/components/InfoBox/InfoBox.stories.svelte.d.ts +17 -31
  135. package/dist/components/InfoBox/InfoBox.svelte +69 -21
  136. package/dist/components/InfoBox/InfoBox.svelte.d.ts +41 -45
  137. package/dist/components/PaddingReset/PaddingReset.mdx +53 -0
  138. package/dist/components/PaddingReset/PaddingReset.stories.svelte +33 -33
  139. package/dist/components/PaddingReset/PaddingReset.stories.svelte.d.ts +17 -21
  140. package/dist/components/PaddingReset/PaddingReset.svelte +17 -7
  141. package/dist/components/PaddingReset/PaddingReset.svelte.d.ts +14 -29
  142. package/dist/components/PaddingReset/shark.jpg +0 -0
  143. package/dist/components/PhotoPack/PhotoPack.mdx +125 -0
  144. package/dist/components/PhotoPack/PhotoPack.stories.svelte +69 -108
  145. package/dist/components/PhotoPack/PhotoPack.stories.svelte.d.ts +17 -31
  146. package/dist/components/PhotoPack/PhotoPack.svelte +85 -43
  147. package/dist/components/PhotoPack/PhotoPack.svelte.d.ts +32 -52
  148. package/dist/components/PhotoPack/utils.d.ts +2 -0
  149. package/dist/components/PhotoPack/utils.js +17 -0
  150. package/dist/components/PymChild/PymChild.mdx +33 -0
  151. package/dist/components/PymChild/PymChild.stories.svelte +8 -17
  152. package/dist/components/PymChild/PymChild.stories.svelte.d.ts +17 -21
  153. package/dist/components/PymChild/PymChild.svelte +16 -9
  154. package/dist/components/PymChild/PymChild.svelte.d.ts +7 -18
  155. package/dist/components/PymChild/state.svelte.d.ts +6 -0
  156. package/dist/components/PymChild/state.svelte.js +1 -0
  157. package/dist/components/ReferralBlock/ReferralBlock.mdx +44 -0
  158. package/dist/components/ReferralBlock/ReferralBlock.stories.svelte +35 -45
  159. package/dist/components/ReferralBlock/ReferralBlock.stories.svelte.d.ts +17 -35
  160. package/dist/components/ReferralBlock/ReferralBlock.svelte +113 -66
  161. package/dist/components/ReferralBlock/ReferralBlock.svelte.d.ts +36 -41
  162. package/dist/components/ReutersGraphicsLogo/ReutersGraphicsLogo.mdx +21 -0
  163. package/dist/components/ReutersGraphicsLogo/ReutersGraphicsLogo.stories.svelte +12 -17
  164. package/dist/components/ReutersGraphicsLogo/ReutersGraphicsLogo.stories.svelte.d.ts +17 -21
  165. package/dist/components/ReutersGraphicsLogo/ReutersGraphicsLogo.svelte +15 -3
  166. package/dist/components/ReutersGraphicsLogo/ReutersGraphicsLogo.svelte.d.ts +11 -20
  167. package/dist/components/ReutersLogo/ReutersLogo.mdx +19 -0
  168. package/dist/components/ReutersLogo/ReutersLogo.stories.svelte +12 -20
  169. package/dist/components/ReutersLogo/ReutersLogo.stories.svelte.d.ts +17 -29
  170. package/dist/components/ReutersLogo/ReutersLogo.svelte +30 -19
  171. package/dist/components/ReutersLogo/ReutersLogo.svelte.d.ts +11 -20
  172. package/dist/components/SEO/SEO.mdx +80 -0
  173. package/dist/components/SEO/SEO.stories.svelte +18 -36
  174. package/dist/components/SEO/SEO.stories.svelte.d.ts +16 -22
  175. package/dist/components/SEO/SEO.svelte +151 -91
  176. package/dist/components/SEO/SEO.svelte.d.ts +53 -71
  177. package/dist/components/Scroller/Background.svelte +14 -10
  178. package/dist/components/Scroller/Background.svelte.d.ts +8 -20
  179. package/dist/components/Scroller/Embedded/Background.svelte +13 -9
  180. package/dist/components/Scroller/Embedded/Background.svelte.d.ts +7 -19
  181. package/dist/components/Scroller/Embedded/Foreground.svelte +16 -11
  182. package/dist/components/Scroller/Embedded/Foreground.svelte.d.ts +6 -18
  183. package/dist/components/Scroller/Embedded/index.svelte +18 -5
  184. package/dist/components/Scroller/Embedded/index.svelte.d.ts +8 -19
  185. package/dist/components/Scroller/Foreground.svelte +14 -9
  186. package/dist/components/Scroller/Foreground.svelte.d.ts +5 -17
  187. package/dist/components/Scroller/Scroller.mdx +279 -0
  188. package/dist/components/Scroller/Scroller.stories.svelte +107 -100
  189. package/dist/components/Scroller/Scroller.stories.svelte.d.ts +17 -38
  190. package/dist/components/Scroller/Scroller.svelte +121 -44
  191. package/dist/components/Scroller/Scroller.svelte.d.ts +66 -83
  192. package/dist/components/Scroller/ScrollerBase/index.svelte +267 -0
  193. package/dist/components/Scroller/ScrollerBase/index.svelte.d.ts +32 -0
  194. package/dist/components/Scroller/demo/components/ai2svelte/ai-foreground.svelte +118 -0
  195. package/dist/components/Scroller/demo/components/ai2svelte/ai-foreground.svelte.d.ts +6 -0
  196. package/dist/components/Scroller/{stories → demo}/components/ai2svelte/ai-scroller-1.svelte +4 -14
  197. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-1.svelte.d.ts +3 -0
  198. package/dist/components/Scroller/{stories → demo}/components/ai2svelte/ai-scroller-2.svelte +3 -3
  199. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-2.svelte.d.ts +3 -0
  200. package/dist/components/Scroller/{stories → demo}/components/ai2svelte/ai-scroller-3.svelte +3 -3
  201. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-3.svelte.d.ts +3 -0
  202. package/dist/components/Scroller/demo/components/ai2svelte/images/Body-issues-key-xs.png +0 -0
  203. package/dist/components/Scroller/demo/components/basic/InteractiveForeground.svelte +17 -0
  204. package/dist/components/Scroller/demo/components/basic/InteractiveForeground.svelte.d.ts +6 -0
  205. package/dist/components/Scroller/demo/components/basic/Step.svelte +16 -0
  206. package/dist/components/Scroller/demo/components/basic/Step.svelte.d.ts +6 -0
  207. package/dist/components/SearchInput/SearchInput.mdx +29 -0
  208. package/dist/components/SearchInput/SearchInput.stories.svelte +20 -15
  209. package/dist/components/SearchInput/SearchInput.stories.svelte.d.ts +17 -21
  210. package/dist/components/SearchInput/SearchInput.svelte +31 -20
  211. package/dist/components/SearchInput/SearchInput.svelte.d.ts +9 -23
  212. package/dist/components/SearchInput/components/MagnifyingGlass.svelte.d.ts +26 -0
  213. package/dist/components/SearchInput/components/X.svelte.d.ts +26 -0
  214. package/dist/components/SimpleTimeline/SimpleTimeline.mdx +119 -0
  215. package/dist/components/SimpleTimeline/SimpleTimeline.stories.svelte +28 -36
  216. package/dist/components/SimpleTimeline/SimpleTimeline.stories.svelte.d.ts +17 -29
  217. package/dist/components/SimpleTimeline/SimpleTimeline.svelte +51 -15
  218. package/dist/components/SimpleTimeline/SimpleTimeline.svelte.d.ts +34 -44
  219. package/dist/components/SiteFooter/CompanyLinks.svelte +34 -6
  220. package/dist/components/SiteFooter/CompanyLinks.svelte.d.ts +11 -24
  221. package/dist/components/SiteFooter/LegalLinks.svelte +42 -9
  222. package/dist/components/SiteFooter/LegalLinks.svelte.d.ts +18 -24
  223. package/dist/components/SiteFooter/QuickLinks.svelte +60 -15
  224. package/dist/components/SiteFooter/QuickLinks.svelte.d.ts +27 -24
  225. package/dist/components/SiteFooter/SiteFooter.mdx +45 -0
  226. package/dist/components/SiteFooter/SiteFooter.stories.svelte +11 -31
  227. package/dist/components/SiteFooter/SiteFooter.stories.svelte.d.ts +17 -21
  228. package/dist/components/SiteFooter/SiteFooter.svelte +45 -31
  229. package/dist/components/SiteFooter/SiteFooter.svelte.d.ts +9 -20
  230. package/dist/components/SiteFooter/data.json +2 -2
  231. package/dist/components/SiteFooter/svgs/Facebook.svelte +6 -2
  232. package/dist/components/SiteFooter/svgs/Facebook.svelte.d.ts +5 -24
  233. package/dist/components/SiteFooter/svgs/Graphics.svelte.d.ts +22 -21
  234. package/dist/components/SiteFooter/svgs/Instagram.svelte +6 -2
  235. package/dist/components/SiteFooter/svgs/Instagram.svelte.d.ts +5 -24
  236. package/dist/components/SiteFooter/svgs/LinkedIn.svelte +6 -2
  237. package/dist/components/SiteFooter/svgs/LinkedIn.svelte.d.ts +5 -24
  238. package/dist/components/SiteFooter/svgs/Pictures.svelte.d.ts +22 -21
  239. package/dist/components/SiteFooter/svgs/Twitter.svelte +6 -2
  240. package/dist/components/SiteFooter/svgs/Twitter.svelte.d.ts +5 -24
  241. package/dist/components/SiteFooter/svgs/Videos.svelte.d.ts +22 -21
  242. package/dist/components/SiteFooter/svgs/YouTube.svelte +6 -2
  243. package/dist/components/SiteFooter/svgs/YouTube.svelte.d.ts +5 -24
  244. package/dist/components/SiteHeader/MobileMenu/index.svelte +45 -12
  245. package/dist/components/SiteHeader/MobileMenu/index.svelte.d.ts +7 -28
  246. package/dist/components/SiteHeader/NavBar/DownArrow.svelte +7 -3
  247. package/dist/components/SiteHeader/NavBar/DownArrow.svelte.d.ts +5 -24
  248. package/dist/components/SiteHeader/NavBar/NavDropdown/MoreDropdown.svelte +11 -7
  249. package/dist/components/SiteHeader/NavBar/NavDropdown/MoreDropdown.svelte.d.ts +5 -25
  250. package/dist/components/SiteHeader/NavBar/NavDropdown/SectionDropdown.svelte +13 -9
  251. package/dist/components/SiteHeader/NavBar/NavDropdown/SectionDropdown.svelte.d.ts +5 -26
  252. package/dist/components/SiteHeader/NavBar/NavDropdown/Spinner/index.svelte +1 -0
  253. package/dist/components/SiteHeader/NavBar/NavDropdown/Spinner/index.svelte.d.ts +22 -21
  254. package/dist/components/SiteHeader/NavBar/NavDropdown/StoryCard/index.svelte +10 -20
  255. package/dist/components/SiteHeader/NavBar/NavDropdown/StoryCard/index.svelte.d.ts +4 -24
  256. package/dist/components/SiteHeader/NavBar/NavDropdown/StoryCard/time.d.ts +2 -1
  257. package/dist/components/SiteHeader/NavBar/NavDropdown/StoryCard/time.js +36 -45
  258. package/dist/components/SiteHeader/NavBar/NavDropdown/index.svelte +65 -22
  259. package/dist/components/SiteHeader/NavBar/NavDropdown/index.svelte.d.ts +7 -28
  260. package/dist/components/SiteHeader/NavBar/index.svelte +46 -40
  261. package/dist/components/SiteHeader/NavBar/index.svelte.d.ts +5 -25
  262. package/dist/components/SiteHeader/NavBar/utils/index.d.ts +1 -1
  263. package/dist/components/SiteHeader/NavBar/utils/index.js +1 -2
  264. package/dist/components/SiteHeader/SiteHeader.mdx +33 -0
  265. package/dist/components/SiteHeader/SiteHeader.stories.svelte +27 -26
  266. package/dist/components/SiteHeader/SiteHeader.stories.svelte.d.ts +17 -28
  267. package/dist/components/SiteHeader/SiteHeader.svelte +64 -39
  268. package/dist/components/SiteHeader/SiteHeader.svelte.d.ts +3 -16
  269. package/dist/components/SiteHeader/scss/_grids.scss +49 -17
  270. package/dist/components/SiteHeader/svgs/Close.svelte.d.ts +22 -21
  271. package/dist/components/SiteHeader/svgs/Menu.svelte +6 -2
  272. package/dist/components/SiteHeader/svgs/Menu.svelte.d.ts +5 -24
  273. package/dist/components/SiteHeadline/SiteHeadline.mdx +66 -0
  274. package/dist/components/SiteHeadline/SiteHeadline.stories.svelte +17 -35
  275. package/dist/components/SiteHeadline/SiteHeadline.stories.svelte.d.ts +17 -36
  276. package/dist/components/SiteHeadline/SiteHeadline.svelte +59 -26
  277. package/dist/components/SiteHeadline/SiteHeadline.svelte.d.ts +31 -54
  278. package/dist/components/Spinner/Spinner.mdx +25 -0
  279. package/dist/components/Spinner/Spinner.stories.svelte +17 -25
  280. package/dist/components/Spinner/Spinner.stories.svelte.d.ts +17 -58
  281. package/dist/components/Spinner/Spinner.svelte +30 -6
  282. package/dist/components/Spinner/Spinner.svelte.d.ts +23 -30
  283. package/dist/components/Table/Table.mdx +177 -0
  284. package/dist/components/Table/Table.stories.svelte +56 -79
  285. package/dist/components/Table/Table.stories.svelte.d.ts +17 -27
  286. package/dist/components/Table/Table.svelte +201 -134
  287. package/dist/components/Table/Table.svelte.d.ts +50 -94
  288. package/dist/components/Table/components/LeftArrow.svelte.d.ts +26 -0
  289. package/dist/components/Table/{Pagination.svelte → components/Pagination.svelte} +48 -21
  290. package/dist/components/Table/components/Pagination.svelte.d.ts +21 -0
  291. package/dist/components/Table/components/RightArrow.svelte.d.ts +26 -0
  292. package/dist/components/Table/{Select.svelte → components/Select.svelte} +25 -13
  293. package/dist/components/Table/components/Select.svelte.d.ts +16 -0
  294. package/dist/components/Table/{SortArrow.svelte → components/SortArrow.svelte} +19 -4
  295. package/dist/components/Table/components/SortArrow.svelte.d.ts +16 -0
  296. package/dist/components/Table/utils.d.ts +39 -3
  297. package/dist/components/Table/utils.js +80 -26
  298. package/dist/components/Theme/@types/component.d.ts +5 -6
  299. package/dist/components/Theme/Theme.mdx +164 -0
  300. package/dist/components/Theme/Theme.stories.svelte +55 -57
  301. package/dist/components/Theme/Theme.stories.svelte.d.ts +17 -30
  302. package/dist/components/Theme/Theme.svelte +45 -11
  303. package/dist/components/Theme/Theme.svelte.d.ts +19 -28
  304. package/dist/components/Theme/demo/ThemedPage.svelte +36 -0
  305. package/dist/components/Theme/demo/ThemedPage.svelte.d.ts +26 -0
  306. package/dist/components/Theme/themes/common.d.ts +26 -1
  307. package/dist/components/Theme/themes/dark.d.ts +12 -1
  308. package/dist/components/Theme/themes/light.d.ts +12 -1
  309. package/dist/components/Theme/utils/flatten.d.ts +1 -1
  310. package/dist/components/Theme/utils/flatten.js +27 -33
  311. package/dist/components/Theme/utils/merge.d.ts +2 -1
  312. package/dist/components/Theme/utils/merge.js +16 -15
  313. package/dist/components/ToolsHeader/ToolsHeader.mdx +23 -0
  314. package/dist/components/ToolsHeader/ToolsHeader.stories.svelte +10 -16
  315. package/dist/components/ToolsHeader/ToolsHeader.stories.svelte.d.ts +17 -21
  316. package/dist/components/ToolsHeader/ToolsHeader.svelte +57 -16
  317. package/dist/components/ToolsHeader/ToolsHeader.svelte.d.ts +34 -38
  318. package/dist/components/Video/Video.mdx +155 -0
  319. package/dist/components/Video/Video.stories.svelte +72 -56
  320. package/dist/components/Video/Video.stories.svelte.d.ts +17 -21
  321. package/dist/components/Video/Video.svelte +277 -192
  322. package/dist/components/Video/Video.svelte.d.ts +53 -77
  323. package/dist/components/Video/types.d.ts +1 -0
  324. package/dist/components/Video/types.js +1 -0
  325. package/dist/components/Video/utils.d.ts +3 -0
  326. package/dist/components/Video/utils.js +13 -0
  327. package/dist/components/Visible/Visible.mdx +33 -0
  328. package/dist/components/Visible/Visible.stories.svelte +18 -22
  329. package/dist/components/Visible/Visible.stories.svelte.d.ts +17 -21
  330. package/dist/components/Visible/Visible.svelte +74 -37
  331. package/dist/components/Visible/Visible.svelte.d.ts +23 -31
  332. package/dist/docs/contributing/component-guidelines.mdx +19 -48
  333. package/dist/docs/contributing/quickstart.mdx +2 -12
  334. package/dist/docs/contributing/writing-component-stories.mdx +5 -6
  335. package/dist/docs/docs-components/ThemeBuilder/Customiser/Value.jsx +2 -1
  336. package/dist/docs/docs-components/ThemeBuilder/ThemeBuilder.jsx +1 -1
  337. package/dist/docs/guides/archieml.mdx +18 -18
  338. package/dist/docs/guides/graphics-kit.mdx +5 -5
  339. package/dist/docs/guides/svelte-components.mdx +9 -9
  340. package/dist/docs/intro.mdx +2 -2
  341. package/dist/docs/styles/intro.mdx +1 -1
  342. package/dist/docs/theming/css-variables.mdx +7 -7
  343. package/dist/docs/utils/css-to-js/index.d.ts +2 -0
  344. package/dist/docs/utils/css-to-js/index.js +388 -0
  345. package/dist/docs/utils/parseCss.d.ts +3 -3
  346. package/dist/docs/utils/parseCss.js +37 -43
  347. package/dist/index.d.ts +43 -45
  348. package/dist/index.js +5 -12
  349. package/dist/journalize.d.ts +19 -0
  350. package/dist/scss/tokens/text/mixins/_font-family.scss +2 -1
  351. package/dist/utils/index.d.ts +6 -0
  352. package/dist/utils/index.js +12 -0
  353. package/package.json +59 -77
  354. package/dist/components/Analytics/stories/docs/component.md +0 -11
  355. package/dist/components/Analytics/stories/docs/environments.md +0 -17
  356. package/dist/components/Analytics/stories/docs/multipage.md +0 -31
  357. package/dist/components/Article/stories/docs/component.md +0 -13
  358. package/dist/components/Article/stories/docs/customWellWidths.md +0 -87
  359. package/dist/components/BeforeAfter/stories/docs/ariaDescriptions.md +0 -35
  360. package/dist/components/BeforeAfter/stories/docs/component.md +0 -15
  361. package/dist/components/BeforeAfter/stories/docs/withOverlays.md +0 -33
  362. package/dist/components/Block/stories/docs/component.md +0 -15
  363. package/dist/components/Block/stories/docs/customLayouts.md +0 -13
  364. package/dist/components/Block/stories/docs/snapWidths.md +0 -50
  365. package/dist/components/BodyText/stories/docs/component.md +0 -46
  366. package/dist/components/Byline/stories/docs/component.md +0 -19
  367. package/dist/components/DatawrapperChart/stories/docs/withChatter.md +0 -5
  368. package/dist/components/DocumentCloud/stories/docs/component.md +0 -17
  369. package/dist/components/EmbedPreviewerLink/stories/docs/component.md +0 -11
  370. package/dist/components/EndNotes/stories/docs/component.md +0 -24
  371. package/dist/components/FeaturePhoto/stories/docs/archieML.md +0 -37
  372. package/dist/components/FeaturePhoto/stories/docs/component.md +0 -16
  373. package/dist/components/FeaturePhoto/stories/docs/missingAltText.md +0 -1
  374. package/dist/components/GraphicBlock/AriaHidden.svelte +0 -10
  375. package/dist/components/GraphicBlock/AriaHidden.svelte.d.ts +0 -22
  376. package/dist/components/GraphicBlock/TextBlock.svelte +0 -11
  377. package/dist/components/GraphicBlock/TextBlock.svelte.d.ts +0 -21
  378. package/dist/components/GraphicBlock/stories/ai2svelte/ai-chart.svelte.d.ts +0 -25
  379. package/dist/components/GraphicBlock/stories/docs/ai2svelte.md +0 -19
  380. package/dist/components/GraphicBlock/stories/docs/archieML.md +0 -40
  381. package/dist/components/GraphicBlock/stories/docs/aria.md +0 -56
  382. package/dist/components/GraphicBlock/stories/docs/component.md +0 -20
  383. package/dist/components/GraphicBlock/stories/docs/customText.md +0 -14
  384. package/dist/components/Headline/stories/docs/component.md +0 -13
  385. package/dist/components/Headline/stories/docs/customHed.md +0 -31
  386. package/dist/components/Headline/stories/docs/withByline.md +0 -13
  387. package/dist/components/Headline/stories/docs/withCrownGraphic.md +0 -24
  388. package/dist/components/Headline/stories/docs/withCrownImage.md +0 -21
  389. package/dist/components/Headline/stories/docs/withDek.md +0 -11
  390. package/dist/components/Headline/stories/graphic.svelte.d.ts +0 -25
  391. package/dist/components/HeroHeadline/Hero.stories.svelte +0 -322
  392. package/dist/components/HeroHeadline/Hero.stories.svelte.d.ts +0 -42
  393. package/dist/components/HeroHeadline/Hero.svelte +0 -193
  394. package/dist/components/HeroHeadline/Hero.svelte.d.ts +0 -75
  395. package/dist/components/HeroHeadline/stories/docs/backgroundGraphic.md +0 -84
  396. package/dist/components/HeroHeadline/stories/docs/backgroundVideo.md +0 -51
  397. package/dist/components/HeroHeadline/stories/docs/component.md +0 -20
  398. package/dist/components/HeroHeadline/stories/docs/customHed.md +0 -43
  399. package/dist/components/HeroHeadline/stories/docs/inlineGraphic.md +0 -38
  400. package/dist/components/HeroHeadline/stories/docs/inlinePhoto.md +0 -34
  401. package/dist/components/HeroHeadline/stories/docs/inlineVideo.md +0 -34
  402. package/dist/components/HeroHeadline/stories/docs/transparentHeader.md +0 -17
  403. package/dist/components/HeroHeadline/stories/graphics/crash.svelte.d.ts +0 -25
  404. package/dist/components/HeroHeadline/stories/graphics/quakemap.svelte.d.ts +0 -25
  405. package/dist/components/InfoBox/stories/docs/component.md +0 -17
  406. package/dist/components/Markdown/Markdown.stories.svelte +0 -28
  407. package/dist/components/Markdown/Markdown.stories.svelte.d.ts +0 -23
  408. package/dist/components/Markdown/Markdown.svelte +0 -34
  409. package/dist/components/Markdown/Markdown.svelte.d.ts +0 -20
  410. package/dist/components/Markdown/stores.d.ts +0 -23
  411. package/dist/components/Markdown/stores.js +0 -24
  412. package/dist/components/Markdown/stories/docs/component.md +0 -39
  413. package/dist/components/PaddingReset/stories/docs/component.md +0 -35
  414. package/dist/components/PhotoCarousel/PhotoCarousel.stories.svelte +0 -72
  415. package/dist/components/PhotoCarousel/PhotoCarousel.stories.svelte.d.ts +0 -29
  416. package/dist/components/PhotoCarousel/PhotoCarousel.svelte +0 -202
  417. package/dist/components/PhotoCarousel/PhotoCarousel.svelte.d.ts +0 -78
  418. package/dist/components/PhotoCarousel/stories/docs/component.md +0 -21
  419. package/dist/components/PhotoCarousel/stories/docs/withCustom.md +0 -27
  420. package/dist/components/PhotoCarousel/stories/photos.json +0 -72
  421. package/dist/components/PhotoPack/stories/docs/archieML.md +0 -63
  422. package/dist/components/PhotoPack/stories/docs/component.md +0 -45
  423. package/dist/components/PhotoPack/stories/docs/missingAltText.md +0 -1
  424. package/dist/components/PymChild/stores.d.ts +0 -1
  425. package/dist/components/PymChild/stores.js +0 -3
  426. package/dist/components/PymChild/stories/docs/component.md +0 -28
  427. package/dist/components/ReferralBlock/stories/docs/collection.md +0 -7
  428. package/dist/components/ReferralBlock/stories/docs/component.md +0 -15
  429. package/dist/components/ReutersGraphicsLogo/stories/docs/component.md +0 -11
  430. package/dist/components/ReutersLogo/stories/docs/component.md +0 -9
  431. package/dist/components/SEO/stories/docs/archieML.md +0 -36
  432. package/dist/components/SEO/stories/docs/component.md +0 -26
  433. package/dist/components/Scroller/stories/components/ai2svelte/ai-scroller-1.svelte.d.ts +0 -25
  434. package/dist/components/Scroller/stories/components/ai2svelte/ai-scroller-2.svelte.d.ts +0 -25
  435. package/dist/components/Scroller/stories/components/ai2svelte/ai-scroller-3.svelte.d.ts +0 -25
  436. package/dist/components/Scroller/stories/components/basic/InteractiveForeground.svelte +0 -13
  437. package/dist/components/Scroller/stories/components/basic/InteractiveForeground.svelte.d.ts +0 -25
  438. package/dist/components/Scroller/stories/components/basic/Step.svelte +0 -12
  439. package/dist/components/Scroller/stories/components/basic/Step.svelte.d.ts +0 -25
  440. package/dist/components/Scroller/stories/docs/ai2svelte.md +0 -42
  441. package/dist/components/Scroller/stories/docs/archieML.md +0 -87
  442. package/dist/components/Scroller/stories/docs/component.md +0 -39
  443. package/dist/components/Scroller/stories/docs/interactive.md +0 -36
  444. package/dist/components/SearchInput/MagnifyingGlass.svelte.d.ts +0 -25
  445. package/dist/components/SearchInput/X.svelte.d.ts +0 -25
  446. package/dist/components/SearchInput/stories/docs/component.md +0 -17
  447. package/dist/components/SimpleTimeline/stories/docs/component.md +0 -24
  448. package/dist/components/SiteFooter/stories/docs/component.md +0 -11
  449. package/dist/components/SiteFooter/stories/docs/darkTheme.md +0 -11
  450. package/dist/components/SiteFooter/stories/docs/removeReferrals.md +0 -9
  451. package/dist/components/SiteHeader/stories/docs/component.md +0 -11
  452. package/dist/components/SiteHeader/stories/docs/darkTheme.md +0 -11
  453. package/dist/components/SiteHeadline/stories/docs/archieML.md +0 -26
  454. package/dist/components/SiteHeadline/stories/docs/component.md +0 -21
  455. package/dist/components/Spinner/stories/docs/component.md +0 -15
  456. package/dist/components/Table/LeftArrow.svelte.d.ts +0 -25
  457. package/dist/components/Table/Pagination.svelte.d.ts +0 -33
  458. package/dist/components/Table/RightArrow.svelte.d.ts +0 -25
  459. package/dist/components/Table/Select.svelte.d.ts +0 -28
  460. package/dist/components/Table/SortArrow.svelte.d.ts +0 -22
  461. package/dist/components/Table/stories/docs/both.md +0 -13
  462. package/dist/components/Table/stories/docs/component.md +0 -14
  463. package/dist/components/Table/stories/docs/filter.md +0 -11
  464. package/dist/components/Table/stories/docs/format.md +0 -21
  465. package/dist/components/Table/stories/docs/metadata.md +0 -14
  466. package/dist/components/Table/stories/docs/paginate.md +0 -14
  467. package/dist/components/Table/stories/docs/search.md +0 -11
  468. package/dist/components/Table/stories/docs/sort.md +0 -14
  469. package/dist/components/Table/stories/docs/style.md +0 -23
  470. package/dist/components/Table/stories/docs/truncate.md +0 -11
  471. package/dist/components/Theme/stories/ThemedPage.svelte +0 -43
  472. package/dist/components/Theme/stories/ThemedPage.svelte.d.ts +0 -25
  473. package/dist/components/Theme/stories/docs/component.md +0 -15
  474. package/dist/components/Theme/stories/docs/customise-font.md +0 -52
  475. package/dist/components/Theme/stories/docs/customise.md +0 -28
  476. package/dist/components/Theme/stories/docs/gfonts.png +0 -0
  477. package/dist/components/Theme/stories/docs/inheritance.md +0 -17
  478. package/dist/components/Theme/stories/docs/pattern.md +0 -40
  479. package/dist/components/ToolsHeader/stories/docs/component.md +0 -13
  480. package/dist/components/Video/Controls.svelte +0 -75
  481. package/dist/components/Video/Controls.svelte.d.ts +0 -47
  482. package/dist/components/Video/docs.svx +0 -275
  483. package/dist/components/Video/stories/docs/component.md +0 -15
  484. package/dist/components/Video/stories/docs/controls.md +0 -38
  485. package/dist/components/Video/stories/docs/playAndLoop.md +0 -28
  486. package/dist/components/Video/stories/docs/withSound.md +0 -36
  487. package/dist/components/Visible/stories/docs/component.md +0 -19
  488. package/dist/components/Visible/stories/snippets/default.svelte +0 -11
  489. package/dist/components/Visible/stories/snippets/default.svelte.d.ts +0 -25
  490. package/dist/docs/contributing/story-recipes/basic-story.mdx +0 -77
  491. package/dist/docs/contributing/story-recipes/source-code.png +0 -0
  492. package/dist/docs/contributing/story-recipes/story-with-custom-controls.mdx +0 -46
  493. package/dist/docs/contributing/story-recipes/story-with-custom-docs.mdx +0 -130
  494. package/dist/docs/contributing/story-recipes/story-with-media.mdx +0 -50
  495. package/dist/docs/contributing/writing-docs-stories.mdx +0 -35
  496. package/dist/docs/utils/withParams.d.ts +0 -15
  497. package/dist/docs/utils/withParams.js +0 -46
  498. /package/dist/components/BeforeAfter/{stories → images}/myrne-after.jpg +0 -0
  499. /package/dist/components/BeforeAfter/{stories → images}/myrne-before.jpg +0 -0
  500. /package/dist/components/FeaturePhoto/{stories → images}/shark.jpg +0 -0
  501. /package/dist/components/GraphicBlock/{stories → demo}/imgs/ai-chart-md.png +0 -0
  502. /package/dist/components/GraphicBlock/{stories → demo}/imgs/ai-chart-sm.png +0 -0
  503. /package/dist/components/GraphicBlock/{stories → demo}/imgs/ai-chart-xs.png +0 -0
  504. /package/dist/components/GraphicBlock/{stories → demo}/placeholder.png +0 -0
  505. /package/dist/components/Headline/{stories → demo}/crown.png +0 -0
  506. /package/dist/components/Headline/{stories → demo}/graphic-lg.png +0 -0
  507. /package/dist/components/Headline/{stories → demo}/graphic-md.png +0 -0
  508. /package/dist/components/Headline/{stories → demo}/graphic-sm.png +0 -0
  509. /package/dist/components/Headline/{stories → demo}/graphic-xl.png +0 -0
  510. /package/dist/components/Headline/{stories → demo}/graphic-xs.png +0 -0
  511. /package/dist/components/HeroHeadline/{stories → demo}/eurovis.jpeg +0 -0
  512. /package/dist/components/HeroHeadline/{stories → demo}/graphics/CRASH_1-lg.jpeg +0 -0
  513. /package/dist/components/HeroHeadline/{stories → demo}/graphics/CRASH_1-md.jpeg +0 -0
  514. /package/dist/components/HeroHeadline/{stories → demo}/graphics/CRASH_1-sm.jpeg +0 -0
  515. /package/dist/components/HeroHeadline/{stories → demo}/graphics/CRASH_1-xl.jpeg +0 -0
  516. /package/dist/components/HeroHeadline/{stories → demo}/graphics/CRASH_1-xl_copy.jpeg +0 -0
  517. /package/dist/components/HeroHeadline/{stories → demo}/graphics/CRASH_1-xs.jpeg +0 -0
  518. /package/dist/components/HeroHeadline/{stories → demo}/graphics/quake-map-top-lg.jpeg +0 -0
  519. /package/dist/components/HeroHeadline/{stories → demo}/graphics/quake-map-top-md.jpeg +0 -0
  520. /package/dist/components/HeroHeadline/{stories → demo}/graphics/quake-map-top-sm.jpeg +0 -0
  521. /package/dist/components/HeroHeadline/{stories → demo}/graphics/quake-map-top-xl.jpeg +0 -0
  522. /package/dist/components/HeroHeadline/{stories → demo}/graphics/quake-map-top-xs.jpeg +0 -0
  523. /package/dist/components/HeroHeadline/{stories → demo}/polar.jpg +0 -0
  524. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-1-lg.png +0 -0
  525. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-1-md.png +0 -0
  526. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-1-sm.png +0 -0
  527. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-1-xl.png +0 -0
  528. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-1-xs.png +0 -0
  529. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-2-lg.png +0 -0
  530. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-2-md.png +0 -0
  531. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-2-sm.png +0 -0
  532. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-2-xl.png +0 -0
  533. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-2-xs.png +0 -0
  534. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-3-lg.png +0 -0
  535. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-3-md.png +0 -0
  536. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-3-sm.png +0 -0
  537. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-3-xl.png +0 -0
  538. /package/dist/components/Scroller/{stories → demo}/components/ai2svelte/images/step-3-xs.png +0 -0
  539. /package/dist/components/SearchInput/{MagnifyingGlass.svelte → components/MagnifyingGlass.svelte} +0 -0
  540. /package/dist/components/SearchInput/{X.svelte → components/X.svelte} +0 -0
  541. /package/dist/components/Table/{LeftArrow.svelte → components/LeftArrow.svelte} +0 -0
  542. /package/dist/components/Table/{RightArrow.svelte → components/RightArrow.svelte} +0 -0
  543. /package/dist/components/Table/{stories → demo}/homeRuns.json +0 -0
  544. /package/dist/components/Table/{stories → demo}/pressFreedom.json +0 -0
  545. /package/dist/components/Table/{stories → demo}/richestWomen.json +0 -0
  546. /package/dist/components/Video/{stories/videos → demo}/silent-video.mp4 +0 -0
  547. /package/dist/components/Video/{stories/videos → demo}/sound-video.mp4 +0 -0
@@ -1,232 +1,317 @@
1
1
  <!-- @component `Video` [Read the docs.](https://reuters-graphics.github.io/graphics-components/?path=/docs/components-multimedia-video--docs) -->
2
- <script>import IntersectionObserver from "svelte-intersection-observer";
3
- import Controls from "./Controls.svelte";
4
- import GraphicBlock from "../GraphicBlock/GraphicBlock.svelte";
5
- export let src;
6
- export let poster = "";
7
- export let hidden = true;
8
- export let ariaDescription = null;
9
- let cls = "";
10
- export { cls as class };
11
- export let title = null;
12
- export let notes = null;
13
- export let description = null;
14
- export let width = "normal";
15
- export let textWidth = "normal";
16
- export let preloadVideo = "auto";
17
- export let loopVideo = true;
18
- export let muteVideo = true;
19
- export let allowSoundToAutoplay = false;
20
- export let playVideoWhenInView = true;
21
- export let playVideoThreshold = 0.5;
22
- export let possibleToPlayPause = true;
23
- export let showControls = true;
24
- export let hoverToSeeControls = false;
25
- export let separateReplayIcon = false;
26
- export let controlsColour = "#333";
27
- export let controlsOpacity = 0.5;
28
- $: interactiveControlsOpacity = 0;
29
- export let controlsPosition = "top left";
30
- let time = 0;
31
- let duration;
32
- let paused = true;
33
- let clickedOnPauseBtn = false;
34
- $: resetCondition = time >= duration;
35
- let heightVideo;
36
- let widthVideo;
37
- let heightVideoContainer;
38
- let widthVideoContainer;
39
- const controlsBorderOffset = 50;
40
- let intersecting;
41
- let element;
42
- let videoElement;
43
- let interactedWithDom = false;
44
- const setInteractedWithDom = () => {
45
- interactedWithDom = true;
46
- };
47
- $: if (playVideoWhenInView && intersecting && muteVideo) paused = false;
48
- $: if (playVideoWhenInView && !intersecting) paused = true;
49
- $: if (allowSoundToAutoplay && playVideoWhenInView && intersecting && !muteVideo && interactedWithDom && !clickedOnPauseBtn) {
50
- paused = false;
51
- }
52
- $: if (allowSoundToAutoplay && !muteVideo && !interactedWithDom) {
53
- paused = true;
54
- }
55
- $: if (!possibleToPlayPause) showControls = true;
56
- const pausePlayEvent = (e) => {
57
- const fwdPaused = e.detail.paused;
58
- const fwdClickedOnPauseBtn = e.detail.clickedOnPauseBtn;
59
- paused = fwdPaused;
60
- clickedOnPauseBtn = fwdClickedOnPauseBtn;
61
- };
62
- if (hidden && !ariaDescription) {
63
- console.warn(
64
- "Must provide aria description for video components if hidden is true."
2
+ <script lang="ts">
3
+ import IntersectionObserver from 'svelte-intersection-observer';
4
+ import GraphicBlock from '../GraphicBlock/GraphicBlock.svelte';
5
+
6
+ // Fa icons
7
+ import Fa from 'svelte-fa';
8
+ import { faReply, faPlay, faPause } from '@fortawesome/free-solid-svg-icons';
9
+
10
+ // types
11
+ import type { ContainerWidth } from '../@types/global';
12
+ import type { Snippet } from 'svelte';
13
+ import type { ControlsPosition } from './types';
14
+ import { getButtonPosition } from './utils';
15
+
16
+ interface Props {
17
+ /** Video source */
18
+ src: string;
19
+ /** Image to be shown while the video is downloading */
20
+ poster?: string;
21
+ /** ARIA description, passed in as a markdown string. */
22
+ ariaDescription: string;
23
+ /** Add extra classes to the block tag to target it with custom CSS. */
24
+ class?: string;
25
+ /** Title of the graphic */
26
+ title?: string;
27
+ /** Notes to the graphic, passed in as a markdown string OR a custom snippet. */
28
+ notes?: string | Snippet;
29
+ /** Description of the graphic, passed in as a markdown string. */
30
+ description?: string;
31
+ /** Width of the block within the article well. */
32
+ width?: ContainerWidth;
33
+ /** Set a different width for the text within the text well, for example, "normal" to keep the title, description and notes inline with the rest of the text well. Can't ever be wider than `width`. */
34
+ textWidth?: ContainerWidth;
35
+ /** Preload options. `auto` is ignored if `autoplay` is true. Can also be `none` or `metadata`. */
36
+ preloadVideo?: 'auto' | 'none' | 'metadata';
37
+ /** Whether the video should loop. */
38
+ loopVideo?: boolean;
39
+ /** Whether video should have sound or not. */
40
+ muteVideo?: boolean;
41
+ /** If `true`, this allow videos with sound to autoplay if the user has previously interacted with DOM */
42
+ soundAutoplay?: boolean;
43
+ /** Whether the video should play when it comes into view or just on page load */
44
+ playVideoWhenInView?: boolean;
45
+ /** Controls how much of the video should be visible when it starts playing. This is a number between 0 and 1, where 0 means the video will start playing as soon as its top enters the viewport, and 1 means it will start when the whole video is in the viewport. */
46
+ playVideoThreshold?: number;
47
+ /** Whether to have the option to pause and play video */
48
+ possibleToPlayPause?: boolean;
49
+ /** Whether to show the play / pause buttons */
50
+ showControls?: boolean;
51
+ /** Whether to use a separate replay icon or use the play icon for replay as well */
52
+ separateReplayIcon?: boolean;
53
+ /** Change the colour of the play/pause button */
54
+ controlsColour?: string;
55
+ /** Change the minimum opacity of the play/pause button, which you see on mouseover. Must be between 0 and 1. */
56
+ controlsOpacityMin?: number;
57
+ /** Change the maximum opacity of the play/pause button, which you see on mouseout. Must be between 0 and 1. */
58
+ controlsOpacityMax?: number;
59
+ /** Have four options for controls position - top right, top left, bottom right, bottom left */
60
+ controlsPosition?: ControlsPosition;
61
+ /** Offset for the controls from the border */
62
+ controlsBorderOffset?: number;
63
+ }
64
+
65
+ let {
66
+ src,
67
+ poster = '',
68
+ ariaDescription,
69
+ class: cls = '',
70
+ title,
71
+ notes,
72
+ description,
73
+ width = 'normal',
74
+ textWidth = 'normal',
75
+ preloadVideo = 'auto',
76
+ loopVideo = false,
77
+ muteVideo = true,
78
+ soundAutoplay = false,
79
+ playVideoWhenInView = true,
80
+ playVideoThreshold = 0.5,
81
+ possibleToPlayPause = true,
82
+ showControls = true,
83
+ separateReplayIcon = false,
84
+ controlsColour = '#333',
85
+ controlsOpacityMin = 0,
86
+ controlsOpacityMax = 0.7,
87
+ controlsPosition = 'top left',
88
+ controlsBorderOffset = 10,
89
+ }: Props = $props();
90
+
91
+ /// //////////////////////////////////
92
+ /// /////// Internal Logic ///////////
93
+ /// //////////////////////////////////
94
+ // If it's not possible to play/pause, then hide the controls
95
+ if (!possibleToPlayPause) showControls = false;
96
+
97
+ // Internal props
98
+ let paused = $state(false);
99
+ let time = $state(0);
100
+ let duration = $state(0);
101
+ // let paused = $state(true);
102
+ let clickedOnPauseBtn = $state(false); // special variable to track if user clicked on 'pause' btn to help with audio logic
103
+ let resetCondition = $derived(time >= duration); // - 0.1;
104
+
105
+ // Dimensions etc other useful things
106
+ let videoHeight = $state(0);
107
+ let videoWidth = $state(0);
108
+ let videoHeightContainer = $state(0);
109
+ let videoWidthContainer = $state(0);
110
+
111
+ // For intersection observer
112
+ let intersecting = $state(false);
113
+ let element: HTMLElement | undefined = $state(undefined); // ; | null
114
+ let videoElement: HTMLVideoElement | undefined = $state(undefined);
115
+
116
+ // For video with sound, check if there has been an interaction with the DOM
117
+ let interactedWithDom = false;
118
+ const setInteractedWithDom = () => (interactedWithDom = true);
119
+
120
+ let interactiveControlsOpacity = $state(controlsOpacityMax);
121
+
122
+ // Get control button positioning
123
+ let controlButtonPosition = $derived(
124
+ getButtonPosition(controlsPosition, controlsBorderOffset)
65
125
  );
66
- }
126
+
127
+ /** Control play/pause */
128
+ $effect(() => {
129
+ // Play the video (with no sound) if it's intersecting; pause when it's no longer intersecting
130
+ if (playVideoWhenInView && intersecting && muteVideo) paused = false;
131
+
132
+ // Pause the video if it's no longer intersecting
133
+ if (playVideoWhenInView && !intersecting) paused = true;
134
+
135
+ // Special case for video with sound
136
+ // Only ff you've clicked on play button or interacted with DOM in any way previously, video with audio will play
137
+ if (
138
+ soundAutoplay &&
139
+ playVideoWhenInView &&
140
+ intersecting &&
141
+ !muteVideo &&
142
+ interactedWithDom &&
143
+ !clickedOnPauseBtn // so video doesn't autoplay when coming into view again if paused previously
144
+ )
145
+ paused = false;
146
+
147
+ if (soundAutoplay && !muteVideo && !interactedWithDom) paused = true;
148
+ });
67
149
  </script>
68
150
 
151
+ <!-- Controls button snippet -->
152
+ {#snippet controls()}
153
+ <button
154
+ class="controls"
155
+ onclick={() => {
156
+ paused = !paused;
157
+ clickedOnPauseBtn = paused === true; // so video doesn't autoplay when coming into view again if paused previously
158
+ }}
159
+ style="
160
+ opacity: {interactiveControlsOpacity};
161
+ {controlButtonPosition}
162
+ "
163
+ >
164
+ {#if resetCondition}
165
+ <i class="play-pause-icon replay">
166
+ {#if separateReplayIcon}
167
+ <Fa icon={faReply} size="2x" color={controlsColour} />
168
+ {:else}
169
+ <Fa icon={faPlay} size="2x" color={controlsColour} />
170
+ {/if}
171
+ </i>
172
+ {:else if paused === false}
173
+ <i class="play-pause-icon pause">
174
+ <Fa icon={faPause} size="2x" color={controlsColour} />
175
+ </i>
176
+ {:else if paused === true}
177
+ <i class="play-pause-icon play">
178
+ <Fa icon={faPlay} size="2x" color={controlsColour} />
179
+ </i>
180
+ {:else}
181
+ error
182
+ {/if}
183
+ </button>
184
+ {/snippet}
185
+
186
+ <!-- Transparent, invisible button that will pause/play when the video is clicked -->
187
+ {#snippet transparentButton()}
188
+ <button
189
+ class="border-0 m-0 p-0 bg-transparent absolute"
190
+ aria-label="Play or pause video"
191
+ onclick={() => {
192
+ paused = !paused;
193
+ }}
194
+ style="top: 0; left: 0; width: {videoWidthContainer}px; height: {videoHeightContainer}px;"
195
+ ></button>
196
+ {/snippet}
197
+
69
198
  <svelte:window
70
- on:click="{setInteractedWithDom}"
71
- on:touchstart="{setInteractedWithDom}"
199
+ on:click={setInteractedWithDom}
200
+ on:touchstart={setInteractedWithDom}
72
201
  />
73
202
 
74
203
  <GraphicBlock
75
204
  {textWidth}
76
205
  {title}
77
206
  {description}
78
- {notes}
207
+ notes={typeof notes === 'string' ? notes : undefined}
79
208
  {width}
80
209
  class="video {cls}"
81
210
  >
82
211
  <div
83
212
  role="figure"
84
- on:mouseover="{() => {
85
- interactiveControlsOpacity = controlsOpacity;
86
- }}"
87
- on:focus="{() => {
88
- interactiveControlsOpacity = controlsOpacity;
89
- }}"
90
- on:mouseout="{() => {
91
- interactiveControlsOpacity = 0;
92
- }}"
93
- on:blur="{() => {
94
- interactiveControlsOpacity = 0;
95
- }}"
213
+ onmouseover={() => {
214
+ interactiveControlsOpacity = controlsOpacityMax;
215
+ }}
216
+ onfocus={() => {
217
+ interactiveControlsOpacity = controlsOpacityMax;
218
+ }}
219
+ onmouseout={() => {
220
+ interactiveControlsOpacity = controlsOpacityMin;
221
+ }}
222
+ onblur={() => {
223
+ interactiveControlsOpacity = controlsOpacityMin;
224
+ }}
96
225
  >
97
- {#if (hidden && ariaDescription) || !hidden}
98
- {#if ariaDescription}
99
- <p class="visually-hidden">{ariaDescription}</p>
100
- {/if}
101
-
102
- {#if playVideoWhenInView}
103
- <!-- Video element with Intersection Observer -->
104
- <IntersectionObserver
105
- {element}
106
- bind:intersecting
107
- threshold="{playVideoThreshold}"
108
- once="{false}"
109
- >
110
- <div
111
- bind:this="{element}"
112
- class="video-wrapper relative block"
113
- aria-hidden="{hidden}"
114
- bind:clientWidth="{widthVideoContainer}"
115
- bind:clientHeight="{heightVideoContainer}"
116
- >
117
- {#if possibleToPlayPause}
118
- {#if showControls}
119
- <Controls
120
- on:pausePlayEvent="{pausePlayEvent}"
121
- {paused}
122
- {clickedOnPauseBtn}
123
- controlsOpacity="{hoverToSeeControls ?
124
- interactiveControlsOpacity
125
- : controlsOpacity}"
126
- {controlsPosition}
127
- {widthVideoContainer}
128
- {heightVideoContainer}
129
- {controlsBorderOffset}
130
- {resetCondition}
131
- {separateReplayIcon}
132
- {controlsColour}
133
- />
134
- {:else}
135
- <button
136
- class="border-0 m-0 p-0 bg-transparent absolute"
137
- on:click="{() => {
138
- if (paused === true) {
139
- paused = false;
140
- } else {
141
- paused = true;
142
- }
143
- }}"
144
- style="top: 0; left: 0; width: {widthVideoContainer}px; height: {heightVideoContainer}px;"
145
- ></button>
146
- {/if}
147
- {/if}
148
- <video
149
- bind:this="{videoElement}"
150
- {src}
151
- {poster}
152
- class="pointer-events-none relative"
153
- width="100%"
154
- muted="{muteVideo}"
155
- playsinline
156
- preload="{preloadVideo}"
157
- loop="{loopVideo}"
158
- bind:currentTime="{time}"
159
- bind:duration
160
- bind:paused
161
- bind:clientWidth="{widthVideo}"
162
- bind:clientHeight="{heightVideo}"
163
- >
164
- <track kind="captions" />
165
- </video>
166
- </div>
167
- </IntersectionObserver>
168
- {:else}
169
- <!-- Video element without Intersection observer -->
226
+ {#if playVideoWhenInView}
227
+ <!-- Video element with Intersection Observer -->
228
+ <IntersectionObserver
229
+ {element}
230
+ bind:intersecting
231
+ threshold={playVideoThreshold}
232
+ once={false}
233
+ >
170
234
  <div
171
- class="video-wrapper relative"
172
- aria-hidden="{hidden}"
173
- bind:clientWidth="{widthVideoContainer}"
174
- bind:clientHeight="{heightVideoContainer}"
235
+ bind:this={element}
236
+ class="video-wrapper relative block"
237
+ bind:clientWidth={videoWidthContainer}
238
+ bind:clientHeight={videoHeightContainer}
175
239
  >
176
240
  {#if possibleToPlayPause}
177
241
  {#if showControls}
178
- <Controls
179
- on:pausePlayEvent="{pausePlayEvent}"
180
- {paused}
181
- {clickedOnPauseBtn}
182
- {controlsOpacity}
183
- {controlsPosition}
184
- {widthVideoContainer}
185
- {heightVideoContainer}
186
- {controlsBorderOffset}
187
- {resetCondition}
188
- {separateReplayIcon}
189
- {controlsColour}
190
- />
242
+ {@render controls()}
191
243
  {:else}
192
- <button
193
- class="border-0 m-0 p-0 bg-transparent absolute"
194
- on:click="{() => {
195
- if (paused === true) {
196
- paused = false;
197
- } else {
198
- paused = true;
199
- }
200
- }}"
201
- style="top: 0; left: 0; width: {widthVideoContainer}px; height: {heightVideoContainer}px;"
202
- ></button>
244
+ {@render transparentButton()}
203
245
  {/if}
204
246
  {/if}
205
247
  <video
206
- bind:this="{videoElement}"
248
+ bind:this={videoElement}
207
249
  {src}
208
250
  {poster}
209
251
  class="pointer-events-none relative"
210
252
  width="100%"
211
- muted="{muteVideo}"
253
+ muted={muteVideo}
212
254
  playsinline
213
- preload="{preloadVideo}"
214
- loop="{loopVideo}"
215
- bind:currentTime="{time}"
255
+ preload={preloadVideo}
256
+ loop={loopVideo}
257
+ aria-label={ariaDescription}
258
+ bind:currentTime={time}
216
259
  bind:duration
217
260
  bind:paused
218
- autoplay
219
- bind:clientWidth="{widthVideo}"
220
- bind:clientHeight="{heightVideo}"
261
+ bind:clientWidth={videoWidth}
262
+ bind:clientHeight={videoHeight}
221
263
  >
222
264
  <track kind="captions" />
223
265
  </video>
224
266
  </div>
225
- {/if}
267
+ </IntersectionObserver>
268
+ {:else}
269
+ <!-- Video element without Intersection observer -->
270
+ <div
271
+ class="video-wrapper relative"
272
+ bind:clientWidth={videoWidthContainer}
273
+ bind:clientHeight={videoHeightContainer}
274
+ >
275
+ {#if possibleToPlayPause}
276
+ {#if showControls}
277
+ {@render controls()}
278
+ {:else}
279
+ {@render transparentButton()}
280
+ {/if}
281
+ {/if}
282
+ <video
283
+ bind:this={videoElement}
284
+ {src}
285
+ {poster}
286
+ class="pointer-events-none relative"
287
+ width="100%"
288
+ muted={muteVideo}
289
+ playsinline
290
+ preload={preloadVideo}
291
+ loop={loopVideo}
292
+ bind:currentTime={time}
293
+ bind:duration
294
+ bind:paused
295
+ autoplay
296
+ bind:clientWidth={videoWidth}
297
+ bind:clientHeight={videoHeight}
298
+ >
299
+ <track kind="captions" />
300
+ </video>
301
+ </div>
226
302
  {/if}
227
303
  </div>
228
- {#if $$slots.notes}
229
- <!-- Custom notes and source slot -->
230
- <slot name="notes" />
304
+ <!-- Custom notes snippet -->
305
+ {#if notes && typeof notes !== 'string'}
306
+ {@render notes()}
231
307
  {/if}
232
308
  </GraphicBlock>
309
+
310
+ <style>button.controls {
311
+ z-index: 2;
312
+ position: absolute;
313
+ cursor: pointer;
314
+ background-color: transparent;
315
+ border: none;
316
+ transition: opacity 0.2s;
317
+ }</style>
@@ -1,79 +1,55 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type { ContainerWidth } from '../@types/global';
3
- declare const __propDef: {
4
- props: {
5
- /**
6
- * Video src
7
- * @type {string}
8
- * @required
9
- */ src: string;
10
- /**
11
- * Image to be shown while the video is downloading
12
- */ poster?: string;
13
- /**
14
- * Whether to wrap the graphic with an aria hidden tag.
15
- */ hidden?: boolean;
16
- /**
17
- * ARIA description, passed in as a markdown string.
18
- * @type {string}
19
- */ ariaDescription?: string | null;
20
- /** Add extra classes to the block tag to target it with custom CSS. */ class?: string;
21
- /**
22
- * Title of the graphic
23
- * @type {string}
24
- */ title?: string | null;
25
- /**
26
- * Notes to the graphic, passed in as a markdown string.
27
- * @type {string}
28
- */ notes?: string | null;
29
- /**
30
- * Description of the graphic, passed in as a markdown string.
31
- * @type {string}
32
- */ description?: string | null;
33
- /**
34
- * Width of the block within the article well.
35
- * @type {string}
36
- */ width?: ContainerWidth;
37
- /**
38
- * Set a different width for the text within the text well, for example,
39
- * "normal" to keep the title, description and notes inline with the rest
40
- * of the text well. Can't ever be wider than `width`.
41
- * @type {string}
42
- */ textWidth?: ContainerWidth | null;
43
- /**
44
- * Preload options. `auto` is ignored if `autoplay` is true. Can also be `none` or `metadata`.
45
- * @type {string}
46
- */ preloadVideo?: "metadata" | "auto" | "none";
47
- /**
48
- * Whether the video should loop.
49
- */ loopVideo?: boolean;
50
- /**
51
- * Whether video should have sound or not.
52
- */ muteVideo?: boolean;
53
- allowSoundToAutoplay?: boolean;
54
- playVideoWhenInView?: boolean;
55
- playVideoThreshold?: number;
56
- possibleToPlayPause?: boolean;
57
- showControls?: boolean;
58
- hoverToSeeControls?: boolean;
59
- separateReplayIcon?: boolean;
60
- controlsColour?: string;
61
- controlsOpacity?: number;
62
- controlsPosition?: string;
63
- };
64
- events: {
65
- [evt: string]: CustomEvent<any>;
66
- };
67
- slots: {
68
- notes: {};
69
- };
70
- exports?: {} | undefined;
71
- bindings?: string | undefined;
72
- };
73
- export type VideoProps = typeof __propDef.props;
74
- export type VideoEvents = typeof __propDef.events;
75
- export type VideoSlots = typeof __propDef.slots;
76
- /** `Video` [Read the docs.](https://reuters-graphics.github.io/graphics-components/?path=/docs/components-multimedia-video--docs) */
77
- export default class Video extends SvelteComponent<VideoProps, VideoEvents, VideoSlots> {
2
+ import type { Snippet } from 'svelte';
3
+ import type { ControlsPosition } from './types';
4
+ interface Props {
5
+ /** Video source */
6
+ src: string;
7
+ /** Image to be shown while the video is downloading */
8
+ poster?: string;
9
+ /** ARIA description, passed in as a markdown string. */
10
+ ariaDescription: string;
11
+ /** Add extra classes to the block tag to target it with custom CSS. */
12
+ class?: string;
13
+ /** Title of the graphic */
14
+ title?: string;
15
+ /** Notes to the graphic, passed in as a markdown string OR a custom snippet. */
16
+ notes?: string | Snippet;
17
+ /** Description of the graphic, passed in as a markdown string. */
18
+ description?: string;
19
+ /** Width of the block within the article well. */
20
+ width?: ContainerWidth;
21
+ /** Set a different width for the text within the text well, for example, "normal" to keep the title, description and notes inline with the rest of the text well. Can't ever be wider than `width`. */
22
+ textWidth?: ContainerWidth;
23
+ /** Preload options. `auto` is ignored if `autoplay` is true. Can also be `none` or `metadata`. */
24
+ preloadVideo?: 'auto' | 'none' | 'metadata';
25
+ /** Whether the video should loop. */
26
+ loopVideo?: boolean;
27
+ /** Whether video should have sound or not. */
28
+ muteVideo?: boolean;
29
+ /** If `true`, this allow videos with sound to autoplay if the user has previously interacted with DOM */
30
+ soundAutoplay?: boolean;
31
+ /** Whether the video should play when it comes into view or just on page load */
32
+ playVideoWhenInView?: boolean;
33
+ /** Controls how much of the video should be visible when it starts playing. This is a number between 0 and 1, where 0 means the video will start playing as soon as its top enters the viewport, and 1 means it will start when the whole video is in the viewport. */
34
+ playVideoThreshold?: number;
35
+ /** Whether to have the option to pause and play video */
36
+ possibleToPlayPause?: boolean;
37
+ /** Whether to show the play / pause buttons */
38
+ showControls?: boolean;
39
+ /** Whether to use a separate replay icon or use the play icon for replay as well */
40
+ separateReplayIcon?: boolean;
41
+ /** Change the colour of the play/pause button */
42
+ controlsColour?: string;
43
+ /** Change the minimum opacity of the play/pause button, which you see on mouseover. Must be between 0 and 1. */
44
+ controlsOpacityMin?: number;
45
+ /** Change the maximum opacity of the play/pause button, which you see on mouseout. Must be between 0 and 1. */
46
+ controlsOpacityMax?: number;
47
+ /** Have four options for controls position - top right, top left, bottom right, bottom left */
48
+ controlsPosition?: ControlsPosition;
49
+ /** Offset for the controls from the border */
50
+ controlsBorderOffset?: number;
78
51
  }
79
- export {};
52
+ /** `Video` [Read the docs.](https://reuters-graphics.github.io/graphics-components/?path=/docs/components-multimedia-video--docs) */
53
+ declare const Video: import("svelte").Component<Props, {}, "">;
54
+ type Video = ReturnType<typeof Video>;
55
+ export default Video;
@@ -0,0 +1 @@
1
+ export type ControlsPosition = 'middle' | 'top right' | 'top left' | 'bottom right' | 'bottom left';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { ControlsPosition } from './types';
2
+ /** Returns the CSS positions for the controls button */
3
+ export declare const getButtonPosition: (controlsPosition: ControlsPosition, borderOffset: number) => string;