foundry-component-library 0.0.13 → 0.1.1

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 (47) hide show
  1. package/lib/components/AgencyNumbers/index.tsx +12 -1
  2. package/lib/components/AgencyNumbers/styles.module.scss +32 -6
  3. package/lib/components/Awards/index.tsx +25 -8
  4. package/lib/components/Awards/styles.module.scss +40 -5
  5. package/lib/components/CaseStudyTeaser/styles.module.scss +11 -4
  6. package/lib/components/ContactTeaser/index.tsx +6 -2
  7. package/lib/components/ContactTeaser/styles.module.scss +14 -5
  8. package/lib/components/Container/index.tsx +8 -1
  9. package/lib/components/Container/styles.module.scss +9 -3
  10. package/lib/components/DoubleTiles/index.tsx +20 -3
  11. package/lib/components/DoubleTiles/styles.module.scss +17 -1
  12. package/lib/components/Footer/styles.module.scss +69 -10
  13. package/lib/components/Header/styles.module.scss +1 -2
  14. package/lib/components/Hero/index.tsx +13 -4
  15. package/lib/components/Hero/styles.module.scss +39 -1
  16. package/lib/components/HubsAccordion/index.tsx +1 -1
  17. package/lib/components/HubsAccordion/styles.module.scss +87 -6
  18. package/lib/components/LargeText/styles.module.scss +14 -2
  19. package/lib/components/LogoSection/styles.module.scss +6 -5
  20. package/lib/components/Management/styles.module.scss +9 -4
  21. package/lib/components/NewsTeaser/index.tsx +21 -3
  22. package/lib/components/NewsTeaser/styles.module.scss +55 -13
  23. package/lib/components/OfficesTeaser/index.tsx +2 -1
  24. package/lib/components/OfficesTeaser/styles.module.scss +4 -0
  25. package/lib/components/PartnerNetwork/styles.module.scss +14 -0
  26. package/lib/components/QuoteSection/styles.module.scss +16 -0
  27. package/lib/components/ServiceHubsTeaser/index.tsx +1 -1
  28. package/lib/components/ServiceHubsTeaser/styles.module.scss +17 -4
  29. package/lib/components/TeamBenefits/index.tsx +1 -1
  30. package/lib/components/TeamBenefits/styles.module.scss +20 -0
  31. package/lib/components/TeamPhotos/index.tsx +17 -2
  32. package/lib/components/TeamPhotos/styles.module.scss +40 -2
  33. package/lib/components/TextSection/styles.module.scss +12 -2
  34. package/lib/components/_variables.scss +5 -0
  35. package/lib/components/case/Content/Numbers/styles.module.scss +4 -0
  36. package/lib/components/case/Other/index.tsx +23 -8
  37. package/lib/components/case/Other/styles.module.scss +27 -10
  38. package/lib/components/case/ShareButton/styles.module.scss +4 -0
  39. package/lib/components/case/Top/styles.module.scss +36 -5
  40. package/lib/components/cases/Items/styles.module.scss +10 -0
  41. package/lib/components/cases/Top/styles.module.scss +7 -2
  42. package/lib/components/contact/Offices/index.tsx +15 -1
  43. package/lib/components/contact/Offices/styles.module.scss +20 -6
  44. package/lib/queries/getHomePage.ts +12 -0
  45. package/lib/queries/getPeoplePage.ts +14 -0
  46. package/package.json +1 -1
  47. package/dist/index.js +0 -82
@@ -26,7 +26,10 @@ const AgencyNumbers = ({
26
26
  />
27
27
  )}
28
28
  {Link && (
29
- <Link className={styles.button} href="/about-us">
29
+ <Link
30
+ className={`${styles.button} ${styles.desktop}`}
31
+ href="/about-us"
32
+ >
30
33
  About Us
31
34
  </Link>
32
35
  )}
@@ -41,6 +44,14 @@ const AgencyNumbers = ({
41
44
  );
42
45
  })}
43
46
  </div>
47
+ {Link && (
48
+ <Link
49
+ className={`${styles.button} ${styles.mobile}`}
50
+ href="/about-us"
51
+ >
52
+ About Us
53
+ </Link>
54
+ )}
44
55
  </div>
45
56
  </Container>
46
57
  </div>
@@ -4,6 +4,10 @@
4
4
  padding: 64px 0;
5
5
  background-color: $color-pink;
6
6
  color: $color-brown;
7
+
8
+ @media #{$QUERY-sm} {
9
+ padding: 32px 0;
10
+ }
7
11
  }
8
12
 
9
13
  .wrapper {
@@ -22,6 +26,10 @@
22
26
  white-space: pre-wrap;
23
27
  line-height: 1.2;
24
28
 
29
+ @media #{$QUERY-sm} {
30
+ font-size: 28px;
31
+ }
32
+
25
33
  em {
26
34
  font-style: normal;
27
35
  color: $color-white;
@@ -32,8 +40,22 @@
32
40
  @extend .button--brown;
33
41
  display: inline-block;
34
42
 
35
- @media screen and (max-width: $screen-md) {
36
- margin-bottom: 60px;
43
+ &.desktop {
44
+ @media #{$QUERY-md} {
45
+ margin-bottom: 60px;
46
+ }
47
+
48
+ @media #{$QUERY-sm} {
49
+ display: none;
50
+ }
51
+ }
52
+
53
+ &.mobile {
54
+ display: none;
55
+
56
+ @media #{$QUERY-sm} {
57
+ display: inline-block;
58
+ }
37
59
  }
38
60
  }
39
61
 
@@ -52,10 +74,6 @@
52
74
  padding: 16px;
53
75
  margin-bottom: 24px;
54
76
 
55
- @media screen and (max-width: $screen-sm) {
56
- width: 100%;
57
- }
58
-
59
77
  &:last-child {
60
78
  margin-bottom: 0;
61
79
  }
@@ -64,8 +82,16 @@
64
82
  .number {
65
83
  font-size: 42px;
66
84
  margin-bottom: 5px;
85
+
86
+ @media #{$QUERY-sm} {
87
+ font-size: 36px;
88
+ }
67
89
  }
68
90
 
69
91
  .description {
70
92
  font-size: 22px;
93
+
94
+ @media #{$QUERY-sm} {
95
+ font-size: 16px;
96
+ }
71
97
  }
@@ -1,6 +1,9 @@
1
+ "use client";
2
+ import { useRef } from "react";
1
3
  import styles from "./styles.module.scss";
2
4
  import Container from "../Container";
3
5
  import { NextImage } from "../../types";
6
+ import useDrag from "../../hooks/useDrag";
4
7
 
5
8
  const Awards = ({
6
9
  heading,
@@ -17,31 +20,45 @@ const Awards = ({
17
20
  }[];
18
21
  Image: NextImage;
19
22
  }) => {
23
+ const sectionRef = useRef(null);
24
+ const { handleMouseDown, handleMouseMove, handleMouseUp, dragStyle } =
25
+ useDrag(sectionRef);
26
+
20
27
  if (!awards) return;
21
28
 
22
29
  return (
23
- <Container>
24
- <div className={styles.awards}>
30
+ <div className={styles.awards}>
31
+ <Container>
25
32
  {heading && <div className={styles.heading}>{heading}</div>}
26
- <div className={styles.items}>
33
+ </Container>
34
+ <Container noMobilePadding>
35
+ <div
36
+ ref={sectionRef}
37
+ className={styles.items}
38
+ onMouseDown={handleMouseDown}
39
+ onMouseMove={handleMouseMove}
40
+ onMouseUp={handleMouseUp}
41
+ onMouseLeave={handleMouseUp}
42
+ style={dragStyle as React.CSSProperties}
43
+ >
27
44
  {awards.map((award, i) => {
28
45
  const { image, heading, text } = award;
29
46
 
30
- if (!heading) return;
47
+ if (!image) return;
31
48
 
32
49
  return (
33
- <div key={heading + i} className={styles.award}>
50
+ <div key={image.sourceUrl + i} className={styles.award}>
34
51
  <div className={styles.image}>
35
52
  {image && <Image src={image?.sourceUrl} alt="" fill />}
36
53
  </div>
37
- <div className={styles.text}>{heading}</div>
54
+ {heading && <div className={styles.text}>{heading}</div>}
38
55
  {text && <div className={styles.client}>{text}</div>}
39
56
  </div>
40
57
  );
41
58
  })}
42
59
  </div>
43
- </div>
44
- </Container>
60
+ </Container>
61
+ </div>
45
62
  );
46
63
  };
47
64
 
@@ -2,6 +2,10 @@
2
2
 
3
3
  .awards {
4
4
  padding: 64px 0;
5
+
6
+ @media #{$QUERY-sm} {
7
+ padding: 32px 0 44px;
8
+ }
5
9
  }
6
10
 
7
11
  .heading {
@@ -10,13 +14,18 @@
10
14
  color: $color-brown;
11
15
  margin-bottom: 64px;
12
16
  line-height: 1.3;
17
+
18
+ @media #{$QUERY-sm} {
19
+ font-size: 28px;
20
+ margin-bottom: 44px;
21
+ }
13
22
  }
14
23
 
15
24
  .items {
16
25
  display: flex;
17
26
 
18
- @media screen and (max-width: $screen-sm) {
19
- flex-wrap: wrap;
27
+ @media #{$QUERY-sm} {
28
+ gap: 24px;
20
29
  }
21
30
  }
22
31
 
@@ -25,17 +34,35 @@
25
34
  text-align: center;
26
35
  color: $color-brown;
27
36
 
28
- @media screen and (max-width: $screen-sm) {
29
- width: 50%;
30
- margin-bottom: 30px;
37
+ @media #{$QUERY-sm} {
38
+ width: auto;
39
+ max-width: 122px;
40
+ flex-shrink: 0;
41
+ }
42
+
43
+ &:first-child {
44
+ @media #{$QUERY-sm} {
45
+ margin-left: 20px;
46
+ }
47
+ }
48
+
49
+ &:last-child {
50
+ @media #{$QUERY-sm} {
51
+ margin-right: 20px;
52
+ }
31
53
  }
32
54
  }
33
55
 
34
56
  .image {
35
57
  position: relative;
58
+ min-width: 100px;
36
59
  height: 64px;
37
60
  margin-bottom: 64px;
38
61
 
62
+ @media #{$QUERY-sm} {
63
+ margin-bottom: 0;
64
+ }
65
+
39
66
  img {
40
67
  object-fit: contain;
41
68
  }
@@ -45,8 +72,16 @@
45
72
  font-size: 18px;
46
73
  margin-bottom: 10px;
47
74
  font-weight: 500;
75
+
76
+ @media #{$QUERY-sm} {
77
+ font-size: 16px;
78
+ }
48
79
  }
49
80
 
50
81
  .client {
51
82
  font-size: 18px;
83
+
84
+ @media #{$QUERY-sm} {
85
+ font-size: 16px;
86
+ }
52
87
  }
@@ -2,6 +2,10 @@
2
2
 
3
3
  .caseStudyTeaser {
4
4
  padding: 64px 0;
5
+
6
+ @media #{$QUERY-sm} {
7
+ padding: 32px 0 64px;
8
+ }
5
9
  }
6
10
 
7
11
  .heading {
@@ -11,8 +15,8 @@
11
15
  margin-bottom: 64px;
12
16
 
13
17
  @media screen and (max-width: $screen-sm) {
14
- font-size: 31px;
15
- margin-bottom: 30px;
18
+ font-size: 28px;
19
+ margin-bottom: 32px;
16
20
  }
17
21
  }
18
22
 
@@ -31,11 +35,12 @@
31
35
  height: 720px;
32
36
  padding: 40px;
33
37
  transition: width 0.3s;
38
+ box-sizing: border-box;
34
39
 
35
40
  @media screen and (max-width: $screen-sm) {
36
41
  max-width: 90%;
37
42
  height: 500px;
38
- padding: 20px;
43
+ padding: 40px 33px;
39
44
  }
40
45
 
41
46
  &:hover {
@@ -79,10 +84,12 @@
79
84
 
80
85
  @media screen and (max-width: $screen-sm) {
81
86
  font-size: 31px;
82
- margin-bottom: 20px;
87
+ margin-bottom: 36px;
88
+ width: 100%;
83
89
  }
84
90
  }
85
91
 
86
92
  .button {
87
93
  @extend .button--white-transparent;
94
+ display: inline-block;
88
95
  }
@@ -7,11 +7,15 @@ const ContactTeaser = ({
7
7
  heading,
8
8
  text,
9
9
  theme = "yellow",
10
+ buttonText = "Contact Us",
11
+ buttonHref = "/contact",
10
12
  Link,
11
13
  }: {
12
14
  heading: string;
13
15
  text?: string;
14
16
  theme?: "yellow" | "pink";
17
+ buttonText?: string;
18
+ buttonHref?: string;
15
19
  Link: NextLink;
16
20
  }) => {
17
21
  return (
@@ -24,8 +28,8 @@ const ContactTeaser = ({
24
28
  </div>
25
29
  )}
26
30
  {text && <div className={styles.text}>{text}</div>}
27
- <Link href="/contact" className={styles.button}>
28
- {translate("Contact Us")}
31
+ <Link href={buttonHref} className={styles.button}>
32
+ {translate(buttonText)}
29
33
  </Link>
30
34
  </div>
31
35
  </Container>
@@ -8,10 +8,10 @@
8
8
  &.pink {
9
9
  background-color: $color-pink;
10
10
  color: $color-brown;
11
+ }
11
12
 
12
- .button {
13
- @extend .button--brown;
14
- }
13
+ @media #{$QUERY-sm} {
14
+ padding: 32px 0;
15
15
  }
16
16
  }
17
17
 
@@ -27,8 +27,8 @@
27
27
  margin-bottom: 24px;
28
28
  white-space: pre-wrap;
29
29
 
30
- @media screen and (max-width: $screen-sm) {
31
- font-size: 31px;
30
+ @media #{$QUERY-sm} {
31
+ font-size: 32px;
32
32
  }
33
33
 
34
34
  &:last-child {
@@ -43,4 +43,13 @@
43
43
  .text {
44
44
  font-size: 20px;
45
45
  margin-bottom: 48px;
46
+
47
+ @media #{$QUERY-sm} {
48
+ font-size: 16px;
49
+ }
50
+ }
51
+
52
+ .button {
53
+ @extend .button--brown;
54
+ display: inline-block;
46
55
  }
@@ -5,12 +5,19 @@ import styles from "./styles.module.scss";
5
5
  const Container = ({
6
6
  children,
7
7
  style,
8
+ noMobilePadding,
8
9
  }: {
9
10
  children: React.ReactNode;
10
11
  style?: CSSProperties;
12
+ noMobilePadding?: boolean;
11
13
  }) => {
12
14
  return (
13
- <div className={styles.container} style={{ ...style }}>
15
+ <div
16
+ className={`${styles.container} ${
17
+ noMobilePadding ? styles.noMobilePadding : ""
18
+ }`}
19
+ style={{ ...style }}
20
+ >
14
21
  {children}
15
22
  </div>
16
23
  );
@@ -7,16 +7,22 @@
7
7
  box-sizing: border-box;
8
8
  padding: 0 30px;
9
9
 
10
- @media screen and (max-width: $screen-lg) {
10
+ @media #{$QUERY-lg} {
11
11
  width: 1000px;
12
12
  }
13
13
 
14
- @media screen and (max-width: $screen-md) {
14
+ @media #{$QUERY-md} {
15
15
  width: 900px;
16
16
  }
17
17
 
18
- @media screen and (max-width: $screen-sm) {
18
+ @media #{$QUERY-sm} {
19
19
  width: 100%;
20
20
  padding: 0 20px;
21
21
  }
22
+
23
+ &.noMobilePadding {
24
+ @media #{$QUERY-sm} {
25
+ padding: 0;
26
+ }
27
+ }
22
28
  }
@@ -1,7 +1,10 @@
1
+ "use client";
2
+ import { useRef } from "react";
1
3
  import Container from "../Container";
2
4
  import TextSection from "../TextSection";
3
5
  import styles from "./styles.module.scss";
4
6
  import Tile from "./Tile";
7
+ import useDrag from "../../hooks/useDrag";
5
8
 
6
9
  const DoubleTiles = ({
7
10
  heading,
@@ -13,12 +16,26 @@ const DoubleTiles = ({
13
16
  text?: string;
14
17
  }[];
15
18
  }) => {
19
+ const sectionRef = useRef(null);
20
+ const { handleMouseDown, handleMouseMove, handleMouseUp, dragStyle } =
21
+ useDrag(sectionRef);
22
+
23
+ if (!tiles) return;
24
+
16
25
  return (
17
26
  <div className={styles.doubleTiles}>
18
27
  <TextSection caption="PROCESS" heading={heading} />
19
- <Container>
28
+ <Container noMobilePadding>
20
29
  <div className={styles.wrapper}>
21
- <div className={styles.tiles}>
30
+ <div
31
+ ref={sectionRef}
32
+ className={styles.tiles}
33
+ onMouseDown={handleMouseDown}
34
+ onMouseMove={handleMouseMove}
35
+ onMouseUp={handleMouseUp}
36
+ onMouseLeave={handleMouseUp}
37
+ style={dragStyle as React.CSSProperties}
38
+ >
22
39
  {tiles.map((tile, i) => {
23
40
  let background: "pink" | "yellow" | "brown" | "gray" = "pink";
24
41
  if (i % 3 === 1) background = "gray";
@@ -26,7 +43,7 @@ const DoubleTiles = ({
26
43
 
27
44
  return (
28
45
  <Tile
29
- key={tile.text}
46
+ key={background + i}
30
47
  heading={tile.heading || ""}
31
48
  text={tile.text || ""}
32
49
  background={background}
@@ -4,6 +4,11 @@
4
4
  padding-bottom: 64px;
5
5
  display: flex;
6
6
  gap: 20px;
7
+
8
+ @media #{$QUERY-sm} {
9
+ padding: 0 20px;
10
+ padding-bottom: 32px;
11
+ }
7
12
  }
8
13
 
9
14
  .tile {
@@ -63,13 +68,20 @@
63
68
  display: block;
64
69
  }
65
70
  }
71
+
72
+ svg {
73
+ @media #{$QUERY-sm} {
74
+ width: 36px;
75
+ }
76
+ }
66
77
  }
67
78
 
68
79
  .heading {
69
80
  font-size: 42px;
70
81
  margin-bottom: 42px;
71
82
 
72
- @media screen and (max-width: $screen-sm) {
83
+ @media #{$QUERY-sm} {
84
+ font-size: 28px;
73
85
  margin-bottom: 20px;
74
86
  }
75
87
 
@@ -80,6 +92,10 @@
80
92
 
81
93
  .text {
82
94
  font-size: 32px;
95
+
96
+ @media #{$QUERY-sm} {
97
+ font-size: 21px;
98
+ }
83
99
  }
84
100
 
85
101
  .sideTwo {
@@ -6,6 +6,10 @@
6
6
  color: $color-white;
7
7
  position: relative;
8
8
  z-index: 4;
9
+
10
+ @media #{$QUERY-sm} {
11
+ padding: 30px 20px 48px;
12
+ }
9
13
  }
10
14
 
11
15
  .footerWrapper {
@@ -26,9 +30,13 @@
26
30
  justify-content: space-between;
27
31
 
28
32
  svg {
29
- @media screen and (max-width: $screen-md) {
33
+ @media #{$QUERY-md} {
30
34
  width: 350px;
31
35
  }
36
+
37
+ @media #{$QUERY-sm} {
38
+ width: 245px;
39
+ }
32
40
  }
33
41
  }
34
42
 
@@ -42,7 +50,7 @@
42
50
  }
43
51
 
44
52
  @media screen and (max-width: $screen-sm) {
45
- margin-bottom: 30px;
53
+ display: none;
46
54
  }
47
55
  }
48
56
 
@@ -57,6 +65,10 @@
57
65
  @media screen and (max-width: $screen-md) {
58
66
  display: block;
59
67
  }
68
+
69
+ @media #{$QUERY-sm} {
70
+ display: none;
71
+ }
60
72
  }
61
73
 
62
74
  .office {
@@ -73,7 +85,7 @@
73
85
 
74
86
  .city {
75
87
  font-size: 16px;
76
- font-weight: 700;
88
+ font-weight: 500;
77
89
  }
78
90
 
79
91
  .email {
@@ -93,24 +105,31 @@
93
105
  @media screen and (max-width: 1000px) {
94
106
  width: 270px;
95
107
  }
108
+
109
+ @media #{$QUERY-sm} {
110
+ width: 100%;
111
+ display: block;
112
+ }
96
113
  }
97
114
 
98
115
  .menu {
99
116
  font-size: 18px;
100
117
  font-weight: 500;
101
- }
102
118
 
103
- .menuSocial {
104
- font-size: 16px;
105
-
106
- .menuItem {
107
- margin-bottom: 27px;
119
+ @media #{$QUERY-sm} {
120
+ width: 100%;
121
+ font-size: 28px;
122
+ margin-bottom: 64px;
108
123
  }
109
124
  }
110
125
 
111
126
  .menuItem {
112
127
  margin-bottom: 24px;
113
128
 
129
+ @media #{$QUERY-sm} {
130
+ margin-bottom: 10px;
131
+ }
132
+
114
133
  a {
115
134
  &:hover {
116
135
  color: $color-pink;
@@ -118,9 +137,32 @@
118
137
  }
119
138
  }
120
139
 
140
+ .menuSocial {
141
+ font-size: 16px;
142
+
143
+ @media #{$QUERY-sm} {
144
+ width: 100%;
145
+ display: flex;
146
+ justify-content: space-between;
147
+ gap: 24px;
148
+ }
149
+
150
+ .menuItem {
151
+ margin-bottom: 27px;
152
+
153
+ @media #{$QUERY-sm} {
154
+ margin-bottom: 15px;
155
+ }
156
+ }
157
+ }
158
+
121
159
  .socialHeading {
122
- font-weight: 700;
160
+ font-weight: 500;
123
161
  margin-bottom: 26px;
162
+
163
+ @media #{$QUERY-sm} {
164
+ display: none;
165
+ }
124
166
  }
125
167
 
126
168
  .bottom {
@@ -129,13 +171,30 @@
129
171
  font-size: 14px;
130
172
  text-transform: uppercase;
131
173
  padding-top: 32px;
174
+
175
+ @media #{$QUERY-sm} {
176
+ display: block;
177
+ padding-top: 13px;
178
+ }
132
179
  }
133
180
 
134
181
  .bottomLinks {
135
182
  display: flex;
183
+ justify-content: space-between;
136
184
  gap: 24px;
137
185
  text-transform: none;
138
186
  font-size: 16px;
187
+ width: 335px;
188
+ max-width: 100%;
189
+
190
+ @media screen and (max-width: 1000px) {
191
+ width: 270px;
192
+ }
193
+
194
+ @media #{$QUERY-sm} {
195
+ margin-top: 10px;
196
+ width: 100%;
197
+ }
139
198
 
140
199
  a {
141
200
  text-decoration: underline;
@@ -127,8 +127,7 @@
127
127
  height: 100%;
128
128
  max-height: 600px;
129
129
  margin: auto 0;
130
- padding-left: 60px;
131
- padding-right: 30px;
130
+ padding: 0 40px;
132
131
  }
133
132
 
134
133
  .menuList {