@reuters-graphics/graphics-components 3.0.25 → 3.0.27

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 (379) hide show
  1. package/dist/components/@types/global.d.ts +1 -0
  2. package/dist/components/HorizontalScroller/Debug.svelte +345 -0
  3. package/dist/components/HorizontalScroller/Debug.svelte.d.ts +5 -0
  4. package/dist/components/HorizontalScroller/HorizontalScroller.svelte +252 -0
  5. package/dist/components/HorizontalScroller/HorizontalScroller.svelte.d.ts +34 -0
  6. package/dist/components/HorizontalScroller/assets/illustrator.png +0 -0
  7. package/dist/components/HorizontalScroller/utils/index.d.ts +16 -0
  8. package/dist/components/HorizontalScroller/utils/index.js +30 -0
  9. package/dist/components/Lottie/Debug.svelte +259 -0
  10. package/dist/components/Lottie/Debug.svelte.d.ts +5 -0
  11. package/dist/components/Lottie/Lottie.svelte +439 -0
  12. package/dist/components/Lottie/Lottie.svelte.d.ts +4 -0
  13. package/dist/components/Lottie/LottieForeground.svelte +138 -0
  14. package/dist/components/Lottie/LottieForeground.svelte.d.ts +16 -0
  15. package/dist/components/Lottie/assets/marker.jpg +0 -0
  16. package/dist/components/Lottie/lottie/demo.zip +0 -0
  17. package/dist/components/Lottie/lottie/foregroundSample.zip +0 -0
  18. package/dist/components/Lottie/lottie/markerSample.zip +0 -0
  19. package/dist/components/Lottie/lottie/themesLottie.zip +0 -0
  20. package/dist/components/Lottie/ts/lottieState.svelte.d.ts +25 -0
  21. package/dist/components/Lottie/ts/lottieState.svelte.js +25 -0
  22. package/dist/components/Lottie/ts/types.d.ts +39 -0
  23. package/dist/components/Lottie/ts/types.js +2 -0
  24. package/dist/components/Lottie/ts/utils.d.ts +44 -0
  25. package/dist/components/Lottie/ts/utils.js +93 -0
  26. package/dist/components/ScrollerVideo/Debug.svelte +9 -4
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.js +3 -0
  29. package/package.json +12 -2
  30. package/dist/actions/cssVariables/cssVariables.mdx +0 -39
  31. package/dist/actions/resizeObserver/resizeObserver.mdx +0 -20
  32. package/dist/components/AdSlot/InlineAd.mdx +0 -56
  33. package/dist/components/AdSlot/InlineAd.stories.svelte +0 -20
  34. package/dist/components/AdSlot/InlineAd.stories.svelte.d.ts +0 -19
  35. package/dist/components/AdSlot/LeaderboardAd.mdx +0 -31
  36. package/dist/components/AdSlot/LeaderboardAd.stories.svelte +0 -29
  37. package/dist/components/AdSlot/LeaderboardAd.stories.svelte.d.ts +0 -19
  38. package/dist/components/AdSlot/SponsorshipAd.mdx +0 -37
  39. package/dist/components/AdSlot/SponsorshipAd.stories.svelte +0 -20
  40. package/dist/components/AdSlot/SponsorshipAd.stories.svelte.d.ts +0 -19
  41. package/dist/components/Analytics/Analytics.mdx +0 -73
  42. package/dist/components/Analytics/Analytics.stories.svelte +0 -17
  43. package/dist/components/Analytics/Analytics.stories.svelte.d.ts +0 -19
  44. package/dist/components/Article/Article.mdx +0 -117
  45. package/dist/components/Article/Article.stories.svelte +0 -119
  46. package/dist/components/Article/Article.stories.svelte.d.ts +0 -19
  47. package/dist/components/BeforeAfter/BeforeAfter.mdx +0 -111
  48. package/dist/components/BeforeAfter/BeforeAfter.stories.svelte +0 -66
  49. package/dist/components/BeforeAfter/BeforeAfter.stories.svelte.d.ts +0 -19
  50. package/dist/components/BeforeAfter/images/myrne-after.jpg +0 -0
  51. package/dist/components/BeforeAfter/images/myrne-before.jpg +0 -0
  52. package/dist/components/Block/Block.mdx +0 -99
  53. package/dist/components/Block/Block.stories.svelte +0 -181
  54. package/dist/components/Block/Block.stories.svelte.d.ts +0 -19
  55. package/dist/components/BodyText/BodyText.mdx +0 -115
  56. package/dist/components/BodyText/BodyText.stories.svelte +0 -100
  57. package/dist/components/BodyText/BodyText.stories.svelte.d.ts +0 -19
  58. package/dist/components/Byline/Byline.mdx +0 -110
  59. package/dist/components/Byline/Byline.stories.svelte +0 -63
  60. package/dist/components/Byline/Byline.stories.svelte.d.ts +0 -19
  61. package/dist/components/DatawrapperChart/DatawrapperChart.mdx +0 -45
  62. package/dist/components/DatawrapperChart/DatawrapperChart.stories.svelte +0 -41
  63. package/dist/components/DatawrapperChart/DatawrapperChart.stories.svelte.d.ts +0 -19
  64. package/dist/components/DocumentCloud/DocumentCloud.mdx +0 -26
  65. package/dist/components/DocumentCloud/DocumentCloud.stories.svelte +0 -23
  66. package/dist/components/DocumentCloud/DocumentCloud.stories.svelte.d.ts +0 -19
  67. package/dist/components/EmbedPreviewerLink/EmbedPreviewerLink.mdx +0 -19
  68. package/dist/components/EmbedPreviewerLink/EmbedPreviewerLink.stories.svelte +0 -17
  69. package/dist/components/EmbedPreviewerLink/EmbedPreviewerLink.stories.svelte.d.ts +0 -19
  70. package/dist/components/EndNotes/EndNotes.mdx +0 -67
  71. package/dist/components/EndNotes/EndNotes.stories.svelte +0 -29
  72. package/dist/components/EndNotes/EndNotes.stories.svelte.d.ts +0 -19
  73. package/dist/components/FeaturePhoto/FeaturePhoto.mdx +0 -72
  74. package/dist/components/FeaturePhoto/FeaturePhoto.stories.svelte +0 -41
  75. package/dist/components/FeaturePhoto/FeaturePhoto.stories.svelte.d.ts +0 -19
  76. package/dist/components/FeaturePhoto/images/shark.jpg +0 -0
  77. package/dist/components/Framer/Framer.mdx +0 -19
  78. package/dist/components/Framer/Framer.stories.svelte +0 -19
  79. package/dist/components/Framer/Framer.stories.svelte.d.ts +0 -19
  80. package/dist/components/Functions/Utils.mdx +0 -23
  81. package/dist/components/Functions/Utils.stories.svelte +0 -9
  82. package/dist/components/Functions/Utils.stories.svelte.d.ts +0 -18
  83. package/dist/components/GraphicBlock/GraphicBlock.mdx +0 -215
  84. package/dist/components/GraphicBlock/GraphicBlock.stories.svelte +0 -131
  85. package/dist/components/GraphicBlock/GraphicBlock.stories.svelte.d.ts +0 -19
  86. package/dist/components/GraphicBlock/demo/ai2svelte/ai-chart.svelte +0 -628
  87. package/dist/components/GraphicBlock/demo/ai2svelte/ai-chart.svelte.d.ts +0 -3
  88. package/dist/components/GraphicBlock/demo/imgs/ai-chart-md.png +0 -0
  89. package/dist/components/GraphicBlock/demo/imgs/ai-chart-sm.png +0 -0
  90. package/dist/components/GraphicBlock/demo/imgs/ai-chart-xs.png +0 -0
  91. package/dist/components/GraphicBlock/demo/placeholder.png +0 -0
  92. package/dist/components/Headline/Headline.mdx +0 -150
  93. package/dist/components/Headline/Headline.stories.svelte +0 -108
  94. package/dist/components/Headline/Headline.stories.svelte.d.ts +0 -19
  95. package/dist/components/Headline/demo/crown.png +0 -0
  96. package/dist/components/Headline/demo/graphic-lg.png +0 -0
  97. package/dist/components/Headline/demo/graphic-md.png +0 -0
  98. package/dist/components/Headline/demo/graphic-sm.png +0 -0
  99. package/dist/components/Headline/demo/graphic-xl.png +0 -0
  100. package/dist/components/Headline/demo/graphic-xs.png +0 -0
  101. package/dist/components/Headline/demo/graphic.svelte +0 -957
  102. package/dist/components/Headline/demo/graphic.svelte.d.ts +0 -6
  103. package/dist/components/Headpile/Headpile.mdx +0 -37
  104. package/dist/components/Headpile/Headpile.stories.svelte +0 -37
  105. package/dist/components/Headpile/Headpile.stories.svelte.d.ts +0 -19
  106. package/dist/components/Headpile/images/abdel.png +0 -0
  107. package/dist/components/Headpile/images/hemedti.png +0 -0
  108. package/dist/components/HeroHeadline/HeroHeadline.mdx +0 -329
  109. package/dist/components/HeroHeadline/HeroHeadline.stories.svelte +0 -264
  110. package/dist/components/HeroHeadline/HeroHeadline.stories.svelte.d.ts +0 -19
  111. package/dist/components/HeroHeadline/demo/eurovis.jpeg +0 -0
  112. package/dist/components/HeroHeadline/demo/graphics/CRASH_1-lg.jpeg +0 -0
  113. package/dist/components/HeroHeadline/demo/graphics/CRASH_1-md.jpeg +0 -0
  114. package/dist/components/HeroHeadline/demo/graphics/CRASH_1-sm.jpeg +0 -0
  115. package/dist/components/HeroHeadline/demo/graphics/CRASH_1-xl.jpeg +0 -0
  116. package/dist/components/HeroHeadline/demo/graphics/CRASH_1-xl_copy.jpeg +0 -0
  117. package/dist/components/HeroHeadline/demo/graphics/CRASH_1-xs.jpeg +0 -0
  118. package/dist/components/HeroHeadline/demo/graphics/crash.svelte +0 -630
  119. package/dist/components/HeroHeadline/demo/graphics/crash.svelte.d.ts +0 -6
  120. package/dist/components/HeroHeadline/demo/graphics/quake-map-top-lg.jpeg +0 -0
  121. package/dist/components/HeroHeadline/demo/graphics/quake-map-top-md.jpeg +0 -0
  122. package/dist/components/HeroHeadline/demo/graphics/quake-map-top-sm.jpeg +0 -0
  123. package/dist/components/HeroHeadline/demo/graphics/quake-map-top-xl.jpeg +0 -0
  124. package/dist/components/HeroHeadline/demo/graphics/quake-map-top-xs.jpeg +0 -0
  125. package/dist/components/HeroHeadline/demo/graphics/quakemap.svelte +0 -865
  126. package/dist/components/HeroHeadline/demo/graphics/quakemap.svelte.d.ts +0 -6
  127. package/dist/components/HeroHeadline/demo/polar.jpg +0 -0
  128. package/dist/components/InfoBox/InfoBox.mdx +0 -122
  129. package/dist/components/InfoBox/InfoBox.stories.svelte +0 -98
  130. package/dist/components/InfoBox/InfoBox.stories.svelte.d.ts +0 -19
  131. package/dist/components/PaddingReset/PaddingReset.mdx +0 -53
  132. package/dist/components/PaddingReset/PaddingReset.stories.svelte +0 -42
  133. package/dist/components/PaddingReset/PaddingReset.stories.svelte.d.ts +0 -19
  134. package/dist/components/PhotoPack/PhotoPack.mdx +0 -177
  135. package/dist/components/PhotoPack/PhotoPack.stories.svelte +0 -140
  136. package/dist/components/PhotoPack/PhotoPack.stories.svelte.d.ts +0 -19
  137. package/dist/components/PymChild/PymChild.mdx +0 -33
  138. package/dist/components/PymChild/PymChild.stories.svelte +0 -11
  139. package/dist/components/PymChild/PymChild.stories.svelte.d.ts +0 -19
  140. package/dist/components/ReferralBlock/ReferralBlock.mdx +0 -44
  141. package/dist/components/ReferralBlock/ReferralBlock.stories.svelte +0 -51
  142. package/dist/components/ReferralBlock/ReferralBlock.stories.svelte.d.ts +0 -19
  143. package/dist/components/ReutersGraphicsLogo/ReutersGraphicsLogo.mdx +0 -21
  144. package/dist/components/ReutersGraphicsLogo/ReutersGraphicsLogo.stories.svelte +0 -14
  145. package/dist/components/ReutersGraphicsLogo/ReutersGraphicsLogo.stories.svelte.d.ts +0 -19
  146. package/dist/components/ReutersLogo/ReutersLogo.mdx +0 -19
  147. package/dist/components/ReutersLogo/ReutersLogo.stories.svelte +0 -15
  148. package/dist/components/ReutersLogo/ReutersLogo.stories.svelte.d.ts +0 -19
  149. package/dist/components/SEO/SEO.mdx +0 -80
  150. package/dist/components/SEO/SEO.stories.svelte +0 -23
  151. package/dist/components/SEO/SEO.stories.svelte.d.ts +0 -18
  152. package/dist/components/Scroller/Scroller.mdx +0 -279
  153. package/dist/components/Scroller/Scroller.stories.svelte +0 -195
  154. package/dist/components/Scroller/Scroller.stories.svelte.d.ts +0 -19
  155. package/dist/components/Scroller/demo/components/ai2svelte/ai-foreground.svelte +0 -118
  156. package/dist/components/Scroller/demo/components/ai2svelte/ai-foreground.svelte.d.ts +0 -6
  157. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-1.svelte +0 -128
  158. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-1.svelte.d.ts +0 -3
  159. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-2.svelte +0 -282
  160. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-2.svelte.d.ts +0 -3
  161. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-3.svelte +0 -282
  162. package/dist/components/Scroller/demo/components/ai2svelte/ai-scroller-3.svelte.d.ts +0 -3
  163. package/dist/components/Scroller/demo/components/ai2svelte/images/Body-issues-key-xs.png +0 -0
  164. package/dist/components/Scroller/demo/components/ai2svelte/images/step-1-lg.png +0 -0
  165. package/dist/components/Scroller/demo/components/ai2svelte/images/step-1-md.png +0 -0
  166. package/dist/components/Scroller/demo/components/ai2svelte/images/step-1-sm.png +0 -0
  167. package/dist/components/Scroller/demo/components/ai2svelte/images/step-1-xl.png +0 -0
  168. package/dist/components/Scroller/demo/components/ai2svelte/images/step-1-xs.png +0 -0
  169. package/dist/components/Scroller/demo/components/ai2svelte/images/step-2-lg.png +0 -0
  170. package/dist/components/Scroller/demo/components/ai2svelte/images/step-2-md.png +0 -0
  171. package/dist/components/Scroller/demo/components/ai2svelte/images/step-2-sm.png +0 -0
  172. package/dist/components/Scroller/demo/components/ai2svelte/images/step-2-xl.png +0 -0
  173. package/dist/components/Scroller/demo/components/ai2svelte/images/step-2-xs.png +0 -0
  174. package/dist/components/Scroller/demo/components/ai2svelte/images/step-3-lg.png +0 -0
  175. package/dist/components/Scroller/demo/components/ai2svelte/images/step-3-md.png +0 -0
  176. package/dist/components/Scroller/demo/components/ai2svelte/images/step-3-sm.png +0 -0
  177. package/dist/components/Scroller/demo/components/ai2svelte/images/step-3-xl.png +0 -0
  178. package/dist/components/Scroller/demo/components/ai2svelte/images/step-3-xs.png +0 -0
  179. package/dist/components/Scroller/demo/components/basic/InteractiveForeground.svelte +0 -17
  180. package/dist/components/Scroller/demo/components/basic/InteractiveForeground.svelte.d.ts +0 -6
  181. package/dist/components/Scroller/demo/components/basic/Step.svelte +0 -16
  182. package/dist/components/Scroller/demo/components/basic/Step.svelte.d.ts +0 -6
  183. package/dist/components/ScrollerBase/ScrollerBase.mdx +0 -77
  184. package/dist/components/ScrollerBase/ScrollerBase.stories.svelte +0 -12
  185. package/dist/components/ScrollerBase/ScrollerBase.stories.svelte.d.ts +0 -19
  186. package/dist/components/ScrollerBase/demo/DraggableLabel.svelte +0 -96
  187. package/dist/components/ScrollerBase/demo/DraggableLabel.svelte.d.ts +0 -21
  188. package/dist/components/ScrollerBase/demo/ScrollerDemo.svelte +0 -83
  189. package/dist/components/ScrollerBase/demo/ScrollerDemo.svelte.d.ts +0 -3
  190. package/dist/components/ScrollerVideo/ScrollerVideo.mdx +0 -465
  191. package/dist/components/ScrollerVideo/ScrollerVideo.stories.svelte +0 -190
  192. package/dist/components/ScrollerVideo/ScrollerVideo.stories.svelte.d.ts +0 -19
  193. package/dist/components/ScrollerVideo/demo/AdvancedUsecases.svelte +0 -85
  194. package/dist/components/ScrollerVideo/demo/AdvancedUsecases.svelte.d.ts +0 -3
  195. package/dist/components/ScrollerVideo/demo/Embedded.svelte +0 -94
  196. package/dist/components/ScrollerVideo/demo/Embedded.svelte.d.ts +0 -3
  197. package/dist/components/ScrollerVideo/demo/WithAi2svelteForegrounds.svelte +0 -117
  198. package/dist/components/ScrollerVideo/demo/WithAi2svelteForegrounds.svelte.d.ts +0 -3
  199. package/dist/components/ScrollerVideo/demo/WithScrollerBase.svelte +0 -54
  200. package/dist/components/ScrollerVideo/demo/WithScrollerBase.svelte.d.ts +0 -3
  201. package/dist/components/ScrollerVideo/demo/WithTextForegrounds.svelte +0 -72
  202. package/dist/components/ScrollerVideo/demo/WithTextForegrounds.svelte.d.ts +0 -18
  203. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/ai-chart.svelte +0 -631
  204. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/ai-chart.svelte.d.ts +0 -3
  205. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/annotation1.svelte +0 -428
  206. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/annotation1.svelte.d.ts +0 -26
  207. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/annotation2.svelte +0 -402
  208. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/annotation2.svelte.d.ts +0 -26
  209. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/annotation3.svelte +0 -398
  210. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/annotation3.svelte.d.ts +0 -26
  211. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/annotation4.svelte +0 -360
  212. package/dist/components/ScrollerVideo/demo/graphic/ai2svelte/annotation4.svelte.d.ts +0 -26
  213. package/dist/components/ScrollerVideo/demo/graphic/imgs/ai-chart-md.png +0 -0
  214. package/dist/components/ScrollerVideo/demo/graphic/imgs/ai-chart-sm.png +0 -0
  215. package/dist/components/ScrollerVideo/demo/graphic/imgs/ai-chart-xs.png +0 -0
  216. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation1-lg.png +0 -0
  217. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation1-md.png +0 -0
  218. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation1-sm.png +0 -0
  219. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation1-xl.png +0 -0
  220. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation1-xs.png +0 -0
  221. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation2-lg.png +0 -0
  222. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation2-md.png +0 -0
  223. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation2-sm.png +0 -0
  224. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation2-xl.png +0 -0
  225. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation2-xs.png +0 -0
  226. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation3-lg.png +0 -0
  227. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation3-md.png +0 -0
  228. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation3-sm.png +0 -0
  229. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation3-xl.png +0 -0
  230. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation3-xs.png +0 -0
  231. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation4-lg.png +0 -0
  232. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation4-md.png +0 -0
  233. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation4-sm.png +0 -0
  234. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation4-xl.png +0 -0
  235. package/dist/components/ScrollerVideo/demo/graphic/imgs/annotation4-xs.png +0 -0
  236. package/dist/components/ScrollerVideo/videos/HPO.mp4 +0 -0
  237. package/dist/components/ScrollerVideo/videos/drone.mp4 +0 -0
  238. package/dist/components/ScrollerVideo/videos/goldengate.mp4 +0 -0
  239. package/dist/components/ScrollerVideo/videos/tennis.mp4 +0 -0
  240. package/dist/components/ScrollerVideo/videos/waves_lg.mp4 +0 -0
  241. package/dist/components/ScrollerVideo/videos/waves_md.mp4 +0 -0
  242. package/dist/components/ScrollerVideo/videos/waves_sm.mp4 +0 -0
  243. package/dist/components/SearchInput/SearchInput.mdx +0 -29
  244. package/dist/components/SearchInput/SearchInput.stories.svelte +0 -24
  245. package/dist/components/SearchInput/SearchInput.stories.svelte.d.ts +0 -19
  246. package/dist/components/SimpleTimeline/SimpleTimeline.mdx +0 -121
  247. package/dist/components/SimpleTimeline/SimpleTimeline.stories.svelte +0 -95
  248. package/dist/components/SimpleTimeline/SimpleTimeline.stories.svelte.d.ts +0 -19
  249. package/dist/components/SiteFooter/SiteFooter.mdx +0 -45
  250. package/dist/components/SiteFooter/SiteFooter.stories.svelte +0 -29
  251. package/dist/components/SiteFooter/SiteFooter.stories.svelte.d.ts +0 -19
  252. package/dist/components/SiteHeader/SiteHeader.mdx +0 -33
  253. package/dist/components/SiteHeader/SiteHeader.stories.svelte +0 -45
  254. package/dist/components/SiteHeader/SiteHeader.stories.svelte.d.ts +0 -19
  255. package/dist/components/SiteHeadline/SiteHeadline.mdx +0 -69
  256. package/dist/components/SiteHeadline/SiteHeadline.stories.svelte +0 -49
  257. package/dist/components/SiteHeadline/SiteHeadline.stories.svelte.d.ts +0 -19
  258. package/dist/components/Spinner/Spinner.mdx +0 -25
  259. package/dist/components/Spinner/Spinner.stories.svelte +0 -20
  260. package/dist/components/Spinner/Spinner.stories.svelte.d.ts +0 -19
  261. package/dist/components/Table/Table.mdx +0 -177
  262. package/dist/components/Table/Table.stories.svelte +0 -132
  263. package/dist/components/Table/Table.stories.svelte.d.ts +0 -19
  264. package/dist/components/Table/demo/homeRuns.json +0 -42
  265. package/dist/components/Table/demo/pressFreedom.json +0 -887
  266. package/dist/components/Table/demo/richestWomen.json +0 -42
  267. package/dist/components/Theme/Theme.mdx +0 -164
  268. package/dist/components/Theme/Theme.stories.svelte +0 -145
  269. package/dist/components/Theme/Theme.stories.svelte.d.ts +0 -19
  270. package/dist/components/Theme/demo/ThemedPage.svelte +0 -36
  271. package/dist/components/Theme/demo/ThemedPage.svelte.d.ts +0 -26
  272. package/dist/components/ToolsHeader/ToolsHeader.mdx +0 -23
  273. package/dist/components/ToolsHeader/ToolsHeader.stories.svelte +0 -22
  274. package/dist/components/ToolsHeader/ToolsHeader.stories.svelte.d.ts +0 -19
  275. package/dist/components/Video/Video.mdx +0 -155
  276. package/dist/components/Video/Video.stories.svelte +0 -104
  277. package/dist/components/Video/Video.stories.svelte.d.ts +0 -19
  278. package/dist/components/Video/demo/silent-video.mp4 +0 -0
  279. package/dist/components/Video/demo/sound-video.mp4 +0 -0
  280. package/dist/components/Visible/Visible.mdx +0 -34
  281. package/dist/components/Visible/Visible.stories.svelte +0 -15
  282. package/dist/components/Visible/Visible.stories.svelte.d.ts +0 -19
  283. package/dist/components/Visible/demo/VisibleDemo.svelte +0 -46
  284. package/dist/components/Visible/demo/VisibleDemo.svelte.d.ts +0 -3
  285. package/dist/docs/actions/intro.mdx +0 -14
  286. package/dist/docs/contributing/component-guidelines.mdx +0 -139
  287. package/dist/docs/contributing/quickstart.mdx +0 -36
  288. package/dist/docs/contributing/writing-component-stories.mdx +0 -31
  289. package/dist/docs/docStyles.scss +0 -11
  290. package/dist/docs/docs-components/CopyColourTable/ImportSnippet.d.ts +0 -6
  291. package/dist/docs/docs-components/CopyColourTable/ImportSnippet.jsx +0 -54
  292. package/dist/docs/docs-components/CopyColourTable/Table.d.ts +0 -10
  293. package/dist/docs/docs-components/CopyColourTable/Table.jsx +0 -106
  294. package/dist/docs/docs-components/CopyColourTable/styles.module.scss +0 -184
  295. package/dist/docs/docs-components/CopyTable/Table.d.ts +0 -10
  296. package/dist/docs/docs-components/CopyTable/Table.jsx +0 -99
  297. package/dist/docs/docs-components/CopyTable/styles.module.scss +0 -129
  298. package/dist/docs/docs-components/Herbie/Herbie.d.ts +0 -7
  299. package/dist/docs/docs-components/Herbie/Herbie.tsx +0 -47
  300. package/dist/docs/docs-components/Highlight/Highlight.d.ts +0 -6
  301. package/dist/docs/docs-components/Highlight/Highlight.tsx +0 -19
  302. package/dist/docs/docs-components/MdxTheme/Theme.d.ts +0 -3
  303. package/dist/docs/docs-components/MdxTheme/Theme.jsx +0 -29
  304. package/dist/docs/docs-components/Mermaid/Mermaid.d.ts +0 -2
  305. package/dist/docs/docs-components/Mermaid/Mermaid.jsx +0 -32
  306. package/dist/docs/docs-components/SubtleHighlight/SubtleHighlight.d.ts +0 -6
  307. package/dist/docs/docs-components/SubtleHighlight/SubtleHighlight.tsx +0 -16
  308. package/dist/docs/docs-components/ThemeBuilder/CSSVariables/VariableTable.d.ts +0 -3
  309. package/dist/docs/docs-components/ThemeBuilder/CSSVariables/VariableTable.jsx +0 -21
  310. package/dist/docs/docs-components/ThemeBuilder/Customiser/ColourPicker.d.ts +0 -6
  311. package/dist/docs/docs-components/ThemeBuilder/Customiser/ColourPicker.jsx +0 -25
  312. package/dist/docs/docs-components/ThemeBuilder/Customiser/Customiser.d.ts +0 -7
  313. package/dist/docs/docs-components/ThemeBuilder/Customiser/Customiser.jsx +0 -27
  314. package/dist/docs/docs-components/ThemeBuilder/Customiser/Key.d.ts +0 -10
  315. package/dist/docs/docs-components/ThemeBuilder/Customiser/Key.jsx +0 -40
  316. package/dist/docs/docs-components/ThemeBuilder/Customiser/Value.d.ts +0 -10
  317. package/dist/docs/docs-components/ThemeBuilder/Customiser/Value.jsx +0 -61
  318. package/dist/docs/docs-components/ThemeBuilder/Customiser/styles.module.scss +0 -93
  319. package/dist/docs/docs-components/ThemeBuilder/NewTheme/NewTheme.d.ts +0 -6
  320. package/dist/docs/docs-components/ThemeBuilder/NewTheme/NewTheme.jsx +0 -55
  321. package/dist/docs/docs-components/ThemeBuilder/NewTheme/styles.module.scss +0 -17
  322. package/dist/docs/docs-components/ThemeBuilder/ThemeBuilder.d.ts +0 -3
  323. package/dist/docs/docs-components/ThemeBuilder/ThemeBuilder.jsx +0 -42
  324. package/dist/docs/docs-components/ThemeBuilder/ThemeSwitch/Switch.d.ts +0 -6
  325. package/dist/docs/docs-components/ThemeBuilder/ThemeSwitch/Switch.jsx +0 -28
  326. package/dist/docs/docs-components/ThemeBuilder/ThemeSwitch/styles.module.scss +0 -40
  327. package/dist/docs/docs-components/ThemeBuilder/styles.module.scss +0 -20
  328. package/dist/docs/docs-components/syntax/nord.d.ts +0 -7
  329. package/dist/docs/docs-components/syntax/nord.js +0 -155
  330. package/dist/docs/guides/archieml.mdx +0 -441
  331. package/dist/docs/guides/customising-with-scss.mdx +0 -95
  332. package/dist/docs/guides/getting-help.mdx +0 -28
  333. package/dist/docs/guides/graphics-kit.mdx +0 -34
  334. package/dist/docs/guides/imgs/argstable.png +0 -0
  335. package/dist/docs/guides/imgs/frame.png +0 -0
  336. package/dist/docs/guides/imgs/intro.png +0 -0
  337. package/dist/docs/guides/imgs/more-stories.png +0 -0
  338. package/dist/docs/guides/imgs/prop.png +0 -0
  339. package/dist/docs/guides/imgs/quickit.png +0 -0
  340. package/dist/docs/guides/imgs/scss-change.png +0 -0
  341. package/dist/docs/guides/imgs/scss-highlight.png +0 -0
  342. package/dist/docs/guides/imgs/scss-inspector.png +0 -0
  343. package/dist/docs/guides/imgs/scss-start.png +0 -0
  344. package/dist/docs/guides/imgs/scss-test.png +0 -0
  345. package/dist/docs/guides/imgs/scss-winning.png +0 -0
  346. package/dist/docs/guides/imgs/slots.png +0 -0
  347. package/dist/docs/guides/imgs/stories.png +0 -0
  348. package/dist/docs/guides/svelte-components.mdx +0 -138
  349. package/dist/docs/guides/using-docs.mdx +0 -58
  350. package/dist/docs/intro.mdx +0 -36
  351. package/dist/docs/layout/article-well.jpg +0 -0
  352. package/dist/docs/layout/intro.mdx +0 -27
  353. package/dist/docs/styles/colours/intro.mdx +0 -22
  354. package/dist/docs/styles/colours/primary.mdx +0 -163
  355. package/dist/docs/styles/colours/thematic.mdx +0 -24
  356. package/dist/docs/styles/intro.mdx +0 -21
  357. package/dist/docs/styles/tokens/accessibility/main.mdx +0 -17
  358. package/dist/docs/styles/tokens/backgrounds/main.mdx +0 -18
  359. package/dist/docs/styles/tokens/borders/main.mdx +0 -44
  360. package/dist/docs/styles/tokens/flexbox/main.mdx +0 -111
  361. package/dist/docs/styles/tokens/interactivity/_main.mdx +0 -27
  362. package/dist/docs/styles/tokens/intro.mdx +0 -124
  363. package/dist/docs/styles/tokens/layout/main.mdx +0 -71
  364. package/dist/docs/styles/tokens/sizing/main.mdx +0 -62
  365. package/dist/docs/styles/tokens/spacers/main.mdx +0 -56
  366. package/dist/docs/styles/tokens/styles.scss +0 -9
  367. package/dist/docs/styles/tokens/typography/main.mdx +0 -145
  368. package/dist/docs/styles/tokens/typography/styles.scss +0 -9
  369. package/dist/docs/styles/tokens/variables/main.mdx +0 -27
  370. package/dist/docs/theme-builder/theme-builder.mdx +0 -12
  371. package/dist/docs/theming/css-variables.mdx +0 -105
  372. package/dist/docs/utils/css-to-js/index.d.ts +0 -2
  373. package/dist/docs/utils/css-to-js/index.js +0 -388
  374. package/dist/docs/utils/docsPage.d.ts +0 -25
  375. package/dist/docs/utils/docsPage.js +0 -13
  376. package/dist/docs/utils/parseCss.d.ts +0 -3
  377. package/dist/docs/utils/parseCss.js +0 -42
  378. package/dist/test/utils.test.d.ts +0 -1
  379. package/dist/test/utils.test.js +0 -141
@@ -43,6 +43,7 @@ export interface ScrollerStep {
43
43
  }
44
44
  export type ForegroundPosition = 'middle' | 'left' | 'right' | 'left opposite' | 'right opposite';
45
45
  export type ScrollerVideoForegroundPosition = 'top center' | 'top left' | 'top right' | 'bottom center' | 'bottom left' | 'bottom right' | 'center center' | 'center left' | 'center right';
46
+ export type LottieForegroundPosition = 'top center' | 'top left' | 'top right' | 'bottom center' | 'bottom left' | 'bottom right' | 'center center' | 'center left' | 'center right';
46
47
  export interface ScrollerVideoInstance {
47
48
  container: HTMLElement | null;
48
49
  scrollerVideoContainer: Element | string | undefined;
@@ -0,0 +1,345 @@
1
+ <script lang="ts">
2
+ import { map } from './utils';
3
+
4
+ const { componentState } = $props();
5
+
6
+ let isMoving = $state(false);
7
+ let preventDetails = $state(false);
8
+ let position = $state({ x: 8, y: 8 });
9
+
10
+ const fmt = new Intl.NumberFormat('en-US', {
11
+ minimumFractionDigits: 0,
12
+ maximumFractionDigits: 2,
13
+ });
14
+
15
+ function onMouseDown(e: MouseEvent) {
16
+ isMoving = true;
17
+ e.preventDefault();
18
+ }
19
+
20
+ function onMouseMove(e: MouseEvent) {
21
+ if (isMoving) {
22
+ position = {
23
+ x: position.x + e.movementX,
24
+ y: position.y + e.movementY,
25
+ };
26
+ preventDetails = true;
27
+ }
28
+ e.preventDefault();
29
+ }
30
+
31
+ function onMouseUp(e: MouseEvent) {
32
+ if (isMoving) {
33
+ isMoving = false;
34
+ setTimeout(() => {
35
+ preventDetails = false;
36
+ }, 5);
37
+ e.stopImmediatePropagation();
38
+ }
39
+ e.preventDefault();
40
+ }
41
+
42
+ function onClick(e: MouseEvent) {
43
+ if (preventDetails) {
44
+ e.preventDefault();
45
+ }
46
+ isMoving = false;
47
+ }
48
+
49
+ let normalisedScrollProgress = $derived(
50
+ map(
51
+ componentState.mappedProgress,
52
+ componentState.mappedStart ?? 0,
53
+ componentState.mappedEnd ?? 1,
54
+ 0,
55
+ 1
56
+ )
57
+ );
58
+
59
+ let normalisedProgress = $derived(
60
+ map(
61
+ componentState.easedProgress,
62
+ componentState.mappedStart ?? 0,
63
+ componentState.mappedEnd ?? 1,
64
+ 0,
65
+ 1
66
+ )
67
+ );
68
+
69
+ function mappedStop(stop: number): number {
70
+ return map(
71
+ stop,
72
+ componentState.mappedStart ?? 0,
73
+ componentState.mappedEnd ?? 1,
74
+ 0,
75
+ 1
76
+ );
77
+ }
78
+ </script>
79
+
80
+ <svelte:window onmousemove={onMouseMove} />
81
+
82
+ {#snippet triggerPoints()}
83
+ {#if componentState.triggerStops.length > 0}
84
+ {#if componentState.scrubbed}
85
+ {@const totalStops = componentState.triggerStops.length}
86
+ {#each Array(totalStops) as _, index}
87
+ <span
88
+ class="stops"
89
+ style={`left: ${((index + 1) / (totalStops + 1)) * 100}%;`}>|</span
90
+ >
91
+ {/each}
92
+ {:else}
93
+ {@const stops = componentState.triggerStops.map((x: number) =>
94
+ mappedStop(x)
95
+ )}
96
+ {#each stops as stop, index}
97
+ {#if index < stops.length - 1}
98
+ <span
99
+ class="stops"
100
+ style={`left: ${(stop + (stops[index + 1] ?? stops[stops.length - 1])) * 0.5 * 100}%;`}
101
+ >|</span
102
+ >
103
+ {/if}
104
+ {/each}
105
+ {/if}
106
+ {/if}
107
+ {/snippet}
108
+
109
+ <div
110
+ style="position: absolute; top: {position.y}px; left: {position.x}px; z-index: 5; user-select: none;"
111
+ role="region"
112
+ >
113
+ <details class="debug-info" open>
114
+ <summary
115
+ class="text-xxs font-sans font-bold title"
116
+ style="grid-column: span 2;"
117
+ onmousedown={onMouseDown}
118
+ onmouseup={onMouseUp}
119
+ onclick={onClick}
120
+ >
121
+ CONSOLE
122
+ </summary>
123
+ <div class="state-debug">
124
+ <!-- -->
125
+ <p>Progress:</p>
126
+ <div style="display: flex; flex-direction: column; gap: 4px;">
127
+ <p class="state-value">
128
+ {componentState.progress}
129
+ </p>
130
+ </div>
131
+ <!-- -->
132
+ <p>Mapped progress:</p>
133
+ <div style="display: flex; flex-direction: column; gap: 4px;">
134
+ <p class="state-value progress-value">
135
+ {@render triggerPoints()}
136
+ <span
137
+ class="progress-stop"
138
+ style={`left: ${normalisedScrollProgress * 100}%; transform: translateX(-50%);`}
139
+ >{fmt.format(componentState.mappedProgress)}</span
140
+ >
141
+ &nbsp;
142
+ </p>
143
+ <div id="video-progress-bar">
144
+ <div
145
+ style="width: {normalisedScrollProgress * 100}%; height: 100%;"
146
+ ></div>
147
+ </div>
148
+ </div>
149
+ <!-- -->
150
+ <p>Eased Progress:</p>
151
+ <div style="display: flex; flex-direction: column; gap: 4px;">
152
+ <p class="state-value progress-value">
153
+ {#if componentState.stops.length > 0}
154
+ {#each componentState.stops as stop}
155
+ <span class="stops" style={`left: ${mappedStop(stop) * 100}%;`}
156
+ >{stop}</span
157
+ >
158
+ {/each}
159
+ {/if}
160
+ <span
161
+ class="progress-stop"
162
+ style={`left: ${normalisedProgress * 100}%; transform: translateX(-50%);`}
163
+ >{fmt.format(componentState.easedProgress)}</span
164
+ >
165
+ &nbsp;
166
+ </p>
167
+ <div id="video-progress-bar">
168
+ <div style="width: {normalisedProgress * 100}%; height: 100%;"></div>
169
+ </div>
170
+ </div>
171
+ <!-- -->
172
+ <p>Direction:</p>
173
+ <div style="display: flex; flex-direction: column; gap: 4px;">
174
+ <p class="state-value">
175
+ <span class="tag">{componentState.direction}</span>
176
+ </p>
177
+ </div>
178
+ <!-- -->
179
+ {#if componentState.stops.length > 0}
180
+ <p>Stops:</p>
181
+ <div style="display: flex; flex-direction: column; gap: 4px;">
182
+ <p
183
+ class="state-value"
184
+ style="display: flex; gap: 4px; flex-wrap: wrap;"
185
+ >
186
+ {#each componentState.stops as stop}
187
+ <span class="tag">{stop}</span>
188
+ {/each}
189
+ </p>
190
+ </div>
191
+ {/if}
192
+ <!-- -->
193
+ <p>Handle scroll:</p>
194
+ <div style="display: flex; flex-direction: column; gap: 4px;">
195
+ <p class="state-value">
196
+ <span class="tag">{componentState.handleScroll}</span>
197
+ </p>
198
+ </div>
199
+ <!-- -->
200
+ <p>Scrubbed:</p>
201
+ <div style="display: flex; flex-direction: column; gap: 4px;">
202
+ <p class="state-value">
203
+ <span class="tag">{componentState.scrubbed}</span>
204
+ </p>
205
+ </div>
206
+ <!-- -->
207
+ <p>Easing:</p>
208
+ <div style="display: flex; flex-direction: column; gap: 4px;">
209
+ <p class="state-value">
210
+ {componentState.easing}
211
+ </p>
212
+ </div>
213
+ <!-- -->
214
+ <p>
215
+ Duration:
216
+ {#if componentState.scrubbed}
217
+ <span class="tag not-applicable">NA</span>
218
+ {/if}
219
+ </p>
220
+ <div style="display: flex; flex-direction: column; gap: 4px;">
221
+ <p class="state-value">
222
+ <span class="tag">{componentState.duration}</span>
223
+ </p>
224
+ </div>
225
+ <!-- -->
226
+ </div>
227
+ </details>
228
+ </div>
229
+
230
+ <style>* {
231
+ font-family: monospace;
232
+ font-weight: 500;
233
+ }
234
+
235
+ .debug-info {
236
+ position: absolute;
237
+ top: 0;
238
+ left: 0;
239
+ background-color: rgb(0, 0, 0);
240
+ z-index: 3;
241
+ margin: 0;
242
+ width: 50vmin;
243
+ min-width: 50vmin;
244
+ padding: 8px;
245
+ border-radius: 8px;
246
+ overflow: auto;
247
+ resize: horizontal;
248
+ opacity: 0.6;
249
+ transition: opacity 0.3s ease;
250
+ filter: drop-shadow(0 0 16px rgba(0, 0, 0, 0.5));
251
+ }
252
+ @media (prefers-reduced-motion: no-preference) {
253
+ .debug-info {
254
+ interpolate-size: allow-keywords;
255
+ }
256
+ }
257
+ .debug-info::details-content {
258
+ opacity: 0;
259
+ block-size: 0;
260
+ overflow-y: clip;
261
+ transition: content-visibility 0.4s allow-discrete, opacity 0.4s, block-size 0.4s cubic-bezier(0.87, 0, 0.13, 1);
262
+ }
263
+ .debug-info[open]::details-content {
264
+ opacity: 1;
265
+ block-size: auto;
266
+ }
267
+ .debug-info .title {
268
+ width: 100%;
269
+ color: white;
270
+ margin: 0;
271
+ }
272
+ .debug-info * {
273
+ user-select: none;
274
+ }
275
+
276
+ .debug-info[open] {
277
+ opacity: 1;
278
+ }
279
+
280
+ div.state-debug {
281
+ display: grid;
282
+ width: 100%;
283
+ padding: 8px 8px 16px 8px;
284
+ grid-template-columns: 20vmin 1fr;
285
+ align-items: center;
286
+ gap: 0.75rem 0.25rem;
287
+ background-color: #1e1e1e;
288
+ border-radius: 4px;
289
+ margin-top: 8px;
290
+ }
291
+
292
+ p {
293
+ font-size: var(--theme-font-size-xxs);
294
+ padding: 0;
295
+ margin: 0;
296
+ color: rgba(255, 255, 255, 0.7);
297
+ overflow-wrap: anywhere;
298
+ line-height: 100%;
299
+ font-variant: tabular-nums;
300
+ }
301
+
302
+ .state-value {
303
+ color: white;
304
+ }
305
+
306
+ .progress-value {
307
+ position: relative;
308
+ height: 100%;
309
+ }
310
+
311
+ .stops {
312
+ position: absolute;
313
+ opacity: 0.5;
314
+ transform: translateX(-50%);
315
+ }
316
+
317
+ .progress-stop {
318
+ position: absolute;
319
+ opacity: 1;
320
+ text-wrap: nowrap;
321
+ }
322
+
323
+ #video-progress-bar {
324
+ width: 100%;
325
+ background-color: rgba(255, 255, 255, 0.2);
326
+ height: 2px;
327
+ border-radius: 50px;
328
+ }
329
+ #video-progress-bar div {
330
+ background-color: white;
331
+ border-radius: 50px;
332
+ }
333
+
334
+ .tag {
335
+ padding: 0.1rem 0.2rem;
336
+ border-radius: 4px;
337
+ background-color: rgba(255, 255, 255, 0.2);
338
+ text-transform: uppercase;
339
+ font-weight: 500;
340
+ }
341
+
342
+ .not-applicable {
343
+ background-color: #4a0000;
344
+ color: #ff8a80;
345
+ }</style>
@@ -0,0 +1,5 @@
1
+ declare const Debug: import("svelte").Component<{
2
+ componentState: any;
3
+ }, {}, "">;
4
+ type Debug = ReturnType<typeof Debug>;
5
+ export default Debug;
@@ -0,0 +1,252 @@
1
+ <script lang="ts">
2
+ import { onMount, type Snippet } from 'svelte';
3
+ import { Tween } from 'svelte/motion';
4
+ import { clamp, map } from './utils/index';
5
+ import type { Action } from 'svelte/action';
6
+
7
+ import Debug from './Debug.svelte';
8
+
9
+ interface Props {
10
+ /** Optional id for the scroller container */
11
+ id?: string;
12
+ /** Optional additional classes for the scroller container */
13
+ class?: string;
14
+ /** Height of the scroller container in CSS `vh` units. Set it to `100lvh` when using inside ScrollerBase. */
15
+ height?: string;
16
+ /** Bindable progress value. Ideal range: `[0-1]`. Bind ScrollerBase's progress to this prop. */
17
+ progress?: number;
18
+ /** Direction of movement*/
19
+ direction?: 'left' | 'right';
20
+ /** Content to scroll*/
21
+ children?: Snippet;
22
+ /** Array of numbers desired as stops for the scroller */
23
+ stops?: number[];
24
+ /** Should the component handle scroll events? Set it to `false` when using inside ScrollerBase. */
25
+ handleScroll?: boolean;
26
+ /** Whether the stops should be scrubbed */
27
+ scrubbed?: boolean;
28
+ /** Easing function for the progress/stops */
29
+ easing?: (t: number) => number;
30
+ /** Duration of the easing animation in milliseconds. Effective only when scrubbed is false. */
31
+ duration?: number;
32
+ /** Whether to show debug info */
33
+ showDebugInfo?: boolean;
34
+ /** Modified starting scale. Default is 0 */
35
+ mappedStart?: number;
36
+ /** Modified ending scale. Default is 1 */
37
+ mappedEnd?: number;
38
+ }
39
+
40
+ let {
41
+ id = '',
42
+ class: cls = '',
43
+ height = '200lvh',
44
+ direction = 'right',
45
+ progress = $bindable(0),
46
+ mappedStart = 0,
47
+ mappedEnd = 1,
48
+ children,
49
+ stops = [],
50
+ handleScroll = true,
51
+ scrubbed = true,
52
+ easing: ease = (t) => t,
53
+ duration = 400,
54
+ showDebugInfo = false,
55
+ }: Props = $props();
56
+
57
+ let easedProgress: Tween<number> = $state(
58
+ new Tween(mappedStart, { duration, easing: ease })
59
+ );
60
+ let container: HTMLDivElement | undefined = $state(undefined);
61
+ let containerHeight: number = $state(0);
62
+ let containerWidth: number = $state(0);
63
+ let content: HTMLDivElement | undefined = $state(undefined);
64
+ let contentWidth: number = $state(0);
65
+ let screenHeight: number = $state(0);
66
+ let divisions: number[] = $derived(
67
+ [...stops, mappedStart, mappedEnd].sort((a, b) => a - b)
68
+ );
69
+ let divisionsCount: number = $derived.by(() => divisions.length - 1);
70
+
71
+ let mappedProgress: number = $state(0);
72
+
73
+ // handles horizontal translation of the content
74
+ let translateX: number = $derived.by(() => {
75
+ let processedProgress = clamp(
76
+ easedProgress.current,
77
+ mappedStart,
78
+ mappedEnd
79
+ );
80
+ let normalisedProgress = processedProgress;
81
+
82
+ normalisedProgress =
83
+ direction === 'right' ? processedProgress : mappedEnd - processedProgress;
84
+
85
+ const translate = -(contentWidth - containerWidth) * normalisedProgress;
86
+
87
+ return translate;
88
+ });
89
+
90
+ let componentState = $derived.by(() => ({
91
+ progress,
92
+ mappedProgress,
93
+ easedProgress: easedProgress.current,
94
+ direction,
95
+ mappedStart,
96
+ mappedEnd,
97
+ triggerStops: scrubbed ? stops : divisions,
98
+ stops: stops,
99
+ handleScroll,
100
+ scrubbed,
101
+ easing: ease,
102
+ duration,
103
+ }));
104
+
105
+ onMount(() => {
106
+ // Initialize mappedProgress to mappedStart on mount
107
+ mappedProgress = mappedStart;
108
+ });
109
+
110
+ const scrollListener: Action = () => {
111
+ if (handleScroll) {
112
+ window.addEventListener('scroll', handleScrollFunction, {
113
+ passive: true,
114
+ });
115
+ } else {
116
+ window.addEventListener('scroll', () => handleStops(progress), {
117
+ passive: true,
118
+ });
119
+ }
120
+ };
121
+
122
+ // calculates distance scrolled inside the container
123
+ function handleScrollFunction() {
124
+ if (!container) return;
125
+
126
+ progress =
127
+ (-container?.offsetTop + window?.scrollY) /
128
+ (containerHeight - screenHeight);
129
+
130
+ handleStops(progress);
131
+ }
132
+
133
+ // updates easedProgress based on stops and scrubbed settings
134
+ function handleStops(rawProgress: number) {
135
+ mappedProgress = map(rawProgress, 0, 1, mappedStart, mappedEnd);
136
+
137
+ if (!stops || stops.length === 0) {
138
+ easedProgress.set(ease(map(rawProgress, 0, 1, mappedStart, mappedEnd)), {
139
+ duration: 0,
140
+ });
141
+ return;
142
+ }
143
+
144
+ if (!scrubbed) {
145
+ for (let i = 0; i < divisions.length; i++) {
146
+ if (
147
+ mappedProgress > divisions[i] &&
148
+ mappedProgress <=
149
+ (divisions[i + 1] ?? divisions[divisions.length - 1])
150
+ ) {
151
+ const midPoint =
152
+ divisions[i] +
153
+ ((divisions[i + 1] ?? divisions[divisions.length - 1]) -
154
+ divisions[i]) *
155
+ 0.5;
156
+ if (
157
+ mappedProgress >= midPoint &&
158
+ easedProgress.target !==
159
+ (divisions[i + 1] ?? divisions[divisions.length - 1])
160
+ ) {
161
+ easedProgress.set(
162
+ divisions[i + 1] ?? divisions[divisions.length - 1]
163
+ );
164
+ return;
165
+ } else if (
166
+ mappedProgress < midPoint &&
167
+ easedProgress.target !== divisions[i]
168
+ ) {
169
+ easedProgress.set(divisions[i]);
170
+ return;
171
+ }
172
+ } else if (
173
+ mappedProgress <
174
+ divisions[0] + (divisions[1] ?? mappedStart) * 0.5
175
+ ) {
176
+ if (easedProgress.target !== divisions[0]) {
177
+ easedProgress.set(divisions[0]);
178
+ return;
179
+ }
180
+ } else {
181
+ continue;
182
+ }
183
+ }
184
+ } else {
185
+ for (let i = 0; i < divisions.length; i++) {
186
+ let oneByDivCount = 1 / divisionsCount;
187
+
188
+ let normalStart = i == 0 ? mappedStart : oneByDivCount * i;
189
+ let normalEnd =
190
+ i == divisionsCount - 1 ? mappedEnd : oneByDivCount * (i + 1);
191
+
192
+ if (mappedProgress >= normalStart && mappedProgress < normalEnd) {
193
+ let stopStart = divisions[i];
194
+ let stopEnd = divisions[i + 1] ?? mappedEnd;
195
+ let newProgressVal =
196
+ stopStart +
197
+ ease(map(mappedProgress, normalStart, normalEnd, 0, 1)) *
198
+ (stopEnd - stopStart);
199
+
200
+ easedProgress.set(newProgressVal, { duration: 0 });
201
+ return;
202
+ } else {
203
+ continue;
204
+ }
205
+ }
206
+ }
207
+ }
208
+ </script>
209
+
210
+ <svelte:window bind:innerHeight={screenHeight} />
211
+
212
+ <div
213
+ {id}
214
+ class="horizontal-scroller-container {cls}"
215
+ style="height: {height};"
216
+ bind:this={container}
217
+ bind:clientHeight={containerHeight}
218
+ bind:clientWidth={containerWidth}
219
+ >
220
+ <div
221
+ class="horizontal-scroller-content"
222
+ bind:this={content}
223
+ bind:clientWidth={contentWidth}
224
+ style="transform: translateX({translateX}px);"
225
+ use:scrollListener
226
+ >
227
+ {#if children}
228
+ {@render children()}
229
+ {/if}
230
+ {#if showDebugInfo}
231
+ <div
232
+ class="debug-info"
233
+ style={`position: absolute; left: ${-translateX}px; top: 0px;`}
234
+ >
235
+ <Debug {componentState} />
236
+ </div>
237
+ {/if}
238
+ </div>
239
+ </div>
240
+
241
+ <style>.horizontal-scroller-container {
242
+ width: 100%;
243
+ contain: paint;
244
+ }
245
+
246
+ .horizontal-scroller-content {
247
+ display: inline-block;
248
+ height: 100%;
249
+ max-height: 100lvh;
250
+ position: sticky;
251
+ top: 0;
252
+ }</style>
@@ -0,0 +1,34 @@
1
+ import { type Snippet } from 'svelte';
2
+ interface Props {
3
+ /** Optional id for the scroller container */
4
+ id?: string;
5
+ /** Optional additional classes for the scroller container */
6
+ class?: string;
7
+ /** Height of the scroller container in CSS `vh` units. Set it to `100lvh` when using inside ScrollerBase. */
8
+ height?: string;
9
+ /** Bindable progress value. Ideal range: `[0-1]`. Bind ScrollerBase's progress to this prop. */
10
+ progress?: number;
11
+ /** Direction of movement*/
12
+ direction?: 'left' | 'right';
13
+ /** Content to scroll*/
14
+ children?: Snippet;
15
+ /** Array of numbers desired as stops for the scroller */
16
+ stops?: number[];
17
+ /** Should the component handle scroll events? Set it to `false` when using inside ScrollerBase. */
18
+ handleScroll?: boolean;
19
+ /** Whether the stops should be scrubbed */
20
+ scrubbed?: boolean;
21
+ /** Easing function for the progress/stops */
22
+ easing?: (t: number) => number;
23
+ /** Duration of the easing animation in milliseconds. Effective only when scrubbed is false. */
24
+ duration?: number;
25
+ /** Whether to show debug info */
26
+ showDebugInfo?: boolean;
27
+ /** Modified starting scale. Default is 0 */
28
+ mappedStart?: number;
29
+ /** Modified ending scale. Default is 1 */
30
+ mappedEnd?: number;
31
+ }
32
+ declare const HorizontalScroller: import("svelte").Component<Props, {}, "progress">;
33
+ type HorizontalScroller = ReturnType<typeof HorizontalScroller>;
34
+ export default HorizontalScroller;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Clamp a number `n` to the inclusive range [low, high].
3
+ */
4
+ export declare function clamp(n: number, low: number, high: number): number;
5
+ /**
6
+ * Linearly maps a value `n` from range [inStart, inEnd] to [outStart, outEnd].
7
+ *
8
+ * @param {number} n - The input value to map.
9
+ * @param {number} inStart - Input range start.
10
+ * @param {number} inEnd - Input range end.
11
+ * @param {number} outStart - Output range start.
12
+ * @param {number} outEnd - Output range end.
13
+ * @param {boolean} withinBounds - If true, clamp the mapped value to [outStart, outEnd].
14
+ * @returns {number} - Mapped (and optionally clamped) value.
15
+ */
16
+ export declare function map(n: number, inStart: number, inEnd: number, outStart: number, outEnd: number, withinBounds?: boolean): number;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Clamp a number `n` to the inclusive range [low, high].
3
+ */
4
+ export function clamp(n, low, high) {
5
+ // Ensure low <= high even if caller swaps them
6
+ const min = Math.min(low, high);
7
+ const max = Math.max(low, high);
8
+ return Math.max(min, Math.min(n, max));
9
+ }
10
+ /**
11
+ * Linearly maps a value `n` from range [inStart, inEnd] to [outStart, outEnd].
12
+ *
13
+ * @param {number} n - The input value to map.
14
+ * @param {number} inStart - Input range start.
15
+ * @param {number} inEnd - Input range end.
16
+ * @param {number} outStart - Output range start.
17
+ * @param {number} outEnd - Output range end.
18
+ * @param {boolean} withinBounds - If true, clamp the mapped value to [outStart, outEnd].
19
+ * @returns {number} - Mapped (and optionally clamped) value.
20
+ */
21
+ export function map(n, inStart, inEnd, outStart, outEnd, withinBounds = true) {
22
+ // Avoid division by zero: when input range is degenerate, return outStart
23
+ const inSpan = inEnd - inStart;
24
+ if (inSpan === 0) {
25
+ return withinBounds ? clamp(outStart, outStart, outEnd) : outStart;
26
+ }
27
+ const t = (n - inStart) / inSpan; // normalized 0..1 in input space (or beyond)
28
+ const out = t * (outEnd - outStart) + outStart;
29
+ return withinBounds ? clamp(out, outStart, outEnd) : out;
30
+ }