@webwriter/flowchart
Version:
Create programming flowcharts with interactive tasks. Use standardized Elements such as loops and Branchings.
112 lines (102 loc) • 3.02 kB
text/typescript
import { LitElement, html, css, } from 'lit';
import { property, customElement } from 'lit/decorators.js';
('custom-prompt')
export class CustomPrompt extends LitElement {
({ type: String }) accessor label: string;
({ type: Function }) accessor onSubmit: (value: string) => void;
({ type: Function }) accessor onCancel: () => void;
static styles = css`
:host {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 20px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.6);
z-index: 1000;
background-color: var(--menu-color);
border-radius: var(--border-r);
display: flex;
flex-direction: column;
}
label {
color: white;
font-family: 'Arial';
margin-bottom: 10px;
margin-right: 10px;
}
input {
background-color: #546c7e;
border-radius: var(--border-r);
color: white;
margin-bottom: 10px;
padding: 10px;
font-size: 16px;
}
button {
background-color: var(--button-color);
color: white;
border: none;
width: 50%;
border-radius: var(--border-r);
font-family: 'Arial';
font-size: 12px;
padding: 10px;
margin-bottom: 5px;
margin-top: 5px;
transition: background-color 0.3s;
}
button:hover {
background-color: var(--hover-color);
}
button:last-child {
margin-left: 10px;
}
button:active {
background-color: var(--button-color);
box-shadow: 0px 0px 5px var(--hover-color);
}
.button-container {
display: flex;
}
`;
render() {
return html`
<div>
<label>${this.label}</label>
<input type="text" @keyup="${this.handleKeyUp}" />
<div class="button-container">
<button @click="${this.handleCancel}">Abbrechen</button>
<button @click="${this.handleSubmit}">OK</button>
</div>
</div>
`;
}
handleKeyUp(event: KeyboardEvent) {
if (event.key === 'Enter') {
this.handleSubmit();
} else if (event.key === 'Escape') {
this.handleCancel();
}
}
handleSubmit() {
const input = this.shadowRoot.querySelector('input');
if (input) {
this.onSubmit(input.value);
input.value = '';
}
}
handleCancel() {
const input = this.shadowRoot.querySelector('input');
if (input) {
input.value = '';
}
this.onCancel();
}
setInputValue(value: string) {
const inputElement = this.shadowRoot.querySelector('input');
if (inputElement) {
inputElement.value = value;
}
}
}