allaw-ui 2.1.4 → 2.1.5

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 (34) hide show
  1. package/dist/components/atoms/buttons/IconButton.css +19 -0
  2. package/dist/components/atoms/buttons/IconButton.d.ts +1 -1
  3. package/dist/components/atoms/buttons/IconButton.stories.d.ts +1 -0
  4. package/dist/components/atoms/buttons/IconButton.stories.js +13 -1
  5. package/dist/components/atoms/featureCard/featureCard.js +1 -1
  6. package/dist/components/atoms/featureCard/featureCard.module.css +1 -0
  7. package/dist/components/atoms/featureCard/index.d.ts +2 -0
  8. package/dist/components/atoms/featureCard/index.js +1 -0
  9. package/dist/components/molecules/banner/Banner.js +5 -4
  10. package/dist/components/molecules/banner/Banner.module.css +18 -12
  11. package/dist/components/molecules/banner/Banner.stories.d.ts +1 -0
  12. package/dist/components/molecules/banner/Banner.stories.js +18 -0
  13. package/dist/components/molecules/banner/index.d.ts +2 -0
  14. package/dist/components/molecules/banner/index.js +1 -0
  15. package/dist/components/molecules/featureGrid/FeatureGrid.js +20 -4
  16. package/dist/components/molecules/featureGrid/featureGrid.module.css +45 -4
  17. package/dist/components/molecules/featureGrid/index.d.ts +2 -0
  18. package/dist/components/molecules/featureGrid/index.js +1 -0
  19. package/dist/components/molecules/frameCTA/FrameCTA.d.ts +18 -0
  20. package/dist/components/molecules/frameCTA/FrameCTA.js +18 -0
  21. package/dist/components/molecules/frameCTA/FrameCTA.stories.d.ts +7 -0
  22. package/dist/components/molecules/frameCTA/FrameCTA.stories.js +35 -0
  23. package/dist/components/molecules/frameCTA/frameCTA.module.css +134 -0
  24. package/dist/components/molecules/frameCTA/index.d.ts +2 -0
  25. package/dist/components/molecules/frameCTA/index.js +1 -0
  26. package/dist/components/molecules/heroSection/HeroSection.js +9 -6
  27. package/dist/components/molecules/heroSection/HeroSection.stories.d.ts +0 -2
  28. package/dist/components/molecules/heroSection/HeroSection.stories.js +8 -18
  29. package/dist/components/molecules/heroSection/heroSection.module.css +58 -6
  30. package/dist/components/molecules/heroSection/index.d.ts +2 -0
  31. package/dist/components/molecules/heroSection/index.js +1 -0
  32. package/dist/index.d.ts +8 -2
  33. package/dist/index.js +4 -1
  34. 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;
@@ -45,4 +45,5 @@ export const SmallFilled: any;
45
45
  export const LargeFilled: any;
46
46
  export const MediumOutline: any;
47
47
  export const IconOnly: any;
48
+ export const IconCircle: any;
48
49
  import IconButton from "./IconButton";
@@ -25,7 +25,13 @@ export default {
25
25
  style: {
26
26
  control: {
27
27
  type: "select",
28
- options: ["smallFilled", "largeFilled", "mediumOutline", "iconOnly"],
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("div", { className: styles.featureCardContainer },
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 },
@@ -44,6 +44,7 @@
44
44
  -webkit-line-clamp: 2;
45
45
  -webkit-box-orient: vertical;
46
46
  overflow: hidden;
47
+ height: 55px;
47
48
  }
48
49
 
49
50
  .featureCardDescription {
@@ -0,0 +1,2 @@
1
+ export { default as featureCard } from "./featureCard";
2
+ export type { FeatureType } from "./featureCard";
@@ -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("div", { className: styles.bannerContainer, style: { backgroundColor: backgroundColor } },
8
- image && (React.createElement("div", { className: "".concat(styles.imageContainer, " ").concat(isMobile ? styles[image.verticalSide] : styles[image.horizontalSide]) },
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("a", { href: action.href, className: styles.action, style: { background: highlightColor }, "aria-label": action.label },
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: center;
5
+ align-items: stretch;
6
6
  padding: 64px 80px;
7
7
  gap: 64px;
8
8
  border-radius: 32px;
9
- width: 1347px;
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 {
@@ -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: "Poppins";
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: 5;
140
- line-clamp: 5;
141
- font-size: 16px;
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
- width: 341px;
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: 24px;
173
+ font-size: 22px;
168
174
  }
169
175
 
170
176
  .imageContainer.top {
@@ -27,4 +27,5 @@ export const CustomColors: any;
27
27
  export const VerticalSideTop: any;
28
28
  export const VerticalSideBottom: any;
29
29
  export const LongTextWithLongImage: any;
30
+ export const ShortTextWithLongImage: any;
30
31
  import Banner from "./Banner";
@@ -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,2 @@
1
+ export { default as Banner } from "./Banner";
2
+ export type { BannerProps } from "./Banner";
@@ -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
- return (React.createElement("div", { className: styles.featureGridWrapper },
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.featureGridContainer }, features.map(function (feature, index) { return (React.createElement("div", { className: styles.featureGridItem, key: index },
9
- React.createElement(FeatureCard, { key: index, title: feature.title, image: feature.image, content: feature.content, action: feature.action }))); }))));
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
- width: unset;
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,2 @@
1
+ export { default as featureGrid } from "./FeatureGrid";
2
+ export type { FeatureGridProps } from "./FeatureGrid";
@@ -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,7 @@
1
+ declare namespace _default {
2
+ export let title: string;
3
+ export { FrameCTA as component };
4
+ }
5
+ export default _default;
6
+ export const Default: any;
7
+ import FrameCTA from "./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,2 @@
1
+ export { default as FrameCTA } from "./FrameCTA";
2
+ export type { FrameCTAProps } from "./FrameCTA";
@@ -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("div", { className: "".concat(styles.heroSection, " ").concat(reverse ? styles.reverse : "") },
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("a", { href: action.href, className: styles.action },
14
+ React.createElement(Link, { href: action.href, className: styles.action },
12
15
  React.createElement("span", { className: styles.actionLabel }, action.label)))),
13
- React.createElement("div", { className: styles.rightSection },
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, width: 1000, height: 1000 })),
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, { layout: "responsive", width: 615, height: 322, className: styles.heroSectionImage, src: imageTop.src, alt: imageTop.alt })))));
20
+ React.createElement(Image, { src: imageTop.src || "", alt: imageTop.alt || "", className: styles.heroSectionImage, width: 615, height: 322 })))));
18
21
  };
19
22
  export default HeroSection;
@@ -41,6 +41,4 @@ declare namespace _default {
41
41
  }
42
42
  export default _default;
43
43
  export const Default: any;
44
- export const Reversed: any;
45
- export const CustomImages: any;
46
44
  import HeroSection from "./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: "Ma vie de freelance, mais en mieux",
50
- 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.",
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-1711873314952-7a2f19edb96a?q=80&w=1740&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
53
- alt: "Image de fond",
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.prismic.io/malt-cms-marketing/dd99e584-03d7-4988-b503-e77341fd8bad_2022_REBRAND_WEBSITE_HOME_CONTENT-1+%281%29.png?auto=enhanced,format&w=636&h=348",
57
- alt: "Image au-dessus du contenu",
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: "/learn-more",
61
- label: "Créer mon profil",
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: 6;
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: 4;
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: 24px;
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: 36px;
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: 20px;
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,2 @@
1
+ export { default as HeroSection } from "./HeroSection";
2
+ export type { HeroSectionProps } from "./HeroSection";
@@ -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";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allaw-ui",
3
- "version": "2.1.4",
3
+ "version": "2.1.5",
4
4
  "description": "Composants UI pour l'application Allaw",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",