blob: 26bf5f7f3f9143df6969cc94ea89fee61187c466 [file] [log] [blame]
/**
* @module modules/multi-input-sk
* @description <h2><code>multi-input-sk</code></h2>
*
* multi-input-sk behaves similarly to <input type="text"> but its value is a
* string[].
*/
import { define } from 'elements-sk/define';
import { html } from 'lit-html';
import { ElementSk } from '../../../infra-sk/modules/ElementSk';
import { $$ } from 'common-sk/modules/dom';
import 'elements-sk/icon/close-icon-sk';
export class MultiInputSk extends ElementSk {
private static template = (ele: MultiInputSk) => html`
<div class="input-container">
${ele._values.map(
(value: string, index: number) => html`
<div class="input-item">
${value}
<a
@click=${() => {
ele._values.splice(index, 1);
ele._render();
ele.dispatchEvent(new Event('change', { bubbles: true }));
}}
>
<close-icon-sk></close-icon-sk>
</a>
</div>
`
)}
<input type="text" @change=${(ev: Event) => {
ev.stopPropagation();
const inp = $$<HTMLInputElement>('input', ele)!;
ele._values.push(inp.value);
inp.value = '';
ele._render();
ele.dispatchEvent(new Event('change', { bubbles: true }));
}}></input>
</div>
`;
private _values: string[] = [];
get values(): string[] {
return this._values.slice();
}
set values(values: string[]) {
this._values = values.slice();
this._render();
}
constructor() {
super(MultiInputSk.template);
}
connectedCallback() {
super.connectedCallback();
this._render();
}
}
define('multi-input-sk', MultiInputSk);