Skip to content
Snippets Groups Projects
adjacent-image-text.tsx 3.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • import {Component, ComponentInterface, Prop, h, Host, Element} from '@stencil/core';
    
      tag: 'hy-adjacent-image-text',
      styleUrl: 'adjacent-image-text.scss',
    
    export class AdjacentImageText implements ComponentInterface {
    
      @Element() el: HTMLElement;
      @Prop() headerstyle: string = 'default';
    
      @Prop() imageAlt: string = '';
    
      @Prop() textTitle?: string;
      @Prop() textDescription: string = null;
    
      @Prop() mainUrl?: string;
      @Prop() mainUrlTitle?: string;
      @Prop() mainUrlAriaLabel?: string;
      @Prop() mainUrlIsExternal: boolean = false;
    
    
      @Prop() mainUrl2?: string;
      @Prop() mainUrlTitle2?: string;
      @Prop() mainUrlAriaLabel2?: string;
      @Prop() mainUrlIsExternal2: boolean = false;
    
      componentDidLoad() {
        let hyMainDiv = this.el.closest('.hy-main');
        if (hyMainDiv) {
          if (!hyMainDiv.classList.contains('with-sidebar')) {
            this.headerstyle = 'large';
          }
        }
      }
    
    
        const classAttributes = ['hy-adjacent-image-text', `hy-adjacent-image-text__${this.headerstyle}`].join(' ');
    
          'hy-adjacent-image-text__text-container--left',
    
        const imageLeftClassAttributes = ['hy-adjacent-image-text__image-container'].join(' ');
    
        const aspectRatioWidth = 6;
        const aspectRatioHeight = 4;
    
        const aspect = (aspectRatioHeight / aspectRatioWidth) * 100;
        const aspectRatio = {
    
          '--aspectRatio': `${aspect}%` as 'aspectRatio',
    
          <Host>
            <div class={classAttributes}>
              <div class={imageLeftClassAttributes} style={aspectRatio}>
                <img alt={this.imageAlt} class="hy-image__image" src={this.imageUrl} />
    
              <div class={contentClassAttributes}>
                <div class="hy-adjacent-image-text__text-container__info-wrapper">
                  <div class="hy-adjacent-image-text__text-container__title">{this.textTitle}</div>
    
                  <p
                    class={`hy-adjacent-image-text__text-container__description hy-adjacent-image-text__text-container__description__${this.headerstyle}`}
                  >
                    {this.textDescription}
                  </p>
    
                </div>
                <div class="hy-adjacent-image-text__text-container__links-wrapper">
                  {this.mainUrl && (
                    <div class="hy-adjacent-image-text__text-container__link">
                      <hy-cta-link
                        link-content={this.mainUrlTitle}
                        sc-label={this.mainUrlAriaLabel}
                        url={this.mainUrl}
                        is-external={this.mainUrlIsExternal}
                      />
                    </div>
                  )}
                  {this.mainUrl2 && (
                    <div class="hy-adjacent-image-text__text-container__link">
                      <hy-cta-link
                        link-content={this.mainUrlTitle2}
                        sc-label={this.mainUrlAriaLabel2}
                        url={this.mainUrl2}
                        is-external={this.mainUrlIsExternal2}
                      />
                    </div>
                  )}
                </div>
    
            <hy-box mb="1.75, 1.75, 2, 2.5" />