allaw-ui 2.2.5 → 2.2.7
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.js +2 -7
- package/dist/components/atoms/buttons/TertiaryButton.d.ts +1 -0
- package/dist/components/atoms/buttons/TertiaryButton.js +6 -2
- package/dist/components/atoms/featureCard/featureCard.js +1 -4
- package/dist/components/molecules/banner/Banner.js +11 -2
- package/dist/components/molecules/banner/Banner.module.css +13 -6
- package/dist/components/molecules/brands/Brands.d.ts +9 -0
- package/dist/components/molecules/brands/Brands.js +13 -0
- package/dist/components/molecules/brands/Brands.stories.d.ts +8 -0
- package/dist/components/molecules/brands/Brands.stories.js +66 -0
- package/dist/components/molecules/brands/brands.module.css +74 -0
- package/dist/components/molecules/brands/index.d.ts +2 -0
- package/dist/components/molecules/brands/index.js +1 -0
- package/dist/components/molecules/featureGrid/FeatureGrid.js +2 -2
- package/dist/components/molecules/featureGrid/featureGrid.module.css +2 -2
- package/dist/components/molecules/flexContent/FlexContent.d.ts +18 -0
- package/dist/components/molecules/flexContent/FlexContent.js +21 -0
- package/dist/components/molecules/flexContent/FlexContent.stories.d.ts +9 -0
- package/dist/components/molecules/flexContent/FlexContent.stories.js +47 -0
- package/dist/components/molecules/flexContent/flexContent.module.css +217 -0
- package/dist/components/molecules/flexContent/index.d.ts +2 -0
- package/dist/components/molecules/flexContent/index.js +1 -0
- package/dist/components/molecules/frameCTA/FrameCTA.d.ts +1 -0
- package/dist/components/molecules/frameCTA/FrameCTA.js +3 -3
- package/dist/components/molecules/frameCTA/FrameCTA.stories.d.ts +1 -0
- package/dist/components/molecules/frameCTA/FrameCTA.stories.js +23 -0
- package/dist/components/molecules/frameCTA/frameCTA.module.css +27 -8
- package/dist/components/molecules/heroSection/HeroSection.d.ts +1 -0
- package/dist/components/molecules/heroSection/HeroSection.js +13 -15
- package/dist/components/molecules/heroSection/HeroSection.stories.d.ts +2 -0
- package/dist/components/molecules/heroSection/HeroSection.stories.js +38 -1
- package/dist/components/molecules/heroSection/heroSection.module.css +120 -90
- package/dist/components/molecules/questionAnswer/QuestionAnswer.d.ts +9 -0
- package/dist/components/molecules/questionAnswer/QuestionAnswer.js +38 -0
- package/dist/components/molecules/questionAnswer/QuestionAnswer.stories.d.ts +17 -0
- package/dist/components/molecules/questionAnswer/QuestionAnswer.stories.js +48 -0
- package/dist/components/molecules/questionAnswer/index.d.ts +2 -0
- package/dist/components/molecules/questionAnswer/index.js +1 -0
- package/dist/components/molecules/questionAnswer/questionAnswer.module.css +126 -0
- package/dist/index.d.ts +18 -10
- package/dist/index.js +10 -5
- package/package.json +1 -1
|
@@ -2,18 +2,13 @@ import React from "react";
|
|
|
2
2
|
import "./IconButton.css";
|
|
3
3
|
import "../../../styles/global.css";
|
|
4
4
|
var IconButton = function (_a) {
|
|
5
|
-
var
|
|
5
|
+
var _b = _a.style, style = _b === void 0 ? "smallFilled" : _b, _c = _a.iconName, iconName = _c === void 0 ? "allaw-icon-calendar" : _c, color = _a.color, _d = _a.onClick, onClick = _d === void 0 ? function () { } : _d;
|
|
6
6
|
var customStyle = color
|
|
7
7
|
? {
|
|
8
8
|
"--custom-background-color": color,
|
|
9
9
|
}
|
|
10
10
|
: {};
|
|
11
|
-
return (React.createElement("button", { className: "icon-button ".concat(style), onClick: onClick, style: customStyle },
|
|
11
|
+
return (React.createElement("button", { className: "icon-button ".concat(style), onClick: onClick, style: customStyle, "aria-label": iconName.replace("allaw-icon-", "").replace("-", " ") },
|
|
12
12
|
React.createElement("i", { className: "icon ".concat(iconName), style: { color: color ? color : "inherit" } })));
|
|
13
13
|
};
|
|
14
|
-
IconButton.defaultProps = {
|
|
15
|
-
style: "smallFilled",
|
|
16
|
-
iconName: "allaw-icon-calendar",
|
|
17
|
-
onClick: function () { },
|
|
18
|
-
};
|
|
19
14
|
export default IconButton;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import Link from "next/link";
|
|
2
3
|
import "./TertiaryButton.css";
|
|
3
4
|
import "../../../styles/global.css";
|
|
4
5
|
var TertiaryButton = function (_a) {
|
|
5
|
-
var startIcon = _a.startIcon, label = _a.label, _b = _a.variant, variant = _b === void 0 ? false : _b, onClick = _a.onClick;
|
|
6
|
-
|
|
6
|
+
var startIcon = _a.startIcon, label = _a.label, _b = _a.variant, variant = _b === void 0 ? false : _b, href = _a.href, onClick = _a.onClick;
|
|
7
|
+
var buttonClass = "tertiary-button ".concat(variant ? "tertiary-button-variant" : "tertiary-button-default");
|
|
8
|
+
return href ? (React.createElement(Link, { href: href, className: buttonClass },
|
|
9
|
+
startIcon && React.createElement("span", { className: "tertiary-button-icon ".concat(startIcon) }),
|
|
10
|
+
React.createElement("span", { className: "tertiary-button-label" }, label))) : (React.createElement("button", { type: "button", className: buttonClass, onClick: onClick },
|
|
7
11
|
startIcon && React.createElement("span", { className: "tertiary-button-icon ".concat(startIcon) }),
|
|
8
12
|
React.createElement("span", { className: "tertiary-button-label" }, label)));
|
|
9
13
|
};
|
|
@@ -2,7 +2,6 @@ import React from "react";
|
|
|
2
2
|
import styles from "./featureCard.module.css";
|
|
3
3
|
import { TertiaryButton } from "../buttons";
|
|
4
4
|
import Image from "next/image";
|
|
5
|
-
import Link from "next/link";
|
|
6
5
|
var FeatureCard = function (_a) {
|
|
7
6
|
var title = _a.title, image = _a.image, content = _a.content, action = _a.action;
|
|
8
7
|
return (React.createElement("article", { className: styles.featureCardContainer },
|
|
@@ -12,8 +11,6 @@ var FeatureCard = function (_a) {
|
|
|
12
11
|
React.createElement("h3", null, title)),
|
|
13
12
|
React.createElement("div", { className: styles.featureCardDescription },
|
|
14
13
|
React.createElement("p", null, content))),
|
|
15
|
-
action &&
|
|
16
|
-
React.createElement(Link, { href: action.href, passHref: true },
|
|
17
|
-
React.createElement(TertiaryButton, { label: action.label }))))));
|
|
14
|
+
action && React.createElement(TertiaryButton, { href: action.href, label: action.label })));
|
|
18
15
|
};
|
|
19
16
|
export default FeatureCard;
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import React, { useState, useEffect } from "react";
|
|
2
3
|
import Image from "next/image";
|
|
3
4
|
import styles from "./Banner.module.css";
|
|
4
5
|
import Link from "next/link";
|
|
5
6
|
var Banner = function (_a) {
|
|
6
7
|
var tag = _a.tag, title = _a.title, content = _a.content, image = _a.image, action = _a.action, highlightColor = _a.highlightColor, backgroundColor = _a.backgroundColor;
|
|
7
|
-
var
|
|
8
|
+
var _b = useState(false), isMobile = _b[0], setIsMobile = _b[1];
|
|
9
|
+
useEffect(function () {
|
|
10
|
+
var updateIsMobile = function () {
|
|
11
|
+
setIsMobile(window.innerWidth <= 995);
|
|
12
|
+
};
|
|
13
|
+
updateIsMobile(); // Vérifie à l'initialisation
|
|
14
|
+
window.addEventListener("resize", updateIsMobile); // Met à jour au resize
|
|
15
|
+
return function () { return window.removeEventListener("resize", updateIsMobile); };
|
|
16
|
+
}, []);
|
|
8
17
|
return (React.createElement("section", { className: styles.bannerContainer, style: { backgroundColor: backgroundColor } },
|
|
9
18
|
image && (React.createElement("figure", { className: "".concat(styles.imageContainer, " ").concat(isMobile ? styles[image.verticalSide] : styles[image.horizontalSide]) },
|
|
10
19
|
React.createElement(Image, { src: image.src || "", alt: image.alt || "", fill: true, sizes: "(max-width: 995px) 100vw, 400px", className: styles.bannerImageContent }))),
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
border-radius: 32px;
|
|
9
9
|
width: 100%;
|
|
10
10
|
height: auto;
|
|
11
|
+
min-height: 400px;
|
|
11
12
|
max-width: 100%;
|
|
12
13
|
background: #edf3f4;
|
|
13
14
|
}
|
|
@@ -16,6 +17,7 @@
|
|
|
16
17
|
display: flex;
|
|
17
18
|
flex-direction: column;
|
|
18
19
|
align-items: flex-start;
|
|
20
|
+
justify-content: space-between;
|
|
19
21
|
gap: 24px;
|
|
20
22
|
width: 100%;
|
|
21
23
|
height: auto;
|
|
@@ -29,14 +31,19 @@
|
|
|
29
31
|
position: relative;
|
|
30
32
|
width: 100%;
|
|
31
33
|
height: auto;
|
|
34
|
+
max-height: 100%;
|
|
32
35
|
display: flex;
|
|
33
36
|
align-items: stretch;
|
|
34
37
|
max-width: 400px;
|
|
38
|
+
object-position: center;
|
|
39
|
+
overflow: hidden;
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
.bannerImageContent {
|
|
38
43
|
object-fit: cover;
|
|
39
|
-
object-position: center;
|
|
44
|
+
object-position: center center;
|
|
45
|
+
width: 100%;
|
|
46
|
+
height: 100%;
|
|
40
47
|
border-radius: 24px;
|
|
41
48
|
}
|
|
42
49
|
|
|
@@ -69,7 +76,7 @@
|
|
|
69
76
|
white-space: normal;
|
|
70
77
|
color: var(--Primary-Mid-black, #171e25);
|
|
71
78
|
font-family: Poppins, sans-serif;
|
|
72
|
-
font-size:
|
|
79
|
+
font-size: 28px;
|
|
73
80
|
font-weight: 600;
|
|
74
81
|
max-width: 100%;
|
|
75
82
|
line-height: 1.4;
|
|
@@ -106,8 +113,7 @@
|
|
|
106
113
|
}
|
|
107
114
|
|
|
108
115
|
.action:hover {
|
|
109
|
-
filter: brightness(
|
|
110
|
-
transform: scale(1.005);
|
|
116
|
+
filter: brightness(90%);
|
|
111
117
|
}
|
|
112
118
|
|
|
113
119
|
.actionLabel {
|
|
@@ -137,7 +143,7 @@
|
|
|
137
143
|
width: auto;
|
|
138
144
|
gap: 40px;
|
|
139
145
|
padding: 40px;
|
|
140
|
-
height:
|
|
146
|
+
height: auto;
|
|
141
147
|
}
|
|
142
148
|
|
|
143
149
|
.bannerDescription {
|
|
@@ -146,6 +152,7 @@
|
|
|
146
152
|
-webkit-line-clamp: 6;
|
|
147
153
|
line-clamp: 6;
|
|
148
154
|
font-size: 14px;
|
|
155
|
+
font-weight: 500;
|
|
149
156
|
}
|
|
150
157
|
|
|
151
158
|
.bannerContent {
|
|
@@ -170,7 +177,7 @@
|
|
|
170
177
|
}
|
|
171
178
|
|
|
172
179
|
.bannerTitle {
|
|
173
|
-
font-size:
|
|
180
|
+
font-size: 24px;
|
|
174
181
|
}
|
|
175
182
|
|
|
176
183
|
.imageContainer.top {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import styles from "./brands.module.css";
|
|
3
|
+
import Image from "next/image";
|
|
4
|
+
var Brands = function (_a) {
|
|
5
|
+
var images = _a.images;
|
|
6
|
+
var limitedImages = images.slice(0, 7);
|
|
7
|
+
return (React.createElement("section", { className: styles.brandsContainer, "aria-labelledby": "brands-title" },
|
|
8
|
+
React.createElement("div", { className: styles.brandsContent },
|
|
9
|
+
React.createElement("h2", { className: styles.brandsTitle, id: "brands-title" }, "Ils parlent de nous dans la presse"),
|
|
10
|
+
React.createElement("ul", { className: styles.brandsList }, limitedImages.map(function (image, index) { return (React.createElement("li", { key: index, className: styles.brandItem },
|
|
11
|
+
React.createElement(Image, { src: image.src, alt: image.alt, className: styles.brandImage, width: 100, height: 100 }))); })))));
|
|
12
|
+
};
|
|
13
|
+
export default Brands;
|
|
@@ -0,0 +1,66 @@
|
|
|
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 Brands, { BrandsProps } from "./Brands";
|
|
15
|
+
export default {
|
|
16
|
+
title: "Components/Molecules/Brands",
|
|
17
|
+
component: Brands,
|
|
18
|
+
};
|
|
19
|
+
var Template = function (args) { return React.createElement(Brands, __assign({}, args)); };
|
|
20
|
+
export var Default = Template.bind({});
|
|
21
|
+
Default.args = {
|
|
22
|
+
images: [
|
|
23
|
+
{
|
|
24
|
+
src: "https://images.unsplash.com/photo-1504711434969-e33886168f5c?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8bWVkaWF8ZW58MHx8MHx8fDA%3D",
|
|
25
|
+
alt: "Logo Brand 1",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
src: "https://plus.unsplash.com/premium_photo-1689701711439-e54f039f8d97?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bWVkaWF8ZW58MHx8MHx8fDA%3D",
|
|
29
|
+
alt: "Logo Brand 2",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
src: "https://images.unsplash.com/photo-1424223022789-26fd8f34bba2?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTB8fG1lZGlhfGVufDB8fDB8fHww",
|
|
33
|
+
alt: "Logo Brand 3",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
src: "https://images.unsplash.com/photo-1563986768494-4dee2763ff3f?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjB8fG1lZGlhfGVufDB8fDB8fHww",
|
|
37
|
+
alt: "Logo Brand 4",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
src: "https://images.unsplash.com/photo-1611162617213-7d7a39e9b1d7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTl8fG1lZGlhfGVufDB8fDB8fHww",
|
|
41
|
+
alt: "Logo Brand 5",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
src: "https://images.unsplash.com/photo-1597075095308-0b47fc649175?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Nnx8ZGVzJTIwbSVDMyVBOWRpYXMlMjBzb2NpYXV4fGVufDB8fDB8fHww",
|
|
45
|
+
alt: "Logo Brand 6",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
src: "https://images.unsplash.com/photo-1517292987719-0369a794ec0f?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
|
|
49
|
+
alt: "Logo Brand 7",
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
export var WithExtraImages = Template.bind({});
|
|
54
|
+
WithExtraImages.args = {
|
|
55
|
+
images: [
|
|
56
|
+
{ src: "/images/brand1.png", alt: "Logo Brand 1" },
|
|
57
|
+
{ src: "/images/brand2.png", alt: "Logo Brand 2" },
|
|
58
|
+
{ src: "/images/brand3.png", alt: "Logo Brand 3" },
|
|
59
|
+
{ src: "/images/brand4.png", alt: "Logo Brand 4" },
|
|
60
|
+
{ src: "/images/brand5.png", alt: "Logo Brand 5" },
|
|
61
|
+
{ src: "/images/brand6.png", alt: "Logo Brand 6" },
|
|
62
|
+
{ src: "/images/brand7.png", alt: "Logo Brand 7" },
|
|
63
|
+
{ src: "/images/brand8.png", alt: "Logo Brand 8 (Ignorée)" }, // Ignorée
|
|
64
|
+
{ src: "/images/brand9.png", alt: "Logo Brand 9 (Ignorée)" }, // Ignorée
|
|
65
|
+
],
|
|
66
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
.brandsContainer {
|
|
2
|
+
display: flex;
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: auto;
|
|
5
|
+
padding: 64px 40px;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: 40px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.brandsContent {
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: 48px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.brandsTitle {
|
|
20
|
+
color: var(--Primary-Mid-black, #171e25);
|
|
21
|
+
text-align: center;
|
|
22
|
+
font-family: Poppins;
|
|
23
|
+
font-size: 30px;
|
|
24
|
+
font-style: normal;
|
|
25
|
+
font-weight: 600;
|
|
26
|
+
line-height: normal;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.brandsList {
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: flex-start;
|
|
32
|
+
gap: 30px;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.brandItem {
|
|
37
|
+
width: 130px;
|
|
38
|
+
height: 87px;
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
justify-content: center;
|
|
42
|
+
overflow: hidden;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.brandImage {
|
|
46
|
+
max-width: 100%;
|
|
47
|
+
height: auto;
|
|
48
|
+
width: auto;
|
|
49
|
+
object-fit: contain;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@media (max-width: 1200px) {
|
|
53
|
+
.brandsList {
|
|
54
|
+
flex-wrap: wrap;
|
|
55
|
+
justify-content: center;
|
|
56
|
+
align-items: center;
|
|
57
|
+
align-content: center;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.brandItem {
|
|
61
|
+
min-width: 120px;
|
|
62
|
+
width: 120px;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@media (max-width: 995px) {
|
|
67
|
+
.brandsTitle {
|
|
68
|
+
font-size: 26px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.brandItem {
|
|
72
|
+
min-width: 110px;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Brands } from "./Brands";
|
|
@@ -19,8 +19,8 @@ var FeatureGrid = function (_a) {
|
|
|
19
19
|
React.createElement("div", { className: styles.featureGridItem },
|
|
20
20
|
React.createElement(FeatureCard, { key: currentIndex, title: features[currentIndex].title, image: features[currentIndex].image, content: features[currentIndex].content, action: features[currentIndex].action })),
|
|
21
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 }))),
|
|
22
|
+
React.createElement(IconButton, { style: "iconCircle", iconName: "allaw-icon-arrow-left", onClick: handlePrevious, "aria-label": "Voir l'\u00E9l\u00E9ment pr\u00E9c\u00E9dent" }),
|
|
23
|
+
React.createElement(IconButton, { style: "iconCircle", iconName: "allaw-icon-arrow-right", onClick: handleNext, "aria-label": "Voir l'\u00E9l\u00E9ment suivant" }))),
|
|
24
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
25
|
React.createElement(FeatureCard, { title: feature.title, image: feature.image, content: feature.content, action: feature.action }))); }))));
|
|
26
26
|
};
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
color: var(--Primary-Mid-black, #171e25);
|
|
15
15
|
text-align: center;
|
|
16
16
|
font-family: Poppins;
|
|
17
|
-
font-size:
|
|
17
|
+
font-size: 30px;
|
|
18
18
|
font-style: normal;
|
|
19
19
|
font-weight: 600;
|
|
20
20
|
line-height: normal;
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
|
|
99
99
|
.featureGridTitle {
|
|
100
100
|
margin-bottom: 24px;
|
|
101
|
-
font-size:
|
|
101
|
+
font-size: 26px;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
.featureGridContainer {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type FlexContentProps = {
|
|
3
|
+
reverse?: boolean;
|
|
4
|
+
title?: string;
|
|
5
|
+
sectionTitle: string;
|
|
6
|
+
content: string;
|
|
7
|
+
action?: {
|
|
8
|
+
href: string;
|
|
9
|
+
label: string;
|
|
10
|
+
};
|
|
11
|
+
imageContent?: {
|
|
12
|
+
src: string;
|
|
13
|
+
alt: string;
|
|
14
|
+
};
|
|
15
|
+
imageWidthPercentage?: number;
|
|
16
|
+
};
|
|
17
|
+
declare const FlexContent: React.FC<FlexContentProps>;
|
|
18
|
+
export default FlexContent;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import styles from "./flexContent.module.css";
|
|
3
|
+
import Image from "next/image";
|
|
4
|
+
import Link from "next/link";
|
|
5
|
+
var FlexContent = function (_a) {
|
|
6
|
+
var _b = _a.reverse, reverse = _b === void 0 ? false : _b, title = _a.title, sectionTitle = _a.sectionTitle, content = _a.content, action = _a.action, imageContent = _a.imageContent, _c = _a.imageWidthPercentage, imageWidthPercentage = _c === void 0 ? 60 : _c;
|
|
7
|
+
var safeImageWidth = Math.max(10, Math.min(imageWidthPercentage, 90));
|
|
8
|
+
var textWidth = 100 - safeImageWidth;
|
|
9
|
+
return (React.createElement("section", { className: styles.flexContentContainer, "aria-labelledby": sectionTitle },
|
|
10
|
+
title && (React.createElement("h2", { className: styles.flexContentTitle, id: "flex-content-title" }, title)),
|
|
11
|
+
React.createElement("article", { className: "".concat(styles.flexContentWrapper, " ").concat(reverse ? styles.reverse : "", " ").concat(!(imageContent === null || imageContent === void 0 ? void 0 : imageContent.src) ? styles.fullWidth : "") },
|
|
12
|
+
React.createElement("div", { className: "".concat(styles.flexContentLeftWrapper, " ").concat(styles.desktopWidth), style: { width: "".concat(textWidth, "%") } },
|
|
13
|
+
React.createElement("div", { className: styles.flexContentLeft },
|
|
14
|
+
React.createElement("h3", { className: styles.flexContentSectionTitle }, sectionTitle),
|
|
15
|
+
React.createElement("p", { className: styles.flexContentDescription }, content),
|
|
16
|
+
action && (React.createElement(Link, { href: action.href, className: styles.flexContentButton },
|
|
17
|
+
React.createElement("span", { className: styles.flexContentButtonLabel }, action.label))))),
|
|
18
|
+
(imageContent === null || imageContent === void 0 ? void 0 : imageContent.src) && (React.createElement("div", { className: styles.flexContentRight, style: { width: "".concat(safeImageWidth, "%") } },
|
|
19
|
+
React.createElement(Image, { src: imageContent.src, alt: imageContent.alt, className: styles.flexContentImage, width: 1240, height: 550 }))))));
|
|
20
|
+
};
|
|
21
|
+
export default FlexContent;
|
|
@@ -0,0 +1,47 @@
|
|
|
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 FlexContent, { FlexContentProps } from "./FlexContent";
|
|
15
|
+
export default {
|
|
16
|
+
title: "Components/Molecules/FlexContent",
|
|
17
|
+
component: FlexContent,
|
|
18
|
+
};
|
|
19
|
+
var Template = function (args) { return React.createElement(FlexContent, __assign({}, args)); };
|
|
20
|
+
export var Default = Template.bind({});
|
|
21
|
+
Default.args = {
|
|
22
|
+
reverse: false,
|
|
23
|
+
title: "Découvrez notre solution",
|
|
24
|
+
sectionTitle: "Une solution adaptée à vos besoins",
|
|
25
|
+
content: "Notre solution est conçue pour vous offrir des résultats concrets et durables. Avec des fonctionnalités adaptées à vos besoins, elle vous permet de gérer vos projets plus efficacement et d'atteindre vos objectifs. Découvrez comment nos outils innovants, combinés à une approche personnalisée, peuvent transformer votre vision en réalité et vous aider à vous démarquer dans votre domaine. Nous vous accompagnons pas à pas pour garantir des résultats à la hauteur de vos attentes.",
|
|
26
|
+
action: {
|
|
27
|
+
href: "/learn-more",
|
|
28
|
+
label: "En savoir plus",
|
|
29
|
+
},
|
|
30
|
+
imageContent: {
|
|
31
|
+
src: "https://images.unsplash.com/photo-1737405555489-78b3755eaa81?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
|
|
32
|
+
alt: "Image illustrant la solution",
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
export var Reverse = Template.bind({});
|
|
36
|
+
Reverse.args = __assign(__assign({}, Default.args), { reverse: true, sectionTitle: "Une nouvelle perspective", content: "Avec notre approche innovante, nous renversons les codes pour vous offrir des opportunités uniques et avant-gardistes." });
|
|
37
|
+
export var NoImage = Template.bind({});
|
|
38
|
+
NoImage.args = {
|
|
39
|
+
reverse: false,
|
|
40
|
+
title: "Découvrez notre solution sans image",
|
|
41
|
+
sectionTitle: "Pas d'image, juste du contenu",
|
|
42
|
+
content: "Parfois, une image n'est pas nécessaire. Ce mode vous permet de mettre l'accent uniquement sur le texte et l'action. Ce mode vous permet de mettre l'accent uniquement sur le texte et l'action Ce mode vous permet de mettre l'accent uniquement sur le texte et l'action Ce mode vous permet de mettre l'accent uniquement sur le texte et l'action Ce mode vous permet de mettre l'accent uniquement sur le texte et l'action Ce mode vous permet de mettre l'accent uniquement sur le texte et l'action Ce mode vous permet de mettre l'accent uniquement sur le texte et l'action Ce mode vous permet de mettre l'accent uniquement sur le texte et l'action ",
|
|
43
|
+
action: {
|
|
44
|
+
href: "/no-image",
|
|
45
|
+
label: "En savoir plus",
|
|
46
|
+
},
|
|
47
|
+
};
|