@treely/strapi-slices 1.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 (560) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/components/CreditsAvailableBadge/CreditsAvailableBadge.d.ts +7 -0
  4. package/dist/components/CreditsAvailableBadge/index.d.ts +2 -0
  5. package/dist/components/CreditsAvailableBadge/messages.de.d.ts +7 -0
  6. package/dist/components/CreditsAvailableBadge/messages.en.d.ts +7 -0
  7. package/dist/components/FullScreenImage/FullScreenImage.d.ts +8 -0
  8. package/dist/components/FullScreenImage/ZoomableImage.d.ts +7 -0
  9. package/dist/components/FullScreenImage/index.d.ts +2 -0
  10. package/dist/components/MinimalProviders/MinimalProviders.d.ts +7 -0
  11. package/dist/components/MinimalProviders/index.d.ts +2 -0
  12. package/dist/components/SliceRenderer/SliceRenderer.d.ts +12 -0
  13. package/dist/components/SliceRenderer/index.d.ts +2 -0
  14. package/dist/components/StrapiLinkButton/StrapiLinkButton.d.ts +18 -0
  15. package/dist/components/StrapiLinkButton/index.d.ts +2 -0
  16. package/dist/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.d.ts +7 -0
  17. package/dist/components/StrapiLinkButtonWithIcon/index.d.ts +2 -0
  18. package/dist/components/portfolio/Contact/Contact.d.ts +10 -0
  19. package/dist/components/portfolio/Contact/index.d.ts +2 -0
  20. package/dist/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.d.ts +6 -0
  21. package/dist/components/portfolio/DocumentsDownloadList/index.d.ts +2 -0
  22. package/dist/components/portfolio/DocumentsDownloadList/messages.de.d.ts +5 -0
  23. package/dist/components/portfolio/DocumentsDownloadList/messages.en.d.ts +5 -0
  24. package/dist/components/portfolio/ProjectInfo/ProjectInfo.d.ts +18 -0
  25. package/dist/components/portfolio/ProjectInfo/index.d.ts +2 -0
  26. package/dist/components/portfolio/ProjectInfo/messages.de.d.ts +15 -0
  27. package/dist/components/portfolio/ProjectInfo/messages.en.d.ts +15 -0
  28. package/dist/components/portfolio/SmallCheckout/SmallCheckout.d.ts +13 -0
  29. package/dist/components/portfolio/SmallCheckout/index.d.ts +2 -0
  30. package/dist/components/portfolio/SmallCheckout/messages.de.d.ts +16 -0
  31. package/dist/components/portfolio/SmallCheckout/messages.en.d.ts +16 -0
  32. package/dist/constants/animations.d.ts +1 -0
  33. package/dist/constants/api.d.ts +3 -0
  34. package/dist/constants/breakpoints.d.ts +8 -0
  35. package/dist/constants/domain.d.ts +2 -0
  36. package/dist/constants/fontCustomizations.d.ts +6 -0
  37. package/dist/constants/formatter.d.ts +6 -0
  38. package/dist/constants/globalStyle.d.ts +1 -0
  39. package/dist/constants/mapbox.d.ts +17 -0
  40. package/dist/constants/strapi.d.ts +1 -0
  41. package/dist/icons/LinkedInIcon.d.ts +2 -0
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +8 -0
  44. package/dist/models/BBox.d.ts +2 -0
  45. package/dist/models/CreditsAvailableState.d.ts +7 -0
  46. package/dist/models/Locale.d.ts +2 -0
  47. package/dist/models/PortfolioProject.d.ts +7 -0
  48. package/dist/models/forms/CheckoutForm.d.ts +4 -0
  49. package/dist/models/fpm/FPMProject.d.ts +37 -0
  50. package/dist/models/fpm/Issuer.d.ts +6 -0
  51. package/dist/models/strapi/IStrapi.d.ts +4 -0
  52. package/dist/models/strapi/IStrapiData.d.ts +5 -0
  53. package/dist/models/strapi/IStrapiResponse.d.ts +13 -0
  54. package/dist/models/strapi/StrapiAuthor.d.ts +10 -0
  55. package/dist/models/strapi/StrapiAvatarWithName.d.ts +8 -0
  56. package/dist/models/strapi/StrapiBanner.d.ts +9 -0
  57. package/dist/models/strapi/StrapiBlogPost.d.ts +25 -0
  58. package/dist/models/strapi/StrapiButtonWithVariant.d.ts +6 -0
  59. package/dist/models/strapi/StrapiCategory.d.ts +8 -0
  60. package/dist/models/strapi/StrapiContactArea.d.ts +10 -0
  61. package/dist/models/strapi/StrapiCustomerStory.d.ts +21 -0
  62. package/dist/models/strapi/StrapiDefaultHeader.d.ts +6 -0
  63. package/dist/models/strapi/StrapiGlobal.d.ts +26 -0
  64. package/dist/models/strapi/StrapiGlossaryItem.d.ts +6 -0
  65. package/dist/models/strapi/StrapiHeroCard.d.ts +13 -0
  66. package/dist/models/strapi/StrapiImage.d.ts +10 -0
  67. package/dist/models/strapi/StrapiImageFormat.d.ts +12 -0
  68. package/dist/models/strapi/StrapiImageWithLink.d.ts +6 -0
  69. package/dist/models/strapi/StrapiLink.d.ts +11 -0
  70. package/dist/models/strapi/StrapiLinkList.d.ts +7 -0
  71. package/dist/models/strapi/StrapiLinkPage.d.ts +10 -0
  72. package/dist/models/strapi/StrapiLinkWithIcon.d.ts +7 -0
  73. package/dist/models/strapi/StrapiLocalization.d.ts +7 -0
  74. package/dist/models/strapi/StrapiMedia.d.ts +27 -0
  75. package/dist/models/strapi/StrapiMetadata.d.ts +13 -0
  76. package/dist/models/strapi/StrapiNavMenu.d.ts +13 -0
  77. package/dist/models/strapi/StrapiPage.d.ts +17 -0
  78. package/dist/models/strapi/StrapiPortfolio.d.ts +10 -0
  79. package/dist/models/strapi/StrapiPortfolioCard.d.ts +15 -0
  80. package/dist/models/strapi/StrapiProject.d.ts +23 -0
  81. package/dist/models/strapi/StrapiProjectCard.d.ts +18 -0
  82. package/dist/models/strapi/StrapiQuoteCard.d.ts +7 -0
  83. package/dist/models/strapi/StrapiShapesCard.d.ts +11 -0
  84. package/dist/models/strapi/StrapiTextCardWithIcons.d.ts +8 -0
  85. package/dist/models/strapi/StrapiTopBanner.d.ts +7 -0
  86. package/dist/rootMessages.de.d.ts +58 -0
  87. package/dist/rootMessages.en.d.ts +58 -0
  88. package/dist/slices/Blog/Blog.d.ts +10 -0
  89. package/dist/slices/Blog/index.d.ts +2 -0
  90. package/dist/slices/Blog/styles.d.ts +9 -0
  91. package/dist/slices/BlogCards/BlogCards.d.ts +18 -0
  92. package/dist/slices/BlogCards/BlogCards.stories.d.ts +5 -0
  93. package/dist/slices/BlogCards/index.d.ts +2 -0
  94. package/dist/slices/Comparison/Comparison.d.ts +33 -0
  95. package/dist/slices/Comparison/Comparison.stories.d.ts +6 -0
  96. package/dist/slices/Comparison/Icon.d.ts +7 -0
  97. package/dist/slices/Comparison/index.d.ts +2 -0
  98. package/dist/slices/Comparison/messages.de.d.ts +4 -0
  99. package/dist/slices/Comparison/messages.en.d.ts +4 -0
  100. package/dist/slices/Cta/Cta.d.ts +26 -0
  101. package/dist/slices/Cta/Cta.stories.d.ts +9 -0
  102. package/dist/slices/Cta/index.d.ts +2 -0
  103. package/dist/slices/Cta/messages.de.d.ts +5 -0
  104. package/dist/slices/Cta/messages.en.d.ts +5 -0
  105. package/dist/slices/CtaOnly/CtaOnly.d.ts +8 -0
  106. package/dist/slices/CtaOnly/CtaOnly.stories.d.ts +3 -0
  107. package/dist/slices/CtaOnly/index.d.ts +2 -0
  108. package/dist/slices/CustomerStories/CustomerStories.d.ts +10 -0
  109. package/dist/slices/CustomerStories/CustomerStories.stories.d.ts +3 -0
  110. package/dist/slices/CustomerStories/index.d.ts +2 -0
  111. package/dist/slices/CustomerStories/messages.de.d.ts +4 -0
  112. package/dist/slices/CustomerStories/messages.en.d.ts +4 -0
  113. package/dist/slices/Facts/Facts.d.ts +16 -0
  114. package/dist/slices/Facts/Facts.stories.d.ts +7 -0
  115. package/dist/slices/Facts/index.d.ts +2 -0
  116. package/dist/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.d.ts +10 -0
  117. package/dist/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.stories.d.ts +4 -0
  118. package/dist/slices/FullWidthHighlightQuote/index.d.ts +2 -0
  119. package/dist/slices/FullWidthImage/FullWidthImage.d.ts +11 -0
  120. package/dist/slices/FullWidthImage/FullWidthImage.stories.d.ts +5 -0
  121. package/dist/slices/FullWidthImage/index.d.ts +2 -0
  122. package/dist/slices/FullWidthImage/styles.d.ts +5 -0
  123. package/dist/slices/FullWidthImageSlider/FullWidthImageSlider.d.ts +12 -0
  124. package/dist/slices/FullWidthImageSlider/FullWidthImageSlider.stories.d.ts +3 -0
  125. package/dist/slices/FullWidthImageSlider/index.d.ts +2 -0
  126. package/dist/slices/FullWidthImageSlider/styles.d.ts +295 -0
  127. package/dist/slices/FullWidthImageSlider/utils.d.ts +1 -0
  128. package/dist/slices/Glossary/Glossary.d.ts +9 -0
  129. package/dist/slices/Glossary/Glossary.stories.d.ts +3 -0
  130. package/dist/slices/Glossary/index.d.ts +2 -0
  131. package/dist/slices/Glossary/messages.de.d.ts +6 -0
  132. package/dist/slices/Glossary/messages.en.d.ts +6 -0
  133. package/dist/slices/Hero/Hero.d.ts +17 -0
  134. package/dist/slices/Hero/Hero.stories.d.ts +9 -0
  135. package/dist/slices/Hero/index.d.ts +2 -0
  136. package/dist/slices/Hero/styles.d.ts +17 -0
  137. package/dist/slices/IconGrid/IconGrid.d.ts +18 -0
  138. package/dist/slices/IconGrid/IconGrid.stories.d.ts +5 -0
  139. package/dist/slices/IconGrid/index.d.ts +2 -0
  140. package/dist/slices/IconGrid/styles.d.ts +9 -0
  141. package/dist/slices/ImageGrid/ImageGrid.d.ts +18 -0
  142. package/dist/slices/ImageGrid/ImageGrid.stories.d.ts +5 -0
  143. package/dist/slices/ImageGrid/index.d.ts +2 -0
  144. package/dist/slices/ImageGrid/styles.d.ts +5 -0
  145. package/dist/slices/ImageTextSequence/ImageTextSequence.d.ts +19 -0
  146. package/dist/slices/ImageTextSequence/ImageTextSequence.stories.d.ts +7 -0
  147. package/dist/slices/ImageTextSequence/index.d.ts +2 -0
  148. package/dist/slices/ImageTextSequence/styles.d.ts +13 -0
  149. package/dist/slices/LeftTextRightCard/LeftTextRightCard.d.ts +17 -0
  150. package/dist/slices/LeftTextRightCard/LeftTextRightCard.stories.d.ts +8 -0
  151. package/dist/slices/LeftTextRightCard/index.d.ts +2 -0
  152. package/dist/slices/LinkCardsGrid/LinkCardsGrid.d.ts +18 -0
  153. package/dist/slices/LinkCardsGrid/LinkCardsGrid.stories.d.ts +5 -0
  154. package/dist/slices/LinkCardsGrid/index.d.ts +2 -0
  155. package/dist/slices/LogoGridWithText/LogoGridWithText.d.ts +12 -0
  156. package/dist/slices/LogoGridWithText/LogoGridWithText.stories.d.ts +6 -0
  157. package/dist/slices/LogoGridWithText/index.d.ts +2 -0
  158. package/dist/slices/LogoGridWithText/styles.d.ts +5 -0
  159. package/dist/slices/MapHero/MapHero.d.ts +15 -0
  160. package/dist/slices/MapHero/MapHero.stories.d.ts +8 -0
  161. package/dist/slices/MapHero/index.d.ts +2 -0
  162. package/dist/slices/MapHero/styles.d.ts +21 -0
  163. package/dist/slices/ProjectFacts/ProjectFacts.d.ts +34 -0
  164. package/dist/slices/ProjectFacts/ProjectFacts.stories.d.ts +6 -0
  165. package/dist/slices/ProjectFacts/index.d.ts +2 -0
  166. package/dist/slices/ProjectFacts/messages.de.d.ts +5 -0
  167. package/dist/slices/ProjectFacts/messages.en.d.ts +5 -0
  168. package/dist/slices/ProjectsGrid/ProjectsGrid.d.ts +8 -0
  169. package/dist/slices/ProjectsGrid/ProjectsGrid.stories.d.ts +3 -0
  170. package/dist/slices/ProjectsGrid/index.d.ts +2 -0
  171. package/dist/slices/ProjectsMap/MapMarker.d.ts +10 -0
  172. package/dist/slices/ProjectsMap/ProjectsMap.d.ts +17 -0
  173. package/dist/slices/ProjectsMap/ProjectsMap.stories.d.ts +6 -0
  174. package/dist/slices/ProjectsMap/index.d.ts +2 -0
  175. package/dist/slices/ProjectsMap/messages.de.d.ts +4 -0
  176. package/dist/slices/ProjectsMap/messages.en.d.ts +4 -0
  177. package/dist/slices/QAndA/QAndA.d.ts +43 -0
  178. package/dist/slices/QAndA/QAndA.stories.d.ts +7 -0
  179. package/dist/slices/QAndA/index.d.ts +2 -0
  180. package/dist/slices/QuoteCards/QuoteCards.d.ts +15 -0
  181. package/dist/slices/QuoteCards/QuoteCards.stories.d.ts +8 -0
  182. package/dist/slices/QuoteCards/index.d.ts +2 -0
  183. package/dist/slices/QuoteCards/styles.d.ts +13 -0
  184. package/dist/slices/RichTextSection/RichTextSection.d.ts +7 -0
  185. package/dist/slices/RichTextSection/RichTextSection.stories.d.ts +3 -0
  186. package/dist/slices/RichTextSection/index.d.ts +2 -0
  187. package/dist/slices/ShopCheckout/ShopCheckout.d.ts +16 -0
  188. package/dist/slices/ShopCheckout/ShopCheckout.stories.d.ts +7 -0
  189. package/dist/slices/ShopCheckout/index.d.ts +2 -0
  190. package/dist/slices/ShopCheckout/messages.de.d.ts +15 -0
  191. package/dist/slices/ShopCheckout/messages.en.d.ts +15 -0
  192. package/dist/slices/SideBySideImages/SideBySideImages.d.ts +12 -0
  193. package/dist/slices/SideBySideImages/SideBySideImages.stories.d.ts +3 -0
  194. package/dist/slices/SideBySideImages/index.d.ts +2 -0
  195. package/dist/slices/SmallHero/SmallHero.d.ts +20 -0
  196. package/dist/slices/SmallHero/SmallHero.stories.d.ts +11 -0
  197. package/dist/slices/SmallHero/index.d.ts +2 -0
  198. package/dist/slices/SmallHero/styles.d.ts +9 -0
  199. package/dist/slices/Steps/Steps.d.ts +19 -0
  200. package/dist/slices/Steps/Steps.stories.d.ts +7 -0
  201. package/dist/slices/Steps/index.d.ts +2 -0
  202. package/dist/slices/Steps/styles.d.ts +25 -0
  203. package/dist/slices/TextCardGrid/TextCardGrid.d.ts +20 -0
  204. package/dist/slices/TextCardGrid/TextCardGrid.stories.d.ts +8 -0
  205. package/dist/slices/TextCardGrid/index.d.ts +2 -0
  206. package/dist/slices/TextCarousel/TextCarousel.d.ts +13 -0
  207. package/dist/slices/TextCarousel/TextCarousel.stories.d.ts +6 -0
  208. package/dist/slices/TextCarousel/index.d.ts +2 -0
  209. package/dist/slices/TextCarousel/styles.d.ts +284 -0
  210. package/dist/slices/TextWithCard/TextWithCard.d.ts +20 -0
  211. package/dist/slices/TextWithCard/TextWithCard.stories.d.ts +9 -0
  212. package/dist/slices/TextWithCard/index.d.ts +2 -0
  213. package/dist/slices/TextWithTextCards/TextWithTextCards.d.ts +15 -0
  214. package/dist/slices/TextWithTextCards/TextWithTextCards.stories.d.ts +7 -0
  215. package/dist/slices/TextWithTextCards/index.d.ts +2 -0
  216. package/dist/slices/TextWithTextCards/styles.d.ts +5 -0
  217. package/dist/slices/Video/Video.d.ts +10 -0
  218. package/dist/slices/Video/Video.stories.d.ts +3 -0
  219. package/dist/slices/Video/index.d.ts +2 -0
  220. package/dist/strapi-slices.cjs.development.js +39 -0
  221. package/dist/strapi-slices.cjs.development.js.map +1 -0
  222. package/dist/strapi-slices.cjs.production.min.js +2 -0
  223. package/dist/strapi-slices.cjs.production.min.js.map +1 -0
  224. package/dist/strapi-slices.esm.js +36 -0
  225. package/dist/strapi-slices.esm.js.map +1 -0
  226. package/dist/test/defaultMocks/next.d.ts +2 -0
  227. package/dist/test/integrationMocks/fpmProjectMock.d.ts +3 -0
  228. package/dist/test/mocks/portfolioProjectMock.d.ts +3 -0
  229. package/dist/test/setupTests.d.ts +1 -0
  230. package/dist/test/storybookMocks/storybookMedia.d.ts +1 -0
  231. package/dist/test/storybookMocks/storybookStrapiMedia.d.ts +8 -0
  232. package/dist/test/strapiMocks/minimalGlobalData.d.ts +4 -0
  233. package/dist/test/strapiMocks/strapiAvatarWithName.d.ts +12 -0
  234. package/dist/test/strapiMocks/strapiBlogPost.d.ts +3 -0
  235. package/dist/test/strapiMocks/strapiContact.d.ts +2 -0
  236. package/dist/test/strapiMocks/strapiCustomerStory.d.ts +3 -0
  237. package/dist/test/strapiMocks/strapiHeroCard.d.ts +2 -0
  238. package/dist/test/strapiMocks/strapiLinkPage.d.ts +3 -0
  239. package/dist/test/strapiMocks/strapiMedia.d.ts +3 -0
  240. package/dist/test/strapiMocks/strapiMetadata.d.ts +2 -0
  241. package/dist/test/strapiMocks/strapiPage.d.ts +3 -0
  242. package/dist/test/strapiMocks/strapiPortfolioCard.d.ts +2 -0
  243. package/dist/test/strapiMocks/strapiPortfolioMock.d.ts +3 -0
  244. package/dist/test/strapiMocks/strapiProject.d.ts +3 -0
  245. package/dist/test/strapiMocks/strapiProjectCard.d.ts +2 -0
  246. package/dist/test/strapiMocks/strapiQuoteCard.d.ts +2 -0
  247. package/dist/test/testUtils.d.ts +6 -0
  248. package/dist/unit.messages.de.d.ts +5 -0
  249. package/dist/unit.messages.en.d.ts +5 -0
  250. package/dist/utils/convertAreaM2ToHa.d.ts +2 -0
  251. package/dist/utils/convertCo2AmountKgToTons.d.ts +2 -0
  252. package/dist/utils/convertToKebabCase.d.ts +2 -0
  253. package/dist/utils/getTimeSpanInYears.d.ts +2 -0
  254. package/dist/utils/mergeBoundingBoxes.d.ts +3 -0
  255. package/dist/utils/mergeDeep.d.ts +12 -0
  256. package/dist/utils/openHubSpotChat.d.ts +2 -0
  257. package/dist/utils/strapiLinkUrl.d.ts +3 -0
  258. package/dist/utils/strapiMediaUrl.d.ts +5 -0
  259. package/package.json +132 -0
  260. package/src/components/CreditsAvailableBadge/CreditsAvailableBadge.test.tsx +65 -0
  261. package/src/components/CreditsAvailableBadge/CreditsAvailableBadge.tsx +55 -0
  262. package/src/components/CreditsAvailableBadge/index.ts +3 -0
  263. package/src/components/CreditsAvailableBadge/messages.de.ts +7 -0
  264. package/src/components/CreditsAvailableBadge/messages.en.ts +6 -0
  265. package/src/components/FullScreenImage/FullScreenImage.test.tsx +45 -0
  266. package/src/components/FullScreenImage/FullScreenImage.tsx +119 -0
  267. package/src/components/FullScreenImage/ZoomableImage.tsx +84 -0
  268. package/src/components/FullScreenImage/index.ts +3 -0
  269. package/src/components/MinimalProviders/MinimalProviders.tsx +25 -0
  270. package/src/components/MinimalProviders/index.ts +3 -0
  271. package/src/components/SliceRenderer/SliceRenderer.test.tsx +35 -0
  272. package/src/components/SliceRenderer/SliceRenderer.tsx +294 -0
  273. package/src/components/SliceRenderer/index.ts +3 -0
  274. package/src/components/StrapiLinkButton/StrapiLinkButton.test.tsx +58 -0
  275. package/src/components/StrapiLinkButton/StrapiLinkButton.tsx +55 -0
  276. package/src/components/StrapiLinkButton/index.ts +3 -0
  277. package/src/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.test.tsx +57 -0
  278. package/src/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.tsx +36 -0
  279. package/src/components/StrapiLinkButtonWithIcon/index.ts +3 -0
  280. package/src/components/portfolio/Contact/Contact.test.tsx +51 -0
  281. package/src/components/portfolio/Contact/Contact.tsx +73 -0
  282. package/src/components/portfolio/Contact/index.ts +3 -0
  283. package/src/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.test.tsx +49 -0
  284. package/src/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.tsx +76 -0
  285. package/src/components/portfolio/DocumentsDownloadList/index.ts +3 -0
  286. package/src/components/portfolio/DocumentsDownloadList/messages.de.ts +6 -0
  287. package/src/components/portfolio/DocumentsDownloadList/messages.en.ts +6 -0
  288. package/src/components/portfolio/ProjectInfo/ProjectInfo.test.tsx +81 -0
  289. package/src/components/portfolio/ProjectInfo/ProjectInfo.tsx +252 -0
  290. package/src/components/portfolio/ProjectInfo/index.ts +3 -0
  291. package/src/components/portfolio/ProjectInfo/messages.de.ts +19 -0
  292. package/src/components/portfolio/ProjectInfo/messages.en.ts +19 -0
  293. package/src/components/portfolio/SmallCheckout/SmallCheckout.test.tsx +166 -0
  294. package/src/components/portfolio/SmallCheckout/SmallCheckout.tsx +265 -0
  295. package/src/components/portfolio/SmallCheckout/index.ts +3 -0
  296. package/src/components/portfolio/SmallCheckout/messages.de.ts +26 -0
  297. package/src/components/portfolio/SmallCheckout/messages.en.ts +26 -0
  298. package/src/constants/animations.ts +1 -0
  299. package/src/constants/api.ts +5 -0
  300. package/src/constants/breakpoints.ts +9 -0
  301. package/src/constants/domain.ts +3 -0
  302. package/src/constants/fontCustomizations.ts +6 -0
  303. package/src/constants/formatter.ts +29 -0
  304. package/src/constants/globalStyle.ts +55 -0
  305. package/src/constants/mapbox.ts +24 -0
  306. package/src/constants/strapi.ts +2 -0
  307. package/src/icons/LinkedInIcon.tsx +23 -0
  308. package/src/index.tsx +1 -0
  309. package/src/models/BBox.ts +3 -0
  310. package/src/models/CreditsAvailableState.ts +8 -0
  311. package/src/models/Locale.ts +3 -0
  312. package/src/models/PortfolioProject.ts +9 -0
  313. package/src/models/forms/CheckoutForm.ts +5 -0
  314. package/src/models/fpm/FPMProject.ts +41 -0
  315. package/src/models/fpm/Issuer.ts +7 -0
  316. package/src/models/strapi/IStrapi.ts +5 -0
  317. package/src/models/strapi/IStrapiData.ts +6 -0
  318. package/src/models/strapi/IStrapiResponse.ts +15 -0
  319. package/src/models/strapi/StrapiAuthor.ts +12 -0
  320. package/src/models/strapi/StrapiAvatarWithName.ts +10 -0
  321. package/src/models/strapi/StrapiBanner.ts +11 -0
  322. package/src/models/strapi/StrapiBlogPost.ts +27 -0
  323. package/src/models/strapi/StrapiButtonWithVariant.ts +8 -0
  324. package/src/models/strapi/StrapiCategory.ts +10 -0
  325. package/src/models/strapi/StrapiContactArea.ts +12 -0
  326. package/src/models/strapi/StrapiCustomerStory.ts +23 -0
  327. package/src/models/strapi/StrapiDefaultHeader.ts +7 -0
  328. package/src/models/strapi/StrapiGlobal.ts +28 -0
  329. package/src/models/strapi/StrapiGlossaryItem.ts +7 -0
  330. package/src/models/strapi/StrapiHeroCard.ts +15 -0
  331. package/src/models/strapi/StrapiImage.ts +12 -0
  332. package/src/models/strapi/StrapiImageFormat.ts +13 -0
  333. package/src/models/strapi/StrapiImageWithLink.ts +8 -0
  334. package/src/models/strapi/StrapiLink.ts +13 -0
  335. package/src/models/strapi/StrapiLinkList.ts +9 -0
  336. package/src/models/strapi/StrapiLinkPage.ts +12 -0
  337. package/src/models/strapi/StrapiLinkWithIcon.ts +9 -0
  338. package/src/models/strapi/StrapiLocalization.ts +9 -0
  339. package/src/models/strapi/StrapiMedia.ts +29 -0
  340. package/src/models/strapi/StrapiMetadata.ts +15 -0
  341. package/src/models/strapi/StrapiNavMenu.ts +16 -0
  342. package/src/models/strapi/StrapiPage.ts +19 -0
  343. package/src/models/strapi/StrapiPortfolio.ts +12 -0
  344. package/src/models/strapi/StrapiPortfolioCard.ts +17 -0
  345. package/src/models/strapi/StrapiProject.ts +25 -0
  346. package/src/models/strapi/StrapiProjectCard.ts +20 -0
  347. package/src/models/strapi/StrapiQuoteCard.ts +9 -0
  348. package/src/models/strapi/StrapiShapesCard.ts +13 -0
  349. package/src/models/strapi/StrapiTextCardWithIcons.ts +10 -0
  350. package/src/models/strapi/StrapiTopBanner.ts +9 -0
  351. package/src/rootMessages.de.ts +41 -0
  352. package/src/rootMessages.en.ts +41 -0
  353. package/src/slices/Blog/Blog.test.tsx +146 -0
  354. package/src/slices/Blog/Blog.tsx +114 -0
  355. package/src/slices/Blog/index.ts +3 -0
  356. package/src/slices/Blog/styles.ts +34 -0
  357. package/src/slices/BlogCards/BlogCards.stories.tsx +148 -0
  358. package/src/slices/BlogCards/BlogCards.test.tsx +277 -0
  359. package/src/slices/BlogCards/BlogCards.tsx +210 -0
  360. package/src/slices/BlogCards/index.ts +3 -0
  361. package/src/slices/Comparison/Comparison.stories.tsx +123 -0
  362. package/src/slices/Comparison/Comparison.test.tsx +173 -0
  363. package/src/slices/Comparison/Comparison.tsx +265 -0
  364. package/src/slices/Comparison/Icon.test.tsx +43 -0
  365. package/src/slices/Comparison/Icon.tsx +34 -0
  366. package/src/slices/Comparison/index.ts +3 -0
  367. package/src/slices/Comparison/messages.de.ts +3 -0
  368. package/src/slices/Comparison/messages.en.ts +3 -0
  369. package/src/slices/Cta/Cta.stories.tsx +149 -0
  370. package/src/slices/Cta/Cta.test.tsx +249 -0
  371. package/src/slices/Cta/Cta.tsx +412 -0
  372. package/src/slices/Cta/index.ts +3 -0
  373. package/src/slices/Cta/messages.de.ts +4 -0
  374. package/src/slices/Cta/messages.en.ts +4 -0
  375. package/src/slices/CtaOnly/CtaOnly.stories.tsx +47 -0
  376. package/src/slices/CtaOnly/CtaOnly.test.tsx +26 -0
  377. package/src/slices/CtaOnly/CtaOnly.tsx +17 -0
  378. package/src/slices/CtaOnly/index.ts +3 -0
  379. package/src/slices/CustomerStories/CustomerStories.stories.tsx +20 -0
  380. package/src/slices/CustomerStories/CustomerStories.test.tsx +43 -0
  381. package/src/slices/CustomerStories/CustomerStories.tsx +84 -0
  382. package/src/slices/CustomerStories/index.ts +3 -0
  383. package/src/slices/CustomerStories/messages.de.ts +3 -0
  384. package/src/slices/CustomerStories/messages.en.ts +3 -0
  385. package/src/slices/Facts/Facts.stories.tsx +97 -0
  386. package/src/slices/Facts/Facts.test.tsx +99 -0
  387. package/src/slices/Facts/Facts.tsx +140 -0
  388. package/src/slices/Facts/index.ts +3 -0
  389. package/src/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.stories.tsx +41 -0
  390. package/src/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.test.tsx +39 -0
  391. package/src/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.tsx +57 -0
  392. package/src/slices/FullWidthHighlightQuote/index.ts +3 -0
  393. package/src/slices/FullWidthImage/FullWidthImage.stories.tsx +40 -0
  394. package/src/slices/FullWidthImage/FullWidthImage.test.tsx +33 -0
  395. package/src/slices/FullWidthImage/FullWidthImage.tsx +63 -0
  396. package/src/slices/FullWidthImage/index.ts +3 -0
  397. package/src/slices/FullWidthImage/styles.ts +17 -0
  398. package/src/slices/FullWidthImageSlider/FullWidthImageSlider.stories.tsx +75 -0
  399. package/src/slices/FullWidthImageSlider/FullWidthImageSlider.test.tsx +49 -0
  400. package/src/slices/FullWidthImageSlider/FullWidthImageSlider.tsx +149 -0
  401. package/src/slices/FullWidthImageSlider/index.ts +3 -0
  402. package/src/slices/FullWidthImageSlider/styles.ts +96 -0
  403. package/src/slices/FullWidthImageSlider/utils.test.ts +10 -0
  404. package/src/slices/FullWidthImageSlider/utils.ts +17 -0
  405. package/src/slices/Glossary/Glossary.stories.tsx +42 -0
  406. package/src/slices/Glossary/Glossary.test.tsx +102 -0
  407. package/src/slices/Glossary/Glossary.tsx +107 -0
  408. package/src/slices/Glossary/index.ts +3 -0
  409. package/src/slices/Glossary/messages.de.ts +7 -0
  410. package/src/slices/Glossary/messages.en.ts +6 -0
  411. package/src/slices/Hero/Hero.stories.tsx +129 -0
  412. package/src/slices/Hero/Hero.test.tsx +89 -0
  413. package/src/slices/Hero/Hero.tsx +95 -0
  414. package/src/slices/Hero/index.ts +3 -0
  415. package/src/slices/Hero/styles.ts +52 -0
  416. package/src/slices/IconGrid/IconGrid.stories.tsx +178 -0
  417. package/src/slices/IconGrid/IconGrid.test.tsx +81 -0
  418. package/src/slices/IconGrid/IconGrid.tsx +97 -0
  419. package/src/slices/IconGrid/index.ts +3 -0
  420. package/src/slices/IconGrid/styles.ts +21 -0
  421. package/src/slices/ImageGrid/ImageGrid.stories.tsx +92 -0
  422. package/src/slices/ImageGrid/ImageGrid.test.tsx +82 -0
  423. package/src/slices/ImageGrid/ImageGrid.tsx +89 -0
  424. package/src/slices/ImageGrid/index.ts +3 -0
  425. package/src/slices/ImageGrid/styles.ts +12 -0
  426. package/src/slices/ImageTextSequence/ImageTextSequence.stories.tsx +124 -0
  427. package/src/slices/ImageTextSequence/ImageTextSequence.test.tsx +91 -0
  428. package/src/slices/ImageTextSequence/ImageTextSequence.tsx +143 -0
  429. package/src/slices/ImageTextSequence/index.ts +3 -0
  430. package/src/slices/ImageTextSequence/styles.ts +33 -0
  431. package/src/slices/LeftTextRightCard/LeftTextRightCard.stories.tsx +93 -0
  432. package/src/slices/LeftTextRightCard/LeftTextRightCard.test.tsx +72 -0
  433. package/src/slices/LeftTextRightCard/LeftTextRightCard.tsx +108 -0
  434. package/src/slices/LeftTextRightCard/index.ts +3 -0
  435. package/src/slices/LinkCardsGrid/LinkCardsGrid.stories.tsx +60 -0
  436. package/src/slices/LinkCardsGrid/LinkCardsGrid.test.tsx +36 -0
  437. package/src/slices/LinkCardsGrid/LinkCardsGrid.tsx +95 -0
  438. package/src/slices/LinkCardsGrid/index.ts +3 -0
  439. package/src/slices/LogoGridWithText/LogoGridWithText.stories.tsx +73 -0
  440. package/src/slices/LogoGridWithText/LogoGridWithText.test.tsx +55 -0
  441. package/src/slices/LogoGridWithText/LogoGridWithText.tsx +95 -0
  442. package/src/slices/LogoGridWithText/index.ts +3 -0
  443. package/src/slices/LogoGridWithText/styles.ts +13 -0
  444. package/src/slices/MapHero/MapHero.stories.tsx +112 -0
  445. package/src/slices/MapHero/MapHero.test.tsx +85 -0
  446. package/src/slices/MapHero/MapHero.tsx +89 -0
  447. package/src/slices/MapHero/index.ts +3 -0
  448. package/src/slices/MapHero/styles.ts +105 -0
  449. package/src/slices/ProjectFacts/ProjectFacts.stories.tsx +91 -0
  450. package/src/slices/ProjectFacts/ProjectFacts.test.tsx +34 -0
  451. package/src/slices/ProjectFacts/ProjectFacts.tsx +95 -0
  452. package/src/slices/ProjectFacts/index.ts +3 -0
  453. package/src/slices/ProjectFacts/messages.de.ts +4 -0
  454. package/src/slices/ProjectFacts/messages.en.ts +4 -0
  455. package/src/slices/ProjectsGrid/ProjectsGrid.stories.tsx +72 -0
  456. package/src/slices/ProjectsGrid/ProjectsGrid.test.tsx +31 -0
  457. package/src/slices/ProjectsGrid/ProjectsGrid.tsx +80 -0
  458. package/src/slices/ProjectsGrid/index.ts +3 -0
  459. package/src/slices/ProjectsMap/MapMarker.test.tsx +79 -0
  460. package/src/slices/ProjectsMap/MapMarker.tsx +99 -0
  461. package/src/slices/ProjectsMap/ProjectsMap.stories.tsx +101 -0
  462. package/src/slices/ProjectsMap/ProjectsMap.test.tsx +95 -0
  463. package/src/slices/ProjectsMap/ProjectsMap.tsx +150 -0
  464. package/src/slices/ProjectsMap/index.ts +3 -0
  465. package/src/slices/ProjectsMap/messages.de.ts +3 -0
  466. package/src/slices/ProjectsMap/messages.en.ts +3 -0
  467. package/src/slices/QAndA/QAndA.stories.tsx +103 -0
  468. package/src/slices/QAndA/QAndA.test.tsx +67 -0
  469. package/src/slices/QAndA/QAndA.tsx +157 -0
  470. package/src/slices/QAndA/index.ts +3 -0
  471. package/src/slices/QuoteCards/QuoteCards.stories.tsx +118 -0
  472. package/src/slices/QuoteCards/QuoteCards.test.tsx +52 -0
  473. package/src/slices/QuoteCards/QuoteCards.tsx +135 -0
  474. package/src/slices/QuoteCards/index.ts +3 -0
  475. package/src/slices/QuoteCards/styles.ts +17 -0
  476. package/src/slices/RichTextSection/RichTextSection.stories.tsx +27 -0
  477. package/src/slices/RichTextSection/RichTextSection.test.tsx +20 -0
  478. package/src/slices/RichTextSection/RichTextSection.tsx +27 -0
  479. package/src/slices/RichTextSection/index.ts +3 -0
  480. package/src/slices/ShopCheckout/ShopCheckout.stories.tsx +76 -0
  481. package/src/slices/ShopCheckout/ShopCheckout.test.tsx +186 -0
  482. package/src/slices/ShopCheckout/ShopCheckout.tsx +228 -0
  483. package/src/slices/ShopCheckout/index.ts +3 -0
  484. package/src/slices/ShopCheckout/messages.de.ts +23 -0
  485. package/src/slices/ShopCheckout/messages.en.ts +23 -0
  486. package/src/slices/SideBySideImages/SideBySideImages.stories.tsx +39 -0
  487. package/src/slices/SideBySideImages/SideBySideImages.test.tsx +52 -0
  488. package/src/slices/SideBySideImages/SideBySideImages.tsx +57 -0
  489. package/src/slices/SideBySideImages/index.ts +3 -0
  490. package/src/slices/SmallHero/SmallHero.stories.tsx +138 -0
  491. package/src/slices/SmallHero/SmallHero.test.tsx +70 -0
  492. package/src/slices/SmallHero/SmallHero.tsx +116 -0
  493. package/src/slices/SmallHero/index.ts +3 -0
  494. package/src/slices/SmallHero/styles.ts +39 -0
  495. package/src/slices/Steps/Steps.stories.tsx +95 -0
  496. package/src/slices/Steps/Steps.test.tsx +68 -0
  497. package/src/slices/Steps/Steps.tsx +178 -0
  498. package/src/slices/Steps/index.ts +3 -0
  499. package/src/slices/Steps/styles.ts +64 -0
  500. package/src/slices/TextCardGrid/TextCardGrid.stories.tsx +156 -0
  501. package/src/slices/TextCardGrid/TextCardGrid.test.tsx +103 -0
  502. package/src/slices/TextCardGrid/TextCardGrid.tsx +285 -0
  503. package/src/slices/TextCardGrid/index.ts +3 -0
  504. package/src/slices/TextCarousel/TextCarousel.stories.tsx +104 -0
  505. package/src/slices/TextCarousel/TextCarousel.test.tsx +90 -0
  506. package/src/slices/TextCarousel/TextCarousel.tsx +91 -0
  507. package/src/slices/TextCarousel/index.ts +3 -0
  508. package/src/slices/TextCarousel/styles.ts +65 -0
  509. package/src/slices/TextWithCard/TextWithCard.stories.tsx +113 -0
  510. package/src/slices/TextWithCard/TextWithCard.test.tsx +87 -0
  511. package/src/slices/TextWithCard/TextWithCard.tsx +115 -0
  512. package/src/slices/TextWithCard/index.ts +3 -0
  513. package/src/slices/TextWithTextCards/TextWithTextCards.stories.tsx +121 -0
  514. package/src/slices/TextWithTextCards/TextWithTextCards.test.tsx +57 -0
  515. package/src/slices/TextWithTextCards/TextWithTextCards.tsx +167 -0
  516. package/src/slices/TextWithTextCards/index.ts +3 -0
  517. package/src/slices/TextWithTextCards/styles.ts +26 -0
  518. package/src/slices/Video/Video.stories.tsx +18 -0
  519. package/src/slices/Video/Video.test.tsx +26 -0
  520. package/src/slices/Video/Video.tsx +35 -0
  521. package/src/slices/Video/index.ts +3 -0
  522. package/src/test/defaultMocks/next.ts +29 -0
  523. package/src/test/integrationMocks/fpmProjectMock.ts +37 -0
  524. package/src/test/mocks/portfolioProjectMock.ts +11 -0
  525. package/src/test/setupTests.ts +5 -0
  526. package/src/test/storybookMocks/storybookMedia.ts +2 -0
  527. package/src/test/storybookMocks/storybookStrapiMedia.ts +58 -0
  528. package/src/test/strapiMocks/minimalGlobalData.ts +24 -0
  529. package/src/test/strapiMocks/strapiAvatarWithName.ts +12 -0
  530. package/src/test/strapiMocks/strapiBlogPost.ts +216 -0
  531. package/src/test/strapiMocks/strapiContact.ts +15 -0
  532. package/src/test/strapiMocks/strapiCustomerStory.ts +195 -0
  533. package/src/test/strapiMocks/strapiHeroCard.ts +7 -0
  534. package/src/test/strapiMocks/strapiLinkPage.ts +14 -0
  535. package/src/test/strapiMocks/strapiMedia.ts +91 -0
  536. package/src/test/strapiMocks/strapiMetadata.ts +12 -0
  537. package/src/test/strapiMocks/strapiPage.ts +683 -0
  538. package/src/test/strapiMocks/strapiPortfolioCard.ts +40 -0
  539. package/src/test/strapiMocks/strapiPortfolioMock.ts +20 -0
  540. package/src/test/strapiMocks/strapiProject.ts +34 -0
  541. package/src/test/strapiMocks/strapiProjectCard.ts +20 -0
  542. package/src/test/strapiMocks/strapiQuoteCard.ts +8 -0
  543. package/src/test/testUtils.tsx +25 -0
  544. package/src/unit.messages.de.ts +4 -0
  545. package/src/unit.messages.en.ts +4 -0
  546. package/src/utils/convertAreaM2ToHa.test.ts +9 -0
  547. package/src/utils/convertAreaM2ToHa.ts +4 -0
  548. package/src/utils/convertCo2AmountKgToTons.ts +4 -0
  549. package/src/utils/convertToKebabCase.test.ts +9 -0
  550. package/src/utils/convertToKebabCase.ts +10 -0
  551. package/src/utils/getTimeSpanInYears.test.ts +35 -0
  552. package/src/utils/getTimeSpanInYears.ts +14 -0
  553. package/src/utils/mergeBoundingBoxes.test.ts +13 -0
  554. package/src/utils/mergeBoundingBoxes.ts +19 -0
  555. package/src/utils/mergeDeep.ts +31 -0
  556. package/src/utils/openHubSpotChat.ts +15 -0
  557. package/src/utils/strapiLinkUrl.test.ts +26 -0
  558. package/src/utils/strapiLinkUrl.ts +13 -0
  559. package/src/utils/strapiMediaUrl.test.ts +54 -0
  560. package/src/utils/strapiMediaUrl.ts +32 -0
@@ -0,0 +1,166 @@
1
+ import { render, screen, userEvent, waitFor } from '@/test/testUtils';
2
+ import { pushSpy } from '../../../../__mocks__/next/router';
3
+
4
+ import SmallCheckout from '.';
5
+ import { SmallCheckoutProps } from './SmallCheckout';
6
+ import messagesEn from './messages.en';
7
+
8
+ const defaultProps: SmallCheckoutProps = {
9
+ batchId: 'batchId',
10
+ pricePerKg: 0.06,
11
+ initialContributionValue: 60,
12
+ checkoutText: 'Checkout text',
13
+ currency: 'EUR',
14
+ };
15
+
16
+ const setup = (props = {}) => {
17
+ const combinedProps = { ...defaultProps, ...props };
18
+ render(<SmallCheckout {...combinedProps} />);
19
+ };
20
+
21
+ describe('The SmallCheckout component', () => {
22
+ afterEach(() => {
23
+ pushSpy.mockClear();
24
+ });
25
+
26
+ it('displays amount in euro', () => {
27
+ setup();
28
+
29
+ expect(
30
+ screen.getByText(
31
+ messagesEn[
32
+ 'portfolio.smallCheckout.contributionValueCurrency.label.EUR'
33
+ ]
34
+ )
35
+ ).toBeInTheDocument();
36
+ });
37
+
38
+ it('displays amount in tons', () => {
39
+ setup();
40
+
41
+ expect(
42
+ screen.getByText(
43
+ messagesEn['portfolio.smallCheckout.contributionValueKgs.label']
44
+ )
45
+ ).toBeInTheDocument();
46
+ });
47
+
48
+ it('displays the submit button', () => {
49
+ setup();
50
+
51
+ expect(
52
+ screen.getByText(messagesEn['portfolio.smallCheckout.submitButton'])
53
+ ).toBeInTheDocument();
54
+ });
55
+
56
+ it('navigates to the checkout on submit', async () => {
57
+ setup();
58
+
59
+ await userEvent.clear(
60
+ screen.getByLabelText(
61
+ messagesEn[
62
+ 'portfolio.smallCheckout.contributionValueCurrency.label.EUR'
63
+ ]
64
+ )
65
+ );
66
+
67
+ await userEvent.type(
68
+ screen.getByLabelText(
69
+ messagesEn[
70
+ 'portfolio.smallCheckout.contributionValueCurrency.label.EUR'
71
+ ]
72
+ ),
73
+ '120'
74
+ );
75
+
76
+ await userEvent.click(
77
+ screen.getByText(messagesEn['portfolio.smallCheckout.submitButton'])
78
+ );
79
+
80
+ await waitFor(() => {
81
+ expect(pushSpy).toHaveBeenCalledWith(
82
+ 'https://api.fpm.t-staging.com/v1/webhooks/shop/checkout?batchId=batchId&quantity=2000'
83
+ );
84
+ });
85
+ });
86
+
87
+ it('correctly converts tons to EUR', async () => {
88
+ setup();
89
+
90
+ await userEvent.clear(
91
+ screen.getByLabelText(
92
+ messagesEn['portfolio.smallCheckout.contributionValueKgs.label']
93
+ )
94
+ );
95
+ await userEvent.type(
96
+ screen.getByLabelText(
97
+ messagesEn['portfolio.smallCheckout.contributionValueKgs.label']
98
+ ),
99
+ '3'
100
+ );
101
+
102
+ await userEvent.click(
103
+ screen.getByText(messagesEn['portfolio.smallCheckout.submitButton'])
104
+ );
105
+
106
+ await waitFor(() => {
107
+ expect(pushSpy).toHaveBeenCalledWith(
108
+ 'https://api.fpm.t-staging.com/v1/webhooks/shop/checkout?batchId=batchId&quantity=3000'
109
+ );
110
+ });
111
+ });
112
+
113
+ it('works with CHF', async () => {
114
+ setup({ ...defaultProps, currency: 'CHF' });
115
+
116
+ expect(
117
+ screen.getByLabelText(
118
+ messagesEn[
119
+ 'portfolio.smallCheckout.contributionValueCurrency.label.CHF'
120
+ ]
121
+ )
122
+ ).toBeInTheDocument();
123
+
124
+ await userEvent.clear(
125
+ screen.getByLabelText(
126
+ messagesEn[
127
+ 'portfolio.smallCheckout.contributionValueCurrency.label.CHF'
128
+ ]
129
+ )
130
+ );
131
+ await userEvent.type(
132
+ screen.getByLabelText(
133
+ messagesEn[
134
+ 'portfolio.smallCheckout.contributionValueCurrency.label.CHF'
135
+ ]
136
+ ),
137
+ '1'
138
+ );
139
+ await userEvent.click(
140
+ screen.getByText(messagesEn['portfolio.smallCheckout.submitButton'])
141
+ );
142
+
143
+ expect(
144
+ await screen.findByText(
145
+ messagesEn[
146
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF'
147
+ ]
148
+ )
149
+ ).toBeInTheDocument();
150
+ });
151
+
152
+ it('displays customTitle, customSubtitle and customButton if they are defined im slice', () => {
153
+ setup({
154
+ ...defaultProps,
155
+ title: 'Custom Title',
156
+ subtitle: 'Custom Subtitle',
157
+ button: { id: 1, url: 'customButtonUrl', text: 'Custom Button' },
158
+ });
159
+
160
+ expect(screen.getByText('Custom Title')).toBeInTheDocument();
161
+ expect(screen.getByText('Custom Subtitle')).toBeInTheDocument();
162
+
163
+ expect(screen.getAllByRole('button')).toHaveLength(2);
164
+ expect(screen.getByText('Custom Button')).toBeInTheDocument();
165
+ });
166
+ });
@@ -0,0 +1,265 @@
1
+ import { CDN_URI, FPM_API_URI } from '@/constants/api';
2
+ import StrapiLinkButton from '@/components/StrapiLinkButton';
3
+ import {
4
+ BoemlyFormControl,
5
+ Box,
6
+ Button,
7
+ Divider,
8
+ Flex,
9
+ InputRightAddon,
10
+ Spacer,
11
+ Text,
12
+ } from 'boemly';
13
+ import {
14
+ Field,
15
+ FieldProps,
16
+ Form,
17
+ Formik,
18
+ FormikErrors,
19
+ FormikProps,
20
+ } from 'formik';
21
+ import { useRouter } from 'next/router';
22
+ import { FormattedMessage, useIntl } from 'react-intl';
23
+ import Image from 'next/image';
24
+ import { useCallback } from 'react';
25
+ import StrapiLink from '@/models/strapi/StrapiLink';
26
+ import {
27
+ MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,
28
+ MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,
29
+ } from '@/constants/domain';
30
+
31
+ export interface SmallCheckoutProps {
32
+ batchId: string;
33
+ pricePerKg: number;
34
+ initialContributionValue: number;
35
+ checkoutText?: string;
36
+ currency: 'EUR' | 'CHF';
37
+
38
+ title?: string;
39
+ subtitle?: string;
40
+ button?: StrapiLink;
41
+ }
42
+
43
+ interface SmallCheckoutForm {
44
+ contributionValueCurrency: number;
45
+ contributionValueKgs: number;
46
+ }
47
+
48
+ const SmallCheckout = ({
49
+ pricePerKg,
50
+ currency,
51
+ batchId,
52
+ initialContributionValue,
53
+ checkoutText,
54
+ title,
55
+ subtitle,
56
+ button,
57
+ }: SmallCheckoutProps) => {
58
+ const { formatNumber, formatMessage } = useIntl();
59
+ const { push } = useRouter();
60
+
61
+ const validateForm = useCallback((values: SmallCheckoutForm) => {
62
+ const errors: FormikErrors<SmallCheckoutForm> = {};
63
+
64
+ if (!values.contributionValueCurrency) {
65
+ errors.contributionValueCurrency = formatMessage({
66
+ id: 'portfolio.smallCheckout.contributionValueCurrency.validation.empty',
67
+ });
68
+ } else if (
69
+ values.contributionValueCurrency < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY
70
+ ) {
71
+ errors.contributionValueCurrency = formatMessage({
72
+ id: `portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.${currency}`,
73
+ });
74
+ } else if (
75
+ values.contributionValueCurrency > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY
76
+ ) {
77
+ errors.contributionValueCurrency = formatMessage({
78
+ id: 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh',
79
+ });
80
+ }
81
+
82
+ return errors;
83
+ }, []);
84
+
85
+ const onSubmit = async ({ contributionValueCurrency }: SmallCheckoutForm) => {
86
+ push(
87
+ `${FPM_API_URI}/v1/webhooks/shop/checkout?batchId=${batchId}&quantity=${Math.floor(
88
+ contributionValueCurrency / pricePerKg
89
+ )}`
90
+ );
91
+ };
92
+
93
+ return (
94
+ <Flex
95
+ width="full"
96
+ height="full"
97
+ borderRadius="xl"
98
+ background="primary.100"
99
+ padding="6"
100
+ direction="column"
101
+ >
102
+ <Flex gap="1" alignItems="end" mb="6">
103
+ <Text color="black" lineHeight="0">
104
+ {formatMessage(
105
+ { id: 'unit.formatter.tonsCo2' },
106
+ {
107
+ number: (
108
+ <Text as="span" size="lgLowBold" color="black">
109
+ {formatNumber(pricePerKg * 1000, {
110
+ style: 'currency',
111
+ currency,
112
+ maximumFractionDigits: 0,
113
+ })}
114
+ </Text>
115
+ ),
116
+ }
117
+ )}
118
+ </Text>
119
+ </Flex>
120
+
121
+ <Formik
122
+ initialValues={{
123
+ contributionValueCurrency: initialContributionValue,
124
+ contributionValueKgs: initialContributionValue / pricePerKg / 1000,
125
+ }}
126
+ validate={validateForm}
127
+ onSubmit={onSubmit}
128
+ >
129
+ {({
130
+ errors,
131
+ touched,
132
+ handleSubmit,
133
+ setValues,
134
+ }: FormikProps<SmallCheckoutForm>) => (
135
+ <Form onSubmit={handleSubmit}>
136
+ <Flex gap="4">
137
+ <Box width="full">
138
+ <Field name="contributionValueCurrency">
139
+ {({ field }: FieldProps) => (
140
+ <BoemlyFormControl
141
+ id="contributionValueCurrency"
142
+ size="md"
143
+ inputType="NumberInput"
144
+ numberInputProps={{
145
+ value: field.value,
146
+ onChange: (valueString) => {
147
+ // valueAsNumber might be NaN
148
+ const value = parseInt(valueString || '0', 10);
149
+
150
+ setValues({
151
+ contributionValueCurrency: value,
152
+ contributionValueKgs: value / pricePerKg / 1000,
153
+ });
154
+ },
155
+ }}
156
+ label={formatMessage({
157
+ id: `portfolio.smallCheckout.contributionValueCurrency.label.${currency}`,
158
+ })}
159
+ rightAddonsOrElements={[
160
+ <InputRightAddon key="currencyUnit">
161
+ <FormattedMessage
162
+ id={`portfolio.smallCheckout.contributionValueCurrency.unit.${currency}`}
163
+ />
164
+ </InputRightAddon>,
165
+ ]}
166
+ isInvalid={
167
+ !!errors.contributionValueCurrency &&
168
+ touched.contributionValueCurrency
169
+ }
170
+ errorMessage={errors.contributionValueCurrency}
171
+ />
172
+ )}
173
+ </Field>
174
+ </Box>
175
+
176
+ <Box width="full">
177
+ <Field name="contributionValueKgs">
178
+ {({ field }: FieldProps) => (
179
+ <BoemlyFormControl
180
+ id="contributionValueKgs"
181
+ size="md"
182
+ inputType="NumberInput"
183
+ numberInputProps={{
184
+ value: field.value,
185
+ onChange: (valueString) => {
186
+ const value = parseInt(valueString || '0', 10);
187
+
188
+ setValues({
189
+ contributionValueCurrency:
190
+ value * pricePerKg * 1000,
191
+ contributionValueKgs: value,
192
+ });
193
+ },
194
+ }}
195
+ label={formatMessage({
196
+ id: 'portfolio.smallCheckout.contributionValueKgs.label',
197
+ })}
198
+ rightAddonsOrElements={[
199
+ <InputRightAddon key="tCO₂">tCO₂</InputRightAddon>,
200
+ ]}
201
+ isInvalid={
202
+ !!errors.contributionValueKgs &&
203
+ touched.contributionValueKgs
204
+ }
205
+ errorMessage={errors.contributionValueKgs}
206
+ />
207
+ )}
208
+ </Field>
209
+ </Box>
210
+ </Flex>
211
+
212
+ <Spacer height="4" />
213
+
214
+ <Button type="submit" width="full">
215
+ <FormattedMessage id="portfolio.smallCheckout.submitButton" />
216
+ </Button>
217
+ </Form>
218
+ )}
219
+ </Formik>
220
+
221
+ <Flex
222
+ width="full"
223
+ justifyContent="center"
224
+ alignItems="center"
225
+ mt="6"
226
+ gap="2"
227
+ >
228
+ <Image
229
+ src={`${CDN_URI}/assets/v3/strapi-slices/globe-love-icon.svg`}
230
+ alt="Icon"
231
+ width={20}
232
+ height={20}
233
+ />
234
+ <Text size="smLowNormal">{checkoutText}</Text>
235
+ </Flex>
236
+
237
+ <Divider my="6" />
238
+
239
+ <Flex width="full" alignItems="center" direction="column">
240
+ {title && (
241
+ <Text size="smLowBold" textAlign="center" color="black" mb="2">
242
+ {title}
243
+ </Text>
244
+ )}
245
+ {subtitle && (
246
+ <Text size="smRegularNormal" textAlign="center" mb="3">
247
+ {subtitle}
248
+ </Text>
249
+ )}
250
+ {button && (
251
+ <StrapiLinkButton
252
+ link={{
253
+ id: 1,
254
+ intercomLauncher: true,
255
+ text: button.text,
256
+ }}
257
+ variant="outline"
258
+ />
259
+ )}
260
+ </Flex>
261
+ </Flex>
262
+ );
263
+ };
264
+
265
+ export default SmallCheckout;
@@ -0,0 +1,3 @@
1
+ import SmallCheckout from './SmallCheckout';
2
+
3
+ export default SmallCheckout;
@@ -0,0 +1,26 @@
1
+ export default {
2
+ 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':
3
+ 'Geben Sie den Beitrag in Fr. ein',
4
+ 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':
5
+ 'Geben Sie den Beitrag in € ein',
6
+ 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',
7
+ 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'Fr.',
8
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':
9
+ 'Der Wert muss mindestens 10 CHF betragen',
10
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':
11
+ 'Der Wert muss mindestens 10 Euro betragen.',
12
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':
13
+ 'Bitte geben Sie einen Wert ein',
14
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':
15
+ 'Für größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über den unten stehenden Button',
16
+
17
+ 'portfolio.smallCheckout.contributionValueKgs.label': 'Beitrag in Tonnen',
18
+
19
+ 'portfolio.smallCheckout.submitButton': 'Credits kaufen',
20
+
21
+ 'portfolio.smallCheckout.cta.title':
22
+ 'Möchten Sie mehr als 10.000 tCO₂ kaufen?',
23
+ 'portfolio.smallCheckout.cta.subTitle':
24
+ 'Für Unternehmenskunden bieten wir individuelle Lösungen an. Kontaktieren Sie uns.',
25
+ 'portfolio.smallCheckout.cta.button': 'Unser Vertriebsteam kontaktieren',
26
+ };
@@ -0,0 +1,26 @@
1
+ export default {
2
+ 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':
3
+ 'Contribution Amount in CHF',
4
+ 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':
5
+ 'Contribution Amount in €',
6
+ 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',
7
+ 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'CHF',
8
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':
9
+ 'The value must be at least 10 CHF',
10
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':
11
+ 'The value must be at least 10 Euro',
12
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':
13
+ 'Please enter a value',
14
+ 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':
15
+ 'For bigger purchases please contact our sales team via office@tree.ly',
16
+
17
+ 'portfolio.smallCheckout.contributionValueKgs.label':
18
+ 'Contribution Amount in Tons',
19
+
20
+ 'portfolio.smallCheckout.submitButton': 'Buy credits',
21
+
22
+ 'portfolio.smallCheckout.cta.title': 'Looking to buy more than 10.000 tCO₂?',
23
+ 'portfolio.smallCheckout.cta.subTitle':
24
+ 'For enterprise-customers we offer custom solutions. Feel free to contact us.',
25
+ 'portfolio.smallCheckout.cta.button': 'Contact our Sales Team',
26
+ };
@@ -0,0 +1 @@
1
+ export const MEDIUM_TRANSITION_DURATION = 0.2;
@@ -0,0 +1,5 @@
1
+ export const API_URI =
2
+ process.env.NEXT_PUBLIC_API_URI || 'http://localhost:4001';
3
+ export const FPM_API_URI =
4
+ process.env.NEXT_PUBLIC_FPM_API_URI || 'https://api.fpm.t-staging.com';
5
+ export const CDN_URI = 'https://cdn.tree.ly';
@@ -0,0 +1,9 @@
1
+ export const BREAKPOINT_SM = '320px';
2
+ export const BREAKPOINT_MD = '768px';
3
+ export const BREAKPOINT_LG = '960px';
4
+ export const BREAKPOINT_XL = '1200px';
5
+
6
+ export const BREAKPOINT_SM_QUERY = `(max-width: ${BREAKPOINT_SM})`;
7
+ export const BREAKPOINT_MD_QUERY = `(max-width: ${BREAKPOINT_MD})`;
8
+ export const BREAKPOINT_LG_QUERY = `(max-width: ${BREAKPOINT_LG})`;
9
+ export const BREAKPOINT_XL_QUERY = `(max-width: ${BREAKPOINT_XL})`;
@@ -0,0 +1,3 @@
1
+ export const MINIMUM_CONTRIBUTION_VALUE_IN_MONEY = 10;
2
+
3
+ export const MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY = 60_000;
@@ -0,0 +1,6 @@
1
+ export const FONT_CUSTOMIZATIONS = {
2
+ body: 'Inter',
3
+ heading: 'Inter',
4
+ display: 'GintoNord',
5
+ mono: 'SpaceMono',
6
+ };
@@ -0,0 +1,29 @@
1
+ import { FormatNumberOptions } from 'react-intl';
2
+
3
+ export const FORMAT_AS_EUR_CONFIG: FormatNumberOptions = {
4
+ style: 'currency',
5
+ currency: 'EUR',
6
+ };
7
+
8
+ export const FORMAT_AS_METER_CONFIG: FormatNumberOptions = {
9
+ unit: 'meter',
10
+ unitDisplay: 'short',
11
+ style: 'unit',
12
+ maximumFractionDigits: 0,
13
+ };
14
+
15
+ export const FORMAT_AS_HECTARE_CONFIG: FormatNumberOptions = {
16
+ unit: 'hectare',
17
+ unitDisplay: 'short',
18
+ style: 'unit',
19
+ maximumFractionDigits: 2,
20
+ };
21
+
22
+ export const FORMAT_AS_CUBIC_METERS_PER_HECTARE_CONFIG: FormatNumberOptions = {
23
+ maximumFractionDigits: 0,
24
+ };
25
+
26
+ export const FORMAT_AS_PERCENT_CONFIG: FormatNumberOptions = {
27
+ style: 'percent',
28
+ maximumFractionDigits: 2,
29
+ };
@@ -0,0 +1,55 @@
1
+ import { css } from '@emotion/react';
2
+ import { CDN_URI } from './api';
3
+
4
+ export const GLOBAL_STYLE = css`
5
+ // GintoNord
6
+ @font-face {
7
+ font-family: 'GintoNord';
8
+ src: url('${CDN_URI}/assets/v3/fonts/ABCGintoNord-Bold.woff2')
9
+ format('woff2');
10
+ font-style: normal;
11
+ font-weight: 700;
12
+ font-display: block;
13
+ }
14
+ // Inter
15
+ @font-face {
16
+ font-family: 'Inter';
17
+ src: url('${CDN_URI}/assets/v3/fonts/Inter-Regular.woff2') format('woff2');
18
+ font-style: normal;
19
+ font-weight: 400;
20
+ font-display: block;
21
+ }
22
+ @font-face {
23
+ font-family: 'Inter';
24
+ src: url('${CDN_URI}/assets/v3/fonts/Inter-Medium.woff2') format('woff2');
25
+ font-style: normal;
26
+ font-weight: 500;
27
+ font-display: block;
28
+ }
29
+ @font-face {
30
+ font-family: 'Inter';
31
+ src: url('${CDN_URI}/assets/v3/fonts/Inter-SemiBold.woff2') format('woff2');
32
+ font-style: normal;
33
+ font-weight: 600;
34
+ font-display: block;
35
+ }
36
+ @font-face {
37
+ font-family: 'Inter';
38
+ src: url('${CDN_URI}/assets/v3/fonts/Inter-Bold.woff2') format('woff2');
39
+ font-style: normal;
40
+ font-weight: 700;
41
+ font-display: block;
42
+ }
43
+ // SpaceMono
44
+ @font-face {
45
+ font-family: 'SpaceMono';
46
+ src: url('${CDN_URI}/assets/v3/fonts/SpaceMono-Bold.woff2') format('woff2');
47
+ font-style: normal;
48
+ font-weight: 700;
49
+ font-display: block;
50
+ }
51
+
52
+ :root {
53
+ --default-hero-height: calc(100vh - var(--boemly-space-24));
54
+ }
55
+ `;
@@ -0,0 +1,24 @@
1
+ export const MAPBOX_TOKEN =
2
+ 'pk.eyJ1IjoidHJlZS1seSIsImEiOiJja25rNG1heHgwNThjMnZwZTl2eThmeXUwIn0.SOrYUKfevZkbx8jZPxJesA';
3
+
4
+ export enum MapBoxStyle {
5
+ Outdoors = 'mapbox://styles/mapbox/outdoors-v11',
6
+ SatelliteStreets = 'mapbox://styles/mapbox/satellite-streets-v11',
7
+ Satellite = 'mapbox://styles/mapbox/satellite-v9',
8
+ CaliTerrain = 'mapbox://styles/tree-ly/clna54iq603ht01pbc199cszw',
9
+ }
10
+
11
+ export const MAPBOX_TILES_URL = `${
12
+ process.env.NEXT_PUBLIC_MAPBOX_TILES_URL || 'http://localhost:8123'
13
+ }/vectortiles/v1/plots/{z}/{x}/{y}.mvt`;
14
+ export const MAPBOX_SOURCE_LAYER = 'plots';
15
+ export const MAPBOX_SOURCE_IDENTIFIER = 'plots';
16
+ export const MAPBOX_BORDER_LAYER_IDENTIFIER = 'plots-borders';
17
+ export const MAPBOX_FILL_LAYER_IDENTIFIER = 'plots-fill';
18
+ export const MAPBOX_TEXT_LAYER_IDENTIFIER = 'plots-text';
19
+
20
+ export const MAPBOX_TEXT_MIN_ZOOM = 15;
21
+ export const MAPBOX_SHAPES_MIN_ZOOM = 13;
22
+
23
+ export const MAPBOX_MAX_ZOOM = 19;
24
+ export const MAPBOX_INITIAL_ZOOM = 13;
@@ -0,0 +1,2 @@
1
+ export const STRAPI_URI =
2
+ process.env.NEXT_PUBLIC_STRAPI_URI || 'http://127.0.0.1:1337';
@@ -0,0 +1,23 @@
1
+ const LinkedInIcon = () => (
2
+ <svg
3
+ width="14"
4
+ height="14"
5
+ viewBox="0 0 14 14"
6
+ fill="none"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <g clipPath="url(#clip0_112_606)">
10
+ <path
11
+ d="M11.9286 11.9285H9.85424V8.67998C9.85424 7.90534 9.84042 6.90813 8.77539 6.90813C7.695 6.90813 7.52969 7.75213 7.52969 8.62357V11.9283H5.45533V5.24799H7.44671V6.16093H7.47459C7.67388 5.82018 7.96186 5.53986 8.30786 5.34984C8.65386 5.15981 9.04493 5.06719 9.4394 5.08183C11.5418 5.08183 11.9295 6.46473 11.9295 8.2638L11.9286 11.9285ZM3.11477 4.33484C2.87669 4.33489 2.64393 4.26433 2.44595 4.13209C2.24796 3.99985 2.09365 3.81188 2.0025 3.59193C1.91135 3.37199 1.88746 3.12995 1.93387 2.89644C1.98027 2.66292 2.09488 2.44841 2.26321 2.28003C2.43153 2.11164 2.646 1.99696 2.8795 1.95047C3.11301 1.90398 3.35504 1.92778 3.57502 2.01884C3.795 2.10992 3.98303 2.26417 4.11533 2.46211C4.24764 2.66004 4.31829 2.89277 4.31833 3.13085C4.31836 3.28894 4.28725 3.44547 4.22678 3.59153C4.1663 3.7376 4.07767 3.87031 3.96591 3.98211C3.85415 4.09392 3.72146 4.18261 3.57541 4.24313C3.42937 4.30365 3.27286 4.33481 3.11477 4.33484ZM4.15194 11.9285H2.07544V5.24799H4.15194V11.9285ZM12.9628 0.000953808H1.03307C0.762304 -0.00210183 0.501383 0.102466 0.307673 0.291681C0.113961 0.480895 0.00330461 0.739273 0 1.01004V12.9892C0.00319151 13.2602 0.113783 13.5187 0.307487 13.7081C0.501192 13.8975 0.762169 14.0023 1.03307 13.9994H12.9628C13.2342 14.0028 13.496 13.8983 13.6904 13.7089C13.8848 13.5195 13.9962 13.2607 14 12.9892V1.00918C13.9961 0.737873 13.8846 0.479199 13.6902 0.28999C13.4958 0.10078 13.2341 -0.00348904 12.9628 8.91429e-05"
12
+ fill="#0A66C2"
13
+ />
14
+ </g>
15
+ <defs>
16
+ <clipPath id="clip0_112_606">
17
+ <rect width="14" height="14" fill="white" />
18
+ </clipPath>
19
+ </defs>
20
+ </svg>
21
+ );
22
+
23
+ export default LinkedInIcon;
package/src/index.tsx ADDED
@@ -0,0 +1 @@
1
+ export * from './components/SliceRenderer';
@@ -0,0 +1,3 @@
1
+ type BBox = [number, number, number, number];
2
+
3
+ export default BBox;
@@ -0,0 +1,8 @@
1
+ enum CreditsAvailableState {
2
+ YES = 'yes',
3
+ SOME = 'some',
4
+ NO = 'no',
5
+ NOT_YET = 'notYet',
6
+ }
7
+
8
+ export default CreditsAvailableState;
@@ -0,0 +1,3 @@
1
+ type Locale = 'en' | 'de';
2
+
3
+ export default Locale;