diff --git a/packages/common/index.js b/packages/common/index.js index bf45336adefb38b0cdff45e5e54c31ded734d956..c4e7bb0281a57e27aaef99755e17e35cb21d0b76 100644 --- a/packages/common/index.js +++ b/packages/common/index.js @@ -1,6 +1,12 @@ import {EventBus} from './src/eventbus.js'; import {createLinkedAbortController, createTimeoutAbortSignal} from './src/abort.js'; import {getIconSVGURL, getIconCSS, Icon} from './src/icon.js'; +import {MiniSpinner} from './src/mini-spinner.js'; +import {Button} from './src/button.js'; +import {Spinner} from './src/spinner.js'; export {EventBus, createLinkedAbortController, createTimeoutAbortSignal}; -export {getIconSVGURL, getIconCSS, Icon}; \ No newline at end of file +export {getIconSVGURL, getIconCSS, Icon}; +export {MiniSpinner}; +export {Button}; +export {Spinner}; \ No newline at end of file diff --git a/packages/common/test/unit.js b/packages/common/test/unit.js index e444d46dde9214299a00ea3b8abe7023054e207a..0f0d92e1c38d8f63942ccc6f742a107536322468 100644 --- a/packages/common/test/unit.js +++ b/packages/common/test/unit.js @@ -1,8 +1,6 @@ import {expect, assert} from 'chai'; import * as utils from '../utils'; import * as styles from '../styles'; -import '../vpu-mini-spinner.js'; -import '../vpu-spinner.js'; import '../jsonld.js'; suite('utils', () => { diff --git a/packages/common/vpu-button.js b/packages/common/vpu-button.js deleted file mode 100644 index f5fff6cc36016c30e15c44d50d4c17cd45148743..0000000000000000000000000000000000000000 --- a/packages/common/vpu-button.js +++ /dev/null @@ -1,77 +0,0 @@ -import {html, LitElement, css} from 'lit-element'; -import * as commonUtils from './utils.js'; -import * as commonStyles from './styles.js'; - -/** - * vpu-button implements a button with Bulma styles and automatic spinner and - * disabling if button is clicked - * - * Use the attribute "no-spinner-on-click" to disable the spinner, then you can - * start it with start() and stop it with stop() - * - * Type can be is-primary/is-info/is-success/is-warning/is-danger - */ -class Button extends LitElement { - constructor() { - super(); - this.value = ""; - this.type = ""; - this.spinner = false; - this.noSpinnerOnClick = false; - this.disabled = false; - } - - connectedCallback() { - super.connectedCallback(); - } - - static get properties() { - return { - value: { type: String }, - type: { type: String }, - spinner: { type: Boolean }, - noSpinnerOnClick: { type: Boolean, attribute: 'no-spinner-on-click' }, - disabled: { type: Boolean, reflect: true }, - }; - } - - clickHandler() { - if (!this.noSpinnerOnClick) { - this.start(); - } - } - - start() { - this.spinner = true; - this.disabled = true; - } - - stop() { - this.spinner = false; - this.disabled = false; - } - - isDisabled() { - return this.disabled; - } - - static get styles() { - // language=css - return css` - ${commonStyles.getThemeCSS()} - ${commonStyles.getButtonCSS()} - - vpu-mini-spinner { margin-left: 0.5em; } - `; - } - - render() { - return html` - <button @click="${this.clickHandler}" class="button ${this.type}" ?disabled="${this.disabled}"> - ${this.value} <vpu-mini-spinner style="display: ${this.spinner ? "inline" : "none"}"></vpu-mini-spinner> - </button> - `; - } -} - -commonUtils.defineCustomElement('vpu-button', Button); diff --git a/packages/common/vpu-common-demo.js b/packages/common/vpu-common-demo.js index 355270c6a2851b0c0135d1c6659b0b93b3edb238..323acc882e3d01e5eedc7864c094a44db56c8199 100644 --- a/packages/common/vpu-common-demo.js +++ b/packages/common/vpu-common-demo.js @@ -3,10 +3,7 @@ import {css, html, LitElement} from 'lit-element'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import * as commonUtils from './utils.js'; import * as commonStyles from './styles.js'; -import './vpu-mini-spinner.js'; -import './vpu-spinner.js'; -import {getIconCSS, Icon} from './index.js'; -import './vpu-button.js'; +import {getIconCSS, Icon, MiniSpinner, Button, Spinner} from './index.js'; class VpuCommonDemo extends ScopedElementsMixin(LitElement) { constructor() { @@ -18,9 +15,9 @@ class VpuCommonDemo extends ScopedElementsMixin(LitElement) { static get scopedElements() { return { 'vpu-icon': Icon, - 'vpu-mini-spinner': customElements.get('vpu-mini-spinner'), - 'vpu-spinner': customElements.get('vpu-spinner'), - 'vpu-button': customElements.get('vpu-button'), + 'vpu-mini-spinner': MiniSpinner, + 'vpu-spinner': Spinner, + 'vpu-button': Button, 'vpu-auth': customElements.get('vpu-auth'), }; } diff --git a/packages/common/vpu-mini-spinner.js b/packages/common/vpu-mini-spinner.js deleted file mode 100644 index 5de1725939ee76cb68e810d32a26259946d6d768..0000000000000000000000000000000000000000 --- a/packages/common/vpu-mini-spinner.js +++ /dev/null @@ -1,74 +0,0 @@ -import {html, LitElement, css} from 'lit-element'; -import * as commonUtils from './utils.js'; - - -class MiniSpinner extends LitElement { - constructor() { - super(); - this.text = ""; - } - - static get properties() { - return { - text: { type: String }, - }; - } - - static get styles() { - // language=css - return css` - .outer { - display: inline-block; - } - .inner { - display: flex; - } - .ring { - display: inline-block; - position: relative; - width: 1em; - height: 1em; - } - .ring div { - box-sizing: border-box; - display: block; - position: absolute; - width: 100%; - height: 100%; - border: 0.2em solid currentColor; - border-radius: 50%; - animation: ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; - border-color: currentColor transparent transparent transparent; - } - .ring div:nth-child(1) { - animation-delay: -0.45s; - } - .ring div:nth-child(2) { - animation-delay: -0.3s; - } - .ring div:nth-child(3) { - animation-delay: -0.15s; - } - @keyframes ring { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } - } - .text { - display: inline-block; - margin-left: 0.5em; - font-size: 0.7em; - }`; - } - - render() { - const textHtml = this.text !== "" ? html`<div class="text">${this.text}</div>` : html``; - - return html`<div class="outer"><div class="inner"><div class="ring"><div></div><div></div><div></div><div></div></div>${textHtml}</div></div>`; - } -} - -commonUtils.defineCustomElement('vpu-mini-spinner', MiniSpinner); diff --git a/packages/common/vpu-spinner.js b/packages/common/vpu-spinner.js deleted file mode 100644 index f06618d8a9c794b97aaddf408314e91747e8c6b2..0000000000000000000000000000000000000000 --- a/packages/common/vpu-spinner.js +++ /dev/null @@ -1,122 +0,0 @@ -// Note: This doesn't have a lit-element dependency on purpose, so it can be loaded faster before -// other web components (assuming it's not bundled) - -class Spinner extends HTMLElement { - - constructor() { - super(); - let shadowRoot = this.attachShadow({mode: 'open'}); - shadowRoot.innerHTML = ` -<style> -:host { - display: block; -} -#all-spinner-tuglogo { - width:130px; - height:130px; - position:relative; - background-color:transparent; - margin:0 auto; -} - -.all-spinner-tuglogo-box { - width:20%; - height:20%; - background-color:#e4154b; - position:absolute; - top:50%; - left:50%; - animation-duration: 1.6s; - animation-direction:alternate; - animation-iteration-count:infinite; - animation-fill-mode:both; - animation-timing-function:ease; - transition: transform 0.5s, background-color 0.2s 0.5s; -} - -#all-spinner-tuglogo-box-1 { - animation-name: box1; - transform:translateX(-160%) translateY(-50%); -} - -#all-spinner-tuglogo-box-2 { - transform-origin:0 0; - animation-name: box2; -transform:scale(1) translateX(-50%) translateY(-50%); -} - -#all-spinner-tuglogo-box-3 { - - animation-name: box3; - animation-delay:0.3s; - transform:translateX(60%) translateY(-50%); visibility:visible; -} - -#all-spinner-tuglogo-box-4 { - - animation-name: box4; - animation-delay:0.1s; -transform:translateX(0%) translateY(-100%); visibility:visible; -} - -#all-spinner-tuglogo-box-5 { - - animation-name: box5; - animation-delay:0.2s; -transform:translateX(-100%) translateY(0%); visibility:visible; -} - -@keyframes box1 { - 0% { transform:translateX(-50%) translateY(-50%); visibility:hidden; } - 50% { transform:translateX(-50%) translateY(-50%); visibility:hidden; } - 70% { transform:translateX(-170%) translateY(-50%); visibility:visible;} - 80% { transform:translateX(-160%) translateY(-50%); visibility:visible;} - 100% { transform:translateX(-160%) translateY(-50%); visibility:visible;} -} - -@keyframes box2 { - 0% { transform:scale(0) translateX(-50%) translateY(-50%);} - 5% { transform:scale(0) translateX(-50%) translateY(-50%);} - 30% { transform:scale(1.2) translateX(-50%) translateY(-50%);} - 35% { transform:scale(1) translateX(-50%) translateY(-50%);} - 100% { transform:scale(1) translateX(-50%) translateY(-50%);} - -} - -@keyframes box3 { - 0% { transform:translateX(-50%) translateY(-50%); visibility:hidden; } - 50% { transform:translateX(-50%) translateY(-50%); visibility:hidden; } - 70% { transform:translateX(70%) translateY(-50%); visibility:visible;} - 80% { transform:translateX(60%) translateY(-50%); visibility:visible;} - 100% { transform:translateX(60%) translateY(-50%); visibility:visible;} -} - -@keyframes box4 { - 0% { transform:translateX(-50%) translateY(-50%); visibility:hidden; } - 50% { transform:translateX(-50%) translateY(-50%); visibility:hidden; } - 70% { transform:translateX(10%) translateY(-110%); visibility:visible;} - 80% { transform:translateX(0%) translateY(-100%); visibility:visible;} - 100% { transform:translateX(0%) translateY(-100%); visibility:visible;} -} -@keyframes box5 { - 0% { transform:translateX(-50%) translateY(-50%); visibility:hidden; } - 50% { transform:translateX(-50%) translateY(-50%); visibility:hidden; } - 70% { transform:translateX(-110%) translateY(10%); visibility:visible;} - 80% { transform:translateX(-100%) translateY(0%); visibility:visible;} - 100% { transform:translateX(-100%) translateY(0%); visibility:visible;} -} -</style> - -<div id="all-spinner-tuglogo"> - <div id="all-spinner-tuglogo-box-1" class="all-spinner-tuglogo-box"></div> - <div id="all-spinner-tuglogo-box-2" class="all-spinner-tuglogo-box"></div> - <div id="all-spinner-tuglogo-box-3" class="all-spinner-tuglogo-box"></div> - <div id="all-spinner-tuglogo-box-4" class="all-spinner-tuglogo-box"></div> - <div id="all-spinner-tuglogo-box-5" class="all-spinner-tuglogo-box"></div> -</div>`; - } -} - -// customElements is undefined in Edge -if (typeof customElements != 'undefined' && !customElements.get('vpu-spinner')) - customElements.define('vpu-spinner', Spinner);