allaw-ui 2.1.4 → 2.1.6
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.
- package/dist/components/atoms/buttons/IconButton.css +19 -0
- package/dist/components/atoms/buttons/IconButton.d.ts +1 -1
- package/dist/components/atoms/buttons/IconButton.stories.d.ts +1 -0
- package/dist/components/atoms/buttons/IconButton.stories.js +13 -1
- package/dist/components/atoms/featureCard/featureCard.js +1 -1
- package/dist/components/atoms/featureCard/featureCard.module.css +1 -0
- package/dist/components/atoms/featureCard/index.d.ts +2 -0
- package/dist/components/atoms/featureCard/index.js +1 -0
- package/dist/components/molecules/banner/Banner.js +5 -4
- package/dist/components/molecules/banner/Banner.module.css +19 -13
- package/dist/components/molecules/banner/Banner.stories.d.ts +1 -0
- package/dist/components/molecules/banner/Banner.stories.js +18 -0
- package/dist/components/molecules/banner/index.d.ts +2 -0
- package/dist/components/molecules/banner/index.js +1 -0
- package/dist/components/molecules/featureGrid/FeatureGrid.js +20 -4
- package/dist/components/molecules/featureGrid/featureGrid.module.css +45 -4
- package/dist/components/molecules/featureGrid/index.d.ts +2 -0
- package/dist/components/molecules/featureGrid/index.js +1 -0
- package/dist/components/molecules/frameCTA/FrameCTA.d.ts +18 -0
- package/dist/components/molecules/frameCTA/FrameCTA.js +18 -0
- package/dist/components/molecules/frameCTA/FrameCTA.stories.d.ts +7 -0
- package/dist/components/molecules/frameCTA/FrameCTA.stories.js +35 -0
- package/dist/components/molecules/frameCTA/frameCTA.module.css +134 -0
- package/dist/components/molecules/frameCTA/index.d.ts +2 -0
- package/dist/components/molecules/frameCTA/index.js +1 -0
- package/dist/components/molecules/heroSection/HeroSection.js +9 -6
- package/dist/components/molecules/heroSection/HeroSection.stories.d.ts +0 -2
- package/dist/components/molecules/heroSection/HeroSection.stories.js +8 -18
- package/dist/components/molecules/heroSection/heroSection.module.css +58 -6
- package/dist/components/molecules/heroSection/index.d.ts +2 -0
- package/dist/components/molecules/heroSection/index.js +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.js +4 -1
- package/package.json +1 -1
|
@@ -126,3 +126,22 @@
|
|
|
126
126
|
.icon-button.largeFilled:not(.custom-color):hover {
|
|
127
127
|
background: var(--grey-venom, #e6edf5);
|
|
128
128
|
}
|
|
129
|
+
|
|
130
|
+
.icon-button.iconCircle {
|
|
131
|
+
width: 50px;
|
|
132
|
+
height: 50px;
|
|
133
|
+
border-radius: 50%;
|
|
134
|
+
display: flex;
|
|
135
|
+
justify-content: center;
|
|
136
|
+
align-items: center;
|
|
137
|
+
border: none;
|
|
138
|
+
background-color: #ffffff;
|
|
139
|
+
cursor: pointer;
|
|
140
|
+
transition: transform 0.2s, filter 0.2s;
|
|
141
|
+
border: 0.5px solid black;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.icon-button.iconCircle:hover {
|
|
145
|
+
transform: scale(1.01);
|
|
146
|
+
filter: brightness(80%);
|
|
147
|
+
}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import "./IconButton.css";
|
|
3
3
|
import "../../../styles/global.css";
|
|
4
4
|
export interface IconButtonProps {
|
|
5
|
-
style: "smallFilled" | "largeFilled" | "mediumOutline" | "iconOnly";
|
|
5
|
+
style: "smallFilled" | "largeFilled" | "mediumOutline" | "iconOnly" | "iconCircle";
|
|
6
6
|
iconName: string;
|
|
7
7
|
color?: string;
|
|
8
8
|
onClick?: () => void;
|
|
@@ -25,7 +25,13 @@ export default {
|
|
|
25
25
|
style: {
|
|
26
26
|
control: {
|
|
27
27
|
type: "select",
|
|
28
|
-
options: [
|
|
28
|
+
options: [
|
|
29
|
+
"smallFilled",
|
|
30
|
+
"largeFilled",
|
|
31
|
+
"mediumOutline",
|
|
32
|
+
"iconOnly",
|
|
33
|
+
"iconCircle",
|
|
34
|
+
],
|
|
29
35
|
},
|
|
30
36
|
},
|
|
31
37
|
iconName: {
|
|
@@ -74,3 +80,9 @@ IconOnly.args = {
|
|
|
74
80
|
iconName: "allaw-icon-user",
|
|
75
81
|
onClick: function () { return console.log("IconOnly button clicked"); },
|
|
76
82
|
};
|
|
83
|
+
export var IconCircle = Template.bind({});
|
|
84
|
+
IconCircle.args = {
|
|
85
|
+
style: "iconCircle",
|
|
86
|
+
iconName: "allaw-icon-arrow-left",
|
|
87
|
+
onClick: function () { return console.log("IconCircle button clicked"); },
|
|
88
|
+
};
|
|
@@ -5,7 +5,7 @@ import Image from "next/image";
|
|
|
5
5
|
import Link from "next/link";
|
|
6
6
|
var FeatureCard = function (_a) {
|
|
7
7
|
var title = _a.title, image = _a.image, content = _a.content, action = _a.action;
|
|
8
|
-
return (React.createElement("
|
|
8
|
+
return (React.createElement("article", { className: styles.featureCardContainer },
|
|
9
9
|
React.createElement("div", { className: styles.featureCardContent },
|
|
10
10
|
React.createElement(Image, { src: image.src, alt: image.alt, className: styles.featureCardImage, width: 200, height: 200 }),
|
|
11
11
|
React.createElement("div", { className: styles.featureCardTitle },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as featureCard } from "./featureCard";
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import Image from "next/image";
|
|
3
3
|
import styles from "./Banner.module.css";
|
|
4
|
+
import Link from "next/link";
|
|
4
5
|
var Banner = function (_a) {
|
|
5
6
|
var tag = _a.tag, title = _a.title, content = _a.content, image = _a.image, action = _a.action, highlightColor = _a.highlightColor, backgroundColor = _a.backgroundColor;
|
|
6
7
|
var isMobile = typeof window !== "undefined" && window.innerWidth <= 995;
|
|
7
|
-
return (React.createElement("
|
|
8
|
-
image && (React.createElement("
|
|
9
|
-
React.createElement(Image, { src: image.src, alt: image.alt, fill: true, sizes: "(max-width: 995px) 100vw, 400px", className: styles.bannerImageContent }))),
|
|
8
|
+
return (React.createElement("section", { className: styles.bannerContainer, style: { backgroundColor: backgroundColor } },
|
|
9
|
+
image && (React.createElement("figure", { className: "".concat(styles.imageContainer, " ").concat(isMobile ? styles[image.verticalSide] : styles[image.horizontalSide]) },
|
|
10
|
+
React.createElement(Image, { src: image.src || "", alt: image.alt || "", fill: true, sizes: "(max-width: 995px) 100vw, 400px", className: styles.bannerImageContent }))),
|
|
10
11
|
React.createElement("div", { className: "".concat(styles.bannerContent, " ").concat(!image ? styles.bannerContentFullWidth : "") },
|
|
11
12
|
React.createElement("div", { className: styles.bannerHeading },
|
|
12
13
|
tag && (React.createElement("span", { className: styles.bannerTag, style: { color: highlightColor } }, tag)),
|
|
13
14
|
React.createElement("h2", { className: styles.bannerTitle }, title)),
|
|
14
15
|
React.createElement("p", { className: styles.bannerDescription }, content),
|
|
15
|
-
action && (React.createElement(
|
|
16
|
+
action && (React.createElement(Link, { href: action.href, className: styles.action, style: { background: highlightColor } },
|
|
16
17
|
React.createElement("span", { className: styles.actionLabel }, action.label))))));
|
|
17
18
|
};
|
|
18
19
|
export default Banner;
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
display: flex;
|
|
3
3
|
justify-content: center;
|
|
4
4
|
flex-direction: row;
|
|
5
|
-
align-items:
|
|
5
|
+
align-items: stretch;
|
|
6
6
|
padding: 64px 80px;
|
|
7
7
|
gap: 64px;
|
|
8
8
|
border-radius: 32px;
|
|
9
|
-
width:
|
|
9
|
+
width: 100%;
|
|
10
|
+
height: auto;
|
|
10
11
|
max-width: 100%;
|
|
11
12
|
background: #edf3f4;
|
|
12
13
|
}
|
|
@@ -17,7 +18,6 @@
|
|
|
17
18
|
align-items: flex-start;
|
|
18
19
|
gap: 24px;
|
|
19
20
|
width: 100%;
|
|
20
|
-
max-width: 707px;
|
|
21
21
|
height: auto;
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -28,8 +28,10 @@
|
|
|
28
28
|
.imageContainer {
|
|
29
29
|
position: relative;
|
|
30
30
|
width: 100%;
|
|
31
|
+
height: auto;
|
|
32
|
+
display: flex;
|
|
33
|
+
align-items: stretch;
|
|
31
34
|
max-width: 400px;
|
|
32
|
-
height: 350px;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
.bannerImageContent {
|
|
@@ -50,7 +52,7 @@
|
|
|
50
52
|
color: #2d6176;
|
|
51
53
|
text-overflow: ellipsis;
|
|
52
54
|
font-family: "Open Sans";
|
|
53
|
-
font-size:
|
|
55
|
+
font-size: 16px;
|
|
54
56
|
font-style: normal;
|
|
55
57
|
font-weight: 600;
|
|
56
58
|
line-height: normal;
|
|
@@ -66,7 +68,7 @@
|
|
|
66
68
|
text-overflow: ellipsis;
|
|
67
69
|
white-space: normal;
|
|
68
70
|
color: var(--Primary-Mid-black, #171e25);
|
|
69
|
-
font-family:
|
|
71
|
+
font-family: Poppins, sans-serif;
|
|
70
72
|
font-size: 30px;
|
|
71
73
|
font-weight: 600;
|
|
72
74
|
max-width: 100%;
|
|
@@ -100,6 +102,7 @@
|
|
|
100
102
|
background: #2d6176;
|
|
101
103
|
max-width: 300px;
|
|
102
104
|
text-decoration: none;
|
|
105
|
+
overflow: hidden;
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
.action:hover {
|
|
@@ -114,6 +117,10 @@
|
|
|
114
117
|
font-style: normal;
|
|
115
118
|
font-weight: 600;
|
|
116
119
|
line-height: normal;
|
|
120
|
+
display: block;
|
|
121
|
+
white-space: nowrap;
|
|
122
|
+
overflow: hidden;
|
|
123
|
+
text-overflow: ellipsis;
|
|
117
124
|
}
|
|
118
125
|
|
|
119
126
|
.imageContainer.left {
|
|
@@ -128,17 +135,17 @@
|
|
|
128
135
|
.bannerContainer {
|
|
129
136
|
flex-direction: column;
|
|
130
137
|
width: auto;
|
|
131
|
-
height: 750px;
|
|
132
138
|
gap: 40px;
|
|
133
139
|
padding: 40px;
|
|
140
|
+
height: 750px;
|
|
134
141
|
}
|
|
135
142
|
|
|
136
143
|
.bannerDescription {
|
|
137
144
|
display: -webkit-box;
|
|
138
145
|
-webkit-box-orient: vertical;
|
|
139
|
-
-webkit-line-clamp:
|
|
140
|
-
line-clamp:
|
|
141
|
-
font-size:
|
|
146
|
+
-webkit-line-clamp: 6;
|
|
147
|
+
line-clamp: 6;
|
|
148
|
+
font-size: 14px;
|
|
142
149
|
}
|
|
143
150
|
|
|
144
151
|
.bannerContent {
|
|
@@ -148,8 +155,7 @@
|
|
|
148
155
|
}
|
|
149
156
|
|
|
150
157
|
.imageContainer {
|
|
151
|
-
|
|
152
|
-
height: 293px;
|
|
158
|
+
height: 250px;
|
|
153
159
|
max-width: 100%;
|
|
154
160
|
margin: 0 auto;
|
|
155
161
|
}
|
|
@@ -164,7 +170,7 @@
|
|
|
164
170
|
}
|
|
165
171
|
|
|
166
172
|
.bannerTitle {
|
|
167
|
-
font-size:
|
|
173
|
+
font-size: 22px;
|
|
168
174
|
}
|
|
169
175
|
|
|
170
176
|
.imageContainer.top {
|
|
@@ -103,3 +103,21 @@ LongTextWithLongImage.args = {
|
|
|
103
103
|
verticalSide: "top",
|
|
104
104
|
},
|
|
105
105
|
};
|
|
106
|
+
export var ShortTextWithLongImage = Template.bind({});
|
|
107
|
+
ShortTextWithLongImage.args = {
|
|
108
|
+
tag: "Annonce",
|
|
109
|
+
title: "Découvrez tous les détails",
|
|
110
|
+
content: "Nous proposons des solutions juridiques sur mesure pour r\u00E9pondre \u00E0 vos besoins sp\u00E9cifiques.\n",
|
|
111
|
+
highlightColor: "#FFC107",
|
|
112
|
+
backgroundColor: "#FFF8E1",
|
|
113
|
+
action: {
|
|
114
|
+
href: "/details",
|
|
115
|
+
label: "Lire la suite",
|
|
116
|
+
},
|
|
117
|
+
image: {
|
|
118
|
+
src: "https://plus.unsplash.com/premium_photo-1693966067170-2835a8a17a18?q=80&w=1827&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
|
|
119
|
+
alt: "Illustration pour long texte",
|
|
120
|
+
horizontalSide: "right",
|
|
121
|
+
verticalSide: "top",
|
|
122
|
+
},
|
|
123
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Banner } from "./Banner";
|
|
@@ -1,11 +1,27 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useState } from "react";
|
|
2
2
|
import styles from "./featureGrid.module.css";
|
|
3
3
|
import FeatureCard from "../../atoms/featureCard/featureCard";
|
|
4
|
+
import IconButton from "../../atoms/buttons/IconButton";
|
|
4
5
|
var FeatureGrid = function (_a) {
|
|
5
6
|
var title = _a.title, features = _a.features;
|
|
6
|
-
|
|
7
|
+
var _b = useState(0), currentIndex = _b[0], setCurrentIndex = _b[1];
|
|
8
|
+
var handleNext = function () {
|
|
9
|
+
setCurrentIndex(function (prevIndex) { return (prevIndex + 1) % features.length; });
|
|
10
|
+
};
|
|
11
|
+
var handlePrevious = function () {
|
|
12
|
+
setCurrentIndex(function (prevIndex) {
|
|
13
|
+
return prevIndex === 0 ? features.length - 1 : prevIndex - 1;
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
return (React.createElement("section", { className: styles.featureGridWrapper, "aria-label": "Feature List" },
|
|
7
17
|
title && React.createElement("h2", { className: styles.featureGridTitle }, title),
|
|
8
|
-
React.createElement("div", { className: styles.
|
|
9
|
-
React.createElement(
|
|
18
|
+
React.createElement("div", { className: styles.mobileView },
|
|
19
|
+
React.createElement("div", { className: styles.featureGridItem },
|
|
20
|
+
React.createElement(FeatureCard, { key: currentIndex, title: features[currentIndex].title, image: features[currentIndex].image, content: features[currentIndex].content, action: features[currentIndex].action })),
|
|
21
|
+
React.createElement("div", { className: styles.navigationButtons },
|
|
22
|
+
React.createElement(IconButton, { style: "iconCircle", iconName: "allaw-icon-arrow-left", onClick: handlePrevious }),
|
|
23
|
+
React.createElement(IconButton, { style: "iconCircle", iconName: "allaw-icon-arrow-right", onClick: handleNext }))),
|
|
24
|
+
React.createElement("ul", { className: "".concat(styles.featureGridContainer, " ").concat(styles.gridView) }, features.map(function (feature, index) { return (React.createElement("li", { className: styles.featureGridItem, key: index },
|
|
25
|
+
React.createElement(FeatureCard, { title: feature.title, image: feature.image, content: feature.content, action: feature.action }))); }))));
|
|
10
26
|
};
|
|
11
27
|
export default FeatureGrid;
|
|
@@ -33,11 +33,38 @@
|
|
|
33
33
|
gap: 40px;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
.mobileView {
|
|
37
|
+
display: none;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.featureGridContainer,
|
|
41
|
+
.gridView {
|
|
42
|
+
display: grid;
|
|
43
|
+
grid-template-columns: repeat(3, 1fr);
|
|
44
|
+
gap: 40px;
|
|
45
|
+
width: 100%;
|
|
46
|
+
max-width: 1280px;
|
|
47
|
+
}
|
|
48
|
+
|
|
36
49
|
.featureGridItem {
|
|
37
50
|
display: flex;
|
|
38
51
|
justify-content: center;
|
|
39
52
|
}
|
|
40
53
|
|
|
54
|
+
.featureGridItem img {
|
|
55
|
+
width: 100%;
|
|
56
|
+
height: auto;
|
|
57
|
+
object-fit: cover;
|
|
58
|
+
display: block;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.navigationButtons {
|
|
62
|
+
margin-top: 20px;
|
|
63
|
+
display: flex;
|
|
64
|
+
justify-content: center;
|
|
65
|
+
gap: 16px;
|
|
66
|
+
}
|
|
67
|
+
|
|
41
68
|
@media (max-width: 1440px) {
|
|
42
69
|
.featureGridWrapper {
|
|
43
70
|
margin-left: 80px;
|
|
@@ -47,10 +74,25 @@
|
|
|
47
74
|
}
|
|
48
75
|
|
|
49
76
|
@media (max-width: 995px) {
|
|
77
|
+
.mobileView {
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: column;
|
|
80
|
+
align-items: center;
|
|
81
|
+
gap: 16px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.gridView {
|
|
85
|
+
display: none;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.navigationButtons {
|
|
89
|
+
display: flex;
|
|
90
|
+
justify-content: center;
|
|
91
|
+
gap: 16px;
|
|
92
|
+
}
|
|
93
|
+
|
|
50
94
|
.featureGridWrapper {
|
|
51
|
-
|
|
52
|
-
margin-left: 26px;
|
|
53
|
-
margin-right: 26px;
|
|
95
|
+
margin: 0 26px;
|
|
54
96
|
width: calc(100% - 52px);
|
|
55
97
|
}
|
|
56
98
|
|
|
@@ -61,7 +103,6 @@
|
|
|
61
103
|
|
|
62
104
|
.featureGridContainer {
|
|
63
105
|
gap: 16px;
|
|
64
|
-
justify-content: center;
|
|
65
106
|
grid-template-columns: 1fr;
|
|
66
107
|
}
|
|
67
108
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as featureGrid } from "./FeatureGrid";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type FrameCTAProps = {
|
|
3
|
+
title: string;
|
|
4
|
+
primaryButton: {
|
|
5
|
+
label: string;
|
|
6
|
+
href: string;
|
|
7
|
+
};
|
|
8
|
+
secondaryButton: {
|
|
9
|
+
label: string;
|
|
10
|
+
href: string;
|
|
11
|
+
};
|
|
12
|
+
backgroundImage: {
|
|
13
|
+
src: string;
|
|
14
|
+
alt: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
declare const FrameCTA: React.FC<FrameCTAProps>;
|
|
18
|
+
export default FrameCTA;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Link from "next/link";
|
|
3
|
+
import styles from "./frameCTA.module.css";
|
|
4
|
+
import Image from "next/image";
|
|
5
|
+
var FrameCTA = function (_a) {
|
|
6
|
+
var title = _a.title, primaryButton = _a.primaryButton, secondaryButton = _a.secondaryButton, backgroundImage = _a.backgroundImage;
|
|
7
|
+
return (React.createElement("section", { className: styles.frameCTAContainer, "aria-labelledby": "cta-title" },
|
|
8
|
+
React.createElement("div", { className: styles.frameCTABackgroundImage, "aria-hidden": "true" },
|
|
9
|
+
React.createElement(Image, { src: backgroundImage.src, alt: backgroundImage.alt, layout: "fill", objectFit: "cover", objectPosition: "center", className: styles.frameCTABackground })),
|
|
10
|
+
React.createElement("div", { className: styles.frameCTAContent },
|
|
11
|
+
React.createElement("h2", { className: styles.frameCTATitle }, title),
|
|
12
|
+
React.createElement("div", { className: styles.frameCTAButtonContainer },
|
|
13
|
+
React.createElement(Link, { href: primaryButton.href, className: styles.frameCTAPrimaryButton },
|
|
14
|
+
React.createElement("span", { className: styles.frameCTAButtonLabel }, primaryButton.label)),
|
|
15
|
+
React.createElement(Link, { href: secondaryButton.href, className: styles.frameCTASecondaryButton },
|
|
16
|
+
React.createElement("span", { className: styles.frameCTAButtonLabel }, secondaryButton.label))))));
|
|
17
|
+
};
|
|
18
|
+
export default FrameCTA;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import React from "react";
|
|
13
|
+
import { Meta, StoryFn } from "@storybook/react";
|
|
14
|
+
import FrameCTA, { FrameCTAProps } from "./FrameCTA";
|
|
15
|
+
export default {
|
|
16
|
+
title: "Components/Molecules/FrameCTA",
|
|
17
|
+
component: FrameCTA,
|
|
18
|
+
};
|
|
19
|
+
var Template = function (args) { return React.createElement(FrameCTA, __assign({}, args)); };
|
|
20
|
+
export var Default = Template.bind({});
|
|
21
|
+
Default.args = {
|
|
22
|
+
title: "Poppins - SemiBold - 46px souvent sur 2 lignes",
|
|
23
|
+
primaryButton: {
|
|
24
|
+
label: "Bouton",
|
|
25
|
+
href: "/primary",
|
|
26
|
+
},
|
|
27
|
+
secondaryButton: {
|
|
28
|
+
label: "Bouton",
|
|
29
|
+
href: "/secondary",
|
|
30
|
+
},
|
|
31
|
+
backgroundImage: {
|
|
32
|
+
src: "https://images.unsplash.com/photo-1731862872903-1d39fe0c10f8?q=80&w=2108&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
|
|
33
|
+
alt: "Image de fond arrière plan",
|
|
34
|
+
},
|
|
35
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
.frameCTAContainer {
|
|
2
|
+
width: 100%;
|
|
3
|
+
height: 675px;
|
|
4
|
+
position: relative;
|
|
5
|
+
border-radius: 16px;
|
|
6
|
+
display: flex;
|
|
7
|
+
justify-content: center;
|
|
8
|
+
align-items: center;
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.frameCTABackground {
|
|
13
|
+
position: absolute;
|
|
14
|
+
top: 0;
|
|
15
|
+
left: 0;
|
|
16
|
+
width: 100%;
|
|
17
|
+
height: 100%;
|
|
18
|
+
z-index: 1;
|
|
19
|
+
background-size: cover;
|
|
20
|
+
background-position: center;
|
|
21
|
+
background-repeat: no-repeat;
|
|
22
|
+
border-radius: 16px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.frameCTAContent {
|
|
26
|
+
position: relative;
|
|
27
|
+
z-index: 2;
|
|
28
|
+
display: flex;
|
|
29
|
+
width: 600px;
|
|
30
|
+
max-width: 600px;
|
|
31
|
+
justify-content: center;
|
|
32
|
+
align-items: center;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
gap: 70px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.frameCTATitle {
|
|
38
|
+
color: var(--Primary-Mid-black, #171e25);
|
|
39
|
+
text-align: center;
|
|
40
|
+
font-family: Poppins;
|
|
41
|
+
font-size: 46px;
|
|
42
|
+
font-style: normal;
|
|
43
|
+
font-weight: 600;
|
|
44
|
+
line-height: normal;
|
|
45
|
+
display: -webkit-box;
|
|
46
|
+
line-clamp: 2;
|
|
47
|
+
-webkit-line-clamp: 2;
|
|
48
|
+
-webkit-box-orient: vertical;
|
|
49
|
+
overflow: hidden;
|
|
50
|
+
text-overflow: ellipsis;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.frameCTAButtonContainer {
|
|
54
|
+
display: flex;
|
|
55
|
+
align-items: flex-start;
|
|
56
|
+
gap: 48px;
|
|
57
|
+
align-self: stretch;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.frameCTAPrimaryButton {
|
|
61
|
+
display: flex;
|
|
62
|
+
height: 48px;
|
|
63
|
+
padding: 12px 40px;
|
|
64
|
+
justify-content: center;
|
|
65
|
+
align-items: center;
|
|
66
|
+
gap: 8px;
|
|
67
|
+
flex: 1 0 0;
|
|
68
|
+
border-radius: 56px;
|
|
69
|
+
background: #2d6176;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.frameCTASecondaryButton {
|
|
73
|
+
display: flex;
|
|
74
|
+
height: 48px;
|
|
75
|
+
padding: 12px 40px;
|
|
76
|
+
justify-content: center;
|
|
77
|
+
align-items: center;
|
|
78
|
+
gap: 8px;
|
|
79
|
+
flex: 1 0 0;
|
|
80
|
+
border-radius: 56px;
|
|
81
|
+
background: var(--Primary-Bleu-Allaw, #25beeb);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.frameCTAButtonLabel {
|
|
85
|
+
color: var(--Primary-Blanc, #fff);
|
|
86
|
+
font-family: "Open Sans";
|
|
87
|
+
font-size: 16px;
|
|
88
|
+
font-style: normal;
|
|
89
|
+
font-weight: 600;
|
|
90
|
+
max-width: 150px;
|
|
91
|
+
line-height: normal;
|
|
92
|
+
display: block;
|
|
93
|
+
white-space: nowrap;
|
|
94
|
+
overflow: hidden;
|
|
95
|
+
text-overflow: ellipsis;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.primaryButton:hover,
|
|
99
|
+
.secondaryButton:hover {
|
|
100
|
+
filter: brightness(95%);
|
|
101
|
+
transform: scale(1.005);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@media (max-width: 995px) {
|
|
105
|
+
.frameCTAContainer {
|
|
106
|
+
height: 420px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.frameCTAContent {
|
|
110
|
+
width: 100%;
|
|
111
|
+
padding: 20px;
|
|
112
|
+
flex-direction: column;
|
|
113
|
+
gap: 24px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.frameCTATitle {
|
|
117
|
+
font-size: 24px;
|
|
118
|
+
margin-bottom: 10px;
|
|
119
|
+
text-align: center;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.frameCTAButtonContainer {
|
|
123
|
+
flex-direction: column;
|
|
124
|
+
gap: 24px;
|
|
125
|
+
align-items: center;
|
|
126
|
+
width: 100%;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.frameCTAPrimaryButton,
|
|
130
|
+
.frameCTASecondaryButton {
|
|
131
|
+
width: 100%;
|
|
132
|
+
align-self: center;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as FrameCTA } from "./FrameCTA";
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import styles from "./heroSection.module.css";
|
|
3
3
|
import Image from "next/image";
|
|
4
|
+
import Link from "next/link";
|
|
4
5
|
var HeroSection = function (_a) {
|
|
5
6
|
var _b = _a.reverse, reverse = _b === void 0 ? false : _b, title = _a.title, content = _a.content, imageBackground = _a.imageBackground, imageTop = _a.imageTop, action = _a.action;
|
|
6
|
-
return (React.createElement("
|
|
7
|
-
React.createElement("div", { className: styles.leftSection
|
|
7
|
+
return (React.createElement("section", { className: "".concat(styles.heroSection, " ").concat(reverse ? styles.reverse : "") },
|
|
8
|
+
React.createElement("div", { className: styles.leftSection, style: {
|
|
9
|
+
backgroundImage: "url(".concat(imageBackground.src || "", ")"),
|
|
10
|
+
} },
|
|
8
11
|
React.createElement("div", { className: styles.heroSectionContent },
|
|
9
12
|
React.createElement("h2", { className: styles.heroSectionTitle }, title),
|
|
10
13
|
React.createElement("p", { className: styles.heroSectionParagraph }, content),
|
|
11
|
-
React.createElement(
|
|
14
|
+
React.createElement(Link, { href: action.href, className: styles.action },
|
|
12
15
|
React.createElement("span", { className: styles.actionLabel }, action.label)))),
|
|
13
|
-
React.createElement("
|
|
16
|
+
React.createElement("aside", { className: styles.rightSection },
|
|
14
17
|
React.createElement("div", { className: styles.heroSectionBgImage },
|
|
15
|
-
React.createElement(Image, { src: imageBackground.src, alt: imageBackground.alt, className: styles.heroSectionImage,
|
|
18
|
+
React.createElement(Image, { src: imageBackground.src || "", alt: imageBackground.alt || "", className: styles.heroSectionImage, layout: "fill", objectFit: "cover", objectPosition: "center" })),
|
|
16
19
|
React.createElement("div", { className: styles.heroSectionTopImage },
|
|
17
|
-
React.createElement(Image, {
|
|
20
|
+
React.createElement(Image, { src: imageTop.src || "", alt: imageTop.alt || "", className: styles.heroSectionImage, width: 615, height: 322 })))));
|
|
18
21
|
};
|
|
19
22
|
export default HeroSection;
|
|
@@ -46,28 +46,18 @@ var Template = function (args) { return React.createElement(HeroSection, __assig
|
|
|
46
46
|
export var Default = Template.bind({});
|
|
47
47
|
Default.args = {
|
|
48
48
|
reverse: false,
|
|
49
|
-
title: "
|
|
50
|
-
content: "
|
|
49
|
+
title: "Transformez votre carrière en un clic",
|
|
50
|
+
content: "Accédez à des opportunités adaptées à vos aspirations, connectez-vous avec des clients du monde entier et simplifiez vos projets grâce à nos outils performants.",
|
|
51
51
|
imageBackground: {
|
|
52
|
-
src: "https://images.unsplash.com/photo-
|
|
53
|
-
alt: "
|
|
52
|
+
src: "https://images.unsplash.com/photo-1736695796493-699707480bcf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxmZWF0dXJlZC1waG90b3MtZmVlZHwxNDB8fHxlbnwwfHx8fHw%3D",
|
|
53
|
+
alt: "Personne travaillant sur un ordinateur portable",
|
|
54
54
|
},
|
|
55
55
|
imageTop: {
|
|
56
|
-
src: "https://images.
|
|
57
|
-
alt: "
|
|
56
|
+
src: "https://images.unsplash.com/photo-1737334969823-8d6a43b4cba1?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
|
|
57
|
+
alt: "Graphiques montrant une croissance",
|
|
58
58
|
},
|
|
59
59
|
action: {
|
|
60
|
-
href: "/
|
|
61
|
-
label: "
|
|
60
|
+
href: "/join-now",
|
|
61
|
+
label: "Rejoignez-nous",
|
|
62
62
|
},
|
|
63
63
|
};
|
|
64
|
-
export var Reversed = Template.bind({});
|
|
65
|
-
Reversed.args = __assign(__assign({}, Default.args), { reverse: true, title: "Ma vie de freelance, mais en mieux", content: "Recevez des offres de missions en adéquation avec vos compétences, communiquez directement avec 70 000 clients potentiels issus de tous les secteurs et réduisez vos tâches administratives à l'aide de nos outils en ligne." });
|
|
66
|
-
export var CustomImages = Template.bind({});
|
|
67
|
-
CustomImages.args = __assign(__assign({}, Default.args), { title: "Ma vie de freelance, mais en mieux", imageBackground: {
|
|
68
|
-
src: "https://via.placeholder.com/800x600",
|
|
69
|
-
alt: "Image personnalisée de fond",
|
|
70
|
-
}, imageTop: {
|
|
71
|
-
src: "https://via.placeholder.com/200x150",
|
|
72
|
-
alt: "Image personnalisée au-dessus du contenu",
|
|
73
|
-
} });
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
width: 100%;
|
|
5
5
|
height: 675px;
|
|
6
6
|
overflow: hidden;
|
|
7
|
-
border: 1px solid black;
|
|
8
7
|
}
|
|
9
8
|
|
|
10
9
|
.leftSection {
|
|
11
|
-
flex:
|
|
10
|
+
flex: 5;
|
|
12
11
|
background: #fff;
|
|
13
12
|
height: 100%;
|
|
14
13
|
display: flex;
|
|
@@ -17,6 +16,9 @@
|
|
|
17
16
|
justify-content: center;
|
|
18
17
|
width: 1400px;
|
|
19
18
|
padding-right: 40px;
|
|
19
|
+
background-color: none;
|
|
20
|
+
background-size: cover;
|
|
21
|
+
background-position: center;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
.heroSection.reverse {
|
|
@@ -35,7 +37,7 @@
|
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
.rightSection {
|
|
38
|
-
flex:
|
|
40
|
+
flex: 5;
|
|
39
41
|
height: 100%;
|
|
40
42
|
position: relative;
|
|
41
43
|
background-size: cover;
|
|
@@ -65,7 +67,7 @@
|
|
|
65
67
|
display: flex;
|
|
66
68
|
flex-direction: column;
|
|
67
69
|
align-items: flex-start;
|
|
68
|
-
gap:
|
|
70
|
+
gap: 22px;
|
|
69
71
|
height: 350px;
|
|
70
72
|
width: 80%;
|
|
71
73
|
}
|
|
@@ -73,7 +75,7 @@
|
|
|
73
75
|
.heroSectionTitle {
|
|
74
76
|
color: var(--Primary-Mid-black, #171e25);
|
|
75
77
|
font-family: Poppins;
|
|
76
|
-
font-size:
|
|
78
|
+
font-size: 30px;
|
|
77
79
|
font-style: normal;
|
|
78
80
|
font-weight: 600;
|
|
79
81
|
line-height: normal;
|
|
@@ -82,6 +84,7 @@
|
|
|
82
84
|
line-clamp: 2;
|
|
83
85
|
-webkit-line-clamp: 2;
|
|
84
86
|
max-width: 100%;
|
|
87
|
+
overflow: hidden;
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
.heroSectionImage {
|
|
@@ -102,7 +105,7 @@
|
|
|
102
105
|
white-space: normal;
|
|
103
106
|
text-overflow: ellipsis;
|
|
104
107
|
font-family: "Open Sans";
|
|
105
|
-
font-size:
|
|
108
|
+
font-size: 16px;
|
|
106
109
|
font-style: normal;
|
|
107
110
|
font-weight: 600;
|
|
108
111
|
line-height: normal;
|
|
@@ -118,6 +121,8 @@
|
|
|
118
121
|
background: #2d6176;
|
|
119
122
|
max-width: 300px;
|
|
120
123
|
text-decoration: none;
|
|
124
|
+
width: 100%;
|
|
125
|
+
overflow: hidden;
|
|
121
126
|
}
|
|
122
127
|
|
|
123
128
|
.action:hover {
|
|
@@ -132,4 +137,51 @@
|
|
|
132
137
|
font-style: normal;
|
|
133
138
|
font-weight: 600;
|
|
134
139
|
line-height: normal;
|
|
140
|
+
display: block;
|
|
141
|
+
white-space: nowrap;
|
|
142
|
+
overflow: hidden;
|
|
143
|
+
text-overflow: ellipsis;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@media (max-width: 995px) {
|
|
147
|
+
.heroSection {
|
|
148
|
+
max-height: 420px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.leftSection {
|
|
152
|
+
background-size: cover;
|
|
153
|
+
background-position: center;
|
|
154
|
+
background-repeat: no-repeat;
|
|
155
|
+
align-items: center;
|
|
156
|
+
padding: 0;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.rightSection {
|
|
160
|
+
display: none;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.heroSectionContent {
|
|
164
|
+
padding: 20px;
|
|
165
|
+
border-radius: 8px;
|
|
166
|
+
width: 95%;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.heroSectionTitle {
|
|
170
|
+
font-size: 26px;
|
|
171
|
+
margin-bottom: 20px;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.heroSectionParagraph {
|
|
175
|
+
margin-bottom: 10px;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
@media (min-width: 996px) {
|
|
180
|
+
.leftSection {
|
|
181
|
+
background: none !important;
|
|
182
|
+
background-color: #fff;
|
|
183
|
+
background-size: auto;
|
|
184
|
+
background-position: initial;
|
|
185
|
+
background-repeat: initial;
|
|
186
|
+
}
|
|
135
187
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as HeroSection } from "./HeroSection";
|
package/dist/index.d.ts
CHANGED
|
@@ -64,8 +64,6 @@ export { default as Breadcrumb } from "./components/molecules/breadcrumb/Breadcr
|
|
|
64
64
|
export { default as ProCard } from "./components/molecules/proCard/ProCard";
|
|
65
65
|
export { default as Pagination } from "./components/molecules/pagination/Pagination";
|
|
66
66
|
export type { PaginationProps } from "./components/molecules/pagination/Pagination";
|
|
67
|
-
export { default as Banner } from "./components/molecules/banner/Banner";
|
|
68
|
-
export type { BannerProps } from "./components/molecules/banner/Banner";
|
|
69
67
|
export { default as BlogHeader } from "./components/molecules/blogHeader/BlogHeader";
|
|
70
68
|
export type { BlogHeaderProps } from "./components/molecules/blogHeader/BlogHeader";
|
|
71
69
|
export { default as BlogCard } from "./components/molecules/blogCard/BlogCard";
|
|
@@ -76,3 +74,11 @@ export { default as blogTextImageBlock } from "./components/molecules/blogTextIm
|
|
|
76
74
|
export type { BlogTextImageBlockProps } from "./components/molecules/blogTextImageBlock/BlogTextImageBlock";
|
|
77
75
|
export { default as blogFooter } from "./components/molecules/blogFooter/BlogFooter";
|
|
78
76
|
export type { BlogFooterProps } from "./components/molecules/blogFooter/BlogFooter";
|
|
77
|
+
export { default as Banner } from "./components/molecules/banner/Banner";
|
|
78
|
+
export type { BannerProps } from "./components/molecules/banner/Banner";
|
|
79
|
+
export { default as FeatureGrid } from "./components/molecules/featureGrid/FeatureGrid";
|
|
80
|
+
export type { FeatureGridProps } from "./components/molecules/featureGrid/FeatureGrid";
|
|
81
|
+
export { default as HeroSection } from "./components/molecules/heroSection/HeroSection";
|
|
82
|
+
export type { HeroSectionProps } from "./components/molecules/heroSection/HeroSection";
|
|
83
|
+
export { default as FrameCTA } from "./components/molecules/frameCTA/FrameCTA";
|
|
84
|
+
export type { FrameCTAProps } from "./components/molecules/frameCTA/FrameCTA";
|
package/dist/index.js
CHANGED
|
@@ -80,10 +80,13 @@ export { default as Breadcrumb } from "./components/molecules/breadcrumb/Breadcr
|
|
|
80
80
|
export { default as ProCard } from "./components/molecules/proCard/ProCard";
|
|
81
81
|
// Pagination
|
|
82
82
|
export { default as Pagination } from "./components/molecules/pagination/Pagination";
|
|
83
|
-
export { default as Banner } from "./components/molecules/banner/Banner";
|
|
84
83
|
// Blog
|
|
85
84
|
export { default as BlogHeader } from "./components/molecules/blogHeader/BlogHeader";
|
|
86
85
|
export { default as BlogCard } from "./components/molecules/blogCard/BlogCard";
|
|
87
86
|
export { default as BlogText } from "./components/molecules/blogText/BlogText";
|
|
88
87
|
export { default as blogTextImageBlock } from "./components/molecules/blogTextImageBlock/BlogTextImageBlock";
|
|
89
88
|
export { default as blogFooter } from "./components/molecules/blogFooter/BlogFooter";
|
|
89
|
+
export { default as Banner } from "./components/molecules/banner/Banner";
|
|
90
|
+
export { default as FeatureGrid } from "./components/molecules/featureGrid/FeatureGrid";
|
|
91
|
+
export { default as HeroSection } from "./components/molecules/heroSection/HeroSection";
|
|
92
|
+
export { default as FrameCTA } from "./components/molecules/frameCTA/FrameCTA";
|