diff --git a/packages/item/package.json b/packages/item/package.json index 80e8431c71..4fba9ae2ff 100644 --- a/packages/item/package.json +++ b/packages/item/package.json @@ -21,6 +21,8 @@ "type": "module", "files": [ "src", + "!src/vaadin-lit-item.d.ts", + "!src/vaadin-lit-item.js", "theme", "vaadin-*.d.ts", "vaadin-*.js", diff --git a/packages/item/src/vaadin-lit-item.d.ts b/packages/item/src/vaadin-lit-item.d.ts new file mode 100644 index 0000000000..9ae707ae6d --- /dev/null +++ b/packages/item/src/vaadin-lit-item.d.ts @@ -0,0 +1 @@ +export * from './vaadin-item.js'; diff --git a/packages/item/src/vaadin-lit-item.js b/packages/item/src/vaadin-lit-item.js new file mode 100644 index 0000000000..04a4e09cd1 --- /dev/null +++ b/packages/item/src/vaadin-lit-item.js @@ -0,0 +1,59 @@ +/** + * @license + * Copyright (c) 2017 - 2024 Vaadin Ltd. + * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/ + */ +import { css, html, LitElement } from 'lit'; +import { defineCustomElement } from '@vaadin/component-base/src/define.js'; +import { DirMixin } from '@vaadin/component-base/src/dir-mixin.js'; +import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js'; +import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js'; +import { ItemMixin } from './vaadin-item-mixin.js'; + +/** + * LitElement based version of `` 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 Item extends ItemMixin(ThemableMixin(DirMixin(PolylitMixin(LitElement)))) { + static get is() { + return 'vaadin-item'; + } + + static get styles() { + return css` + :host { + display: inline-block; + } + + :host([hidden]) { + display: none !important; + } + `; + } + + /** @protected */ + render() { + return html` + +
+ +
+ `; + } + + /** @protected */ + ready() { + super.ready(); + + this.setAttribute('role', 'option'); + } +} + +defineCustomElement(Item); + +export { Item }; diff --git a/packages/item/test/item-lit.test.js b/packages/item/test/item-lit.test.js new file mode 100644 index 0000000000..fd7e871785 --- /dev/null +++ b/packages/item/test/item-lit.test.js @@ -0,0 +1,2 @@ +import '../src/vaadin-lit-item.js'; +import './item.common.js'; diff --git a/packages/item/test/item-polymer.test.js b/packages/item/test/item-polymer.test.js new file mode 100644 index 0000000000..bdc2662ba9 --- /dev/null +++ b/packages/item/test/item-polymer.test.js @@ -0,0 +1,2 @@ +import '../src/vaadin-item.js'; +import './item.common.js'; diff --git a/packages/item/test/item.test.js b/packages/item/test/item.common.js similarity index 91% rename from packages/item/test/item.test.js rename to packages/item/test/item.common.js index 382d49575d..b3d7e730a4 100644 --- a/packages/item/test/item.test.js +++ b/packages/item/test/item.common.js @@ -1,12 +1,12 @@ import { expect } from '@vaadin/chai-plugins'; -import { fixtureSync } from '@vaadin/testing-helpers'; -import '../vaadin-item.js'; +import { fixtureSync, nextRender } from '@vaadin/testing-helpers'; describe('vaadin-item', () => { let item, tagName; - beforeEach(() => { + beforeEach(async () => { item = fixtureSync('label'); + await nextRender(); tagName = item.tagName.toLowerCase(); });