@lanaco/lnc-react-ui
Version:
React component library
145 lines (125 loc) • 4.1 kB
JavaScript
"use strict";const a=require("react/jsx-runtime"),i=require("react"),l=require("./emotion-styled.browser.esm-DwHBgTPn.cjs"),d=require("./breakpoints-CcVm-gVm.cjs"),f=l.styled.div`
display: flex;
flex-direction: column;
gap: 0.625rem;
text-align: center;
& .card__name {
font-weight: 500;
font-size: 1rem;
leading-trim: none;
line-height: 1.5rem;
letter-spacing: 0;
color: var(--neutral-600, #0f2a46);
white-space: nowrap;
&.below {
display: none;
}
}
@media ${d.down("S")} {
& .card__name {
&.below {
display: block;
}
}
}
`,_=l.styled.a`
text-decoration: none;
color: var(--gray-950, #14161a);
display: block;
border-radius: 0.75rem;
border: 1px solid var(--neutral-9508, rgba(20, 22, 26, 0.08));
background: var(--gray-50, #f5f7fa);
aspect-ratio: 2 / 1;
position: relative;
overflow: hidden;
cursor: pointer;
transition: border-color 0.2s ease;
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.06);
box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.1);
&::before {
content: "";
position: absolute;
top: 0;
left: -100%;
height: 0.375rem;
width: 100%;
z-index: 2;
border-radius: 1rem 1rem 0 0;
background: ${r=>(r==null?void 0:r.borderColor)||"var(--primary-500, #f59e0b)"};
transition: left 0.38s cubic-bezier(0.4, 0, 0.2, 1);
}
&:hover {
&::before {
left: 0;
}
& .card__image {
transform: scale(1.1);
}
}
& .card__image {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
display: block;
transition: transform 0.38s cubic-bezier(0.4, 0, 0.2, 1);
transform-origin: center;
}
& .card__name-badge {
position: absolute;
bottom: 0.75rem;
left: 0.75rem;
z-index: 2;
background: var(--white, #fff);
border-radius: 0.5rem;
padding: 0.5rem;
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.06);
box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.1);
}
@media ${d.down("S")} {
aspect-ratio: 3 / 2;
& .card__name-badge {
display: none;
}
}
`,u=i.forwardRef(({name:r,imageUrl:o,buttonLink:t,borderColor:p,onSelectCard:c=()=>{},LinkComponent:n},m)=>{const e=n||"a",s=i.useRef();return a.jsxs(f,{children:[a.jsxs(_,{ref:s,borderColor:p,onClick:g=>c(g,s),as:e,...n?{to:`/${t}`}:{href:`/${t}`},children:[o&&a.jsx("img",{src:o,alt:r,className:"card__image",loading:"lazy"}),r&&a.jsx("div",{className:"card__name-badge",children:a.jsx("span",{className:"card__name",children:r})})]}),r&&a.jsx("div",{className:"card__name below",children:r})]})}),w=l.styled.div`
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 1.25rem;
& .wrapper__title {
color: var(--gray-900, #0c1520);
font-size: 1.5rem;
font-style: normal;
font-weight: 600;
line-height: 2rem;
letter-spacing: -0.47px;
}
& .wrapper__grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1rem;
width: 100%;
}
@media ${d.down("S")} {
gap: 1rem;
& .wrapper__title {
font-size: 1.375rem;
}
& .wrapper__grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.75rem;
}
}
@media ${d.down("XS")} {
& .wrapper__title {
font-size: 1.375rem;
font-style: semibold;
}
& .wrapper__grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
`,h=i.memo(u),x=i.forwardRef(({title:r,items:o,onSelectCard:t=()=>{},componentName:p,LinkComponent:c},n)=>{const m=i.useMemo(()=>o==null?void 0:o.map((e,s)=>a.jsx(h,{name:e==null?void 0:e.name,imageUrl:e==null?void 0:e.imageUrl,borderColor:e==null?void 0:e.borderColor,buttonLink:e==null?void 0:e.buttonLink,onSelectCard:(g,b)=>t==null?void 0:t(e,b),LinkComponent:c},`category-card__${s+1}`)),[o]);return a.jsxs(w,{ref:n,className:"lp-section lp-category-cards-section",children:[r&&a.jsx("div",{className:"wrapper__title",children:r}),a.jsx("div",{className:"wrapper__grid",children:m})]})});module.exports=x;