UNPKG

@scoped-vaadin/grid

Version:

A free, flexible and high-quality Web Component for showing large amounts of tabular data

79 lines (70 loc) 2.52 kB
/** * @license * Copyright (c) 2017 - 2024 Vaadin Ltd. * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/ */ import './vaadin-lit-grid-column.js'; import { html, LitElement } from 'lit'; import { ifDefined } from 'lit/directives/if-defined.js'; import { isIOS, isSafari } from '@scoped-vaadin/component-base/src/browser-utils.js'; import { defineCustomElement } from '@scoped-vaadin/component-base/src/define.js'; import { ElementMixin } from '@scoped-vaadin/component-base/src/element-mixin.js'; import { PolylitMixin } from '@scoped-vaadin/component-base/src/polylit-mixin.js'; import { ThemableMixin } from '@scoped-vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js'; import { GridMixin } from './vaadin-grid-mixin.js'; import { gridStyles } from './vaadin-grid-styles.js'; /** * LitElement based version of `<vaadin24-grid>` web component. * * ## Disclaimer * * This component is an experiment and not yet a part of Vaadin platform. * There is no ETA regarding specific Vaadin version where it'll land. * Feel free to try this code in your apps as per Apache 2.0 license. */ class Grid extends GridMixin(ElementMixin(ThemableMixin(PolylitMixin(LitElement)))) { static get is() { return 'vaadin24-grid'; } static get styles() { return gridStyles; } /** @protected */ render() { return html` <div id="scroller" safari="${isSafari}" ios="${isIOS}" ?loading="${this.loading}" column-reordering-allowed="${this.columnReorderingAllowed}" ?empty-state="${this.__emptyState}" > <table id="table" role="treegrid" aria-multiselectable="true" tabindex="0" aria-label="${ifDefined(this.accessibleName)}" > <caption id="sizer" part="row"></caption> <thead id="header" role="rowgroup"></thead> <tbody id="items" role="rowgroup"></tbody> <tbody id="emptystatebody"> <tr id="emptystaterow"> <td part="empty-state" id="emptystatecell" tabindex="0"> <slot name="empty-state" id="emptystateslot"></slot> </td> </tr> </tbody> <tfoot id="footer" role="rowgroup"></tfoot> </table> <div part="reorder-ghost"></div> </div> <slot name="tooltip"></slot> <div id="focusexit" tabindex="0"></div> `; } } defineCustomElement(Grid); export { Grid };