@treely/strapi-slices 2.0.0 → 2.2.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 (246) hide show
  1. package/package.json +1 -2
  2. package/src/components/SEOTags/SEOTags.tsx +53 -0
  3. package/src/components/SEOTags/index.ts +1 -0
  4. package/src/constants/metadata.ts +3 -0
  5. package/src/constants/sectionsConfig.ts +20 -0
  6. package/src/index.tsx +119 -0
  7. package/src/models/HeaderType.ts +6 -0
  8. package/src/models/Image.ts +6 -0
  9. package/src/models/PageMetadata.ts +11 -0
  10. package/src/models/PageProps.ts +32 -0
  11. package/src/models/strapi/StrapiBlogPostProps.ts +7 -0
  12. package/src/models/strapi/StrapiCustomerStoryProps.ts +9 -0
  13. package/src/models/strapi/StrapiPageProps.ts +7 -0
  14. package/src/models/strapi/StrapiProjectProps.ts +7 -0
  15. package/src/test/mocks/getStaticPropsContext.ts +9 -0
  16. package/src/utils/mergeGlobalAndStrapiBlogPostData.test.ts +154 -0
  17. package/src/utils/mergeGlobalAndStrapiBlogPostData.ts +68 -0
  18. package/src/utils/mergeGlobalAndStrapiCustomerStoryData.test.ts +149 -0
  19. package/src/utils/mergeGlobalAndStrapiCustomerStoryData.ts +68 -0
  20. package/src/utils/mergeGlobalAndStrapiPageData.test.ts +254 -0
  21. package/src/utils/mergeGlobalAndStrapiPageData.ts +81 -0
  22. package/src/utils/mergeGlobalAndStrapiProjectData.test.ts +243 -0
  23. package/src/utils/mergeGlobalAndStrapiProjectData.ts +79 -0
  24. package/dist/components/ContextProvider/ContextProvider.d.ts +0 -8
  25. package/dist/components/ContextProvider/index.d.ts +0 -1
  26. package/dist/components/CreditsAvailableBadge/CreditsAvailableBadge.d.ts +0 -8
  27. package/dist/components/CreditsAvailableBadge/index.d.ts +0 -2
  28. package/dist/components/CreditsAvailableBadge/messages.de.d.ts +0 -7
  29. package/dist/components/CreditsAvailableBadge/messages.en.d.ts +0 -7
  30. package/dist/components/FullScreenImage/FullScreenImage.d.ts +0 -9
  31. package/dist/components/FullScreenImage/ZoomableImage.d.ts +0 -8
  32. package/dist/components/FullScreenImage/index.d.ts +0 -2
  33. package/dist/components/MinimalProviders/MinimalProviders.d.ts +0 -7
  34. package/dist/components/MinimalProviders/index.d.ts +0 -2
  35. package/dist/components/SliceRenderer/SliceRenderer.d.ts +0 -19
  36. package/dist/components/SliceRenderer/index.d.ts +0 -1
  37. package/dist/components/StrapiLinkButton/StrapiLinkButton.d.ts +0 -18
  38. package/dist/components/StrapiLinkButton/index.d.ts +0 -2
  39. package/dist/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.d.ts +0 -7
  40. package/dist/components/StrapiLinkButtonWithIcon/index.d.ts +0 -2
  41. package/dist/components/portfolio/Contact/Contact.d.ts +0 -10
  42. package/dist/components/portfolio/Contact/index.d.ts +0 -2
  43. package/dist/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.d.ts +0 -6
  44. package/dist/components/portfolio/DocumentsDownloadList/index.d.ts +0 -2
  45. package/dist/components/portfolio/DocumentsDownloadList/messages.de.d.ts +0 -5
  46. package/dist/components/portfolio/DocumentsDownloadList/messages.en.d.ts +0 -5
  47. package/dist/components/portfolio/ProjectInfo/ProjectInfo.d.ts +0 -18
  48. package/dist/components/portfolio/ProjectInfo/index.d.ts +0 -2
  49. package/dist/components/portfolio/ProjectInfo/messages.de.d.ts +0 -15
  50. package/dist/components/portfolio/ProjectInfo/messages.en.d.ts +0 -15
  51. package/dist/components/portfolio/SmallCheckout/SmallCheckout.d.ts +0 -14
  52. package/dist/components/portfolio/SmallCheckout/index.d.ts +0 -2
  53. package/dist/components/portfolio/SmallCheckout/messages.de.d.ts +0 -16
  54. package/dist/components/portfolio/SmallCheckout/messages.en.d.ts +0 -16
  55. package/dist/constants/animations.d.ts +0 -1
  56. package/dist/constants/api.d.ts +0 -3
  57. package/dist/constants/breakpoints.d.ts +0 -8
  58. package/dist/constants/domain.d.ts +0 -2
  59. package/dist/constants/fontCustomizations.d.ts +0 -6
  60. package/dist/constants/formatter.d.ts +0 -6
  61. package/dist/constants/globalStyle.d.ts +0 -1
  62. package/dist/constants/mapbox.d.ts +0 -17
  63. package/dist/constants/strapi.d.ts +0 -1
  64. package/dist/icons/LinkedInIcon.d.ts +0 -3
  65. package/dist/index.d.ts +0 -1
  66. package/dist/index.js +0 -8
  67. package/dist/models/BBox.d.ts +0 -2
  68. package/dist/models/CreditsAvailableState.d.ts +0 -7
  69. package/dist/models/Locale.d.ts +0 -2
  70. package/dist/models/PortfolioProject.d.ts +0 -7
  71. package/dist/models/forms/CheckoutForm.d.ts +0 -4
  72. package/dist/models/fpm/FPMProject.d.ts +0 -37
  73. package/dist/models/fpm/Issuer.d.ts +0 -6
  74. package/dist/models/strapi/IStrapi.d.ts +0 -4
  75. package/dist/models/strapi/IStrapiData.d.ts +0 -5
  76. package/dist/models/strapi/IStrapiResponse.d.ts +0 -13
  77. package/dist/models/strapi/StrapiAuthor.d.ts +0 -10
  78. package/dist/models/strapi/StrapiAvatarWithName.d.ts +0 -8
  79. package/dist/models/strapi/StrapiBanner.d.ts +0 -9
  80. package/dist/models/strapi/StrapiBlogPost.d.ts +0 -25
  81. package/dist/models/strapi/StrapiButtonWithVariant.d.ts +0 -6
  82. package/dist/models/strapi/StrapiCategory.d.ts +0 -8
  83. package/dist/models/strapi/StrapiContactArea.d.ts +0 -10
  84. package/dist/models/strapi/StrapiCustomerStory.d.ts +0 -21
  85. package/dist/models/strapi/StrapiDefaultHeader.d.ts +0 -6
  86. package/dist/models/strapi/StrapiGlobal.d.ts +0 -26
  87. package/dist/models/strapi/StrapiGlossaryItem.d.ts +0 -6
  88. package/dist/models/strapi/StrapiHeroCard.d.ts +0 -13
  89. package/dist/models/strapi/StrapiImage.d.ts +0 -10
  90. package/dist/models/strapi/StrapiImageFormat.d.ts +0 -12
  91. package/dist/models/strapi/StrapiImageWithLink.d.ts +0 -6
  92. package/dist/models/strapi/StrapiLink.d.ts +0 -11
  93. package/dist/models/strapi/StrapiLinkList.d.ts +0 -7
  94. package/dist/models/strapi/StrapiLinkPage.d.ts +0 -10
  95. package/dist/models/strapi/StrapiLinkWithIcon.d.ts +0 -7
  96. package/dist/models/strapi/StrapiLocalization.d.ts +0 -7
  97. package/dist/models/strapi/StrapiMedia.d.ts +0 -27
  98. package/dist/models/strapi/StrapiMetadata.d.ts +0 -13
  99. package/dist/models/strapi/StrapiNavMenu.d.ts +0 -13
  100. package/dist/models/strapi/StrapiPage.d.ts +0 -17
  101. package/dist/models/strapi/StrapiPortfolio.d.ts +0 -10
  102. package/dist/models/strapi/StrapiPortfolioCard.d.ts +0 -15
  103. package/dist/models/strapi/StrapiProject.d.ts +0 -23
  104. package/dist/models/strapi/StrapiProjectCard.d.ts +0 -18
  105. package/dist/models/strapi/StrapiQuoteCard.d.ts +0 -7
  106. package/dist/models/strapi/StrapiShapesCard.d.ts +0 -11
  107. package/dist/models/strapi/StrapiTextCardWithIcons.d.ts +0 -8
  108. package/dist/models/strapi/StrapiTopBanner.d.ts +0 -7
  109. package/dist/rootMessages.de.d.ts +0 -58
  110. package/dist/rootMessages.en.d.ts +0 -58
  111. package/dist/slices/Blog/Blog.d.ts +0 -10
  112. package/dist/slices/Blog/index.d.ts +0 -2
  113. package/dist/slices/Blog/styles.d.ts +0 -7
  114. package/dist/slices/BlogCards/BlogCards.d.ts +0 -18
  115. package/dist/slices/BlogCards/index.d.ts +0 -2
  116. package/dist/slices/Comparison/Comparison.d.ts +0 -33
  117. package/dist/slices/Comparison/Icon.d.ts +0 -7
  118. package/dist/slices/Comparison/index.d.ts +0 -2
  119. package/dist/slices/Comparison/messages.de.d.ts +0 -4
  120. package/dist/slices/Comparison/messages.en.d.ts +0 -4
  121. package/dist/slices/Cta/Cta.d.ts +0 -26
  122. package/dist/slices/Cta/index.d.ts +0 -2
  123. package/dist/slices/Cta/messages.de.d.ts +0 -5
  124. package/dist/slices/Cta/messages.en.d.ts +0 -5
  125. package/dist/slices/CtaOnly/CtaOnly.d.ts +0 -8
  126. package/dist/slices/CtaOnly/index.d.ts +0 -2
  127. package/dist/slices/CustomerStories/CustomerStories.d.ts +0 -10
  128. package/dist/slices/CustomerStories/index.d.ts +0 -2
  129. package/dist/slices/CustomerStories/messages.de.d.ts +0 -4
  130. package/dist/slices/CustomerStories/messages.en.d.ts +0 -4
  131. package/dist/slices/Facts/Facts.d.ts +0 -16
  132. package/dist/slices/Facts/index.d.ts +0 -2
  133. package/dist/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.d.ts +0 -10
  134. package/dist/slices/FullWidthHighlightQuote/index.d.ts +0 -2
  135. package/dist/slices/FullWidthImage/FullWidthImage.d.ts +0 -11
  136. package/dist/slices/FullWidthImage/index.d.ts +0 -2
  137. package/dist/slices/FullWidthImageSlider/FullWidthImageSlider.d.ts +0 -12
  138. package/dist/slices/FullWidthImageSlider/index.d.ts +0 -2
  139. package/dist/slices/FullWidthImageSlider/styles.d.ts +0 -290
  140. package/dist/slices/FullWidthImageSlider/utils.d.ts +0 -1
  141. package/dist/slices/FullWidthImageSlider/utils.test.d.ts +0 -1
  142. package/dist/slices/Glossary/Glossary.d.ts +0 -9
  143. package/dist/slices/Glossary/index.d.ts +0 -2
  144. package/dist/slices/Glossary/messages.de.d.ts +0 -6
  145. package/dist/slices/Glossary/messages.en.d.ts +0 -6
  146. package/dist/slices/Hero/Hero.d.ts +0 -17
  147. package/dist/slices/Hero/index.d.ts +0 -2
  148. package/dist/slices/IconGrid/IconGrid.d.ts +0 -18
  149. package/dist/slices/IconGrid/index.d.ts +0 -2
  150. package/dist/slices/ImageGrid/ImageGrid.d.ts +0 -18
  151. package/dist/slices/ImageGrid/index.d.ts +0 -2
  152. package/dist/slices/ImageTextSequence/ImageTextSequence.d.ts +0 -19
  153. package/dist/slices/ImageTextSequence/index.d.ts +0 -2
  154. package/dist/slices/LeftTextRightCard/LeftTextRightCard.d.ts +0 -17
  155. package/dist/slices/LeftTextRightCard/index.d.ts +0 -2
  156. package/dist/slices/LinkCardsGrid/LinkCardsGrid.d.ts +0 -18
  157. package/dist/slices/LinkCardsGrid/index.d.ts +0 -2
  158. package/dist/slices/LogoGridWithText/LogoGridWithText.d.ts +0 -12
  159. package/dist/slices/LogoGridWithText/index.d.ts +0 -2
  160. package/dist/slices/MapHero/MapHero.d.ts +0 -15
  161. package/dist/slices/MapHero/index.d.ts +0 -2
  162. package/dist/slices/MapHero/styles.d.ts +0 -16
  163. package/dist/slices/ProjectFacts/ProjectFacts.d.ts +0 -34
  164. package/dist/slices/ProjectFacts/index.d.ts +0 -2
  165. package/dist/slices/ProjectFacts/messages.de.d.ts +0 -5
  166. package/dist/slices/ProjectFacts/messages.en.d.ts +0 -5
  167. package/dist/slices/ProjectsGrid/ProjectsGrid.d.ts +0 -8
  168. package/dist/slices/ProjectsGrid/index.d.ts +0 -2
  169. package/dist/slices/ProjectsMap/MapMarker.d.ts +0 -11
  170. package/dist/slices/ProjectsMap/ProjectsMap.d.ts +0 -16
  171. package/dist/slices/ProjectsMap/index.d.ts +0 -2
  172. package/dist/slices/ProjectsMap/mapboxStyle.d.ts +0 -2
  173. package/dist/slices/ProjectsMap/messages.de.d.ts +0 -4
  174. package/dist/slices/ProjectsMap/messages.en.d.ts +0 -4
  175. package/dist/slices/QAndA/QAndA.d.ts +0 -43
  176. package/dist/slices/QAndA/index.d.ts +0 -2
  177. package/dist/slices/QuoteCards/QuoteCards.d.ts +0 -15
  178. package/dist/slices/QuoteCards/index.d.ts +0 -2
  179. package/dist/slices/RichTextSection/RichTextSection.d.ts +0 -7
  180. package/dist/slices/RichTextSection/index.d.ts +0 -2
  181. package/dist/slices/ShopCheckout/ShopCheckout.d.ts +0 -16
  182. package/dist/slices/ShopCheckout/index.d.ts +0 -2
  183. package/dist/slices/ShopCheckout/messages.de.d.ts +0 -15
  184. package/dist/slices/ShopCheckout/messages.en.d.ts +0 -15
  185. package/dist/slices/SideBySideImages/SideBySideImages.d.ts +0 -12
  186. package/dist/slices/SideBySideImages/index.d.ts +0 -2
  187. package/dist/slices/SmallHero/SmallHero.d.ts +0 -20
  188. package/dist/slices/SmallHero/index.d.ts +0 -2
  189. package/dist/slices/Steps/Steps.d.ts +0 -19
  190. package/dist/slices/Steps/index.d.ts +0 -2
  191. package/dist/slices/TextCardGrid/TextCardGrid.d.ts +0 -20
  192. package/dist/slices/TextCardGrid/index.d.ts +0 -2
  193. package/dist/slices/TextCarousel/TextCarousel.d.ts +0 -13
  194. package/dist/slices/TextCarousel/index.d.ts +0 -2
  195. package/dist/slices/TextCarousel/styles.d.ts +0 -281
  196. package/dist/slices/TextWithCard/TextWithCard.d.ts +0 -20
  197. package/dist/slices/TextWithCard/index.d.ts +0 -2
  198. package/dist/slices/TextWithTextCards/TextWithTextCards.d.ts +0 -15
  199. package/dist/slices/TextWithTextCards/index.d.ts +0 -2
  200. package/dist/slices/Video/Video.d.ts +0 -10
  201. package/dist/slices/Video/index.d.ts +0 -2
  202. package/dist/strapi-slices.cjs.development.js +0 -4653
  203. package/dist/strapi-slices.cjs.development.js.map +0 -1
  204. package/dist/strapi-slices.cjs.production.min.js +0 -2
  205. package/dist/strapi-slices.cjs.production.min.js.map +0 -1
  206. package/dist/strapi-slices.esm.js +0 -4640
  207. package/dist/strapi-slices.esm.js.map +0 -1
  208. package/dist/test/defaultMocks/next.d.ts +0 -2
  209. package/dist/test/integrationMocks/fpmProjectMock.d.ts +0 -3
  210. package/dist/test/mocks/portfolioProjectMock.d.ts +0 -3
  211. package/dist/test/setupTests.d.ts +0 -1
  212. package/dist/test/storybookMocks/storybookMedia.d.ts +0 -1
  213. package/dist/test/storybookMocks/storybookStrapiMedia.d.ts +0 -8
  214. package/dist/test/strapiMocks/minimalGlobalData.d.ts +0 -4
  215. package/dist/test/strapiMocks/strapiAvatarWithName.d.ts +0 -12
  216. package/dist/test/strapiMocks/strapiBlogPost.d.ts +0 -3
  217. package/dist/test/strapiMocks/strapiContact.d.ts +0 -2
  218. package/dist/test/strapiMocks/strapiCustomerStory.d.ts +0 -3
  219. package/dist/test/strapiMocks/strapiHeroCard.d.ts +0 -2
  220. package/dist/test/strapiMocks/strapiLinkPage.d.ts +0 -3
  221. package/dist/test/strapiMocks/strapiMedia.d.ts +0 -3
  222. package/dist/test/strapiMocks/strapiMetadata.d.ts +0 -2
  223. package/dist/test/strapiMocks/strapiPage.d.ts +0 -3
  224. package/dist/test/strapiMocks/strapiPortfolioCard.d.ts +0 -2
  225. package/dist/test/strapiMocks/strapiPortfolioMock.d.ts +0 -3
  226. package/dist/test/strapiMocks/strapiProject.d.ts +0 -3
  227. package/dist/test/strapiMocks/strapiProjectCard.d.ts +0 -2
  228. package/dist/test/strapiMocks/strapiQuoteCard.d.ts +0 -2
  229. package/dist/test/testUtils.d.ts +0 -6
  230. package/dist/unit.messages.de.d.ts +0 -5
  231. package/dist/unit.messages.en.d.ts +0 -5
  232. package/dist/utils/convertAreaM2ToHa.d.ts +0 -2
  233. package/dist/utils/convertAreaM2ToHa.test.d.ts +0 -1
  234. package/dist/utils/convertCo2AmountKgToTons.d.ts +0 -2
  235. package/dist/utils/convertToKebabCase.d.ts +0 -2
  236. package/dist/utils/convertToKebabCase.test.d.ts +0 -1
  237. package/dist/utils/getTimeSpanInYears.d.ts +0 -2
  238. package/dist/utils/getTimeSpanInYears.test.d.ts +0 -1
  239. package/dist/utils/mergeBoundingBoxes.d.ts +0 -3
  240. package/dist/utils/mergeBoundingBoxes.test.d.ts +0 -1
  241. package/dist/utils/mergeDeep.d.ts +0 -12
  242. package/dist/utils/openHubSpotChat.d.ts +0 -2
  243. package/dist/utils/strapiLinkUrl.d.ts +0 -3
  244. package/dist/utils/strapiLinkUrl.test.d.ts +0 -1
  245. package/dist/utils/strapiMediaUrl.d.ts +0 -5
  246. package/dist/utils/strapiMediaUrl.test.d.ts +0 -1
@@ -1,4640 +0,0 @@
1
- import React, { useState, useRef, useEffect, Fragment, createRef, createContext, useContext, useCallback, useMemo } from 'react';
2
- import { Box, BoemlyModal, Flex, IconButton, useMediaQuery, DefaultSectionContainer, Wrapper, DefaultSectionHeader, Button, Gradient, Spacer, SimpleGrid, Heading, Text, useToken, Grid, GridItem, BoemlyList, PortfolioCard, RichText, BoemlyAccordion, HeroCard, Shape, QuoteCard, Center, ShapesCard, TextCardWithIcon, ContactArea, ProjectCard, Tag, Link as Link$1, BoemlyThemeProvider, DatePersonPair, Badge, useDisclosure, Container, AvatarWithName, Divider, LabelNumberPair, BoemlyFormControl, InputRightAddon, LabelTextPair } from 'boemly';
3
- import Image from 'next/image';
4
- import { useLockBodyScroll, useKey, useWindowScroll, useWindowSize, useMeasure, useCopyToClipboard } from 'react-use';
5
- import { CaretLeft, CaretRight, Globe, ArrowRight, MapPin, ArrowLeft, Check, Link as Link$2, FilePdf, DownloadSimple, X } from '@phosphor-icons/react';
6
- import Head from 'next/head';
7
- import Link from 'next/link';
8
- import { useDetectAdBlock } from 'adblock-detect-react';
9
- import { useRouter } from 'next/router';
10
- import styled from '@emotion/styled';
11
- import { css, Global } from '@emotion/react';
12
- import { motion, AnimatePresence } from 'framer-motion';
13
- import { createIntl, createIntlCache, IntlProvider } from 'react-intl';
14
- import mapboxgl, { Map, Marker } from 'mapbox-gl';
15
- import { createRoot } from 'react-dom/client';
16
- import { Formik, Form, Field } from 'formik';
17
-
18
- function _regeneratorRuntime() {
19
- _regeneratorRuntime = function () {
20
- return e;
21
- };
22
- var t,
23
- e = {},
24
- r = Object.prototype,
25
- n = r.hasOwnProperty,
26
- o = Object.defineProperty || function (t, e, r) {
27
- t[e] = r.value;
28
- },
29
- i = "function" == typeof Symbol ? Symbol : {},
30
- a = i.iterator || "@@iterator",
31
- c = i.asyncIterator || "@@asyncIterator",
32
- u = i.toStringTag || "@@toStringTag";
33
- function define(t, e, r) {
34
- return Object.defineProperty(t, e, {
35
- value: r,
36
- enumerable: !0,
37
- configurable: !0,
38
- writable: !0
39
- }), t[e];
40
- }
41
- try {
42
- define({}, "");
43
- } catch (t) {
44
- define = function (t, e, r) {
45
- return t[e] = r;
46
- };
47
- }
48
- function wrap(t, e, r, n) {
49
- var i = e && e.prototype instanceof Generator ? e : Generator,
50
- a = Object.create(i.prototype),
51
- c = new Context(n || []);
52
- return o(a, "_invoke", {
53
- value: makeInvokeMethod(t, r, c)
54
- }), a;
55
- }
56
- function tryCatch(t, e, r) {
57
- try {
58
- return {
59
- type: "normal",
60
- arg: t.call(e, r)
61
- };
62
- } catch (t) {
63
- return {
64
- type: "throw",
65
- arg: t
66
- };
67
- }
68
- }
69
- e.wrap = wrap;
70
- var h = "suspendedStart",
71
- l = "suspendedYield",
72
- f = "executing",
73
- s = "completed",
74
- y = {};
75
- function Generator() {}
76
- function GeneratorFunction() {}
77
- function GeneratorFunctionPrototype() {}
78
- var p = {};
79
- define(p, a, function () {
80
- return this;
81
- });
82
- var d = Object.getPrototypeOf,
83
- v = d && d(d(values([])));
84
- v && v !== r && n.call(v, a) && (p = v);
85
- var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
86
- function defineIteratorMethods(t) {
87
- ["next", "throw", "return"].forEach(function (e) {
88
- define(t, e, function (t) {
89
- return this._invoke(e, t);
90
- });
91
- });
92
- }
93
- function AsyncIterator(t, e) {
94
- function invoke(r, o, i, a) {
95
- var c = tryCatch(t[r], t, o);
96
- if ("throw" !== c.type) {
97
- var u = c.arg,
98
- h = u.value;
99
- return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
100
- invoke("next", t, i, a);
101
- }, function (t) {
102
- invoke("throw", t, i, a);
103
- }) : e.resolve(h).then(function (t) {
104
- u.value = t, i(u);
105
- }, function (t) {
106
- return invoke("throw", t, i, a);
107
- });
108
- }
109
- a(c.arg);
110
- }
111
- var r;
112
- o(this, "_invoke", {
113
- value: function (t, n) {
114
- function callInvokeWithMethodAndArg() {
115
- return new e(function (e, r) {
116
- invoke(t, n, e, r);
117
- });
118
- }
119
- return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
120
- }
121
- });
122
- }
123
- function makeInvokeMethod(e, r, n) {
124
- var o = h;
125
- return function (i, a) {
126
- if (o === f) throw new Error("Generator is already running");
127
- if (o === s) {
128
- if ("throw" === i) throw a;
129
- return {
130
- value: t,
131
- done: !0
132
- };
133
- }
134
- for (n.method = i, n.arg = a;;) {
135
- var c = n.delegate;
136
- if (c) {
137
- var u = maybeInvokeDelegate(c, n);
138
- if (u) {
139
- if (u === y) continue;
140
- return u;
141
- }
142
- }
143
- if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
144
- if (o === h) throw o = s, n.arg;
145
- n.dispatchException(n.arg);
146
- } else "return" === n.method && n.abrupt("return", n.arg);
147
- o = f;
148
- var p = tryCatch(e, r, n);
149
- if ("normal" === p.type) {
150
- if (o = n.done ? s : l, p.arg === y) continue;
151
- return {
152
- value: p.arg,
153
- done: n.done
154
- };
155
- }
156
- "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
157
- }
158
- };
159
- }
160
- function maybeInvokeDelegate(e, r) {
161
- var n = r.method,
162
- o = e.iterator[n];
163
- if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
164
- var i = tryCatch(o, e.iterator, r.arg);
165
- if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
166
- var a = i.arg;
167
- return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
168
- }
169
- function pushTryEntry(t) {
170
- var e = {
171
- tryLoc: t[0]
172
- };
173
- 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
174
- }
175
- function resetTryEntry(t) {
176
- var e = t.completion || {};
177
- e.type = "normal", delete e.arg, t.completion = e;
178
- }
179
- function Context(t) {
180
- this.tryEntries = [{
181
- tryLoc: "root"
182
- }], t.forEach(pushTryEntry, this), this.reset(!0);
183
- }
184
- function values(e) {
185
- if (e || "" === e) {
186
- var r = e[a];
187
- if (r) return r.call(e);
188
- if ("function" == typeof e.next) return e;
189
- if (!isNaN(e.length)) {
190
- var o = -1,
191
- i = function next() {
192
- for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
193
- return next.value = t, next.done = !0, next;
194
- };
195
- return i.next = i;
196
- }
197
- }
198
- throw new TypeError(typeof e + " is not iterable");
199
- }
200
- return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
201
- value: GeneratorFunctionPrototype,
202
- configurable: !0
203
- }), o(GeneratorFunctionPrototype, "constructor", {
204
- value: GeneratorFunction,
205
- configurable: !0
206
- }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
207
- var e = "function" == typeof t && t.constructor;
208
- return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
209
- }, e.mark = function (t) {
210
- return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
211
- }, e.awrap = function (t) {
212
- return {
213
- __await: t
214
- };
215
- }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
216
- return this;
217
- }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
218
- void 0 === i && (i = Promise);
219
- var a = new AsyncIterator(wrap(t, r, n, o), i);
220
- return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
221
- return t.done ? t.value : a.next();
222
- });
223
- }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
224
- return this;
225
- }), define(g, "toString", function () {
226
- return "[object Generator]";
227
- }), e.keys = function (t) {
228
- var e = Object(t),
229
- r = [];
230
- for (var n in e) r.push(n);
231
- return r.reverse(), function next() {
232
- for (; r.length;) {
233
- var t = r.pop();
234
- if (t in e) return next.value = t, next.done = !1, next;
235
- }
236
- return next.done = !0, next;
237
- };
238
- }, e.values = values, Context.prototype = {
239
- constructor: Context,
240
- reset: function (e) {
241
- if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
242
- },
243
- stop: function () {
244
- this.done = !0;
245
- var t = this.tryEntries[0].completion;
246
- if ("throw" === t.type) throw t.arg;
247
- return this.rval;
248
- },
249
- dispatchException: function (e) {
250
- if (this.done) throw e;
251
- var r = this;
252
- function handle(n, o) {
253
- return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
254
- }
255
- for (var o = this.tryEntries.length - 1; o >= 0; --o) {
256
- var i = this.tryEntries[o],
257
- a = i.completion;
258
- if ("root" === i.tryLoc) return handle("end");
259
- if (i.tryLoc <= this.prev) {
260
- var c = n.call(i, "catchLoc"),
261
- u = n.call(i, "finallyLoc");
262
- if (c && u) {
263
- if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
264
- if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
265
- } else if (c) {
266
- if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
267
- } else {
268
- if (!u) throw new Error("try statement without catch or finally");
269
- if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
270
- }
271
- }
272
- }
273
- },
274
- abrupt: function (t, e) {
275
- for (var r = this.tryEntries.length - 1; r >= 0; --r) {
276
- var o = this.tryEntries[r];
277
- if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
278
- var i = o;
279
- break;
280
- }
281
- }
282
- i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
283
- var a = i ? i.completion : {};
284
- return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
285
- },
286
- complete: function (t, e) {
287
- if ("throw" === t.type) throw t.arg;
288
- return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
289
- },
290
- finish: function (t) {
291
- for (var e = this.tryEntries.length - 1; e >= 0; --e) {
292
- var r = this.tryEntries[e];
293
- if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
294
- }
295
- },
296
- catch: function (t) {
297
- for (var e = this.tryEntries.length - 1; e >= 0; --e) {
298
- var r = this.tryEntries[e];
299
- if (r.tryLoc === t) {
300
- var n = r.completion;
301
- if ("throw" === n.type) {
302
- var o = n.arg;
303
- resetTryEntry(r);
304
- }
305
- return o;
306
- }
307
- }
308
- throw new Error("illegal catch attempt");
309
- },
310
- delegateYield: function (e, r, n) {
311
- return this.delegate = {
312
- iterator: values(e),
313
- resultName: r,
314
- nextLoc: n
315
- }, "next" === this.method && (this.arg = t), y;
316
- }
317
- }, e;
318
- }
319
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
320
- try {
321
- var info = gen[key](arg);
322
- var value = info.value;
323
- } catch (error) {
324
- reject(error);
325
- return;
326
- }
327
- if (info.done) {
328
- resolve(value);
329
- } else {
330
- Promise.resolve(value).then(_next, _throw);
331
- }
332
- }
333
- function _asyncToGenerator(fn) {
334
- return function () {
335
- var self = this,
336
- args = arguments;
337
- return new Promise(function (resolve, reject) {
338
- var gen = fn.apply(self, args);
339
- function _next(value) {
340
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
341
- }
342
- function _throw(err) {
343
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
344
- }
345
- _next(undefined);
346
- });
347
- };
348
- }
349
- function _extends() {
350
- _extends = Object.assign ? Object.assign.bind() : function (target) {
351
- for (var i = 1; i < arguments.length; i++) {
352
- var source = arguments[i];
353
- for (var key in source) {
354
- if (Object.prototype.hasOwnProperty.call(source, key)) {
355
- target[key] = source[key];
356
- }
357
- }
358
- }
359
- return target;
360
- };
361
- return _extends.apply(this, arguments);
362
- }
363
- function _objectWithoutPropertiesLoose(source, excluded) {
364
- if (source == null) return {};
365
- var target = {};
366
- var sourceKeys = Object.keys(source);
367
- var key, i;
368
- for (i = 0; i < sourceKeys.length; i++) {
369
- key = sourceKeys[i];
370
- if (excluded.indexOf(key) >= 0) continue;
371
- target[key] = source[key];
372
- }
373
- return target;
374
- }
375
- function _taggedTemplateLiteralLoose(strings, raw) {
376
- if (!raw) {
377
- raw = strings.slice(0);
378
- }
379
- strings.raw = raw;
380
- return strings;
381
- }
382
-
383
- var STRAPI_URI = process.env.NEXT_PUBLIC_STRAPI_URI || 'http://127.0.0.1:1337';
384
-
385
- var strapiMediaUrl = function strapiMediaUrl(media, preferredSize) {
386
- if (preferredSize === void 0) {
387
- preferredSize = 'native';
388
- }
389
- var _ref = media.data.attributes || {},
390
- url = _ref.url;
391
- if (preferredSize !== 'native' && media.data.attributes.ext !== '.svg') {
392
- var _media$data$attribute;
393
- url = ((_media$data$attribute = media.data.attributes.formats[preferredSize]) == null ? void 0 : _media$data$attribute.url) || url;
394
- }
395
- if (url && (url.indexOf('http://') === 0 || url.indexOf('https://') === 0)) {
396
- return url;
397
- }
398
- return "" + ((STRAPI_URI.includes('127.0.0.1') || STRAPI_URI.includes('localhost')) && !process.env.STORYBOOK ? STRAPI_URI : '') + url;
399
- };
400
-
401
- var ZoomableImage = function ZoomableImage(_ref) {
402
- var image = _ref.image,
403
- _ref$zoom = _ref.zoom,
404
- zoom = _ref$zoom === void 0 ? 200 : _ref$zoom;
405
- // define and set default values to the states of the component
406
- var _useState = useState(false),
407
- isZoomed = _useState[0],
408
- setIsZoomed = _useState[1];
409
- var _useState2 = useState('50% 50%'),
410
- backgroundPos = _useState2[0],
411
- setBackgroundPos = _useState2[1];
412
- var imageSrc = strapiMediaUrl(image.img, 'xLarge');
413
- var zoomInPosition = function zoomInPosition(e) {
414
- // This will handle the calculations of the area where the image needs to zoom in depending on the user interaction
415
- var zoomer = e.currentTarget.getBoundingClientRect();
416
- var x = (e.clientX - zoomer.x) / zoomer.width * 100;
417
- var y = (e.clientY - zoomer.y) / zoomer.height * 100;
418
- setBackgroundPos(x + "% " + y + "%");
419
- };
420
- var toggleZoomImage = function toggleZoomImage(e) {
421
- if (isZoomed) {
422
- setIsZoomed(false);
423
- } else {
424
- // Zoom in and set the background position correctly
425
- setIsZoomed(true);
426
- zoomInPosition(e);
427
- }
428
- };
429
- var handleClick = function handleClick(e) {
430
- toggleZoomImage(e);
431
- };
432
- var handleMove = function handleMove(e) {
433
- if (isZoomed) {
434
- zoomInPosition(e);
435
- }
436
- };
437
- return React.createElement(React.Fragment, null, React.createElement(Head, null, React.createElement("link", {
438
- rel: "prefetch",
439
- as: "image",
440
- href: imageSrc
441
- })), React.createElement(Box, {
442
- position: "relative",
443
- display: "inline-block",
444
- width: "full",
445
- height: "full",
446
- overflow: "hidden",
447
- flexShrink: "0",
448
- scrollSnapAlign: "center",
449
- scrollSnapStop: "always",
450
- draggable: "false",
451
- cursor: isZoomed ? 'zoom-out' : 'zoom-in',
452
- backgroundImage: isZoomed ? "url( " + imageSrc + " )" : 'none',
453
- backgroundSize: zoom + "%",
454
- backgroundPosition: backgroundPos,
455
- onClick: function onClick(e) {
456
- return handleClick(e);
457
- },
458
- onMouseMove: function onMouseMove(e) {
459
- return handleMove(e);
460
- }
461
- }, React.createElement(Image, {
462
- src: imageSrc,
463
- alt: image.alt,
464
- fill: true,
465
- style: {
466
- visibility: isZoomed ? 'hidden' : 'visible',
467
- objectFit: 'contain'
468
- }
469
- })));
470
- };
471
-
472
- var FullScreenImage = function FullScreenImage(_ref) {
473
- var images = _ref.images,
474
- isOpen = _ref.isOpen,
475
- onClose = _ref.onClose,
476
- openIndex = _ref.openIndex;
477
- var _useState = useState(0),
478
- imageIndex = _useState[0],
479
- setImageIndex = _useState[1];
480
- var containerRef = useRef(null);
481
- useLockBodyScroll(isOpen);
482
- var canMoveRight = imageIndex < images.length - 1;
483
- var canMoveLeft = imageIndex !== 0;
484
- var onRight = function onRight() {
485
- return setImageIndex(function (p) {
486
- return canMoveRight ? p + 1 : p;
487
- });
488
- };
489
- var onLeft = function onLeft() {
490
- return setImageIndex(function (p) {
491
- return canMoveLeft ? p - 1 : p;
492
- });
493
- };
494
- useKey('ArrowRight', onRight, {}, [onRight]);
495
- useKey('ArrowLeft', onLeft, {}, [onLeft]);
496
- useEffect(function () {
497
- if (openIndex !== undefined) {
498
- setImageIndex(openIndex);
499
- }
500
- }, [openIndex]);
501
- useEffect(function () {
502
- if (containerRef.current) {
503
- containerRef.current.scrollTo({
504
- left: imageIndex * containerRef.current.clientWidth,
505
- behavior: 'smooth'
506
- });
507
- }
508
- }, [imageIndex, containerRef]);
509
- var onCloseLocal = function onCloseLocal() {
510
- setImageIndex(0);
511
- onClose();
512
- };
513
- return React.createElement(BoemlyModal, {
514
- onClose: onCloseLocal,
515
- isOpen: isOpen,
516
- title: "",
517
- trigger: "",
518
- size: "full",
519
- content: React.createElement(Flex, {
520
- position: "absolute",
521
- insetY: "16",
522
- insetX: "0",
523
- alignItems: "center",
524
- justifyContent: "center"
525
- }, React.createElement(Flex, {
526
- ref: containerRef,
527
- flexGrow: "1",
528
- flexBasis: "100%",
529
- flexShrink: "1",
530
- gap: "4",
531
- marginX: "24",
532
- scrollSnapType: "x mandatory",
533
- overflow: "hidden",
534
- position: "relative",
535
- height: "full",
536
- width: "full"
537
- }, images.map(function (image) {
538
- return React.createElement(ZoomableImage, {
539
- key: image.id,
540
- image: image
541
- });
542
- })), React.createElement(Flex, {
543
- position: "absolute",
544
- inset: "6",
545
- justifyContent: "space-between",
546
- alignItems: "center",
547
- pointerEvents: "none"
548
- }, React.createElement(IconButton, {
549
- visibility: canMoveLeft ? 'visible' : 'hidden',
550
- onClick: onLeft,
551
- icon: React.createElement(CaretLeft, {
552
- size: 16
553
- }),
554
- "aria-label": "Previous picture",
555
- variant: "outline",
556
- pointerEvents: "all",
557
- mr: "6"
558
- }), React.createElement(IconButton, {
559
- visibility: canMoveRight ? 'visible' : 'hidden',
560
- onClick: onRight,
561
- icon: React.createElement(CaretRight, {
562
- size: 16
563
- }),
564
- "aria-label": "Next picture",
565
- variant: "outline",
566
- pointerEvents: "all",
567
- ml: "4"
568
- })))
569
- });
570
- };
571
-
572
- var BREAKPOINT_MD = '768px';
573
- var BREAKPOINT_LG = '960px';
574
- var BREAKPOINT_MD_QUERY = "(max-width: " + BREAKPOINT_MD + ")";
575
- var BREAKPOINT_LG_QUERY = "(max-width: " + BREAKPOINT_LG + ")";
576
-
577
- var FullWidthImage = function FullWidthImage(_ref) {
578
- var slice = _ref.slice;
579
- var _useState = useState(false),
580
- isOpen = _useState[0],
581
- setIsOpen = _useState[1];
582
- var _useMediaQuery = useMediaQuery(BREAKPOINT_MD_QUERY),
583
- isMobile = _useMediaQuery[0];
584
- return React.createElement(DefaultSectionContainer, {
585
- title: slice.title
586
- }, React.createElement(Wrapper, null, React.createElement(DefaultSectionHeader, {
587
- isHero: true,
588
- tagline: slice.tagline,
589
- title: slice.title,
590
- text: slice.text,
591
- taglineProps: {
592
- textAlign: 'center',
593
- mt: ['32', null, null, '56']
594
- },
595
- titleProps: {
596
- textAlign: 'center',
597
- maxW: '6xl',
598
- marginX: 'auto'
599
- },
600
- textProps: {
601
- textAlign: 'center',
602
- maxW: '3xl',
603
- marginX: 'auto'
604
- }
605
- }), React.createElement(Box, {
606
- position: "relative",
607
- mt: "20",
608
- height: ['3xs', null, 'xl']
609
- }, React.createElement(Image, {
610
- src: strapiMediaUrl(slice.image.img, 'xLarge'),
611
- alt: slice.image.alt,
612
- fill: true,
613
- style: {
614
- objectFit: slice.image.objectFit || 'cover',
615
- cursor: isMobile ? 'unset' : 'pointer',
616
- borderRadius: 'var(--boemly-radii-2xl)'
617
- },
618
- onClick: function onClick() {
619
- return !isMobile && setIsOpen(true);
620
- }
621
- }), React.createElement(FullScreenImage, {
622
- images: [slice.image],
623
- isOpen: isOpen,
624
- onClose: function onClose() {
625
- return setIsOpen(false);
626
- }
627
- }))));
628
- };
629
-
630
- var strapiLinkUrl = function strapiLinkUrl(strapiLink) {
631
- var _strapiLink, _strapiLink2;
632
- if (strapiLink === void 0) {
633
- strapiLink = undefined;
634
- }
635
- if ((_strapiLink = strapiLink) != null && (_strapiLink = _strapiLink.page) != null && _strapiLink.data) {
636
- return "/" + strapiLink.page.data.attributes.slug;
637
- }
638
- return ((_strapiLink2 = strapiLink) == null ? void 0 : _strapiLink2.url) || '/';
639
- };
640
-
641
- var openHubSpotChat = function openHubSpotChat() {
642
- var w = window;
643
- if (w.HubSpotConversations) {
644
- w.HubSpotConversations.widget.open();
645
- } else {
646
- w.hsConversationsOnReady = [function () {
647
- w.HubSpotConversations.widget.open();
648
- }];
649
- }
650
- };
651
-
652
- var _excluded$1 = ["link"];
653
- var StrapiLinkButton = function StrapiLinkButton(_ref) {
654
- var link = _ref.link,
655
- buttonProps = _objectWithoutPropertiesLoose(_ref, _excluded$1);
656
- var adBlockDetected = useDetectAdBlock();
657
- if (link.intercomLauncher) {
658
- if (adBlockDetected) {
659
- return React.createElement(Button, _extends({}, buttonProps, {
660
- as: Link,
661
- href: "mailto:hello@tree.ly"
662
- }), link.text);
663
- }
664
- return React.createElement(Button, _extends({}, buttonProps, {
665
- onClick: openHubSpotChat
666
- }), link.text);
667
- }
668
- return React.createElement(Button, _extends({}, buttonProps, {
669
- as: Link,
670
- href: strapiLinkUrl(link)
671
- }), link.text);
672
- };
673
-
674
- var Hero = function Hero(_ref) {
675
- var slice = _ref.slice;
676
- return React.createElement(Box, {
677
- position: "relative",
678
- width: "full",
679
- height: "var(--default-hero-height)",
680
- minHeight: "2xl",
681
- backgroundColor: "gray.900",
682
- overflowX: "hidden"
683
- }, slice.image && React.createElement(React.Fragment, null, React.createElement(Image, {
684
- src: strapiMediaUrl(slice.image.img, 'xLarge'),
685
- alt: slice.image.alt,
686
- fill: true,
687
- style: {
688
- objectFit: slice.image.objectFit || 'cover'
689
- }
690
- }), React.createElement(Gradient, null)), slice.shape && React.createElement(Box, {
691
- position: "absolute",
692
- bottom: "0",
693
- borderTopRightRadius: "full",
694
- width: ['3xs', null, '2xs', null, 'sm'],
695
- height: ['3xs', null, '2xs', null, 'sm'],
696
- right: ['-16', null, '24']
697
- }, React.createElement(Image, {
698
- src: strapiMediaUrl(slice.shape.img, 'medium'),
699
- alt: slice.shape.alt,
700
- fill: true,
701
- style: {
702
- objectFit: slice.shape.objectFit || 'cover',
703
- borderTopRightRadius: 'var(--boemly-radii-full)'
704
- }
705
- })), React.createElement(Box, {
706
- position: "absolute",
707
- left: "0",
708
- top: "56%",
709
- width: "full",
710
- textAlign: slice.textAlign,
711
- transform: "translateY(-50%)"
712
- }, React.createElement(Wrapper, null, React.createElement(React.Fragment, null, React.createElement(DefaultSectionHeader, {
713
- isHero: true,
714
- tagline: slice.tagline,
715
- title: slice.title,
716
- text: slice.subTitle,
717
- taglineProps: {
718
- color: 'white'
719
- },
720
- titleProps: {
721
- color: 'white',
722
- maxW: slice.textAlign === 'center' ? '4xl' : '3xl',
723
- mx: slice.textAlign === 'center' ? 'auto' : 'unset',
724
- textAlign: slice.textAlign
725
- },
726
- textProps: {
727
- maxW: '2xl',
728
- mx: slice.textAlign === 'center' ? 'auto' : 'unset',
729
- textAlign: slice.textAlign,
730
- color: 'white'
731
- }
732
- }), React.createElement(Flex, {
733
- gap: "8",
734
- justifyContent: slice.textAlign === 'center' ? 'center' : 'start'
735
- }, slice.button && React.createElement(StrapiLinkButton, {
736
- key: slice.button.id,
737
- mt: "10",
738
- size: "xl",
739
- link: slice.button
740
- }), slice.additionalButtons.map(function (button) {
741
- return React.createElement(StrapiLinkButton, {
742
- key: button.button.id,
743
- mt: "10",
744
- size: "xl",
745
- variant: button.variant,
746
- link: button.button
747
- });
748
- }))))));
749
- };
750
-
751
- var IconGrid = function IconGrid(_ref) {
752
- var slice = _ref.slice;
753
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, slice.title ? React.createElement(React.Fragment, null, React.createElement(Flex, {
754
- alignItems: "center",
755
- flexDirection: "column"
756
- }, React.createElement(DefaultSectionHeader, {
757
- tagline: slice.tagline,
758
- title: slice.title,
759
- text: slice.subTitle,
760
- taglineProps: {
761
- maxW: '2xl',
762
- textAlign: 'center'
763
- },
764
- titleProps: {
765
- maxW: '3xl',
766
- textAlign: 'center'
767
- },
768
- textProps: {
769
- maxW: '3xl',
770
- textAlign: 'center'
771
- }
772
- })), React.createElement(Spacer, {
773
- h: "20"
774
- })) : React.createElement(React.Fragment, null), React.createElement(SimpleGrid, {
775
- columns: [1, null, null, 2],
776
- gap: "32",
777
- rowGap: ['16', null, null, '28']
778
- }, slice.iconsWithTextAndButton.map(function (iconWithTextAndButton) {
779
- return React.createElement(Box, {
780
- key: iconWithTextAndButton.id
781
- }, React.createElement(Box, {
782
- margin: "0 auto",
783
- backgroundColor: "primary.50",
784
- borderRadius: "full",
785
- display: "flex",
786
- alignItems: "center",
787
- justifyContent: "space-around",
788
- width: "6.5rem",
789
- height: "6.5rem"
790
- }, React.createElement(Box, {
791
- position: "absolute",
792
- width: "12",
793
- height: "12"
794
- }, React.createElement(Image, {
795
- src: strapiMediaUrl(iconWithTextAndButton.icon.img, 'xSmall'),
796
- alt: iconWithTextAndButton.icon.alt,
797
- fill: true,
798
- style: {
799
- objectFit: iconWithTextAndButton.icon.objectFit || 'contain'
800
- }
801
- }))), React.createElement(Heading, {
802
- size: "xl",
803
- textAlign: "center",
804
- mb: "4",
805
- mt: "8"
806
- }, iconWithTextAndButton.title), React.createElement(Text, {
807
- size: "mdRegularNormal",
808
- textAlign: "center"
809
- }, iconWithTextAndButton.text), iconWithTextAndButton.button && React.createElement(Box, {
810
- textAlign: "center"
811
- }, React.createElement(StrapiLinkButton, {
812
- key: iconWithTextAndButton.button.id,
813
- mt: "8",
814
- size: "md",
815
- variant: "outline",
816
- link: iconWithTextAndButton.button
817
- })));
818
- }))));
819
- };
820
-
821
- var LinkedInIcon = function LinkedInIcon() {
822
- return React.createElement("svg", {
823
- width: "14",
824
- height: "14",
825
- viewBox: "0 0 14 14",
826
- fill: "none",
827
- xmlns: "http://www.w3.org/2000/svg"
828
- }, React.createElement("g", {
829
- clipPath: "url(#clip0_112_606)"
830
- }, React.createElement("path", {
831
- 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",
832
- fill: "#0A66C2"
833
- })), React.createElement("defs", null, React.createElement("clipPath", {
834
- id: "clip0_112_606"
835
- }, React.createElement("rect", {
836
- width: "14",
837
- height: "14",
838
- fill: "white"
839
- }))));
840
- };
841
-
842
- var _excluded = ["link"];
843
- var StrapiLinkButtonWithIcon = function StrapiLinkButtonWithIcon(_ref) {
844
- var link = _ref.link,
845
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
846
- var getLinkIcon = function getLinkIcon(destination) {
847
- switch (destination) {
848
- case 'linkedin':
849
- {
850
- return React.createElement(LinkedInIcon, null);
851
- }
852
- case 'web':
853
- {
854
- return React.createElement(Globe, null);
855
- }
856
- default:
857
- {
858
- return React.createElement(CaretRight, null);
859
- }
860
- }
861
- };
862
- return React.createElement(StrapiLinkButton, _extends({}, props, {
863
- link: link.link,
864
- rightIcon: getLinkIcon(link.destination)
865
- }));
866
- };
867
-
868
- var ImageGrid = function ImageGrid(_ref) {
869
- var slice = _ref.slice;
870
- var _useToken = useToken('colors', ['primary.50']),
871
- primary50 = _useToken[0];
872
- return React.createElement(DefaultSectionContainer, {
873
- backgroundColor: primary50,
874
- title: slice.title
875
- }, React.createElement(Wrapper, null, React.createElement(DefaultSectionHeader, {
876
- tagline: slice.tagline,
877
- title: slice.title,
878
- text: slice.text,
879
- taglineProps: {
880
- textAlign: 'center'
881
- },
882
- titleProps: {
883
- textAlign: 'center',
884
- maxW: '6xl',
885
- marginX: 'auto'
886
- },
887
- textProps: {
888
- textAlign: 'center',
889
- maxW: '2xl',
890
- marginX: 'auto'
891
- }
892
- }), React.createElement(SimpleGrid, {
893
- mt: "24",
894
- columns: 3,
895
- gap: "24",
896
- rowGap: "16",
897
- minChildWidth: "16rem"
898
- }, slice.images.map(function (_ref2) {
899
- var id = _ref2.id,
900
- title = _ref2.title,
901
- subTitle = _ref2.subTitle,
902
- image = _ref2.image,
903
- links = _ref2.links;
904
- return React.createElement(Box, {
905
- key: id
906
- }, React.createElement(Box, {
907
- position: "relative",
908
- height: "sm",
909
- borderRadius: "xl"
910
- }, React.createElement(Image, {
911
- src: strapiMediaUrl(image.img, 'medium'),
912
- alt: image.alt,
913
- fill: true,
914
- style: {
915
- objectFit: image.objectFit || 'cover',
916
- borderRadius: 'var(--boemly-radii-xl)'
917
- }
918
- })), React.createElement(Heading, {
919
- size: "xl",
920
- mt: "4"
921
- }, title), subTitle && React.createElement(Text, {
922
- size: "mdRegularNormal"
923
- }, subTitle), links && links.length > 0 && React.createElement(Flex, {
924
- mt: "3",
925
- flexDir: "row",
926
- gap: "2",
927
- flexWrap: "wrap"
928
- }, links.map(function (link) {
929
- return React.createElement(StrapiLinkButtonWithIcon, {
930
- key: link.id,
931
- link: link,
932
- size: "sm",
933
- variant: "outline"
934
- });
935
- })));
936
- }))));
937
- };
938
-
939
- process.env.NEXT_PUBLIC_API_URI || 'http://localhost:4001';
940
- var FPM_API_URI = process.env.NEXT_PUBLIC_FPM_API_URI || 'https://api.fpm.t-staging.com';
941
- var CDN_URI = 'https://cdn.tree.ly';
942
-
943
- var ImageTextSequence = function ImageTextSequence(_ref) {
944
- var slice = _ref.slice;
945
- var _useMediaQuery = useMediaQuery(BREAKPOINT_LG_QUERY),
946
- oneColumnGrid = _useMediaQuery[0];
947
- var _useToken = useToken('colors', ['primary.50']),
948
- primary50 = _useToken[0];
949
- var _useToken2 = useToken('colors', ['gray.700']),
950
- gray700 = _useToken2[0];
951
- return React.createElement(DefaultSectionContainer, {
952
- backgroundColor: primary50,
953
- title: slice.title
954
- }, slice.background ? React.createElement(React.Fragment, null, React.createElement(Box, {
955
- position: "absolute",
956
- top: "0",
957
- right: "24",
958
- display: ['none', null, null, 'unset']
959
- }, React.createElement(Image, {
960
- src: CDN_URI + "/assets/v3/strapi-slices/desktop-map-border.svg",
961
- alt: "Map",
962
- width: "786",
963
- height: "897"
964
- })), React.createElement(Box, {
965
- position: "absolute",
966
- top: "64",
967
- right: "-14",
968
- display: ['unset', null, null, 'none']
969
- }, React.createElement(Image, {
970
- src: CDN_URI + "/assets/v3/strapi-slices/mobile-map-border.svg",
971
- alt: "Map",
972
- width: "227",
973
- height: "452"
974
- }))) : React.createElement(React.Fragment, null), React.createElement(Wrapper, null, React.createElement(DefaultSectionHeader, {
975
- tagline: slice.tagline,
976
- title: slice.title,
977
- text: slice.text,
978
- taglineProps: {
979
- textAlign: ['left', null, null, null, 'center']
980
- },
981
- titleProps: {
982
- maxW: '6xl',
983
- marginX: ['0', null, null, null, 'auto'],
984
- textAlign: ['left', null, null, null, 'center']
985
- },
986
- textProps: {
987
- maxW: '2xl',
988
- marginX: ['0', null, null, null, 'auto'],
989
- textAlign: ['left', null, null, null, 'center'],
990
- color: 'black'
991
- }
992
- }), React.createElement(SimpleGrid, {
993
- gap: "16",
994
- mt: ['28', null, null, null, '40'],
995
- columns: [1, null, null, null, 2]
996
- }, slice.imageTextRows.map(function (_ref2, index) {
997
- var id = _ref2.id,
998
- title = _ref2.title,
999
- text = _ref2.text,
1000
- button = _ref2.button,
1001
- image = _ref2.image;
1002
- var imageBox = React.createElement(Box, null, React.createElement(Box, {
1003
- position: "relative",
1004
- width: "full",
1005
- minHeight: ['2xs', null, null, 'sm']
1006
- }, React.createElement(Image, {
1007
- src: strapiMediaUrl(image.img, 'large'),
1008
- alt: image.alt,
1009
- fill: true,
1010
- style: {
1011
- objectFit: image.objectFit || 'contain'
1012
- }
1013
- })));
1014
- return React.createElement(Fragment, {
1015
- key: id
1016
- }, (oneColumnGrid || index % 2 !== 0) && imageBox, React.createElement(Box, {
1017
- display: "flex",
1018
- alignItems: "flex-start",
1019
- flexDirection: "column",
1020
- justifyContent: "center"
1021
- }, React.createElement(Heading, {
1022
- as: "h2",
1023
- size: "xl",
1024
- mb: "4"
1025
- }, title), React.createElement(Text, {
1026
- size: "mdRegularNormal"
1027
- }, text), button && React.createElement(StrapiLinkButton, {
1028
- mt: "5",
1029
- link: button,
1030
- size: "sm",
1031
- variant: "outline",
1032
- rightIcon: React.createElement(CaretRight, {
1033
- size: "10",
1034
- color: gray700
1035
- })
1036
- })), !oneColumnGrid && index % 2 === 0 && imageBox);
1037
- }))));
1038
- };
1039
-
1040
- var LeftTextRightCard = function LeftTextRightCard(_ref) {
1041
- var slice = _ref.slice;
1042
- var _useRouter = useRouter(),
1043
- push = _useRouter.push;
1044
- return React.createElement(DefaultSectionContainer, {
1045
- title: slice.title
1046
- }, React.createElement(Wrapper, null, React.createElement(Grid, {
1047
- templateColumns: ['repeat(8, 1fr)', null, null, null, 'repeat(12, 1fr)'],
1048
- templateRows: ['repeat(2, 1fr)', null, null, null, 'repeat(1, 1fr)'],
1049
- rowGap: "12"
1050
- }, React.createElement(GridItem, {
1051
- colSpan: 8,
1052
- rowSpan: 1,
1053
- pr: ['0', null, null, null, '28']
1054
- }, React.createElement(DefaultSectionHeader, {
1055
- tagline: slice.tagline,
1056
- title: slice.title,
1057
- text: slice.text
1058
- }), slice.checkMarkLabels && React.createElement(React.Fragment, null, React.createElement(Spacer, {
1059
- height: "10"
1060
- }), React.createElement(BoemlyList, {
1061
- listItems: slice.checkMarkLabels
1062
- }), React.createElement(Spacer, {
1063
- height: "10"
1064
- })), slice.button && React.createElement(StrapiLinkButton, {
1065
- link: slice.button,
1066
- size: "md",
1067
- colorScheme: "white",
1068
- variant: "outline",
1069
- rightIcon: React.createElement(ArrowRight, null)
1070
- })), React.createElement(GridItem, {
1071
- colSpan: [8, null, null, null, 4],
1072
- rowSpan: 1,
1073
- position: "relative"
1074
- }, slice.card && React.createElement(PortfolioCard, {
1075
- title: slice.card.title,
1076
- button: slice.card.button && {
1077
- text: slice.card.button.text,
1078
- onClick: function onClick() {
1079
- var _slice$card;
1080
- return push(strapiLinkUrl((_slice$card = slice.card) == null ? void 0 : _slice$card.button));
1081
- }
1082
- },
1083
- facts: slice.card.facts,
1084
- image: React.createElement(Image, {
1085
- src: strapiMediaUrl(slice.card.image.img, 'medium'),
1086
- alt: slice.card.image.alt,
1087
- fill: true,
1088
- style: {
1089
- objectFit: slice.card.image.objectFit || 'cover'
1090
- }
1091
- }),
1092
- portfolioNumber: slice.card.portfolioNumber
1093
- })))));
1094
- };
1095
-
1096
- var LogoGridWithText = function LogoGridWithText(_ref) {
1097
- var slice = _ref.slice;
1098
- var _useToken = useToken('colors', ['primary.50']),
1099
- primary50 = _useToken[0];
1100
- return React.createElement(DefaultSectionContainer, {
1101
- backgroundColor: primary50,
1102
- title: slice.title
1103
- }, React.createElement(Wrapper, null, React.createElement(SimpleGrid, {
1104
- columns: 2,
1105
- gap: "28",
1106
- minChildWidth: "16rem"
1107
- }, React.createElement(Box, {
1108
- display: "flex",
1109
- flexDirection: "column",
1110
- justifyContent: "center",
1111
- alignItems: "flex-start"
1112
- }, React.createElement(Heading, {
1113
- as: "h2",
1114
- size: "3xl",
1115
- mb: "4"
1116
- }, slice.title), React.createElement(RichText, {
1117
- content: slice.text
1118
- }), slice.button && React.createElement(StrapiLinkButton, {
1119
- link: slice.button,
1120
- size: "md",
1121
- colorScheme: "white",
1122
- variant: "outline",
1123
- mt: "6",
1124
- rightIcon: React.createElement(ArrowRight, null)
1125
- })), React.createElement(Flex, {
1126
- flexDir: "row",
1127
- flexWrap: "wrap",
1128
- gap: ['12', null, null, '28']
1129
- }, slice.logos.map(function (logo) {
1130
- return React.createElement(Flex, {
1131
- key: logo.id,
1132
- justifyContent: "center",
1133
- alignItems: "center",
1134
- flexGrow: 1,
1135
- flexShrink: 0,
1136
- flexBasis: slice.logos.length > 2 ? '34%' : '90%'
1137
- }, React.createElement(Box, {
1138
- position: "relative",
1139
- height: "20",
1140
- width: "100%"
1141
- }, logo.link ? React.createElement("a", {
1142
- href: strapiLinkUrl(logo.link)
1143
- }, React.createElement(Image, {
1144
- src: strapiMediaUrl(logo.img, 'small'),
1145
- alt: logo.alt,
1146
- fill: true,
1147
- style: {
1148
- objectFit: logo.objectFit || 'contain'
1149
- }
1150
- })) : React.createElement(Image, {
1151
- src: strapiMediaUrl(logo.img, 'small'),
1152
- alt: logo.alt,
1153
- fill: true,
1154
- style: {
1155
- objectFit: logo.objectFit || 'contain'
1156
- }
1157
- })));
1158
- })))));
1159
- };
1160
-
1161
- var _templateObject$7, _templateObject2$4, _templateObject3$2, _templateObject4$1, _templateObject5$1;
1162
- var MapHeroContainer = /*#__PURE__*/styled(Box)(_templateObject$7 || (_templateObject$7 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: relative;\n width: 100vw;\n height: var(--default-hero-height);\n min-height: var(--boemly-sizes-3xl);\n background-color: var(--boemly-colors-primary-50);\n overflow: hidden;\n z-index: var(--boemly-zIndices-base);\n\n @media screen and (max-width: ", ") {\n height: auto;\n }\n"])), BREAKPOINT_LG);
1163
- var MapHeroTextContainer = /*#__PURE__*/styled(Box)(_templateObject2$4 || (_templateObject2$4 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: absolute;\n width: 100vw;\n top: 56%;\n left: 0;\n transform: translateY(-50%);\n z-index: var(--boemly-zIndices-aboveBase);\n\n @media screen and (max-width: ", ") {\n position: relative;\n transform: unset;\n\n padding-top: var(--boemly-space-32);\n }\n"])), BREAKPOINT_LG);
1164
- var ShapeContainer = /*#__PURE__*/styled(Box)(_templateObject3$2 || (_templateObject3$2 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: absolute;\n bottom: calc(var(--boemly-space-8) * -1);\n left: 0;\n\n width: var(--boemly-sizes-sm);\n height: var(--boemly-sizes-sm);\n\n border-top-right-radius: var(--boemly-radii-full);\n\n & span,\n div {\n border-top-right-radius: var(--boemly-radii-full);\n }\n\n @media screen and (max-width: ", ") {\n display: none;\n }\n"])), BREAKPOINT_LG);
1165
- var MapContainer = /*#__PURE__*/styled(Box)(_templateObject4$1 || (_templateObject4$1 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: absolute;\n\n width: 50%;\n height: 100%;\n\n right: 0;\n top: 0;\n\n & img {\n object-fit: cover !important;\n }\n\n @media screen and (max-width: ", ") {\n width: 100%;\n height: var(--boemly-sizes-4xl);\n position: relative;\n margin-top: calc(var(--boemly-space-72) * -1);\n background-color: var(--boemly-colors-white);\n\n & img {\n object-fit: contain !important;\n }\n }\n"])), BREAKPOINT_LG);
1166
- var MapGradient = /*#__PURE__*/styled(Box)(_templateObject5$1 || (_templateObject5$1 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n\n background: linear-gradient(\n 90deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 10%,\n rgba(243, 246, 245, 0.6) 28%,\n rgba(243, 246, 245, 0) 40%,\n rgba(243, 246, 245, 0) 100%\n );\n\n @media screen and (max-width: ", ") {\n background: linear-gradient(\n 180deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 36%,\n rgba(243, 246, 245, 0.12) 46%,\n rgba(243, 246, 245, 0) 100%\n );\n }\n"])), BREAKPOINT_LG);
1167
-
1168
- var MapHero = function MapHero(_ref) {
1169
- var slice = _ref.slice;
1170
- var _useMediaQuery = useMediaQuery(BREAKPOINT_LG_QUERY),
1171
- belowBreakpoint = _useMediaQuery[0];
1172
- return React.createElement(MapHeroContainer, null, slice.shape && React.createElement(ShapeContainer, null, React.createElement(Image, {
1173
- src: strapiMediaUrl(slice.shape.img, 'medium'),
1174
- alt: slice.shape.alt,
1175
- fill: true,
1176
- style: {
1177
- objectFit: slice.shape.objectFit || 'cover'
1178
- }
1179
- })), React.createElement(MapHeroTextContainer, null, React.createElement(Wrapper, null, React.createElement(React.Fragment, null, React.createElement(DefaultSectionHeader, {
1180
- isHero: true,
1181
- tagline: slice.tagline,
1182
- title: slice.title,
1183
- text: slice.subTitle,
1184
- titleProps: {
1185
- maxW: ['100%', null, null, null, '60%']
1186
- },
1187
- textProps: {
1188
- maxW: ['100%', null, null, null, '55%']
1189
- }
1190
- }), slice.buttons && slice.buttons.length > 0 && React.createElement(Flex, {
1191
- mt: "10",
1192
- flexDir: "row",
1193
- gap: "5"
1194
- }, React.createElement(StrapiLinkButton, {
1195
- link: slice.buttons[0],
1196
- size: "xl"
1197
- }), slice.buttons.length === 2 && React.createElement(StrapiLinkButton, {
1198
- link: slice.buttons[1],
1199
- variant: "outline",
1200
- size: "xl"
1201
- }))))), React.createElement(MapContainer, null, belowBreakpoint ? React.createElement(Image, {
1202
- src: strapiMediaUrl(slice.mobileMap.img, 'xLarge'),
1203
- alt: slice.mobileMap.alt,
1204
- fill: true,
1205
- style: {
1206
- objectFit: slice.mobileMap.objectFit || 'contain'
1207
- }
1208
- }) : React.createElement(Image, {
1209
- src: strapiMediaUrl(slice.map.img, 'xLarge'),
1210
- alt: slice.map.alt,
1211
- fill: true,
1212
- style: {
1213
- objectFit: slice.map.objectFit || 'cover'
1214
- }
1215
- }), React.createElement(MapGradient, null)));
1216
- };
1217
-
1218
- var convertToKebabCase = function convertToKebabCase(str) {
1219
- var matches = str && str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g);
1220
- return matches ? matches.map(function (x) {
1221
- return x.toLowerCase();
1222
- }).join('-') : '';
1223
- };
1224
-
1225
- var VARIANTS$4 = {
1226
- gray: {
1227
- backgroundColor: 'primary.50',
1228
- tagLineColor: 'primary.500',
1229
- textColor: 'black',
1230
- accordionVariant: 'black',
1231
- otherQuestionsBackground: 'primary.700'
1232
- },
1233
- green: {
1234
- backgroundColor: 'primary.800',
1235
- tagLineColor: 'white',
1236
- textColor: 'white',
1237
- accordionVariant: 'white',
1238
- otherQuestionsBackground: 'primary.900'
1239
- },
1240
- white: {
1241
- backgroundColor: 'white',
1242
- tagLineColor: 'primary.500',
1243
- textColor: 'black',
1244
- accordionVariant: 'black',
1245
- otherQuestionsBackground: 'primary.700'
1246
- }
1247
- };
1248
- var QAndA = function QAndA(_ref) {
1249
- var _slice$variant;
1250
- var slice = _ref.slice;
1251
- var _useRouter = useRouter(),
1252
- push = _useRouter.push;
1253
- var variant = VARIANTS$4[(_slice$variant = slice.variant) != null ? _slice$variant : 'green'];
1254
- return React.createElement(React.Fragment, null, React.createElement(Box, {
1255
- pb: slice.hero ? 80 : 28,
1256
- id: convertToKebabCase(slice.title),
1257
- backgroundColor: variant.backgroundColor
1258
- }, React.createElement(Wrapper, null, React.createElement(SimpleGrid, {
1259
- columns: [1, null, null, 2]
1260
- }, React.createElement(Box, {
1261
- mr: "16",
1262
- paddingY: "28"
1263
- }, React.createElement(Text, {
1264
- size: "mdMonoUppercase",
1265
- color: variant.tagLineColor
1266
- }, slice.tagline), React.createElement(Heading, {
1267
- as: "h2",
1268
- size: "3xl",
1269
- color: variant.textColor,
1270
- mt: "6",
1271
- mb: "16"
1272
- }, slice.title)), React.createElement(Box, {
1273
- maxHeight: ['unset', null, null, 'xl'],
1274
- paddingTop: ['0', null, null, '28'],
1275
- paddingRight: ['0', null, null, '6'],
1276
- overflowY: ['unset', null, null, 'scroll']
1277
- }, React.createElement(Box, null, React.createElement(BoemlyAccordion, {
1278
- rows: slice.questionsAndAnswers,
1279
- defaultIndex: 0,
1280
- variant: variant.accordionVariant
1281
- }), React.createElement(Flex, {
1282
- padding: "8",
1283
- backgroundColor: variant.otherQuestionsBackground,
1284
- borderRadius: "2xl",
1285
- mt: "14",
1286
- flexDir: ['column', null, null, 'row'],
1287
- justifyContent: ['flex-start', null, null, 'space-between'],
1288
- alignItems: ['flex-start', null, null, 'center']
1289
- }, React.createElement(Heading, {
1290
- as: "h6",
1291
- size: "sm",
1292
- color: "white"
1293
- }, slice.otherQuestions), React.createElement(Spacer, {
1294
- minHeight: ['4', null, null, '0']
1295
- }), React.createElement(StrapiLinkButton, {
1296
- size: "lg",
1297
- colorScheme: "white",
1298
- background: "white",
1299
- rightIcon: React.createElement(ArrowRight, null),
1300
- link: slice.button
1301
- }))))))), slice.hero && React.createElement(Box, {
1302
- pb: "28",
1303
- mt: "-56"
1304
- }, React.createElement(Wrapper, null, React.createElement(HeroCard, {
1305
- title: slice.hero.title,
1306
- subTitle: slice.hero.subTitle,
1307
- link: slice.hero.button && {
1308
- text: slice.hero.button.text,
1309
- onClick: function onClick() {
1310
- var _slice$hero;
1311
- return push(strapiLinkUrl((_slice$hero = slice.hero) == null ? void 0 : _slice$hero.button));
1312
- }
1313
- },
1314
- image: slice.hero.image && React.createElement(Image, {
1315
- src: strapiMediaUrl(slice.hero.image.img, 'xLarge'),
1316
- alt: slice.hero.image.alt,
1317
- fill: true,
1318
- style: {
1319
- objectFit: slice.hero.image.objectFit || 'cover'
1320
- }
1321
- })
1322
- }))));
1323
- };
1324
-
1325
- var QuoteCards = function QuoteCards(_ref) {
1326
- var slice = _ref.slice;
1327
- return React.createElement(React.Fragment, null, React.createElement(Box, {
1328
- id: convertToKebabCase(slice.title),
1329
- position: "relative",
1330
- paddingTop: "28",
1331
- paddingBottom: !!slice.hero ? '80' : '28'
1332
- }, slice.shapes && slice.shapes.length === 2 && React.createElement(React.Fragment, null, React.createElement(Shape, {
1333
- shape: React.createElement(Image, {
1334
- src: strapiMediaUrl(slice.shapes[0].img, 'small'),
1335
- alt: slice.shapes[0].alt,
1336
- fill: true,
1337
- style: {
1338
- objectFit: slice.shapes[0].objectFit || 'cover'
1339
- }
1340
- }),
1341
- top: "0",
1342
- right: "0",
1343
- size: "xs",
1344
- radius: "bottom-left"
1345
- }), React.createElement(Shape, {
1346
- shape: React.createElement(Image, {
1347
- src: strapiMediaUrl(slice.shapes[1].img, 'small'),
1348
- alt: slice.shapes[1].alt,
1349
- fill: true,
1350
- style: {
1351
- objectFit: slice.shapes[1].objectFit || 'cover'
1352
- }
1353
- }),
1354
- bottom: "0",
1355
- left: "0",
1356
- radius: "top-right"
1357
- })), React.createElement(Wrapper, null, React.createElement(Box, {
1358
- maxW: "3xl"
1359
- }, React.createElement(DefaultSectionHeader, {
1360
- tagline: slice.tagline,
1361
- title: slice.title,
1362
- text: slice.text
1363
- })), React.createElement(SimpleGrid, {
1364
- columns: 2,
1365
- gap: "20",
1366
- rowGap: "6",
1367
- mt: "16",
1368
- minChildWidth: ['100%', null, '16rem']
1369
- }, slice.cards.map(function (card) {
1370
- return React.createElement(Box, {
1371
- key: card.id,
1372
- width: "full",
1373
- maxWidth: "2xl"
1374
- }, React.createElement(QuoteCard, {
1375
- key: card.id,
1376
- avatar: {
1377
- name: card.avatar.name,
1378
- description: card.avatar.description,
1379
- image: React.createElement(Image, {
1380
- src: strapiMediaUrl(card.avatar.image.img, 'small'),
1381
- alt: card.avatar.image.alt,
1382
- fill: true,
1383
- style: {
1384
- objectFit: card.avatar.image.objectFit || 'cover'
1385
- }
1386
- })
1387
- },
1388
- text: card.text
1389
- }));
1390
- })))), slice.hero && React.createElement(Box, {
1391
- marginTop: "-40",
1392
- paddingBottom: "28"
1393
- }, React.createElement(Wrapper, null, React.createElement(HeroCard, {
1394
- title: slice.hero.title,
1395
- subTitle: slice.hero.subTitle,
1396
- link: slice.hero.button && {
1397
- text: slice.hero.button.text,
1398
- onClick: function onClick() {
1399
- var _slice$hero;
1400
- return strapiLinkUrl((_slice$hero = slice.hero) == null ? void 0 : _slice$hero.button);
1401
- }
1402
- },
1403
- image: slice.hero.image && React.createElement(Image, {
1404
- src: strapiMediaUrl(slice.hero.image.img, 'xLarge'),
1405
- alt: slice.hero.image.alt,
1406
- fill: true,
1407
- style: {
1408
- objectFit: slice.hero.image.objectFit || 'cover'
1409
- }
1410
- })
1411
- }))));
1412
- };
1413
-
1414
- var RichTextSection = function RichTextSection(_ref) {
1415
- var slice = _ref.slice;
1416
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(Grid, {
1417
- templateColumns: "repeat(12, 1fr)",
1418
- gap: "4"
1419
- }, React.createElement(GridItem, {
1420
- colSpan: [12, null, null, 7]
1421
- }, React.createElement(RichText, {
1422
- content: slice.content
1423
- })))));
1424
- };
1425
-
1426
- var Steps = function Steps(_ref) {
1427
- var _slice$card$shapes;
1428
- var slice = _ref.slice;
1429
- var _useRouter = useRouter(),
1430
- push = _useRouter.push;
1431
- var _useToken = useToken('colors', ['gray.900']),
1432
- gray900 = _useToken[0];
1433
- var containerRef = useRef(null);
1434
- var _useState = useState(new Array(slice.steps.length)),
1435
- stepRefs = _useState[0],
1436
- setStepRefs = _useState[1];
1437
- var _useState2 = useState(new Array(slice.steps.length)),
1438
- stepProgress = _useState2[0],
1439
- setStepProgress = _useState2[1];
1440
- var _useWindowScroll = useWindowScroll(),
1441
- offsetY = _useWindowScroll.y;
1442
- var _useWindowSize = useWindowSize(),
1443
- windowHeight = _useWindowSize.height;
1444
- useEffect(function () {
1445
- setStepRefs(slice.steps.map(function () {
1446
- return createRef();
1447
- }));
1448
- }, []);
1449
- useEffect(function () {
1450
- var _containerRef$current;
1451
- var containerOffsetTop = ((_containerRef$current = containerRef.current) == null ? void 0 : _containerRef$current.offsetTop) || 0;
1452
- setStepProgress(stepRefs.map(function (ref) {
1453
- var _ref$current;
1454
- var currentItemOffsetTop = ((_ref$current = ref.current) == null ? void 0 : _ref$current.offsetTop) || 0;
1455
- return containerOffsetTop + currentItemOffsetTop < offsetY + windowHeight / 3 ? 100 : 0;
1456
- }));
1457
- }, [offsetY]);
1458
- return React.createElement("div", {
1459
- ref: containerRef
1460
- }, React.createElement(DefaultSectionContainer, {
1461
- backgroundColor: gray900,
1462
- title: slice.title
1463
- }, React.createElement(React.Fragment, null, slice.image && React.createElement(Box, {
1464
- position: "absolute",
1465
- top: "0",
1466
- left: "0",
1467
- width: "full",
1468
- height: "full"
1469
- }, React.createElement(Image, {
1470
- src: strapiMediaUrl(slice.image.img, 'xLarge'),
1471
- alt: slice.image.alt,
1472
- fill: true,
1473
- style: {
1474
- objectFit: slice.image.objectFit || 'cover'
1475
- }
1476
- }), React.createElement(Gradient, null))), React.createElement(Wrapper, null, React.createElement(React.Fragment, null, React.createElement(DefaultSectionHeader, {
1477
- tagline: slice.tagline,
1478
- title: slice.title,
1479
- text: slice.text,
1480
- taglineProps: {
1481
- textAlign: 'center'
1482
- },
1483
- titleProps: {
1484
- textAlign: 'center',
1485
- maxW: '2xl',
1486
- marginX: 'auto',
1487
- color: 'white'
1488
- },
1489
- textProps: {
1490
- textAlign: 'center',
1491
- maxW: 'xl',
1492
- marginX: 'auto',
1493
- color: 'whiteAlpha.800'
1494
- }
1495
- }), React.createElement(Box, {
1496
- marginTop: ['16', null, '24']
1497
- }, slice.steps.map(function (_ref2, index) {
1498
- var id = _ref2.id,
1499
- step = _ref2.step,
1500
- title = _ref2.title,
1501
- text = _ref2.text;
1502
- return React.createElement(Flex, {
1503
- flexDir: "column",
1504
- alignItems: "center",
1505
- key: id
1506
- }, React.createElement(Center, {
1507
- width: "10",
1508
- height: "10",
1509
- borderRadius: "full",
1510
- backgroundColor: "white"
1511
- }, React.createElement(Text, {
1512
- size: "smRegularNormal",
1513
- color: "black"
1514
- }, step)), React.createElement(Heading, {
1515
- size: "lg",
1516
- color: "white",
1517
- mt: "4",
1518
- textAlign: "center"
1519
- }, title), text && React.createElement(Box, {
1520
- maxW: "xl",
1521
- mt: "4"
1522
- }, React.createElement(RichText, {
1523
- options: {
1524
- forceBlock: true
1525
- },
1526
- content: text,
1527
- textProps: {
1528
- size: 'mdRegularNormal',
1529
- color: 'whiteAlpha.700',
1530
- textAlign: 'center'
1531
- }
1532
- })), (index + 1 < slice.steps.length || slice.card) && React.createElement(Box, {
1533
- ref: stepRefs[index],
1534
- position: "relative",
1535
- marginTop: "4",
1536
- marginBottom: "6",
1537
- height: "12"
1538
- }, React.createElement(Box, {
1539
- position: "absolute",
1540
- height: "full",
1541
- borderLeft: "dashed 1px white",
1542
- opacity: "0.5"
1543
- }), React.createElement(Box, {
1544
- position: "absolute",
1545
- height: stepProgress[index] + "%",
1546
- borderRight: "solid 1px white",
1547
- opacity: "1",
1548
- transition: "height ease var(--medium-transition-duration)"
1549
- })));
1550
- })), slice.card && React.createElement(ShapesCard, {
1551
- tagline: slice.card.tagline,
1552
- title: slice.card.title,
1553
- text: slice.card.text,
1554
- shapes: slice.card.shapes && ((_slice$card$shapes = slice.card.shapes) == null ? void 0 : _slice$card$shapes.map(function (shape) {
1555
- return React.createElement(Image, {
1556
- src: strapiMediaUrl(shape.img, 'small'),
1557
- alt: shape.alt,
1558
- fill: true,
1559
- style: {
1560
- objectFit: shape.objectFit || 'cover'
1561
- }
1562
- });
1563
- })),
1564
- button: slice.card.button && {
1565
- text: slice.card.button.text,
1566
- onClick: function onClick() {
1567
- var _slice$card;
1568
- return push(strapiLinkUrl((_slice$card = slice.card) == null ? void 0 : _slice$card.button));
1569
- }
1570
- }
1571
- })))));
1572
- };
1573
-
1574
- var _oppositesOfCorners, _templateObject$6, _templateObject2$3;
1575
- var ShapePosition;
1576
- (function (ShapePosition) {
1577
- ShapePosition["topLeft"] = "top-left";
1578
- ShapePosition["topRight"] = "top-right";
1579
- ShapePosition["bottomLeft"] = "bottom-left";
1580
- ShapePosition["bottomRight"] = "bottom-right";
1581
- ShapePosition["unset"] = "unset";
1582
- })(ShapePosition || (ShapePosition = {}));
1583
- var shapePositions = [ShapePosition.topLeft, ShapePosition.bottomRight, ShapePosition.topRight, ShapePosition.bottomLeft, ShapePosition.topRight, ShapePosition.bottomLeft, ShapePosition.topLeft, ShapePosition.bottomRight];
1584
- var oppositesOfCorners = (_oppositesOfCorners = {}, _oppositesOfCorners[ShapePosition.bottomLeft] = ShapePosition.topRight, _oppositesOfCorners[ShapePosition.topRight] = ShapePosition.bottomLeft, _oppositesOfCorners[ShapePosition.bottomRight] = ShapePosition.topLeft, _oppositesOfCorners[ShapePosition.topLeft] = ShapePosition.bottomRight, _oppositesOfCorners[ShapePosition.unset] = ShapePosition.unset, _oppositesOfCorners);
1585
- var variants = {
1586
- shape: {
1587
- padding: ['6', null, null, '8'],
1588
- positionIcon: function positionIcon(index) {
1589
- return shapePositions[index];
1590
- },
1591
- width: '40',
1592
- height: '40',
1593
- position: 'absolute',
1594
- mb: 'unset'
1595
- },
1596
- image: {
1597
- padding: ['6', null, null, '8'],
1598
- positionIcon: function positionIcon() {
1599
- return ShapePosition.unset;
1600
- },
1601
- width: '24',
1602
- height: '24',
1603
- position: 'relative',
1604
- mb: '10'
1605
- }
1606
- };
1607
- var TextCardGrid = function TextCardGrid(_ref) {
1608
- var slice = _ref.slice;
1609
- var _useToken = useToken('colors', ['primary.800']),
1610
- primary800 = _useToken[0];
1611
- return React.createElement(DefaultSectionContainer, {
1612
- backgroundColor: primary800,
1613
- title: slice.title
1614
- }, React.createElement(Wrapper, null, React.createElement(DefaultSectionHeader, {
1615
- tagline: slice.tagline,
1616
- title: slice.title,
1617
- text: slice.text,
1618
- taglineProps: {
1619
- textAlign: 'center',
1620
- color: 'white'
1621
- },
1622
- titleProps: {
1623
- textAlign: 'center',
1624
- maxW: '2xl',
1625
- marginX: 'auto',
1626
- color: 'white'
1627
- },
1628
- textProps: {
1629
- textAlign: 'center',
1630
- maxW: 'xl',
1631
- marginX: 'auto',
1632
- color: 'whiteAlpha.800'
1633
- }
1634
- }), React.createElement(SimpleGrid, {
1635
- mt: ['14', null, null, '24'],
1636
- columns: 3,
1637
- justifyItems: "center",
1638
- gap: "20",
1639
- rowGap: "16",
1640
- minChildWidth: ['100%', null, '16rem']
1641
- }, slice.cards.map(function (_ref2, index) {
1642
- var id = _ref2.id,
1643
- tagline = _ref2.tagline,
1644
- title = _ref2.title,
1645
- text = _ref2.text,
1646
- image = _ref2.image,
1647
- buttons = _ref2.buttons;
1648
- return React.createElement(Box, {
1649
- key: id,
1650
- backgroundColor: "white",
1651
- zIndex: "base",
1652
- padding: variants[slice.variant].padding,
1653
- boxShadow: "lg",
1654
- borderRadius: "2xl",
1655
- minHeight: "2xs",
1656
- width: "full",
1657
- maxWidth: slice.cards.length > 1 ? 'unset' : 'xl',
1658
- position: "relative",
1659
- display: "flex",
1660
- flexDir: "column",
1661
- alignItems: "flex-start",
1662
- justifyContent: slice.variant === 'shape' ? 'flex-end' : 'flex-start',
1663
- overflow: "hidden"
1664
- }, React.createElement(Box, {
1665
- position: variants[slice.variant].position,
1666
- width: variants[slice.variant].width,
1667
- height: variants[slice.variant].height,
1668
- mb: variants[slice.variant].mb,
1669
- top: variants[slice.variant].positionIcon(index).includes('top') ? '-4' : 'unset',
1670
- left: variants[slice.variant].positionIcon(index).includes('left') ? '-4' : 'unset',
1671
- right: variants[slice.variant].positionIcon(index).includes('right') ? '-4' : 'unset',
1672
- bottom: variants[slice.variant].positionIcon(index).includes('bottom') ? '-4' : 'unset',
1673
- borderBottomRightRadius: oppositesOfCorners[variants[slice.variant].positionIcon(index)].includes('bottomRight') ? 'full' : 'unset',
1674
- borderBottomLeftRadius: oppositesOfCorners[variants[slice.variant].positionIcon(index)].includes('bottomLeft') ? 'full' : 'unset',
1675
- borderTopRightRadius: oppositesOfCorners[variants[slice.variant].positionIcon(index)].includes('topRight') ? 'full' : 'unset',
1676
- borderTopLeftRadius: oppositesOfCorners[variants[slice.variant].positionIcon(index)].includes('topLeft') ? 'full' : 'unset',
1677
- css: variants[slice.variant].positionIcon(index).includes('unset') ? css(_templateObject$6 || (_templateObject$6 = _taggedTemplateLiteralLoose(["\n & span,\n div,\n img {\n border-radius: var(--boemly-radii-xl);\n }\n "]))) : css(_templateObject2$3 || (_templateObject2$3 = _taggedTemplateLiteralLoose(["\n & span,\n div,\n img {\n border-", "-radius: var(--boemly-radii-full);\n }\n "])), oppositesOfCorners[variants[slice.variant].positionIcon(index)])
1678
- }, React.createElement(Image, {
1679
- src: strapiMediaUrl(image.img, 'small'),
1680
- alt: image.alt,
1681
- fill: true,
1682
- style: {
1683
- objectFit: image.objectFit || 'cover'
1684
- }
1685
- })), React.createElement(Box, {
1686
- zIndex: "aboveBase",
1687
- width: "full"
1688
- }, tagline && React.createElement(Text, {
1689
- color: "black",
1690
- size: "smMonoNormal",
1691
- mb: "2"
1692
- }, tagline), React.createElement(Heading, {
1693
- as: "h4",
1694
- size: "xl",
1695
- mb: "3"
1696
- }, title), React.createElement(RichText, {
1697
- content: text,
1698
- listProps: {
1699
- textColor: 'gray.500',
1700
- textSize: 'smRegularNormal'
1701
- },
1702
- textProps: {
1703
- color: 'gray.500',
1704
- size: 'smRegularNormal'
1705
- }
1706
- }), buttons && !!buttons.length && React.createElement(Flex, {
1707
- mt: "4",
1708
- gap: "3",
1709
- flexDir: ['column', null, null, null, 'row']
1710
- }, buttons.map(function (button, buttonIndex) {
1711
- return React.createElement(StrapiLinkButton, {
1712
- key: button.id,
1713
- link: button,
1714
- size: "sm",
1715
- rightIcon: buttonIndex === 0 ? React.createElement(CaretRight, {
1716
- size: "10",
1717
- weight: "bold"
1718
- }) : undefined,
1719
- variant: buttonIndex === 0 ? 'outline' : 'ghost'
1720
- });
1721
- }))));
1722
- }))));
1723
- };
1724
-
1725
- var _templateObject$5, _templateObject2$2, _templateObject3$1;
1726
- var CarouselContainer = /*#__PURE__*/styled(Box)(_templateObject$5 || (_templateObject$5 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n overflow-x: scroll;\n\n margin-top: var(--boemly-space-6);\n padding: var(--boemly-space-8) 0;\n\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n @media screen and (max-width: ", ") {\n margin-top: var(--boemly-space-4);\n }\n"])), BREAKPOINT_MD);
1727
- var CarouselInnerContainer = /*#__PURE__*/styled(motion.div)(_templateObject2$2 || (_templateObject2$2 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n justify-content: center;\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-space-16)) *\n ", " +\n var(--boemly-space-16)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ", ") {\n width: calc(\n (var(--boemly-sizes-xs) + var(--boemly-space-4)) *\n ", " +\n var(--boemly-space-6)\n );\n }\n"])), function (_ref) {
1728
- var numberOfItems = _ref.numberOfItems;
1729
- return numberOfItems;
1730
- }, BREAKPOINT_MD, function (_ref2) {
1731
- var numberOfItems = _ref2.numberOfItems;
1732
- return numberOfItems;
1733
- });
1734
- var CardContainer = /*#__PURE__*/styled(Box)(_templateObject3$1 || (_templateObject3$1 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n width: ", ";\n\n margin-right: var(--boemly-space-16);\n\n &:first-of-type {\n margin-left: var(--boemly-space-16);\n }\n\n @media screen and (max-width: ", ") {\n width: var(--boemly-sizes-xs);\n\n margin-right: var(--boemly-space-4);\n\n &:first-of-type {\n margin-left: var(--boemly-space-6);\n }\n }\n"])), function (_ref3) {
1735
- var numberOfItems = _ref3.numberOfItems;
1736
- return numberOfItems === 3 ? 'var(--boemly-sizes-xl)' : 'var(--boemly-sizes-sm)';
1737
- }, BREAKPOINT_MD);
1738
-
1739
- var TextCarousel = function TextCarousel(_ref) {
1740
- var slice = _ref.slice;
1741
- var _useToken = useToken('colors', ['primary.50']),
1742
- primary50 = _useToken[0];
1743
- var containerRef = useRef(null);
1744
- return React.createElement(DefaultSectionContainer, {
1745
- backgroundColor: primary50,
1746
- title: slice.title
1747
- }, React.createElement(Wrapper, null, React.createElement(DefaultSectionHeader, {
1748
- tagline: slice.tagline,
1749
- title: slice.title,
1750
- text: slice.text,
1751
- taglineProps: {
1752
- textAlign: 'center'
1753
- },
1754
- titleProps: {
1755
- textAlign: 'center',
1756
- maxW: '6xl',
1757
- marginX: 'auto'
1758
- },
1759
- textProps: {
1760
- textAlign: 'center',
1761
- maxW: '2xl',
1762
- marginX: 'auto'
1763
- }
1764
- })), React.createElement(CarouselContainer, {
1765
- ref: containerRef
1766
- }, React.createElement(CarouselInnerContainer, {
1767
- drag: "x",
1768
- dragConstraints: containerRef,
1769
- numberOfItems: slice.slides.length
1770
- }, slice.slides.map(function (_ref2) {
1771
- var id = _ref2.id,
1772
- title = _ref2.title,
1773
- text = _ref2.text,
1774
- icon = _ref2.icon;
1775
- return React.createElement(CardContainer, {
1776
- key: id,
1777
- numberOfItems: slice.slides.length
1778
- }, React.createElement(TextCardWithIcon, {
1779
- title: title,
1780
- text: text,
1781
- icon: React.createElement(Image, {
1782
- src: strapiMediaUrl(icon.img, 'small'),
1783
- alt: icon.alt,
1784
- fill: true,
1785
- style: {
1786
- objectFit: icon.objectFit || 'contain'
1787
- }
1788
- }),
1789
- displayAs: "column"
1790
- }));
1791
- }))), React.createElement(React.Fragment, null, slice.button && React.createElement(Wrapper, null, React.createElement(Center, null, React.createElement(StrapiLinkButton, {
1792
- link: slice.button,
1793
- size: "xl",
1794
- mt: ['8', null, '14']
1795
- })))));
1796
- };
1797
-
1798
- var TextWithTextCards = function TextWithTextCards(_ref) {
1799
- var slice = _ref.slice;
1800
- var _useRouter = useRouter(),
1801
- push = _useRouter.push;
1802
- var _useToken = useToken('colors', ['white']),
1803
- white = _useToken[0];
1804
- var _useMediaQuery = useMediaQuery(BREAKPOINT_LG_QUERY),
1805
- belowBreakpoint = _useMediaQuery[0];
1806
- return React.createElement(DefaultSectionContainer, {
1807
- backgroundColor: white,
1808
- title: slice.title
1809
- }, React.createElement(React.Fragment, null, slice.shape && React.createElement(Box, {
1810
- position: "absolute",
1811
- right: ['-28', null, null, '-136'],
1812
- top: ['96', null, null, '-28'],
1813
- width: ['sm', null, null, '4xl'],
1814
- height: ['sm', null, null, '4xl'],
1815
- borderBottomRightRadius: "full"
1816
- }, React.createElement(Image, {
1817
- src: strapiMediaUrl(slice.shape.img, 'medium'),
1818
- alt: slice.shape.alt,
1819
- fill: true,
1820
- style: {
1821
- objectFit: slice.shape.objectFit || 'cover',
1822
- borderBottomRightRadius: 'var(--boemly-radii-full)'
1823
- }
1824
- }))), React.createElement(Wrapper, null, React.createElement(React.Fragment, null, React.createElement(Grid, {
1825
- templateColumns: ['repeat(8, 1fr)', null, null, null, 'repeat(16, 1fr)'],
1826
- templateRows: ['repeat(2, auto)', null, null, null, 'repeat(1, auto)'],
1827
- rowGap: "12"
1828
- }, React.createElement(GridItem, {
1829
- colSpan: [8, null, null, null, 9],
1830
- rowSpan: 1,
1831
- pr: ['0', null, null, null, '32']
1832
- }, React.createElement(DefaultSectionHeader, {
1833
- tagline: slice.tagline,
1834
- title: slice.title,
1835
- text: slice.text,
1836
- textProps: {
1837
- pr: ['0', null, null, null, '10']
1838
- }
1839
- }), slice.contact && !belowBreakpoint && React.createElement(ContactArea, {
1840
- title: slice.contact.title,
1841
- text: slice.contact.text,
1842
- avatar: {
1843
- name: slice.contact.avatar.name,
1844
- description: slice.contact.avatar.description,
1845
- image: React.createElement(Image, {
1846
- src: strapiMediaUrl(slice.contact.avatar.image.img, 'small'),
1847
- alt: slice.contact.avatar.image.alt,
1848
- fill: true,
1849
- style: {
1850
- objectFit: slice.contact.avatar.image.objectFit || 'cover'
1851
- }
1852
- })
1853
- },
1854
- link: {
1855
- text: slice.contact.button.text,
1856
- onClick: function onClick() {
1857
- var _slice$contact;
1858
- return push(strapiLinkUrl((_slice$contact = slice.contact) == null ? void 0 : _slice$contact.button));
1859
- }
1860
- }
1861
- })), React.createElement(GridItem, {
1862
- colSpan: [8, null, null, null, 7],
1863
- rowSpan: 1,
1864
- position: "relative"
1865
- }, slice.cards.map(function (card) {
1866
- return React.createElement(TextCardWithIcon, {
1867
- key: card.id,
1868
- title: card.title,
1869
- text: card.text,
1870
- icon: React.createElement(Image, {
1871
- src: strapiMediaUrl(card.icon.img, 'small'),
1872
- alt: card.icon.alt,
1873
- fill: true,
1874
- style: {
1875
- objectFit: card.icon.objectFit || 'contain'
1876
- }
1877
- })
1878
- });
1879
- }))), slice.contact && belowBreakpoint && React.createElement(ContactArea, {
1880
- title: slice.contact.title,
1881
- text: slice.contact.text,
1882
- avatar: {
1883
- name: slice.contact.avatar.name,
1884
- description: slice.contact.avatar.description,
1885
- image: React.createElement(Image, {
1886
- src: strapiMediaUrl(slice.contact.avatar.image.img, 'small'),
1887
- alt: slice.contact.avatar.image.alt,
1888
- fill: true,
1889
- style: {
1890
- objectFit: slice.contact.avatar.image.objectFit || 'cover'
1891
- }
1892
- })
1893
- },
1894
- link: {
1895
- text: slice.contact.button.text,
1896
- onClick: function onClick() {
1897
- var _slice$contact2;
1898
- return push(strapiLinkUrl((_slice$contact2 = slice.contact) == null ? void 0 : _slice$contact2.button));
1899
- }
1900
- }
1901
- }))));
1902
- };
1903
-
1904
- var TextWithCard = function TextWithCard(_ref) {
1905
- var slice = _ref.slice;
1906
- var card = React.createElement(GridItem, {
1907
- colSpan: [4, null, null, null, 2],
1908
- rowSpan: 1,
1909
- position: "relative",
1910
- "data-testid": "card-position-" + slice.cardPosition
1911
- }, slice.card && React.createElement(ProjectCard, {
1912
- facts: slice.card.facts,
1913
- footerSubTitle: slice.card.footerSubTitle,
1914
- footerTitle: slice.card.footerTitle,
1915
- title: slice.card.title,
1916
- image: React.createElement(Image, {
1917
- src: strapiMediaUrl(slice.card.image.img, 'medium'),
1918
- alt: slice.card.image.alt,
1919
- fill: true,
1920
- style: {
1921
- objectFit: slice.card.image.objectFit || 'cover'
1922
- }
1923
- })
1924
- }));
1925
- return React.createElement(DefaultSectionContainer, {
1926
- title: slice.title
1927
- }, React.createElement(Wrapper, null, React.createElement(Grid, {
1928
- templateColumns: ['repeat(4, auto)', null, null, null, 'repeat(6, auto)'],
1929
- templateRows: ['repeat(2, auto)', null, null, null, 'repeat(1, auto)'],
1930
- rowGap: "12",
1931
- columnGap: ['0', null, null, null, '28']
1932
- }, slice.cardPosition === 'left' && card, React.createElement(GridItem, {
1933
- colSpan: 4,
1934
- rowSpan: 1,
1935
- position: "relative"
1936
- }, React.createElement(DefaultSectionHeader, {
1937
- tagline: slice.tagline,
1938
- title: slice.title,
1939
- text: slice.text
1940
- }), slice.listItems && React.createElement(React.Fragment, null, React.createElement(Spacer, {
1941
- height: "10"
1942
- }), React.createElement(BoemlyList, {
1943
- listItems: slice.listItems
1944
- }), React.createElement(Spacer, {
1945
- height: "10"
1946
- })), slice.button && React.createElement(StrapiLinkButton, {
1947
- link: slice.button,
1948
- size: "md",
1949
- colorScheme: "white",
1950
- variant: "outline",
1951
- rightIcon: React.createElement(ArrowRight, null)
1952
- })), slice.cardPosition === 'right' && card)));
1953
- };
1954
-
1955
- var MEDIUM_TRANSITION_DURATION = 0.2;
1956
-
1957
- var LinkCardsGrid = function LinkCardsGrid(_ref) {
1958
- var slice = _ref.slice;
1959
- return React.createElement(DefaultSectionContainer, {
1960
- title: slice.title
1961
- }, React.createElement(Wrapper, null, React.createElement(DefaultSectionHeader, {
1962
- tagline: slice.tagline,
1963
- title: slice.title,
1964
- text: slice.text
1965
- }), React.createElement(SimpleGrid, {
1966
- mt: "16",
1967
- columns: [1, null, null, null, 2],
1968
- gap: "4"
1969
- }, slice.cards.map(function (_ref2) {
1970
- var id = _ref2.id,
1971
- title = _ref2.title,
1972
- text = _ref2.text,
1973
- link = _ref2.link;
1974
- return React.createElement(Box, {
1975
- key: id,
1976
- as: Link,
1977
- href: strapiLinkUrl(link),
1978
- "data-testid": "link",
1979
- px: "10",
1980
- py: "8",
1981
- borderStyle: "solid",
1982
- borderWidth: "thin",
1983
- borderColor: "gray.200",
1984
- borderRadius: "2xl",
1985
- display: "flex",
1986
- flexDir: "row",
1987
- alignItems: "center",
1988
- justifyContent: "space-between",
1989
- cursor: "pointer",
1990
- transitionDuration: MEDIUM_TRANSITION_DURATION + "s",
1991
- _hover: {
1992
- backgroundColor: 'gray.50'
1993
- }
1994
- }, React.createElement("div", null, React.createElement(Heading, {
1995
- as: "h4",
1996
- size: "lg"
1997
- }, title), text && React.createElement(Text, {
1998
- mt: "2",
1999
- size: "smRegularNormal"
2000
- }, text)), React.createElement(Box, {
2001
- display: "flex",
2002
- alignItems: "center",
2003
- justifyContent: "center",
2004
- borderStyle: "solid",
2005
- borderWidth: "thin",
2006
- borderColor: "gray.200",
2007
- borderRadius: "2xl",
2008
- height: "12",
2009
- width: "12",
2010
- minWidth: "12",
2011
- minHeight: "12",
2012
- ml: "6",
2013
- backgroundColor: "white"
2014
- }, React.createElement(CaretRight, null)));
2015
- }))));
2016
- };
2017
-
2018
- var colors = {
2019
- dark: {
2020
- tagline: 'white',
2021
- title: 'white',
2022
- text: 'white',
2023
- background: 'gray.900'
2024
- },
2025
- light: {
2026
- tagline: 'primary.500',
2027
- title: 'black',
2028
- text: 'gray.500',
2029
- background: 'primary.50'
2030
- }
2031
- };
2032
- var SmallHero = function SmallHero(_ref) {
2033
- var slice = _ref.slice,
2034
- theme = _ref.theme;
2035
- return React.createElement(Box, {
2036
- position: "relative",
2037
- width: "full",
2038
- height: "xl",
2039
- backgroundColor: colors[theme].background
2040
- }, slice.image && React.createElement(React.Fragment, null, React.createElement(Image, {
2041
- src: strapiMediaUrl(slice.image.img, 'xLarge'),
2042
- alt: slice.image.alt,
2043
- fill: true,
2044
- style: {
2045
- objectFit: slice.image.objectFit || 'cover'
2046
- }
2047
- }), slice.gradient && React.createElement(Gradient, null)), React.createElement(Box, {
2048
- position: "absolute",
2049
- left: "0",
2050
- top: "60%",
2051
- width: "full",
2052
- textAlign: "center",
2053
- transform: "translateY(-50%)"
2054
- }, React.createElement(Wrapper, null, React.createElement(React.Fragment, null, slice.tags && React.createElement(Flex, {
2055
- direction: "row",
2056
- justify: "center",
2057
- gap: "2",
2058
- mb: "4",
2059
- wrap: "wrap"
2060
- }, slice.tags.map(function (_ref2) {
2061
- var id = _ref2.id,
2062
- text = _ref2.text,
2063
- colorScheme = _ref2.colorScheme;
2064
- return React.createElement(Tag, {
2065
- key: id,
2066
- colorScheme: colorScheme,
2067
- size: "md",
2068
- variant: "subtle"
2069
- }, text);
2070
- })), React.createElement(DefaultSectionHeader, {
2071
- isHero: true,
2072
- tagline: slice.tagline,
2073
- title: slice.title,
2074
- text: slice.subTitle,
2075
- taglineProps: {
2076
- color: colors[theme].tagline,
2077
- textAlign: 'center',
2078
- mx: 'auto'
2079
- },
2080
- titleProps: {
2081
- color: colors[theme].title,
2082
- maxW: '4xl',
2083
- textAlign: 'center',
2084
- mx: 'auto'
2085
- },
2086
- textProps: {
2087
- maxW: '2xl',
2088
- textAlign: 'center',
2089
- mx: 'auto',
2090
- color: colors[theme].text
2091
- }
2092
- }), slice.button && React.createElement(StrapiLinkButton, {
2093
- link: slice.button,
2094
- mt: "6",
2095
- size: "lg"
2096
- })))));
2097
- };
2098
-
2099
- var _templateObject$4, _templateObject2$1;
2100
- var BlogItemContainer = /*#__PURE__*/styled(Link$1)(_templateObject$4 || (_templateObject$4 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n text-decoration: none;\n\n & div img {\n transition: transform var(--default-ease) var(--medium-transition-duration);\n }\n\n &:hover {\n text-decoration: none;\n\n & > div:first-of-type img {\n transform: scale(1.03);\n }\n }\n"])));
2101
- var ImageContainer$1 = /*#__PURE__*/styled(Box)(_templateObject2$1 || (_templateObject2$1 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n width: 100%;\n height: var(--boemly-sizes-xs);\n position: relative;\n border-radius: var(--boemly-radii-2xl);\n\n // Fixes the flickering of borders during animation in Safari\n -webkit-mask-image: -webkit-radial-gradient(white, black);\n\n & span,\n div {\n border-radius: var(--boemly-radii-2xl);\n }\n\n @media screen and (max-width: ", ") {\n height: var(--boemly-sizes-3xs);\n }\n"])), BREAKPOINT_MD);
2102
-
2103
- var comparisonMessagesDe = {
2104
- 'sections.comparison.backgroundShapes': 'Hintergrundformen'
2105
- };
2106
-
2107
- var ctaMessagesDe = {
2108
- 'sections.cta.backgroundShapes': 'Dunkle Hintergrundformen',
2109
- 'sections.cta.backgroundShapesLight': 'Helle Hintergrundformen'
2110
- };
2111
-
2112
- var customerStoriesDe = {
2113
- 'sections.customerStories.more': 'Weiterlesen'
2114
- };
2115
-
2116
- var glossaryMessagesDe = {
2117
- 'sections.glossary.copyButtonLabel': 'Kopiere den Link zu diesem Abschnitt in die Zwischenablage',
2118
- 'sections.glossary.copySuccessMessage': 'Link in die Zwischenablage kopiert',
2119
- 'sections.glossary.copyFailureMessage': 'Link konnte nicht in die Zwischenablage kopiert werden'
2120
- };
2121
-
2122
- var projectFactsMessagesDe = {
2123
- 'sections.projectFacts.projectInfo.value': 'Projekt Infos',
2124
- 'projects.projectFacts.properties.area': 'Fläche'
2125
- };
2126
-
2127
- var projectsMapMessagesDe = {
2128
- 'sections.projectsMap.link.text': 'Mehr Infos'
2129
- };
2130
-
2131
- var shopCheckoutMessagesDe = {
2132
- 'sections.shopCheckout.intro.price': 'Preis',
2133
- 'sections.shopCheckout.contributionValue.label.EUR': 'Geben sie einen Betrag in € ein',
2134
- 'sections.shopCheckout.contributionValue.label.CHF': 'Geben sie einen Betrag in CHF ein',
2135
- 'sections.shopCheckout.contributionValue.unit.EUR': '€',
2136
- 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',
2137
- 'sections.shopCheckout.contributionValue.validation.empty': 'Bitte geben sie einen Betrag ein',
2138
- 'sections.shopCheckout.contributionValue.validation.tooLow.EUR': 'Der Betrag muss mindestens 10 Euro sein',
2139
- 'sections.shopCheckout.contributionValue.validation.tooLow.CHF': 'Der Betrag muss mindestens 10 CHF sein',
2140
- 'sections.shopCheckout.contributionValue.validation.tooHigh': 'Für größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über office@tree.ly',
2141
- 'sections.shopCheckout.summary.kg': 'Menge',
2142
- 'sections.shopCheckout.summary.price': 'Preis',
2143
- 'sections.shopCheckout.submit': 'Kaufen'
2144
- };
2145
-
2146
- var creditsAvailableBadgeMessagesDe = {
2147
- 'components.creditsAvailableBadge.text.yes': 'Credits verfügbar',
2148
- 'components.creditsAvailableBadge.text.some': 'Einige verbleibende Credits',
2149
- 'components.creditsAvailableBadge.text.no': 'Keine verbleibenden Credits',
2150
- 'components.creditsAvailableBadge.text.notYet': 'Noch keine Credits verfügbar'
2151
- };
2152
-
2153
- var portfolioDocumentsDownloadListMessagesDe = {
2154
- 'features.portfolio.documentsDownloadList.projectDocuments': 'Projektdokumente',
2155
- 'features.portfolio.documentsDownloadList.downloadDocument': 'Dokument herunterladen'
2156
- };
2157
-
2158
- var portfolioProjectInfoMessagesDe = {
2159
- 'features.projectInfo.projectInfo.value': 'Projekt Infos',
2160
- 'features.projectInfo.properties.area': 'Projekt Fläche',
2161
- 'features.projectInfo.properties.location': 'Standort',
2162
- 'features.projectInfo.properties.start': 'Projekt Start Datum',
2163
- 'features.projectInfo.properties.timeSpan': 'Projekt Zeitraum',
2164
- 'features.projectInfo.properties.projectType': 'Projekt Typ',
2165
- 'features.projectInfo.properties.projectDeveloper': 'Projekt Entwickler',
2166
- 'features.projectInfo.properties.verificationStandard.label': 'Verifizierungsstandard',
2167
- 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14': 'SILVACONSULT® Forest Carbon Standard, ISO 14064-2',
2168
- 'features.projectInfo.properties.forecastedAmountYear.label': 'Projektvolumen',
2169
- 'features.projectInfo.properties.riskBuffer': 'Anteil Risikopuffer',
2170
- 'features.projectInfo.properties.year': '{years} {years, plural, one {Jahr} other {Jahre} }'
2171
- };
2172
-
2173
- var portfolioSmallCheckoutMessagesDe = {
2174
- 'portfolio.smallCheckout.contributionValueCurrency.label.CHF': 'Geben Sie den Beitrag in Fr. ein',
2175
- 'portfolio.smallCheckout.contributionValueCurrency.label.EUR': 'Geben Sie den Beitrag in € ein',
2176
- 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',
2177
- 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'Fr.',
2178
- 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF': 'Der Wert muss mindestens 10 CHF betragen',
2179
- 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR': 'Der Wert muss mindestens 10 Euro betragen.',
2180
- 'portfolio.smallCheckout.contributionValueCurrency.validation.empty': 'Bitte geben Sie einen Wert ein',
2181
- 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh': 'Für größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über den unten stehenden Button',
2182
- 'portfolio.smallCheckout.contributionValueKgs.label': 'Beitrag in Tonnen',
2183
- 'portfolio.smallCheckout.submitButton': 'Credits kaufen',
2184
- 'portfolio.smallCheckout.cta.title': 'Möchten Sie mehr als 10.000 tCO₂ kaufen?',
2185
- 'portfolio.smallCheckout.cta.subTitle': 'Für Unternehmenskunden bieten wir individuelle Lösungen an. Kontaktieren Sie uns.',
2186
- 'portfolio.smallCheckout.cta.button': 'Unser Vertriebsteam kontaktieren'
2187
- };
2188
-
2189
- var unitMessagesEn = {
2190
- 'unit.formatter.tonsCo2': '{number} /tCO₂',
2191
- 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/year'
2192
- };
2193
-
2194
- var rootMessagesDe = /*#__PURE__*/_extends({}, creditsAvailableBadgeMessagesDe, portfolioDocumentsDownloadListMessagesDe, portfolioProjectInfoMessagesDe, portfolioSmallCheckoutMessagesDe, comparisonMessagesDe, ctaMessagesDe, customerStoriesDe, glossaryMessagesDe, projectFactsMessagesDe, projectsMapMessagesDe, shopCheckoutMessagesDe, unitMessagesEn);
2195
-
2196
- var comparisonMessagesEn = {
2197
- 'sections.comparison.backgroundShapes': 'Background shapes'
2198
- };
2199
-
2200
- var ctaMessagesEn = {
2201
- 'sections.cta.backgroundShapesDark': 'Dark background shapes',
2202
- 'sections.cta.backgroundShapesLight': 'Light background shapes'
2203
- };
2204
-
2205
- var customerStoriesEn = {
2206
- 'sections.customerStories.more': 'Read more'
2207
- };
2208
-
2209
- var glossaryMessagesEn = {
2210
- 'sections.glossary.copyButtonLabel': 'Copy a link to this section to your clipboard',
2211
- 'sections.glossary.copySuccessMessage': 'Copied the link to your clipboard',
2212
- 'sections.glossary.copyFailureMessage': 'Could not copy link to clipboard'
2213
- };
2214
-
2215
- var projectFactsMessagesEn = {
2216
- 'sections.projectFacts.projectInfo.value': 'Project Infos',
2217
- 'projects.projectFacts.properties.area': 'Area'
2218
- };
2219
-
2220
- var projectsMapMessagesEn = {
2221
- 'sections.projectsMap.link.text': 'Show more info'
2222
- };
2223
-
2224
- var shopCheckoutMessagesEn = {
2225
- 'sections.shopCheckout.intro.price': 'Price',
2226
- 'sections.shopCheckout.contributionValue.label.EUR': 'Enter contribution value in €',
2227
- 'sections.shopCheckout.contributionValue.label.CHF': 'Enter contribution value in CHF',
2228
- 'sections.shopCheckout.contributionValue.unit.EUR': '€',
2229
- 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',
2230
- 'sections.shopCheckout.contributionValue.validation.empty': 'Please enter a value',
2231
- 'sections.shopCheckout.contributionValue.validation.tooLow.EUR': 'Der Betrag muss mindestens 10 Euro sein',
2232
- 'sections.shopCheckout.contributionValue.validation.tooLow.CHF': 'Der Betrag muss mindestens 10 CHF sein',
2233
- 'sections.shopCheckout.contributionValue.validation.tooHigh': 'For bigger purchases please contact our sales team via office@tree.ly',
2234
- 'sections.shopCheckout.summary.kg': 'Quantity',
2235
- 'sections.shopCheckout.summary.price': 'Price',
2236
- 'sections.shopCheckout.submit': 'Checkout'
2237
- };
2238
-
2239
- var creditsAvailableBadgeMessagesEn = {
2240
- 'components.creditsAvailableBadge.text.yes': 'Credits available',
2241
- 'components.creditsAvailableBadge.text.some': 'Some remaining credits',
2242
- 'components.creditsAvailableBadge.text.no': 'No remaining credits',
2243
- 'components.creditsAvailableBadge.text.notYet': 'No credits available yet'
2244
- };
2245
-
2246
- var portfolioDocumentsDownloadListMessagesEn = {
2247
- 'features.portfolio.documentsDownloadList.projectDocuments': 'Project documents',
2248
- 'features.portfolio.documentsDownloadList.downloadDocument': 'Download document'
2249
- };
2250
-
2251
- var portfolioProjectInfoMessagesEn = {
2252
- 'features.projectInfo.projectInfo.value': 'Project Infos',
2253
- 'features.projectInfo.properties.area': 'Project Area',
2254
- 'features.projectInfo.properties.location': 'Location',
2255
- 'features.projectInfo.properties.start': 'Project Start Date',
2256
- 'features.projectInfo.properties.timeSpan': 'Project Time Span',
2257
- 'features.projectInfo.properties.projectType': 'Project Type',
2258
- 'features.projectInfo.properties.projectDeveloper': 'Project Developer',
2259
- 'features.projectInfo.properties.verificationStandard.label': 'Verification Standard',
2260
- 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14': 'SILVACONSULT® Forest Carbon Standard, ISO 14064-2',
2261
- 'features.projectInfo.properties.forecastedAmountYear.label': 'Project Volume',
2262
- 'features.projectInfo.properties.riskBuffer': 'Risk Buffer Share',
2263
- 'features.projectInfo.properties.year': '{years} {years, plural, one {year} other {years} }'
2264
- };
2265
-
2266
- var portfolioSmallCheckoutMessagesEn = {
2267
- 'portfolio.smallCheckout.contributionValueCurrency.label.CHF': 'Contribution Amount in CHF',
2268
- 'portfolio.smallCheckout.contributionValueCurrency.label.EUR': 'Contribution Amount in €',
2269
- 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',
2270
- 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'CHF',
2271
- 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF': 'The value must be at least 10 CHF',
2272
- 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR': 'The value must be at least 10 Euro',
2273
- 'portfolio.smallCheckout.contributionValueCurrency.validation.empty': 'Please enter a value',
2274
- 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh': 'For bigger purchases please contact our sales team via office@tree.ly',
2275
- 'portfolio.smallCheckout.contributionValueKgs.label': 'Contribution Amount in Tons',
2276
- 'portfolio.smallCheckout.submitButton': 'Buy credits',
2277
- 'portfolio.smallCheckout.cta.title': 'Looking to buy more than 10.000 tCO₂?',
2278
- 'portfolio.smallCheckout.cta.subTitle': 'For enterprise-customers we offer custom solutions. Feel free to contact us.',
2279
- 'portfolio.smallCheckout.cta.button': 'Contact our Sales Team'
2280
- };
2281
-
2282
- var rootMessagesEn = /*#__PURE__*/_extends({}, creditsAvailableBadgeMessagesEn, portfolioDocumentsDownloadListMessagesEn, portfolioProjectInfoMessagesEn, portfolioSmallCheckoutMessagesEn, comparisonMessagesEn, ctaMessagesEn, customerStoriesEn, glossaryMessagesEn, projectFactsMessagesEn, projectsMapMessagesEn, shopCheckoutMessagesEn, unitMessagesEn);
2283
-
2284
- var _templateObject$3;
2285
- var GLOBAL_STYLE = /*#__PURE__*/css(_templateObject$3 || (_templateObject$3 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n // GintoNord\n @font-face {\n font-family: 'GintoNord';\n src: url('", "/assets/v3/fonts/ABCGintoNord-Bold.woff2')\n format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n // Inter\n @font-face {\n font-family: 'Inter';\n src: url('", "/assets/v3/fonts/Inter-Regular.woff2') format('woff2');\n font-style: normal;\n font-weight: 400;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('", "/assets/v3/fonts/Inter-Medium.woff2') format('woff2');\n font-style: normal;\n font-weight: 500;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('", "/assets/v3/fonts/Inter-SemiBold.woff2') format('woff2');\n font-style: normal;\n font-weight: 600;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('", "/assets/v3/fonts/Inter-Bold.woff2') format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n // SpaceMono\n @font-face {\n font-family: 'SpaceMono';\n src: url('", "/assets/v3/fonts/SpaceMono-Bold.woff2') format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n\n :root {\n --default-hero-height: calc(100vh - var(--boemly-space-24));\n }\n\n a {\n text-decoration: none;\n }\n"])), CDN_URI, CDN_URI, CDN_URI, CDN_URI, CDN_URI, CDN_URI);
2286
-
2287
- var FONT_CUSTOMIZATIONS = {
2288
- body: 'Inter',
2289
- heading: 'Inter',
2290
- display: 'GintoNord',
2291
- mono: 'SpaceMono'
2292
- };
2293
-
2294
- var cache = /*#__PURE__*/createIntlCache();
2295
- var intlFactory = function intlFactory(locale) {
2296
- return createIntl({
2297
- locale: locale,
2298
- messages: {
2299
- de: rootMessagesDe,
2300
- en: rootMessagesEn
2301
- }[locale]
2302
- }, cache);
2303
- };
2304
- var IntlContext = /*#__PURE__*/createContext( /*#__PURE__*/intlFactory('en'));
2305
- var ContextProvider = function ContextProvider(_ref) {
2306
- var children = _ref.children,
2307
- locale = _ref.locale;
2308
- return React.createElement(BoemlyThemeProvider, {
2309
- fonts: FONT_CUSTOMIZATIONS
2310
- }, React.createElement(Global, {
2311
- styles: {
2312
- GLOBAL_STYLE: GLOBAL_STYLE
2313
- }
2314
- }), React.createElement(IntlContext.Provider, {
2315
- value: intlFactory(locale)
2316
- }, children));
2317
- };
2318
-
2319
- var Blog = function Blog(_ref) {
2320
- var slice = _ref.slice,
2321
- blogPosts = _ref.blogPosts;
2322
- var _useContext = useContext(IntlContext),
2323
- formatDate = _useContext.formatDate;
2324
- var sortedBlogPosts = slice.blog_posts.sort(function (a, b) {
2325
- return new Date(b.attributes.createdAt).getTime() - new Date(a.attributes.createdAt).getTime();
2326
- });
2327
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(SimpleGrid, {
2328
- columns: [1, null, null, 2],
2329
- spacingX: 56,
2330
- spacingY: 24
2331
- }, sortedBlogPosts.map(function (_ref2) {
2332
- var attributes = _ref2.attributes;
2333
- var blogPost = blogPosts.find(function (bp) {
2334
- return bp.attributes.slug === attributes.slug;
2335
- });
2336
- if (!blogPost) {
2337
- return null;
2338
- }
2339
- return React.createElement(BlogItemContainer, {
2340
- key: blogPost.attributes.slug,
2341
- as: Link,
2342
- href: "/blog/" + blogPost.attributes.slug
2343
- }, React.createElement(ImageContainer$1, null, React.createElement(Image, {
2344
- src: strapiMediaUrl(blogPost.attributes.img.img, 'large'),
2345
- alt: blogPost.attributes.img.alt,
2346
- fill: true,
2347
- style: {
2348
- objectFit: blogPost.attributes.img.objectFit || 'cover'
2349
- }
2350
- })), React.createElement(Box, {
2351
- px: "2",
2352
- py: "8"
2353
- }, blogPost.attributes.category && React.createElement(Text, {
2354
- size: "smMonoUppercase",
2355
- color: "primary.800",
2356
- mb: "2"
2357
- }, blogPost.attributes.category.data.attributes.name), React.createElement(Heading, {
2358
- size: "lg"
2359
- }, blogPost.attributes.title), blogPost.attributes.teaser && React.createElement(Text, {
2360
- size: "mdRegularNormal",
2361
- mt: "2"
2362
- }, blogPost.attributes.teaser), React.createElement(Spacer, {
2363
- height: "4"
2364
- }), React.createElement(DatePersonPair, {
2365
- date: formatDate(blogPost.attributes.createdAt),
2366
- person: blogPost.attributes.author ? {
2367
- name: blogPost.attributes.author.data.attributes.name,
2368
- image: React.createElement(Image, {
2369
- src: strapiMediaUrl(blogPost.attributes.author.data.attributes.img.img, 'thumbnail'),
2370
- alt: blogPost.attributes.author.data.attributes.img.alt,
2371
- fill: true,
2372
- style: {
2373
- objectFit: blogPost.attributes.author.data.attributes.img.objectFit || 'cover'
2374
- }
2375
- })
2376
- } : undefined
2377
- })));
2378
- }))));
2379
- };
2380
-
2381
- var ConditionalWrapper = function ConditionalWrapper(_ref) {
2382
- var condition = _ref.condition,
2383
- wrapper = _ref.wrapper,
2384
- children = _ref.children;
2385
- return condition ? wrapper(children) : children;
2386
- };
2387
- var ProjectsGrid = function ProjectsGrid(_ref2) {
2388
- var slice = _ref2.slice;
2389
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(SimpleGrid, {
2390
- columns: [1, null, null, 2, null, 3],
2391
- gap: "16"
2392
- }, slice.projects.map(function (card) {
2393
- var _card$project;
2394
- return React.createElement(ConditionalWrapper, {
2395
- key: card.id,
2396
- condition: !!((_card$project = card.project) != null && _card$project.data),
2397
- wrapper: function wrapper(children) {
2398
- var _card$project2;
2399
- return React.createElement(Link, {
2400
- href: "/portfolio/" + ((_card$project2 = card.project) == null || (_card$project2 = _card$project2.data) == null ? void 0 : _card$project2.attributes.slug),
2401
- passHref: true,
2402
- key: card.id,
2403
- legacyBehavior: true
2404
- }, children);
2405
- }
2406
- }, React.createElement(Box, {
2407
- as: "a",
2408
- cursor: "pointer",
2409
- borderRadius: "2xl",
2410
- width: "fit-content",
2411
- height: "fit-content",
2412
- transition: "box-shadow ease " + MEDIUM_TRANSITION_DURATION + "s",
2413
- _hover: {
2414
- boxShadow: 'lg'
2415
- }
2416
- }, React.createElement(ProjectCard, {
2417
- title: card.title,
2418
- facts: card.facts,
2419
- footerTitle: card.footerTitle,
2420
- footerSubTitle: card.footerSubTitle,
2421
- image: React.createElement(Image, {
2422
- src: strapiMediaUrl(card.image.img, 'medium'),
2423
- alt: card.image.alt,
2424
- fill: true,
2425
- style: {
2426
- objectFit: card.image.objectFit || 'cover'
2427
- }
2428
- })
2429
- })));
2430
- }))));
2431
- };
2432
-
2433
- var MAPBOX_TOKEN = 'pk.eyJ1IjoidHJlZS1seSIsImEiOiJja25rNG1heHgwNThjMnZwZTl2eThmeXUwIn0.SOrYUKfevZkbx8jZPxJesA';
2434
- var MapBoxStyle;
2435
- (function (MapBoxStyle) {
2436
- MapBoxStyle["Outdoors"] = "mapbox://styles/mapbox/outdoors-v11";
2437
- MapBoxStyle["SatelliteStreets"] = "mapbox://styles/mapbox/satellite-streets-v11";
2438
- MapBoxStyle["Satellite"] = "mapbox://styles/mapbox/satellite-v9";
2439
- MapBoxStyle["CaliTerrain"] = "mapbox://styles/tree-ly/clna54iq603ht01pbc199cszw";
2440
- })(MapBoxStyle || (MapBoxStyle = {}));
2441
- (process.env.NEXT_PUBLIC_MAPBOX_TILES_URL || 'http://localhost:8123') + "/vectortiles/v1/plots/{z}/{x}/{y}.mvt";
2442
- var MAPBOX_MAX_ZOOM = 19;
2443
- var MAPBOX_INITIAL_ZOOM = 13;
2444
-
2445
- var mergeBoundingBoxes = function mergeBoundingBoxes(boundingBoxes) {
2446
- var minLeft = 180;
2447
- var minBottom = 90;
2448
- var maxRight = -180;
2449
- var maxTop = -90;
2450
- boundingBoxes.forEach(function (_ref) {
2451
- var left = _ref[0],
2452
- bottom = _ref[1],
2453
- right = _ref[2],
2454
- top = _ref[3];
2455
- if (left < minLeft) minLeft = left;
2456
- if (bottom < minBottom) minBottom = bottom;
2457
- if (right > maxRight) maxRight = right;
2458
- if (top > maxTop) maxTop = top;
2459
- });
2460
- return [minLeft, minBottom, maxRight, maxTop];
2461
- };
2462
-
2463
- var messages = {
2464
- en: rootMessagesEn,
2465
- de: rootMessagesDe
2466
- };
2467
- var MinimalProviders = function MinimalProviders(_ref) {
2468
- var children = _ref.children,
2469
- locale = _ref.locale;
2470
- return React.createElement(IntlProvider, {
2471
- messages: messages[locale],
2472
- locale: locale
2473
- }, React.createElement(BoemlyThemeProvider, {
2474
- fonts: FONT_CUSTOMIZATIONS
2475
- }, children));
2476
- };
2477
-
2478
- var CreditsAvailableState;
2479
- (function (CreditsAvailableState) {
2480
- CreditsAvailableState["YES"] = "yes";
2481
- CreditsAvailableState["SOME"] = "some";
2482
- CreditsAvailableState["NO"] = "no";
2483
- CreditsAvailableState["NOT_YET"] = "notYet";
2484
- })(CreditsAvailableState || (CreditsAvailableState = {}));
2485
- var CreditsAvailableState$1 = CreditsAvailableState;
2486
-
2487
- var CreditsAvailableBadge = function CreditsAvailableBadge(_ref) {
2488
- var _variants;
2489
- var status = _ref.status,
2490
- href = _ref.href;
2491
- var _useContext = useContext(IntlContext),
2492
- formatMessage = _useContext.formatMessage;
2493
- var variants = (_variants = {}, _variants[CreditsAvailableState$1.YES] = {
2494
- color: 'green',
2495
- text: formatMessage({
2496
- id: 'components.creditsAvailableBadge.text.yes'
2497
- })
2498
- }, _variants[CreditsAvailableState$1.SOME] = {
2499
- color: 'orange',
2500
- text: formatMessage({
2501
- id: 'components.creditsAvailableBadge.text.some'
2502
- })
2503
- }, _variants[CreditsAvailableState$1.NO] = {
2504
- color: 'red',
2505
- text: formatMessage({
2506
- id: 'components.creditsAvailableBadge.text.no'
2507
- })
2508
- }, _variants[CreditsAvailableState$1.NOT_YET] = {
2509
- color: 'blue',
2510
- text: formatMessage({
2511
- id: 'components.creditsAvailableBadge.text.notYet'
2512
- })
2513
- }, _variants);
2514
- var variant = variants[status];
2515
- return React.createElement(Badge, {
2516
- as: href ? Link : undefined,
2517
- href: href,
2518
- colorScheme: variant.color,
2519
- width: "fit-content"
2520
- }, variant.text);
2521
- };
2522
-
2523
- var MapMarker = function MapMarker(_ref) {
2524
- var title = _ref.title,
2525
- projectDeveloper = _ref.projectDeveloper,
2526
- slug = _ref.slug,
2527
- creditsAvailable = _ref.creditsAvailable,
2528
- _ref$isPublic = _ref.isPublic,
2529
- isPublic = _ref$isPublic === void 0 ? false : _ref$isPublic;
2530
- var _useContext = useContext(IntlContext),
2531
- formatMessage = _useContext.formatMessage;
2532
- var _useDisclosure = useDisclosure(),
2533
- isOpen = _useDisclosure.isOpen,
2534
- onOpen = _useDisclosure.onOpen,
2535
- onClose = _useDisclosure.onClose;
2536
- var blue600 = useToken('colors', 'blue.600');
2537
- return React.createElement(Flex, {
2538
- position: "absolute",
2539
- gap: "4",
2540
- onMouseEnter: onOpen,
2541
- onMouseLeave: onClose,
2542
- cursor: "grab"
2543
- }, React.createElement(Box, {
2544
- as: slug ? Link : undefined,
2545
- href: slug && "/portfolio/" + slug
2546
- }, React.createElement(MapPin, {
2547
- size: "40px",
2548
- color: blue600,
2549
- weight: "fill",
2550
- "data-testid": "mapmarker-pin",
2551
- filter: "drop-shadow(0px 0px 2px #FFF)"
2552
- })), isPublic && isOpen && React.createElement(Container, {
2553
- shadow: "md",
2554
- width: "max-content",
2555
- minWidth: "3xs",
2556
- maxWidth: ['3xs', null, null, 'sm']
2557
- }, React.createElement(Flex, {
2558
- direction: "column"
2559
- }, creditsAvailable && React.createElement(React.Fragment, null, React.createElement(CreditsAvailableBadge, {
2560
- status: creditsAvailable,
2561
- href: slug && "/portfolio/" + slug
2562
- }), React.createElement(Box, {
2563
- height: "3"
2564
- })), React.createElement(Heading, {
2565
- size: "md"
2566
- }, title), projectDeveloper && React.createElement(Text, {
2567
- size: "smLowNormal",
2568
- mt: "1"
2569
- }, projectDeveloper), slug && React.createElement(Button, {
2570
- width: "fit-content",
2571
- variant: "outline",
2572
- size: "sm",
2573
- as: Link,
2574
- href: "/portfolio/" + slug,
2575
- mt: "4",
2576
- whiteSpace: "nowrap"
2577
- }, formatMessage({
2578
- id: 'sections.projectsMap.link.text'
2579
- })))));
2580
- };
2581
-
2582
- var _templateObject$2;
2583
- var mapboxStyle = /*#__PURE__*/css(_templateObject$2 || (_templateObject$2 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n .mapboxgl-map {\n -webkit-tap-highlight-color: rgb(0 0 0/0);\n font: 12px/20px Helvetica Neue, Arial, Helvetica, sans-serif;\n overflow: hidden;\n position: relative;\n }\n .mapboxgl-canvas {\n left: 0;\n position: absolute;\n top: 0;\n }\n .mapboxgl-map:-webkit-full-screen {\n height: 100%;\n width: 100%;\n }\n .mapboxgl-canary {\n background-color: salmon;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass {\n cursor: grab;\n -webkit-user-select: none;\n user-select: none;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer {\n cursor: pointer;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive:active,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active {\n cursor: grabbing;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas {\n touch-action: pinch-zoom;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan\n .mapboxgl-canvas {\n touch-action: none;\n }\n .mapboxgl-ctrl-bottom-left,\n .mapboxgl-ctrl-bottom-right,\n .mapboxgl-ctrl-top-left,\n .mapboxgl-ctrl-top-right {\n pointer-events: none;\n position: absolute;\n z-index: 2;\n }\n .mapboxgl-ctrl-top-left {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-right {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left {\n bottom: 0;\n left: 0;\n }\n .mapboxgl-ctrl-bottom-right {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl {\n clear: both;\n pointer-events: auto;\n transform: translate(0);\n }\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl {\n float: left;\n margin: 10px 0 0 10px;\n }\n .mapboxgl-ctrl-top-right .mapboxgl-ctrl {\n float: right;\n margin: 10px 10px 0 0;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl {\n float: left;\n margin: 0 0 10px 10px;\n }\n .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl {\n float: right;\n margin: 0 10px 10px 0;\n }\n .mapboxgl-ctrl-group {\n background: #fff;\n border-radius: 4px;\n }\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px ButtonText;\n }\n }\n .mapboxgl-ctrl-group button {\n background-color: transparent;\n border: 0;\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n height: 29px;\n outline: none;\n overflow: hidden;\n padding: 0;\n width: 29px;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid #ddd;\n }\n .mapboxgl-ctrl button .mapboxgl-ctrl-icon {\n background-position: 50%;\n background-repeat: no-repeat;\n display: block;\n height: 100%;\n width: 100%;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-icon {\n background-color: transparent;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid ButtonText;\n }\n }\n .mapboxgl-ctrl-attrib-button:focus,\n .mapboxgl-ctrl-group button:focus {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl button:disabled {\n cursor: not-allowed;\n }\n .mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon {\n opacity: 0.25;\n }\n .mapboxgl-ctrl-group button:first-child {\n border-radius: 4px 4px 0 0;\n }\n .mapboxgl-ctrl-group button:last-child {\n border-radius: 0 0 4px 4px;\n }\n .mapboxgl-ctrl-group button:only-child {\n border-radius: inherit;\n }\n .mapboxgl-ctrl button:not(:disabled):hover {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-ctrl-group button:focus:focus-visible {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl-group button:focus:not(:focus-visible) {\n box-shadow: none;\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23999'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting\n .mapboxgl-ctrl-icon {\n animation: mapboxgl-spin 2s linear infinite;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n }\n @keyframes mapboxgl-spin {\n 0% {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(1turn);\n }\n }\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='0.3' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='0.9' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n cursor: pointer;\n display: block;\n height: 23px;\n margin: 0 0 -4px -4px;\n overflow: hidden;\n width: 88px;\n }\n a.mapboxgl-ctrl-logo.mapboxgl-compact {\n width: 23px;\n }\n @media (-ms-high-contrast: active) {\n a.mapboxgl-ctrl-logo {\n background-color: transparent;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23fff' stroke-width='3' fill='%23fff'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23000'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl.mapboxgl-ctrl-attrib {\n background-color: hsla(0, 0%, 100%, 0.5);\n margin: 0;\n padding: 0 5px;\n }\n @media screen {\n .mapboxgl-ctrl-attrib.mapboxgl-compact {\n background-color: #fff;\n border-radius: 12px;\n margin: 10px;\n min-height: 20px;\n padding: 2px 24px 2px 0;\n position: relative;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n padding: 2px 28px 2px 8px;\n visibility: visible;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show,\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n border-radius: 12px;\n padding: 2px 8px 2px 28px;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner {\n display: none;\n }\n .mapboxgl-ctrl-attrib-button {\n background-color: hsla(0, 0%, 100%, 0.5);\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n border: 0;\n border-radius: 12px;\n box-sizing: border-box;\n cursor: pointer;\n display: none;\n height: 24px;\n outline: none;\n position: absolute;\n right: 0;\n top: 0;\n width: 24px;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button {\n left: 0;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner {\n display: block;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl-top-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n left: 0;\n }\n }\n @media screen and (-ms-high-contrast: active) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n @media screen and (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl-attrib a {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n }\n .mapboxgl-ctrl-attrib a:hover {\n color: inherit;\n text-decoration: underline;\n }\n .mapboxgl-ctrl-attrib .mapbox-improve-map {\n font-weight: 700;\n margin-left: 2px;\n }\n .mapboxgl-attrib-empty {\n display: none;\n }\n .mapboxgl-ctrl-scale {\n background-color: hsla(0, 0%, 100%, 0.75);\n border: 2px solid #333;\n border-top: #333;\n box-sizing: border-box;\n color: #333;\n font-size: 10px;\n padding: 0 5px;\n white-space: nowrap;\n }\n .mapboxgl-popup {\n display: flex;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n will-change: transform;\n }\n .mapboxgl-popup-anchor-top,\n .mapboxgl-popup-anchor-top-left,\n .mapboxgl-popup-anchor-top-right {\n flex-direction: column;\n }\n .mapboxgl-popup-anchor-bottom,\n .mapboxgl-popup-anchor-bottom-left,\n .mapboxgl-popup-anchor-bottom-right {\n flex-direction: column-reverse;\n }\n .mapboxgl-popup-anchor-left {\n flex-direction: row;\n }\n .mapboxgl-popup-anchor-right {\n flex-direction: row-reverse;\n }\n .mapboxgl-popup-tip {\n border: 10px solid transparent;\n height: 0;\n width: 0;\n z-index: 1;\n }\n .mapboxgl-popup-anchor-top .mapboxgl-popup-tip {\n align-self: center;\n border-bottom-color: #fff;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom-color: #fff;\n border-left: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom-color: #fff;\n border-right: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip {\n align-self: center;\n border-bottom: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom: none;\n border-left: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom: none;\n border-right: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-left .mapboxgl-popup-tip {\n align-self: center;\n border-left: none;\n border-right-color: #fff;\n }\n .mapboxgl-popup-anchor-right .mapboxgl-popup-tip {\n align-self: center;\n border-left-color: #fff;\n border-right: none;\n }\n .mapboxgl-popup-close-button {\n background-color: transparent;\n border: 0;\n border-radius: 0 3px 0 0;\n cursor: pointer;\n position: absolute;\n right: 0;\n top: 0;\n }\n .mapboxgl-popup-close-button:hover {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-popup-content {\n background: #fff;\n border-radius: 3px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n padding: 10px 10px 15px;\n pointer-events: auto;\n position: relative;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-content {\n border-top-left-radius: 0;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-content {\n border-top-right-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content {\n border-bottom-left-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content {\n border-bottom-right-radius: 0;\n }\n .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-popup-track-pointer * {\n pointer-events: none;\n user-select: none;\n }\n .mapboxgl-map:hover .mapboxgl-popup-track-pointer {\n display: flex;\n }\n .mapboxgl-map:active .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-marker {\n left: 0;\n opacity: 1;\n position: absolute;\n top: 0;\n transition: opacity 0.2s;\n will-change: transform;\n }\n .mapboxgl-user-location-dot,\n .mapboxgl-user-location-dot:before {\n background-color: #1da1f2;\n border-radius: 50%;\n height: 15px;\n width: 15px;\n }\n .mapboxgl-user-location-dot:before {\n animation: mapboxgl-user-location-dot-pulse 2s infinite;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-dot:after {\n border: 2px solid #fff;\n border-radius: 50%;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.35);\n box-sizing: border-box;\n content: '';\n height: 19px;\n left: -2px;\n position: absolute;\n top: -2px;\n width: 19px;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading {\n height: 0;\n width: 0;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-bottom: 7.5px solid #4aa1eb;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-left: 7.5px solid transparent;\n transform: translateY(-28px) skewY(-20deg);\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after {\n border-right: 7.5px solid transparent;\n transform: translate(7.5px, -28px) skewY(20deg);\n }\n @keyframes mapboxgl-user-location-dot-pulse {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 70% {\n opacity: 0;\n transform: scale(3);\n }\n to {\n opacity: 0;\n transform: scale(1);\n }\n }\n .mapboxgl-user-location-dot-stale {\n background-color: #aaa;\n }\n .mapboxgl-user-location-dot-stale:after {\n display: none;\n }\n .mapboxgl-user-location-accuracy-circle {\n background-color: #1da1f233;\n border-radius: 100%;\n height: 1px;\n width: 1px;\n }\n .mapboxgl-crosshair,\n .mapboxgl-crosshair .mapboxgl-interactive,\n .mapboxgl-crosshair .mapboxgl-interactive:active {\n cursor: crosshair;\n }\n .mapboxgl-boxzoom {\n background: #fff;\n border: 2px dotted #202020;\n height: 0;\n left: 0;\n opacity: 0.5;\n position: absolute;\n top: 0;\n width: 0;\n }\n @media print {\n .mapbox-improve-map {\n display: none;\n }\n }\n .mapboxgl-scroll-zoom-blocker,\n .mapboxgl-touch-pan-blocker {\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n display: flex;\n font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif;\n height: 100%;\n justify-content: center;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n text-align: center;\n top: 0;\n transition: opacity 0.75s ease-in-out;\n transition-delay: 1s;\n width: 100%;\n }\n .mapboxgl-scroll-zoom-blocker-show,\n .mapboxgl-touch-pan-blocker-show {\n opacity: 1;\n transition: opacity 0.1s ease-in-out;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page,\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page\n .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n"])));
2584
-
2585
- var _templateObject$1;
2586
- mapboxgl.accessToken = MAPBOX_TOKEN;
2587
- var ProjectsMap = function ProjectsMap(_ref) {
2588
- var slice = _ref.slice,
2589
- projects = _ref.projects;
2590
- var _useContext = useContext(IntlContext),
2591
- locale = _useContext.locale;
2592
- var filteredProjects = projects.filter(function (project) {
2593
- return project.geom;
2594
- });
2595
- var center = slice.defaultCenterCoordinates ? [slice.defaultCenterCoordinates.longitude, slice.defaultCenterCoordinates.latitude] : undefined;
2596
- var bounds = center ? undefined : mergeBoundingBoxes(filteredProjects.map(function (p) {
2597
- return [].concat(p.geom.coordinates.map(function (c) {
2598
- return c - 0.2;
2599
- }), p.geom.coordinates.map(function (c) {
2600
- return c + 0.2;
2601
- }));
2602
- }));
2603
- var mapContainer = useRef(null);
2604
- useEffect(function () {
2605
- var map = new Map({
2606
- container: mapContainer.current || '',
2607
- style: MapBoxStyle.CaliTerrain,
2608
- center: center,
2609
- zoom: slice.defaultZoomLevel || MAPBOX_INITIAL_ZOOM,
2610
- maxZoom: MAPBOX_MAX_ZOOM,
2611
- bounds: bounds
2612
- });
2613
- filteredProjects
2614
- // Sort by longitude, so that the markers are rendeed form right to left
2615
- .sort(function (a, b) {
2616
- return b.geom.coordinates[0] - a.geom.coordinates[0];
2617
- }).forEach(function (project) {
2618
- var _project$projectDevel;
2619
- var ref = createRef();
2620
- ref.current = document.createElement('div');
2621
- createRoot(ref.current).render(React.createElement(MinimalProviders, {
2622
- locale: locale
2623
- }, React.createElement(MapMarker, {
2624
- title: project.title,
2625
- isPublic: project.isPublic,
2626
- slug: project.slug,
2627
- creditsAvailable: project.creditsAvailable,
2628
- projectDeveloper: (_project$projectDevel = project.projectDeveloper) == null ? void 0 : _project$projectDevel.name
2629
- })));
2630
- // Offset is needed to center the marker on the coordinates
2631
- var marker = new Marker(ref.current, {
2632
- offset: [-20, -40]
2633
- });
2634
- // No chaining here, because the mocks don't support it
2635
- marker.setLngLat(project.geom.coordinates);
2636
- marker.addTo(map);
2637
- });
2638
- // Clean up on unmount
2639
- return function () {
2640
- return map.remove();
2641
- };
2642
- }, [locale]);
2643
- return React.createElement(DefaultSectionContainer, null, React.createElement(Box, {
2644
- css: mapboxStyle
2645
- }, React.createElement(Wrapper, null, slice.title ? React.createElement(React.Fragment, null, React.createElement(DefaultSectionHeader, {
2646
- tagline: slice.tagline,
2647
- title: slice.title,
2648
- text: slice.text,
2649
- taglineProps: {
2650
- textAlign: 'center'
2651
- },
2652
- titleProps: {
2653
- textAlign: 'center',
2654
- maxW: '6xl',
2655
- marginX: 'auto'
2656
- },
2657
- textProps: {
2658
- textAlign: 'center',
2659
- maxW: '3xl',
2660
- marginX: 'auto'
2661
- }
2662
- }), React.createElement(Box, {
2663
- height: "16"
2664
- })) : React.createElement(React.Fragment, null), React.createElement(Box, {
2665
- height: "xl",
2666
- ref: mapContainer,
2667
- borderRadius: "xl",
2668
- overflow: "hidden",
2669
- boxShadow: ['md', null, null, 'none'],
2670
- css: css(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose(["\n mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);\n "])))
2671
- }))));
2672
- };
2673
-
2674
- var Video = function Video(_ref) {
2675
- var slice = _ref.slice;
2676
- var _useMeasure = useMeasure(),
2677
- ref = _useMeasure[0],
2678
- width = _useMeasure[1].width;
2679
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(Box, {
2680
- ref: ref,
2681
- borderRadius: "xl"
2682
- }, React.createElement("iframe", {
2683
- "data-testid": "video-iframe",
2684
- width: width,
2685
- height: width / 16 * 9,
2686
- src: "https://www.youtube.com/embed/" + slice.youTubeID,
2687
- frameBorder: "0",
2688
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
2689
- allowFullScreen: true,
2690
- title: slice.title,
2691
- style: {
2692
- borderRadius: 'var(--boemly-radii-xl)'
2693
- }
2694
- }))));
2695
- };
2696
-
2697
- var FullWidthHighlightQuote = function FullWidthHighlightQuote(_ref) {
2698
- var slice = _ref.slice;
2699
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(Box, {
2700
- maxWidth: "5xl",
2701
- marginX: "auto",
2702
- mb: "8"
2703
- }, slice.tagline && React.createElement(Text, {
2704
- color: "primary.700",
2705
- size: "mdMonoUppercase",
2706
- textAlign: "center",
2707
- mb: "3"
2708
- }, slice.tagline), React.createElement(Text, {
2709
- color: "black",
2710
- size: "xlRegularNormalBold",
2711
- textAlign: "center"
2712
- }, slice.quote)), React.createElement(AvatarWithName, {
2713
- name: slice.avatarWithName.name,
2714
- description: slice.avatarWithName.description,
2715
- image: React.createElement(Image, {
2716
- src: strapiMediaUrl(slice.avatarWithName.image.img, 'small'),
2717
- alt: slice.avatarWithName.image.alt,
2718
- fill: true,
2719
- style: {
2720
- objectFit: slice.avatarWithName.image.objectFit || 'cover'
2721
- }
2722
- }),
2723
- orientation: "vertical"
2724
- })));
2725
- };
2726
-
2727
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
2728
- var SliderContainer = /*#__PURE__*/styled(Box)(_templateObject || (_templateObject = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n --mobile-image-width: calc(100vw - var(--boemly-space-24));\n --desktop-image-width: var(--boemly-sizes-md);\n\n width: var(--boemly-size-full);\n\n overflow-x: hidden;\n\n padding-left: max(\n var(--boemly-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-6))\n );\n\n @media screen and (max-width: ", ") {\n overflow-x: scroll;\n padding-left: max(\n var(--boemly-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-8))\n );\n }\n"])), BREAKPOINT_MD);
2729
- var ButtonsContainer = /*#__PURE__*/styled(Box)(_templateObject2 || (_templateObject2 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: ", ";\n pointer-events: none;\n\n // Place at 50% of height of tallest image minus size of button\n position: absolute;\n top: calc(50% - var(--boemly-sizes-12));\n left: 0;\n width: var(--boemly-sizes-full);\n\n padding: 0 var(--boemly-sizes-32);\n justify-content: space-between;\n\n @media screen and (max-width: ", ") {\n display: none;\n }\n"])), function (_ref) {
2730
- var show = _ref.show;
2731
- return show ? 'flex' : 'none';
2732
- }, BREAKPOINT_MD);
2733
- var SliderInnerContainer = /*#__PURE__*/styled(motion.div)(_templateObject3 || (_templateObject3 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n gap: var(--boemly-space-6);\n\n width: fit-content;\n"])));
2734
- var ItemContainer = /*#__PURE__*/styled(Box)(_templateObject4 || (_templateObject4 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n width: var(--desktop-image-width);\n\n :last-of-type {\n margin-right: var(--boemly-space-8);\n }\n\n @media screen and (max-width: ", ") {\n width: var(--mobile-image-width);\n }\n"])), BREAKPOINT_MD);
2735
- var ImageContainer = /*#__PURE__*/styled(Box)(_templateObject5 || (_templateObject5 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: relative;\n\n max-height: var(--boemly-sizes-xl);\n height: calc(\n var(--desktop-image-width) /\n ", "\n );\n width: var(--desktop-image-width);\n\n border-radius: var(--boemly-radii-xl);\n\n & img {\n border-radius: var(--boemly-radii-xl);\n }\n\n @media screen and (max-width: ", ") {\n height: calc(\n var(--mobile-image-width) /\n ", "\n );\n width: var(--mobile-image-width);\n }\n"])), function (_ref2) {
2736
- var aspectRatio = _ref2.aspectRatio;
2737
- return aspectRatio;
2738
- }, BREAKPOINT_MD, function (_ref3) {
2739
- var aspectRatio = _ref3.aspectRatio;
2740
- return aspectRatio;
2741
- });
2742
-
2743
- var ALLOWED_RATIOS = [2 / 3, 1 / 1, 3 / 2];
2744
- var getClosestRatio = function getClosestRatio(width, height) {
2745
- var ratio = width / height;
2746
- var minDiff = Math.abs(ratio - ALLOWED_RATIOS[0]);
2747
- var posMinDiff = 0;
2748
- ALLOWED_RATIOS.forEach(function (allowedRatio, index) {
2749
- if (Math.abs(ratio - allowedRatio) < minDiff) {
2750
- minDiff = Math.abs(ratio - allowedRatio);
2751
- posMinDiff = index;
2752
- }
2753
- });
2754
- return ALLOWED_RATIOS[posMinDiff];
2755
- };
2756
-
2757
- var FullWidthImageSlider = function FullWidthImageSlider(_ref) {
2758
- var slice = _ref.slice;
2759
- var containerRef = useRef(null);
2760
- var _useMeasure = useMeasure(),
2761
- imageRef = _useMeasure[0],
2762
- imageWidth = _useMeasure[1].width;
2763
- var _useWindowSize = useWindowSize(),
2764
- windowWidth = _useWindowSize.width;
2765
- var _useMediaQuery = useMediaQuery(BREAKPOINT_MD_QUERY),
2766
- isMobile = _useMediaQuery[0];
2767
- var _useState = useState(0),
2768
- sliderIndex = _useState[0],
2769
- setSliderIndex = _useState[1];
2770
- var _useState2 = useState(false),
2771
- isOpen = _useState2[0],
2772
- setIsOpen = _useState2[1];
2773
- var allowScroll = windowWidth / 2 / imageWidth < slice.images.length;
2774
- var canMoveRight = sliderIndex < slice.images.length - 1;
2775
- var canMoveLeft = sliderIndex !== 0;
2776
- return React.createElement(DefaultSectionContainer, null, React.createElement(SliderContainer, {
2777
- ref: containerRef
2778
- }, React.createElement(SliderInnerContainer, {
2779
- animate: {
2780
- x: imageWidth * -sliderIndex
2781
- },
2782
- transition: {
2783
- duration: 0.3,
2784
- ease: 'easeInOut'
2785
- },
2786
- imageCount: slice.images.length
2787
- }, slice.images.map(function (image, index) {
2788
- return React.createElement(ItemContainer, {
2789
- key: image.id,
2790
- ref: imageRef
2791
- }, React.createElement(Flex, {
2792
- height: "full",
2793
- width: "full",
2794
- justifyContent: "end",
2795
- flexDirection: "column",
2796
- gap: "2"
2797
- }, React.createElement(ImageContainer, {
2798
- aspectRatio: getClosestRatio(image.img.img.data.attributes.width, image.img.img.data.attributes.height)
2799
- }, React.createElement(Image, {
2800
- src: strapiMediaUrl(image.img.img, 'large'),
2801
- alt: image.img.alt,
2802
- fill: true,
2803
- style: {
2804
- objectFit: image.img.objectFit || 'cover',
2805
- cursor: isMobile ? 'unset' : 'pointer'
2806
- },
2807
- onClick: function onClick() {
2808
- setSliderIndex(index);
2809
- if (!isMobile) setIsOpen(true);
2810
- }
2811
- })), React.createElement(Text, {
2812
- height: "6"
2813
- }, image.caption)));
2814
- }))), React.createElement(ButtonsContainer, {
2815
- show: allowScroll && !isOpen
2816
- }, React.createElement(Box, null, React.createElement(AnimatePresence, null, canMoveLeft && React.createElement(IconButton, {
2817
- key: "leftButton",
2818
- as: motion.button,
2819
- initial: {
2820
- opacity: 0
2821
- },
2822
- animate: {
2823
- opacity: 1
2824
- },
2825
- exit: {
2826
- opacity: 0
2827
- },
2828
- size: "lg",
2829
- variant: "outline",
2830
- onClick: function onClick() {
2831
- return setSliderIndex(sliderIndex - 1);
2832
- },
2833
- "aria-label": "Move left",
2834
- icon: React.createElement(ArrowLeft, {
2835
- size: 16
2836
- }),
2837
- pointerEvents: "auto"
2838
- }))), React.createElement(Box, null, React.createElement(AnimatePresence, null, canMoveRight && React.createElement(IconButton, {
2839
- key: "rightButton",
2840
- as: motion.button,
2841
- initial: {
2842
- opacity: 0
2843
- },
2844
- animate: {
2845
- opacity: 1
2846
- },
2847
- exit: {
2848
- opacity: 0
2849
- },
2850
- size: "lg",
2851
- variant: "outline",
2852
- onClick: function onClick() {
2853
- return setSliderIndex(sliderIndex + 1);
2854
- },
2855
- "aria-label": "Move right",
2856
- icon: React.createElement(ArrowRight, {
2857
- size: 16
2858
- }),
2859
- pointerEvents: "auto"
2860
- })))), React.createElement(FullScreenImage, {
2861
- images: slice.images.map(function (image) {
2862
- return image.img;
2863
- }),
2864
- openIndex: sliderIndex,
2865
- isOpen: isOpen,
2866
- onClose: function onClose() {
2867
- return setIsOpen(false);
2868
- }
2869
- }));
2870
- };
2871
-
2872
- var SideBySideImages = function SideBySideImages(_ref) {
2873
- var slice = _ref.slice;
2874
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(Grid, {
2875
- templateColumns: "repeat(12, 1fr)",
2876
- gap: "4"
2877
- }, React.createElement(GridItem, {
2878
- colSpan: [12, null, null, 7]
2879
- }, React.createElement(SimpleGrid, {
2880
- columns: [1, null, null, 2],
2881
- gap: ['12', null, null, '6']
2882
- }, slice.images.map(function (image) {
2883
- return React.createElement(Box, {
2884
- key: image.id
2885
- }, React.createElement(Box, {
2886
- height: "md",
2887
- position: "relative",
2888
- borderRadius: "xl"
2889
- }, React.createElement(Image, {
2890
- src: strapiMediaUrl(image.img.img, 'large'),
2891
- alt: image.img.alt,
2892
- fill: true,
2893
- style: {
2894
- objectFit: image.img.objectFit || 'cover',
2895
- borderRadius: 'var(--boemly-radii-xl)'
2896
- }
2897
- })), React.createElement(Text, {
2898
- mt: "3",
2899
- size: "xsLowNormal"
2900
- }, image.caption));
2901
- }))))));
2902
- };
2903
-
2904
- var CtaCardType;
2905
- (function (CtaCardType) {
2906
- CtaCardType["Left"] = "left";
2907
- CtaCardType["CenterWithoutImage"] = "centerWithoutImage";
2908
- CtaCardType["CenterWithImage"] = "centerWithImage";
2909
- CtaCardType["Right"] = "right";
2910
- })(CtaCardType || (CtaCardType = {}));
2911
- var STATES = {
2912
- left: {
2913
- textAlign: 'left',
2914
- paddingTagline: '0',
2915
- paddingTitle: '0',
2916
- justifyContent: 'space-between',
2917
- buttonJustifyContent: 'start',
2918
- textMarginLeft: ['0', null, null, null, '14']
2919
- },
2920
- centerWithoutImage: {
2921
- textAlign: 'center',
2922
- paddingTagline: '28',
2923
- paddingTitle: '20',
2924
- justifyContent: 'center',
2925
- buttonJustifyContent: 'center',
2926
- textMarginLeft: '0'
2927
- },
2928
- centerWithImage: {
2929
- textAlign: 'center',
2930
- paddingTagline: '28',
2931
- paddingTitle: '20',
2932
- justifyContent: 'center',
2933
- buttonJustifyContent: 'center',
2934
- textMarginLeft: '0'
2935
- },
2936
- right: {
2937
- textAlign: 'left',
2938
- paddingTagline: '0',
2939
- paddingTitle: '0',
2940
- justifyContent: 'start',
2941
- buttonJustifyContent: 'start',
2942
- textMarginLeft: '0'
2943
- }
2944
- };
2945
- var VARIANTS$3 = {
2946
- gray: {
2947
- backgroundColor: {
2948
- left: 'primary.50',
2949
- centerWithoutImage: 'primary.50',
2950
- centerWithImage: 'primary.50',
2951
- right: 'primary.50'
2952
- },
2953
- taglineColor: {
2954
- left: 'primary.500',
2955
- centerWithoutImage: 'primary.500',
2956
- centerWithImage: 'white',
2957
- right: 'primary.500'
2958
- },
2959
- titleColor: {
2960
- left: 'black',
2961
- centerWithoutImage: 'black',
2962
- centerWithImage: 'white',
2963
- right: 'black'
2964
- },
2965
- subTitleColor: {
2966
- left: 'black',
2967
- centerWithoutImage: 'black',
2968
- centerWithImage: 'white',
2969
- right: 'black'
2970
- }
2971
- },
2972
- green: {
2973
- backgroundColor: {
2974
- left: 'primary.800',
2975
- centerWithoutImage: 'primary.800',
2976
- centerWithImage: 'primary.800',
2977
- right: 'primary.800'
2978
- },
2979
- taglineColor: {
2980
- left: 'white',
2981
- centerWithoutImage: 'white',
2982
- centerWithImage: 'white',
2983
- right: 'white'
2984
- },
2985
- titleColor: {
2986
- left: 'white',
2987
- centerWithoutImage: 'white',
2988
- centerWithImage: 'white',
2989
- right: 'white'
2990
- },
2991
- subTitleColor: {
2992
- left: 'white',
2993
- centerWithoutImage: 'white',
2994
- centerWithImage: 'white',
2995
- right: 'white'
2996
- }
2997
- },
2998
- white: {
2999
- backgroundColor: {
3000
- left: 'white',
3001
- centerWithoutImage: 'white',
3002
- centerWithImage: 'primary.800',
3003
- right: 'white'
3004
- },
3005
- taglineColor: {
3006
- left: 'primary.500',
3007
- centerWithoutImage: 'primary.500',
3008
- centerWithImage: 'white',
3009
- right: 'primary.500'
3010
- },
3011
- titleColor: {
3012
- left: 'black',
3013
- centerWithoutImage: 'black',
3014
- centerWithImage: 'white',
3015
- right: 'black'
3016
- },
3017
- subTitleColor: {
3018
- left: 'black',
3019
- centerWithoutImage: 'black',
3020
- centerWithImage: 'white',
3021
- right: 'black'
3022
- }
3023
- }
3024
- };
3025
- var getTypeOfCard = function getTypeOfCard(ctaCard) {
3026
- if (ctaCard.textAlign === 'center') {
3027
- if (ctaCard.image) {
3028
- return CtaCardType.CenterWithImage;
3029
- }
3030
- return CtaCardType.CenterWithoutImage;
3031
- }
3032
- if (ctaCard.textAlign === 'left') {
3033
- return CtaCardType.Left;
3034
- }
3035
- return CtaCardType.Right;
3036
- };
3037
- var Cta = function Cta(_ref) {
3038
- var slice = _ref.slice;
3039
- var _useContext = useContext(IntlContext),
3040
- formatMessage = _useContext.formatMessage;
3041
- return React.createElement(DefaultSectionContainer, {
3042
- backgroundColor: VARIANTS$3[slice.variant].backgroundColor.left
3043
- }, React.createElement(Wrapper, null, slice.title ? React.createElement(React.Fragment, null, React.createElement(Flex, {
3044
- alignItems: "center",
3045
- flexDirection: "column"
3046
- }, React.createElement(DefaultSectionHeader, {
3047
- tagline: slice.tagline,
3048
- taglineProps: {
3049
- color: VARIANTS$3[slice.variant].taglineColor.left,
3050
- textAlign: 'center',
3051
- maxWidth: '3xl'
3052
- },
3053
- title: slice.title,
3054
- titleProps: {
3055
- color: VARIANTS$3[slice.variant].titleColor.left,
3056
- textAlign: 'center',
3057
- width: 'full',
3058
- maxWidth: '3xl'
3059
- },
3060
- text: slice.subTitle,
3061
- textProps: {
3062
- color: VARIANTS$3[slice.variant].subTitleColor.left,
3063
- textAlign: 'center',
3064
- maxWidth: '3xl'
3065
- }
3066
- })), React.createElement(Spacer, {
3067
- height: ['16', null, null, null, '20']
3068
- })) : React.createElement(React.Fragment, null), React.createElement(Flex, {
3069
- gap: "4",
3070
- flexDirection: "column"
3071
- }, slice.ctaCards.map(function (ctaCard) {
3072
- var ctaCardType = getTypeOfCard(ctaCard);
3073
- return React.createElement(Container, {
3074
- backgroundColor: VARIANTS$3[ctaCard.variant].backgroundColor[ctaCardType],
3075
- key: ctaCard.id,
3076
- position: "relative",
3077
- elevation: "none"
3078
- }, ctaCard.image && ctaCardType === CtaCardType.CenterWithImage ? React.createElement(Box, {
3079
- position: "absolute",
3080
- left: "0",
3081
- top: "0",
3082
- width: "full",
3083
- height: "full",
3084
- borderRadius: "xl",
3085
- overflow: "hidden"
3086
- }, React.createElement(Image, {
3087
- src: strapiMediaUrl(ctaCard.image.img, 'large'),
3088
- alt: ctaCard.image.alt,
3089
- fill: true,
3090
- style: {
3091
- objectFit: ctaCard.image.objectFit || 'cover',
3092
- borderRadius: 'var(--boemly-radii-xl)'
3093
- }
3094
- }), React.createElement(Gradient, null)) : React.createElement(React.Fragment, null), ctaCard.backgroundShape ? React.createElement(Box, {
3095
- position: "absolute",
3096
- left: "0",
3097
- top: "0",
3098
- width: "full",
3099
- height: "full"
3100
- }, React.createElement(Image, {
3101
- src: ctaCardType === CtaCardType.CenterWithImage || ctaCard.variant === 'green' ? CDN_URI + "/assets/v3/strapi-slices/shapes-dark.svg" : CDN_URI + "/assets/v3/strapi-slices/shapes-light.svg",
3102
- alt: formatMessage({
3103
- id: "sections.cta.backgroundShapes" + (ctaCardType === CtaCardType.CenterWithImage || ctaCard.variant === 'green' ? 'Dark' : 'Light')
3104
- }),
3105
- fill: true,
3106
- style: {
3107
- objectFit: 'cover',
3108
- borderRadius: 'var(--boemly-radii-xl)'
3109
- }
3110
- })) : React.createElement(React.Fragment, null), React.createElement(Flex, {
3111
- flexDir: ['column', null, null, null, 'row'],
3112
- flexGrow: "1",
3113
- gap: ['8', null, null, null, '16'],
3114
- justifyContent: STATES[ctaCardType].justifyContent
3115
- }, ctaCard.image && ctaCardType === CtaCardType.Right ? React.createElement(Box, {
3116
- position: "relative",
3117
- height: ['3xs', null, null, null, 'auto'],
3118
- minWidth: [null, null, null, null, '50%']
3119
- }, React.createElement(Image, {
3120
- src: strapiMediaUrl(ctaCard.image.img, 'medium'),
3121
- alt: ctaCard.image.alt,
3122
- fill: true,
3123
- style: {
3124
- objectFit: ctaCard.image.objectFit || 'cover',
3125
- borderRadius: 'var(--boemly-radii-xl)'
3126
- }
3127
- })) : React.createElement(React.Fragment, null), React.createElement(Box, {
3128
- zIndex: "base",
3129
- marginLeft: STATES[ctaCardType].textMarginLeft,
3130
- maxWidth: "3xl"
3131
- }, React.createElement(Spacer, {
3132
- height: ['0', null, null, null, '20']
3133
- }), React.createElement(DefaultSectionHeader, {
3134
- tagline: ctaCard.tagline,
3135
- taglineProps: {
3136
- textAlign: STATES[ctaCardType].textAlign,
3137
- color: VARIANTS$3[ctaCard.variant].taglineColor[ctaCardType],
3138
- paddingX: ['0', null, null, null, STATES[ctaCardType].paddingTagline]
3139
- },
3140
- title: ctaCard.title,
3141
- titleProps: {
3142
- fontFamily: 'Inter',
3143
- fontSize: '4xl',
3144
- fontWeight: '600',
3145
- lineHeight: '9',
3146
- textAlign: STATES[ctaCardType].textAlign,
3147
- paddingX: ['0', null, null, null, STATES[ctaCardType].paddingTitle],
3148
- color: VARIANTS$3[ctaCard.variant].titleColor[ctaCardType]
3149
- },
3150
- text: ctaCard.subTitle,
3151
- textProps: {
3152
- textAlign: STATES[ctaCardType].textAlign,
3153
- color: VARIANTS$3[ctaCard.variant].subTitleColor[ctaCardType]
3154
- }
3155
- }), ctaCard.buttons && ctaCard.buttons.length > 0 ? React.createElement(React.Fragment, null, React.createElement(Spacer, {
3156
- height: "8"
3157
- }), React.createElement(Flex, {
3158
- gap: "2",
3159
- justifyContent: STATES[ctaCardType].buttonJustifyContent
3160
- }, ctaCard.buttons && ctaCard.buttons.map(function (button) {
3161
- return React.createElement(StrapiLinkButton, {
3162
- key: button.button.id,
3163
- link: button.button,
3164
- size: "md",
3165
- variant: button.variant
3166
- });
3167
- }))) : React.createElement(React.Fragment, null), React.createElement(Spacer, {
3168
- height: ['1', null, null, null, '20']
3169
- })), ctaCard.image && ctaCardType === CtaCardType.Left ? React.createElement(Box, {
3170
- position: "relative",
3171
- height: ['3xs', null, null, null, 'auto'],
3172
- minWidth: [null, null, null, null, '50%']
3173
- }, React.createElement(Image, {
3174
- src: strapiMediaUrl(ctaCard.image.img, 'medium'),
3175
- alt: ctaCard.image.alt,
3176
- fill: true,
3177
- style: {
3178
- objectFit: ctaCard.image.objectFit || 'cover',
3179
- borderRadius: 'var(--boemly-radii-xl)'
3180
- }
3181
- })) : React.createElement(React.Fragment, null)));
3182
- }))));
3183
- };
3184
-
3185
- var CtaOnly = function CtaOnly(_ref) {
3186
- var slice = _ref.slice;
3187
- return React.createElement(Wrapper, null, React.createElement(Box, {
3188
- position: "absolute",
3189
- top: "-28",
3190
- transform: "translateY(50%)"
3191
- }, React.createElement(StrapiLinkButton, {
3192
- size: "md",
3193
- link: slice.button
3194
- })));
3195
- };
3196
-
3197
- var Glossary = function Glossary(_ref) {
3198
- var slice = _ref.slice;
3199
- var _useCopyToClipboard = useCopyToClipboard(),
3200
- copyToClipboard = _useCopyToClipboard[1];
3201
- var _useContext = useContext(IntlContext),
3202
- formatMessage = _useContext.formatMessage;
3203
- var grouped = {};
3204
- var _useState = useState(),
3205
- copiedItem = _useState[0],
3206
- setCopiedItem = _useState[1];
3207
- slice.glossary_items.sort(function (a, b) {
3208
- return a.attributes.title.localeCompare(b.attributes.title);
3209
- }).forEach(function (curr) {
3210
- var _curr$attributes$titl;
3211
- var index = ((_curr$attributes$titl = curr.attributes.title.at(0)) == null ? void 0 : _curr$attributes$titl.toUpperCase()) || 'A';
3212
- if (!grouped[index]) {
3213
- grouped[index] = [];
3214
- }
3215
- grouped[index].push(curr.attributes);
3216
- }, {});
3217
- var handleAnchorClick = /*#__PURE__*/function () {
3218
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(slug) {
3219
- var _window;
3220
- var currentUrl;
3221
- return _regeneratorRuntime().wrap(function _callee$(_context) {
3222
- while (1) switch (_context.prev = _context.next) {
3223
- case 0:
3224
- if ((_window = window) != null && _window.location) {
3225
- currentUrl = window.location.href.split('#')[0];
3226
- copyToClipboard(currentUrl + "#" + slug);
3227
- setCopiedItem(slug);
3228
- setTimeout(function () {
3229
- setCopiedItem(undefined);
3230
- }, 1200);
3231
- }
3232
- case 1:
3233
- case "end":
3234
- return _context.stop();
3235
- }
3236
- }, _callee);
3237
- }));
3238
- return function handleAnchorClick(_x) {
3239
- return _ref2.apply(this, arguments);
3240
- };
3241
- }();
3242
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(SimpleGrid, null, Object.entries(grouped).map(function (_ref3, index) {
3243
- var letter = _ref3[0],
3244
- items = _ref3[1];
3245
- return React.createElement(GridItem, {
3246
- maxW: "xl",
3247
- placeSelf: "center",
3248
- key: letter
3249
- }, React.createElement(Heading, {
3250
- size: "3xl",
3251
- mb: "8"
3252
- }, letter), React.createElement(SimpleGrid, {
3253
- spacing: "6"
3254
- }, items.map(function (item) {
3255
- return React.createElement(GridItem, {
3256
- key: item.slug
3257
- }, React.createElement(Flex, {
3258
- mb: "2",
3259
- gap: "1.5",
3260
- alignItems: "center"
3261
- }, React.createElement(Heading, {
3262
- size: "xl",
3263
- id: item.slug,
3264
- scrollMarginTop: "calc(var(--header-height) + var(--boemly-sizes-10))"
3265
- }, item.title), React.createElement(IconButton, {
3266
- variant: "ghost",
3267
- size: "xs",
3268
- icon: copiedItem === item.slug ? React.createElement(Check, {
3269
- size: "16",
3270
- "data-testid": "check-icon"
3271
- }) : React.createElement(Link$2, {
3272
- size: "16"
3273
- }),
3274
- title: formatMessage({
3275
- id: 'sections.glossary.copyButtonLabel'
3276
- }),
3277
- "aria-label": formatMessage({
3278
- id: 'sections.glossary.copyButtonLabel'
3279
- }),
3280
- onClick: function () {
3281
- var _onClick = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
3282
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
3283
- while (1) switch (_context2.prev = _context2.next) {
3284
- case 0:
3285
- return _context2.abrupt("return", handleAnchorClick(item.slug));
3286
- case 1:
3287
- case "end":
3288
- return _context2.stop();
3289
- }
3290
- }, _callee2);
3291
- }));
3292
- function onClick() {
3293
- return _onClick.apply(this, arguments);
3294
- }
3295
- return onClick;
3296
- }()
3297
- })), React.createElement(Text, {
3298
- color: "black"
3299
- }, item.text));
3300
- })), index !== Object.keys(grouped).length - 1 && React.createElement(Divider, {
3301
- maxW: "xl",
3302
- placeSelf: "center",
3303
- mb: "10",
3304
- mt: "10"
3305
- }));
3306
- }))));
3307
- };
3308
-
3309
- var MINIMUM_CONTRIBUTION_VALUE_IN_MONEY = 10;
3310
- var MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY = 60000;
3311
-
3312
- var ShopCheckout = function ShopCheckout(_ref) {
3313
- var slice = _ref.slice;
3314
- var _useToken = useToken('colors', ['primary.50']),
3315
- primary50 = _useToken[0];
3316
- var _useContext = useContext(IntlContext),
3317
- formatMessage = _useContext.formatMessage,
3318
- formatNumber = _useContext.formatNumber,
3319
- locale = _useContext.locale;
3320
- var _useRouter = useRouter(),
3321
- push = _useRouter.push;
3322
- var validateForm = useCallback(function (values) {
3323
- var errors = {};
3324
- if (!values.contributionValue) {
3325
- errors.contributionValue = formatMessage({
3326
- id: 'sections.shopCheckout.contributionValue.validation.empty'
3327
- });
3328
- } else if (values.contributionValue < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY) {
3329
- errors.contributionValue = formatMessage({
3330
- id: "sections.shopCheckout.contributionValue.validation.tooLow." + slice.currency
3331
- });
3332
- } else if (values.contributionValue > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY) {
3333
- errors.contributionValue = formatMessage({
3334
- id: 'sections.shopCheckout.contributionValue.validation.tooHigh'
3335
- });
3336
- }
3337
- return errors;
3338
- }, [locale]);
3339
- var onSubmit = function onSubmit(_ref2) {
3340
- var contributionValue = _ref2.contributionValue;
3341
- var url = new URL(FPM_API_URI + "/v1/webhooks/shop/checkout");
3342
- url.searchParams.append('batchId', slice.batchId);
3343
- url.searchParams.append('quantity', Math.floor(contributionValue / slice.pricePerKg).toString());
3344
- if (slice.couponId) url.searchParams.append('couponId', slice.couponId);
3345
- push(url.toString());
3346
- };
3347
- return React.createElement(DefaultSectionContainer, {
3348
- backgroundColor: primary50,
3349
- title: slice.title
3350
- }, React.createElement(Wrapper, null, React.createElement(Flex, {
3351
- flexDir: ['column', null, null, null, 'row'],
3352
- justifyContent: "space-between",
3353
- alignItems: ['left', null, null, null, 'center']
3354
- }, React.createElement(Box, {
3355
- marginRight: ['0', null, null, null, '36'],
3356
- flexShrink: 2
3357
- }, React.createElement(DefaultSectionHeader, {
3358
- tagline: slice.tagline,
3359
- title: slice.title,
3360
- text: slice.text
3361
- })), React.createElement(Container, {
3362
- maxWidth: "md",
3363
- padding: "lg",
3364
- shadow: "lg"
3365
- }, slice.badge ? React.createElement(React.Fragment, null, React.createElement(Badge, {
3366
- colorScheme: "green",
3367
- textTransform: "none",
3368
- whiteSpace: "unset"
3369
- }, slice.badge), React.createElement(Spacer, {
3370
- height: "3"
3371
- })) : React.createElement(React.Fragment, null), React.createElement(RichText, {
3372
- content: slice.checkoutText,
3373
- textProps: {
3374
- color: 'gray.500'
3375
- }
3376
- }), React.createElement(Spacer, {
3377
- height: "6"
3378
- }), React.createElement(Divider, null), React.createElement(Spacer, {
3379
- height: "6"
3380
- }), React.createElement(LabelNumberPair, {
3381
- label: formatMessage({
3382
- id: 'sections.shopCheckout.intro.price'
3383
- }),
3384
- number: formatNumber(slice.pricePerKg * 100, {
3385
- style: 'currency',
3386
- currency: slice.currency
3387
- }) + "/" + formatNumber(100, {
3388
- style: 'unit',
3389
- unit: 'kilogram'
3390
- }) + " CO\u2082"
3391
- }), React.createElement(Spacer, {
3392
- height: "6"
3393
- }), React.createElement(Divider, null), React.createElement(Spacer, {
3394
- height: "6"
3395
- }), React.createElement(Formik, {
3396
- initialValues: {
3397
- contributionValue: slice.initialContributionValue
3398
- },
3399
- validate: validateForm,
3400
- onSubmit: onSubmit
3401
- }, function (_ref3) {
3402
- var errors = _ref3.errors,
3403
- touched = _ref3.touched,
3404
- handleSubmit = _ref3.handleSubmit,
3405
- values = _ref3.values;
3406
- return React.createElement(Form, {
3407
- onSubmit: handleSubmit
3408
- }, React.createElement(Box, {
3409
- width: "full"
3410
- }, React.createElement(Field, {
3411
- name: "contributionValue"
3412
- }, function (_ref4) {
3413
- var field = _ref4.field;
3414
- return React.createElement(BoemlyFormControl, {
3415
- id: "contributionValue",
3416
- size: "md",
3417
- inputProps: _extends({
3418
- type: 'number'
3419
- }, field),
3420
- label: formatMessage({
3421
- id: "sections.shopCheckout.contributionValue.label." + slice.currency
3422
- }),
3423
- rightAddonsOrElements: [React.createElement(InputRightAddon, {
3424
- key: "1"
3425
- }, formatMessage({
3426
- id: "sections.shopCheckout.contributionValue.unit." + slice.currency
3427
- }))],
3428
- isInvalid: !!errors.contributionValue && touched.contributionValue,
3429
- errorMessage: errors.contributionValue
3430
- });
3431
- })), React.createElement(Spacer, {
3432
- height: "6"
3433
- }), React.createElement(SimpleGrid, {
3434
- columns: 2,
3435
- gap: "4"
3436
- }, React.createElement(LabelNumberPair, {
3437
- label: formatMessage({
3438
- id: 'sections.shopCheckout.summary.kg'
3439
- }),
3440
- number: formatNumber(Math.floor(values.contributionValue / slice.pricePerKg), {
3441
- style: 'unit',
3442
- unit: 'kilogram',
3443
- maximumFractionDigits: 0
3444
- }) + " CO\u2082"
3445
- }), React.createElement(LabelNumberPair, {
3446
- label: formatMessage({
3447
- id: 'sections.shopCheckout.summary.price'
3448
- }),
3449
- number: formatNumber(Math.floor(values.contributionValue / slice.pricePerKg) * slice.pricePerKg, {
3450
- style: 'currency',
3451
- currency: slice.currency,
3452
- minimumFractionDigits: 2,
3453
- maximumFractionDigits: 2
3454
- })
3455
- })), React.createElement(Spacer, {
3456
- height: "6"
3457
- }), React.createElement(Button, {
3458
- type: "submit",
3459
- width: "full"
3460
- }, formatMessage({
3461
- id: 'sections.shopCheckout.submit'
3462
- })));
3463
- })))));
3464
- };
3465
-
3466
- var VARIANTS$2 = {
3467
- gray: {
3468
- backgroundColor: 'primary.50',
3469
- tagLineColor: 'primary.500',
3470
- titleColor: 'black',
3471
- subTitleColor: 'black',
3472
- factKeyColor: 'gray.700',
3473
- factValueColor: 'gray.700'
3474
- },
3475
- green: {
3476
- backgroundColor: 'primary.800',
3477
- tagLineColor: 'white',
3478
- titleColor: 'white',
3479
- subTitleColor: 'white',
3480
- factKeyColor: 'whiteAlpha.900',
3481
- factValueColor: 'white'
3482
- },
3483
- white: {
3484
- backgroundColor: 'white',
3485
- tagLineColor: 'primary.500',
3486
- titleColor: 'black',
3487
- subTitleColor: 'black',
3488
- factKeyColor: 'gray.700',
3489
- factValueColor: 'gray.700'
3490
- }
3491
- };
3492
- var Facts = function Facts(_ref) {
3493
- var slice = _ref.slice;
3494
- return React.createElement(DefaultSectionContainer, {
3495
- backgroundColor: VARIANTS$2[slice.variant].backgroundColor,
3496
- flexDir: "column",
3497
- textAlign: "center",
3498
- justifyContent: "space-between",
3499
- paddingX: ['6', null, '8'],
3500
- title: slice.title
3501
- }, React.createElement(React.Fragment, null, slice.title && React.createElement(React.Fragment, null, React.createElement(DefaultSectionHeader, {
3502
- tagline: slice.tagline,
3503
- text: slice.subTitle,
3504
- title: slice.title,
3505
- taglineProps: {
3506
- color: VARIANTS$2[slice.variant].tagLineColor,
3507
- textAlign: 'center'
3508
- },
3509
- titleProps: {
3510
- color: VARIANTS$2[slice.variant].titleColor,
3511
- textAlign: 'center',
3512
- maxW: '6xl',
3513
- marginX: 'auto'
3514
- },
3515
- textProps: {
3516
- color: VARIANTS$2[slice.variant].subTitleColor,
3517
- textAlign: 'center',
3518
- maxW: '3xl',
3519
- marginX: 'auto'
3520
- }
3521
- }), React.createElement(Spacer, {
3522
- height: ['0', null, '12']
3523
- })), React.createElement(Flex, {
3524
- justifyContent: slice.facts.length < 3 ? 'center' : 'flex-start',
3525
- alignItems: "center",
3526
- flexWrap: "wrap",
3527
- mx: [null, null, null, '22', '28'],
3528
- flexDir: ['column', null, null, 'row'],
3529
- gap: [null, null, null, '12']
3530
- }, slice.facts.map(function (fact) {
3531
- return React.createElement(Flex, {
3532
- key: fact.key,
3533
- flexDir: "column",
3534
- width: ['var(--boemly-sizes-full)', null, null, 'calc((var(--boemly-sizes-full) - var(--boemly-space-24))/ 3 )'],
3535
- mt: ['8', '8', '8', slice.facts.length > 3 ? '16' : '0']
3536
- }, React.createElement(Heading, {
3537
- fontSize: "6xl",
3538
- fontFamily: "GintoNord",
3539
- lineHeight: "10",
3540
- fontWeight: "700",
3541
- color: VARIANTS$2[slice.variant].factValueColor,
3542
- mb: "2",
3543
- as: "p"
3544
- }, fact.value), React.createElement(Text, {
3545
- size: "mdLowNormal",
3546
- color: VARIANTS$2[slice.variant].factKeyColor
3547
- }, fact.key));
3548
- })), slice.button && React.createElement(React.Fragment, null, React.createElement(Spacer, {
3549
- height: ['0', null, '20']
3550
- }), React.createElement(StrapiLinkButton, {
3551
- link: slice.button,
3552
- size: "md",
3553
- variant: slice.variant === 'green' ? 'outline' : 'solid'
3554
- }))));
3555
- };
3556
-
3557
- var VARIANTS$1 = {
3558
- white: {
3559
- backgroundColor: 'white'
3560
- },
3561
- gray: {
3562
- backgroundColor: 'primary.50'
3563
- }
3564
- };
3565
- var sortByCreatedAt = function sortByCreatedAt(a, b) {
3566
- return new Date(b.attributes.createdAt).getTime() - new Date(a.attributes.createdAt).getTime();
3567
- };
3568
- var BlogCards = function BlogCards(_ref) {
3569
- var slice = _ref.slice,
3570
- blogPosts = _ref.blogPosts;
3571
- var _useContext = useContext(IntlContext),
3572
- formatDate = _useContext.formatDate;
3573
- var _useMediaQuery = useMediaQuery(BREAKPOINT_LG_QUERY),
3574
- mobile = _useMediaQuery[0];
3575
- var _useToken = useToken('colors', ['gray.700']),
3576
- gray700 = _useToken[0];
3577
- var sortedBlogPosts = useMemo(function () {
3578
- return blogPosts.sort(sortByCreatedAt);
3579
- }, [blogPosts]);
3580
- var blogPostsToDisplay = useMemo(function () {
3581
- var _slice$blogPostCatego;
3582
- return (_slice$blogPostCatego = slice.blogPostCategory) != null && (_slice$blogPostCatego = _slice$blogPostCatego.data) != null && _slice$blogPostCatego.attributes.name ? sortedBlogPosts.filter(function (blogPost) {
3583
- var _blogPost$attributes$, _slice$blogPostCatego2;
3584
- return ((_blogPost$attributes$ = blogPost.attributes.category) == null ? void 0 : _blogPost$attributes$.data.attributes.name) === ((_slice$blogPostCatego2 = slice.blogPostCategory) == null || (_slice$blogPostCatego2 = _slice$blogPostCatego2.data) == null ? void 0 : _slice$blogPostCatego2.attributes.name);
3585
- }).slice(0, 3) : sortedBlogPosts.slice(0, 3);
3586
- }, [sortedBlogPosts, slice]);
3587
- return React.createElement(DefaultSectionContainer, {
3588
- backgroundColor: VARIANTS$1[slice.variant].backgroundColor,
3589
- title: slice.title
3590
- }, React.createElement(Wrapper, null, mobile || !slice.button ? React.createElement(DefaultSectionHeader, {
3591
- tagline: slice.tagline,
3592
- title: slice.title,
3593
- text: slice.subTitle,
3594
- titleProps: {
3595
- maxW: '2xl'
3596
- },
3597
- textProps: {
3598
- maxW: '2xl'
3599
- }
3600
- }) : React.createElement(Flex, {
3601
- justifyContent: "space-between",
3602
- alignItems: "center",
3603
- gap: "60"
3604
- }, React.createElement(Box, null, React.createElement(DefaultSectionHeader, {
3605
- tagline: slice.tagline,
3606
- title: slice.title,
3607
- text: slice.subTitle
3608
- })), React.createElement(Box, {
3609
- minWidth: "40"
3610
- }, React.createElement(StrapiLinkButton, {
3611
- link: slice.button,
3612
- size: "lg",
3613
- variant: "outline",
3614
- rightIcon: React.createElement(CaretRight, {
3615
- color: gray700
3616
- })
3617
- }))), React.createElement(Spacer, {
3618
- height: "14"
3619
- }), React.createElement(SimpleGrid, {
3620
- columns: [1, null, null, 3],
3621
- spacingX: 4,
3622
- spacingY: 24,
3623
- flexShrink: "0"
3624
- }, blogPostsToDisplay.map(function (blogPost) {
3625
- return React.createElement(BlogItemContainer, {
3626
- as: Link,
3627
- href: "/blog/" + blogPost.attributes.slug,
3628
- "data-testid": "blog-item",
3629
- key: blogPost.attributes.slug
3630
- }, React.createElement(ImageContainer$1, null, React.createElement(Image, {
3631
- src: strapiMediaUrl(blogPost.attributes.img.img, 'medium'),
3632
- alt: blogPost.attributes.img.alt,
3633
- fill: true,
3634
- style: {
3635
- objectFit: blogPost.attributes.img.objectFit || 'cover'
3636
- }
3637
- })), React.createElement(Box, {
3638
- px: "2",
3639
- py: "8"
3640
- }, blogPost.attributes.category && React.createElement(Text, {
3641
- size: "smMonoUppercase",
3642
- color: "primary.800",
3643
- mb: "2"
3644
- }, blogPost.attributes.category.data.attributes.name), React.createElement(Heading, {
3645
- size: "lg"
3646
- }, blogPost.attributes.title), blogPost.attributes.teaser && React.createElement(Text, {
3647
- size: "mdRegularNormal",
3648
- mt: "2"
3649
- }, blogPost.attributes.teaser), React.createElement(Spacer, {
3650
- height: "4"
3651
- }), React.createElement(DatePersonPair, {
3652
- date: formatDate(blogPost.attributes.createdAt),
3653
- person: blogPost.attributes.author ? {
3654
- name: blogPost.attributes.author.data.attributes.name,
3655
- image: React.createElement(Image, {
3656
- src: strapiMediaUrl(blogPost.attributes.author.data.attributes.img.img, 'thumbnail'),
3657
- alt: blogPost.attributes.author.data.attributes.img.alt,
3658
- fill: true,
3659
- style: {
3660
- objectFit: blogPost.attributes.author.data.attributes.img.objectFit || 'cover'
3661
- }
3662
- })
3663
- } : undefined
3664
- })));
3665
- })), React.createElement(React.Fragment, null, mobile && slice.button && React.createElement(React.Fragment, null, React.createElement(Box, {
3666
- minWidth: "40",
3667
- mt: "6"
3668
- }, React.createElement(StrapiLinkButton, {
3669
- link: slice.button,
3670
- size: "lg",
3671
- variant: "outline",
3672
- rightIcon: React.createElement(CaretRight, {
3673
- color: gray700
3674
- })
3675
- }))))));
3676
- };
3677
-
3678
- var SmallCheckout = function SmallCheckout(_ref) {
3679
- var pricePerKg = _ref.pricePerKg,
3680
- currency = _ref.currency,
3681
- batchId = _ref.batchId,
3682
- initialContributionValue = _ref.initialContributionValue,
3683
- checkoutText = _ref.checkoutText,
3684
- title = _ref.title,
3685
- subtitle = _ref.subtitle,
3686
- button = _ref.button;
3687
- var _useContext = useContext(IntlContext),
3688
- formatNumber = _useContext.formatNumber,
3689
- formatMessage = _useContext.formatMessage,
3690
- locale = _useContext.locale;
3691
- var _useRouter = useRouter(),
3692
- push = _useRouter.push;
3693
- var validateForm = useCallback(function (values) {
3694
- var errors = {};
3695
- if (!values.contributionValueCurrency) {
3696
- errors.contributionValueCurrency = formatMessage({
3697
- id: 'portfolio.smallCheckout.contributionValueCurrency.validation.empty'
3698
- });
3699
- } else if (values.contributionValueCurrency < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY) {
3700
- errors.contributionValueCurrency = formatMessage({
3701
- id: "portfolio.smallCheckout.contributionValueCurrency.validation.tooLow." + currency
3702
- });
3703
- } else if (values.contributionValueCurrency > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY) {
3704
- errors.contributionValueCurrency = formatMessage({
3705
- id: 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh'
3706
- });
3707
- }
3708
- return errors;
3709
- }, [locale]);
3710
- var onSubmit = /*#__PURE__*/function () {
3711
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref2) {
3712
- var contributionValueCurrency;
3713
- return _regeneratorRuntime().wrap(function _callee$(_context) {
3714
- while (1) switch (_context.prev = _context.next) {
3715
- case 0:
3716
- contributionValueCurrency = _ref2.contributionValueCurrency;
3717
- push(FPM_API_URI + "/v1/webhooks/shop/checkout?batchId=" + batchId + "&quantity=" + Math.floor(contributionValueCurrency / pricePerKg));
3718
- case 2:
3719
- case "end":
3720
- return _context.stop();
3721
- }
3722
- }, _callee);
3723
- }));
3724
- return function onSubmit(_x) {
3725
- return _ref3.apply(this, arguments);
3726
- };
3727
- }();
3728
- return React.createElement(Flex, {
3729
- width: "full",
3730
- height: "full",
3731
- borderRadius: "xl",
3732
- background: "primary.100",
3733
- padding: "6",
3734
- direction: "column"
3735
- }, React.createElement(Flex, {
3736
- gap: "1",
3737
- alignItems: "end",
3738
- mb: "6"
3739
- }, React.createElement(Text, {
3740
- color: "black",
3741
- lineHeight: "0"
3742
- }, formatMessage({
3743
- id: 'unit.formatter.tonsCo2'
3744
- }, {
3745
- number: React.createElement(Text, {
3746
- as: "span",
3747
- size: "lgLowBold",
3748
- color: "black"
3749
- }, formatNumber(pricePerKg * 1000, {
3750
- style: 'currency',
3751
- currency: currency,
3752
- maximumFractionDigits: 0
3753
- }))
3754
- }))), React.createElement(Formik, {
3755
- initialValues: {
3756
- contributionValueCurrency: initialContributionValue,
3757
- contributionValueKgs: initialContributionValue / pricePerKg / 1000
3758
- },
3759
- validate: validateForm,
3760
- onSubmit: onSubmit
3761
- }, function (_ref4) {
3762
- var errors = _ref4.errors,
3763
- touched = _ref4.touched,
3764
- handleSubmit = _ref4.handleSubmit,
3765
- setValues = _ref4.setValues;
3766
- return React.createElement(Form, {
3767
- onSubmit: handleSubmit
3768
- }, React.createElement(Flex, {
3769
- gap: "4"
3770
- }, React.createElement(Box, {
3771
- width: "full"
3772
- }, React.createElement(Field, {
3773
- name: "contributionValueCurrency"
3774
- }, function (_ref5) {
3775
- var field = _ref5.field;
3776
- return React.createElement(BoemlyFormControl, {
3777
- id: "contributionValueCurrency",
3778
- size: "md",
3779
- inputType: "NumberInput",
3780
- numberInputProps: {
3781
- value: field.value,
3782
- onChange: function onChange(valueString) {
3783
- // valueAsNumber might be NaN
3784
- var value = parseInt(valueString || '0', 10);
3785
- setValues({
3786
- contributionValueCurrency: value,
3787
- contributionValueKgs: value / pricePerKg / 1000
3788
- });
3789
- }
3790
- },
3791
- label: formatMessage({
3792
- id: "portfolio.smallCheckout.contributionValueCurrency.label." + currency
3793
- }),
3794
- rightAddonsOrElements: [React.createElement(InputRightAddon, {
3795
- key: "currencyUnit"
3796
- }, formatMessage({
3797
- id: "portfolio.smallCheckout.contributionValueCurrency.unit." + currency
3798
- }))],
3799
- isInvalid: !!errors.contributionValueCurrency && touched.contributionValueCurrency,
3800
- errorMessage: errors.contributionValueCurrency
3801
- });
3802
- })), React.createElement(Box, {
3803
- width: "full"
3804
- }, React.createElement(Field, {
3805
- name: "contributionValueKgs"
3806
- }, function (_ref6) {
3807
- var field = _ref6.field;
3808
- return React.createElement(BoemlyFormControl, {
3809
- id: "contributionValueKgs",
3810
- size: "md",
3811
- inputType: "NumberInput",
3812
- numberInputProps: {
3813
- value: field.value,
3814
- onChange: function onChange(valueString) {
3815
- var value = parseInt(valueString || '0', 10);
3816
- setValues({
3817
- contributionValueCurrency: value * pricePerKg * 1000,
3818
- contributionValueKgs: value
3819
- });
3820
- }
3821
- },
3822
- label: formatMessage({
3823
- id: 'portfolio.smallCheckout.contributionValueKgs.label'
3824
- }),
3825
- rightAddonsOrElements: [React.createElement(InputRightAddon, {
3826
- key: "tCO\u2082"
3827
- }, "tCO\u2082")],
3828
- isInvalid: !!errors.contributionValueKgs && touched.contributionValueKgs,
3829
- errorMessage: errors.contributionValueKgs
3830
- });
3831
- }))), React.createElement(Spacer, {
3832
- height: "4"
3833
- }), React.createElement(Button, {
3834
- type: "submit",
3835
- width: "full"
3836
- }, formatMessage({
3837
- id: 'portfolio.smallCheckout.submitButton'
3838
- })));
3839
- }), React.createElement(Flex, {
3840
- width: "full",
3841
- justifyContent: "center",
3842
- alignItems: "center",
3843
- mt: "6",
3844
- gap: "2"
3845
- }, React.createElement(Image, {
3846
- src: CDN_URI + "/assets/v3/strapi-slices/globe-love-icon.svg",
3847
- alt: "Icon",
3848
- width: 20,
3849
- height: 20
3850
- }), React.createElement(Text, {
3851
- size: "smLowNormal"
3852
- }, checkoutText)), React.createElement(Divider, {
3853
- my: "6"
3854
- }), React.createElement(Flex, {
3855
- width: "full",
3856
- alignItems: "center",
3857
- direction: "column"
3858
- }, title && React.createElement(Text, {
3859
- size: "smLowBold",
3860
- textAlign: "center",
3861
- color: "black",
3862
- mb: "2"
3863
- }, title), subtitle && React.createElement(Text, {
3864
- size: "smRegularNormal",
3865
- textAlign: "center",
3866
- mb: "3"
3867
- }, subtitle), button && React.createElement(StrapiLinkButton, {
3868
- link: {
3869
- id: 1,
3870
- intercomLauncher: true,
3871
- text: button.text
3872
- },
3873
- variant: "outline"
3874
- })));
3875
- };
3876
-
3877
- var convertAreaM2ToHa = function convertAreaM2ToHa(areaInM2) {
3878
- return parseInt(areaInM2, 10) / 10000;
3879
- };
3880
-
3881
- var convertCo2AmountKgToTons = function convertCo2AmountKgToTons(amount) {
3882
- return parseInt(amount, 10) / 1000;
3883
- };
3884
-
3885
- var FORMAT_AS_HECTARE_CONFIG = {
3886
- unit: 'hectare',
3887
- unitDisplay: 'short',
3888
- style: 'unit',
3889
- maximumFractionDigits: 2
3890
- };
3891
- var FORMAT_AS_PERCENT_CONFIG = {
3892
- style: 'percent',
3893
- maximumFractionDigits: 2
3894
- };
3895
-
3896
- var getTimeSpanInYears = function getTimeSpanInYears(start, end) {
3897
- var monthsDifference = end.getMonth() - start.getMonth();
3898
- var yearsDifference = end.getFullYear() - start.getFullYear();
3899
- if (monthsDifference > 4) {
3900
- return yearsDifference + 1;
3901
- }
3902
- if (monthsDifference < -4) {
3903
- return yearsDifference - 1;
3904
- }
3905
- return yearsDifference;
3906
- };
3907
-
3908
- var ProjectInfo = function ProjectInfo(_ref) {
3909
- var project = _ref.project,
3910
- subtitles = _ref.subtitles;
3911
- var _useContext = useContext(IntlContext),
3912
- formatMessage = _useContext.formatMessage,
3913
- formatNumber = _useContext.formatNumber,
3914
- formatDate = _useContext.formatDate;
3915
- return React.createElement(Container, {
3916
- p: "2",
3917
- width: "full"
3918
- }, React.createElement(Heading, {
3919
- size: "xl",
3920
- textAlign: "left"
3921
- }, formatMessage({
3922
- id: 'features.projectInfo.projectInfo.value'
3923
- })), React.createElement(Spacer, {
3924
- height: "8"
3925
- }), React.createElement(SimpleGrid, {
3926
- columns: [1, null, null, 2],
3927
- gap: "8",
3928
- spacingX: "10",
3929
- spacingY: "8"
3930
- }, project.area && React.createElement(Box, null, React.createElement(LabelTextPair, {
3931
- label: formatMessage({
3932
- id: 'features.projectInfo.properties.area'
3933
- }),
3934
- text: formatNumber(convertAreaM2ToHa(project.area.toString()), FORMAT_AS_HECTARE_CONFIG),
3935
- caption: subtitles.areaSubtitle
3936
- })), project.location && React.createElement(Box, null, React.createElement(LabelTextPair, {
3937
- label: formatMessage({
3938
- id: 'features.projectInfo.properties.location'
3939
- }),
3940
- text: project.location,
3941
- caption: subtitles.locationSubtitle
3942
- })), project.start && React.createElement(Box, null, React.createElement(LabelTextPair, {
3943
- label: formatMessage({
3944
- id: 'features.projectInfo.properties.start'
3945
- }),
3946
- text: formatDate(project.start, {
3947
- year: 'numeric',
3948
- month: 'long'
3949
- }),
3950
- caption: subtitles.startSubtitle
3951
- })), project.start && project.end && React.createElement(Box, null, React.createElement(LabelTextPair, {
3952
- label: formatMessage({
3953
- id: 'features.projectInfo.properties.timeSpan'
3954
- }),
3955
- text: formatMessage({
3956
- id: 'features.projectInfo.properties.year'
3957
- }, {
3958
- years: getTimeSpanInYears(new Date(project.start), new Date(project.end))
3959
- }),
3960
- caption: subtitles.timeSpanSubtitle
3961
- }))), project.projectType || project.projectDeveloper || project.verificationStandard ? React.createElement(React.Fragment, null, React.createElement(Spacer, {
3962
- height: "6"
3963
- }), React.createElement(Divider, null), React.createElement(Spacer, {
3964
- height: "6"
3965
- })) : React.createElement(React.Fragment, null), React.createElement(SimpleGrid, {
3966
- columns: [1, null, null, 2],
3967
- spacingX: "10",
3968
- spacingY: "8"
3969
- }, project.projectType && React.createElement(Box, null, React.createElement(LabelTextPair, {
3970
- label: formatMessage({
3971
- id: 'features.projectInfo.properties.projectType'
3972
- }),
3973
- text: project.projectType.title,
3974
- caption: subtitles.projectTypeSubtitle
3975
- })), project.projectDeveloper && React.createElement(Box, null, React.createElement(LabelTextPair, {
3976
- label: formatMessage({
3977
- id: 'features.projectInfo.properties.projectDeveloper'
3978
- }),
3979
- text: project.projectDeveloper.name,
3980
- caption: subtitles.projectDeveloperSubtitle
3981
- }))), project.verificationStandard ? React.createElement(React.Fragment, null, project.projectType || project.projectDeveloper ? React.createElement(Spacer, {
3982
- height: "6"
3983
- }) : React.createElement(React.Fragment, null), React.createElement(Flex, {
3984
- justifyContent: "space-between",
3985
- alignItems: "center"
3986
- }, React.createElement(Box, null, React.createElement(LabelTextPair, {
3987
- label: formatMessage({
3988
- id: 'features.projectInfo.properties.verificationStandard.label'
3989
- }),
3990
- text: formatMessage({
3991
- id: "features.projectInfo.properties.verificationStandard.value." + project.verificationStandard.id,
3992
- defaultMessage: project.verificationStandard.id
3993
- }),
3994
- caption: subtitles.verificationStandardSubtitle
3995
- })), project.defaultIssuer && React.createElement(Box, {
3996
- position: "relative",
3997
- width: "14",
3998
- height: "8"
3999
- }, React.createElement(Image, {
4000
- src: project.defaultIssuer.logoUrl,
4001
- alt: project.defaultIssuer.name + " logo",
4002
- fill: true,
4003
- style: {
4004
- objectFit: 'contain'
4005
- }
4006
- })))) : React.createElement(React.Fragment, null), project.forecastedAmountYearly && project.riskBuffer ? React.createElement(React.Fragment, null, React.createElement(Spacer, {
4007
- height: "8"
4008
- }), React.createElement(Divider, null), React.createElement(Spacer, {
4009
- height: "8"
4010
- }), React.createElement(SimpleGrid, {
4011
- columns: [1, null, null, 2],
4012
- spacingX: "10",
4013
- spacingY: "8"
4014
- }, React.createElement(Box, null, React.createElement(LabelTextPair, {
4015
- label: formatMessage({
4016
- id: 'features.projectInfo.properties.forecastedAmountYear.label'
4017
- }),
4018
- text: formatMessage({
4019
- id: 'unit.formatter.tonsCo2PerYear'
4020
- }, {
4021
- number: formatNumber(convertCo2AmountKgToTons(project.forecastedAmountYearly.toString()), {
4022
- maximumFractionDigits: 0
4023
- })
4024
- }),
4025
- caption: subtitles.forecastedAmountSubtitle
4026
- })), React.createElement(Box, null, React.createElement(LabelTextPair, {
4027
- label: formatMessage({
4028
- id: 'features.projectInfo.properties.riskBuffer'
4029
- }),
4030
- text: formatNumber(project.riskBuffer / 100, FORMAT_AS_PERCENT_CONFIG),
4031
- caption: subtitles.riskBufferSubtitle
4032
- })))) : React.createElement(React.Fragment, null), project.creditsAvailable ? React.createElement(Box, {
4033
- mt: "2"
4034
- }, React.createElement(CreditsAvailableBadge, {
4035
- status: project.creditsAvailable
4036
- })) : React.createElement(React.Fragment, null));
4037
- };
4038
-
4039
- var DocumentsDownloadList = function DocumentsDownloadList(_ref) {
4040
- var documentUrls = _ref.documentUrls;
4041
- var _useContext = useContext(IntlContext),
4042
- formatMessage = _useContext.formatMessage;
4043
- return React.createElement(Container, {
4044
- p: "2"
4045
- }, React.createElement(Heading, {
4046
- size: "xl",
4047
- textAlign: "left"
4048
- }, formatMessage({
4049
- id: 'features.portfolio.documentsDownloadList.projectDocuments'
4050
- })), React.createElement(Flex, {
4051
- flexDir: "column"
4052
- }, documentUrls.map(function (documentUrl) {
4053
- return React.createElement(Flex, {
4054
- justifyContent: "space-between",
4055
- alignItems: "center",
4056
- mt: "6",
4057
- key: documentUrl.text
4058
- }, React.createElement(Flex, {
4059
- alignItems: "center"
4060
- }, React.createElement(Center, {
4061
- w: "8",
4062
- h: "8",
4063
- borderRadius: "full",
4064
- borderWidth: "1px",
4065
- borderColor: "grey.200"
4066
- }, React.createElement(FilePdf, null)), React.createElement(Spacer, {
4067
- width: "4"
4068
- }), React.createElement(Flex, {
4069
- flexDir: "column"
4070
- }, React.createElement(Text, {
4071
- size: "smMonoNormal"
4072
- }, "PDF"), React.createElement(Text, {
4073
- size: "mdLowBold",
4074
- color: "black",
4075
- textAlign: "left"
4076
- }, documentUrl.text))), React.createElement(Spacer, {
4077
- width: "32"
4078
- }), React.createElement(IconButton, {
4079
- variant: "outline",
4080
- "aria-label": formatMessage({
4081
- id: 'features.portfolio.documentsDownloadList.downloadDocument'
4082
- }),
4083
- icon: React.createElement(DownloadSimple, null),
4084
- as: Link,
4085
- href: documentUrl.url,
4086
- size: "sm"
4087
- }));
4088
- })));
4089
- };
4090
-
4091
- var Contact = function Contact(_ref) {
4092
- var avatar = _ref.avatar,
4093
- title = _ref.title,
4094
- text = _ref.text,
4095
- button = _ref.button;
4096
- return React.createElement(Container, {
4097
- backgroundColor: "primary.100",
4098
- border: "none",
4099
- p: "8",
4100
- height: "full"
4101
- }, React.createElement(Flex, {
4102
- flexDir: "column",
4103
- justifyContent: "center",
4104
- alignItems: "center",
4105
- height: "full"
4106
- }, avatar ? React.createElement(Box, {
4107
- position: "relative",
4108
- width: "20",
4109
- height: "20",
4110
- borderRadius: "full",
4111
- overflow: "hidden"
4112
- }, React.createElement(Image, {
4113
- src: strapiMediaUrl(avatar.img, 'small'),
4114
- alt: avatar.alt,
4115
- fill: true,
4116
- objectFit: avatar.objectFit
4117
- })) : React.createElement(React.Fragment, null), title ? React.createElement(Heading, {
4118
- mt: "6",
4119
- size: "md",
4120
- fontWeight: "500",
4121
- textAlign: "center",
4122
- color: "black"
4123
- }, title) : React.createElement(React.Fragment, null), text ? React.createElement(Text, {
4124
- mt: "2",
4125
- size: "smRegularNormal",
4126
- textAlign: "center"
4127
- }, text) : React.createElement(React.Fragment, null), button ? React.createElement(StrapiLinkButton, {
4128
- mt: "6",
4129
- link: button,
4130
- size: "md",
4131
- variant: "outline"
4132
- }) : React.createElement(React.Fragment, null)));
4133
- };
4134
-
4135
- var ProjectFacts = function ProjectFacts(_ref) {
4136
- var slice = _ref.slice,
4137
- project = _ref.project;
4138
- if (!project) {
4139
- return React.createElement(React.Fragment, null, "Invalid configuration, check if a project this id exists in the FPM");
4140
- }
4141
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(Flex, {
4142
- flexDir: ['column', null, null, 'row'],
4143
- gap: "4",
4144
- width: "full"
4145
- }, React.createElement(ProjectInfo, {
4146
- project: project,
4147
- subtitles: slice
4148
- }), React.createElement(Flex, {
4149
- flexDir: "column",
4150
- gap: "4",
4151
- width: "full"
4152
- }, slice.documentUrls && slice.documentUrls.length > 0 && React.createElement(DocumentsDownloadList, {
4153
- documentUrls: slice.documentUrls
4154
- }), slice.batchId && slice.pricePerKg && slice.currency && slice.initialContributionValue ? React.createElement(SmallCheckout, {
4155
- batchId: slice.batchId,
4156
- checkoutText: slice.checkoutText,
4157
- currency: slice.currency,
4158
- initialContributionValue: slice.initialContributionValue,
4159
- pricePerKg: slice.pricePerKg,
4160
- title: slice.customTitle,
4161
- subtitle: slice.customSubtitle,
4162
- button: slice.customButton
4163
- }) : (slice.contactTitle || slice.contactText || slice.contactButton || slice.contactAvatar) && React.createElement(Contact, {
4164
- title: slice.contactTitle,
4165
- text: slice.contactText,
4166
- button: slice.contactButton,
4167
- avatar: slice.contactAvatar
4168
- })))));
4169
- };
4170
-
4171
- var CustomerStories = function CustomerStories(_ref) {
4172
- var slice = _ref.slice,
4173
- customerStories = _ref.customerStories;
4174
- var _useContext = useContext(IntlContext),
4175
- formatMessage = _useContext.formatMessage;
4176
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, React.createElement(SimpleGrid, {
4177
- columns: [1, null, null, 2],
4178
- spacingX: 56,
4179
- spacingY: 24
4180
- }, slice.customer_stories.map(function (_ref2) {
4181
- var attributes = _ref2.attributes;
4182
- var customerStory = customerStories.find(function (cs) {
4183
- return cs.attributes.slug === attributes.slug;
4184
- });
4185
- if (!customerStory) {
4186
- return null;
4187
- }
4188
- return React.createElement(Container, {
4189
- padding: "none",
4190
- key: customerStory.id
4191
- }, React.createElement(Center, {
4192
- height: "24",
4193
- backgroundColor: "primary.50",
4194
- borderTopRadius: "xl"
4195
- }, React.createElement(Box, {
4196
- position: "relative",
4197
- height: "12",
4198
- width: "12"
4199
- }, React.createElement(Image, {
4200
- src: strapiMediaUrl(customerStory.attributes.customerLogo.img, 'medium'),
4201
- alt: customerStory.attributes.customerLogo.alt,
4202
- fill: true,
4203
- style: {
4204
- objectFit: customerStory.attributes.customerLogo.objectFit
4205
- }
4206
- }))), React.createElement(Box, {
4207
- px: "6",
4208
- pt: "12",
4209
- pb: "6"
4210
- }, React.createElement(Text, {
4211
- size: "xsMonoUppercase",
4212
- color: "gray.500",
4213
- mb: "2"
4214
- }, customerStory.attributes.customerIndustry), React.createElement(Heading, {
4215
- size: "xl"
4216
- }, customerStory.attributes.title), React.createElement(Button, {
4217
- as: Link,
4218
- href: "/customer-stories/" + customerStory.attributes.slug,
4219
- variant: "outline",
4220
- size: "sm",
4221
- mt: "12"
4222
- }, formatMessage({
4223
- id: 'sections.customerStories.more'
4224
- }))));
4225
- }))));
4226
- };
4227
-
4228
- var BULLET_POINT_VARIANTS = {
4229
- gray: {
4230
- bulletPointColor: 'black'
4231
- },
4232
- green: {
4233
- bulletPointColor: 'white'
4234
- },
4235
- white: {
4236
- bulletPointColor: 'black'
4237
- }
4238
- };
4239
- var Icon = function Icon(_ref) {
4240
- var variant = _ref.variant,
4241
- icon = _ref.icon;
4242
- switch (icon) {
4243
- case 'check':
4244
- return React.createElement(Check, {
4245
- size: 20,
4246
- color: "var(--boemly-colors-primary-500)"
4247
- });
4248
- case 'cross':
4249
- return React.createElement(X, {
4250
- size: 20,
4251
- color: "var(--boemly-colors-red-500)"
4252
- });
4253
- default:
4254
- return React.createElement(Box, {
4255
- "data-testid": "bullet-point-box",
4256
- borderRadius: "full",
4257
- backgroundColor: BULLET_POINT_VARIANTS[variant].bulletPointColor,
4258
- width: "2",
4259
- height: "2",
4260
- margin: "1.5"
4261
- });
4262
- }
4263
- };
4264
-
4265
- var VARIANTS = {
4266
- gray: {
4267
- backgroundColor: 'primary.50',
4268
- textColor: 'black',
4269
- subTitleColor: 'gray.500',
4270
- factColor: 'primary.800',
4271
- dividerColor: 'gray.200'
4272
- },
4273
- green: {
4274
- backgroundColor: 'primary.800',
4275
- textColor: 'white',
4276
- subTitleColor: 'whiteAlpha.900',
4277
- factColor: 'white',
4278
- dividerColor: 'whiteAlpha.200'
4279
- },
4280
- white: {
4281
- backgroundColor: 'white',
4282
- textColor: 'black',
4283
- subTitleColor: 'gray.500',
4284
- factColor: 'primary.800',
4285
- dividerColor: 'gray.200'
4286
- }
4287
- };
4288
- var Comparison = function Comparison(_ref) {
4289
- var slice = _ref.slice;
4290
- var _useContext = useContext(IntlContext),
4291
- formatMessage = _useContext.formatMessage;
4292
- return React.createElement(DefaultSectionContainer, null, React.createElement(Wrapper, null, slice.title ? React.createElement(React.Fragment, null, React.createElement(Flex, {
4293
- alignItems: "center",
4294
- flexDirection: "column"
4295
- }, React.createElement(DefaultSectionHeader, {
4296
- tagline: slice.tagline,
4297
- title: slice.title,
4298
- text: slice.subTitle,
4299
- textProps: {
4300
- maxW: '2xl',
4301
- textAlign: 'center'
4302
- },
4303
- titleProps: {
4304
- textAlign: 'center',
4305
- maxWidth: '3xl'
4306
- },
4307
- taglineProps: {
4308
- textAlign: 'center',
4309
- maxWidth: '3xl'
4310
- }
4311
- })), React.createElement(Spacer, {
4312
- height: "12"
4313
- })) : React.createElement(React.Fragment, null), React.createElement(SimpleGrid, {
4314
- columns: [1, null, null, null, slice.comparisonCards.length],
4315
- spacing: "4"
4316
- }, slice.comparisonCards.map(function (comparisonCard) {
4317
- return React.createElement(Container, {
4318
- boxShadow: comparisonCard.variant === 'green' ? 'xl' : 'base',
4319
- border: comparisonCard.variant === 'green' ? 'primary.800' : undefined,
4320
- zIndex: "base",
4321
- key: comparisonCard.id,
4322
- position: "relative",
4323
- elevation: "none",
4324
- p: "3",
4325
- backgroundColor: VARIANTS[comparisonCard.variant].backgroundColor
4326
- }, comparisonCard.variant === 'green' ? React.createElement(Box, {
4327
- position: "absolute",
4328
- left: "0",
4329
- top: "0",
4330
- width: "full",
4331
- height: "full",
4332
- zIndex: "-1"
4333
- }, React.createElement(Image, {
4334
- src: CDN_URI + "/assets/v3/strapi-slices/shapes-comparison.svg",
4335
- alt: formatMessage({
4336
- id: 'sections.comparison.backgroundShapes'
4337
- }),
4338
- fill: true,
4339
- style: {
4340
- objectFit: 'cover',
4341
- borderRadius: 'var(--boemly-radii-xl)'
4342
- }
4343
- })) : React.createElement(React.Fragment, null), React.createElement(Flex, {
4344
- flexDir: "column",
4345
- gap: "4"
4346
- }, comparisonCard.image && React.createElement(Box, {
4347
- position: "relative",
4348
- height: "7",
4349
- width: "100%"
4350
- }, React.createElement(Image, {
4351
- src: strapiMediaUrl(comparisonCard.image.img, 'small'),
4352
- alt: comparisonCard.image.alt,
4353
- fill: true,
4354
- style: {
4355
- objectFit: comparisonCard.image.objectFit
4356
- }
4357
- })), React.createElement(Flex, {
4358
- gap: "2",
4359
- alignItems: "center",
4360
- flexWrap: "wrap"
4361
- }, React.createElement(Heading, {
4362
- size: "2xl",
4363
- color: VARIANTS[comparisonCard.variant].textColor,
4364
- whiteSpace: "pre-line"
4365
- }, comparisonCard.title), comparisonCard.badge && React.createElement(Badge, {
4366
- backgroundColor: "green.100",
4367
- borderRadius: "md",
4368
- whiteSpace: "pre-line"
4369
- }, comparisonCard.badge))), React.createElement(Spacer, {
4370
- height: "4"
4371
- }), React.createElement(Text, {
4372
- size: "smRegularNormal",
4373
- color: VARIANTS[comparisonCard.variant].subTitleColor
4374
- }, comparisonCard.subTitle), comparisonCard.factTitle || comparisonCard.factSubtitle || comparisonCard.button ? React.createElement(React.Fragment, null, React.createElement(Spacer, {
4375
- height: "6"
4376
- }), React.createElement(Flex, {
4377
- flexDir: "column"
4378
- }, comparisonCard.factTitle && React.createElement(React.Fragment, null, React.createElement(Text, {
4379
- color: VARIANTS[comparisonCard.variant].factColor,
4380
- size: "lgMonoNormal"
4381
- }, comparisonCard.factTitle), React.createElement(Text, {
4382
- color: VARIANTS[comparisonCard.variant].factColor,
4383
- size: "smLowNormal"
4384
- }, comparisonCard.factSubtitle)), comparisonCard.button && React.createElement(StrapiLinkButton, {
4385
- mt: "6",
4386
- link: comparisonCard.button,
4387
- size: "md",
4388
- variant: "outline",
4389
- rightIcon: React.createElement(CaretRight, {
4390
- size: 16,
4391
- weight: "bold"
4392
- })
4393
- }))) : React.createElement(React.Fragment, null), React.createElement(React.Fragment, null, comparisonCard.lists.map(function (list) {
4394
- return React.createElement(Box, {
4395
- key: list.id
4396
- }, React.createElement(Divider, {
4397
- my: "8",
4398
- color: VARIANTS[comparisonCard.variant].dividerColor
4399
- }), React.createElement(Text, {
4400
- size: "smLowBold",
4401
- color: VARIANTS[comparisonCard.variant].textColor
4402
- }, list.title), React.createElement(React.Fragment, null, list.items.map(function (item) {
4403
- return React.createElement(Box, {
4404
- key: item.id
4405
- }, React.createElement(Spacer, {
4406
- height: "4"
4407
- }), React.createElement(Flex, {
4408
- gap: "4",
4409
- alignItems: "center"
4410
- }, React.createElement(Box, null, React.createElement(Icon, {
4411
- variant: comparisonCard.variant,
4412
- icon: item.icon
4413
- })), React.createElement(Text, {
4414
- size: "smLowNormal",
4415
- color: VARIANTS[comparisonCard.variant].textColor
4416
- }, item.text)));
4417
- })));
4418
- })));
4419
- }))));
4420
- };
4421
-
4422
- var SliceRenderer = function SliceRenderer(_ref) {
4423
- var slices = _ref.slices,
4424
- blogPosts = _ref.blogPosts,
4425
- projects = _ref.projects,
4426
- customerStories = _ref.customerStories,
4427
- _ref$locale = _ref.locale,
4428
- locale = _ref$locale === void 0 ? 'en' : _ref$locale,
4429
- CustomSlice = _ref.CustomSlice;
4430
- return React.createElement(ContextProvider, {
4431
- locale: locale
4432
- }, slices.map(function (slice) {
4433
- switch (slice.__component) {
4434
- case 'sections.hero':
4435
- return React.createElement(Hero, {
4436
- key: slice.__component + "-" + slice.id,
4437
- slice: slice
4438
- });
4439
- case 'sections.map-hero':
4440
- return React.createElement(MapHero, {
4441
- key: slice.__component + "-" + slice.id,
4442
- slice: slice
4443
- });
4444
- case 'sections.rich-text':
4445
- return React.createElement(RichTextSection, {
4446
- key: slice.__component + "-" + slice.id,
4447
- slice: slice
4448
- });
4449
- case 'sections.left-text-right-card':
4450
- return React.createElement(LeftTextRightCard, {
4451
- key: slice.__component + "-" + slice.id,
4452
- slice: slice
4453
- });
4454
- case 'sections.text-with-card':
4455
- return React.createElement(TextWithCard, {
4456
- key: slice.__component + "-" + slice.id,
4457
- slice: slice
4458
- });
4459
- case 'sections.logo-grid-with-text':
4460
- return React.createElement(LogoGridWithText, {
4461
- key: slice.__component + "-" + slice.id,
4462
- slice: slice
4463
- });
4464
- case 'sections.quote-cards':
4465
- return React.createElement(QuoteCards, {
4466
- key: slice.__component + "-" + slice.id,
4467
- slice: slice
4468
- });
4469
- case 'sections.q-and-a':
4470
- return React.createElement(QAndA, {
4471
- key: slice.__component + "-" + slice.id,
4472
- slice: slice
4473
- });
4474
- case 'sections.image-grid':
4475
- return React.createElement(ImageGrid, {
4476
- key: slice.__component + "-" + slice.id,
4477
- slice: slice
4478
- });
4479
- case 'sections.full-width-image':
4480
- return React.createElement(FullWidthImage, {
4481
- key: slice.__component + "-" + slice.id,
4482
- slice: slice
4483
- });
4484
- case 'sections.text-with-text-cards':
4485
- return React.createElement(TextWithTextCards, {
4486
- key: slice.__component + "-" + slice.id,
4487
- slice: slice
4488
- });
4489
- case 'sections.text-card-grid':
4490
- return React.createElement(TextCardGrid, {
4491
- key: slice.__component + "-" + slice.id,
4492
- slice: slice
4493
- });
4494
- case 'sections.icon-grid':
4495
- return React.createElement(IconGrid, {
4496
- key: slice.__component + "-" + slice.id,
4497
- slice: slice
4498
- });
4499
- case 'sections.image-text-sequence':
4500
- return React.createElement(ImageTextSequence, {
4501
- key: slice.__component + "-" + slice.id,
4502
- slice: slice
4503
- });
4504
- case 'sections.steps':
4505
- return React.createElement(Steps, {
4506
- key: slice.__component + "-" + slice.id,
4507
- slice: slice
4508
- });
4509
- case 'sections.text-carousel':
4510
- return React.createElement(TextCarousel, {
4511
- key: slice.__component + "-" + slice.id,
4512
- slice: slice
4513
- });
4514
- case 'sections.link-cards-grid':
4515
- return React.createElement(LinkCardsGrid, {
4516
- key: slice.__component + "-" + slice.id,
4517
- slice: slice
4518
- });
4519
- case 'sections.small-hero':
4520
- return React.createElement(SmallHero, {
4521
- key: slice.__component + "-" + slice.id,
4522
- slice: slice,
4523
- theme: "dark"
4524
- });
4525
- case 'sections.small-hero-light':
4526
- return React.createElement(SmallHero, {
4527
- key: slice.__component + "-" + slice.id,
4528
- slice: slice,
4529
- theme: "light"
4530
- });
4531
- case 'sections.project-facts':
4532
- return React.createElement(ProjectFacts, {
4533
- key: slice.__component + "-" + slice.id,
4534
- slice: slice,
4535
- project: projects.find(function (p) {
4536
- return p.id === slice.projectId;
4537
- })
4538
- });
4539
- case 'sections.projects-grid':
4540
- return React.createElement(ProjectsGrid, {
4541
- key: slice.__component + "-" + slice.id,
4542
- slice: slice
4543
- });
4544
- case 'sections.projects-map':
4545
- return React.createElement(ProjectsMap, {
4546
- key: slice.__component + "-" + slice.id,
4547
- slice: slice,
4548
- projects: projects
4549
- });
4550
- case 'sections.video':
4551
- return React.createElement(Video, {
4552
- key: slice.__component + "-" + slice.id,
4553
- slice: slice
4554
- });
4555
- case 'sections.full-width-highlight-quote':
4556
- return React.createElement(FullWidthHighlightQuote, {
4557
- key: slice.__component + "-" + slice.id,
4558
- slice: slice
4559
- });
4560
- case 'sections.full-width-image-slider':
4561
- return React.createElement(FullWidthImageSlider, {
4562
- key: slice.__component + "-" + slice.id,
4563
- slice: slice
4564
- });
4565
- case 'sections.side-by-side-images':
4566
- return React.createElement(SideBySideImages, {
4567
- key: slice.__component + "-" + slice.id,
4568
- slice: slice
4569
- });
4570
- case 'sections.cta-only':
4571
- return React.createElement(CtaOnly, {
4572
- key: slice.__component + "-" + slice.id,
4573
- slice: slice
4574
- });
4575
- case 'sections.cta':
4576
- return React.createElement(Cta, {
4577
- key: slice.__component + "-" + slice.id,
4578
- slice: slice
4579
- });
4580
- case 'sections.shop-checkout':
4581
- return React.createElement(ShopCheckout, {
4582
- key: slice.__component + "-" + slice.id,
4583
- slice: slice
4584
- });
4585
- case 'sections.facts':
4586
- return React.createElement(Facts, {
4587
- key: slice.__component + "-" + slice.id,
4588
- slice: slice
4589
- });
4590
- case 'sections.blog-cards':
4591
- return React.createElement(BlogCards, {
4592
- key: slice.__component + "-" + slice.id,
4593
- slice: slice,
4594
- blogPosts: blogPosts
4595
- });
4596
- case 'sections.blog':
4597
- return React.createElement(Blog, {
4598
- key: slice.__component + "-" + slice.id,
4599
- slice: _extends({}, slice, {
4600
- blog_posts: slice.blog_posts.data
4601
- }),
4602
- blogPosts: blogPosts
4603
- });
4604
- case 'sections.glossary':
4605
- return React.createElement(Glossary, {
4606
- key: slice.__component + "-" + slice.id,
4607
- slice: _extends({}, slice, {
4608
- glossary_items: slice.glossary_items.data
4609
- })
4610
- });
4611
- case 'sections.customer-stories':
4612
- return React.createElement(CustomerStories, {
4613
- key: slice.__component + "-" + slice.id,
4614
- slice: _extends({}, slice, {
4615
- customer_stories: slice.customer_stories.data
4616
- }),
4617
- customerStories: customerStories
4618
- });
4619
- case 'sections.comparison':
4620
- return React.createElement(Comparison, {
4621
- key: slice.__component + "-" + slice.id,
4622
- slice: slice
4623
- });
4624
- default:
4625
- if (CustomSlice) {
4626
- return React.createElement(CustomSlice, {
4627
- key: slice.__component + "-" + slice.id,
4628
- id: slice.__component,
4629
- slice: slice
4630
- });
4631
- }
4632
- return React.createElement("div", {
4633
- key: slice.__component + "-" + slice.id
4634
- }, "Slice component not supported");
4635
- }
4636
- }));
4637
- };
4638
-
4639
- export { SliceRenderer };
4640
- //# sourceMappingURL=strapi-slices.esm.js.map