foundry-component-library 0.1.12 → 0.1.14

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 (52) hide show
  1. package/lib/assets/svg/close.svg +3 -3
  2. package/lib/components/Awards/index.tsx +10 -2
  3. package/lib/components/Awards/styles.module.scss +0 -1
  4. package/lib/components/Capabilities/styles.module.scss +0 -1
  5. package/lib/components/CaseStudyTeaser/styles.module.scss +4 -2
  6. package/lib/components/ContactTeaser/styles.module.scss +1 -1
  7. package/lib/components/DoubleTiles/styles.module.scss +0 -1
  8. package/lib/components/Footer/styles.module.scss +12 -9
  9. package/lib/components/Header/index.tsx +1 -1
  10. package/lib/components/Header/styles.module.scss +4 -1
  11. package/lib/components/Hero/styles.module.scss +1 -0
  12. package/lib/components/HubsAccordion/Hub.tsx +4 -2
  13. package/lib/components/HubsAccordion/minus.svg +4 -0
  14. package/lib/components/HubsAccordion/plus.svg +5 -0
  15. package/lib/components/HubsAccordion/styles.module.scss +4 -17
  16. package/lib/components/ImageTitle/styles.module.scss +0 -1
  17. package/lib/components/LargeText/styles.module.scss +0 -1
  18. package/lib/components/LogoSection/styles.module.scss +7 -1
  19. package/lib/components/Management/styles.module.scss +0 -1
  20. package/lib/components/OfficesTeaser/index.tsx +1 -1
  21. package/lib/components/OfficesTeaser/styles.module.scss +2 -1
  22. package/lib/components/PartnerNetwork/styles.module.scss +7 -0
  23. package/lib/components/ServiceHubsTeaser/Tile.tsx +14 -3
  24. package/lib/components/ServiceHubsTeaser/index.tsx +4 -0
  25. package/lib/components/ServiceHubsTeaser/styles.module.scss +25 -1
  26. package/lib/components/TeamBenefits/styles.module.scss +0 -1
  27. package/lib/components/TeamPhotos/styles.module.scss +0 -1
  28. package/lib/components/TextSection/styles.module.scss +0 -1
  29. package/lib/components/Tiles/Tile.tsx +30 -5
  30. package/lib/components/Tiles/index.tsx +3 -0
  31. package/lib/components/Tiles/styles.module.scss +39 -1
  32. package/lib/components/case/Content/Numbers/styles.module.scss +1 -1
  33. package/lib/components/case/Content/Results/styles.module.scss +0 -1
  34. package/lib/components/case/Content/ThreeColumns/Center.tsx +49 -0
  35. package/lib/components/case/Content/ThreeColumns/Left.tsx +48 -0
  36. package/lib/components/case/Content/ThreeColumns/Right.tsx +49 -0
  37. package/lib/components/case/Content/ThreeColumns/index.tsx +38 -0
  38. package/lib/components/case/Content/Video.tsx +8 -2
  39. package/lib/components/case/Content/index.tsx +10 -0
  40. package/lib/components/case/Content/styles.module.scss +9 -2
  41. package/lib/components/case/Top/styles.module.scss +1 -0
  42. package/lib/components/contact/Accounts/styles.module.scss +9 -2
  43. package/lib/components/contact/Contacts/styles.module.scss +0 -2
  44. package/lib/components/contact/Offices/styles.module.scss +0 -1
  45. package/lib/components/news/Posts/styles.module.scss +0 -1
  46. package/lib/components/single/Content/styles.module.scss +6 -1
  47. package/lib/components/single/Top/styles.module.scss +1 -0
  48. package/lib/queries/getAboutPage.ts +2 -0
  49. package/lib/queries/getCaseBySlug.ts +85 -0
  50. package/lib/queries/getHomePage.ts +6 -0
  51. package/lib/types/index.ts +33 -3
  52. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  <svg width="47" height="47" viewBox="0 0 47 47" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M38.1942 38.1923C46.3301 30.0564 46.3301 16.8655 38.1942 8.72955C30.0582 0.593625 16.8673 0.593625 8.73139 8.72955C0.595468 16.8655 0.595468 30.0564 8.73139 38.1923C16.8673 46.3282 30.0582 46.3282 38.1942 38.1923Z" stroke="#491B11" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
3
- <path d="M17.5703 17.5664L29.3554 29.3515" stroke="#491B11" stroke-width="4" stroke-linecap="square" stroke-linejoin="round"/>
4
- <path d="M17.5703 29.3516L29.3554 17.5665" stroke="#491B11" stroke-width="4" stroke-linecap="square" stroke-linejoin="round"/>
2
+ <path d="M38.1942 38.1923C46.3301 30.0564 46.3301 16.8655 38.1942 8.72955C30.0582 0.593625 16.8673 0.593625 8.73139 8.72955C0.595468 16.8655 0.595468 30.0564 8.73139 38.1923C16.8673 46.3282 30.0582 46.3282 38.1942 38.1923Z" stroke="#491B11" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M17.5703 17.5664L29.3554 29.3515" stroke="#491B11" stroke-width="3" stroke-linecap="square" stroke-linejoin="round"/>
4
+ <path d="M17.5703 29.3516L29.3554 17.5665" stroke="#491B11" stroke-width="3" stroke-linecap="square" stroke-linejoin="round"/>
5
5
  </svg>
@@ -5,6 +5,7 @@ import Container from "../Container";
5
5
  import { NextImage } from "../../types";
6
6
  import useDrag from "../../hooks/useDrag";
7
7
  import WavyText from "../TextAnimations/WavyText";
8
+ import { motion } from "framer-motion";
8
9
 
9
10
  const Awards = ({
10
11
  heading,
@@ -28,7 +29,14 @@ const Awards = ({
28
29
  if (!awards) return;
29
30
 
30
31
  return (
31
- <div className={styles.awards}>
32
+ <motion.div
33
+ className={styles.awards}
34
+ initial={{ opacity: 0, y: -5 }}
35
+ animate={{ opacity: 1, y: 0 }}
36
+ transition={{
37
+ duration: 1,
38
+ }}
39
+ >
32
40
  <Container>
33
41
  {heading && <WavyText className={styles.heading} text={heading} />}
34
42
  </Container>
@@ -59,7 +67,7 @@ const Awards = ({
59
67
  })}
60
68
  </div>
61
69
  </Container>
62
- </div>
70
+ </motion.div>
63
71
  );
64
72
  };
65
73
 
@@ -10,7 +10,6 @@
10
10
 
11
11
  .heading {
12
12
  font-size: 42px;
13
- font-family: $font-secondary;
14
13
  color: $color-brown;
15
14
  margin-bottom: 64px;
16
15
  line-height: 1.3;
@@ -38,7 +38,6 @@
38
38
 
39
39
  .title {
40
40
  font-size: 34px;
41
- font-family: $font-secondary;
42
41
 
43
42
  @media #{$QUERY-md} {
44
43
  font-size: 18px;
@@ -11,7 +11,6 @@
11
11
 
12
12
  .heading {
13
13
  font-size: 42px;
14
- font-family: $font-secondary;
15
14
  color: $color-brown;
16
15
  margin-bottom: 64px;
17
16
 
@@ -51,6 +50,10 @@
51
50
 
52
51
  &:hover {
53
52
  width: 500px;
53
+
54
+ @media screen and (max-width: $screen-sm) {
55
+ width: 360px;
56
+ }
54
57
  }
55
58
 
56
59
  &:after {
@@ -83,7 +86,6 @@
83
86
 
84
87
  .title {
85
88
  font-size: 42px;
86
- font-family: $font-secondary;
87
89
  margin-bottom: 40px;
88
90
  line-height: 1.2;
89
91
  width: 300px;
@@ -21,11 +21,11 @@
21
21
  }
22
22
 
23
23
  .heading {
24
- font-family: $font-secondary;
25
24
  font-size: 54px;
26
25
  color: $color-brown;
27
26
  margin-bottom: 24px;
28
27
  white-space: pre-wrap;
28
+ line-height: 1.1;
29
29
 
30
30
  @media #{$QUERY-sm} {
31
31
  font-size: 32px;
@@ -24,7 +24,6 @@
24
24
  box-sizing: border-box;
25
25
  background-color: $color-pink;
26
26
  color: $color-brown;
27
- font-family: $font-secondary;
28
27
  flex-shrink: 0;
29
28
 
30
29
  @media screen and (max-width: $screen-sm) {
@@ -8,7 +8,7 @@
8
8
  z-index: 4;
9
9
 
10
10
  @media #{$QUERY-sm} {
11
- padding: 30px 20px 48px;
11
+ padding: 48px 0;
12
12
  }
13
13
  }
14
14
 
@@ -40,14 +40,18 @@
40
40
  }
41
41
  }
42
42
 
43
- .logoText {
44
- font-size: 34px;
45
- font-family: $font-secondary;
46
- margin-bottom: 48px;
43
+ .logo {
44
+ width: 412px;
45
+ max-width: 100%;
47
46
 
48
- @media screen and (max-width: $screen-md) {
49
- font-size: 30px;
47
+ @media screen and (max-width: $screen-sm) {
48
+ margin-bottom: 2rem;
50
49
  }
50
+ }
51
+
52
+ .logoText {
53
+ font-size: 24px;
54
+ margin-bottom: 48px;
51
55
 
52
56
  @media screen and (max-width: $screen-sm) {
53
57
  display: none;
@@ -89,8 +93,6 @@
89
93
  }
90
94
 
91
95
  .email {
92
- font-size: 14px;
93
-
94
96
  &:hover {
95
97
  color: $color-pink;
96
98
  }
@@ -128,6 +130,7 @@
128
130
 
129
131
  @media #{$QUERY-sm} {
130
132
  margin-bottom: 10px;
133
+ font-weight: 400;
131
134
  }
132
135
 
133
136
  a {
@@ -16,7 +16,7 @@ function Header({ Link }: { Link: NextLink }) {
16
16
  <div className={styles.wrapper}>
17
17
  <div className={styles.left}>
18
18
  <Link href="/">
19
- <video src="/logo.mp4" autoPlay muted loop />
19
+ <video src="/logo.mp4" autoPlay muted />
20
20
  Foundry
21
21
  </Link>
22
22
  </div>
@@ -21,6 +21,10 @@
21
21
  font-size: 0;
22
22
  margin-left: -50px;
23
23
 
24
+ @media #{$QUERY-sm} {
25
+ margin-left: -68px;
26
+ }
27
+
24
28
  video {
25
29
  width: 250px;
26
30
  height: 47px;
@@ -131,7 +135,6 @@
131
135
  }
132
136
 
133
137
  .menuList {
134
- font-family: $font-secondary;
135
138
  color: $color-brown;
136
139
  padding-top: 20px;
137
140
  }
@@ -69,6 +69,7 @@
69
69
  font-size: 200px;
70
70
  font-weight: 400;
71
71
  color: $color-white;
72
+ font-family: $font-secondary;
72
73
 
73
74
  @media screen and (max-width: $screen-md) {
74
75
  font-size: 120px;
@@ -4,6 +4,8 @@ import { NextImage, NextLink, type Hub } from "../../types";
4
4
  import styles from "./styles.module.scss";
5
5
  import Arrow from "../../assets/svg/arrow.svg";
6
6
  import useDrag from "../../hooks/useDrag";
7
+ import Plus from "./plus.svg";
8
+ import Minus from "./minus.svg";
7
9
 
8
10
  const Hub = ({
9
11
  hub,
@@ -46,8 +48,8 @@ const Hub = ({
46
48
  }
47
49
  }}
48
50
  >
49
- {isActive && <span>-</span>}
50
- {!isActive && <span>+</span>}
51
+ {isActive && <Minus />}
52
+ {!isActive && <Plus />}
51
53
  </button>
52
54
  </div>
53
55
  <div className={styles.rows}>
@@ -0,0 +1,4 @@
1
+ <svg width="52" height="50" viewBox="0 0 52 50" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M25.9988 45.8327C37.609 45.8327 47.021 36.5053 47.021 24.9993C47.021 13.4934 37.609 4.16602 25.9988 4.16602C14.3885 4.16602 4.97656 13.4934 4.97656 24.9993C4.97656 36.5053 14.3885 45.8327 25.9988 45.8327Z" stroke="#491B11" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M17.5898 25H34.4076" stroke="#491B11" stroke-width="4" stroke-linecap="square" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg width="52" height="50" viewBox="0 0 52 50" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M25.9988 45.8327C37.609 45.8327 47.021 36.5053 47.021 24.9993C47.021 13.4934 37.609 4.16602 25.9988 4.16602C14.3885 4.16602 4.97656 13.4934 4.97656 24.9993C4.97656 36.5053 14.3885 45.8327 25.9988 45.8327Z" stroke="#491B11" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M26 16.666V33.3327" stroke="#491B11" stroke-width="4" stroke-linecap="square" stroke-linejoin="round"/>
4
+ <path d="M17.5898 25H34.4076" stroke="#491B11" stroke-width="4" stroke-linecap="square" stroke-linejoin="round"/>
5
+ </svg>
@@ -16,10 +16,6 @@
16
16
  .rows {
17
17
  display: block;
18
18
  }
19
-
20
- .icon span {
21
- top: -2px;
22
- }
23
19
  }
24
20
 
25
21
  &:before {
@@ -58,7 +54,6 @@
58
54
 
59
55
  .title {
60
56
  font-size: 42px;
61
- font-family: $font-secondary;
62
57
  width: 360px;
63
58
 
64
59
  @media #{$QUERY-md} {
@@ -89,19 +84,15 @@
89
84
  }
90
85
 
91
86
  .icon {
92
- width: 46px;
93
- height: 46px;
94
- border-radius: 50%;
95
- border: solid 2px $color-brown;
87
+ width: 52px;
88
+ height: 50px;
96
89
  display: flex;
97
90
  align-items: center;
98
91
  justify-content: center;
99
- font-size: 32px;
100
- line-height: 10px;
101
- background-color: transparent;
102
92
  cursor: pointer;
103
- color: $color-brown;
104
93
  flex-shrink: 0;
94
+ background-color: transparent;
95
+ border: none;
105
96
 
106
97
  @media #{$QUERY-sm} {
107
98
  width: 24px;
@@ -110,10 +101,6 @@
110
101
  position: relative;
111
102
  top: 8px;
112
103
  }
113
-
114
- span {
115
- position: relative;
116
- }
117
104
  }
118
105
 
119
106
  .rows {
@@ -38,7 +38,6 @@
38
38
  }
39
39
 
40
40
  .heading {
41
- font-family: $font-secondary;
42
41
  font-size: 42px;
43
42
  color: $color-brown;
44
43
  margin-bottom: 42px;
@@ -23,7 +23,6 @@
23
23
  .wrapper {
24
24
  text-align: center;
25
25
  font-size: 54px;
26
- font-family: $font-secondary;
27
26
  margin: auto;
28
27
  line-height: 1;
29
28
  display: flex;
@@ -15,13 +15,19 @@
15
15
  .dropdown {
16
16
  position: relative;
17
17
  width: 150px;
18
+ transition: width 0.3s;
18
19
 
19
20
  @media #{$QUERY-sm} {
20
- width: 132px;
21
+ width: 132px !important;
22
+ }
23
+
24
+ &:hover {
25
+ width: 200px;
21
26
  }
22
27
 
23
28
  &.active {
24
29
  z-index: 3;
30
+ width: 200px;
25
31
  }
26
32
  }
27
33
 
@@ -34,7 +34,6 @@
34
34
  }
35
35
 
36
36
  .quote {
37
- font-family: $font-secondary;
38
37
  font-size: 42px;
39
38
  margin-bottom: 25px;
40
39
  line-height: 1.2;
@@ -21,7 +21,7 @@ const OfficesTeaser = ({
21
21
  <PopInText className={styles.caption} text="Our Offices" />
22
22
  <WavyText
23
23
  className={styles.heading}
24
- text={`We operate all\nover the world`}
24
+ text={`We operate all\nover the world.`}
25
25
  alternate
26
26
  />
27
27
  </div>
@@ -3,6 +3,7 @@
3
3
  .officesTeaser {
4
4
  display: flex;
5
5
  padding: 64px 0;
6
+ overflow: hidden;
6
7
 
7
8
  @media #{$QUERY-xl} {
8
9
  display: block;
@@ -26,7 +27,7 @@
26
27
 
27
28
  .heading {
28
29
  font-size: 42px;
29
- font-family: $font-secondary;
30
+ line-height: 1.1;
30
31
  white-space: pre-wrap;
31
32
  color: $color-brown;
32
33
 
@@ -31,6 +31,9 @@
31
31
 
32
32
  @media #{$QUERY-sm} {
33
33
  width: calc(50% - 12px);
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: center;
34
37
  }
35
38
  }
36
39
 
@@ -40,6 +43,10 @@
40
43
  height: 40px;
41
44
  max-width: 100%;
42
45
 
46
+ @media #{$QUERY-sm} {
47
+ width: 120px;
48
+ }
49
+
43
50
  img {
44
51
  object-fit: contain;
45
52
  }
@@ -3,6 +3,7 @@ import styles from "./styles.module.scss";
3
3
  import Plus from "../../assets/svg/plus.svg";
4
4
  import { NextLink } from "../../types";
5
5
  import { motion } from "framer-motion";
6
+ import Arrow from "../../assets/svg/arrow.svg";
6
7
 
7
8
  const Tile = ({
8
9
  text,
@@ -11,6 +12,7 @@ const Tile = ({
11
12
  i,
12
13
  onClick,
13
14
  Link,
15
+ hoverText,
14
16
  }: {
15
17
  text: string;
16
18
  background: "pink" | "yellow" | "brown" | "blue";
@@ -18,6 +20,7 @@ const Tile = ({
18
20
  i: number;
19
21
  onClick?: MouseEventHandler<HTMLAnchorElement>;
20
22
  Link: NextLink;
23
+ hoverText: string;
21
24
  }) => {
22
25
  return (
23
26
  <motion.div
@@ -42,9 +45,17 @@ const Tile = ({
42
45
  draggable="false"
43
46
  className={`${styles.tile} ${styles[background]}`}
44
47
  >
45
- <div className={styles.text}>{text}</div>
46
- <div>
47
- <Plus />
48
+ <div className={styles.face}>
49
+ <div className={styles.text}>{text}</div>
50
+ <div>
51
+ <Plus />
52
+ </div>
53
+ </div>
54
+ <div className={styles.tails}>
55
+ <div className={styles.tailsText}>{hoverText}</div>
56
+ <div>
57
+ Learn More <Arrow />
58
+ </div>
48
59
  </div>
49
60
  </Link>
50
61
  </motion.div>
@@ -21,6 +21,9 @@ const ServiceHubsTeaser = ({
21
21
  id: string;
22
22
  uri: string;
23
23
  title: string;
24
+ customFieldsHub: {
25
+ heading: string;
26
+ };
24
27
  }[];
25
28
  Link: NextLink;
26
29
  }) => {
@@ -53,6 +56,7 @@ const ServiceHubsTeaser = ({
53
56
  <Tile
54
57
  key={tile.id}
55
58
  text={tile.title}
59
+ hoverText={tile.customFieldsHub.heading}
56
60
  background={background}
57
61
  href={tile.uri}
58
62
  i={i}
@@ -61,7 +61,6 @@
61
61
  background-color: $color-pink;
62
62
  color: $color-brown;
63
63
  font-size: 34px;
64
- font-family: $font-secondary;
65
64
  width: 100%;
66
65
  height: 100%;
67
66
 
@@ -91,6 +90,16 @@
91
90
  stroke: $color-white;
92
91
  }
93
92
  }
93
+
94
+ &:hover {
95
+ .face {
96
+ display: none;
97
+ }
98
+
99
+ .tails {
100
+ display: block;
101
+ }
102
+ }
94
103
  }
95
104
 
96
105
  .text {
@@ -100,3 +109,18 @@
100
109
  margin-bottom: 0;
101
110
  }
102
111
  }
112
+
113
+ .face {
114
+ display: block;
115
+ }
116
+
117
+ .tails {
118
+ text-align: left;
119
+ padding-left: 30px;
120
+ display: none;
121
+ font-size: 34px;
122
+ }
123
+
124
+ .tailsText {
125
+ margin-bottom: 30px;
126
+ }
@@ -29,7 +29,6 @@
29
29
  background-color: $color-pink;
30
30
  color: $color-brown;
31
31
  font-size: 28px;
32
- font-family: $font-secondary;
33
32
  flex-shrink: 0;
34
33
 
35
34
  @media screen and (max-width: $screen-md) {
@@ -2,7 +2,6 @@
2
2
 
3
3
  .heading {
4
4
  font-size: 42px;
5
- font-family: $font-secondary;
6
5
  margin-bottom: 55px;
7
6
  color: $color-brown;
8
7
 
@@ -46,7 +46,6 @@
46
46
  }
47
47
 
48
48
  .heading {
49
- font-family: $font-secondary;
50
49
  font-size: 54px;
51
50
  line-height: 1.2;
52
51
  color: $color-brown;
@@ -1,20 +1,45 @@
1
1
  import styles from "./styles.module.scss";
2
2
  import Plus from "../../assets/svg/plus.svg";
3
+ import { motion } from "framer-motion";
3
4
 
4
5
  const Tile = ({
5
6
  text,
6
7
  background,
8
+ hoverText,
9
+ i,
7
10
  }: {
8
11
  text: string;
12
+ hoverText: string;
9
13
  background: "pink" | "yellow" | "brown";
14
+ i: number;
10
15
  }) => {
11
16
  return (
12
- <div className={`${styles.tile} ${styles[background]}`}>
13
- <div className={styles.text}>{text}</div>
14
- <div>
15
- <Plus />
17
+ <motion.div
18
+ className={`${styles.tile} ${styles[background]}`}
19
+ whileHover={{
20
+ scale: 1.08,
21
+ rotate: i % 2 === 0 ? -3 : 3,
22
+ boxShadow: "0px 10px 20px rgba(0,0,0,0.2)",
23
+ y: [0, Math.random() * 12 - 6, 0],
24
+ transition: {
25
+ y: {
26
+ duration: 2,
27
+ repeat: Infinity,
28
+ ease: "easeInOut",
29
+ },
30
+ },
31
+ }}
32
+ >
33
+ <div className={styles.face}>
34
+ <div className={styles.text}>{text}</div>
35
+ <div>
36
+ <Plus />
37
+ </div>
16
38
  </div>
17
- </div>
39
+ <div className={styles.tails}>
40
+ <div className={styles.tailsText}>{hoverText}</div>
41
+ </div>
42
+ </motion.div>
18
43
  );
19
44
  };
20
45
 
@@ -11,6 +11,7 @@ const Tiles = ({
11
11
  }: {
12
12
  tiles: {
13
13
  heading?: string;
14
+ hoverText?: string;
14
15
  }[];
15
16
  }) => {
16
17
  const sectionRef = useRef(null);
@@ -43,7 +44,9 @@ const Tiles = ({
43
44
  <Tile
44
45
  key={tile.heading}
45
46
  text={tile.heading || ""}
47
+ hoverText={tile.hoverText || ""}
46
48
  background={background}
49
+ i={i}
47
50
  />
48
51
  );
49
52
  })}
@@ -20,7 +20,6 @@
20
20
  background-color: $color-pink;
21
21
  color: $color-brown;
22
22
  font-size: 42px;
23
- font-family: $font-secondary;
24
23
  flex-shrink: 0;
25
24
 
26
25
  @media screen and (max-width: $screen-sm) {
@@ -45,6 +44,16 @@
45
44
  stroke: $color-pink;
46
45
  }
47
46
  }
47
+
48
+ &:hover {
49
+ .face {
50
+ display: none;
51
+ }
52
+
53
+ .tails {
54
+ display: block;
55
+ }
56
+ }
48
57
  }
49
58
 
50
59
  .text {
@@ -58,3 +67,32 @@
58
67
  margin-bottom: 0;
59
68
  }
60
69
  }
70
+
71
+ .face {
72
+ display: block;
73
+
74
+ @media #{$QUERY-sm} {
75
+ font-size: 35px;
76
+ }
77
+
78
+ svg {
79
+ @media #{$QUERY-sm} {
80
+ width: 42px;
81
+ }
82
+ }
83
+ }
84
+
85
+ .tails {
86
+ text-align: left;
87
+ padding: 30px;
88
+ display: none;
89
+ font-size: 34px;
90
+
91
+ @media screen and (max-width: $screen-sm) {
92
+ font-size: 25px;
93
+ }
94
+ }
95
+
96
+ .tailsText {
97
+ margin-bottom: 30px;
98
+ }
@@ -12,7 +12,7 @@
12
12
 
13
13
  .wrapper {
14
14
  display: flex;
15
- justify-content: space-between;
15
+ justify-content: center;
16
16
 
17
17
  @media #{$QUERY-sm} {
18
18
  display: block;
@@ -29,6 +29,5 @@
29
29
 
30
30
  .heading {
31
31
  font-size: 34px;
32
- font-family: $font-secondary;
33
32
  margin-bottom: 20px;
34
33
  }
@@ -0,0 +1,49 @@
1
+ import styles from "../styles.module.scss";
2
+ import Video from "../Video";
3
+ import { ColumnOption, NextImage } from "../../../../types";
4
+
5
+ const Center = ({
6
+ section,
7
+ Image,
8
+ }: {
9
+ section: ColumnOption;
10
+ Image: NextImage;
11
+ }) => {
12
+ if (!section) return null;
13
+
14
+ return (
15
+ <div className={styles.columnContent}>
16
+ {/* case */}
17
+ {section.fieldGroupName ===
18
+ "Case_Case_Content_Threecolumns_Center_Text" && (
19
+ <div
20
+ className={styles.text}
21
+ dangerouslySetInnerHTML={{ __html: section.text }}
22
+ />
23
+ )}
24
+ {section.fieldGroupName ===
25
+ "Case_Case_Content_Threecolumns_Center_Image" &&
26
+ section.image && (
27
+ <>
28
+ <Image
29
+ className={styles.image}
30
+ src={section.image.sourceUrl}
31
+ alt={section.caption ? section.caption : "foundry digital agency"}
32
+ layout="intrinsic"
33
+ width={600}
34
+ height={600}
35
+ />
36
+ {section.caption && (
37
+ <div className={styles.caption}>{section.caption}</div>
38
+ )}
39
+ </>
40
+ )}
41
+ {section.fieldGroupName ===
42
+ "Case_Case_Content_Threecolumns_Center_Video" && (
43
+ <Video section={section} defaultRatio="150%" />
44
+ )}
45
+ </div>
46
+ );
47
+ };
48
+
49
+ export default Center;
@@ -0,0 +1,48 @@
1
+ import styles from "../styles.module.scss";
2
+ import Video from "../Video";
3
+ import { ColumnOption, NextImage } from "../../../../types";
4
+
5
+ const Left = ({
6
+ section,
7
+ Image,
8
+ }: {
9
+ section: ColumnOption;
10
+ Image: NextImage;
11
+ }) => {
12
+ if (!section) return null;
13
+
14
+ return (
15
+ <div className={styles.columnContent}>
16
+ {/* case */}
17
+ {section.fieldGroupName ===
18
+ "Case_Case_Content_Threecolumns_Left_Text" && (
19
+ <div
20
+ className={styles.text}
21
+ dangerouslySetInnerHTML={{ __html: section.text }}
22
+ />
23
+ )}
24
+ {section.fieldGroupName === "Case_Case_Content_Threecolumns_Left_Image" &&
25
+ section.image && (
26
+ <>
27
+ <Image
28
+ className={styles.image}
29
+ src={section.image.sourceUrl}
30
+ alt={section.caption ? section.caption : "foundry digital agency"}
31
+ layout="intrinsic"
32
+ width={600}
33
+ height={600}
34
+ />
35
+ {section.caption && (
36
+ <div className={styles.caption}>{section.caption}</div>
37
+ )}
38
+ </>
39
+ )}
40
+ {section.fieldGroupName ===
41
+ "Case_Case_Content_Threecolumns_Left_Video" && (
42
+ <Video section={section} defaultRatio="150%" />
43
+ )}
44
+ </div>
45
+ );
46
+ };
47
+
48
+ export default Left;
@@ -0,0 +1,49 @@
1
+ import styles from "../styles.module.scss";
2
+ import Video from "../Video";
3
+ import { ColumnOption, NextImage } from "../../../../types";
4
+
5
+ const Right = ({
6
+ section,
7
+ Image,
8
+ }: {
9
+ section: ColumnOption;
10
+ Image: NextImage;
11
+ }) => {
12
+ if (!section) return null;
13
+
14
+ return (
15
+ <div className={styles.columnContent}>
16
+ {/* case */}
17
+ {section.fieldGroupName ===
18
+ "Case_Case_Content_Threecolumns_Right_Text" && (
19
+ <div
20
+ className={`${styles.text}`}
21
+ dangerouslySetInnerHTML={{ __html: section.text }}
22
+ />
23
+ )}
24
+ {section.fieldGroupName ===
25
+ "Case_Case_Content_Threecolumns_Right_Image" &&
26
+ section.image && (
27
+ <>
28
+ <Image
29
+ className={styles.image}
30
+ src={section.image.sourceUrl}
31
+ alt={section.caption ? section.caption : "foundry digital agency"}
32
+ layout="intrinsic"
33
+ width={600}
34
+ height={600}
35
+ />
36
+ {section.caption && (
37
+ <div className={styles.caption}>{section.caption}</div>
38
+ )}
39
+ </>
40
+ )}
41
+ {section.fieldGroupName ===
42
+ "Case_Case_Content_Threecolumns_Right_Video" && (
43
+ <Video section={section} defaultRatio="150%" />
44
+ )}
45
+ </div>
46
+ );
47
+ };
48
+
49
+ export default Right;
@@ -0,0 +1,38 @@
1
+ import styles from "../styles.module.scss";
2
+ import Container from "../../../Container";
3
+ import { type ThreeColumns, NextImage } from "../../../../types";
4
+ import Left from "./Left";
5
+ import Center from "./Center";
6
+ import Right from "./Right";
7
+
8
+ function ThreeColumns({
9
+ section,
10
+ Image,
11
+ }: {
12
+ section: ThreeColumns;
13
+ Image: NextImage;
14
+ }) {
15
+ return (
16
+ <section className={styles.section}>
17
+ <Container>
18
+ <div className={styles.threeColumns}>
19
+ <div className={styles.column}>
20
+ {section.left && <Left section={section.left[0]} Image={Image} />}
21
+ </div>
22
+ <div className={styles.column}>
23
+ {section.center && (
24
+ <Center section={section.center[0]} Image={Image} />
25
+ )}
26
+ </div>
27
+ <div className={styles.column}>
28
+ {section.right && (
29
+ <Right section={section.right[0]} Image={Image} />
30
+ )}
31
+ </div>
32
+ </div>
33
+ </Container>
34
+ </section>
35
+ );
36
+ }
37
+
38
+ export default ThreeColumns;
@@ -5,7 +5,13 @@ import styles from "./styles.module.scss";
5
5
  import { useOnScreen } from "../../../hooks/useOnScreen";
6
6
  import { type Video } from "../../../types";
7
7
 
8
- function Video({ section }: { section: Video }) {
8
+ function Video({
9
+ section,
10
+ defaultRatio = "56.25%",
11
+ }: {
12
+ section: Video;
13
+ defaultRatio?: string;
14
+ }) {
9
15
  const sectionRef = useRef(null);
10
16
  const onScreen = useOnScreen(sectionRef, "1000px");
11
17
  const [playing, setPlaying] = useState(false);
@@ -50,7 +56,7 @@ function Video({ section }: { section: Video }) {
50
56
  backgroundImage: section.poster
51
57
  ? `url(${section.poster.sourceUrl})`
52
58
  : "none",
53
- paddingTop: section.ratio ? section.ratio : "56.25%",
59
+ paddingTop: section.ratio ? section.ratio : defaultRatio,
54
60
  }}
55
61
  >
56
62
  <div>
@@ -1,6 +1,7 @@
1
1
  import FullWidthImage from "./FullWidthImage";
2
2
  import CenterColumn from "./CenterColumn";
3
3
  import TwoColumns from "./TwoColumns";
4
+ import ThreeColumns from "./ThreeColumns";
4
5
  import Video from "./Video";
5
6
  import Container from "../../Container";
6
7
  import styles from "./styles.module.scss";
@@ -64,6 +65,15 @@ function CaseContent({
64
65
  />
65
66
  );
66
67
  }
68
+ if (section.fieldGroupName === "Case_Case_Content_Threecolumns") {
69
+ return (
70
+ <ThreeColumns
71
+ key={section.fieldGroupName + i}
72
+ section={section}
73
+ Image={Image}
74
+ />
75
+ );
76
+ }
67
77
  if (section.fieldGroupName === "Case_Case_Content_Video") {
68
78
  return (
69
79
  <section
@@ -47,7 +47,6 @@
47
47
  h4,
48
48
  h5,
49
49
  h6 {
50
- font-family: $font-secondary;
51
50
  font-size: 42px;
52
51
  font-weight: 400;
53
52
  margin-bottom: 32px;
@@ -67,6 +66,15 @@
67
66
  }
68
67
  }
69
68
 
69
+ .threeColumns {
70
+ display: flex;
71
+ justify-content: space-between;
72
+
73
+ @media #{$QUERY-sm} {
74
+ display: block;
75
+ }
76
+ }
77
+
70
78
  .column {
71
79
  width: 600px;
72
80
  max-width: calc(50% - 20px);
@@ -94,7 +102,6 @@
94
102
  max-width: 100%;
95
103
  margin: 0 auto;
96
104
  position: relative;
97
- background-color: #eee;
98
105
  background-position: center;
99
106
  background-repeat: no-repeat;
100
107
 
@@ -65,6 +65,7 @@
65
65
  max-width: 100%;
66
66
  color: $color-brown;
67
67
  font-weight: 400;
68
+ font-family: $font-secondary;
68
69
 
69
70
  @media #{$QUERY-sm} {
70
71
  font-size: 32px;
@@ -14,10 +14,9 @@
14
14
  font-size: 42px;
15
15
  margin-bottom: 46px;
16
16
  font-weight: 400;
17
- font-family: $font-secondary;
18
17
 
19
18
  @media #{$QUERY-sm} {
20
- font-size: 28px;
19
+ font-size: 24px;
21
20
  margin-bottom: 32px;
22
21
  }
23
22
  }
@@ -57,11 +56,19 @@
57
56
  font-size: 20px;
58
57
  font-weight: 500px;
59
58
  margin-bottom: 16px;
59
+
60
+ @media #{$QUERY-sm} {
61
+ font-size: 18px;
62
+ }
60
63
  }
61
64
 
62
65
  .text {
63
66
  font-size: 18px;
64
67
 
68
+ @media #{$QUERY-sm} {
69
+ font-size: 16px;
70
+ }
71
+
65
72
  strong {
66
73
  font-weight: bold;
67
74
  }
@@ -12,7 +12,6 @@
12
12
 
13
13
  .title {
14
14
  font-size: 42px;
15
- font-family: $font-secondary;
16
15
  margin-bottom: 46px;
17
16
  font-weight: 400;
18
17
 
@@ -60,7 +59,6 @@
60
59
 
61
60
  .heading {
62
61
  font-size: 34px;
63
- font-family: $font-secondary;
64
62
  font-weight: 400;
65
63
  line-height: 1.2;
66
64
  margin-bottom: 24px;
@@ -72,7 +72,6 @@
72
72
 
73
73
  .heading {
74
74
  font-size: 42px;
75
- font-family: $font-secondary;
76
75
  color: $color-brown;
77
76
  }
78
77
 
@@ -75,7 +75,6 @@
75
75
  a {
76
76
  font-size: 42px;
77
77
  line-height: 1.2;
78
- font-family: $font-secondary;
79
78
  font-weight: 400;
80
79
  margin-bottom: 15px;
81
80
  color: $color-brown;
@@ -6,6 +6,12 @@
6
6
  @media #{$QUERY-sm} {
7
7
  padding-bottom: 90px;
8
8
  }
9
+
10
+ h1,
11
+ h2,
12
+ h3 {
13
+ margin-bottom: 1rem;
14
+ }
9
15
  }
10
16
 
11
17
  .section {
@@ -124,7 +130,6 @@
124
130
  max-width: 100%;
125
131
  margin: 0 auto;
126
132
  position: relative;
127
- background-color: #eee;
128
133
  background-position: center;
129
134
  background-repeat: no-repeat;
130
135
 
@@ -83,6 +83,7 @@
83
83
  line-height: 1.2;
84
84
  font-weight: bold;
85
85
  margin-bottom: 0;
86
+ font-family: $font-secondary;
86
87
 
87
88
  &.isCase {
88
89
  margin-bottom: 50px;
@@ -19,6 +19,7 @@ type AboutPage = {
19
19
  tilesHeading?: string;
20
20
  tiles?: {
21
21
  heading?: string;
22
+ hoverText?: string;
22
23
  }[];
23
24
  quotes?: {
24
25
  name?: string;
@@ -119,6 +120,7 @@ export default async function getAboutPage({
119
120
  tilesHeading
120
121
  tiles {
121
122
  heading
123
+ hoverText
122
124
  }
123
125
  quotes {
124
126
  name
@@ -51,6 +51,22 @@ export default async function getCaseBySlug({
51
51
  sourceUrl
52
52
  }
53
53
  }
54
+ relatedCases {
55
+ __typename
56
+ ... on Case {
57
+ id
58
+ title
59
+ uri
60
+ case {
61
+ thumbnailImage{
62
+ sourceUrl
63
+ }
64
+ mainImage {
65
+ sourceUrl
66
+ }
67
+ }
68
+ }
69
+ }
54
70
  content {
55
71
  ... on Case_Case_Content_Quote {
56
72
  fieldGroupName
@@ -141,6 +157,75 @@ export default async function getCaseBySlug({
141
157
  }
142
158
  }
143
159
  }
160
+ ... on Case_Case_Content_Threecolumns {
161
+ fieldGroupName
162
+ left {
163
+ ... on Case_Case_Content_Threecolumns_Left_Image {
164
+ fieldGroupName
165
+ image {
166
+ sourceUrl
167
+ }
168
+ }
169
+ ... on Case_Case_Content_Threecolumns_Left_Text {
170
+ fieldGroupName
171
+ text
172
+ }
173
+ ... on Case_Case_Content_Threecolumns_Left_Video {
174
+ fieldGroupName
175
+ autoplay
176
+ poster {
177
+ sourceUrl
178
+ }
179
+ caption
180
+ video
181
+ ratio
182
+ }
183
+ }
184
+ center {
185
+ ... on Case_Case_Content_Threecolumns_Center_Image {
186
+ fieldGroupName
187
+ image {
188
+ sourceUrl
189
+ }
190
+ }
191
+ ... on Case_Case_Content_Threecolumns_Center_Text {
192
+ fieldGroupName
193
+ text
194
+ }
195
+ ... on Case_Case_Content_Threecolumns_Center_Video {
196
+ fieldGroupName
197
+ autoplay
198
+ poster {
199
+ sourceUrl
200
+ }
201
+ caption
202
+ video
203
+ ratio
204
+ }
205
+ }
206
+ right {
207
+ ... on Case_Case_Content_Threecolumns_Right_Image {
208
+ fieldGroupName
209
+ image {
210
+ sourceUrl
211
+ }
212
+ }
213
+ ... on Case_Case_Content_Threecolumns_Right_Text {
214
+ fieldGroupName
215
+ text
216
+ }
217
+ ... on Case_Case_Content_Threecolumns_Right_Video {
218
+ fieldGroupName
219
+ autoplay
220
+ poster {
221
+ sourceUrl
222
+ }
223
+ caption
224
+ video
225
+ ratio
226
+ }
227
+ }
228
+ }
144
229
  }
145
230
  }
146
231
  }
@@ -71,6 +71,9 @@ type HomePage = {
71
71
  id: string;
72
72
  title: string;
73
73
  uri: string;
74
+ customFieldsHub: {
75
+ heading: string;
76
+ };
74
77
  }[];
75
78
  posts: PostPreview[];
76
79
  contactPage: {
@@ -193,6 +196,9 @@ export default async function getHomePage({
193
196
  id
194
197
  title
195
198
  uri
199
+ customFieldsHub {
200
+ heading
201
+ }
196
202
  }
197
203
  }
198
204
  posts(first: 3, where: {language: ${language}}) {
@@ -34,7 +34,10 @@ type ColumnImage = {
34
34
  | "Post_Customfieldsposts_Content_Twocolumns_Left_Image"
35
35
  | "Post_Customfieldsposts_Content_Twocolumns_Right_Image"
36
36
  | "Case_Case_Content_Twocolumns_Left_Image"
37
- | "Case_Case_Content_Twocolumns_Right_Image";
37
+ | "Case_Case_Content_Twocolumns_Right_Image"
38
+ | "Case_Case_Content_Threecolumns_Left_Image"
39
+ | "Case_Case_Content_Threecolumns_Center_Image"
40
+ | "Case_Case_Content_Threecolumns_Right_Image";
38
41
  image: { sourceUrl: string };
39
42
  caption?: string;
40
43
  };
@@ -44,7 +47,10 @@ type ColumnText = {
44
47
  | "Post_Customfieldsposts_Content_Twocolumns_Left_Text"
45
48
  | "Post_Customfieldsposts_Content_Twocolumns_Right_Text"
46
49
  | "Case_Case_Content_Twocolumns_Left_Text"
47
- | "Case_Case_Content_Twocolumns_Right_Text";
50
+ | "Case_Case_Content_Twocolumns_Right_Text"
51
+ | "Case_Case_Content_Threecolumns_Left_Text"
52
+ | "Case_Case_Content_Threecolumns_Center_Text"
53
+ | "Case_Case_Content_Threecolumns_Right_Text";
48
54
  text: string;
49
55
  };
50
56
 
@@ -74,6 +80,13 @@ export type TwoColumns = {
74
80
  right?: ColumnOption[];
75
81
  };
76
82
 
83
+ export type ThreeColumns = {
84
+ fieldGroupName: "Case_Case_Content_Threecolumns";
85
+ left?: ColumnOption[];
86
+ center?: ColumnOption[];
87
+ right?: ColumnOption[];
88
+ };
89
+
77
90
  export type Video = {
78
91
  fieldGroupName:
79
92
  | "Post_Customfieldsposts_Content_Video"
@@ -81,7 +94,10 @@ export type Video = {
81
94
  | "Post_Customfieldsposts_Content_Twocolumns_Left_Video"
82
95
  | "Post_Customfieldsposts_Content_Twocolumns_Right_Video"
83
96
  | "Case_Case_Content_Twocolumns_Left_Video"
84
- | "Case_Case_Content_Twocolumns_Right_Video";
97
+ | "Case_Case_Content_Twocolumns_Right_Video"
98
+ | "Case_Case_Content_Threecolumns_Left_Video"
99
+ | "Case_Case_Content_Threecolumns_Center_Video"
100
+ | "Case_Case_Content_Threecolumns_Right_Video";
85
101
  autoplay: boolean;
86
102
  poster: { sourceUrl: string };
87
103
  caption: string;
@@ -124,6 +140,7 @@ export type Content = (
124
140
  | FullWidthImage
125
141
  | CenterColumn
126
142
  | TwoColumns
143
+ | ThreeColumns
127
144
  | Video
128
145
  | Results
129
146
  | Numbers
@@ -227,6 +244,19 @@ export type Case = {
227
244
  featured?: boolean;
228
245
  service?: string[];
229
246
  industry?: string[];
247
+ relatedCases?: {
248
+ id: string;
249
+ title: string;
250
+ uri: string;
251
+ case: {
252
+ thumbnailImage?: {
253
+ sourceUrl: string;
254
+ };
255
+ mainImage?: {
256
+ sourceUrl: string;
257
+ };
258
+ };
259
+ }[];
230
260
  thumbnailVideo?: {
231
261
  mediaItemUrl: string;
232
262
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foundry-component-library",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",