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
@@ -4,6 +4,10 @@
4
4
  padding: 64px 0;
5
5
  background-color: $color-brown;
6
6
  color: $color-pink;
7
+
8
+ @media #{$QUERY-sm} {
9
+ padding: 32px 0;
10
+ }
7
11
  }
8
12
 
9
13
  .logo {
@@ -45,12 +49,20 @@
45
49
  margin-bottom: 5px;
46
50
  width: 211px;
47
51
  max-width: 100%;
52
+
53
+ @media #{$QUERY-sm} {
54
+ font-size: 22px;
55
+ }
48
56
  }
49
57
 
50
58
  .position {
51
59
  font-size: 18px;
52
60
  width: 211px;
53
61
  max-width: 100%;
62
+
63
+ @media #{$QUERY-sm} {
64
+ font-size: 14px;
65
+ }
54
66
  }
55
67
 
56
68
  .text {
@@ -61,6 +73,10 @@
61
73
  @media screen and (max-width: $screen-md) {
62
74
  font-size: 25px;
63
75
  }
76
+
77
+ @media #{$QUERY-sm} {
78
+ font-size: 16px;
79
+ }
64
80
  }
65
81
 
66
82
  .indicators {
@@ -36,7 +36,7 @@ const ServiceHubsTeaser = ({
36
36
  return (
37
37
  <div className={styles.benefits}>
38
38
  <TextSection caption={caption} heading={heading} text={text} isSmall />
39
- <Container>
39
+ <Container noMobilePadding>
40
40
  <div
41
41
  ref={sectionRef}
42
42
  className={styles.tiles}
@@ -1,12 +1,13 @@
1
1
  @use "../variables" as *;
2
2
 
3
- .benefits {
4
- }
5
-
6
3
  .tiles {
7
4
  display: flex;
8
5
  gap: 16px;
9
6
  padding-bottom: 64px;
7
+
8
+ @media #{$QUERY-sm} {
9
+ padding-bottom: 32px;
10
+ }
10
11
  }
11
12
 
12
13
  .tile {
@@ -28,10 +29,22 @@
28
29
  font-family: $font-secondary;
29
30
 
30
31
  @media screen and (max-width: $screen-sm) {
31
- max-width: 90%;
32
+ max-width: 80%;
32
33
  height: 300px;
33
34
  }
34
35
 
36
+ &:first-child {
37
+ @media #{$QUERY-sm} {
38
+ margin-left: 20px;
39
+ }
40
+ }
41
+
42
+ &:last-child {
43
+ @media #{$QUERY-sm} {
44
+ margin-right: 20px;
45
+ }
46
+ }
47
+
35
48
  &.yellow {
36
49
  background-color: $color-yellow;
37
50
  color: $color-blue;
@@ -14,7 +14,7 @@ const TeamBenefits = ({ tiles }: { tiles: string[] }) => {
14
14
  return (
15
15
  <div className={styles.benefits}>
16
16
  <TextSection caption="join the team" heading="Why Foundry?" />
17
- <Container>
17
+ <Container noMobilePadding>
18
18
  <div
19
19
  ref={sectionRef}
20
20
  className={styles.tiles}
@@ -3,6 +3,10 @@
3
3
  .benefits {
4
4
  background-color: $color-gray-light;
5
5
  padding-bottom: 128px;
6
+
7
+ @media #{$QUERY-sm} {
8
+ padding-bottom: 32px;
9
+ }
6
10
  }
7
11
 
8
12
  .tiles {
@@ -32,6 +36,10 @@
32
36
  max-width: 90%;
33
37
  }
34
38
 
39
+ @media #{$QUERY-sm} {
40
+ width: 275px;
41
+ }
42
+
35
43
  &.yellow {
36
44
  background-color: $color-yellow;
37
45
  color: $color-blue;
@@ -46,6 +54,18 @@
46
54
  background-color: $color-blue;
47
55
  color: $color-white;
48
56
  }
57
+
58
+ &:first-child {
59
+ @media #{$QUERY-sm} {
60
+ margin-left: 20px;
61
+ }
62
+ }
63
+
64
+ &:last-child {
65
+ @media #{$QUERY-sm} {
66
+ margin-right: 20px;
67
+ }
68
+ }
49
69
  }
50
70
 
51
71
  .text {
@@ -1,8 +1,11 @@
1
+ "use client";
2
+ import { useRef } from "react";
1
3
  import { translate } from "../../utils";
2
4
  import Container from "../Container";
3
5
  import styles from "./styles.module.scss";
4
6
  import Item from "./Item";
5
7
  import { NextImage, Person } from "../../types";
8
+ import useDrag from "../../hooks/useDrag";
6
9
 
7
10
  const TheamPhotos = ({
8
11
  people,
@@ -11,10 +14,22 @@ const TheamPhotos = ({
11
14
  people: Person[];
12
15
  Image: NextImage;
13
16
  }) => {
17
+ const sectionRef = useRef(null);
18
+ const { handleMouseDown, handleMouseMove, handleMouseUp, dragStyle } =
19
+ useDrag(sectionRef);
20
+
14
21
  return (
15
- <Container>
22
+ <Container noMobilePadding>
16
23
  <div className={styles.heading}>{translate("Our Lovely Team")}</div>
17
- <div className={styles.people}>
24
+ <div
25
+ ref={sectionRef}
26
+ className={styles.people}
27
+ onMouseDown={handleMouseDown}
28
+ onMouseMove={handleMouseMove}
29
+ onMouseUp={handleMouseUp}
30
+ onMouseLeave={handleMouseUp}
31
+ style={dragStyle as React.CSSProperties}
32
+ >
18
33
  {people.map((person) => {
19
34
  return <Item key={person.name} person={person} Image={Image} />;
20
35
  })}
@@ -5,6 +5,12 @@
5
5
  font-family: $font-secondary;
6
6
  margin-bottom: 55px;
7
7
  color: $color-brown;
8
+
9
+ @media #{$QUERY-sm} {
10
+ font-size: 28px;
11
+ margin-bottom: 24px;
12
+ padding: 0 20px;
13
+ }
8
14
  }
9
15
 
10
16
  .filterBtns {
@@ -37,6 +43,11 @@
37
43
  flex-wrap: wrap;
38
44
  gap: 16px;
39
45
  margin-bottom: 64px;
46
+
47
+ @media #{$QUERY-sm} {
48
+ flex-wrap: nowrap;
49
+ margin-bottom: 32px;
50
+ }
40
51
  }
41
52
 
42
53
  .person {
@@ -44,9 +55,22 @@
44
55
  padding-bottom: 16px;
45
56
  text-align: center;
46
57
  color: $color-brown;
58
+ flex-shrink: 0;
47
59
 
48
60
  @media screen and (max-width: $screen-sm) {
49
- width: 100%;
61
+ width: 245px;
62
+ }
63
+
64
+ &:first-child {
65
+ @media #{$QUERY-sm} {
66
+ margin-left: 20px;
67
+ }
68
+ }
69
+
70
+ &:last-child {
71
+ @media #{$QUERY-sm} {
72
+ margin-right: 20px;
73
+ }
50
74
  }
51
75
  }
52
76
 
@@ -57,8 +81,14 @@
57
81
  position: relative;
58
82
  margin-bottom: 16px;
59
83
 
84
+ @media #{$QUERY-sm} {
85
+ width: 100%;
86
+ height: 245px;
87
+ }
88
+
60
89
  img {
61
90
  object-fit: contain;
91
+ pointer-events: none;
62
92
  }
63
93
 
64
94
  &.loading {
@@ -68,12 +98,20 @@
68
98
 
69
99
  .name {
70
100
  font-size: 18px;
71
- font-weight: 700;
101
+ font-weight: 500;
72
102
  margin-bottom: 3px;
73
103
  white-space: pre-wrap;
104
+
105
+ @media #{$QUERY-sm} {
106
+ white-space: initial;
107
+ }
74
108
  }
75
109
 
76
110
  .position {
77
111
  font-size: 16px;
78
112
  white-space: pre-wrap;
113
+
114
+ @media #{$QUERY-sm} {
115
+ white-space: initial;
116
+ }
79
117
  }
@@ -37,6 +37,8 @@
37
37
  text-transform: uppercase;
38
38
  color: $color-blue;
39
39
  margin-bottom: 8px;
40
+ font-size: 16px;
41
+ font-weight: 500;
40
42
 
41
43
  &:last-child {
42
44
  margin-bottom: 0;
@@ -53,14 +55,18 @@
53
55
 
54
56
  &.small {
55
57
  font-size: 42px;
58
+
59
+ @media #{$QUERY-sm} {
60
+ font-size: 28px;
61
+ }
56
62
  }
57
63
 
58
64
  @media #{$QUERY-lg} {
59
65
  font-size: 42px;
60
66
  }
61
67
 
62
- @media screen and (max-width: $screen-sm) {
63
- font-size: 31px;
68
+ @media #{$QUERY-sm} {
69
+ font-size: 28px;
64
70
  white-space: normal;
65
71
  }
66
72
 
@@ -72,4 +78,8 @@
72
78
  .text {
73
79
  font-size: 18px;
74
80
  color: $color-brown;
81
+
82
+ @media #{$QUERY-sm} {
83
+ font-size: 16px;
84
+ }
75
85
  }
@@ -36,6 +36,11 @@ $font-secondary: "kareliaOuttakes", sans-serif;
36
36
  font-size: 22px;
37
37
  transition: 0.3s;
38
38
 
39
+ @media #{$QUERY-sm} {
40
+ font-size: 16px;
41
+ font-weight: 500;
42
+ }
43
+
39
44
  &:hover {
40
45
  background-color: transparent;
41
46
  color: $color-blue;
@@ -32,6 +32,10 @@
32
32
  .number {
33
33
  font-size: 64px;
34
34
  margin-bottom: 5px;
35
+
36
+ @media #{$QUERY-sm} {
37
+ font-size: 36px;
38
+ }
35
39
  }
36
40
 
37
41
  .text {
@@ -1,9 +1,11 @@
1
- import React from "react";
1
+ "use client";
2
+ import { useRef } from "react";
2
3
  import Container from "../../Container";
3
4
  import styles from "./styles.module.scss";
4
5
  import Arrow from "../../../assets/svg/arrow.svg";
5
6
  import { translate } from "../../../utils";
6
7
  import { Case, NextImage, NextLink } from "../../../types";
8
+ import useDrag from "../../../hooks/useDrag";
7
9
 
8
10
  function Other({
9
11
  cases,
@@ -14,17 +16,30 @@ function Other({
14
16
  Link: NextLink;
15
17
  Image: NextImage;
16
18
  }) {
19
+ const sectionRef = useRef(null);
20
+ const { handleMouseDown, handleMouseMove, handleMouseUp, dragStyle } =
21
+ useDrag(sectionRef);
22
+
17
23
  if (!cases) return;
18
24
 
19
25
  return (
20
- <Container>
26
+ <Container noMobilePadding>
21
27
  <div className={styles.other}>
22
- <div className={styles.caption}>{translate("Case Studies")}</div>
23
- <h3 className={styles.heading}>
24
- {translate("Success stories.\nWith proven results.")}
25
- </h3>
26
-
27
- <div className={styles.cases}>
28
+ <div className={styles.top}>
29
+ <div className={styles.caption}>{translate("Case Studies")}</div>
30
+ <h3 className={styles.heading}>
31
+ {translate("Success stories.\nWith proven results.")}
32
+ </h3>
33
+ </div>
34
+ <div
35
+ ref={sectionRef}
36
+ className={styles.cases}
37
+ onMouseDown={handleMouseDown}
38
+ onMouseMove={handleMouseMove}
39
+ onMouseUp={handleMouseUp}
40
+ onMouseLeave={handleMouseUp}
41
+ style={dragStyle as React.CSSProperties}
42
+ >
28
43
  {cases.map((item) => (
29
44
  <div key={item.id} className={styles.case}>
30
45
  <Link href={item.uri}>
@@ -8,7 +8,13 @@
8
8
  }
9
9
 
10
10
  @media #{$QUERY-sm} {
11
- padding: 60px 0;
11
+ padding: 32px 0;
12
+ }
13
+ }
14
+
15
+ .top {
16
+ @media #{$QUERY-sm} {
17
+ padding: 0 20px;
12
18
  }
13
19
  }
14
20
 
@@ -17,6 +23,10 @@
17
23
  color: $color-blue;
18
24
  text-transform: uppercase;
19
25
  margin-bottom: 5px;
26
+
27
+ @media #{$QUERY-sm} {
28
+ font-size: 16px;
29
+ }
20
30
  }
21
31
 
22
32
  .heading {
@@ -25,11 +35,20 @@
25
35
  font-weight: 400;
26
36
  white-space: pre-wrap;
27
37
  margin-bottom: 56px;
38
+
39
+ @media #{$QUERY-sm} {
40
+ font-size: 28px;
41
+ margin-bottom: 32px;
42
+ }
28
43
  }
29
44
 
30
45
  .buttonWrapper {
31
46
  text-align: center;
32
47
  padding: 32px;
48
+
49
+ @media #{$QUERY-sm} {
50
+ padding: 0;
51
+ }
33
52
  }
34
53
 
35
54
  .button {
@@ -38,11 +57,10 @@
38
57
 
39
58
  .cases {
40
59
  display: flex;
41
- margin: 0 -10px;
60
+ gap: 20px;
42
61
 
43
62
  @media #{$QUERY-sm} {
44
- display: block;
45
- margin: 0;
63
+ padding: 0 20px;
46
64
  }
47
65
  }
48
66
 
@@ -51,7 +69,8 @@
51
69
  margin: 0 10px;
52
70
 
53
71
  @media #{$QUERY-sm} {
54
- width: 100%;
72
+ flex-shrink: 0;
73
+ width: 253px;
55
74
  margin: 0;
56
75
  margin-bottom: 50px;
57
76
  }
@@ -78,6 +97,7 @@
78
97
  .image {
79
98
  width: 100%;
80
99
  height: 220px;
100
+ margin-bottom: 24px;
81
101
 
82
102
  img {
83
103
  width: 100%;
@@ -87,10 +107,6 @@
87
107
  }
88
108
 
89
109
  .texts {
90
- border-left: solid 1px $color-gray-light;
91
- border-right: solid 1px $color-gray-light;
92
- border-bottom: solid 1px $color-gray-light;
93
- padding: 24px 16px;
94
110
  flex-grow: 2;
95
111
  display: flex;
96
112
  flex-direction: column;
@@ -108,11 +124,12 @@
108
124
  justify-content: space-between;
109
125
  align-items: center;
110
126
  font-size: 20px;
111
- font-weight: 700;
127
+ font-weight: 500;
112
128
  color: $color-blue;
113
129
  line-height: 1;
114
130
 
115
131
  path {
116
132
  stroke: $color-blue;
133
+ stroke-width: 2px;
117
134
  }
118
135
  }
@@ -2,4 +2,8 @@
2
2
 
3
3
  .button {
4
4
  @extend .button--pink;
5
+
6
+ @media #{$QUERY-sm} {
7
+ display: none;
8
+ }
5
9
  }
@@ -3,6 +3,10 @@
3
3
  .wrapper {
4
4
  padding: 64px 0;
5
5
  color: $color-brown;
6
+
7
+ @media #{$QUERY-sm} {
8
+ padding: 32px 0;
9
+ }
6
10
  }
7
11
 
8
12
  .link {
@@ -35,6 +39,10 @@
35
39
  color: $color-blue;
36
40
  text-transform: uppercase;
37
41
  margin-bottom: 5px;
42
+
43
+ @media #{$QUERY-sm} {
44
+ font-size: 16px;
45
+ }
38
46
  }
39
47
 
40
48
  .titleWrapper {
@@ -59,7 +67,7 @@
59
67
  font-weight: 400;
60
68
 
61
69
  @media #{$QUERY-sm} {
62
- font-size: 42px;
70
+ font-size: 32px;
63
71
  }
64
72
  }
65
73
 
@@ -80,12 +88,11 @@
80
88
  gap: 0 26px;
81
89
 
82
90
  @media #{$QUERY-sm} {
83
- display: block;
91
+ gap: 0 20px;
84
92
  }
85
93
  }
86
94
 
87
95
  .detail {
88
- font-size: 14px;
89
96
  width: 200px;
90
97
  font-size: 18px;
91
98
 
@@ -95,7 +102,8 @@
95
102
 
96
103
  @media #{$QUERY-sm} {
97
104
  margin-bottom: 30px;
98
- width: 100%;
105
+ width: calc(50% - 10px);
106
+ font-size: 14px;
99
107
  }
100
108
  }
101
109
 
@@ -103,27 +111,45 @@
103
111
  margin-bottom: 10px;
104
112
  font-size: 20px;
105
113
  text-transform: uppercase;
114
+
115
+ @media #{$QUERY-sm} {
116
+ font-size: 14px;
117
+ font-weight: 500;
118
+ }
106
119
  }
107
120
 
108
121
  .awardsWrapper {
109
122
  @media #{$QUERY-md} {
110
123
  margin-top: 30px;
111
124
  }
125
+
126
+ @media #{$QUERY-sm} {
127
+ margin-top: 0;
128
+ }
112
129
  }
113
130
 
114
131
  .awards {
115
132
  display: flex;
116
133
  flex-wrap: wrap;
117
134
  gap: 40px;
135
+
136
+ @media #{$QUERY-sm} {
137
+ gap: 16px;
138
+ }
118
139
  }
119
140
 
120
141
  .award {
121
142
  display: flex;
143
+
144
+ @media #{$QUERY-sm} {
145
+ max-width: 106px;
146
+ }
122
147
  }
123
148
 
124
149
  .awardTexts {
125
150
  width: auto;
126
- max-width: 200px;
151
+ width: 200px;
152
+ max-width: 100%;
127
153
  flex-shrink: 0;
128
154
  margin-right: 20px;
129
155
  }
@@ -134,6 +160,7 @@
134
160
  flex-shrink: 0;
135
161
  position: relative;
136
162
  max-height: 100px;
163
+ max-width: 100%;
137
164
 
138
165
  img {
139
166
  width: 100%;
@@ -152,6 +179,10 @@
152
179
  width: 100%;
153
180
  height: 534px;
154
181
 
182
+ @media #{$QUERY-sm} {
183
+ height: 230px;
184
+ }
185
+
155
186
  img {
156
187
  object-fit: cover;
157
188
  }
@@ -37,6 +37,7 @@
37
37
  @media #{$QUERY-sm} {
38
38
  width: 100%;
39
39
  max-width: 100%;
40
+ margin-bottom: 46px;
40
41
  }
41
42
 
42
43
  &:nth-child(4n),
@@ -92,10 +93,19 @@
92
93
  transition: color 0.3s;
93
94
  margin-bottom: 10px;
94
95
  font-weight: 500;
96
+
97
+ @media #{$QUERY-sm} {
98
+ font-size: 18px;
99
+ margin-bottom: 6px;
100
+ }
95
101
  }
96
102
 
97
103
  .caption {
98
104
  font-size: 22px;
105
+
106
+ @media #{$QUERY-sm} {
107
+ font-size: 16px;
108
+ }
99
109
  }
100
110
 
101
111
  .arrowWrapper {
@@ -7,15 +7,20 @@
7
7
 
8
8
  .filterBtns {
9
9
  display: flex;
10
- gap: 24px;
10
+ gap: 12px;
11
11
  flex-wrap: wrap;
12
12
  margin-bottom: 40px;
13
13
  padding-bottom: 32px;
14
+ z-index: 7;
15
+
16
+ @media #{$QUERY-sm} {
17
+ margin-bottom: 0;
18
+ }
14
19
  }
15
20
 
16
21
  .dropdown {
17
22
  position: relative;
18
- width: 150px;
23
+ width: 110px;
19
24
 
20
25
  &.active {
21
26
  z-index: 3;
@@ -1,5 +1,8 @@
1
+ "use client";
2
+ import { useRef } from "react";
1
3
  import styles from "./styles.module.scss";
2
4
  import { NextImage, OfficeDetails } from "../../../types";
5
+ import useDrag from "../../../hooks/useDrag";
3
6
 
4
7
  function Offices({
5
8
  details,
@@ -28,10 +31,21 @@ function Offices({
28
31
  newyorkAddress,
29
32
  newyorkAddressLink,
30
33
  } = details;
34
+ const sectionRef = useRef(null);
35
+ const { handleMouseDown, handleMouseMove, handleMouseUp, dragStyle } =
36
+ useDrag(sectionRef);
31
37
 
32
38
  return (
33
39
  <section>
34
- <div className={styles.wrapper}>
40
+ <div
41
+ ref={sectionRef}
42
+ className={styles.wrapper}
43
+ onMouseDown={handleMouseDown}
44
+ onMouseMove={handleMouseMove}
45
+ onMouseUp={handleMouseUp}
46
+ onMouseLeave={handleMouseUp}
47
+ style={dragStyle as React.CSSProperties}
48
+ >
35
49
  <div className={styles.office}>
36
50
  <div className={styles.image}>
37
51
  {berlinImage && (