/** * @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-list') export class List extends LitElement { static override styles = css` :host{ display: block; margin-bottom: var(--iu-spacing-block); } :host iu-container{ display: grid; grid-template-columns: repeat( var(--list-columns-sm), 1fr); grid-gap: var(--iu-grid-gutter); } @media ${unsafeCSS(breakpoints.md)} { :host iu-container{ grid-template-columns: repeat( var(--list-columns-md, var(--list-columns-sm)), 1fr); } } @media ${unsafeCSS(breakpoints.lg)} { :host iu-container{ grid-template-columns: repeat( var(--list-columns-lg, var(--list-columns-md, var(--list-columns-sm))), 1fr); } } @media ${unsafeCSS(breakpoints.xl)} { :host iu-container{ grid-template-columns: repeat( var(--list-columns-xl, var(--list-columns-lg, var(--list-columns-md, var(--list-columns-sm)))), 1fr); } } `; @property({type: Number}) sm? = 2; @property({type: Number}) md?: number; @property({type: Number}) lg?: number; @property({type: Number}) xl?: number; @property({type: Boolean, reflect: true}) nested?: boolean = false; override updated(changedProperties) { const sizes = ['sm', 'md', 'lg', 'xl']; sizes.forEach((size) => { if (changedProperties.has(size)) { const value = this[size]; // Update the CSS variable dynamically this.style.setProperty(`--list-columns-${size}`, value?.toString() || ''); } }); } override render() { return html` <iu-container class="${this.nested ? 'is-nested' : ''}"> <slot></slot> </iu-container> `; } } declare global { interface HTMLElementTagNameMap { 'iu-list': List; } }