@treely/strapi-slices 2.4.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.d.ts +6 -0
  2. package/dist/components/portfolio/PortfolioProjectCard/index.d.ts +2 -0
  3. package/dist/components/portfolio/PortfolioProjectCard/messages.de.d.ts +7 -0
  4. package/dist/components/portfolio/PortfolioProjectCard/messages.en.d.ts +7 -0
  5. package/dist/models/PortfolioProject.d.ts +3 -0
  6. package/dist/models/strapi/StrapiProject.d.ts +5 -3
  7. package/dist/models/strapi/StrapiProjectCard.d.ts +2 -12
  8. package/dist/rootMessages.de.d.ts +4 -0
  9. package/dist/rootMessages.en.d.ts +4 -0
  10. package/dist/slices/ProjectsGrid/ProjectsGrid.d.ts +2 -4
  11. package/dist/slices/TextWithCard/TextWithCard.d.ts +2 -0
  12. package/dist/strapi-slices.cjs.development.js +300 -264
  13. package/dist/strapi-slices.cjs.development.js.map +1 -1
  14. package/dist/strapi-slices.cjs.production.min.js +1 -1
  15. package/dist/strapi-slices.cjs.production.min.js.map +1 -1
  16. package/dist/strapi-slices.esm.js +301 -265
  17. package/dist/strapi-slices.esm.js.map +1 -1
  18. package/dist/test/integrationMocks/portfolioProjectMock.d.ts +3 -0
  19. package/package.json +1 -1
  20. package/src/components/SliceRenderer/SliceRenderer.tsx +2 -1
  21. package/src/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.test.tsx +53 -0
  22. package/src/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.tsx +69 -0
  23. package/src/components/portfolio/PortfolioProjectCard/index.ts +3 -0
  24. package/src/components/portfolio/PortfolioProjectCard/messages.de.ts +8 -0
  25. package/src/components/portfolio/PortfolioProjectCard/messages.en.ts +8 -0
  26. package/src/models/PortfolioProject.ts +3 -0
  27. package/src/models/strapi/StrapiProject.ts +5 -3
  28. package/src/models/strapi/StrapiProjectCard.ts +2 -12
  29. package/src/rootMessages.de.ts +2 -0
  30. package/src/rootMessages.en.ts +2 -0
  31. package/src/slices/ProjectsGrid/ProjectsGrid.stories.tsx +2 -56
  32. package/src/slices/ProjectsGrid/ProjectsGrid.test.tsx +14 -13
  33. package/src/slices/ProjectsGrid/ProjectsGrid.tsx +46 -62
  34. package/src/slices/TextWithCard/TextWithCard.stories.tsx +11 -15
  35. package/src/slices/TextWithCard/TextWithCard.test.tsx +16 -5
  36. package/src/slices/TextWithCard/TextWithCard.tsx +10 -18
  37. package/src/test/integrationMocks/portfolioProjectMock.ts +18 -0
  38. package/src/test/strapiMocks/strapiProject.ts +7 -0
  39. package/src/test/strapiMocks/strapiProjectCard.ts +0 -13
@@ -2127,234 +2127,55 @@ var TextWithTextCards = function TextWithTextCards(_ref) {
2127
2127
  }))));
2128
2128
  };
2129
2129
 
2130
- var TextWithCard = function TextWithCard(_ref) {
2131
- var slice = _ref.slice;
2132
- var card = React__default.default.createElement(boemly.GridItem, {
2133
- colSpan: [4, null, null, null, 2],
2134
- rowSpan: 1,
2135
- position: "relative",
2136
- "data-testid": "card-position-" + slice.cardPosition
2137
- }, slice.card && React__default.default.createElement(boemly.ProjectCard, {
2138
- facts: slice.card.facts,
2139
- footerSubTitle: slice.card.footerSubTitle,
2140
- footerTitle: slice.card.footerTitle,
2141
- title: slice.card.title,
2142
- image: React__default.default.createElement(Image__default.default, {
2143
- src: strapiMediaUrl(slice.card.image.img, 'medium'),
2144
- alt: slice.card.image.alt,
2145
- fill: true,
2146
- style: {
2147
- objectFit: slice.card.image.objectFit || 'cover'
2148
- }
2149
- })
2150
- }));
2151
- return React__default.default.createElement(boemly.DefaultSectionContainer, {
2152
- title: slice.title
2153
- }, React__default.default.createElement(boemly.Wrapper, null, React__default.default.createElement(boemly.Grid, {
2154
- templateColumns: ['repeat(4, auto)', null, null, null, 'repeat(6, auto)'],
2155
- templateRows: ['repeat(2, auto)', null, null, null, 'repeat(1, auto)'],
2156
- rowGap: "12",
2157
- columnGap: ['0', null, null, null, '28']
2158
- }, slice.cardPosition === 'left' && card, React__default.default.createElement(boemly.GridItem, {
2159
- colSpan: 4,
2160
- rowSpan: 1,
2161
- position: "relative"
2162
- }, React__default.default.createElement(boemly.DefaultSectionHeader, {
2163
- tagline: slice.tagline,
2164
- title: slice.title,
2165
- text: slice.text
2166
- }), slice.listItems && React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(boemly.Spacer, {
2167
- height: "10"
2168
- }), React__default.default.createElement(boemly.BoemlyList, {
2169
- listItems: slice.listItems
2170
- }), React__default.default.createElement(boemly.Spacer, {
2171
- height: "10"
2172
- })), slice.button && React__default.default.createElement(StrapiLinkButton, {
2173
- link: slice.button,
2174
- size: "md",
2175
- colorScheme: "white",
2176
- variant: "outline",
2177
- rightIcon: React__default.default.createElement(react.ArrowRight, null)
2178
- })), slice.cardPosition === 'right' && card)));
2179
- };
2180
-
2181
- var MEDIUM_TRANSITION_DURATION = 0.2;
2182
-
2183
- var LinkCardsGrid = function LinkCardsGrid(_ref) {
2184
- var slice = _ref.slice;
2185
- return React__default.default.createElement(boemly.DefaultSectionContainer, {
2186
- title: slice.title
2187
- }, React__default.default.createElement(boemly.Wrapper, null, React__default.default.createElement(boemly.DefaultSectionHeader, {
2188
- tagline: slice.tagline,
2189
- title: slice.title,
2190
- text: slice.text
2191
- }), React__default.default.createElement(boemly.SimpleGrid, {
2192
- mt: "16",
2193
- columns: [1, null, null, null, 2],
2194
- gap: "4"
2195
- }, slice.cards.map(function (_ref2) {
2196
- var id = _ref2.id,
2197
- title = _ref2.title,
2198
- text = _ref2.text,
2199
- link = _ref2.link;
2200
- return React__default.default.createElement(boemly.Box, {
2201
- key: id,
2202
- as: Link__default.default,
2203
- href: strapiLinkUrl(link),
2204
- "data-testid": "link",
2205
- px: "10",
2206
- py: "8",
2207
- borderStyle: "solid",
2208
- borderWidth: "thin",
2209
- borderColor: "gray.200",
2210
- borderRadius: "2xl",
2211
- display: "flex",
2212
- flexDir: "row",
2213
- alignItems: "center",
2214
- justifyContent: "space-between",
2215
- cursor: "pointer",
2216
- transitionDuration: MEDIUM_TRANSITION_DURATION + "s",
2217
- _hover: {
2218
- backgroundColor: 'gray.50'
2219
- }
2220
- }, React__default.default.createElement("div", null, React__default.default.createElement(boemly.Heading, {
2221
- as: "h4",
2222
- size: "lg"
2223
- }, title), text && React__default.default.createElement(boemly.Text, {
2224
- mt: "2",
2225
- size: "smRegularNormal"
2226
- }, text)), React__default.default.createElement(boemly.Box, {
2227
- display: "flex",
2228
- alignItems: "center",
2229
- justifyContent: "center",
2230
- borderStyle: "solid",
2231
- borderWidth: "thin",
2232
- borderColor: "gray.200",
2233
- borderRadius: "2xl",
2234
- height: "12",
2235
- width: "12",
2236
- minWidth: "12",
2237
- minHeight: "12",
2238
- ml: "6",
2239
- backgroundColor: "white"
2240
- }, React__default.default.createElement(react.CaretRight, null)));
2241
- }))));
2242
- };
2130
+ var CreditsAvailableState;
2131
+ (function (CreditsAvailableState) {
2132
+ CreditsAvailableState["YES"] = "yes";
2133
+ CreditsAvailableState["SOME"] = "some";
2134
+ CreditsAvailableState["NO"] = "no";
2135
+ CreditsAvailableState["NOT_YET"] = "notYet";
2136
+ })(CreditsAvailableState || (CreditsAvailableState = {}));
2137
+ var CreditsAvailableState$1 = CreditsAvailableState;
2243
2138
 
2244
- var colors = {
2245
- dark: {
2246
- tagline: 'white',
2247
- title: 'white',
2248
- text: 'white',
2249
- background: 'gray.900'
2250
- },
2251
- light: {
2252
- tagline: 'primary.500',
2253
- title: 'black',
2254
- text: 'gray.500',
2255
- background: 'primary.50'
2256
- }
2139
+ var FORMAT_AS_HECTARE_CONFIG = {
2140
+ unit: 'hectare',
2141
+ unitDisplay: 'short',
2142
+ style: 'unit',
2143
+ maximumFractionDigits: 2
2257
2144
  };
2258
- var SmallHero = function SmallHero(_ref) {
2259
- var slice = _ref.slice,
2260
- theme = _ref.theme;
2261
- return React__default.default.createElement(boemly.Box, {
2262
- position: "relative",
2263
- width: "full",
2264
- height: "xl",
2265
- backgroundColor: colors[theme].background
2266
- }, slice.image && React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(Image__default.default, {
2267
- src: strapiMediaUrl(slice.image.img, 'xLarge'),
2268
- alt: slice.image.alt,
2269
- fill: true,
2270
- style: {
2271
- objectFit: slice.image.objectFit || 'cover'
2272
- }
2273
- }), slice.gradient && React__default.default.createElement(boemly.Gradient, null)), React__default.default.createElement(boemly.Box, {
2274
- position: "absolute",
2275
- left: "0",
2276
- top: "60%",
2277
- width: "full",
2278
- textAlign: "center",
2279
- transform: "translateY(-50%)"
2280
- }, React__default.default.createElement(boemly.Wrapper, null, React__default.default.createElement(React__default.default.Fragment, null, slice.tags && React__default.default.createElement(boemly.Flex, {
2281
- direction: "row",
2282
- justify: "center",
2283
- gap: "2",
2284
- mb: "4",
2285
- wrap: "wrap"
2286
- }, slice.tags.map(function (_ref2) {
2287
- var id = _ref2.id,
2288
- text = _ref2.text,
2289
- colorScheme = _ref2.colorScheme;
2290
- return React__default.default.createElement(boemly.Tag, {
2291
- key: id,
2292
- colorScheme: colorScheme,
2293
- size: "md",
2294
- variant: "subtle"
2295
- }, text);
2296
- })), React__default.default.createElement(boemly.DefaultSectionHeader, {
2297
- isHero: true,
2298
- tagline: slice.tagline,
2299
- title: slice.title,
2300
- text: slice.subTitle,
2301
- taglineProps: {
2302
- color: colors[theme].tagline,
2303
- textAlign: 'center',
2304
- mx: 'auto'
2305
- },
2306
- titleProps: {
2307
- color: colors[theme].title,
2308
- maxW: '4xl',
2309
- textAlign: 'center',
2310
- mx: 'auto'
2311
- },
2312
- textProps: {
2313
- maxW: '2xl',
2314
- textAlign: 'center',
2315
- mx: 'auto',
2316
- color: colors[theme].text
2317
- }
2318
- }), slice.button && React__default.default.createElement(StrapiLinkButton, {
2319
- link: slice.button,
2320
- mt: "6",
2321
- size: "lg"
2322
- })))));
2145
+ var FORMAT_AS_PERCENT_CONFIG = {
2146
+ style: 'percent',
2147
+ maximumFractionDigits: 2
2323
2148
  };
2324
2149
 
2325
- var _templateObject$4, _templateObject2$1;
2326
- var BlogItemContainer = /*#__PURE__*/styled__default.default(boemly.Link)(_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"])));
2327
- var ImageContainer$1 = /*#__PURE__*/styled__default.default(boemly.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);
2328
-
2329
- var messagesDe$a = {
2150
+ var messagesDe$b = {
2330
2151
  'sections.comparison.backgroundShapes': 'Hintergrundformen'
2331
2152
  };
2332
2153
 
2333
- var messagesDe$9 = {
2154
+ var messagesDe$a = {
2334
2155
  'sections.cta.backgroundShapes': 'Dunkle Hintergrundformen',
2335
2156
  'sections.cta.backgroundShapesLight': 'Helle Hintergrundformen'
2336
2157
  };
2337
2158
 
2338
- var messagesDe$8 = {
2159
+ var messagesDe$9 = {
2339
2160
  'sections.customerStories.more': 'Weiterlesen'
2340
2161
  };
2341
2162
 
2342
- var messagesDe$7 = {
2163
+ var messagesDe$8 = {
2343
2164
  'sections.glossary.copyButtonLabel': 'Kopiere den Link zu diesem Abschnitt in die Zwischenablage',
2344
2165
  'sections.glossary.copySuccessMessage': 'Link in die Zwischenablage kopiert',
2345
2166
  'sections.glossary.copyFailureMessage': 'Link konnte nicht in die Zwischenablage kopiert werden'
2346
2167
  };
2347
2168
 
2348
- var messagesDe$6 = {
2169
+ var messagesDe$7 = {
2349
2170
  'sections.projectFacts.projectInfo.value': 'Projekt Infos',
2350
2171
  'projects.projectFacts.properties.area': 'Fläche'
2351
2172
  };
2352
2173
 
2353
- var messagesDe$5 = {
2174
+ var messagesDe$6 = {
2354
2175
  'sections.projectsMap.link.text': 'Mehr Infos'
2355
2176
  };
2356
2177
 
2357
- var messagesDe$4 = {
2178
+ var messagesDe$5 = {
2358
2179
  'sections.shopCheckout.intro.price': 'Preis',
2359
2180
  'sections.shopCheckout.contributionValue.label.EUR': 'Geben sie einen Betrag in € ein',
2360
2181
  'sections.shopCheckout.contributionValue.label.CHF': 'Geben sie einen Betrag in CHF ein',
@@ -2369,19 +2190,19 @@ var messagesDe$4 = {
2369
2190
  'sections.shopCheckout.submit': 'Kaufen'
2370
2191
  };
2371
2192
 
2372
- var messagesDe$3 = {
2193
+ var messagesDe$4 = {
2373
2194
  'components.creditsAvailableBadge.text.yes': 'Credits verfügbar',
2374
2195
  'components.creditsAvailableBadge.text.some': 'Einige verbleibende Credits',
2375
2196
  'components.creditsAvailableBadge.text.no': 'Keine verbleibenden Credits',
2376
2197
  'components.creditsAvailableBadge.text.notYet': 'Noch keine Credits verfügbar'
2377
2198
  };
2378
2199
 
2379
- var messagesDe$2 = {
2200
+ var messagesDe$3 = {
2380
2201
  'features.portfolio.documentsDownloadList.projectDocuments': 'Projektdokumente',
2381
2202
  'features.portfolio.documentsDownloadList.downloadDocument': 'Dokument herunterladen'
2382
2203
  };
2383
2204
 
2384
- var messagesDe$1 = {
2205
+ var messagesDe$2 = {
2385
2206
  'features.projectInfo.projectInfo.value': 'Projekt Infos',
2386
2207
  'features.projectInfo.properties.area': 'Projekt Fläche',
2387
2208
  'features.projectInfo.properties.location': 'Standort',
@@ -2396,7 +2217,7 @@ var messagesDe$1 = {
2396
2217
  'features.projectInfo.properties.year': '{years} {years, plural, one {Jahr} other {Jahre} }'
2397
2218
  };
2398
2219
 
2399
- var messagesDe = {
2220
+ var messagesDe$1 = {
2400
2221
  'portfolio.smallCheckout.contributionValueCurrency.label.CHF': 'Geben Sie den Beitrag in Fr. ein',
2401
2222
  'portfolio.smallCheckout.contributionValueCurrency.label.EUR': 'Geben Sie den Beitrag in € ein',
2402
2223
  'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',
@@ -2412,42 +2233,49 @@ var messagesDe = {
2412
2233
  'portfolio.smallCheckout.cta.button': 'Unser Vertriebsteam kontaktieren'
2413
2234
  };
2414
2235
 
2236
+ var messagesDe = {
2237
+ 'components.portfolioProjectCard.text.yes': 'Credits verfügbar',
2238
+ 'components.portfolioProjectCard.text.some': 'Einige verbleibende Credits',
2239
+ 'components.portfolioProjectCard.text.no': 'Keine verbleibenden Credits',
2240
+ 'components.portfolioProjectCard.text.notYet': 'Noch keine Credits verfügbar'
2241
+ };
2242
+
2415
2243
  var unitMessagesEn = {
2416
2244
  'unit.formatter.tonsCo2': '{number} /tCO₂',
2417
2245
  'unit.formatter.tonsCo2PerYear': '{number} tCO₂/year'
2418
2246
  };
2419
2247
 
2420
- var rootMessagesDe = /*#__PURE__*/_extends({}, messagesDe$3, messagesDe$2, messagesDe$1, messagesDe, messagesDe$a, messagesDe$9, messagesDe$8, messagesDe$7, messagesDe$6, messagesDe$5, messagesDe$4, unitMessagesEn);
2248
+ var rootMessagesDe = /*#__PURE__*/_extends({}, messagesDe$4, messagesDe$3, messagesDe, messagesDe$2, messagesDe$1, messagesDe$b, messagesDe$a, messagesDe$9, messagesDe$8, messagesDe$7, messagesDe$6, messagesDe$5, unitMessagesEn);
2421
2249
 
2422
- var messagesEn$a = {
2250
+ var messagesEn$b = {
2423
2251
  'sections.comparison.backgroundShapes': 'Background shapes'
2424
2252
  };
2425
2253
 
2426
- var messagesEn$9 = {
2254
+ var messagesEn$a = {
2427
2255
  'sections.cta.backgroundShapesDark': 'Dark background shapes',
2428
2256
  'sections.cta.backgroundShapesLight': 'Light background shapes'
2429
2257
  };
2430
2258
 
2431
- var messagesEn$8 = {
2259
+ var messagesEn$9 = {
2432
2260
  'sections.customerStories.more': 'Read more'
2433
2261
  };
2434
2262
 
2435
- var messagesEn$7 = {
2263
+ var messagesEn$8 = {
2436
2264
  'sections.glossary.copyButtonLabel': 'Copy a link to this section to your clipboard',
2437
2265
  'sections.glossary.copySuccessMessage': 'Copied the link to your clipboard',
2438
2266
  'sections.glossary.copyFailureMessage': 'Could not copy link to clipboard'
2439
2267
  };
2440
2268
 
2441
- var messagesEn$6 = {
2269
+ var messagesEn$7 = {
2442
2270
  'sections.projectFacts.projectInfo.value': 'Project Infos',
2443
2271
  'projects.projectFacts.properties.area': 'Area'
2444
2272
  };
2445
2273
 
2446
- var messagesEn$5 = {
2274
+ var messagesEn$6 = {
2447
2275
  'sections.projectsMap.link.text': 'Show more info'
2448
2276
  };
2449
2277
 
2450
- var messagesEn$4 = {
2278
+ var messagesEn$5 = {
2451
2279
  'sections.shopCheckout.intro.price': 'Price',
2452
2280
  'sections.shopCheckout.contributionValue.label.EUR': 'Enter contribution value in €',
2453
2281
  'sections.shopCheckout.contributionValue.label.CHF': 'Enter contribution value in CHF',
@@ -2462,19 +2290,19 @@ var messagesEn$4 = {
2462
2290
  'sections.shopCheckout.submit': 'Checkout'
2463
2291
  };
2464
2292
 
2465
- var messagesEn$3 = {
2293
+ var messagesEn$4 = {
2466
2294
  'components.creditsAvailableBadge.text.yes': 'Credits available',
2467
2295
  'components.creditsAvailableBadge.text.some': 'Some remaining credits',
2468
2296
  'components.creditsAvailableBadge.text.no': 'No remaining credits',
2469
2297
  'components.creditsAvailableBadge.text.notYet': 'No credits available yet'
2470
2298
  };
2471
2299
 
2472
- var messagesEn$2 = {
2300
+ var messagesEn$3 = {
2473
2301
  'features.portfolio.documentsDownloadList.projectDocuments': 'Project documents',
2474
2302
  'features.portfolio.documentsDownloadList.downloadDocument': 'Download document'
2475
2303
  };
2476
2304
 
2477
- var messagesEn$1 = {
2305
+ var messagesEn$2 = {
2478
2306
  'features.projectInfo.projectInfo.value': 'Project Infos',
2479
2307
  'features.projectInfo.properties.area': 'Project Area',
2480
2308
  'features.projectInfo.properties.location': 'Location',
@@ -2489,7 +2317,7 @@ var messagesEn$1 = {
2489
2317
  'features.projectInfo.properties.year': '{years} {years, plural, one {year} other {years} }'
2490
2318
  };
2491
2319
 
2492
- var messagesEn = {
2320
+ var messagesEn$1 = {
2493
2321
  'portfolio.smallCheckout.contributionValueCurrency.label.CHF': 'Contribution Amount in CHF',
2494
2322
  'portfolio.smallCheckout.contributionValueCurrency.label.EUR': 'Contribution Amount in €',
2495
2323
  'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',
@@ -2505,10 +2333,17 @@ var messagesEn = {
2505
2333
  'portfolio.smallCheckout.cta.button': 'Contact our Sales Team'
2506
2334
  };
2507
2335
 
2508
- var rootMessagesEn = /*#__PURE__*/_extends({}, messagesEn$3, messagesEn$2, messagesEn$1, messagesEn, messagesEn$a, messagesEn$9, messagesEn$8, messagesEn$7, messagesEn$6, messagesEn$5, messagesEn$4, unitMessagesEn);
2336
+ var messagesEn = {
2337
+ 'components.portfolioProjectCard.text.yes': 'Credits available',
2338
+ 'components.portfolioProjectCard.text.some': 'Some remaining credits',
2339
+ 'components.portfolioProjectCard.text.no': 'No remaining credits',
2340
+ 'components.portfolioProjectCard.text.notYet': 'No credits available yet'
2341
+ };
2342
+
2343
+ var rootMessagesEn = /*#__PURE__*/_extends({}, messagesEn$4, messagesEn$3, messagesEn, messagesEn$2, messagesEn$1, messagesEn$b, messagesEn$a, messagesEn$9, messagesEn$8, messagesEn$7, messagesEn$6, messagesEn$5, unitMessagesEn);
2509
2344
 
2510
- var _templateObject$3;
2511
- var GLOBAL_STYLE = /*#__PURE__*/react$1.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);
2345
+ var _templateObject$4;
2346
+ var GLOBAL_STYLE = /*#__PURE__*/react$1.css(_templateObject$4 || (_templateObject$4 = /*#__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);
2512
2347
 
2513
2348
  var FONT_CUSTOMIZATIONS = {
2514
2349
  body: 'Inter',
@@ -2542,6 +2377,236 @@ var ContextProvider = function ContextProvider(_ref) {
2542
2377
  }, children));
2543
2378
  };
2544
2379
 
2380
+ var PortfolioProjectCard = function PortfolioProjectCard(_ref) {
2381
+ var _creditsAvailableMess, _project$creditsAvail, _project$thumbnail, _project$thumbnail2, _project$thumbnail3;
2382
+ var project = _ref.project;
2383
+ var _useContext = React.useContext(IntlContext),
2384
+ formatMessage = _useContext.formatMessage,
2385
+ formatNumber = _useContext.formatNumber;
2386
+ var creditsAvailableMessages = (_creditsAvailableMess = {}, _creditsAvailableMess[CreditsAvailableState$1.YES] = formatMessage({
2387
+ id: 'components.portfolioProjectCard.text.yes'
2388
+ }), _creditsAvailableMess[CreditsAvailableState$1.SOME] = formatMessage({
2389
+ id: 'components.portfolioProjectCard.text.some'
2390
+ }), _creditsAvailableMess[CreditsAvailableState$1.NO] = formatMessage({
2391
+ id: 'components.portfolioProjectCard.text.no'
2392
+ }), _creditsAvailableMess[CreditsAvailableState$1.NOT_YET] = formatMessage({
2393
+ id: 'components.portfolioProjectCard.text.notYet'
2394
+ }), _creditsAvailableMess);
2395
+ return React__default.default.createElement(boemly.ProjectCard, {
2396
+ title: project.title,
2397
+ facts: [{
2398
+ id: 1,
2399
+ text: formatNumber((project.area || 0) / 10000, FORMAT_AS_HECTARE_CONFIG)
2400
+ }, {
2401
+ id: 2,
2402
+ text: project.location || ''
2403
+ }],
2404
+ footerTitle: creditsAvailableMessages[(_project$creditsAvail = project.creditsAvailable) != null ? _project$creditsAvail : CreditsAvailableState$1.NOT_YET],
2405
+ footerSubTitle: project.footerSubTitle || '',
2406
+ image: project.thumbnail && React__default.default.createElement(Image__default.default, {
2407
+ src: strapiMediaUrl((_project$thumbnail = project.thumbnail) == null ? void 0 : _project$thumbnail.img, 'medium'),
2408
+ alt: (_project$thumbnail2 = project.thumbnail) == null ? void 0 : _project$thumbnail2.alt,
2409
+ fill: true,
2410
+ style: {
2411
+ objectFit: ((_project$thumbnail3 = project.thumbnail) == null ? void 0 : _project$thumbnail3.objectFit) || 'cover'
2412
+ }
2413
+ })
2414
+ });
2415
+ };
2416
+
2417
+ var TextWithCard = function TextWithCard(_ref) {
2418
+ var slice = _ref.slice,
2419
+ projects = _ref.projects;
2420
+ var fpmData = projects.find(function (project) {
2421
+ var _slice$card;
2422
+ return project.slug === ((_slice$card = slice.card) == null || (_slice$card = _slice$card.project) == null ? void 0 : _slice$card.data.attributes.slug);
2423
+ });
2424
+ var card = React__default.default.createElement(boemly.GridItem, {
2425
+ colSpan: [4, null, null, null, 2],
2426
+ rowSpan: 1,
2427
+ position: "relative",
2428
+ "data-testid": "card-position-" + slice.cardPosition
2429
+ }, slice.card && fpmData && React__default.default.createElement(PortfolioProjectCard, {
2430
+ project: _extends({}, slice.card, fpmData)
2431
+ }));
2432
+ return React__default.default.createElement(boemly.DefaultSectionContainer, {
2433
+ title: slice.title
2434
+ }, React__default.default.createElement(boemly.Wrapper, null, React__default.default.createElement(boemly.Grid, {
2435
+ templateColumns: ['repeat(4, auto)', null, null, null, 'repeat(6, auto)'],
2436
+ templateRows: ['repeat(2, auto)', null, null, null, 'repeat(1, auto)'],
2437
+ rowGap: "12",
2438
+ columnGap: ['0', null, null, null, '28']
2439
+ }, slice.cardPosition === 'left' && card, React__default.default.createElement(boemly.GridItem, {
2440
+ colSpan: 4,
2441
+ rowSpan: 1,
2442
+ position: "relative"
2443
+ }, React__default.default.createElement(boemly.DefaultSectionHeader, {
2444
+ tagline: slice.tagline,
2445
+ title: slice.title,
2446
+ text: slice.text
2447
+ }), slice.listItems && React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(boemly.Spacer, {
2448
+ height: "10"
2449
+ }), React__default.default.createElement(boemly.BoemlyList, {
2450
+ listItems: slice.listItems
2451
+ }), React__default.default.createElement(boemly.Spacer, {
2452
+ height: "10"
2453
+ })), slice.button && React__default.default.createElement(StrapiLinkButton, {
2454
+ link: slice.button,
2455
+ size: "md",
2456
+ colorScheme: "white",
2457
+ variant: "outline",
2458
+ rightIcon: React__default.default.createElement(react.ArrowRight, null)
2459
+ })), slice.cardPosition === 'right' && card)));
2460
+ };
2461
+
2462
+ var MEDIUM_TRANSITION_DURATION = 0.2;
2463
+
2464
+ var LinkCardsGrid = function LinkCardsGrid(_ref) {
2465
+ var slice = _ref.slice;
2466
+ return React__default.default.createElement(boemly.DefaultSectionContainer, {
2467
+ title: slice.title
2468
+ }, React__default.default.createElement(boemly.Wrapper, null, React__default.default.createElement(boemly.DefaultSectionHeader, {
2469
+ tagline: slice.tagline,
2470
+ title: slice.title,
2471
+ text: slice.text
2472
+ }), React__default.default.createElement(boemly.SimpleGrid, {
2473
+ mt: "16",
2474
+ columns: [1, null, null, null, 2],
2475
+ gap: "4"
2476
+ }, slice.cards.map(function (_ref2) {
2477
+ var id = _ref2.id,
2478
+ title = _ref2.title,
2479
+ text = _ref2.text,
2480
+ link = _ref2.link;
2481
+ return React__default.default.createElement(boemly.Box, {
2482
+ key: id,
2483
+ as: Link__default.default,
2484
+ href: strapiLinkUrl(link),
2485
+ "data-testid": "link",
2486
+ px: "10",
2487
+ py: "8",
2488
+ borderStyle: "solid",
2489
+ borderWidth: "thin",
2490
+ borderColor: "gray.200",
2491
+ borderRadius: "2xl",
2492
+ display: "flex",
2493
+ flexDir: "row",
2494
+ alignItems: "center",
2495
+ justifyContent: "space-between",
2496
+ cursor: "pointer",
2497
+ transitionDuration: MEDIUM_TRANSITION_DURATION + "s",
2498
+ _hover: {
2499
+ backgroundColor: 'gray.50'
2500
+ }
2501
+ }, React__default.default.createElement("div", null, React__default.default.createElement(boemly.Heading, {
2502
+ as: "h4",
2503
+ size: "lg"
2504
+ }, title), text && React__default.default.createElement(boemly.Text, {
2505
+ mt: "2",
2506
+ size: "smRegularNormal"
2507
+ }, text)), React__default.default.createElement(boemly.Box, {
2508
+ display: "flex",
2509
+ alignItems: "center",
2510
+ justifyContent: "center",
2511
+ borderStyle: "solid",
2512
+ borderWidth: "thin",
2513
+ borderColor: "gray.200",
2514
+ borderRadius: "2xl",
2515
+ height: "12",
2516
+ width: "12",
2517
+ minWidth: "12",
2518
+ minHeight: "12",
2519
+ ml: "6",
2520
+ backgroundColor: "white"
2521
+ }, React__default.default.createElement(react.CaretRight, null)));
2522
+ }))));
2523
+ };
2524
+
2525
+ var colors = {
2526
+ dark: {
2527
+ tagline: 'white',
2528
+ title: 'white',
2529
+ text: 'white',
2530
+ background: 'gray.900'
2531
+ },
2532
+ light: {
2533
+ tagline: 'primary.500',
2534
+ title: 'black',
2535
+ text: 'gray.500',
2536
+ background: 'primary.50'
2537
+ }
2538
+ };
2539
+ var SmallHero = function SmallHero(_ref) {
2540
+ var slice = _ref.slice,
2541
+ theme = _ref.theme;
2542
+ return React__default.default.createElement(boemly.Box, {
2543
+ position: "relative",
2544
+ width: "full",
2545
+ height: "xl",
2546
+ backgroundColor: colors[theme].background
2547
+ }, slice.image && React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(Image__default.default, {
2548
+ src: strapiMediaUrl(slice.image.img, 'xLarge'),
2549
+ alt: slice.image.alt,
2550
+ fill: true,
2551
+ style: {
2552
+ objectFit: slice.image.objectFit || 'cover'
2553
+ }
2554
+ }), slice.gradient && React__default.default.createElement(boemly.Gradient, null)), React__default.default.createElement(boemly.Box, {
2555
+ position: "absolute",
2556
+ left: "0",
2557
+ top: "60%",
2558
+ width: "full",
2559
+ textAlign: "center",
2560
+ transform: "translateY(-50%)"
2561
+ }, React__default.default.createElement(boemly.Wrapper, null, React__default.default.createElement(React__default.default.Fragment, null, slice.tags && React__default.default.createElement(boemly.Flex, {
2562
+ direction: "row",
2563
+ justify: "center",
2564
+ gap: "2",
2565
+ mb: "4",
2566
+ wrap: "wrap"
2567
+ }, slice.tags.map(function (_ref2) {
2568
+ var id = _ref2.id,
2569
+ text = _ref2.text,
2570
+ colorScheme = _ref2.colorScheme;
2571
+ return React__default.default.createElement(boemly.Tag, {
2572
+ key: id,
2573
+ colorScheme: colorScheme,
2574
+ size: "md",
2575
+ variant: "subtle"
2576
+ }, text);
2577
+ })), React__default.default.createElement(boemly.DefaultSectionHeader, {
2578
+ isHero: true,
2579
+ tagline: slice.tagline,
2580
+ title: slice.title,
2581
+ text: slice.subTitle,
2582
+ taglineProps: {
2583
+ color: colors[theme].tagline,
2584
+ textAlign: 'center',
2585
+ mx: 'auto'
2586
+ },
2587
+ titleProps: {
2588
+ color: colors[theme].title,
2589
+ maxW: '4xl',
2590
+ textAlign: 'center',
2591
+ mx: 'auto'
2592
+ },
2593
+ textProps: {
2594
+ maxW: '2xl',
2595
+ textAlign: 'center',
2596
+ mx: 'auto',
2597
+ color: colors[theme].text
2598
+ }
2599
+ }), slice.button && React__default.default.createElement(StrapiLinkButton, {
2600
+ link: slice.button,
2601
+ mt: "6",
2602
+ size: "lg"
2603
+ })))));
2604
+ };
2605
+
2606
+ var _templateObject$3, _templateObject2$1;
2607
+ var BlogItemContainer = /*#__PURE__*/styled__default.default(boemly.Link)(_templateObject$3 || (_templateObject$3 = /*#__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"])));
2608
+ var ImageContainer$1 = /*#__PURE__*/styled__default.default(boemly.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);
2609
+
2545
2610
  var Blog = function Blog(_ref) {
2546
2611
  var slice = _ref.slice,
2547
2612
  blogPosts = _ref.blogPosts;
@@ -2611,21 +2676,22 @@ var ConditionalWrapper = function ConditionalWrapper(_ref) {
2611
2676
  return condition ? wrapper(children) : children;
2612
2677
  };
2613
2678
  var ProjectsGrid = function ProjectsGrid(_ref2) {
2614
- var slice = _ref2.slice;
2679
+ var projects = _ref2.projects;
2680
+ var filteredProjects = projects.filter(function (p) {
2681
+ return p.thumbnail && p.slug && p.isPublic;
2682
+ });
2615
2683
  return React__default.default.createElement(boemly.DefaultSectionContainer, null, React__default.default.createElement(boemly.Wrapper, null, React__default.default.createElement(boemly.SimpleGrid, {
2616
2684
  columns: [1, null, null, 2, null, 3],
2617
2685
  gap: "16"
2618
- }, slice.projects.map(function (card) {
2619
- var _card$project;
2686
+ }, filteredProjects.map(function (project) {
2620
2687
  return React__default.default.createElement(ConditionalWrapper, {
2621
- key: card.id,
2622
- condition: !!((_card$project = card.project) != null && _card$project.data),
2688
+ key: project.id,
2689
+ condition: !!project.slug,
2623
2690
  wrapper: function wrapper(children) {
2624
- var _card$project2;
2625
2691
  return React__default.default.createElement(Link__default.default, {
2626
- href: "/portfolio/" + ((_card$project2 = card.project) == null || (_card$project2 = _card$project2.data) == null ? void 0 : _card$project2.attributes.slug),
2692
+ href: "/portfolio/" + project.slug,
2627
2693
  passHref: true,
2628
- key: card.id,
2694
+ key: project.id,
2629
2695
  legacyBehavior: true
2630
2696
  }, children);
2631
2697
  }
@@ -2639,19 +2705,8 @@ var ProjectsGrid = function ProjectsGrid(_ref2) {
2639
2705
  _hover: {
2640
2706
  boxShadow: 'lg'
2641
2707
  }
2642
- }, React__default.default.createElement(boemly.ProjectCard, {
2643
- title: card.title,
2644
- facts: card.facts,
2645
- footerTitle: card.footerTitle,
2646
- footerSubTitle: card.footerSubTitle,
2647
- image: React__default.default.createElement(Image__default.default, {
2648
- src: strapiMediaUrl(card.image.img, 'medium'),
2649
- alt: card.image.alt,
2650
- fill: true,
2651
- style: {
2652
- objectFit: card.image.objectFit || 'cover'
2653
- }
2654
- })
2708
+ }, React__default.default.createElement(PortfolioProjectCard, {
2709
+ project: project
2655
2710
  })));
2656
2711
  }))));
2657
2712
  };
@@ -2701,15 +2756,6 @@ var MinimalProviders = function MinimalProviders(_ref) {
2701
2756
  }, children));
2702
2757
  };
2703
2758
 
2704
- var CreditsAvailableState;
2705
- (function (CreditsAvailableState) {
2706
- CreditsAvailableState["YES"] = "yes";
2707
- CreditsAvailableState["SOME"] = "some";
2708
- CreditsAvailableState["NO"] = "no";
2709
- CreditsAvailableState["NOT_YET"] = "notYet";
2710
- })(CreditsAvailableState || (CreditsAvailableState = {}));
2711
- var CreditsAvailableState$1 = CreditsAvailableState;
2712
-
2713
2759
  var CreditsAvailableBadge = function CreditsAvailableBadge(_ref) {
2714
2760
  var _variants;
2715
2761
  var status = _ref.status,
@@ -4108,17 +4154,6 @@ var convertCo2AmountKgToTons = function convertCo2AmountKgToTons(amount) {
4108
4154
  return parseInt(amount, 10) / 1000;
4109
4155
  };
4110
4156
 
4111
- var FORMAT_AS_HECTARE_CONFIG = {
4112
- unit: 'hectare',
4113
- unitDisplay: 'short',
4114
- style: 'unit',
4115
- maximumFractionDigits: 2
4116
- };
4117
- var FORMAT_AS_PERCENT_CONFIG = {
4118
- style: 'percent',
4119
- maximumFractionDigits: 2
4120
- };
4121
-
4122
4157
  var getTimeSpanInYears = function getTimeSpanInYears(start, end) {
4123
4158
  var monthsDifference = end.getMonth() - start.getMonth();
4124
4159
  var yearsDifference = end.getFullYear() - start.getFullYear();
@@ -4680,7 +4715,8 @@ var SliceRenderer = function SliceRenderer(_ref) {
4680
4715
  case 'sections.text-with-card':
4681
4716
  return React__default.default.createElement(TextWithCard, {
4682
4717
  key: slice.__component + "-" + slice.id,
4683
- slice: slice
4718
+ slice: slice,
4719
+ projects: projects
4684
4720
  });
4685
4721
  case 'sections.logo-grid-with-text':
4686
4722
  return React__default.default.createElement(LogoGridWithText, {
@@ -4765,7 +4801,7 @@ var SliceRenderer = function SliceRenderer(_ref) {
4765
4801
  case 'sections.projects-grid':
4766
4802
  return React__default.default.createElement(ProjectsGrid, {
4767
4803
  key: slice.__component + "-" + slice.id,
4768
- slice: slice
4804
+ projects: projects
4769
4805
  });
4770
4806
  case 'sections.projects-map':
4771
4807
  return React__default.default.createElement(ProjectsMap, {