Newer
Older
iuav-ui / src / components / events / event.ts
/**
 * @license
 * Copyright 2019 Google LLC
 * SPDX-License-Identifier: BSD-3-Clause
 */

import {LitElement, html, css, unsafeCSS} from 'lit';
import {customElement, property} from 'lit/decorators.js';
import { breakpoints } from '../../breakpoints';

@customElement('iu-event')

export class Event extends LitElement {
  static override styles = css`
    :host{
      display: block;
    }
    .event{
      padding-top: var(--iu-spacing-2);
      padding-bottom: var(--iu-spacing-2);
      border-top: 1px solid var(--iu-color-grey-200);
      border-bottom: 1px solid var(--iu-color-grey-200);
    }
    @media ${unsafeCSS(breakpoints.md)} {
      .event{
        display: grid;
        grid-template-columns: repeat(12, 1fr);
        gap: var(--iu-grid-gutter);
      }
    }
    .date{
      grid-column: span 2 / span 2;
      font-weight: bold;
      font: var(--iu-f-md);
    }
    @media ${unsafeCSS(breakpoints.lg)} {
      .date span{
        display: block;
      }
    }
    .day{
      margin-left: var(--iu-spacing-0);
    }
    @media ${unsafeCSS(breakpoints.lg)} {
      .day{
        margin-left: 0;
      }
    }
    .info{
      grid-column: span 4 / span 4;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      font: var(--iu-f-md);
    }
    .info span{
      display: block;
    }
    .deadline{
      color: var(--iu-color-grey-300);
    }
    .place{
      font: var(--iu-f-1);
    }
    .content{
      grid-column: span 6 / span 6;
    }
    .title{
      font-weight: bold;
      font: var(--iu-f-md);
      margin-bottom: 0;
      text-decoration: none;
      color: var(--iu-color-black);
    }
    .subtitle{
      font-weight: bold;
      display: block;
      margin-top: var(--iu-spacing-0);
    }
    .excerpt{
      display: block;
      margin-top: var(--iu-spacing-2);
    }
  `;

  @property() weekday : string = '';
  @property() day : string = '';
  @property() time : string = '';
  @property() deadline? : string = '';
  @property() place : string = '';
  @property() href : string = '';
  @property() name : string = '';
  @property() subtitle? : string;
  @property() excerpt? : string;
  
  override render() {
    return html`
      <iu-container>
        <div class="event">
          <div class="date">
            <span class="weekday">${this.weekday}</span>
            <span class="day">${this.day}</span>
          </div>
          <div class="info">
            <div>
              <span class="time">${this.time == '' ? 'Tutto il giorno' : this.time }</span>
              ${this.deadline && html`<span class="deadline">Fino al ${this.deadline}</span>`}
            </div>
            <span class="place">${this.place}</span>
          </div>
          <div class="content">
            <a href="${this.href}" class="title">${this.name}</a>
            ${this.subtitle && html`<span class="subtitle">${this.subtitle}</span>`}
            ${this.excerpt && html`<span class="excerpt">${this.excerpt}</span>`}
          </div>
        </div>
      </iu-container>
    `;
  }

}

declare global {
  interface HTMLElementTagNameMap {
    'iu-event': Event;
  }
}