From 916bcbea80f4c75d54f42bb5b60af2f665152da2 Mon Sep 17 00:00:00 2001 From: pk Date: Sun, 15 Jun 2025 23:28:49 +0200 Subject: [PATCH] Initial implementation --- README.md | 2 +- package.json | 9 +++-- tp-element.js | 35 ------------------ tp-settings-grid-line.js | 55 ++++++++++++++++++++++++++++ tp-settings-grid.js | 79 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 140 insertions(+), 40 deletions(-) delete mode 100644 tp-element.js create mode 100644 tp-settings-grid-line.js create mode 100644 tp-settings-grid.js diff --git a/README.md b/README.md index 1ab27b7..df2c493 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# tp-element +# tp-settings-grid diff --git a/package.json b/package.json index 24f0225..b2a6917 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,19 @@ { - "name": "@tp/tp-element", - "version": "0.0.1", + "name": "@tp/tp-settings-grid", + "version": "1.0.0", "description": "", - "main": "tp-element.js", + "main": "tp-settings-grid.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", - "url": "https://gitea.codeblob.work/tp-elements/tp-element.git" + "url": "https://gitea.codeblob.work/tp-elements/tp-settings-grid.git" }, "author": "trading_peter", "license": "Apache-2.0", "dependencies": { + "@tp/tp-media-query": "^1.0.0", "lit": "^3.0.0" } } diff --git a/tp-element.js b/tp-element.js deleted file mode 100644 index 6195006..0000000 --- a/tp-element.js +++ /dev/null @@ -1,35 +0,0 @@ -/** -@license -Copyright (c) 2024 trading_peter -This program is available under Apache License Version 2.0 -*/ - -import { LitElement, html, css } from 'lit'; - -class TpElement extends LitElement { - static get styles() { - return [ - css` - :host { - display: block; - } - ` - ]; - } - - render() { - const { } = this; - - return html` - - `; - } - - static get properties() { - return { }; - } - - -} - -window.customElements.define('tp-element', TpElement); diff --git a/tp-settings-grid-line.js b/tp-settings-grid-line.js new file mode 100644 index 0000000..ab55f02 --- /dev/null +++ b/tp-settings-grid-line.js @@ -0,0 +1,55 @@ +/** +@license +Copyright (c) 2025 trading_peter +This program is available under Apache License Version 2.0 +*/ + +import { LitElement, html, css } from 'lit'; + +class TpSettingsGridLine extends LitElement { + static get styles() { + return [ + css` + :host { + display: contents; + align-items: center; + } + + :host([labelTop]) .label { + align-self: flex-start; + } + + .control { + display: flex; + flex-direction: row; + align-items: center; + gap: 10px; + justify-self: var(--tp-settings-grid-control-align, flex-start); + } + ` + ]; + } + + render() { + const { } = this; + + return html` +
+ +
+
+ +
+ `; + } + + static get properties() { + return { + labelTop: { type: Boolean, reflect: true } + }; + } + + +} + +window.customElements.define('tp-settings-grid-line', TpSettingsGridLine); \ No newline at end of file diff --git a/tp-settings-grid.js b/tp-settings-grid.js new file mode 100644 index 0000000..83c15c3 --- /dev/null +++ b/tp-settings-grid.js @@ -0,0 +1,79 @@ +/** +@license +Copyright (c) 2025 trading_peter +This program is available under Apache License Version 2.0 +*/ + +import '@tp/tp-media-query/tp-media-query.js'; +import { LitElement, html, css } from 'lit'; + +class TpElement extends LitElement { + static get styles() { + return [ + css` + :host { + display: block; + } + + .grid { + display: grid; + align-items: center; + grid-template-columns: auto 1fr; + grid-column-gap: var(--tp-settings-grid-column-gap, 20px); + grid-row-gap: var(--tp-settings-grid-row-gap, 20px); + } + + :host([stretchLabels]:not([responsive])) .grid { + grid-template-columns: 1fr var(--tp-settings-grid-control-col-width, auto); + } + + :host([alignControlsRight]:not([responsive])) ::slotted(tp-settings-grid-line) { + --tp-settings-grid-control-align: flex-end; + } + + :host([responsive]) .grid { + grid-template-columns: 1fr; + } + + :host([responsive]) ::slotted(tp-settings-grid-line) { + display: block; + --tp-settings-grid-control-align: auto; + } + ` + ]; + } + + render() { + const { breakpoint } = this; + + return html` + + +
+ +
+ `; + } + + static get properties() { + return { + stretchLabels: { type: Boolean, reflect: true }, + alignControlsRight: { type: Boolean, reflect: true }, + breakpoint: { type: Number }, + responsive: { type: Boolean, reflect: true } + }; + } + + constructor() { + super(); + this.stretchLabels = false; + this.alignControlsRight = false; + this.responsive = 600; // Default responsive breakpoint + } + + _onMediaQueryUpdate(event) { + this.responsive = event.detail; + } +} + +window.customElements.define('tp-settings-grid', TpElement);