ca-web-components
Version:
web components for Clínica Alemana
156 lines (150 loc) • 5.87 kB
JavaScript
var w=Object.defineProperty;var _=(c,n,e)=>n in c?w(c,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):c[n]=e;var r=(c,n,e)=>_(c,typeof n!="symbol"?n+"":n,e);import{i as k,r as b,x as f}from"../assets/unsafe-html-DS3AO1W7.js";const S=k`
.container {
padding: 32px 0 24px;
}
.card {
scroll-snap-align: center;
display: grid;
grid-template-columns: 177px 1fr;
border-radius: 20px;
width: 487px;
min-width: 487px;
border: 1px solid #F2F5F9;
background: #FFF;
box-shadow: 0px 30px 40px 0px rgba(200, 200, 200, 0.25);
}
.card__image {
position: relative;
border-radius: 20px 0 0 20px;
height: 248px;
overflow: hidden;
}
.card__image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.card__content {
display: flex;
flex-direction: column;
gap: 4px;
padding: 32px 24px;
color: #364855;
}
.card__link {
margin-top: 8px;
display: flex;
justify-content: start;
}
.card__link .button {
display: flex;
border-radius: 20px;
border: 1px solid #203442;
background: #FFF;
padding: 4px 16px;
}
a {
text-decoration: none;
color: currentColor;
}
.list {
display: flex;
gap: 16px;
//padding: 32px 32px 86px;
padding: 0 32px;
overflow-x: auto;
scroll-snap-type: x mandatory;
scroll-behavior: smooth;
//width: calc(100vw - 32px);
}
.actions {
display: none;
justify-content: end;
gap: 12px;
padding: 0 16px;
margin-top: 12px;
}
.actions button {
background-color: #4DBFB8;
width: 40px;
height: 40px;
border-radius: 50%;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
--eloisa-ds-icon-color: currentColor;
color: #FFF;
}
.actions button:disabled {
background-color: #E9EBEC;
color: #909AA1;
cursor: initial;
}
(max-width: 768px) {
.list {
padding: 32px 16px;
}
.card {
display: flex;
width: 315px;
min-width: 315px;
flex-direction: column;
}
.card__image {
border-radius: 20px 20px 0 0;
height: 149px;
}
.card__content {
padding: 16px 16px 32px 16px;
}
}
`;class p extends b{constructor(){super();r(this,"handleScroll",(e,a,i)=>{const t=e.target.scrollLeft,o=e.target.scrollWidth,d=e.target.clientWidth,x=o-t-d;t>0?a.disabled=!1:a.disabled=!0,x>0?i.disabled=!1:i.disabled=!0});r(this,"handlePrev",()=>{const e=this.shadowRoot.querySelector(".list");e.scrollLeft-=480});r(this,"handleNext",()=>{const e=this.shadowRoot.querySelector(".list");e.scrollLeft+=480});this.name="",this.value="",this.data=[]}updated(e){if(e.has("data")){const a=this.shadowRoot.querySelector(".list"),i=this.shadowRoot.querySelector(".actions");a.scrollWidth>a.clientWidth&&(i.style.display="flex")}}firstUpdated(){this.data=this.data.map(t=>{var o,d;return{subtitle:t.Subtitulo,title:t.Identifier,description:t.Bajada,images:{desktop:(o=t.imagenes[0])==null?void 0:o.imagen,mobile:(d=t.imagenes[1])==null?void 0:d.imagen},link_button:t.LinkBoton,name_button:t.TextoBoton,analytics:{categoria:(t==null?void 0:t.EventoInteractivoCategoria)||"",etiqueta:(t==null?void 0:t.EventoInteractivoEtiqueta)||"",accion:(t==null?void 0:t.EventoInteractivoAccion)||""}}}),this.requestUpdate();const e=this.shadowRoot.querySelector(".list"),a=this.shadowRoot.querySelector(".prev"),i=this.shadowRoot.querySelector(".next");e.addEventListener("scroll",t=>this.handleScroll(t,a,i)),a.addEventListener("click",this.handlePrev),i.addEventListener("click",this.handleNext)}render(){const e=({subtitle:a,title:i,description:t,images:o,name_button:d="Ver más",link_button:x,analytics:{categoria:u,etiqueta:v,accion:g}={}})=>{const h=({text:s,length:l=100})=>(s==null?void 0:s.length)>l?`${s.substring(0,l)}...`:s,y=()=>{var s;if(u&&v&&g){let l={event:"evento-interactivo","evento-interactivo-categoria":u,"evento-interactivo-accion":g,"evento-interactivo-etiqueta":v};console.log("event triggered",l),(s=window==null?void 0:window.dataLayer)==null||s.push(l)}};return f`
<article class="card">
<div class="card__image">
<picture>
<source media="(min-width: 600px)" srcset="${o==null?void 0:o.desktop}">
<img src="${o==null?void 0:o.mobile}" alt="${i}">
</picture>
</div>
<div class="card__content">
<cas-text variant="body2"
>${h({text:a,length:38})}</cas-text
>
<cas-text variant="headline2"
>${h({text:i,length:38})}</cas-text
>
<cas-text variant="caption2"
>${h({text:t,length:83})}</cas-text
>
<div class="card__link">
<a href="${x}" target="_blank" class="button" ="${y}">
<cas-text variant="footnote1">${d}</cas-text>
</a>
</div>
</div>
</article>
`};return f`
<section class="container">
<div class="list">${this.data.map(a=>e(a))}</div>
<div class="actions">
<button class="prev" disabled>
<cas-icon
disabled
variant="flat"
name="flat-arrowLeft"
size="16"
></cas-icon>
</button>
<button class="next">
<cas-icon
disabled
variant="flat"
name="flat-arrowRight"
size="16"
></cas-icon>
</button>
</div>
</section>
`}}r(p,"styles",S),r(p,"shadowRootOptions",{...b.shadowRootOptions,mode:"open"}),r(p,"properties",{name:{type:String},value:{type:String},data:{type:Array}});customElements.get("ca-banners-cta")||customElements.define("ca-banners-cta",p);