@operato/input 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/src/ox-input-color-gradient.d.ts +26 -0
  3. package/dist/src/ox-input-color-gradient.js +318 -0
  4. package/dist/src/ox-input-color-gradient.js.map +1 -0
  5. package/dist/src/ox-input-color-stops.d.ts +71 -0
  6. package/dist/src/ox-input-color-stops.js +445 -0
  7. package/dist/src/ox-input-color-stops.js.map +1 -0
  8. package/dist/src/ox-input-color.d.ts +176 -0
  9. package/dist/src/ox-input-color.js +298 -0
  10. package/dist/src/ox-input-color.js.map +1 -0
  11. package/dist/src/ox-input-crontab.d.ts +23 -0
  12. package/dist/src/ox-input-crontab.js +560 -0
  13. package/dist/src/ox-input-crontab.js.map +1 -0
  14. package/dist/src/ox-input-layout/ox-input-card-layout.d.ts +4 -0
  15. package/dist/src/ox-input-layout/ox-input-card-layout.js +57 -0
  16. package/dist/src/ox-input-layout/ox-input-card-layout.js.map +1 -0
  17. package/dist/src/ox-input-layout/ox-input-grid-layout.d.ts +4 -0
  18. package/dist/src/ox-input-layout/ox-input-grid-layout.js +63 -0
  19. package/dist/src/ox-input-layout/ox-input-grid-layout.js.map +1 -0
  20. package/dist/src/ox-input-layout/ox-input-layout.d.ts +5 -0
  21. package/dist/src/ox-input-layout/ox-input-layout.js +73 -0
  22. package/dist/src/ox-input-layout/ox-input-layout.js.map +1 -0
  23. package/dist/src/ox-input-multiple-colors.d.ts +28 -0
  24. package/dist/src/ox-input-multiple-colors.js +113 -0
  25. package/dist/src/ox-input-multiple-colors.js.map +1 -0
  26. package/dist/src/ox-input-options.d.ts +22 -0
  27. package/dist/src/ox-input-options.js +137 -0
  28. package/dist/src/ox-input-options.js.map +1 -0
  29. package/dist/src/ox-input-partition-keys.d.ts +36 -0
  30. package/dist/src/ox-input-partition-keys.js +204 -0
  31. package/dist/src/ox-input-partition-keys.js.map +1 -0
  32. package/dist/src/ox-input-range.d.ts +4 -0
  33. package/dist/src/ox-input-range.js +161 -0
  34. package/dist/src/ox-input-range.js.map +1 -0
  35. package/dist/src/ox-input-scene-component-id.d.ts +11 -0
  36. package/dist/src/ox-input-scene-component-id.js +68 -0
  37. package/dist/src/ox-input-scene-component-id.js.map +1 -0
  38. package/dist/src/ox-input-table.d.ts +8 -0
  39. package/dist/src/ox-input-table.js +379 -0
  40. package/dist/src/ox-input-table.js.map +1 -0
  41. package/dist/src/ox-input-value-map.d.ts +41 -0
  42. package/dist/src/ox-input-value-map.js +279 -0
  43. package/dist/src/ox-input-value-map.js.map +1 -0
  44. package/dist/src/ox-input-value-ranges.d.ts +41 -0
  45. package/dist/src/ox-input-value-ranges.js +298 -0
  46. package/dist/src/ox-input-value-ranges.js.map +1 -0
  47. package/dist/src/ox-input-work-shift.d.ts +33 -0
  48. package/dist/src/ox-input-work-shift.js +229 -0
  49. package/dist/src/ox-input-work-shift.js.map +1 -0
  50. package/dist/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-input-value-ranges.js","sourceRoot":"","sources":["../../src/ox-input-value-ranges.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './ox-input-color'\n\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { OxFormField } from './ox-form-field.js'\n\ntype ValueRange = { default?: any; [fromto: string]: any }\ntype ArrayedRange = { from: any; to: any; value: any }\n\n/**\nrange value editor element\n\nExample:\n\n <ox-input-value-ranges\n .value=${range}\n valuetype=${type}\n </ox-input-value-ranges>\n*/\n\n@customElement('ox-input-value-ranges')\nexport class OxInputValueRange extends OxFormField {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n align-content: center;\n\n width: 100%;\n overflow: hidden;\n border: 1px solid #ccc;\n }\n\n div {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n\n border-bottom: 1px solid #c0c0c0;\n }\n\n div:last-child {\n border-bottom: none;\n }\n\n div > * {\n min-width: 0px;\n margin: 2px;\n padding: 0;\n }\n\n button {\n width: 20px;\n text-align: center;\n }\n\n input,\n ox-input-color {\n flex: 1;\n }\n\n ox-input-color {\n --things-editor-color-input-color: {\n margin: 2px;\n }\n --things-editor-color-input-span: {\n width: 12px;\n height: 12px;\n }\n }\n\n [placeholder='value'] {\n flex: 2;\n }\n\n div {\n border-bottom: 1px solid #c0c0c0;\n }\n\n div:last-child {\n border-bottom: none;\n }\n\n input[type='checkbox'] {\n width: initial;\n }\n `\n\n @property({ type: Object }) value: ValueRange = {}\n @property({ type: String }) valuetype: 'string' | 'boolean' | 'color' | string = 'string'\n @property({ type: String }) rangetype: 'string' | 'boolean' | 'color' | string = 'number'\n\n private _changingNow: boolean = false\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onChange.bind(this))\n }\n\n render() {\n return html`\n ${this._toArray(this.value).map(\n item => html`\n <div data-record>\n <input type=\"text\" data-from placeholder=\"<=\" .value=${item.from} />\n <input type=\"text\" data-to placeholder=\"&gt;\" .value=${item.to} />\n\n ${this.valuetype == 'boolean'\n ? html` <input type=\"checkbox\" data-value .checked=${item.value} data-value-type=${this.valuetype} /> `\n : this.valuetype == 'color'\n ? html` <ox-input-color data-value .value=${item.value}> </ox-input-color> `\n : html`\n <input\n type=\"text\"\n data-value\n placeholder=\"value\"\n .value=${item.value}\n data-value-type=${this.valuetype}\n />\n `} <button class=\"record-action\" @click=${(e: Event) => this._delete(e)} tabindex=\"-1\">-</button>\n </div>\n `\n )}\n\n <div data-record-new>\n <input type=\"text\" data-from placeholder=\"<=\" value=\"\" />\n <input type=\"text\" data-to placeholder=\"&gt;\" value=\"\" />\n\n ${this.valuetype == 'boolean'\n ? html` <input type=\"checkbox\" data-value data-value-type=${this.valuetype} /> `\n : this.valuetype == 'color'\n ? html` <ox-input-color data-value value=\"\" placeholder=\"value\"> </ox-input-color> `\n : html` <input type=\"text\" data-value placeholder=\"value\" value=\"\" data-value-type=${this.valuetype} /> `}\n <button class=\"record-action\" @click=${(e: Event) => this._add()} tabindex=\"-1\">+</button>\n </div>\n\n <div data-record>\n <input type=\"text\" data-from data-default=\"\" disabled value=\"default\" />\n <input type=\"text\" data-to placeholder=\"&gt;\" value=\"\" hidden />\n\n ${this.valuetype == 'boolean'\n ? html`\n <input\n type=\"checkbox\"\n data-value\n .checked=${this.value && this.value.default}\n data-value-type=${this.valuetype}\n />\n `\n : this.valuetype == 'color'\n ? html`\n <ox-input-color data-value .value=${(this.value && this.value.default) || ''} placeholder=\"value\">\n </ox-input-color>\n `\n : html`\n <input\n type=\"text\"\n data-value\n .value=${(this.value && this.value.default) || ''}\n placeholder=\"value\"\n class=\"default-value\"\n data-value-type=${this.valuetype}\n />\n `} <button class=\"record-action\" @click=${(e: Event) => this._sort()}>&gt;</button>\n </div>\n `\n }\n\n _defaultValue(type: 'color' | 'boolean' | 'checkbox' | string) {\n switch (type || this.valuetype) {\n case 'color':\n return '#000000'\n case 'boolean':\n case 'checkbox':\n return false\n default:\n return ''\n }\n }\n\n _onChange(e: Event) {\n if (this._changingNow) {\n return\n }\n\n this._changingNow = true\n\n const input = e.target as HTMLInputElement\n var value = input.type === 'checkbox' ? Boolean(input.checked) : input.value\n\n const div = input.parentElement as HTMLDivElement\n if (input.hasAttribute('data-value')) {\n const dataList = div.querySelectorAll('[data-value]:not([hidden])') as NodeListOf<HTMLElement & { value: any }>\n\n for (var i = 0; i < dataList.length; i++) {\n if (dataList[i] !== input) {\n dataList[i].value = value\n }\n }\n }\n\n if (div.hasAttribute('data-record')) {\n this._build()\n } else if (div.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {\n this._add()\n }\n\n this._changingNow = false\n }\n\n _build(includeNewRecord?: boolean) {\n if (includeNewRecord) {\n var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]')\n } else {\n var records = this.renderRoot.querySelectorAll('[data-record]')\n }\n\n var newrange: ValueRange = {}\n for (var i = 0; i < records.length; i++) {\n const record = records[i]\n const from = (record.querySelector('[data-from]') as HTMLInputElement).value\n const to = (record.querySelector('[data-to]') as HTMLInputElement).value\n const inputs = record.querySelectorAll(\n '[data-value]:not([style*=\"display: none\"])'\n ) as NodeListOf<HTMLInputElement>\n\n if (!inputs || inputs.length == 0) {\n continue\n }\n\n var input = inputs[inputs.length - 1]\n var value\n\n if (input.type == 'checkbox') {\n value = Boolean(input.checked)\n } else {\n value = input.value\n }\n\n if (from) {\n if (from === 'default') newrange['default'] = value || (this.valuetype == 'color' ? '#000000' : '')\n else newrange[`${from}~${to}`] = value\n }\n }\n\n this.value = newrange\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n /* default를 제외한 range아이템들을 template(dom-repeat)용 배열로 변환하는 함수 */\n _toArray(range: ValueRange) {\n var array: ArrayedRange[] = []\n\n for (var key in range) {\n if (key == 'default') {\n continue\n }\n\n const fromto = key.split('~')\n\n array.push({\n from: fromto[0],\n to: fromto[1],\n value: range[key]\n })\n }\n return array\n }\n\n _sort() {\n const sorter =\n this.rangetype === 'number'\n ? function (a: ArrayedRange, b: ArrayedRange) {\n return parseFloat(b.from) < parseFloat(a.from) ? 1 : -1\n }\n : function (a: ArrayedRange, b: ArrayedRange) {\n return b.from < a.from ? 1 : -1\n }\n\n var range: ValueRange = this._toArray(this.value)\n .sort(sorter)\n .reduce(function (sum, i) {\n sum[`${i.from}~${i.to}`] = i.value\n return sum\n }, {} as ValueRange)\n range.default = this.value.default\n\n this.value = range\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n _add() {\n this._build(true)\n\n const inputs = this.renderRoot.querySelectorAll(\n '[data-record-new] input:not([style*=\"display: none\"])'\n ) as NodeListOf<HTMLInputElement & { value: any; type: string }>\n\n for (var i = 0; i < inputs.length; i++) {\n let input = inputs[i]\n if (input.type == 'checkbox') {\n input.checked = false\n } else {\n input.value = this._defaultValue(input.type)\n }\n }\n\n inputs[0].focus()\n }\n\n _delete(e: Event) {\n const record = (e.target as Element).parentElement\n\n const dataFrom = record!.querySelector('[data-from]') as HTMLInputElement\n dataFrom.value = ''\n\n this._build()\n }\n}\n"]}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import './ox-input-color';
5
+ import { OxFormField } from './ox-form-field.js';
6
+ declare type WorkShift = {
7
+ name: string;
8
+ fromDate: number;
9
+ fromTime: string;
10
+ toDate: number;
11
+ toTime: string;
12
+ };
13
+ /**
14
+ work-shift array value editor element
15
+
16
+ Example:
17
+
18
+ <ox-input-work-shift
19
+ .value=${value}
20
+ </ox-input-work-shift>
21
+ */
22
+ export declare class OxInputWorkShift extends OxFormField {
23
+ static styles: import("lit").CSSResult;
24
+ value: WorkShift[];
25
+ private _changingNow;
26
+ firstUpdated(): void;
27
+ render(): import("lit-html").TemplateResult<1>;
28
+ _onChange(e: Event): void;
29
+ _build(includeNewRecord?: boolean): void;
30
+ _add(): void;
31
+ _delete(e: Event): void;
32
+ }
33
+ export {};
@@ -0,0 +1,229 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import './ox-input-color';
6
+ import { css, html } from 'lit';
7
+ import { customElement, property } from 'lit/decorators.js';
8
+ import { OxFormField } from './ox-form-field.js';
9
+ /**
10
+ work-shift array value editor element
11
+
12
+ Example:
13
+
14
+ <ox-input-work-shift
15
+ .value=${value}
16
+ </ox-input-work-shift>
17
+ */
18
+ let OxInputWorkShift = class OxInputWorkShift extends OxFormField {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.value = [];
22
+ this._changingNow = false;
23
+ }
24
+ static { this.styles = css `
25
+ :host {
26
+ display: flex;
27
+ flex-direction: column;
28
+ align-content: center;
29
+
30
+ width: 100%;
31
+ overflow: hidden;
32
+ border: 1px solid #ccc;
33
+ }
34
+
35
+ div {
36
+ display: flex;
37
+ flex-flow: row nowrap;
38
+ align-items: center;
39
+
40
+ border-bottom: 1px solid #c0c0c0;
41
+ }
42
+
43
+ div:last-child {
44
+ border-bottom: none;
45
+ }
46
+
47
+ div > * {
48
+ min-width: 0px;
49
+ margin: 2px;
50
+ padding: 0;
51
+ }
52
+
53
+ button,
54
+ empty-element {
55
+ width: 20px;
56
+ text-align: center;
57
+ }
58
+
59
+ input,
60
+ select,
61
+ span {
62
+ flex: 1;
63
+ }
64
+
65
+ input:required:invalid {
66
+ border: 1px dashed red;
67
+ }
68
+
69
+ [placeholder='value'] {
70
+ flex: 2;
71
+ }
72
+
73
+ div {
74
+ border-bottom: 1px solid #c0c0c0;
75
+ }
76
+
77
+ div:last-child {
78
+ border-bottom: none;
79
+ }
80
+ `; }
81
+ firstUpdated() {
82
+ this.renderRoot.addEventListener('change', this._onChange.bind(this));
83
+ }
84
+ render() {
85
+ return html `
86
+ <div data-header>
87
+ <span>name</span>
88
+ <span>from date</span>
89
+ <span>from time</span>
90
+ <span>to date</span>
91
+ <span>to time</span>
92
+ <empty-element></empty-element>
93
+ </div>
94
+
95
+ ${this.value.map(item => html `
96
+ <div data-record>
97
+ <input type="text" data-name .value=${item.name} required />
98
+
99
+ <select data-from-date .value=${item.fromDate || 0}>
100
+ <option value="-1">The day before</option>
101
+ <option value="0">The day</option>
102
+ <option value="1">The day after</option>
103
+ </select>
104
+ <input type="time" data-from-time .value=${item.fromTime} step="1800" required />
105
+
106
+ <select data-to-date .value=${item.toDate || 0}>
107
+ <option value="-1">The day before</option>
108
+ <option value="0">The day</option>
109
+ <option value="1">The day after</option>
110
+ </select>
111
+ <input type="time" data-to-time .value=${item.toTime} step="1800" required />
112
+
113
+ <button class="record-action" @click=${(e) => this._delete(e)} tabindex="-1">-</button>
114
+ </div>
115
+ `)}
116
+
117
+ <div data-record-new>
118
+ <input type="text" data-name />
119
+
120
+ <select data-from-date>
121
+ <option value="-1">The day before</option>
122
+ <option value="0" selected>The day</option>
123
+ <option value="+1">The day after</option>
124
+ </select>
125
+ <input type="time" data-from-time step="1800" />
126
+
127
+ <select data-to-date>
128
+ <option value="-1">The day before</option>
129
+ <option value="0" selected>The day</option>
130
+ <option value="+1">The day after</option>
131
+ </select>
132
+ <input type="time" data-to-time step="1800" />
133
+
134
+ <button class="record-action" @click=${(e) => this._add()} tabindex="-1">+</button>
135
+ </div>
136
+ `;
137
+ }
138
+ _onChange(e) {
139
+ if (this._changingNow) {
140
+ return;
141
+ }
142
+ this._changingNow = true;
143
+ const input = e.target;
144
+ const div = input.parentElement;
145
+ if (div.hasAttribute('data-record')) {
146
+ this._build();
147
+ }
148
+ else if (div.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {
149
+ this._add();
150
+ }
151
+ this._changingNow = false;
152
+ }
153
+ _build(includeNewRecord) {
154
+ if (includeNewRecord) {
155
+ var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]');
156
+ }
157
+ else {
158
+ var records = this.renderRoot.querySelectorAll('[data-record]');
159
+ }
160
+ var value = [];
161
+ for (var i = 0; i < records.length; i++) {
162
+ const record = records[i];
163
+ const name = record.querySelector('[data-name]').value;
164
+ const fromDate = record.querySelector('[data-from-date]').value;
165
+ const fromTime = record.querySelector('[data-from-time]').value;
166
+ const toDate = record.querySelector('[data-to-date]').value;
167
+ const toTime = record.querySelector('[data-to-time]').value;
168
+ if (!name) {
169
+ ;
170
+ record.querySelector('[data-name]').focus();
171
+ return;
172
+ }
173
+ if (!fromDate) {
174
+ ;
175
+ record.querySelector('[data-from-date]').focus();
176
+ return;
177
+ }
178
+ if (!fromTime) {
179
+ ;
180
+ record.querySelector('[data-from-time]').focus();
181
+ return;
182
+ }
183
+ if (!toDate) {
184
+ ;
185
+ record.querySelector('[data-to-date]').focus();
186
+ return;
187
+ }
188
+ if (!toTime) {
189
+ ;
190
+ record.querySelector('[data-to-time]').focus();
191
+ return;
192
+ }
193
+ if (name) {
194
+ value.push({
195
+ name,
196
+ fromDate: Number(fromDate),
197
+ fromTime,
198
+ toDate: Number(toDate),
199
+ toTime
200
+ });
201
+ }
202
+ }
203
+ this.value = value;
204
+ this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }));
205
+ }
206
+ _add() {
207
+ this._build(true);
208
+ const inputs = this.renderRoot.querySelectorAll('[data-record-new] input:not([style*="display: none"])');
209
+ for (var i = 0; i < inputs.length; i++) {
210
+ let input = inputs[i];
211
+ input.value = '';
212
+ }
213
+ inputs[0].focus();
214
+ }
215
+ _delete(e) {
216
+ const record = e.target.parentElement;
217
+ const dataName = record.querySelector('[data-name]');
218
+ dataName.name = '';
219
+ this._build();
220
+ }
221
+ };
222
+ __decorate([
223
+ property({ type: Object })
224
+ ], OxInputWorkShift.prototype, "value", void 0);
225
+ OxInputWorkShift = __decorate([
226
+ customElement('ox-input-work-shift')
227
+ ], OxInputWorkShift);
228
+ export { OxInputWorkShift };
229
+ //# sourceMappingURL=ox-input-work-shift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-input-work-shift.js","sourceRoot":"","sources":["../../src/ox-input-work-shift.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './ox-input-color'\n\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { OxFormField } from './ox-form-field.js'\n\ntype WorkShift = { name: string; fromDate: number; fromTime: string; toDate: number; toTime: string }\n\n/**\nwork-shift array value editor element\n\nExample:\n\n <ox-input-work-shift\n .value=${value}\n </ox-input-work-shift>\n*/\n\n@customElement('ox-input-work-shift')\nexport class OxInputWorkShift extends OxFormField {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n align-content: center;\n\n width: 100%;\n overflow: hidden;\n border: 1px solid #ccc;\n }\n\n div {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n\n border-bottom: 1px solid #c0c0c0;\n }\n\n div:last-child {\n border-bottom: none;\n }\n\n div > * {\n min-width: 0px;\n margin: 2px;\n padding: 0;\n }\n\n button,\n empty-element {\n width: 20px;\n text-align: center;\n }\n\n input,\n select,\n span {\n flex: 1;\n }\n\n input:required:invalid {\n border: 1px dashed red;\n }\n\n [placeholder='value'] {\n flex: 2;\n }\n\n div {\n border-bottom: 1px solid #c0c0c0;\n }\n\n div:last-child {\n border-bottom: none;\n }\n `\n\n @property({ type: Object }) value: WorkShift[] = []\n\n private _changingNow: boolean = false\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onChange.bind(this))\n }\n\n render() {\n return html`\n <div data-header>\n <span>name</span>\n <span>from date</span>\n <span>from time</span>\n <span>to date</span>\n <span>to time</span>\n <empty-element></empty-element>\n </div>\n\n ${this.value.map(\n item => html`\n <div data-record>\n <input type=\"text\" data-name .value=${item.name} required />\n\n <select data-from-date .value=${item.fromDate || 0}>\n <option value=\"-1\">The day before</option>\n <option value=\"0\">The day</option>\n <option value=\"1\">The day after</option>\n </select>\n <input type=\"time\" data-from-time .value=${item.fromTime} step=\"1800\" required />\n\n <select data-to-date .value=${item.toDate || 0}>\n <option value=\"-1\">The day before</option>\n <option value=\"0\">The day</option>\n <option value=\"1\">The day after</option>\n </select>\n <input type=\"time\" data-to-time .value=${item.toTime} step=\"1800\" required />\n\n <button class=\"record-action\" @click=${(e: Event) => this._delete(e)} tabindex=\"-1\">-</button>\n </div>\n `\n )}\n\n <div data-record-new>\n <input type=\"text\" data-name />\n\n <select data-from-date>\n <option value=\"-1\">The day before</option>\n <option value=\"0\" selected>The day</option>\n <option value=\"+1\">The day after</option>\n </select>\n <input type=\"time\" data-from-time step=\"1800\" />\n\n <select data-to-date>\n <option value=\"-1\">The day before</option>\n <option value=\"0\" selected>The day</option>\n <option value=\"+1\">The day after</option>\n </select>\n <input type=\"time\" data-to-time step=\"1800\" />\n\n <button class=\"record-action\" @click=${(e: Event) => this._add()} tabindex=\"-1\">+</button>\n </div>\n `\n }\n\n _onChange(e: Event) {\n if (this._changingNow) {\n return\n }\n\n this._changingNow = true\n\n const input = e.target as HTMLInputElement\n\n const div = input.parentElement as HTMLDivElement\n\n if (div.hasAttribute('data-record')) {\n this._build()\n } else if (div.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {\n this._add()\n }\n\n this._changingNow = false\n }\n\n _build(includeNewRecord?: boolean) {\n if (includeNewRecord) {\n var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]')\n } else {\n var records = this.renderRoot.querySelectorAll('[data-record]')\n }\n\n var value: WorkShift[] = []\n for (var i = 0; i < records.length; i++) {\n const record = records[i]\n\n const name = (record.querySelector('[data-name]') as HTMLInputElement).value\n\n const fromDate = (record.querySelector('[data-from-date]') as HTMLSelectElement).value\n const fromTime = (record.querySelector('[data-from-time]') as HTMLInputElement).value\n const toDate = (record.querySelector('[data-to-date]') as HTMLSelectElement).value\n const toTime = (record.querySelector('[data-to-time]') as HTMLInputElement).value\n\n if (!name) {\n ;(record.querySelector('[data-name]') as HTMLInputElement).focus()\n return\n }\n\n if (!fromDate) {\n ;(record.querySelector('[data-from-date]') as HTMLInputElement).focus()\n return\n }\n\n if (!fromTime) {\n ;(record.querySelector('[data-from-time]') as HTMLInputElement).focus()\n return\n }\n\n if (!toDate) {\n ;(record.querySelector('[data-to-date]') as HTMLInputElement).focus()\n return\n }\n\n if (!toTime) {\n ;(record.querySelector('[data-to-time]') as HTMLInputElement).focus()\n return\n }\n\n if (name) {\n value.push({\n name,\n fromDate: Number(fromDate),\n fromTime,\n toDate: Number(toDate),\n toTime\n })\n }\n }\n\n this.value = value\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n _add() {\n this._build(true)\n\n const inputs = this.renderRoot.querySelectorAll(\n '[data-record-new] input:not([style*=\"display: none\"])'\n ) as NodeListOf<HTMLInputElement & { value: any; type: string }>\n\n for (var i = 0; i < inputs.length; i++) {\n let input = inputs[i]\n input.value = ''\n }\n\n inputs[0].focus()\n }\n\n _delete(e: Event) {\n const record = (e.target as Element).parentElement\n\n const dataName = record!.querySelector('[data-name]') as HTMLInputElement\n dataName.name = ''\n\n this._build()\n }\n}\n"]}