UNPKG

@lanaco/lnc-react-ui

Version:

React component library

133 lines (118 loc) 5.84 kB
"use strict";const t=require("react/jsx-runtime"),h=require("react"),o=require("./emotion-styled.browser.esm-DwHBgTPn.cjs"),w=require("./breakpoints-CcVm-gVm.cjs"),x=require("./useDetectMobile-DYV6V1yw.cjs"),f=require("./utils-BK6B_Y9X.cjs"),y=require("./ThemeProvider.cjs"),S=require("./index-DOkcmaFO.cjs"),m=require("./style-17Ie7d9D.cjs"),k=o.styled.div` display: flex; flex-direction: column; color: var(--darkest-950); & .container-title { /* width: 100%; */ text-align: center; font-weight: 600; font-size: 1.5rem; } `,R=o.styled.div` display: grid; grid-template-columns: ${r=>`repeat(${r.limit}, minmax(0, 1fr))`}; gap: 1.25rem; @media ${w.down("M")} { grid-template-columns: repeat(2, 1fr); } @media ${w.down("S")} { grid-template-columns: repeat(2, 1fr); } @media ${w.down("XS")} { grid-template-columns: repeat(1, 1fr); } `,$=o.styled.a` padding-top: 5rem; overflow: hidden; text-decoration: none; color: var(--gray-950); `,C=o.styled.div` position: relative; cursor: pointer; display: flex; flex-direction: column; justify-content: space-between; padding: 4.5rem 1.25rem 2rem 1.25rem; gap: 1.25rem; min-height: 13.9375rem; max-height: 13.9375rem; width: 100%; border-radius: 0.75rem; border: 1px solid var(--gray-95008); background: var(--white); /* drop-shadow */ box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.1), 0px 1px 2px 0px rgba(0, 0, 0, 0.06); & .cont { display: flex; flex-direction: column; gap: 0.5rem; font-size: 0.875rem; font-weight: 400; color: var(--gray-700, #4e555f); & .cont-title { font-size: 1.375rem; font-weight: 600; color: var(--gray-950, #14161a); ${f.truncateText()} } & .cont-text { ${f.truncateTextInRows(2)} } } & img { position: absolute; top: -3.125rem; left: 1.25rem; object-fit: cover; min-width: 6.25rem; max-width: 6.25rem; min-height: 6.25rem; max-height: 6.25rem; border-radius: 0.75rem; border: 1px solid var(--gray-95008); /* drop-shadow-lg */ box-shadow: 0px 10px 15px -3px rgba(0, 0, 0, 0.1), 0px 4px 6px -2px rgba(0, 0, 0, 0.05); } `,b=(r,n)=>f.getComponentPropValue(r.theme,"StarRating",r.color,r.disabled===!0?"disabled":"enabled",n),N=o.styled.div` font-size: ${r=>b(r,"fontSize")}; line-height: ${r=>b(r,"lineHeight")}; line-height: 1.5rem; width: fit-content; display: flex; gap: 0.25rem; & .rating { position: relative; margin: 0; padding: 0; width: fit-content; } & .review-count { font-weight: 400; font-size: 0.75rem; line-height: 1.5rem; color: ${r=>r.color}; } `,z=o.styled.span` position: absolute; z-index: 1; display: block; top: 0; left: 0; overflow: hidden; width: ${r=>r.width}%; color: ${r=>f.getColorRgbaValue(r.theme,"StarRating",r.color,r.disabled===!0?"disabled":"enabled","filledColor")}; `,q=o.styled.span` padding: 0; display: block; z-index: 0; color: ${r=>r.color}; `,M=h.forwardRef((r,n)=>{const{rating:s=0,reviewCount:i=null,disabled:a=!1,tabIndex:l=0,className:g="",style:p={},color:d="primary",size:u="large"}=r,{theme:e}=y.useTheme(),c={theme:e,color:d,size:u,style:p,disabled:a},j=s/5*100;return t.jsxs(N,{ref:n,tabIndex:l,...c,className:`star-rating ${g}`,children:[t.jsxs("div",{className:"rating",children:[t.jsx(z,{className:"filled-stars",...c,width:j,children:"★★★★★"}),t.jsx(q,{...c,children:"★★★★★"})]}),!isNaN(i)&&Number.isFinite(i)&&t.jsx("div",{className:"review-count",children:`(${i.toLocaleString()})`})]})}),P=h.forwardRef((r,n)=>{const{image:s,text:i,title:a,link:l,rating:g,onSelectCard:p=()=>{},LinkComponent:d}=r,u=d||"a";return t.jsx($,{ref:n,className:"review-card",onClick:p,as:u,...d?{to:`/${l}`}:{href:`/${l}`},children:t.jsxs(C,{children:[t.jsx(S.ProductImageWrapper,{src:s}),t.jsxs("div",{className:"cont",children:[t.jsx("span",{className:"cont-title",children:a}),t.jsx("div",{className:"cont-text",children:i})]}),t.jsx(M,{color:"warning",rating:g})]})})}),F=o.styled(m.SkeletonAnimationContainer)` @media ${w.down("S")} { flex-direction: column; & > div { flex-direction: column; } } `,L=({keyPrefix:r})=>t.jsx(F,{children:[1,2,3].map(n=>t.jsxs(m.SkeletonColumnContainer,{children:[t.jsx(m.SkeletonSquare,{size:"6.25rem"}),t.jsx(m.SkeletonRect,{width:"100%",height:"2rem",borderRadius:"0.75rem"}),t.jsx(m.SkeletonRect,{width:"100%",height:"1rem",borderRadius:"0.75rem"}),t.jsx(m.SkeletonRect,{width:"100%",height:"1rem",borderRadius:"0.75rem"}),t.jsx(m.SkeletonRect,{height:"1rem",borderRadius:"0.75rem",width:"6rem"})]},`${r}-${n}`))}),T=({keyPrefix:r,isLoading:n=!1,fallbackComponent:s=t.jsx(t.Fragment,{}),children:i})=>t.jsx(h.Suspense,{fallbackComponent:s,children:n===!0?t.jsx(L,{keyPrefix:r}):i}),v=h.memo(P),W=h.forwardRef((r,n)=>{const{title:s="Electronics reviews",items:i,limit:a=3,onSelectCard:l=()=>{},isLoading:g=!1,LinkComponent:p}=r,d=x.useDetectMobile(),u=h.useMemo(()=>t.jsx(t.Fragment,{children:d===!0?i==null?void 0:i.map((e,c)=>t.jsx(v,{text:e==null?void 0:e.text,title:e==null?void 0:e.title,image:e==null?void 0:e.image,link:e==null?void 0:e.link,rating:e==null?void 0:e.ratingArithmeticMean,onSelectCard:()=>l(e),LinkComponent:p},c)):i==null?void 0:i.slice(0,a).map((e,c)=>t.jsx(v,{text:e==null?void 0:e.text,title:e==null?void 0:e.title,image:e==null?void 0:e.image,link:e==null?void 0:e.link,rating:e==null?void 0:e.ratingArithmeticMean,onSelectCard:()=>l(e),LinkComponent:p},c))}),[i,d,a]);return t.jsxs(k,{ref:n,className:"lp-section lp-reviews-section",children:[t.jsx("div",{className:"container-title",children:s}),t.jsx(T,{isLoading:g,keyPrefix:"reviews-skeleton",children:t.jsx(R,{limit:a,children:u})})]})});module.exports=W;