@quintype/arrow 3.0.0-spike-skeleton-layout.21 → 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 (505) hide show
  1. package/.babelrc +12 -0
  2. package/.circleci/config.yml +42 -0
  3. package/.eslintrc.json +25 -0
  4. package/.prettierrc +6 -0
  5. package/.storybook/addons.js +5 -0
  6. package/.storybook/config.js +13 -0
  7. package/.storybook/webpack.config.js +8 -0
  8. package/.stylelintrc +10 -0
  9. package/.vscode/extensions.json +16 -0
  10. package/.vscode/settings.json +12 -0
  11. package/CHANGELOG.md +1362 -0
  12. package/README.md +10 -0
  13. package/__mocks__/fileMock.js +1 -0
  14. package/__mocks__/styleMock.js +1 -0
  15. package/{app.scss → assets/stylesheets/app.scss} +154 -1
  16. package/assets/stylesheets/mixins.scss +27 -0
  17. package/assets/stylesheets/reset.scss +148 -0
  18. package/assets/stylesheets/viewports.m.css +3 -0
  19. package/bin-dev-scripts/prepublish.sh +11 -0
  20. package/bin-dev-scripts/sync-to.sh +13 -0
  21. package/jest.config.json +14 -0
  22. package/package.json +131 -1
  23. package/publish +24 -0
  24. package/rollup.js +202 -0
  25. package/setupTests.js +3 -0
  26. package/src/components/Atoms/AdPlaceholder/ads.m.css +13 -0
  27. package/src/components/Atoms/AdPlaceholder/index.js +25 -0
  28. package/src/components/Atoms/Author/README.md +19 -0
  29. package/src/components/Atoms/Author/author.m.css +65 -0
  30. package/src/components/Atoms/Author/index.js +98 -0
  31. package/src/components/Atoms/Author/stories.js +23 -0
  32. package/src/components/Atoms/AuthorCard/README.md +47 -0
  33. package/src/components/Atoms/AuthorCard/author-card.m.css +174 -0
  34. package/src/components/Atoms/AuthorCard/author-card.test.js +72 -0
  35. package/src/components/Atoms/AuthorCard/index.js +115 -0
  36. package/src/components/Atoms/AuthorCard/stories.js +69 -0
  37. package/src/components/Atoms/AuthorImage/README.md +31 -0
  38. package/src/components/Atoms/AuthorImage/author-image.m.css +53 -0
  39. package/src/components/Atoms/AuthorImage/index.js +55 -0
  40. package/src/components/Atoms/AuthorImage/stories.js +20 -0
  41. package/src/components/Atoms/AuthorWithTimestamp/README.md +11 -0
  42. package/src/components/Atoms/AuthorWithTimestamp/author-with-timestamp.m.css +42 -0
  43. package/src/components/Atoms/AuthorWithTimestamp/index.js +79 -0
  44. package/src/components/Atoms/AuthorWithTimestamp/stories.js +21 -0
  45. package/src/components/Atoms/BulletPoint/README.md +9 -0
  46. package/src/components/Atoms/BulletPoint/bullet-point.m.css +14 -0
  47. package/src/components/Atoms/BulletPoint/index.js +19 -0
  48. package/src/components/Atoms/BulletPoint/stories.js +6 -0
  49. package/src/components/Atoms/CaptionAttribution/README.md +15 -0
  50. package/src/components/Atoms/CaptionAttribution/caption-attribution.m.css +40 -0
  51. package/src/components/Atoms/CaptionAttribution/caption-attribution.test.js +29 -0
  52. package/src/components/Atoms/CaptionAttribution/index.js +40 -0
  53. package/src/components/Atoms/CaptionAttribution/stories.js +40 -0
  54. package/src/components/Atoms/CollectionName/README.md +11 -0
  55. package/src/components/Atoms/CollectionName/collection-name.m.css +94 -0
  56. package/src/components/Atoms/CollectionName/index.js +143 -0
  57. package/src/components/Atoms/CollectionName/stories.js +52 -0
  58. package/src/components/Atoms/Divider/__snapshots__/divider.test.js.snap +18 -0
  59. package/src/components/Atoms/Divider/divider.m.css +6 -0
  60. package/src/components/Atoms/Divider/divider.test.js +10 -0
  61. package/src/components/Atoms/Divider/index.js +20 -0
  62. package/src/components/Atoms/Dot/dot.js +20 -0
  63. package/src/components/Atoms/Dot/dot.m.css +6 -0
  64. package/src/components/Atoms/ExtendedLoadMore/README.md +9 -0
  65. package/src/components/Atoms/ExtendedLoadMore/__snapshots__/extended-load-more.test.js.snap +11 -0
  66. package/src/components/Atoms/ExtendedLoadMore/extended-load-more.test.js +19 -0
  67. package/src/components/Atoms/ExtendedLoadMore/index.js +112 -0
  68. package/src/components/Atoms/FallbackImage/fallback.m.css +33 -0
  69. package/src/components/Atoms/FallbackImage/index.js +30 -0
  70. package/src/components/Atoms/Headline/README.md +7 -0
  71. package/src/components/Atoms/Headline/headline.m.css +26 -0
  72. package/src/components/Atoms/Headline/index.js +76 -0
  73. package/src/components/Atoms/Headline/stories.js +52 -0
  74. package/src/components/Atoms/HeroImage/README.md +13 -0
  75. package/src/components/Atoms/HeroImage/hero-image.m.css +71 -0
  76. package/src/components/Atoms/HeroImage/index.js +165 -0
  77. package/src/components/Atoms/HeroImage/stories.js +22 -0
  78. package/src/components/Atoms/LoadMoreTarget/index.js +24 -0
  79. package/src/components/Atoms/Loadmore/README.md +0 -0
  80. package/src/components/Atoms/Loadmore/__snapshots__/load-more.test.js.snap +25 -0
  81. package/src/components/Atoms/Loadmore/index.js +41 -0
  82. package/src/components/Atoms/Loadmore/load-more.m.css +23 -0
  83. package/src/components/Atoms/Loadmore/load-more.test.js +30 -0
  84. package/src/components/Atoms/Loadmore/stories.js +17 -0
  85. package/src/components/Atoms/MagazineCoverImage/README.md +21 -0
  86. package/src/components/Atoms/MagazineCoverImage/index.js +61 -0
  87. package/src/components/Atoms/MagazineCoverImage/magazine-cover-image.m.css +24 -0
  88. package/src/components/Atoms/MagazineCoverImage/stories.js +21 -0
  89. package/src/components/Atoms/PremiumStoryIcon/index.js +27 -0
  90. package/src/components/Atoms/PublishDetail/README.md +15 -0
  91. package/src/components/Atoms/PublishDetail/index.js +63 -0
  92. package/src/components/Atoms/PublishDetail/publish-details.m.css +47 -0
  93. package/src/components/Atoms/PublishDetail/publish-details.test.js +22 -0
  94. package/src/components/Atoms/PublishDetail/stories.js +21 -0
  95. package/src/components/Atoms/ReadTime/README.md +13 -0
  96. package/src/components/Atoms/ReadTime/index.js +44 -0
  97. package/src/components/Atoms/ReadTime/read-time.m.css +25 -0
  98. package/src/components/Atoms/ReadTime/read-time.test.js +18 -0
  99. package/src/components/Atoms/ReadTime/stories.js +19 -0
  100. package/src/components/Atoms/ScrollSnap/SliderArrow/index.js +57 -0
  101. package/src/components/Atoms/ScrollSnap/SliderArrow/slider-arrow.m.css +45 -0
  102. package/src/components/Atoms/ScrollSnap/SliderIndicator/index.js +41 -0
  103. package/src/components/Atoms/ScrollSnap/SliderIndicator/slider-indicator.m.css +71 -0
  104. package/src/components/Atoms/ScrollSnap/index.js +136 -0
  105. package/src/components/Atoms/ScrollSnap/scroll-snap.m.css +27 -0
  106. package/src/components/Atoms/SectionTag/README.md +11 -0
  107. package/src/components/Atoms/SectionTag/index.js +61 -0
  108. package/src/components/Atoms/SectionTag/section.m.css +53 -0
  109. package/src/components/Atoms/SectionTag/stories.js +26 -0
  110. package/src/components/Atoms/SocialSharePopup/README.md +25 -0
  111. package/src/components/Atoms/SocialSharePopup/__snapshots__/social-share-popup.test.js.snap +653 -0
  112. package/src/components/Atoms/SocialSharePopup/index.js +61 -0
  113. package/src/components/Atoms/SocialSharePopup/social-share-popup.m.css +109 -0
  114. package/src/components/Atoms/SocialSharePopup/social-share-popup.test.js +93 -0
  115. package/src/components/Atoms/SocialSharePopup/stories.js +19 -0
  116. package/src/components/Atoms/StoryElements/AlsoRead/README.md +49 -0
  117. package/src/components/Atoms/StoryElements/AlsoRead/also-read.m.css +135 -0
  118. package/src/components/Atoms/StoryElements/AlsoRead/also-read.test.js +83 -0
  119. package/src/components/Atoms/StoryElements/AlsoRead/index.js +117 -0
  120. package/src/components/Atoms/StoryElements/AlsoRead/stories.js +40 -0
  121. package/src/components/Atoms/StoryElements/Attachment/README.md +21 -0
  122. package/src/components/Atoms/StoryElements/Attachment/__snapshots__/attachment.test.js.snap +47 -0
  123. package/src/components/Atoms/StoryElements/Attachment/attachment.m.css +125 -0
  124. package/src/components/Atoms/StoryElements/Attachment/attachment.test.js +39 -0
  125. package/src/components/Atoms/StoryElements/Attachment/index.js +62 -0
  126. package/src/components/Atoms/StoryElements/Attachment/stories.js +48 -0
  127. package/src/components/Atoms/StoryElements/BigFact/README.md +9 -0
  128. package/src/components/Atoms/StoryElements/BigFact/big-fact.m.css +41 -0
  129. package/src/components/Atoms/StoryElements/BigFact/big-fact.test.js +21 -0
  130. package/src/components/Atoms/StoryElements/BigFact/index.js +33 -0
  131. package/src/components/Atoms/StoryElements/BigFact/stories.js +9 -0
  132. package/src/components/Atoms/StoryElements/BlockQuote/README.md +49 -0
  133. package/src/components/Atoms/StoryElements/BlockQuote/Svg/curve.js +26 -0
  134. package/src/components/Atoms/StoryElements/BlockQuote/Svg/edge.js +26 -0
  135. package/src/components/Atoms/StoryElements/BlockQuote/Svg/icon.m.css +4 -0
  136. package/src/components/Atoms/StoryElements/BlockQuote/block-quote.m.css +161 -0
  137. package/src/components/Atoms/StoryElements/BlockQuote/block-quote.test.js +48 -0
  138. package/src/components/Atoms/StoryElements/BlockQuote/index.js +82 -0
  139. package/src/components/Atoms/StoryElements/BlockQuote/stories.js +35 -0
  140. package/src/components/Atoms/StoryElements/Blurb/README.md +43 -0
  141. package/src/components/Atoms/StoryElements/Blurb/blurb.m.css +55 -0
  142. package/src/components/Atoms/StoryElements/Blurb/blurb.test.js +46 -0
  143. package/src/components/Atoms/StoryElements/Blurb/index.js +53 -0
  144. package/src/components/Atoms/StoryElements/Blurb/stories.js +28 -0
  145. package/src/components/Atoms/StoryElements/Image/README.md +13 -0
  146. package/src/components/Atoms/StoryElements/Image/image.m.css +17 -0
  147. package/src/components/Atoms/StoryElements/Image/image.test.js +20 -0
  148. package/src/components/Atoms/StoryElements/Image/index.js +57 -0
  149. package/src/components/Atoms/StoryElements/Image/stories.js +25 -0
  150. package/src/components/Atoms/StoryElements/ImageSlideshow/README.md +13 -0
  151. package/src/components/Atoms/StoryElements/ImageSlideshow/image-slideshow.m.css +49 -0
  152. package/src/components/Atoms/StoryElements/ImageSlideshow/index.js +63 -0
  153. package/src/components/Atoms/StoryElements/ImageSlideshow/stories.js +34 -0
  154. package/src/components/Atoms/StoryElements/QuestionAnswer/README.md +56 -0
  155. package/src/components/Atoms/StoryElements/QuestionAnswer/index.js +134 -0
  156. package/src/components/Atoms/StoryElements/QuestionAnswer/question-answer.m.css +106 -0
  157. package/src/components/Atoms/StoryElements/QuestionAnswer/question-answer.test.js +74 -0
  158. package/src/components/Atoms/StoryElements/QuestionAnswer/stories.js +79 -0
  159. package/src/components/Atoms/StoryElements/Quote/README.md +41 -0
  160. package/src/components/Atoms/StoryElements/Quote/index.js +44 -0
  161. package/src/components/Atoms/StoryElements/Quote/quote.m.css +111 -0
  162. package/src/components/Atoms/StoryElements/Quote/quote.test.js +39 -0
  163. package/src/components/Atoms/StoryElements/Quote/stories.js +28 -0
  164. package/src/components/Atoms/StoryElements/Reference/README.md +9 -0
  165. package/src/components/Atoms/StoryElements/Reference/index.js +52 -0
  166. package/src/components/Atoms/StoryElements/Reference/reference.m.css +42 -0
  167. package/src/components/Atoms/StoryElements/Reference/reference.test.js +28 -0
  168. package/src/components/Atoms/StoryElements/Reference/stories.js +18 -0
  169. package/src/components/Atoms/StoryElements/StoryElement/README.md +10 -0
  170. package/src/components/Atoms/StoryElements/StoryElement/index.js +21 -0
  171. package/src/components/Atoms/StoryElements/StoryElement/stories.js +20 -0
  172. package/src/components/Atoms/StoryElements/StoryElement/storyelement.test.js +13 -0
  173. package/src/components/Atoms/StoryElements/Summary/README.md +56 -0
  174. package/src/components/Atoms/StoryElements/Summary/index.js +68 -0
  175. package/src/components/Atoms/StoryElements/Summary/stories.js +33 -0
  176. package/src/components/Atoms/StoryElements/Summary/summary.m.css +121 -0
  177. package/src/components/Atoms/StoryElements/Summary/summary.test.js +50 -0
  178. package/src/components/Atoms/StoryElements/Text/README.md +32 -0
  179. package/src/components/Atoms/StoryElements/Text/index.js +41 -0
  180. package/src/components/Atoms/StoryElements/Text/stories.js +32 -0
  181. package/src/components/Atoms/StoryElements/Text/text.m.css +48 -0
  182. package/src/components/Atoms/StoryElements/Text/text.test.js +42 -0
  183. package/src/components/Atoms/StoryElements/Video/README.md +9 -0
  184. package/src/components/Atoms/StoryElements/Video/index.js +23 -0
  185. package/src/components/Atoms/StoryElements/Video/stories.js +24 -0
  186. package/src/components/Atoms/StoryElements/Video/video.m.css +3 -0
  187. package/src/components/Atoms/StoryElements/Video/video.test.js +13 -0
  188. package/src/components/Atoms/StoryElements/imageGallery/README.md +18 -0
  189. package/src/components/Atoms/StoryElements/imageGallery/image-gallery.m.css +48 -0
  190. package/src/components/Atoms/StoryElements/imageGallery/image-gallery.test.js +19 -0
  191. package/src/components/Atoms/StoryElements/imageGallery/index.js +74 -0
  192. package/src/components/Atoms/StoryElements/imageGallery/stories.js +23 -0
  193. package/src/components/Atoms/StoryElements/withElementWrapper.js +13 -0
  194. package/src/components/Atoms/StoryElements/withElementWrapper.test.js +31 -0
  195. package/src/components/Atoms/StoryHeadline/index.js +36 -0
  196. package/src/components/Atoms/StoryHeadline/story-headline.m.css +36 -0
  197. package/src/components/Atoms/StoryTags/README.md +9 -0
  198. package/src/components/Atoms/StoryTags/index.js +33 -0
  199. package/src/components/Atoms/StoryTags/stories.js +25 -0
  200. package/src/components/Atoms/StoryTags/story-tags.test.js +18 -0
  201. package/src/components/Atoms/StoryTags/tags.m.css +34 -0
  202. package/src/components/Atoms/Subheadline/README.md +17 -0
  203. package/src/components/Atoms/Subheadline/index.js +54 -0
  204. package/src/components/Atoms/Subheadline/stories.js +12 -0
  205. package/src/components/Atoms/Subheadline/subheadline.m.css +17 -0
  206. package/src/components/Atoms/TimeStamp/README.md +9 -0
  207. package/src/components/Atoms/TimeStamp/index.js +37 -0
  208. package/src/components/Atoms/TimeStamp/stories.js +9 -0
  209. package/src/components/Atoms/TimeStamp/timestamp.m.css +22 -0
  210. package/src/components/Fixture/config.json +2703 -0
  211. package/src/components/Fixture/dummy-collection.js +2787 -0
  212. package/src/components/Fixture/dummyStory.js +2148 -0
  213. package/src/components/Fixture/index.js +424 -0
  214. package/src/components/Fixture/slot-config.js +29 -0
  215. package/src/components/Molecules/FullScreenImages/fullscreenimages.scss +48 -0
  216. package/src/components/Molecules/FullScreenImages/index.js +86 -0
  217. package/src/components/Molecules/KeyEvents/README.md +21 -0
  218. package/src/components/Molecules/KeyEvents/index.js +109 -0
  219. package/src/components/Molecules/KeyEvents/key-events.m.css +89 -0
  220. package/src/components/Molecules/KeyEvents/stories.js +28 -0
  221. package/src/components/Molecules/PageIntroductionCard/README.md +25 -0
  222. package/src/components/Molecules/PageIntroductionCard/index.js +50 -0
  223. package/src/components/Molecules/PageIntroductionCard/page-intro-card.m.css +61 -0
  224. package/src/components/Molecules/PageIntroductionCard/stories.js +16 -0
  225. package/src/components/Molecules/SliderHorizontalCard/README.md +14 -0
  226. package/src/components/Molecules/SliderHorizontalCard/index.js +45 -0
  227. package/src/components/Molecules/SliderHorizontalCard/slider-horizontal-card.m.css +42 -0
  228. package/src/components/Molecules/SliderHorizontalCard/stories.js +30 -0
  229. package/src/components/Molecules/SocialShareTemplate/README.md +118 -0
  230. package/src/components/Molecules/SocialShareTemplate/__snapshots__/social-share-template.test.js.snap +738 -0
  231. package/src/components/Molecules/SocialShareTemplate/index.js +119 -0
  232. package/src/components/Molecules/SocialShareTemplate/social-share-data.js +66 -0
  233. package/src/components/Molecules/SocialShareTemplate/social-share-template.m.css +174 -0
  234. package/src/components/Molecules/SocialShareTemplate/social-share-template.test.js +116 -0
  235. package/src/components/Molecules/SocialShareTemplate/stories.js +40 -0
  236. package/src/components/Molecules/StoryCard/README.md +75 -0
  237. package/src/components/Molecules/StoryCard/READMEBGIMAGE.md +25 -0
  238. package/src/components/Molecules/StoryCard/READMEBORDER.md +61 -0
  239. package/src/components/Molecules/StoryCard/index.js +173 -0
  240. package/src/components/Molecules/StoryCard/stories.js +223 -0
  241. package/src/components/Molecules/StoryCard/storycard.m.css +158 -0
  242. package/src/components/Molecules/StoryCardWithBulletPoint/README.md +9 -0
  243. package/src/components/Molecules/StoryCardWithBulletPoint/index.js +32 -0
  244. package/src/components/Molecules/StoryCardWithBulletPoint/stories.js +31 -0
  245. package/src/components/Molecules/StoryCardWithBulletPoint/story-card-with-bullet-point.m.css +7 -0
  246. package/src/components/Molecules/StoryElementCard/README.md +9 -0
  247. package/src/components/Molecules/StoryElementCard/index.js +358 -0
  248. package/src/components/Molecules/StoryElementCard/stories.js +27 -0
  249. package/src/components/Molecules/StoryElementCard/story-element-card.m.css +78 -0
  250. package/src/components/Molecules/StorycardContent/README.md +34 -0
  251. package/src/components/Molecules/StorycardContent/index.js +76 -0
  252. package/src/components/Molecules/StorycardContent/stories.js +39 -0
  253. package/src/components/Molecules/StorycardContent/storycardContent.m.css +21 -0
  254. package/src/components/Rows/AlternateCollectionFilter/README.md +38 -0
  255. package/src/components/Rows/AlternateCollectionFilter/alternate-collection-filter.m.css +254 -0
  256. package/src/components/Rows/AlternateCollectionFilter/index.js +179 -0
  257. package/src/components/Rows/AlternateCollectionFilter/stories.js +74 -0
  258. package/src/components/Rows/AsideCollection/README.md +27 -0
  259. package/src/components/Rows/AsideCollection/aside-collection.m.css +103 -0
  260. package/src/components/Rows/AsideCollection/aside-collection.test.js +34 -0
  261. package/src/components/Rows/AsideCollection/index.js +175 -0
  262. package/src/components/Rows/AsideCollection/stories.js +52 -0
  263. package/src/components/Rows/AuthorIntroductionCard/README.md +43 -0
  264. package/src/components/Rows/AuthorIntroductionCard/author-intro.m.css +278 -0
  265. package/src/components/Rows/AuthorIntroductionCard/author-intro.test.js +106 -0
  266. package/src/components/Rows/AuthorIntroductionCard/index.js +120 -0
  267. package/src/components/Rows/AuthorIntroductionCard/stories.js +43 -0
  268. package/src/components/Rows/AuthorsList/README.md +24 -0
  269. package/src/components/Rows/AuthorsList/author-list.test.js +50 -0
  270. package/src/components/Rows/AuthorsList/authors-list.m.css +22 -0
  271. package/src/components/Rows/AuthorsList/index.js +50 -0
  272. package/src/components/Rows/AuthorsList/stories.js +61 -0
  273. package/src/components/Rows/CollectionFilter/README.md +39 -0
  274. package/src/components/Rows/CollectionFilter/collection-filter.m.css +213 -0
  275. package/src/components/Rows/CollectionFilter/index.js +232 -0
  276. package/src/components/Rows/CollectionFilter/stories.js +77 -0
  277. package/src/components/Rows/ElevenStories/11-stories.m.css +85 -0
  278. package/src/components/Rows/ElevenStories/README.md +39 -0
  279. package/src/components/Rows/ElevenStories/index.js +332 -0
  280. package/src/components/Rows/ElevenStories/stories.js +70 -0
  281. package/src/components/Rows/FourColFiveStories/README.md +37 -0
  282. package/src/components/Rows/FourColFiveStories/four-col-five-stories.m.css +56 -0
  283. package/src/components/Rows/FourColFiveStories/index.js +159 -0
  284. package/src/components/Rows/FourColFiveStories/stories.js +67 -0
  285. package/src/components/Rows/FourColGrid/README.md +38 -0
  286. package/src/components/Rows/FourColGrid/four-col.m.css +50 -0
  287. package/src/components/Rows/FourColGrid/index.js +137 -0
  288. package/src/components/Rows/FourColGrid/stories.js +65 -0
  289. package/src/components/Rows/FourColSixteenStories/README.md +35 -0
  290. package/src/components/Rows/FourColSixteenStories/four-col-sixteen-stories.m.css +104 -0
  291. package/src/components/Rows/FourColSixteenStories/index.js +103 -0
  292. package/src/components/Rows/FourColSixteenStories/stories.js +46 -0
  293. package/src/components/Rows/FourColTwelveStory/README.md +39 -0
  294. package/src/components/Rows/FourColTwelveStory/four-col-twelve-story.m.css +71 -0
  295. package/src/components/Rows/FourColTwelveStory/index.js +176 -0
  296. package/src/components/Rows/FourColTwelveStory/stories.js +117 -0
  297. package/src/components/Rows/FourStorySlider/README.md +45 -0
  298. package/src/components/Rows/FourStorySlider/four-story-slider.m.css +45 -0
  299. package/src/components/Rows/FourStorySlider/index.js +127 -0
  300. package/src/components/Rows/FourStorySlider/stories.js +117 -0
  301. package/src/components/Rows/FourTabbedBigStorySlider/README.md +39 -0
  302. package/src/components/Rows/FourTabbedBigStorySlider/four-tabbed-big-story-slider.m.css +221 -0
  303. package/src/components/Rows/FourTabbedBigStorySlider/index.js +161 -0
  304. package/src/components/Rows/FourTabbedBigStorySlider/stories.js +63 -0
  305. package/src/components/Rows/FullScreenSlider/README.md +46 -0
  306. package/src/components/Rows/FullScreenSlider/full-screen-slider.m.css +110 -0
  307. package/src/components/Rows/FullScreenSlider/index.js +114 -0
  308. package/src/components/Rows/FullScreenSlider/stories.js +115 -0
  309. package/src/components/Rows/HalfScreenSlider/README.md +43 -0
  310. package/src/components/Rows/HalfScreenSlider/half-screen-slider.m.css +35 -0
  311. package/src/components/Rows/HalfScreenSlider/index.js +104 -0
  312. package/src/components/Rows/HalfScreenSlider/stories.js +115 -0
  313. package/src/components/Rows/ListComponent/README.md +48 -0
  314. package/src/components/Rows/ListComponent/index.js +150 -0
  315. package/src/components/Rows/ListComponent/list-component.m.css +65 -0
  316. package/src/components/Rows/ListComponent/stories.js +63 -0
  317. package/src/components/Rows/MagazineEditions/README.md +21 -0
  318. package/src/components/Rows/MagazineEditions/index.js +91 -0
  319. package/src/components/Rows/MagazineEditions/magazine-editions.m.css +50 -0
  320. package/src/components/Rows/MagazineEditions/magazine-editions.test.js +33 -0
  321. package/src/components/Rows/MagazineEditions/stories.js +45 -0
  322. package/src/components/Rows/MagazineHeaderCard/README.md +21 -0
  323. package/src/components/Rows/MagazineHeaderCard/index.js +72 -0
  324. package/src/components/Rows/MagazineHeaderCard/magazine-cards.m.css +106 -0
  325. package/src/components/Rows/MagazineHeaderCard/stories.js +36 -0
  326. package/src/components/Rows/MagazineWidget/README.md +21 -0
  327. package/src/components/Rows/MagazineWidget/index.js +127 -0
  328. package/src/components/Rows/MagazineWidget/stories.js +43 -0
  329. package/src/components/Rows/OneColStoryList/README.md +48 -0
  330. package/src/components/Rows/OneColStoryList/index.js +196 -0
  331. package/src/components/Rows/OneColStoryList/one-col-story-list.m.css +81 -0
  332. package/src/components/Rows/OneColStoryList/stories.js +61 -0
  333. package/src/components/Rows/OpinionCollection/README.md +34 -0
  334. package/src/components/Rows/OpinionCollection/index.js +124 -0
  335. package/src/components/Rows/OpinionCollection/opinion-collection.m.css +118 -0
  336. package/src/components/Rows/OpinionCollection/stories.js +48 -0
  337. package/src/components/Rows/SixColSixStories/README.md +37 -0
  338. package/src/components/Rows/SixColSixStories/index.js +134 -0
  339. package/src/components/Rows/SixColSixStories/six-col-six-stories.m.css +75 -0
  340. package/src/components/Rows/SixColSixStories/stories.js +73 -0
  341. package/src/components/Rows/StoryTemplates/ListicleStoryTemplates/README.md +19 -0
  342. package/src/components/Rows/StoryTemplates/ListicleStoryTemplates/__snapshots__/listicle-story.test.js.snap +837 -0
  343. package/src/components/Rows/StoryTemplates/ListicleStoryTemplates/index.js +287 -0
  344. package/src/components/Rows/StoryTemplates/ListicleStoryTemplates/listicle-story.m.css +229 -0
  345. package/src/components/Rows/StoryTemplates/ListicleStoryTemplates/listicle-story.test.js +47 -0
  346. package/src/components/Rows/StoryTemplates/ListicleStoryTemplates/stories.js +117 -0
  347. package/src/components/Rows/StoryTemplates/LiveBlogStoryTemplates/README.md +25 -0
  348. package/src/components/Rows/StoryTemplates/LiveBlogStoryTemplates/index.js +51 -0
  349. package/src/components/Rows/StoryTemplates/LiveBlogStoryTemplates/live-blog.m.css +326 -0
  350. package/src/components/Rows/StoryTemplates/LiveBlogStoryTemplates/stories.js +120 -0
  351. package/src/components/Rows/StoryTemplates/LiveBlogStoryTemplates/templates.js +376 -0
  352. package/src/components/Rows/StoryTemplates/PhotoStoryTemplates/index.js +246 -0
  353. package/src/components/Rows/StoryTemplates/PhotoStoryTemplates/photo-story.test.js +144 -0
  354. package/src/components/Rows/StoryTemplates/PhotoStoryTemplates/photo.m.css +175 -0
  355. package/src/components/Rows/StoryTemplates/PhotoStoryTemplates/stories.js +123 -0
  356. package/src/components/Rows/StoryTemplates/TextStoryTemplates/README.md +49 -0
  357. package/src/components/Rows/StoryTemplates/TextStoryTemplates/index.js +69 -0
  358. package/src/components/Rows/StoryTemplates/TextStoryTemplates/stories.js +125 -0
  359. package/src/components/Rows/StoryTemplates/TextStoryTemplates/templates.js +272 -0
  360. package/src/components/Rows/StoryTemplates/TextStoryTemplates/text-story.m.css +449 -0
  361. package/src/components/Rows/StoryTemplates/TextStoryTemplates/text-story.test.js +222 -0
  362. package/src/components/Rows/StoryTemplates/VideoStoryTemplates/README.md +31 -0
  363. package/src/components/Rows/StoryTemplates/VideoStoryTemplates/index.js +234 -0
  364. package/src/components/Rows/StoryTemplates/VideoStoryTemplates/stories.js +204 -0
  365. package/src/components/Rows/StoryTemplates/VideoStoryTemplates/video-story.m.css +195 -0
  366. package/src/components/Rows/TagIntroductionCard/README.md +11 -0
  367. package/src/components/Rows/TagIntroductionCard/index.js +26 -0
  368. package/src/components/Rows/TagIntroductionCard/stories.js +21 -0
  369. package/src/components/Rows/TagIntroductionCard/tag-intro-card.module.css +30 -0
  370. package/src/components/Rows/ThreeColFlexStories/README.md +38 -0
  371. package/src/components/Rows/ThreeColFlexStories/index.js +180 -0
  372. package/src/components/Rows/ThreeColFlexStories/stories.js +73 -0
  373. package/src/components/Rows/ThreeColFlexStories/three-col-flex-stories.m.css +60 -0
  374. package/src/components/Rows/ThreeColFourteenStory/README.md +28 -0
  375. package/src/components/Rows/ThreeColFourteenStory/index.js +135 -0
  376. package/src/components/Rows/ThreeColFourteenStory/stories.js +60 -0
  377. package/src/components/Rows/ThreeColFourteenStory/three-col-fourteen-story.m.css +51 -0
  378. package/src/components/Rows/ThreeColGrid/README.md +36 -0
  379. package/src/components/Rows/ThreeColGrid/index.js +141 -0
  380. package/src/components/Rows/ThreeColGrid/stories.js +70 -0
  381. package/src/components/Rows/ThreeColGrid/three-col.m.css +43 -0
  382. package/src/components/Rows/ThreeColSevenStory/README.md +36 -0
  383. package/src/components/Rows/ThreeColSevenStory/index.js +172 -0
  384. package/src/components/Rows/ThreeColSevenStory/stories.js +71 -0
  385. package/src/components/Rows/ThreeColSevenStory/three-col-seven-story.m.css +44 -0
  386. package/src/components/Rows/ThreeColSixStories/README.md +40 -0
  387. package/src/components/Rows/ThreeColSixStories/index.js +161 -0
  388. package/src/components/Rows/ThreeColSixStories/stories.js +73 -0
  389. package/src/components/Rows/ThreeColSixStories/three-col-six-stories.m.css +32 -0
  390. package/src/components/Rows/ThreeColTwelveStories/README.md +41 -0
  391. package/src/components/Rows/ThreeColTwelveStories/index.js +123 -0
  392. package/src/components/Rows/ThreeColTwelveStories/stories.js +51 -0
  393. package/src/components/Rows/ThreeColTwelveStories/three-col-twelve-stories.m.css +83 -0
  394. package/src/components/Rows/TwoColFourStory/README.md +33 -0
  395. package/src/components/Rows/TwoColFourStory/index.js +151 -0
  396. package/src/components/Rows/TwoColFourStory/stories.js +68 -0
  397. package/src/components/Rows/TwoColFourStory/two-col-four-story.m.css +56 -0
  398. package/src/components/Rows/TwoColFourStoryHighlight/README.md +35 -0
  399. package/src/components/Rows/TwoColFourStoryHighlight/index.js +122 -0
  400. package/src/components/Rows/TwoColFourStoryHighlight/stories.js +48 -0
  401. package/src/components/Rows/TwoColFourStoryHighlight/two-col-four-story-highlight.m.css +116 -0
  402. package/src/components/Rows/TwoColSixStories/README.md +36 -0
  403. package/src/components/Rows/TwoColSixStories/index.js +117 -0
  404. package/src/components/Rows/TwoColSixStories/stories.js +67 -0
  405. package/src/components/Rows/TwoColSixStories/two-col-six-stories.m.css +79 -0
  406. package/src/components/Rows/TwoColTenStoriesSidebar/README.md +34 -0
  407. package/src/components/Rows/TwoColTenStoriesSidebar/index.js +168 -0
  408. package/src/components/Rows/TwoColTenStoriesSidebar/stories.js +45 -0
  409. package/src/components/Rows/TwoColTenStoriesSidebar/two-col-ten-stories-sidebar.m.css +52 -0
  410. package/src/components/Rows/TwoColThreeStory/README.md +36 -0
  411. package/src/components/Rows/TwoColThreeStory/index.js +137 -0
  412. package/src/components/Rows/TwoColThreeStory/stories.js +68 -0
  413. package/src/components/Rows/TwoColThreeStory/two-col-three-story.m.css +36 -0
  414. package/src/components/SharedContext.js +13 -0
  415. package/src/components/Svgs/Loading/loading.js +133 -0
  416. package/src/components/Svgs/Loading/loading.m.css +5 -0
  417. package/src/components/Svgs/SocialIcons/facebook.js +15 -0
  418. package/src/components/Svgs/SocialIcons/instagram.js +24 -0
  419. package/src/components/Svgs/SocialIcons/linkedin.js +15 -0
  420. package/src/components/Svgs/SocialIcons/pinterest.js +12 -0
  421. package/src/components/Svgs/SocialIcons/twitter.js +15 -0
  422. package/src/components/Svgs/SocialIcons/whatsapp.js +17 -0
  423. package/src/components/Svgs/SocialIcons/youtube.js +17 -0
  424. package/src/components/Svgs/caret-right.svg +3 -0
  425. package/src/components/Svgs/clock-icon.js +17 -0
  426. package/src/components/Svgs/close-icon.js +15 -0
  427. package/src/components/Svgs/crown.js +31 -0
  428. package/src/components/Svgs/fallbackImage.js +42 -0
  429. package/src/components/Svgs/key.js +33 -0
  430. package/src/components/Svgs/left-arrow.js +17 -0
  431. package/src/components/Svgs/liveicon.js +13 -0
  432. package/src/components/Svgs/lock.js +31 -0
  433. package/src/components/Svgs/right-arrow.js +17 -0
  434. package/src/components/Svgs/share-icon.js +17 -0
  435. package/src/components/Svgs/star.js +28 -0
  436. package/src/components/Svgs/user-fallback-icon.js +19 -0
  437. package/src/components/Typography/README.md +7 -0
  438. package/src/components/Typography/index.js +47 -0
  439. package/src/components/Typography/stories.js +10 -0
  440. package/src/components/Typography/style.m.css +11 -0
  441. package/src/entry-points.js +337 -0
  442. package/src/guide/stories.js +18 -0
  443. package/src/hydration-component/index.js +37 -0
  444. package/src/hydration-component/useNearScreen.js +56 -0
  445. package/src/index.js +85 -0
  446. package/src/utils/testing-utils.js +8 -0
  447. package/src/utils/utils.js +280 -0
  448. package/src/utils/utils.test.js +55 -0
  449. package/storybook/index.js +83 -0
  450. package/AlsoRead/styles.arrow.css +0 -1
  451. package/AsideCollection/styles.arrow.css +0 -1
  452. package/Attachment/styles.arrow.css +0 -1
  453. package/Author/styles.arrow.css +0 -1
  454. package/AuthorIntroductionCard/styles.arrow.css +0 -1
  455. package/AuthorPageIntroductionCard/styles.arrow.css +0 -1
  456. package/AuthorWithTime/styles.arrow.css +0 -1
  457. package/AuthorsList/styles.arrow.css +0 -1
  458. package/BigFact/styles.arrow.css +0 -1
  459. package/BlockQuote/styles.arrow.css +0 -1
  460. package/Blurb/styles.arrow.css +0 -1
  461. package/CollectionFilter/styles.arrow.css +0 -1
  462. package/CollectionName/styles.arrow.css +0 -1
  463. package/ElevenStories/styles.arrow.css +0 -1
  464. package/FourColGrid/styles.arrow.css +0 -1
  465. package/FourColTwelveStories/styles.arrow.css +0 -1
  466. package/FourStorySlider/styles.arrow.css +0 -1
  467. package/FullScreenSlider/styles.arrow.css +0 -1
  468. package/HalfScreenSlider/styles.arrow.css +0 -1
  469. package/Headline/styles.arrow.css +0 -1
  470. package/HeroImage/styles.arrow.css +0 -1
  471. package/Image/styles.arrow.css +0 -1
  472. package/ImageGallery/styles.arrow.css +0 -1
  473. package/ImageSlideshow/styles.arrow.css +0 -1
  474. package/ListComponent/styles.arrow.css +0 -1
  475. package/ListicleStoryTemplate/styles.arrow.css +0 -1
  476. package/LiveBlogStoryTemplate/styles.arrow.css +0 -1
  477. package/LoadmoreButton/styles.arrow.css +0 -1
  478. package/MagazineEditions/styles.arrow.css +0 -1
  479. package/MagazineHeaderCard/styles.arrow.css +0 -1
  480. package/MagazineWidget/styles.arrow.css +0 -1
  481. package/OneColStoryList/styles.arrow.css +0 -1
  482. package/PhotoStoryTemplate/styles.arrow.css +0 -1
  483. package/QuestionAnswer/styles.arrow.css +0 -1
  484. package/Quote/styles.arrow.css +0 -1
  485. package/Reference/styles.arrow.css +0 -1
  486. package/SectionTag/styles.arrow.css +0 -1
  487. package/StoryCard/styles.arrow.css +0 -1
  488. package/StoryElementCard/styles.arrow.css +0 -1
  489. package/StorycardContent/styles.arrow.css +0 -1
  490. package/Subheadline/styles.arrow.css +0 -1
  491. package/Summary/styles.arrow.css +0 -1
  492. package/TagIntroductionCard/styles.arrow.css +0 -1
  493. package/Text/styles.arrow.css +0 -1
  494. package/TextStoryTemplate/styles.arrow.css +0 -1
  495. package/ThreeColFourteenStories/styles.arrow.css +0 -1
  496. package/ThreeColGrid/styles.arrow.css +0 -1
  497. package/ThreeColSevenStory/styles.arrow.css +0 -1
  498. package/ThreeColSixStories/styles.arrow.css +0 -1
  499. package/TimeStamp/styles.arrow.css +0 -1
  500. package/TwoColFourStories/styles.arrow.css +0 -1
  501. package/TwoColThreeStories/styles.arrow.css +0 -1
  502. package/Video/styles.arrow.css +0 -1
  503. package/VideoStoryTemplate/styles.arrow.css +0 -1
  504. package/cjs/index.js +0 -1
  505. package/esm/index.js +0 -1
@@ -0,0 +1,121 @@
1
+ @value viewports: "../../../../../assets/stylesheets/viewports.m.css";
2
+ @value mobile from viewports;
3
+
4
+ .headline {
5
+ font-size: var(--arrow-fs-s);
6
+ font-weight: var(--arrow-fw-bold);
7
+ @media (min-width: mobile) {
8
+ font-size: var(--arrow-fs-m);
9
+ }
10
+ }
11
+
12
+ .summary:global(.arrow-component) .content p {
13
+ font-style: italic;
14
+ }
15
+
16
+ .summary:global(.arrow-component) .content > p,
17
+ .summary-header:global(.arrow-component) .content > p,
18
+ .summary-border:global(.arrow-component) .content > p,
19
+ .dark {
20
+ font-size: var(--arrow-fs-s);
21
+ color: var(--arrow-c-dark);
22
+ @media (min-width: mobile) {
23
+ font-size: var(--arrow-fs-m);
24
+ }
25
+ }
26
+
27
+ .summary:global(.arrow-component) .content.light > p,
28
+ .summary-header:global(.arrow-component) .content.light > p,
29
+ .summary-border:global(.arrow-component) .content.light > p {
30
+ color: var(--arrow-c-light);
31
+ }
32
+
33
+ .dark {
34
+ color: var(--arrow-c-mono1);
35
+ }
36
+ .light {
37
+ color: var(--arrow-c-invert-mono1);
38
+ }
39
+
40
+ /* default template */
41
+ .summary .headline {
42
+ margin-bottom: var(--arrow-spacing-xs);
43
+ font-size: var(--arrow-fs-s);
44
+ @media (min-width: mobile) {
45
+ font-size: var(--arrow-fs-l);
46
+ }
47
+ }
48
+
49
+ /* headline template */
50
+ .summary-header .headline {
51
+ padding: var(--arrow-spacing-xs) var(--arrow-spacing-s);
52
+ font-size: var(--arrow-fs-s);
53
+ background-color: var(--arrow-c-brand1);
54
+ @media (min-width: mobile) {
55
+ font-size: var(--arrow-fs-m);
56
+ padding: var(--arrow-spacing-xs) var(--arrow-spacing-l);
57
+ }
58
+ }
59
+ .summary-header .content {
60
+ background-color: var(--arrow-c-invert-mono7);
61
+ padding: var(--arrow-spacing-s);
62
+ @media (min-width: mobile) {
63
+ padding: var(--arrow-spacing-l);
64
+ }
65
+ }
66
+
67
+ /* border template */
68
+ .summary-border .heading-wrapper {
69
+ display: flex;
70
+ margin-bottom: -22px;
71
+ }
72
+
73
+ .summary-border .heading-wrapper::before {
74
+ content: " ";
75
+ position: relative;
76
+ width: var(--arrow-spacing-m);
77
+ border-top: 1px solid var(--arrow-c-dark);
78
+ align-self: center;
79
+ }
80
+
81
+ .summary-border .heading-wrapper.light::before {
82
+ border-top: 1px solid var(--arrow-c-light);
83
+ }
84
+
85
+ .summary-border .heading-wrapper::after {
86
+ content: " ";
87
+ position: relative;
88
+ flex: 1 1 auto;
89
+ border-top: 1px solid var(--arrow-c-dark);
90
+ align-self: center;
91
+ margin-right: 0;
92
+ }
93
+
94
+ .summary-border .heading-wrapper.light::after {
95
+ border-top: 1px solid var(--arrow-c-light);
96
+ }
97
+
98
+ .summary-border .content {
99
+ border: 1px solid var(--arrow-c-dark);
100
+ border-top: none;
101
+ padding: var(--arrow-spacing-l);
102
+ }
103
+
104
+ .summary-border .content.light {
105
+ border: 1px solid var(--arrow-c-light);
106
+ }
107
+ .summary-border .headline {
108
+ background-color: var(--arrow-c-brand1);
109
+ padding: var(--arrow-spacing-xs) var(--arrow-spacing-l);
110
+ line-height: var(--arrow-lh-4);
111
+ border-radius: 2px;
112
+ margin: 0 var(--arrow-spacing-xs);
113
+ }
114
+
115
+ .summary-border .content-border.dark {
116
+ border: 1px solid var(--arrow-c-mono5);
117
+ }
118
+
119
+ .summary-border .content-border.light {
120
+ border: 1px solid var(--arrow-c-invert-mono5);
121
+ }
@@ -0,0 +1,50 @@
1
+ import * as React from "react";
2
+ import { shallow, mount } from "enzyme";
3
+ import expect from "expect";
4
+ import { generateStoryElementData } from "../../../Fixture";
5
+ import { Summary } from "./index";
6
+
7
+ const element = generateStoryElementData("summary");
8
+
9
+ describe("Summary Story Element", () => {
10
+ it("Should render default template", () => {
11
+ const wrapper = mount(<Summary element={element} />);
12
+ expect(wrapper.find({ "data-test-id": "summary" }).prop("className")).toMatch(/summary/);
13
+ });
14
+
15
+ it("Should render border left template", () => {
16
+ const wrapper = mount(<Summary element={element} template="header" />);
17
+ expect(wrapper.find({ "data-test-id": "summary" }).prop("className")).toMatch(/summary-header/);
18
+ });
19
+
20
+ it("Should render border top template", () => {
21
+ const wrapper = mount(<Summary element={element} template="border" />);
22
+ expect(wrapper.find({ "data-test-id": "summary" }).prop("className")).toMatch(/summary-border/);
23
+ });
24
+
25
+ it("Should render template without headline", () => {
26
+ const wrapper = shallow(<Summary element={element} opts={{ hideHeadline: true }} />);
27
+ expect(wrapper.find({ "data-test-id": "summary-headline" }).length).toEqual(0);
28
+ });
29
+
30
+ it("Should render template with custom headline", () => {
31
+ const wrapper = mount(<Summary element={element} opts={{ headline: "in short" }} />);
32
+ expect(wrapper.find({ "data-test-id": "summary-headline" }).text()).toEqual("in short");
33
+ });
34
+
35
+ it("Should render template with header background color", () => {
36
+ const wrapper = mount(<Summary element={element} template="header" css={{ headerBgColor: " #b3243e" }} />);
37
+ expect(wrapper.html()).toBe(
38
+ `<div data-test-id="summary" class="arrow-component arr--summary-element arr-custom-style summary-m_summary-header__UKVHi "><div data-test-id="summary-headline" class="summary-m_heading-wrapper__23S51 summary-m_dark__1ZuzR"><div style="background-color: rgb(179, 36, 62);" class="summary-m_headline__30sie summary-m_dark__1ZuzR summary-m_dark__1ZuzR">Summary</div></div><div class="summary-m_content__37n8C summary-m_dark__1ZuzR"><p>Lorem<em> Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries</em>, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p></div></div>`
39
+ );
40
+ });
41
+
42
+ it("Should render custom template", () => {
43
+ // eslint-disable-next-line react/prop-types
44
+ const customTemplate = ({ element }) => <h3 dangerouslySetInnerHTML={{ __html: element.text }} />;
45
+ const wrapper = shallow(<Summary element={element} render={customTemplate} />);
46
+ expect(wrapper.html()).toBe(
47
+ "<h3><p>Lorem<em> Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries</em>, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p></h3>"
48
+ );
49
+ });
50
+ });
@@ -0,0 +1,32 @@
1
+ # Text Story Element
2
+
3
+ Displays the text story element of the story
4
+
5
+ ## Usage
6
+
7
+ #### Default text story element
8
+ ```jsx
9
+ <Text element={element} />
10
+ ```
11
+
12
+ #### Text story element with external links opening in new tab
13
+ ```jsx
14
+ const opts = { isExternalLink: true };
15
+
16
+ <Text element={element} opts={opts} />
17
+ ```
18
+
19
+ #### Text story element as promotional message
20
+ ```jsx
21
+ const promotionalMessage = { ...element, metadata: { "promotional-message": true } };
22
+ <Text element={promotionalMessage} opts={opts} />
23
+ ```
24
+
25
+ #### Replace default text story element template with custom template passed using render
26
+ ```jsx
27
+ const customTemplate = ({element}) => <h3 dangerouslySetInnerHTML={{ __html: element.text }}/>;
28
+
29
+ <Text element={element} render={customTemplate} />
30
+ ```
31
+
32
+ <!-- PROPS -->
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+ import get from "lodash.get";
4
+ import { withElementWrapper } from "../withElementWrapper";
5
+ import { updateContentLinks, shapeStory, shapeConfig, getTextColor } from "../../../../utils/utils";
6
+ import "./text.m.css";
7
+ import { useStateValue } from "../../../SharedContext";
8
+
9
+ const TextBase = ({ element = {}, opts = {}, css = {}, story = {}, config = {}, ...restProps }) => {
10
+ const content = element.text;
11
+ if (!content) return null;
12
+ const configData = useStateValue() || {};
13
+ const textInvertColor = getTextColor(configData.theme);
14
+ const { textColor } = css;
15
+ const { isExternalLink = true } = opts;
16
+ const text = (isExternalLink && updateContentLinks(content)) || content;
17
+ const isPromotionalMessage = get(element, ["metadata", "promotional-message"], false);
18
+ const updatedStyle = isPromotionalMessage ? "promotionalMessage" : "textElement";
19
+
20
+ return (
21
+ <div
22
+ className="arrow-component arr--text-element"
23
+ styleName={`${updatedStyle} ${textInvertColor}`}
24
+ style={!isPromotionalMessage ? { color: textColor } : {}}
25
+ data-test-id={isPromotionalMessage ? "promotional-message" : "text"}
26
+ dangerouslySetInnerHTML={{ __html: text }}
27
+ id="text-element"
28
+ {...restProps}
29
+ />
30
+ );
31
+ };
32
+
33
+ TextBase.propTypes = {
34
+ element: PropTypes.shape({ text: PropTypes.string }),
35
+ opts: PropTypes.shape({ isExternalLink: PropTypes.bool }),
36
+ css: PropTypes.shape({ hyperlinkColor: PropTypes.string, textColor: PropTypes.string }),
37
+ story: shapeStory,
38
+ config: shapeConfig
39
+ };
40
+
41
+ export const Text = withElementWrapper(TextBase);
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import { withStore } from "../../../../../storybook";
3
+ import { Text } from "./index";
4
+ import Readme from "./README.md";
5
+ import { generateStoryElementData } from "../../../Fixture";
6
+ import { boolean, color } from "@storybook/addon-knobs";
7
+
8
+ const element = generateStoryElementData("text");
9
+
10
+ withStore("Atoms/Story Elements/Text", {}, Readme)
11
+ .add("Default", () => (
12
+ <Text
13
+ element={element}
14
+ opts={{ isExternalLink: boolean("External Link", true) }}
15
+ css={{ hyperlinkColor: color("Hyperlink Color", "#ff214b"), textColor: color("Text Color", "#000") }}
16
+ />
17
+ ))
18
+ .add("Promotional Message", () => {
19
+ const promotionalMessage = { ...element, metadata: { "promotional-message": true } };
20
+ return (
21
+ <Text
22
+ element={promotionalMessage}
23
+ opts={{ isExternalLink: boolean("External Link", true) }}
24
+ css={{ hyperlinkColor: color("Hyperlink Color", "#ff214b") }}
25
+ />
26
+ );
27
+ })
28
+ .add("Custom", () => {
29
+ // eslint-disable-next-line react/prop-types
30
+ const customTemplate = ({ element }) => <h3 dangerouslySetInnerHTML={{ __html: element.text }} />;
31
+ return <Text element={element} render={customTemplate} />;
32
+ });
@@ -0,0 +1,48 @@
1
+ @value viewports: "../../../../../assets/stylesheets/viewports.m.css";
2
+ @value mobile from viewports;
3
+
4
+ .promotionalMessage p {
5
+ font-size: var(--arrow-fs-tiny);
6
+ padding-bottom: var(--arrow-spacing-xxs);
7
+ @media (min-width: mobile) {
8
+ font-size: var(--arrow-fs-xs);
9
+ padding-bottom: var(--arrow-spacing-xs);
10
+ }
11
+ }
12
+
13
+ .textElement p,
14
+ .dark {
15
+ line-height: var(--arrow-lh-5);
16
+ font-size: var(--arrow-fs-s);
17
+ @media (min-width: mobile) {
18
+ font-size: var(--arrow-fs-m);
19
+ }
20
+ }
21
+
22
+ .promotionalMessage a,
23
+ .textElement a {
24
+ color: var(--textElementHyperlinkColor);
25
+ }
26
+
27
+ .textElement a:hover {
28
+ border-bottom: 1px solid var(--textElementHyperlinkColor);
29
+ transition: border 0.3s ease;
30
+ }
31
+
32
+ .textElement.light p {
33
+ color: var(--arrow-c-invert-mono2);
34
+ }
35
+
36
+ .promotionalMessage a:hover {
37
+ color: var(--arrow-c-brand1);
38
+ border-bottom: 1px solid;
39
+ padding-bottom: 3px;
40
+ transition: all 0.3s ease 0s;
41
+ }
42
+
43
+ .promotionalMessage.dark p {
44
+ color: var(--arrow-c-mono4);
45
+ }
46
+ .promotionalMessage.light p {
47
+ color: var(--arrow-c-invert-mono4);
48
+ }
@@ -0,0 +1,42 @@
1
+ import * as React from "react";
2
+ import { shallow, mount } from "enzyme";
3
+ import { Text } from "./index";
4
+ import { generateStoryElementData } from "../../../Fixture";
5
+
6
+ const element = generateStoryElementData("text");
7
+
8
+ describe("Text Story Element", () => {
9
+ it("should render default template", () => {
10
+ const wrapper = mount(<Text element={element} />);
11
+ expect(wrapper.find({ "data-test-id": "text" }).prop("className")).toMatch(/text-element/);
12
+ });
13
+
14
+ it("should render promotional message when it is enabled", () => {
15
+ const promotionalMessage = { ...element, metadata: { "promotional-message": true } };
16
+ const wrapper = mount(<Text element={promotionalMessage} />);
17
+ expect(wrapper.find({ "data-test-id": "promotional-message" }).prop("className")).toMatch(/promotionalMessage/);
18
+ });
19
+
20
+ it("should render default template with external link", () => {
21
+ const wrapper = shallow(<Text opts={{ isExternalLink: true }} element={element} />);
22
+ expect(wrapper.html()).toBe(
23
+ "<div data-test-id=\"text\" id=\"text-element\" class=\"arrow-component arr--text-element text-m_textElement__e3QEt text-m_dark__1TC18 \"><p><a aria-label='content' target='_blank' href=\"https://www.theguardian.com/technology/virtual-reality\">Virtual reality</a> is the air guitar solo of modern cinema: a frenetic imagined activity in a made-up world that exists one level below the already made-up world of the story. <a aria-label='content' target='_blank' href=\"https://www.theguardian.com/film/stevenspielberg\">Steven Spielberg</a> 2019s <a aria-label='content' target='_blank' href=\"https://www.theguardian.com/film/ready-player-one\">Ready Player One</a>.</p></div>"
24
+ );
25
+ });
26
+
27
+ it("should render default template without external link", () => {
28
+ const wrapper = shallow(<Text opts={{ isExternalLink: false }} element={element} />);
29
+ expect(wrapper.html()).toBe(
30
+ '<div data-test-id="text" id="text-element" class="arrow-component arr--text-element text-m_textElement__e3QEt text-m_dark__1TC18 "><p><a href="https://www.theguardian.com/technology/virtual-reality">Virtual reality</a> is the air guitar solo of modern cinema: a frenetic imagined activity in a made-up world that exists one level below the already made-up world of the story. <a href="https://www.theguardian.com/film/stevenspielberg">Steven Spielberg</a> 2019s <a href="https://www.theguardian.com/film/ready-player-one">Ready Player One</a>.</p></div>'
31
+ );
32
+ });
33
+
34
+ it("should render custom template", () => {
35
+ // eslint-disable-next-line react/prop-types
36
+ const customTemplate = ({ element }) => <h3 dangerouslySetInnerHTML={{ __html: element.text }} />;
37
+ const wrapper = shallow(<Text element={element} render={customTemplate} />);
38
+ expect(wrapper.html()).toBe(
39
+ '<h3><p><a href="https://www.theguardian.com/technology/virtual-reality">Virtual reality</a> is the air guitar solo of modern cinema: a frenetic imagined activity in a made-up world that exists one level below the already made-up world of the story. <a href="https://www.theguardian.com/film/stevenspielberg">Steven Spielberg</a> 2019s <a href="https://www.theguardian.com/film/ready-player-one">Ready Player One</a>.</p></h3>'
40
+ );
41
+ });
42
+ });
@@ -0,0 +1,9 @@
1
+ # Video Story Element
2
+
3
+ Video story element is a simple component used to display a video story.
4
+
5
+ ## Usage
6
+
7
+ ```jsx
8
+ <Video element={element} />
9
+ ```
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import { StoryElement } from "@quintype/components";
3
+ import PropTypes from "prop-types";
4
+ import { withElementWrapper } from "../withElementWrapper";
5
+ import { shapeStory, shapeConfig } from "../../../../utils/utils";
6
+ import "./video.m.css";
7
+
8
+ const Videobase = ({ element, story = {}, config = {}, loadIframeOnClick = false, ...restProps }) => {
9
+ return (
10
+ <div styleName="container" {...restProps} data-test-id="video">
11
+ <StoryElement element={element} loadIframeOnClick={loadIframeOnClick} />
12
+ </div>
13
+ );
14
+ };
15
+
16
+ Videobase.propTypes = {
17
+ element: PropTypes.object,
18
+ story: shapeStory,
19
+ config: shapeConfig,
20
+ loadIframeOnClick: PropTypes.bool
21
+ };
22
+
23
+ export const Video = withElementWrapper(Videobase);
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import { withStore } from "../../../../../storybook";
3
+ import { Video } from "./index";
4
+ import Readme from "./README.md";
5
+ import { generateStoryElementData } from "../../../Fixture";
6
+
7
+ const elementYoutube = generateStoryElementData("youtube-video");
8
+ const elementDailyMotion = generateStoryElementData("dailymotion-video");
9
+ const elementTwitter = generateStoryElementData("tweet");
10
+ withStore(
11
+ "Atoms/Story Elements/Video",
12
+
13
+ {
14
+ qt: {
15
+ config: {
16
+ "cdn-image": "thumbor-stg.assettype.com"
17
+ }
18
+ }
19
+ },
20
+ Readme
21
+ )
22
+ .add("Default with youtube video", () => <Video element={elementYoutube} />)
23
+ .add("Dailymotion video", () => <Video element={elementDailyMotion} />)
24
+ .add("Twitter video", () => <Video element={elementTwitter} />);
@@ -0,0 +1,3 @@
1
+ .container iframe {
2
+ max-width: 100%;
3
+ }
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import { shallow } from "enzyme";
3
+ import { Video } from ".";
4
+ import { generateStoryElementData } from "../../../Fixture";
5
+ import { StoryElement } from "@quintype/components";
6
+ const element = generateStoryElementData("youtube-video");
7
+
8
+ describe("Video Story Element", () => {
9
+ it("should render with correct elements", () => {
10
+ const wrapper = shallow(<Video element={element} />).dive();
11
+ expect(wrapper.find(StoryElement).length).toEqual(1);
12
+ });
13
+ });
@@ -0,0 +1,18 @@
1
+ # Image Gallery Element
2
+
3
+ Displays the image gallery story element of the story
4
+
5
+ ## Usage
6
+
7
+ #### Default Image story element
8
+
9
+ ```jsx
10
+ <ImageGallery element={element} />);
11
+ ```
12
+ #### template (with 6 images and rest count on the last image for desktop and 4 images for mobile and rest count on last image) Image story element
13
+
14
+ ```jsx
15
+ <ImageGallery element={element} template="template-2" />);
16
+ ```
17
+
18
+ <!-- PROPS -->
@@ -0,0 +1,48 @@
1
+ @value viewports: "../../../../../assets/stylesheets/viewports.m.css";
2
+ @value mobile from viewports;
3
+
4
+ .image-gallery {
5
+ display: grid;
6
+ grid-template-columns: repeat(2, 1fr);
7
+ grid-gap: var(--arrow-spacing-xxs);
8
+ @media (min-width: mobile) {
9
+ grid-template-columns: repeat(3, 1fr);
10
+ grid-gap: var(--arrow-spacing-xs);
11
+ }
12
+ }
13
+
14
+ .image-gallery figure,
15
+ .image-gallery .image {
16
+ padding-top: 100%;
17
+ }
18
+
19
+ .image-gallery figure.image {
20
+ position: relative;
21
+ cursor: pointer;
22
+ }
23
+
24
+ .image img {
25
+ position: absolute;
26
+ top: 0;
27
+ left: 0;
28
+ right: 0;
29
+ bottom: 0;
30
+ height: 100%;
31
+ }
32
+
33
+ .template-2 .left-images {
34
+ display: flex;
35
+ justify-content: center;
36
+ align-items: center;
37
+ position: absolute;
38
+ top: 0;
39
+ left: 0;
40
+ height: 100%;
41
+ width: 100%;
42
+ background-color: rgba(0, 0, 0, 0.4);
43
+ font-size: var(--arrow-fs-l);
44
+ color: var(--arrow-c-light);
45
+ }
46
+ .left-images::before {
47
+ content: "+";
48
+ }
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+ import { mount } from "enzyme";
3
+ import { Provider } from "react-redux";
4
+ import { ImageGallery } from ".";
5
+ import { generateStoryElementData, generateStore } from "../../../Fixture";
6
+ import { FullScreenImages } from "../../../Molecules/FullScreenImages";
7
+
8
+ const element = generateStoryElementData("image-gallery");
9
+
10
+ describe("Image Gallery Story Element", () => {
11
+ it("should render with correct elements", () => {
12
+ const wrapper = mount(
13
+ <Provider store={generateStore}>
14
+ <ImageGallery element={element} />
15
+ </Provider>
16
+ );
17
+ expect(wrapper.find(FullScreenImages).length).toEqual(1);
18
+ });
19
+ });
@@ -0,0 +1,74 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+ import { ResponsiveImage } from "@quintype/components";
4
+ import { withElementWrapper } from "../withElementWrapper";
5
+ import { FullScreenImages } from "../../../Molecules/FullScreenImages";
6
+
7
+ import { shapeStory, shapeConfig, clientWidth } from "../../../../utils/utils";
8
+
9
+ import "./image-gallery.m.css";
10
+
11
+ const ImageGalleryBase = ({ element, template = "", opts = {}, story = {}, config = {}, ...restProps }) => {
12
+ if (!element) return null;
13
+ const isMobile = clientWidth("mobile");
14
+ const imageArr = element["story-elements"];
15
+ const imageBaseOnTemp = template === "template-2" && imageArr.length;
16
+ const renderImageDesktop = imageBaseOnTemp > 6 ? imageArr.slice(0, 6) : imageArr;
17
+ const renderMobile = imageBaseOnTemp > 4 ? imageArr.slice(0, 4) : imageArr;
18
+ const renderImage = isMobile ? renderMobile : renderImageDesktop;
19
+ const classes = template === "template-2" ? "template-2" : "";
20
+
21
+ const LeftImages = () => {
22
+ const imageCountDesktop = imageBaseOnTemp > 6 && imageArr.length - 6;
23
+ const imageCountMobile = imageBaseOnTemp > 4 && imageArr.length - 4;
24
+ const imageCount = isMobile ? imageCountMobile : imageCountDesktop;
25
+ return <div styleName="left-images">{imageCount}</div>;
26
+ };
27
+
28
+ const ImageGalleryImagesTemplate = ({ onClickHandler }) => {
29
+ const images = renderImage.map((image, index) => (
30
+ <figure
31
+ key={index}
32
+ data-text-id={`image-${index}`}
33
+ styleName={`image ${classes}`}
34
+ onClick={() => onClickHandler && onClickHandler(index)}>
35
+ <ResponsiveImage
36
+ slug={image["image-s3-key"]}
37
+ metadata={image["image-metadata"]}
38
+ alt={image["title"]}
39
+ aspectRatio={[1, 1]}
40
+ defaultWidth={640}
41
+ imgParams={{ auto: ["format", "compress"] }}
42
+ />
43
+ {renderImage.length - 1 === index && <LeftImages />}
44
+ </figure>
45
+ ));
46
+ return (
47
+ <div
48
+ styleName="image-gallery"
49
+ className=" arrow-component arr--image-element"
50
+ {...restProps}
51
+ data-test-id="image-gallery">
52
+ {images}
53
+ </div>
54
+ );
55
+ };
56
+
57
+ ImageGalleryImagesTemplate.propTypes = {
58
+ onClickHandler: PropTypes.func
59
+ };
60
+
61
+ return <FullScreenImages template={ImageGalleryImagesTemplate} element={element} />;
62
+ };
63
+
64
+ ImageGalleryBase.propTypes = {
65
+ element: PropTypes.shape({
66
+ "story-elements": PropTypes.array
67
+ }),
68
+ opts: PropTypes.shape({ imageWidths: PropTypes.array }),
69
+ story: shapeStory,
70
+ config: shapeConfig,
71
+ template: PropTypes.string
72
+ };
73
+
74
+ export const ImageGallery = withElementWrapper(ImageGalleryBase);
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import { withStore, optionalSelect } from "../../../../../storybook";
3
+ import { ImageGallery } from "./index";
4
+ import Readme from "./README.md";
5
+ import { generateStoryElementData } from "../../../Fixture";
6
+
7
+ const element = generateStoryElementData("image-gallery");
8
+ const imgaeGalleryTemplate = {
9
+ default: "",
10
+ template2: "template-2"
11
+ };
12
+
13
+ withStore(
14
+ "Atoms/Story Elements/Image gallery",
15
+ {
16
+ qt: {
17
+ config: {
18
+ "cdn-image": "thumbor-stg.assettype.com"
19
+ }
20
+ }
21
+ },
22
+ Readme
23
+ ).add("Default", () => <ImageGallery element={element} template={optionalSelect("templates", imgaeGalleryTemplate)} />);
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+
4
+ export const withElementWrapper = (StoryElement) => (props) => {
5
+ const { element, render, ...restProps } = props;
6
+ if (!element) return null;
7
+ if (render && typeof render === "function") return render(props);
8
+ return <StoryElement {...restProps} element={element} />;
9
+ };
10
+
11
+ withElementWrapper.propTypes = {
12
+ StoryElement: PropTypes.element
13
+ };