foundry-component-library 0.0.13 → 0.1.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 (44) 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 +27 -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/Footer/styles.module.scss +56 -8
  11. package/lib/components/Hero/index.tsx +13 -3
  12. package/lib/components/Hero/styles.module.scss +38 -1
  13. package/lib/components/HubsAccordion/index.tsx +1 -1
  14. package/lib/components/HubsAccordion/styles.module.scss +87 -6
  15. package/lib/components/LargeText/styles.module.scss +14 -2
  16. package/lib/components/LogoSection/styles.module.scss +6 -5
  17. package/lib/components/Management/styles.module.scss +7 -2
  18. package/lib/components/NewsTeaser/index.tsx +21 -3
  19. package/lib/components/NewsTeaser/styles.module.scss +53 -12
  20. package/lib/components/OfficesTeaser/index.tsx +2 -1
  21. package/lib/components/OfficesTeaser/styles.module.scss +4 -0
  22. package/lib/components/PartnerNetwork/styles.module.scss +14 -0
  23. package/lib/components/QuoteSection/styles.module.scss +16 -0
  24. package/lib/components/ServiceHubsTeaser/index.tsx +1 -1
  25. package/lib/components/ServiceHubsTeaser/styles.module.scss +17 -4
  26. package/lib/components/TeamBenefits/index.tsx +1 -1
  27. package/lib/components/TeamBenefits/styles.module.scss +20 -0
  28. package/lib/components/TeamPhotos/index.tsx +17 -2
  29. package/lib/components/TeamPhotos/styles.module.scss +39 -1
  30. package/lib/components/TextSection/styles.module.scss +12 -2
  31. package/lib/components/_variables.scss +5 -0
  32. package/lib/components/case/Content/Numbers/styles.module.scss +4 -0
  33. package/lib/components/case/Other/index.tsx +23 -8
  34. package/lib/components/case/Other/styles.module.scss +27 -10
  35. package/lib/components/case/ShareButton/styles.module.scss +4 -0
  36. package/lib/components/case/Top/styles.module.scss +36 -5
  37. package/lib/components/cases/Items/styles.module.scss +10 -0
  38. package/lib/components/cases/Top/styles.module.scss +7 -2
  39. package/lib/components/contact/Offices/index.tsx +15 -1
  40. package/lib/components/contact/Offices/styles.module.scss +20 -6
  41. package/lib/queries/getHomePage.ts +12 -0
  42. package/lib/queries/getPeoplePage.ts +14 -0
  43. package/package.json +1 -1
  44. 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: 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,47 @@ 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
+
27
+ console.log(awards);
28
+
20
29
  if (!awards) return;
21
30
 
22
31
  return (
23
- <Container>
24
- <div className={styles.awards}>
32
+ <div className={styles.awards}>
33
+ <Container>
25
34
  {heading && <div className={styles.heading}>{heading}</div>}
26
- <div className={styles.items}>
35
+ </Container>
36
+ <Container noMobilePadding>
37
+ <div
38
+ ref={sectionRef}
39
+ className={styles.items}
40
+ onMouseDown={handleMouseDown}
41
+ onMouseMove={handleMouseMove}
42
+ onMouseUp={handleMouseUp}
43
+ onMouseLeave={handleMouseUp}
44
+ style={dragStyle as React.CSSProperties}
45
+ >
27
46
  {awards.map((award, i) => {
28
47
  const { image, heading, text } = award;
29
48
 
30
- if (!heading) return;
49
+ if (!image) return;
31
50
 
32
51
  return (
33
- <div key={heading + i} className={styles.award}>
52
+ <div key={heading || "" + i} className={styles.award}>
34
53
  <div className={styles.image}>
35
54
  {image && <Image src={image?.sourceUrl} alt="" fill />}
36
55
  </div>
37
- <div className={styles.text}>{heading}</div>
56
+ {heading && <div className={styles.text}>{heading}</div>}
38
57
  {text && <div className={styles.client}>{text}</div>}
39
58
  </div>
40
59
  );
41
60
  })}
42
61
  </div>
43
- </div>
44
- </Container>
62
+ </Container>
63
+ </div>
45
64
  );
46
65
  };
47
66
 
@@ -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
  }
@@ -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 {
@@ -93,24 +105,30 @@
93
105
  @media screen and (max-width: 1000px) {
94
106
  width: 270px;
95
107
  }
108
+
109
+ @media #{$QUERY-sm} {
110
+ display: block;
111
+ }
96
112
  }
97
113
 
98
114
  .menu {
99
115
  font-size: 18px;
100
116
  font-weight: 500;
101
- }
102
117
 
103
- .menuSocial {
104
- font-size: 16px;
105
-
106
- .menuItem {
107
- margin-bottom: 27px;
118
+ @media #{$QUERY-sm} {
119
+ width: 100%;
120
+ font-size: 28px;
121
+ margin-bottom: 64px;
108
122
  }
109
123
  }
110
124
 
111
125
  .menuItem {
112
126
  margin-bottom: 24px;
113
127
 
128
+ @media #{$QUERY-sm} {
129
+ margin-bottom: 10px;
130
+ }
131
+
114
132
  a {
115
133
  &:hover {
116
134
  color: $color-pink;
@@ -118,9 +136,30 @@
118
136
  }
119
137
  }
120
138
 
139
+ .menuSocial {
140
+ font-size: 16px;
141
+
142
+ @media #{$QUERY-sm} {
143
+ display: flex;
144
+ gap: 24px;
145
+ }
146
+
147
+ .menuItem {
148
+ margin-bottom: 27px;
149
+
150
+ @media #{$QUERY-sm} {
151
+ margin-bottom: 15px;
152
+ }
153
+ }
154
+ }
155
+
121
156
  .socialHeading {
122
157
  font-weight: 700;
123
158
  margin-bottom: 26px;
159
+
160
+ @media #{$QUERY-sm} {
161
+ display: none;
162
+ }
124
163
  }
125
164
 
126
165
  .bottom {
@@ -129,6 +168,11 @@
129
168
  font-size: 14px;
130
169
  text-transform: uppercase;
131
170
  padding-top: 32px;
171
+
172
+ @media #{$QUERY-sm} {
173
+ display: block;
174
+ padding-top: 13px;
175
+ }
132
176
  }
133
177
 
134
178
  .bottomLinks {
@@ -137,6 +181,10 @@
137
181
  text-transform: none;
138
182
  font-size: 16px;
139
183
 
184
+ @media #{$QUERY-sm} {
185
+ margin-top: 10px;
186
+ }
187
+
140
188
  a {
141
189
  text-decoration: underline;
142
190
 
@@ -8,6 +8,7 @@ const Hero = ({
8
8
  isFullWidth,
9
9
  isFirst,
10
10
  btn,
11
+ noMarginBottom,
11
12
  Link,
12
13
  Image,
13
14
  }: {
@@ -19,6 +20,7 @@ const Hero = ({
19
20
  text?: string;
20
21
  href?: string;
21
22
  };
23
+ noMarginBottom?: boolean;
22
24
  Link: NextLink;
23
25
  Image: NextImage;
24
26
  }) => {
@@ -27,7 +29,11 @@ const Hero = ({
27
29
 
28
30
  if (isFullWidth) {
29
31
  return (
30
- <div className={`${styles.hero} ${styles.isFullWidth}`}>
32
+ <div
33
+ className={`${styles.hero} ${styles.isFullWidth} ${
34
+ noMarginBottom ? styles.noMarginBottom : ""
35
+ }`}
36
+ >
31
37
  <Image
32
38
  className={styles.background}
33
39
  src={image}
@@ -48,8 +54,12 @@ const Hero = ({
48
54
  }
49
55
 
50
56
  return (
51
- <Container>
52
- <div className={`${styles.hero} ${isFirst ? styles.first : ""}`}>
57
+ <Container noMobilePadding>
58
+ <div
59
+ className={`${styles.hero} ${isFirst ? styles.first : ""} ${
60
+ noMarginBottom ? styles.noMarginBottom : ""
61
+ }`}
62
+ >
53
63
  <Image
54
64
  className={styles.background}
55
65
  src={image}
@@ -10,8 +10,17 @@
10
10
  text-align: center;
11
11
  line-height: 1.1;
12
12
 
13
+ @media #{$QUERY-sm} {
14
+ min-height: 350px;
15
+ margin: 32px 0;
16
+ }
17
+
13
18
  &.first {
14
19
  margin-top: 0;
20
+
21
+ @media #{$QUERY-sm} {
22
+ min-height: 250px;
23
+ }
15
24
  }
16
25
 
17
26
  & * {
@@ -26,11 +35,37 @@
26
35
  &.isFullWidth {
27
36
  margin: 0;
28
37
  min-height: 720px;
38
+
39
+ @media #{$QUERY-sm} {
40
+ min-height: 350px;
41
+ }
42
+ }
43
+
44
+ &.noMarginBottom {
45
+ @media #{$QUERY-sm} {
46
+ margin-bottom: 0;
47
+ }
29
48
  }
30
49
 
31
50
  &.loading {
32
51
  background-color: $color-gray-light;
33
52
  }
53
+
54
+ &:after {
55
+ content: "";
56
+ position: absolute;
57
+ top: 0;
58
+ left: 0;
59
+ width: 100%;
60
+ height: 100%;
61
+ background-color: rgba(0, 0, 0, 0.1);
62
+ z-index: 1;
63
+ }
64
+ }
65
+
66
+ .texts {
67
+ position: relative;
68
+ z-index: 2;
34
69
  }
35
70
 
36
71
  .heading {
@@ -43,7 +78,7 @@
43
78
  }
44
79
 
45
80
  @media screen and (max-width: $screen-sm) {
46
- font-size: 92px;
81
+ font-size: 54px;
47
82
  }
48
83
  }
49
84
 
@@ -57,6 +92,8 @@
57
92
  }
58
93
 
59
94
  .button {
95
+ display: inline-block;
96
+
60
97
  &:hover {
61
98
  background-color: $color-white;
62
99
  }
@@ -18,7 +18,7 @@ const HubsAccordion = ({
18
18
 
19
19
  return (
20
20
  <div className={styles.hubsAccordion}>
21
- <Container>
21
+ <Container noMobilePadding>
22
22
  <div className={styles.hubs}>
23
23
  {hubs.map((hub) => {
24
24
  return (