From ccae4fc7cd17198afe4dc68f615fd6005ad977f5 Mon Sep 17 00:00:00 2001 From: pk Date: Tue, 18 Feb 2025 22:44:36 +0100 Subject: [PATCH] Initial implementation --- README.md | 43 +++++++++++++++++++++++++- package.json | 8 ++--- tp-element.js | 35 --------------------- tp-timeout-strip.js | 75 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 40 deletions(-) delete mode 100644 tp-element.js create mode 100644 tp-timeout-strip.js diff --git a/README.md b/README.md index 1ab27b7..d80e29a 100644 --- a/README.md +++ b/README.md @@ -1 +1,42 @@ -# tp-element +# tp-timeout-strip + +Shows a small color strip that decreases in size over time to indicate a delay is currently elapsing. Can be used to indicate when a temporary popup will be automatically be closed. + +## Installation + +```bash +npm install @tp/tp-timeout-strip +``` + +## Usage + +```html + +``` + +```js +const strip = document.querySelector('tp-timeout-strip'); + +// Show the strip and start the timeout animation (3000ms = 3 seconds) +strip.show(3000); + +// Listen for when the timeout completes +strip.addEventListener('timeout', () => { + console.log('Timeout elapsed!'); +}); +``` + +## Styling + +The component can be customized using CSS custom properties: + +```css +tp-timeout-strip { + /* Change the strip color (default: #000) */ + --tp-timeout-strip-color: #ff4444; + + /* Change the strip height (default: 3px) */ + --tp-timeout-strip-width: 4px; +} +``` + diff --git a/package.json b/package.json index 24f0225..4d439bc 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { - "name": "@tp/tp-element", - "version": "0.0.1", + "name": "@tp/tp-timeout-strip", + "version": "1.0.0", "description": "", - "main": "tp-element.js", + "main": "tp-timeout-strip.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-timeout-strip.git" }, "author": "trading_peter", "license": "Apache-2.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-timeout-strip.js b/tp-timeout-strip.js new file mode 100644 index 0000000..9fa183f --- /dev/null +++ b/tp-timeout-strip.js @@ -0,0 +1,75 @@ +/** +@license +Copyright (c) 2025 trading_peter +This program is available under Apache License Version 2.0 +*/ + +import { LitElement, html, css } from 'lit'; + +class TpTimeoutStrip extends LitElement { + static get styles() { + return [ + css` + :host { + display: block; + height: var(--tp-timeout-strip-width, 3px); + pointer-events: none; + } + + .strip { + height: 100%; + width: 100%; + background: var(--tp-timeout-strip-color, #000); + transform-origin: left; + display: none; + } + + .strip.active { + display: block; + animation: shrink linear forwards; + } + + @keyframes shrink { + from { + transform: scaleX(1); + } + to { + transform: scaleX(0); + } + } + ` + ]; + } + + render() { + return html` +
+ `; + } + + static get properties() { + return { + active: { type: Boolean }, + timeout: { type: Number } + }; + } + + constructor() { + super(); + this.active = false; + this.timeout = 0; + this._onAnimationEnd = this._onAnimationEnd.bind(this); + } + + show(timeout) { + this.timeout = timeout; + this.active = true; + } + + _onAnimationEnd() { + this.active = false; + this.dispatchEvent(new CustomEvent('timeout', { detail: null, bubbles: true, composed: true })); + } +} + +window.customElements.define('tp-timeout-strip', TpTimeoutStrip); \ No newline at end of file