import {LitElement, html, css, unsafeCSS} from 'lit';
import {customElement, property} from 'lit/decorators.js';
import { breakpoints } from '../../breakpoints';
/**
* Title block.
*
* @slot - This element has a slot
*/
@customElement('iu-heading')
export class Heading extends LitElement {
static override styles = css`
:host{
display: block;
margin-top: var(--iu-heading-margin-top, 0);
margin-bottom: var(--iu-heading-margin-bottom, var(--iu-spacing-block-sm));
--iu-heading-color: var(--iu-color-black);
--iu-heading-link-color: var(--iu-color-grey-300);
}
h1,h2,h3,h4,h5,h6{
color: var(--iu-heading-color);
margin: 0;
font-weight: 400;
}
.size-1 h1,
.size-1 h2,
.size-1 h3,
.size-1 h4,
.size-1 h5,
.size-1 h5
{
font: var(--iu-f-lg);
}
.size-2 h1,
.size-2 h2,
.size-2 h3,
.size-2 h4,
.size-2 h5,
.size-2 h5
{
font: var(--iu-f-2xl);
}
.inner{
// width: calc(100% / 12 * 11);
width: 100%;
border-top: 1px solid var(--iu-color-black);
padding-top: 0.75rem;
}
@media ${unsafeCSS(breakpoints.md)} {
.inner{
display: flex;
justify-content: space-between;
align-items: baseline;
}
}
.inner.no-divider{
border-top: 0;
padding-top: 0;
}
.inner.has-link{
width: 100%;
}
a{
font: var(--iu-f-lg);
text-decoration: none !important;
color: var(--iu-heading-link-color);
flex-shrink: 0;
}
iu-container{
margin-bottom: 0;
}
`;
@property() text = '';
@property() href = '';
@property() link = '';
@property({type: Number}) size = 1;
@property({type: Number}) tag = 2;
@property({type: Boolean}) noDivider = false;
@property({type: Boolean, reflect: true}) nested: boolean = false;
override render() {
const linkTemplate = this.href
? html`<a href="${this.href}" part="link">${this.link}</a>`
: null;
const getHeadingTemplate = (tag, text) => {
switch (tag) {
case 1:
return html`<h1 part="title">${text}</h1>`;
case 2:
return html`<h2 part="title">${text}</h2>`;
case 3:
return html`<h3 part="title">${text}</h3>`;
case 4:
return html`<h4 part="title">${text}</h4>`;
case 5:
return html`<h5 part="title">${text}</h5>`;
case 6:
return html`<h6 part="title">${text}</h6>`;
default:
return html`<h2 part="title">${text}</h2>`;
}
};
const contentTemplate = getHeadingTemplate(this.tag, this.text);
return html`
<iu-container ?nested=${this.nested}>
<div class="inner size-${this.size} ${this.noDivider ? 'no-divider' : ''} ${this.href ? 'has-link' : ''}">
${contentTemplate}
${linkTemplate}
</div>
</iu-container>
`;
}
}
declare global {
interface HTMLElementTagNameMap {
'iu-heading': Heading;
}
}