@notionhive/footers 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/footers.js +16 -0
- package/category.config.json +7 -0
- package/package.json +24 -0
- package/registry/footer-01.json +6 -0
- package/registry/footer-02.json +9 -0
- package/registry/footer-03.json +9 -0
- package/registry/footer-04.json +9 -0
- package/registry/footer-05.json +9 -0
- package/registry/footer-06.json +7 -0
- package/registry/footer-07.json +9 -0
- package/registry/footer-08.json +9 -0
- package/registry/footer-09.json +9 -0
- package/registry/footer-10.json +9 -0
- package/registry/footer-11.json +7 -0
- package/registry/footer-12.json +9 -0
- package/registry/footer-13.json +9 -0
- package/registry/footer-14.json +9 -0
- package/registry/footer-15.json +9 -0
- package/registry/footer-16.json +9 -0
- package/registry/footer-17.json +9 -0
- package/registry/footer-18.json +9 -0
- package/registry/footer-19.json +9 -0
- package/registry/footer-20.json +9 -0
- package/registry/footer-21.json +9 -0
- package/registry/footer-22.json +9 -0
- package/registry/footer-23.json +9 -0
- package/registry/footer-24.json +9 -0
- package/registry/footer-25.json +9 -0
- package/registry/footer-26.json +9 -0
- package/registry/footer-27.json +9 -0
- package/registry/footer-28.json +9 -0
- package/registry/footer-29.json +6 -0
- package/registry/footer-30.json +6 -0
- package/registry/index.json +263 -0
- package/templates/components/atoms/SafeImage/SafeImage.jsx +101 -0
- package/templates/components/atoms/SafeImage/index.js +1 -0
- package/templates/components/organisms/Footer01/Footer01.jsx +142 -0
- package/templates/components/organisms/Footer01/Footer01.propTypes.js +110 -0
- package/templates/components/organisms/Footer01/index.js +1 -0
- package/templates/components/organisms/Footer02/Footer02.jsx +136 -0
- package/templates/components/organisms/Footer02/Footer02.propTypes.js +112 -0
- package/templates/components/organisms/Footer02/index.js +1 -0
- package/templates/components/organisms/Footer03/Footer03.jsx +162 -0
- package/templates/components/organisms/Footer03/Footer03.propTypes.js +73 -0
- package/templates/components/organisms/Footer03/index.js +1 -0
- package/templates/components/organisms/Footer04/Footer04.jsx +128 -0
- package/templates/components/organisms/Footer04/Footer04.propTypes.js +93 -0
- package/templates/components/organisms/Footer04/index.js +1 -0
- package/templates/components/organisms/Footer05/Footer05.jsx +101 -0
- package/templates/components/organisms/Footer05/Footer05.propTypes.js +42 -0
- package/templates/components/organisms/Footer05/index.js +1 -0
- package/templates/components/organisms/Footer06/Footer06.jsx +170 -0
- package/templates/components/organisms/Footer06/Footer06.propTypes.js +53 -0
- package/templates/components/organisms/Footer06/index.js +1 -0
- package/templates/components/organisms/Footer07/Footer07.jsx +253 -0
- package/templates/components/organisms/Footer07/Footer07.propTypes.js +83 -0
- package/templates/components/organisms/Footer07/index.js +1 -0
- package/templates/components/organisms/Footer08/Footer08.jsx +183 -0
- package/templates/components/organisms/Footer08/Footer08.propTypes.js +92 -0
- package/templates/components/organisms/Footer08/index.js +1 -0
- package/templates/components/organisms/Footer09/Footer09.jsx +199 -0
- package/templates/components/organisms/Footer09/Footer09.propTypes.js +76 -0
- package/templates/components/organisms/Footer09/index.js +1 -0
- package/templates/components/organisms/Footer10/Footer10.jsx +172 -0
- package/templates/components/organisms/Footer10/Footer10.propTypes.js +38 -0
- package/templates/components/organisms/Footer10/index.js +1 -0
- package/templates/components/organisms/Footer11/Footer11.jsx +107 -0
- package/templates/components/organisms/Footer11/Footer11.propTypes.js +64 -0
- package/templates/components/organisms/Footer11/index.js +1 -0
- package/templates/components/organisms/Footer12/Footer12.jsx +122 -0
- package/templates/components/organisms/Footer12/Footer12.propTypes.js +94 -0
- package/templates/components/organisms/Footer12/index.js +1 -0
- package/templates/components/organisms/Footer13/Footer13.jsx +156 -0
- package/templates/components/organisms/Footer13/Footer13.propTypes.js +80 -0
- package/templates/components/organisms/Footer13/index.js +1 -0
- package/templates/components/organisms/Footer14/Footer14.jsx +157 -0
- package/templates/components/organisms/Footer14/Footer14.propTypes.js +60 -0
- package/templates/components/organisms/Footer14/index.js +1 -0
- package/templates/components/organisms/Footer15/Footer15.jsx +184 -0
- package/templates/components/organisms/Footer15/Footer15.propTypes.js +58 -0
- package/templates/components/organisms/Footer15/index.js +1 -0
- package/templates/components/organisms/Footer16/Footer16.jsx +87 -0
- package/templates/components/organisms/Footer16/Footer16.propTypes.js +73 -0
- package/templates/components/organisms/Footer16/index.js +1 -0
- package/templates/components/organisms/Footer17/Footer17.jsx +176 -0
- package/templates/components/organisms/Footer17/Footer17.propTypes.js +117 -0
- package/templates/components/organisms/Footer17/index.js +1 -0
- package/templates/components/organisms/Footer18/Footer18.jsx +236 -0
- package/templates/components/organisms/Footer18/Footer18.propTypes.js +92 -0
- package/templates/components/organisms/Footer18/index.js +1 -0
- package/templates/components/organisms/Footer19/Footer19.jsx +287 -0
- package/templates/components/organisms/Footer19/Footer19.propTypes.js +116 -0
- package/templates/components/organisms/Footer19/index.js +1 -0
- package/templates/components/organisms/Footer20/Footer20.jsx +201 -0
- package/templates/components/organisms/Footer20/Footer20.propTypes.js +70 -0
- package/templates/components/organisms/Footer20/index.js +1 -0
- package/templates/components/organisms/Footer21/Footer21.jsx +134 -0
- package/templates/components/organisms/Footer21/Footer21.propTypes.js +122 -0
- package/templates/components/organisms/Footer21/index.js +1 -0
- package/templates/components/organisms/Footer22/Footer22.jsx +136 -0
- package/templates/components/organisms/Footer22/Footer22.propTypes.js +58 -0
- package/templates/components/organisms/Footer22/index.js +1 -0
- package/templates/components/organisms/Footer23/Footer23.jsx +177 -0
- package/templates/components/organisms/Footer23/Footer23.propTypes.js +97 -0
- package/templates/components/organisms/Footer23/index.js +1 -0
- package/templates/components/organisms/Footer24/Footer24.jsx +192 -0
- package/templates/components/organisms/Footer24/Footer24.propTypes.js +132 -0
- package/templates/components/organisms/Footer24/index.js +1 -0
- package/templates/components/organisms/Footer25/Footer25.jsx +135 -0
- package/templates/components/organisms/Footer25/Footer25.propTypes.js +124 -0
- package/templates/components/organisms/Footer25/index.js +1 -0
- package/templates/components/organisms/Footer26/Footer26.jsx +167 -0
- package/templates/components/organisms/Footer26/Footer26.propTypes.js +54 -0
- package/templates/components/organisms/Footer26/index.js +1 -0
- package/templates/components/organisms/Footer27/Footer27.jsx +171 -0
- package/templates/components/organisms/Footer27/Footer27.propTypes.js +105 -0
- package/templates/components/organisms/Footer27/index.js +1 -0
- package/templates/components/organisms/Footer28/Footer28.jsx +98 -0
- package/templates/components/organisms/Footer28/Footer28.propTypes.js +96 -0
- package/templates/components/organisms/Footer28/index.js +1 -0
- package/templates/components/organisms/Footer29/Footer29.jsx +118 -0
- package/templates/components/organisms/Footer29/Footer29.propTypes.js +68 -0
- package/templates/components/organisms/Footer29/index.js +1 -0
- package/templates/components/organisms/Footer30/Footer30.jsx +92 -0
- package/templates/components/organisms/Footer30/Footer30.propTypes.js +51 -0
- package/templates/components/organisms/Footer30/index.js +1 -0
- package/templates/public/footer/footer02/payment-01.png +0 -0
- package/templates/public/footer/footer02/payment-02.png +0 -0
- package/templates/public/footer/footer02/payment-03.png +0 -0
- package/templates/public/footer/footer02/payment-04.png +0 -0
- package/templates/public/footer/footer02/payment-05.png +0 -0
- package/templates/public/footer/footer02/payment-06.png +0 -0
- package/templates/public/footer/footer02/payment-07.png +0 -0
- package/templates/public/footer/footer02/payment-08.png +0 -0
- package/templates/public/footer/footer02/payment-09.svg +5 -0
- package/templates/public/footer/footer02/payment-10.svg +11 -0
- package/templates/public/footer/footer02/payment-11.svg +22 -0
- package/templates/public/footer/footer02/payment-12.svg +25 -0
- package/templates/public/footer/footer02/payment-13.svg +10 -0
- package/templates/public/footer/footer02/payment-14.svg +36 -0
- package/templates/public/footer/footer02/payment-15.svg +18 -0
- package/templates/public/footer/footer02/payment-sprite-01.png +0 -0
- package/templates/public/footer/footer02/payment-sprite-02.png +0 -0
- package/templates/public/footer/footer02/payment-sprite-03.png +0 -0
- package/templates/public/footer/footer02/payment-sprite-04.png +0 -0
- package/templates/public/footer/footer02/payment-sprite-05.png +0 -0
- package/templates/public/footer/footer02/payment-sprite-06.png +0 -0
- package/templates/public/footer/footer03/logo-mask.png +0 -0
- package/templates/public/footer/footer03/logo.png +0 -0
- package/templates/public/footer/footer04/logo.svg +45 -0
- package/templates/public/footer/footer05/brand-watermark.png +0 -0
- package/templates/public/footer/footer07/logo.png +0 -0
- package/templates/public/footer/footer07/watch-hero.png +0 -0
- package/templates/public/footer/footer07/watch-overlay.png +0 -0
- package/templates/public/footer/footer08/logo.png +0 -0
- package/templates/public/footer/footer08/logo.svg +3 -0
- package/templates/public/footer/footer09/logo.svg +13 -0
- package/templates/public/footer/footer10/hero-image.png +0 -0
- package/templates/public/footer/footer10/hero-mask-download.svg +3 -0
- package/templates/public/footer/footer10/hero-mask.svg +3 -0
- package/templates/public/footer/footer12/logo-icon.svg +3 -0
- package/templates/public/footer/footer12/refugee-logo.png +0 -0
- package/templates/public/footer/footer13/logo.png +0 -0
- package/templates/public/footer/footer14/logo.png +0 -0
- package/templates/public/footer/footer15/logo.svg +19 -0
- package/templates/public/footer/footer16/logo.svg +6 -0
- package/templates/public/footer/footer17/logo-left.svg +11 -0
- package/templates/public/footer/footer17/logo-right.svg +36 -0
- package/templates/public/footer/footer18/logo.png +108 -0
- package/templates/public/footer/footer18/logo.svg +108 -0
- package/templates/public/footer/footer19/logo.png +0 -0
- package/templates/public/footer/footer19/payment-bkash.png +0 -0
- package/templates/public/footer/footer19/payment-mastercard.svg +12 -0
- package/templates/public/footer/footer19/payment-nagad.png +0 -0
- package/templates/public/footer/footer19/payment-nexus.png +0 -0
- package/templates/public/footer/footer19/payment-rocket.png +0 -0
- package/templates/public/footer/footer19/payment-upay.png +0 -0
- package/templates/public/footer/footer19/payment-visa.svg +6 -0
- package/templates/public/footer/footer20/bg.png +0 -0
- package/templates/public/footer/footer20/logo.png +0 -0
- package/templates/public/footer/footer21/logo.png +0 -0
- package/templates/public/footer/footer22/logo-icon.svg +10 -0
- package/templates/public/footer/footer22/logo-name.svg +5 -0
- package/templates/public/footer/footer22/logo-tagline.svg +5 -0
- package/templates/public/footer/footer23/logo-icon.svg +10 -0
- package/templates/public/footer/footer23/logo-name.svg +20 -0
- package/templates/public/footer/footer23/logo-tagline.svg +17 -0
- package/templates/public/footer/footer24/logo.svg +46 -0
- package/templates/public/footer/footer24/map.png +0 -0
- package/templates/public/footer/footer25/logo-icon.svg +15 -0
- package/templates/public/footer/footer25/logo-text.svg +42 -0
- package/templates/public/footer/footer25/map-pin.svg +7 -0
- package/templates/public/footer/footer25/map.png +0 -0
- package/templates/public/footer/footer26/logo-jpl.svg +5 -0
- package/templates/public/footer/footer26/logo.png +0 -0
- package/templates/public/footer/footer27/logo.png +0 -0
- package/templates/public/footer/footer28/logo.png +0 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import SafeImage from "../../atoms/SafeImage";
|
|
4
|
+
import {
|
|
5
|
+
footer18DefaultProps,
|
|
6
|
+
footer18PropTypes,
|
|
7
|
+
} from "./Footer18.propTypes";
|
|
8
|
+
|
|
9
|
+
function LocationIcon({ className = "" }) {
|
|
10
|
+
return (
|
|
11
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" className={className}>
|
|
12
|
+
<path
|
|
13
|
+
d="M8 1.5a4.25 4.25 0 00-4.25 4.25c0 3.188 4.25 7.875 4.25 7.875s4.25-4.687 4.25-7.875A4.25 4.25 0 008 1.5z"
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
strokeWidth="1.2"
|
|
16
|
+
/>
|
|
17
|
+
<circle cx="8" cy="5.75" r="1.25" fill="currentColor" />
|
|
18
|
+
</svg>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function MailIcon({ className = "" }) {
|
|
23
|
+
return (
|
|
24
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" className={className}>
|
|
25
|
+
<rect x="1.5" y="3.5" width="13" height="9" rx="1" stroke="currentColor" strokeWidth="1.2" />
|
|
26
|
+
<path d="M2 4.5l6 4 6-4" stroke="currentColor" strokeWidth="1.2" />
|
|
27
|
+
</svg>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function PhoneIcon({ className = "" }) {
|
|
32
|
+
return (
|
|
33
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" className={className}>
|
|
34
|
+
<path
|
|
35
|
+
d="M4 2h2l.75 2.25-1.69 1.13a5.5 5.5 0 002.48 2.48L8.5 6.5l2.25.75V9.5a1 1 0 01-1 1A7.5 7.5 0 012 4a1 1 0 011-1h1z"
|
|
36
|
+
stroke="currentColor"
|
|
37
|
+
strokeWidth="1.2"
|
|
38
|
+
strokeLinecap="round"
|
|
39
|
+
/>
|
|
40
|
+
</svg>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function FacebookIcon({ className = "" }) {
|
|
45
|
+
return (
|
|
46
|
+
<svg viewBox="0 0 32 32" fill="currentColor" aria-hidden="true" className={className}>
|
|
47
|
+
<circle cx="16" cy="16" r="16" />
|
|
48
|
+
<path
|
|
49
|
+
d="M17.5 8h-2.2c-2.1 0-3.5 1.4-3.5 3.6V14H9.5v2.8h2.3V24h2.9v-7.2h2.5l.4-2.8h-2.9v-1.8c0-.8.2-1.2 1.3-1.2H17.5V8z"
|
|
50
|
+
fill="#f0f7ff"
|
|
51
|
+
/>
|
|
52
|
+
</svg>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function LinkedinIcon({ className = "" }) {
|
|
57
|
+
return (
|
|
58
|
+
<svg viewBox="0 0 32 32" fill="currentColor" aria-hidden="true" className={className}>
|
|
59
|
+
<circle cx="16" cy="16" r="16" />
|
|
60
|
+
<path
|
|
61
|
+
d="M10 12h2.8v10H10V12zm1.4-4.5a1.6 1.6 0 110 3.2 1.6 1.6 0 010-3.2zM14.5 12H17v1.4c.5-.9 1.6-1.6 2.8-1.6 3 0 3.6 2 3.6 4.6V22h-2.9v-5.1c0-1.2 0-2.7-1.7-2.7-1.7 0-2 1.4-2 2.6V22h-2.8V12z"
|
|
62
|
+
fill="#f0f7ff"
|
|
63
|
+
/>
|
|
64
|
+
</svg>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function YoutubeIcon({ className = "" }) {
|
|
69
|
+
return (
|
|
70
|
+
<svg viewBox="0 0 32 32" fill="currentColor" aria-hidden="true" className={className}>
|
|
71
|
+
<circle cx="16" cy="16" r="16" />
|
|
72
|
+
<path d="M24.5 11.5a2.5 2.5 0 00-1.8-1.8C20.5 9 16 9 16 9s-4.5 0-6.7.7a2.5 2.5 0 00-1.8 1.8A26 26 0 006 16a26 26 0 00.5 4.5 2.5 2.5 0 001.8 1.8c2.2.7 6.7.7 6.7.7s4.5 0 6.7-.7a2.5 2.5 0 001.8-1.8A26 26 0 0026 16a26 26 0 00-.5-4.5zM14 19.5v-7l5.2 3.5L14 19.5z" fill="#f0f7ff" />
|
|
73
|
+
</svg>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function EmailSocialIcon({ className = "" }) {
|
|
78
|
+
return (
|
|
79
|
+
<svg viewBox="0 0 32 32" fill="currentColor" aria-hidden="true" className={className}>
|
|
80
|
+
<circle cx="16" cy="16" r="16" />
|
|
81
|
+
<path d="M8 11.5h16v9H8v-9zm2 1.5l6 4 6-4" stroke="#f0f7ff" strokeWidth="1.2" fill="none" />
|
|
82
|
+
</svg>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const CONTACT_ICONS = {
|
|
87
|
+
address: LocationIcon,
|
|
88
|
+
email: MailIcon,
|
|
89
|
+
phone: PhoneIcon,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const SOCIAL_ICONS = {
|
|
93
|
+
facebook: FacebookIcon,
|
|
94
|
+
linkedin: LinkedinIcon,
|
|
95
|
+
youtube: YoutubeIcon,
|
|
96
|
+
email: EmailSocialIcon,
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
function ContactRow({ item }) {
|
|
100
|
+
const Icon = CONTACT_ICONS[item.type] ?? LocationIcon;
|
|
101
|
+
const content = item.href ? (
|
|
102
|
+
<a
|
|
103
|
+
href={item.href}
|
|
104
|
+
className="text-base leading-[26px] text-[rgba(22,35,64,0.8)] transition-colors duration-200 ease-out hover:text-[#162340] focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
105
|
+
>
|
|
106
|
+
{item.value}
|
|
107
|
+
</a>
|
|
108
|
+
) : (
|
|
109
|
+
<p className="text-base leading-[26px] text-[rgba(22,35,64,0.8)]">{item.value}</p>
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<div className="flex gap-2">
|
|
114
|
+
<span className="flex shrink-0 rounded-full border border-[rgba(22,35,64,0.1)] p-2 text-[#162340]">
|
|
115
|
+
<Icon className="size-4" />
|
|
116
|
+
</span>
|
|
117
|
+
<div className="min-w-0 flex-1 pt-0.5">{content}</div>
|
|
118
|
+
</div>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function LinkColumn({ column, children }) {
|
|
123
|
+
return (
|
|
124
|
+
<div className="flex min-w-0 flex-col gap-4">
|
|
125
|
+
<p className="text-xl font-medium leading-[30px] text-[#162340]">{column.title}</p>
|
|
126
|
+
<ul className="flex flex-col gap-2.5">
|
|
127
|
+
{column.links.map((link) => (
|
|
128
|
+
<li key={link.label}>
|
|
129
|
+
<a
|
|
130
|
+
href={link.href ?? "#"}
|
|
131
|
+
className="text-base leading-[26px] text-[rgba(22,35,64,0.8)] transition-colors duration-200 ease-out hover:text-[#162340] focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
132
|
+
>
|
|
133
|
+
{link.label}
|
|
134
|
+
</a>
|
|
135
|
+
</li>
|
|
136
|
+
))}
|
|
137
|
+
</ul>
|
|
138
|
+
{children}
|
|
139
|
+
</div>
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Footer18 — AKS Khan Pharmaceuticals light blue contact footer.
|
|
145
|
+
* Figma node 32:19559 at 1440px.
|
|
146
|
+
*/
|
|
147
|
+
export function Footer18({
|
|
148
|
+
logoSrc = footer18DefaultProps.logoSrc,
|
|
149
|
+
logoAlt = footer18DefaultProps.logoAlt,
|
|
150
|
+
contactItems = footer18DefaultProps.contactItems,
|
|
151
|
+
linkColumns = footer18DefaultProps.linkColumns,
|
|
152
|
+
socialTitle = footer18DefaultProps.socialTitle,
|
|
153
|
+
socialLinks = footer18DefaultProps.socialLinks,
|
|
154
|
+
copyright = footer18DefaultProps.copyright,
|
|
155
|
+
legalLinks = footer18DefaultProps.legalLinks,
|
|
156
|
+
className = "",
|
|
157
|
+
}) {
|
|
158
|
+
const [companyColumn, ...otherColumns] = linkColumns;
|
|
159
|
+
|
|
160
|
+
return (
|
|
161
|
+
<footer
|
|
162
|
+
className={["relative w-full overflow-hidden bg-[#f0f7ff]", className]
|
|
163
|
+
.filter(Boolean)
|
|
164
|
+
.join(" ")}
|
|
165
|
+
data-footer="footer18"
|
|
166
|
+
>
|
|
167
|
+
<div className="mx-auto flex w-full max-w-[1920px] flex-col gap-10 px-4 py-12 sm:px-6 md:px-10 lg:gap-12 lg:px-[75px] lg:pt-[60px]">
|
|
168
|
+
<div className="flex flex-col gap-10 lg:flex-row lg:items-start lg:justify-center lg:gap-[90px]">
|
|
169
|
+
<div className="flex min-w-0 flex-1 flex-col gap-8">
|
|
170
|
+
<SafeImage
|
|
171
|
+
src={logoSrc}
|
|
172
|
+
alt={logoAlt}
|
|
173
|
+
width={182}
|
|
174
|
+
height={60}
|
|
175
|
+
className="h-12 w-auto max-w-[182px] sm:h-[60px]"
|
|
176
|
+
/>
|
|
177
|
+
<div className="flex flex-col gap-4">
|
|
178
|
+
{contactItems.map((item) => (
|
|
179
|
+
<ContactRow key={item.value} item={item} />
|
|
180
|
+
))}
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<div className="grid min-w-0 flex-1 grid-cols-1 gap-10 sm:grid-cols-2 lg:grid-cols-3 lg:gap-[60px]">
|
|
185
|
+
{companyColumn ? (
|
|
186
|
+
<LinkColumn column={companyColumn}>
|
|
187
|
+
<div className="mt-6 flex flex-col gap-4">
|
|
188
|
+
<p className="text-xl font-medium leading-[30px] text-[#162340]">{socialTitle}</p>
|
|
189
|
+
<div className="flex flex-wrap gap-4">
|
|
190
|
+
{socialLinks.map((social) => {
|
|
191
|
+
const Icon = SOCIAL_ICONS[social.icon] ?? FacebookIcon;
|
|
192
|
+
return (
|
|
193
|
+
<a
|
|
194
|
+
key={social.label}
|
|
195
|
+
href={social.href ?? "#"}
|
|
196
|
+
aria-label={social.label}
|
|
197
|
+
className="transition-transform duration-300 ease-out hover:scale-105 motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
198
|
+
>
|
|
199
|
+
<Icon className="size-8 text-[#2e8168]" />
|
|
200
|
+
</a>
|
|
201
|
+
);
|
|
202
|
+
})}
|
|
203
|
+
</div>
|
|
204
|
+
</div>
|
|
205
|
+
</LinkColumn>
|
|
206
|
+
) : null}
|
|
207
|
+
{otherColumns.map((column) => (
|
|
208
|
+
<LinkColumn key={column.title} column={column} />
|
|
209
|
+
))}
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
|
|
213
|
+
<div className="flex flex-col gap-5 border-t border-[#ededed] pt-5">
|
|
214
|
+
<div className="flex flex-col gap-4 text-sm leading-[22px] text-[rgba(22,35,64,0.8)] sm:flex-row sm:items-center sm:justify-between">
|
|
215
|
+
<p>{copyright}</p>
|
|
216
|
+
<div className="flex gap-5">
|
|
217
|
+
{legalLinks.map((link) => (
|
|
218
|
+
<a
|
|
219
|
+
key={link.label}
|
|
220
|
+
href={link.href ?? "#"}
|
|
221
|
+
className="transition-colors duration-200 ease-out hover:text-[#162340] focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
222
|
+
>
|
|
223
|
+
{link.label}
|
|
224
|
+
</a>
|
|
225
|
+
))}
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
</footer>
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
Footer18.propTypes = footer18PropTypes;
|
|
235
|
+
|
|
236
|
+
export default Footer18;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import PropTypes from "prop-types";
|
|
2
|
+
|
|
3
|
+
const linkShape = PropTypes.shape({
|
|
4
|
+
label: PropTypes.string.isRequired,
|
|
5
|
+
href: PropTypes.string,
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
const columnShape = PropTypes.shape({
|
|
9
|
+
title: PropTypes.string.isRequired,
|
|
10
|
+
links: PropTypes.arrayOf(linkShape),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const contactItemShape = PropTypes.shape({
|
|
14
|
+
type: PropTypes.oneOf(["address", "email", "phone"]).isRequired,
|
|
15
|
+
value: PropTypes.string.isRequired,
|
|
16
|
+
href: PropTypes.string,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const socialShape = PropTypes.shape({
|
|
20
|
+
label: PropTypes.string.isRequired,
|
|
21
|
+
href: PropTypes.string,
|
|
22
|
+
icon: PropTypes.oneOf(["facebook", "linkedin", "youtube", "email"]),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const legalLinkShape = PropTypes.shape({
|
|
26
|
+
label: PropTypes.string.isRequired,
|
|
27
|
+
href: PropTypes.string,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export const footer18PropTypes = {
|
|
31
|
+
logoSrc: PropTypes.string,
|
|
32
|
+
logoAlt: PropTypes.string,
|
|
33
|
+
contactItems: PropTypes.arrayOf(contactItemShape),
|
|
34
|
+
linkColumns: PropTypes.arrayOf(columnShape),
|
|
35
|
+
socialTitle: PropTypes.string,
|
|
36
|
+
socialLinks: PropTypes.arrayOf(socialShape),
|
|
37
|
+
copyright: PropTypes.string,
|
|
38
|
+
legalLinks: PropTypes.arrayOf(legalLinkShape),
|
|
39
|
+
className: PropTypes.string,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const footer18DefaultProps = {
|
|
43
|
+
logoSrc: "/footer/footer18/logo.svg",
|
|
44
|
+
logoAlt: "AKS Khan Pharmaceuticals",
|
|
45
|
+
contactItems: [
|
|
46
|
+
{
|
|
47
|
+
type: "address",
|
|
48
|
+
value: "Rupayan Prime, Plot 02, Road 07, Dhanmondi, Dhaka – 1205",
|
|
49
|
+
},
|
|
50
|
+
{ type: "email", value: "info@akskhanpharma.com", href: "mailto:info@akskhanpharma.com" },
|
|
51
|
+
{ type: "phone", value: "Tel:- +8801847360360", href: "tel:+8801847360360" },
|
|
52
|
+
],
|
|
53
|
+
linkColumns: [
|
|
54
|
+
{
|
|
55
|
+
title: "The Company",
|
|
56
|
+
links: [
|
|
57
|
+
{ label: "About Us", href: "#" },
|
|
58
|
+
{ label: "Board of Directors", href: "#" },
|
|
59
|
+
{ label: "Management Team", href: "#" },
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
title: "Quick Links",
|
|
64
|
+
links: [
|
|
65
|
+
{ label: "Careers", href: "#" },
|
|
66
|
+
{ label: "Impacts", href: "#" },
|
|
67
|
+
{ label: "News", href: "#" },
|
|
68
|
+
{ label: "Contact Us", href: "#" },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
title: "Services",
|
|
73
|
+
links: [
|
|
74
|
+
{ label: "AKS Khan Pharmacy", href: "#" },
|
|
75
|
+
{ label: "AKS Khan Diagnostics", href: "#" },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
socialTitle: "Follow us on",
|
|
80
|
+
socialLinks: [
|
|
81
|
+
{ label: "Facebook", href: "#", icon: "facebook" },
|
|
82
|
+
{ label: "LinkedIn", href: "#", icon: "linkedin" },
|
|
83
|
+
{ label: "YouTube", href: "#", icon: "youtube" },
|
|
84
|
+
{ label: "Email", href: "#", icon: "email" },
|
|
85
|
+
],
|
|
86
|
+
copyright: "© 2024 AKS Khan Pharmaceuticals Ltd. All Rights Reserved.",
|
|
87
|
+
legalLinks: [
|
|
88
|
+
{ label: "Privacy", href: "#" },
|
|
89
|
+
{ label: "Terms of Use", href: "#" },
|
|
90
|
+
],
|
|
91
|
+
className: "",
|
|
92
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Footer18, default } from "./Footer18";
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import SafeImage from "../../atoms/SafeImage";
|
|
5
|
+
import {
|
|
6
|
+
footer19DefaultProps,
|
|
7
|
+
footer19PropTypes,
|
|
8
|
+
} from "./Footer19.propTypes";
|
|
9
|
+
|
|
10
|
+
function LocationIcon({ className = "" }) {
|
|
11
|
+
return (
|
|
12
|
+
<svg viewBox="0 0 18 18" fill="none" aria-hidden="true" className={className}>
|
|
13
|
+
<path d="M9 1.5a5.25 5.25 0 00-5.25 5.25c0 3.938 5.25 9.75 5.25 9.75s5.25-5.812 5.25-9.75A5.25 5.25 0 009 1.5z" stroke="currentColor" strokeWidth="1.2" />
|
|
14
|
+
<circle cx="9" cy="6.75" r="1.5" fill="currentColor" />
|
|
15
|
+
</svg>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function MailIcon({ className = "" }) {
|
|
20
|
+
return (
|
|
21
|
+
<svg viewBox="0 0 18 18" fill="none" aria-hidden="true" className={className}>
|
|
22
|
+
<rect x="2" y="4" width="14" height="10" rx="1" stroke="currentColor" strokeWidth="1.2" />
|
|
23
|
+
<path d="M2 5.5l7 4.5 7-4.5" stroke="currentColor" strokeWidth="1.2" />
|
|
24
|
+
</svg>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function PhoneIcon({ className = "" }) {
|
|
29
|
+
return (
|
|
30
|
+
<svg viewBox="0 0 18 18" fill="none" aria-hidden="true" className={className}>
|
|
31
|
+
<path d="M4.5 2.25h2.25l.75 2.25-1.69 1.13a7.5 7.5 0 003.38 3.38L10.5 7.5l2.25.75V10.5a1.13 1.13 0 01-1.13 1.13A9.38 9.38 0 012.25 4.5a1.13 1.13 0 011.13-1.13z" stroke="currentColor" strokeWidth="1.2" />
|
|
32
|
+
</svg>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function FacebookIcon({ className = "" }) {
|
|
37
|
+
return (
|
|
38
|
+
<svg viewBox="0 0 30 30" fill="currentColor" aria-hidden="true" className={className}>
|
|
39
|
+
<circle cx="15" cy="15" r="15" />
|
|
40
|
+
<path d="M16.5 8h-2c-2 0-3.2 1.3-3.2 3.4V14H9v2.5h2.3V24h3V16.5h2.6l.4-2.5h-3v-1.6c0-.8.2-1.3 1.2-1.3H16.5V8z" fill="white" />
|
|
41
|
+
</svg>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function LinkedinIcon({ className = "" }) {
|
|
46
|
+
return (
|
|
47
|
+
<svg viewBox="0 0 30 30" fill="currentColor" aria-hidden="true" className={className}>
|
|
48
|
+
<circle cx="15" cy="15" r="15" />
|
|
49
|
+
<path d="M10 11h2.8v11H10V11zm1.4-4.5a1.6 1.6 0 110 3.2 1.6 1.6 0 010-3.2zM14.5 11H17v1.5c.5-.9 1.6-1.6 2.8-1.6 3 0 3.6 2 3.6 4.6V22h-2.9v-5.1c0-1.2 0-2.7-1.7-2.7-1.7 0-2 1.4-2 2.6V22h-2.8V11z" fill="white" />
|
|
50
|
+
</svg>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function InstagramIcon({ className = "" }) {
|
|
55
|
+
return (
|
|
56
|
+
<svg viewBox="0 0 30 30" fill="currentColor" aria-hidden="true" className={className}>
|
|
57
|
+
<circle cx="15" cy="15" r="15" />
|
|
58
|
+
<rect x="9" y="9" width="12" height="12" rx="3" stroke="white" strokeWidth="1.2" fill="none" />
|
|
59
|
+
<circle cx="15" cy="15" r="2.5" stroke="white" strokeWidth="1.2" fill="none" />
|
|
60
|
+
</svg>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function YoutubeIcon({ className = "" }) {
|
|
65
|
+
return (
|
|
66
|
+
<svg viewBox="0 0 30 30" fill="currentColor" aria-hidden="true" className={className}>
|
|
67
|
+
<circle cx="15" cy="15" r="15" />
|
|
68
|
+
<path d="M22.5 10.5a2.5 2.5 0 00-1.8-1.8C18.5 8 15 8 15 8s-3.5 0-5.7.7a2.5 2.5 0 00-1.8 1.8A26 26 0 007.5 15a26 26 0 00.5 4.5 2.5 2.5 0 001.8 1.8c2.2.7 5.7.7 5.7.7s3.5 0 5.7-.7a2.5 2.5 0 001.8-1.8A26 26 0 0022.5 15a26 26 0 00-.5-4.5zM13 18.5v-7l5.2 3.5L13 18.5z" fill="white" />
|
|
69
|
+
</svg>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function ChevronUpIcon({ className = "" }) {
|
|
74
|
+
return (
|
|
75
|
+
<svg viewBox="0 0 14 14" fill="none" aria-hidden="true" className={className}>
|
|
76
|
+
<path d="M3 9l4-4 4 4" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
|
|
77
|
+
</svg>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const CONTACT_ICONS = { address: LocationIcon, email: MailIcon, phone: PhoneIcon };
|
|
82
|
+
const SOCIAL_ICONS = {
|
|
83
|
+
facebook: FacebookIcon,
|
|
84
|
+
linkedin: LinkedinIcon,
|
|
85
|
+
instagram: InstagramIcon,
|
|
86
|
+
youtube: YoutubeIcon,
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
function LinkList({ links }) {
|
|
90
|
+
return (
|
|
91
|
+
<ul className="flex flex-col gap-2">
|
|
92
|
+
{links.map((link) => (
|
|
93
|
+
<li key={link.label}>
|
|
94
|
+
<a
|
|
95
|
+
href={link.href ?? "#"}
|
|
96
|
+
className="text-sm leading-[22px] text-white transition-colors duration-200 ease-out hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
97
|
+
>
|
|
98
|
+
{link.label}
|
|
99
|
+
</a>
|
|
100
|
+
</li>
|
|
101
|
+
))}
|
|
102
|
+
</ul>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Footer19 — Grameen Danone blue footer with newsletter and payment badges.
|
|
108
|
+
* Figma node 32:19560 at 1366px.
|
|
109
|
+
*/
|
|
110
|
+
export function Footer19({
|
|
111
|
+
logoSrc = footer19DefaultProps.logoSrc,
|
|
112
|
+
brandTitle = footer19DefaultProps.brandTitle,
|
|
113
|
+
brandSubtitle = footer19DefaultProps.brandSubtitle,
|
|
114
|
+
contactItems = footer19DefaultProps.contactItems,
|
|
115
|
+
quickLinksTitle = footer19DefaultProps.quickLinksTitle,
|
|
116
|
+
quickLinks = footer19DefaultProps.quickLinks,
|
|
117
|
+
aboutTitle = footer19DefaultProps.aboutTitle,
|
|
118
|
+
aboutLinks = footer19DefaultProps.aboutLinks,
|
|
119
|
+
accountTitle = footer19DefaultProps.accountTitle,
|
|
120
|
+
accountLinks = footer19DefaultProps.accountLinks,
|
|
121
|
+
newsletterTitle = footer19DefaultProps.newsletterTitle,
|
|
122
|
+
newsletterDescription = footer19DefaultProps.newsletterDescription,
|
|
123
|
+
email: controlledEmail,
|
|
124
|
+
onEmailChange,
|
|
125
|
+
onNewsletterSubmit,
|
|
126
|
+
socialLinks = footer19DefaultProps.socialLinks,
|
|
127
|
+
paymentBadges = footer19DefaultProps.paymentBadges,
|
|
128
|
+
copyright = footer19DefaultProps.copyright,
|
|
129
|
+
onBackToTop,
|
|
130
|
+
className = "",
|
|
131
|
+
}) {
|
|
132
|
+
const [internalEmail, setInternalEmail] = useState("");
|
|
133
|
+
const email = controlledEmail ?? internalEmail;
|
|
134
|
+
|
|
135
|
+
const handleEmailChange = (event) => {
|
|
136
|
+
if (onEmailChange) onEmailChange(event.target.value);
|
|
137
|
+
else setInternalEmail(event.target.value);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const handleSubmit = (event) => {
|
|
141
|
+
event.preventDefault();
|
|
142
|
+
onNewsletterSubmit?.(email);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
<footer
|
|
147
|
+
className={["relative w-full overflow-hidden bg-[#005d9f]", className]
|
|
148
|
+
.filter(Boolean)
|
|
149
|
+
.join(" ")}
|
|
150
|
+
data-footer="footer19"
|
|
151
|
+
>
|
|
152
|
+
<div className="mx-auto w-full max-w-[1920px] px-4 py-12 sm:px-6 md:px-10 lg:px-[60px] lg:py-16">
|
|
153
|
+
<div className="grid grid-cols-1 gap-10 md:grid-cols-2 lg:grid-cols-4 lg:gap-8">
|
|
154
|
+
<div className="flex flex-col gap-6">
|
|
155
|
+
<div className="flex items-center gap-3">
|
|
156
|
+
<SafeImage
|
|
157
|
+
src={logoSrc}
|
|
158
|
+
alt=""
|
|
159
|
+
width={87}
|
|
160
|
+
height={80}
|
|
161
|
+
className="h-16 w-auto max-w-[87px] sm:h-20"
|
|
162
|
+
/>
|
|
163
|
+
<div>
|
|
164
|
+
<p className="text-base font-semibold leading-6 text-white">{brandTitle}</p>
|
|
165
|
+
<p className="text-sm text-white/90">{brandSubtitle}</p>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
<div className="flex flex-col gap-4">
|
|
169
|
+
{contactItems.map((item) => {
|
|
170
|
+
const Icon = CONTACT_ICONS[item.type] ?? LocationIcon;
|
|
171
|
+
return (
|
|
172
|
+
<div key={item.value} className="flex gap-2">
|
|
173
|
+
<span className="flex shrink-0 rounded-full bg-white/10 p-1.5 text-white">
|
|
174
|
+
<Icon className="size-[18px]" />
|
|
175
|
+
</span>
|
|
176
|
+
<div className="text-sm leading-[22px] text-white">
|
|
177
|
+
{item.label ? <span>{item.label} </span> : null}
|
|
178
|
+
{item.href ? (
|
|
179
|
+
<a href={item.href} className="hover:underline focus-visible:outline-2 focus-visible:outline-offset-2">
|
|
180
|
+
{item.value}
|
|
181
|
+
</a>
|
|
182
|
+
) : (
|
|
183
|
+
item.value
|
|
184
|
+
)}
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
);
|
|
188
|
+
})}
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
<div>
|
|
193
|
+
<p className="mb-4 font-serif text-lg font-bold leading-7 text-white">{quickLinksTitle}</p>
|
|
194
|
+
<LinkList links={quickLinks} />
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<div className="flex flex-col gap-8">
|
|
198
|
+
<div>
|
|
199
|
+
<p className="mb-4 font-serif text-lg font-bold leading-7 text-white">{aboutTitle}</p>
|
|
200
|
+
<LinkList links={aboutLinks} />
|
|
201
|
+
</div>
|
|
202
|
+
<div>
|
|
203
|
+
<p className="mb-4 font-serif text-lg font-bold leading-7 text-white">{accountTitle}</p>
|
|
204
|
+
<LinkList links={accountLinks} />
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
|
|
208
|
+
<div className="flex flex-col gap-6">
|
|
209
|
+
<div>
|
|
210
|
+
<p className="mb-2 font-serif text-lg font-bold leading-7 text-white">{newsletterTitle}</p>
|
|
211
|
+
<p className="mb-4 text-sm leading-[22px] text-white">{newsletterDescription}</p>
|
|
212
|
+
<form onSubmit={handleSubmit} className="flex flex-col gap-2 sm:flex-row">
|
|
213
|
+
<label className="sr-only" htmlFor="footer19-email">
|
|
214
|
+
Email address
|
|
215
|
+
</label>
|
|
216
|
+
<input
|
|
217
|
+
id="footer19-email"
|
|
218
|
+
type="email"
|
|
219
|
+
value={email}
|
|
220
|
+
onChange={handleEmailChange}
|
|
221
|
+
placeholder="Enter your email address"
|
|
222
|
+
className="h-[50px] flex-1 rounded-[5px] border border-[#e1eaef] bg-[rgba(7,4,38,0.1)] px-5 text-sm text-white placeholder:text-white/60 focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
223
|
+
/>
|
|
224
|
+
<button
|
|
225
|
+
type="submit"
|
|
226
|
+
className="h-[50px] shrink-0 rounded-[5px] bg-white px-6 text-sm font-semibold uppercase text-[#0d2835] transition-colors duration-200 ease-out hover:bg-white/90 focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
227
|
+
>
|
|
228
|
+
Subscribe
|
|
229
|
+
</button>
|
|
230
|
+
</form>
|
|
231
|
+
</div>
|
|
232
|
+
<div className="flex flex-wrap gap-4">
|
|
233
|
+
{socialLinks.map((social) => {
|
|
234
|
+
const Icon = SOCIAL_ICONS[social.icon] ?? FacebookIcon;
|
|
235
|
+
return (
|
|
236
|
+
<a
|
|
237
|
+
key={social.label}
|
|
238
|
+
href={social.href ?? "#"}
|
|
239
|
+
aria-label={social.label}
|
|
240
|
+
className="transition-transform duration-300 ease-out hover:scale-105 motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
241
|
+
>
|
|
242
|
+
<Icon className="size-[30px] text-[#1877f2]" />
|
|
243
|
+
</a>
|
|
244
|
+
);
|
|
245
|
+
})}
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
|
|
250
|
+
<button
|
|
251
|
+
type="button"
|
|
252
|
+
onClick={onBackToTop ?? (() => window.scrollTo({ top: 0, behavior: "smooth" }))}
|
|
253
|
+
className="mx-auto mt-10 flex size-[42px] items-center justify-center rounded-full bg-white text-[#005d9f] transition-transform duration-200 ease-out hover:scale-105 motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
254
|
+
aria-label="Back to top"
|
|
255
|
+
>
|
|
256
|
+
<ChevronUpIcon className="size-3.5" />
|
|
257
|
+
</button>
|
|
258
|
+
|
|
259
|
+
<div className="mt-6 border-t border-white/20 pt-6">
|
|
260
|
+
<div className="flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between">
|
|
261
|
+
<p className="text-sm leading-[22px] text-white/80">{copyright}</p>
|
|
262
|
+
<div className="flex flex-wrap gap-2">
|
|
263
|
+
{paymentBadges.map((badge) => (
|
|
264
|
+
<div
|
|
265
|
+
key={badge.label}
|
|
266
|
+
className="flex h-[30px] w-[45px] items-center justify-center rounded-[5px] bg-[#e1eaef] p-1"
|
|
267
|
+
>
|
|
268
|
+
<SafeImage
|
|
269
|
+
src={badge.src}
|
|
270
|
+
alt={badge.label}
|
|
271
|
+
width={40}
|
|
272
|
+
height={20}
|
|
273
|
+
className="h-auto max-h-4 w-auto max-w-full object-contain"
|
|
274
|
+
/>
|
|
275
|
+
</div>
|
|
276
|
+
))}
|
|
277
|
+
</div>
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
</footer>
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
Footer19.propTypes = footer19PropTypes;
|
|
286
|
+
|
|
287
|
+
export default Footer19;
|