import {LitElement, html, css, unsafeCSS} from 'lit'; import {customElement} from 'lit/decorators.js'; import tbodystyle from './tbody.css?inline'; import theadstyle from './thead.css?inline'; @customElement('obc-table-cell') export class ObcTableCell extends LitElement { override render() { return html` `; } static override styles = css` * { box-sizing: border-box; } :host { display: table-cell; padding-right: 16px; padding-left: 16px; white-space: nowrap; box-sizing: border-box; border-bottom: 1px solid var(--border-divider-color); vertical-align: middle; height: 48px; color: var(--element-active-color); } :host(:first-child) { padding-left: 24px; } :host(:last-child) { padding-right: 24px; } `; } @customElement('obc-table-head-cell') export class ObcTableHeadCell extends LitElement { override render() { return html` `; } static override styles = css` :host { box-sizing: border-box; position: relative; display: table-cell; padding-right: 16px; padding-left: 16px; color: var(--element-active-color); border-bottom: 1px solid var(--border-divider-color); vertical-align: middle; } :host(:first-child) { padding-left: 24px; } :host(:last-child) { padding-right: 24px; } :host(:not(:last-child))::after { content: ''; display: block; position: absolute; top: 4px; bottom: 4px; right: -0.5px; width: 1px; background-color: var(--border-divider-color); border-radius: 1px; } `; } @customElement('obc-table-row') export class ObcTableRow extends LitElement { override render() { return html` `; } static override styles = css` :host { display: table-row; vertical-align: middle; border-bottom: 1px solid var(--border-divider-color); } `; } @customElement('obc-table-header') export class ObcTableHeader extends LitElement { override render() { return html` `; } static override styles = [ unsafeCSS(theadstyle), css` :host { display: table-header-group; position: sticky; top: 0; } `, ]; } @customElement('obc-table-body') export class ObcTableBody extends LitElement { override render() { return html` `; } static override styles = unsafeCSS(tbodystyle); } @customElement('obc-table') export class ObcTable extends LitElement { override render() { return html` `; } static override styles = css` :host { display: table; width: 100%; overflow-y: auto; } `; } declare global { interface HTMLElementTagNameMap { 'obc-table': ObcTable; 'obc-table-row': ObcTableRow; 'obc-table-header': ObcTableHeader; } }