@operato/input 1.0.0-beta.4 → 1.0.0-beta.43

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 (172) hide show
  1. package/.storybook/main.js +2 -2
  2. package/.storybook/server.mjs +4 -4
  3. package/CHANGELOG.md +593 -0
  4. package/demo/index-multiple-colors.html +4 -1
  5. package/demo/index-partition-keys.html +2 -5
  6. package/demo/index-select.html +1 -1
  7. package/demo/index.html +4 -0
  8. package/dist/src/index.d.ts +3 -2
  9. package/dist/src/index.js +3 -2
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/locales/en.d.ts +8 -0
  12. package/dist/src/locales/en.js +8 -0
  13. package/dist/src/locales/en.js.map +1 -1
  14. package/dist/src/locales/ko.d.ts +8 -0
  15. package/dist/src/locales/ko.js +8 -0
  16. package/dist/src/locales/ko.js.map +1 -1
  17. package/dist/src/locales/ms.d.ts +8 -0
  18. package/dist/src/locales/ms.js +8 -0
  19. package/dist/src/locales/ms.js.map +1 -1
  20. package/dist/src/locales/zh.d.ts +8 -0
  21. package/dist/src/locales/zh.js +8 -0
  22. package/dist/src/locales/zh.js.map +1 -1
  23. package/dist/src/ox-input-3dish.js +24 -8
  24. package/dist/src/ox-input-3dish.js.map +1 -1
  25. package/dist/src/ox-input-barcode.d.ts +5 -2
  26. package/dist/src/ox-input-barcode.js +61 -31
  27. package/dist/src/ox-input-barcode.js.map +1 -1
  28. package/dist/src/ox-input-color.js +16 -11
  29. package/dist/src/ox-input-color.js.map +1 -1
  30. package/dist/src/ox-input-crontab.js +28 -10
  31. package/dist/src/ox-input-crontab.js.map +1 -1
  32. package/dist/src/ox-input-duration.d.ts +13 -0
  33. package/dist/src/ox-input-duration.js +163 -0
  34. package/dist/src/ox-input-duration.js.map +1 -0
  35. package/dist/src/ox-input-file.js +5 -3
  36. package/dist/src/ox-input-file.js.map +1 -1
  37. package/dist/src/ox-input-key-values.d.ts +41 -0
  38. package/dist/src/ox-input-key-values.js +233 -0
  39. package/dist/src/ox-input-key-values.js.map +1 -0
  40. package/dist/src/ox-input-multiple-colors.d.ts +1 -0
  41. package/dist/src/ox-input-multiple-colors.js +29 -21
  42. package/dist/src/ox-input-multiple-colors.js.map +1 -1
  43. package/dist/src/ox-input-options.d.ts +1 -0
  44. package/dist/src/ox-input-options.js +54 -14
  45. package/dist/src/ox-input-options.js.map +1 -1
  46. package/dist/src/ox-input-partition-keys.d.ts +1 -0
  47. package/dist/src/ox-input-partition-keys.js +51 -23
  48. package/dist/src/ox-input-partition-keys.js.map +1 -1
  49. package/dist/src/ox-input-range.js +35 -38
  50. package/dist/src/ox-input-range.js.map +1 -1
  51. package/dist/src/ox-input-search.d.ts +1 -1
  52. package/dist/src/ox-input-search.js +24 -7
  53. package/dist/src/ox-input-search.js.map +1 -1
  54. package/dist/src/ox-input-unit.d.ts +17 -0
  55. package/dist/src/ox-input-unit.js +122 -0
  56. package/dist/src/ox-input-unit.js.map +1 -0
  57. package/dist/src/ox-input-value-map.d.ts +2 -2
  58. package/dist/src/ox-input-value-map.js +51 -15
  59. package/dist/src/ox-input-value-map.js.map +1 -1
  60. package/dist/src/ox-input-value-ranges.d.ts +2 -2
  61. package/dist/src/ox-input-value-ranges.js +50 -23
  62. package/dist/src/ox-input-value-ranges.js.map +1 -1
  63. package/dist/src/ox-input-work-shift.js +77 -43
  64. package/dist/src/ox-input-work-shift.js.map +1 -1
  65. package/dist/src/ox-select.js +9 -1
  66. package/dist/src/ox-select.js.map +1 -1
  67. package/dist/stories/ox-checkbox.stories.d.ts +39 -0
  68. package/dist/stories/ox-checkbox.stories.js +44 -0
  69. package/dist/stories/ox-checkbox.stories.js.map +1 -0
  70. package/dist/stories/ox-input-3dish.stories.d.ts +26 -0
  71. package/dist/stories/ox-input-3dish.stories.js +59 -0
  72. package/dist/stories/ox-input-3dish.stories.js.map +1 -0
  73. package/dist/stories/ox-input-barcode.stories.d.ts +43 -0
  74. package/dist/stories/ox-input-barcode.stories.js +52 -0
  75. package/dist/stories/ox-input-barcode.stories.js.map +1 -0
  76. package/dist/stories/ox-input-crontab.stories.d.ts +25 -0
  77. package/dist/stories/ox-input-crontab.stories.js +35 -0
  78. package/dist/stories/ox-input-crontab.stories.js.map +1 -0
  79. package/dist/stories/ox-input-duration.stories.d.ts +26 -0
  80. package/dist/stories/ox-input-duration.stories.js +37 -0
  81. package/dist/stories/ox-input-duration.stories.js.map +1 -0
  82. package/dist/stories/ox-input-file.stories.d.ts +49 -0
  83. package/dist/stories/ox-input-file.stories.js +48 -0
  84. package/dist/stories/ox-input-file.stories.js.map +1 -0
  85. package/dist/stories/{index.stories.d.ts → ox-input-key-values.stories.d.ts} +7 -11
  86. package/dist/stories/ox-input-key-values.stories.js +49 -0
  87. package/dist/stories/ox-input-key-values.stories.js.map +1 -0
  88. package/dist/stories/ox-input-multiple-colors.stories.d.ts +20 -0
  89. package/dist/stories/ox-input-multiple-colors.stories.js +167 -0
  90. package/dist/stories/ox-input-multiple-colors.stories.js.map +1 -0
  91. package/dist/stories/ox-input-options.stories.d.ts +25 -0
  92. package/dist/stories/ox-input-options.stories.js +33 -0
  93. package/dist/stories/ox-input-options.stories.js.map +1 -0
  94. package/dist/stories/ox-input-partition-keys.stories.d.ts +25 -0
  95. package/dist/stories/ox-input-partition-keys.stories.js +37 -0
  96. package/dist/stories/ox-input-partition-keys.stories.js.map +1 -0
  97. package/dist/stories/ox-input-range.stories.d.ts +37 -0
  98. package/dist/stories/ox-input-range.stories.js +28 -0
  99. package/dist/stories/ox-input-range.stories.js.map +1 -0
  100. package/dist/stories/ox-input-search.stories.d.ts +33 -0
  101. package/dist/stories/ox-input-search.stories.js +35 -0
  102. package/dist/stories/ox-input-search.stories.js.map +1 -0
  103. package/dist/stories/ox-input-unit.stories.d.ts +40 -0
  104. package/dist/stories/ox-input-unit.stories.js +42 -0
  105. package/dist/stories/ox-input-unit.stories.js.map +1 -0
  106. package/dist/stories/ox-input-value-map.stories.d.ts +35 -0
  107. package/dist/stories/ox-input-value-map.stories.js +37 -0
  108. package/dist/stories/ox-input-value-map.stories.js.map +1 -0
  109. package/dist/stories/ox-input-value-ranges.stories.d.ts +35 -0
  110. package/dist/stories/ox-input-value-ranges.stories.js +37 -0
  111. package/dist/stories/ox-input-value-ranges.stories.js.map +1 -0
  112. package/dist/stories/ox-input-work-shift.stories.d.ts +26 -0
  113. package/dist/stories/ox-input-work-shift.stories.js +59 -0
  114. package/dist/stories/ox-input-work-shift.stories.js.map +1 -0
  115. package/dist/stories/ox-select.stories.d.ts +30 -0
  116. package/dist/stories/ox-select.stories.js +83 -0
  117. package/dist/stories/ox-select.stories.js.map +1 -0
  118. package/dist/tsconfig.tsbuildinfo +1 -1
  119. package/package.json +13 -11
  120. package/src/index.ts +3 -2
  121. package/src/locales/en.ts +8 -0
  122. package/src/locales/ko.ts +8 -0
  123. package/src/locales/ms.ts +8 -0
  124. package/src/locales/zh.ts +8 -0
  125. package/src/ox-input-3dish.ts +24 -8
  126. package/src/ox-input-barcode.ts +67 -34
  127. package/src/ox-input-color.ts +17 -11
  128. package/src/ox-input-crontab.ts +30 -10
  129. package/src/ox-input-duration.ts +168 -0
  130. package/src/ox-input-file.ts +7 -6
  131. package/src/ox-input-key-values.ts +270 -0
  132. package/src/ox-input-multiple-colors.ts +29 -21
  133. package/src/ox-input-options.ts +53 -13
  134. package/src/ox-input-partition-keys.ts +51 -22
  135. package/src/ox-input-range.ts +35 -38
  136. package/src/ox-input-search.ts +26 -8
  137. package/src/ox-input-unit.ts +123 -0
  138. package/src/ox-input-value-map.ts +52 -16
  139. package/src/ox-input-value-ranges.ts +52 -25
  140. package/src/ox-input-work-shift.ts +78 -43
  141. package/src/ox-select.ts +12 -3
  142. package/stories/ox-checkbox.stories.ts +69 -0
  143. package/stories/ox-input-3dish.stories.ts +73 -0
  144. package/stories/ox-input-barcode.stories.ts +78 -0
  145. package/stories/ox-input-code.stories.ts_ +51 -0
  146. package/stories/ox-input-crontab.stories.ts +49 -0
  147. package/stories/ox-input-duration.stories.ts +51 -0
  148. package/stories/ox-input-file.stories.ts +77 -0
  149. package/stories/ox-input-key-values.stories.ts +64 -0
  150. package/stories/ox-input-multiple-colors.stories.ts +178 -0
  151. package/stories/ox-input-options.stories.ts +47 -0
  152. package/stories/ox-input-partition-keys.stories.ts +51 -0
  153. package/stories/ox-input-range.stories.ts +45 -0
  154. package/stories/ox-input-search.stories.ts +56 -0
  155. package/stories/ox-input-unit.stories.ts +66 -0
  156. package/stories/ox-input-value-map.stories.ts +58 -0
  157. package/stories/ox-input-value-ranges.stories.ts +58 -0
  158. package/stories/ox-input-work-shift.stories.ts +73 -0
  159. package/stories/ox-select.stories.ts +101 -0
  160. package/themes/app-theme.css +142 -0
  161. package/themes/input-theme.css +19 -0
  162. package/translations/en.json +45 -1
  163. package/translations/ko.json +43 -1
  164. package/translations/ms.json +43 -1
  165. package/translations/zh.json +43 -1
  166. package/xliff/en.xlf +24 -0
  167. package/xliff/ko.xlf +32 -0
  168. package/xliff/ms.xlf +24 -0
  169. package/xliff/zh.xlf +24 -0
  170. package/dist/stories/index.stories.js +0 -33
  171. package/dist/stories/index.stories.js.map +0 -1
  172. package/stories/index.stories.ts +0 -52
@@ -0,0 +1,270 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+
5
+ import '@material/mwc-icon'
6
+
7
+ import { css, html } from 'lit'
8
+ import { customElement, property, queryAll } from 'lit/decorators.js'
9
+
10
+ import { OxFormField } from './ox-form-field'
11
+
12
+ type KeyValues = { [key: string]: any }
13
+ type ArrayedKeyValues = { key: string; value: any }
14
+
15
+ /**
16
+ input component for key-value map
17
+
18
+ Example:
19
+
20
+ <ox-input-key-values
21
+ value=${map}
22
+ </ox-input-key-values>
23
+ */
24
+ @customElement('ox-input-key-values')
25
+ export class OxInputKeyValues extends OxFormField {
26
+ static styles = css`
27
+ :host {
28
+ display: flex;
29
+ flex-direction: column;
30
+ overflow: hidden;
31
+ margin-bottom: var(--margin-wide);
32
+ }
33
+
34
+ div {
35
+ display: flex;
36
+ flex-flow: row nowrap;
37
+ gap: var(--margin-default);
38
+ margin-bottom: var(--margin-narrow);
39
+ }
40
+
41
+ button {
42
+ border: var(--button-border);
43
+ border-radius: var(--border-radius);
44
+ background-color: var(--button-background-color);
45
+ padding: var(--padding-narrow) var(--padding-default);
46
+ line-height: 0.8;
47
+ color: var(--button-color);
48
+ cursor: pointer;
49
+ }
50
+ button + button {
51
+ margin-left: -5px;
52
+ }
53
+ button mwc-icon {
54
+ font-size: var(--fontsize-default);
55
+ }
56
+ button:focus,
57
+ button:hover,
58
+ button:active {
59
+ border: var(--button-activ-border);
60
+ background-color: var(--button-background-focus-color);
61
+ color: var(--theme-white-color);
62
+ }
63
+
64
+ input {
65
+ flex: 1;
66
+ border: 0;
67
+ border-bottom: var(--border-dark-color);
68
+ padding: var(--input-padding);
69
+ font: var(--input-font);
70
+ color: var(--primary-text-color);
71
+ }
72
+ input:focus {
73
+ outline: none;
74
+ border-bottom: 1px solid var(--primary-color);
75
+ }
76
+ button.hidden {
77
+ opacity: 0;
78
+ cursor: default;
79
+ }
80
+ `
81
+
82
+ @property({ type: Object }) value: KeyValues = {}
83
+ @property({ type: Object }) options: { display: string; value: string }[] = []
84
+
85
+ private _changingNow: boolean = false
86
+
87
+ firstUpdated() {
88
+ this.renderRoot.addEventListener('change', this._onChange.bind(this))
89
+ }
90
+
91
+ render() {
92
+ const value = !this.value || typeof this.value !== 'object' ? {} : this.value
93
+ const options = this.options || []
94
+
95
+ return html`
96
+ ${this._toArray(value).map(
97
+ item => html`
98
+ <div data-record>
99
+ <input type="text" data-key placeholder="key" .value=${item.key} />
100
+ <input type="text" data-value placeholder="value" .value=${item.value} list="value-template" />
101
+ <button class="record-action" @click=${(e: MouseEvent) => this._delete(e)} tabindex="-1">
102
+ <mwc-icon>remove</mwc-icon>
103
+ </button>
104
+ <button class="record-action" @click=${(e: MouseEvent) => this._up(e)} tabindex="-1">
105
+ <mwc-icon>arrow_upward</mwc-icon>
106
+ </button>
107
+ <button class="record-action" @click=${(e: MouseEvent) => this._down(e)} tabindex="-1">
108
+ <mwc-icon>arrow_downward</mwc-icon>
109
+ </button>
110
+ </div>
111
+ `
112
+ )}
113
+
114
+ <div data-record-new>
115
+ <input type="text" data-key placeholder="key" value="" />
116
+ <input type="text" data-value placeholder="value" value="" list="value-template" />
117
+ <button class="record-action" @click=${(e: MouseEvent) => this._add()} tabindex="-1">
118
+ <mwc-icon>add</mwc-icon>
119
+ </button>
120
+ <button class="hidden"><mwc-icon>add</mwc-icon></button>
121
+ <button class="hidden"><mwc-icon>add</mwc-icon></button>
122
+ </div>
123
+
124
+ <datalist id="value-template">
125
+ ${options.map(({ display, value }) => html` <option value="${value}">${display}</option> `)}
126
+ </datalist>
127
+ `
128
+ }
129
+
130
+ _onChange(e: Event) {
131
+ if (this._changingNow) {
132
+ return
133
+ }
134
+
135
+ this._changingNow = true
136
+
137
+ const input = e.target as HTMLInputElement
138
+
139
+ const record = (e.target as Element).closest('[data-record],[data-record-new]') as HTMLElement
140
+
141
+ if (record.hasAttribute('data-record')) {
142
+ this._build()
143
+ } else if (record.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {
144
+ this._add()
145
+ }
146
+
147
+ this._changingNow = false
148
+ }
149
+
150
+ _build(includeNewRecord?: boolean) {
151
+ if (includeNewRecord) {
152
+ var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]') as NodeListOf<HTMLElement>
153
+ } else {
154
+ var records = this.renderRoot.querySelectorAll('[data-record]') as NodeListOf<HTMLElement>
155
+ }
156
+
157
+ var newmap: KeyValues = {}
158
+
159
+ for (var i = 0; i < records.length; i++) {
160
+ var record = records[i]
161
+
162
+ const key = (record.querySelector('[data-key]') as HTMLInputElement).value
163
+ const inputs = record.querySelectorAll(
164
+ '[data-value]:not([style*="display: none"])'
165
+ ) as NodeListOf<HTMLInputElement>
166
+
167
+ if (!inputs || inputs.length == 0) {
168
+ continue
169
+ }
170
+
171
+ var input = inputs[inputs.length - 1]
172
+
173
+ var value = input.value
174
+
175
+ if (key) {
176
+ newmap[key] = value || ''
177
+ }
178
+ }
179
+
180
+ this.value = newmap
181
+ this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))
182
+ }
183
+
184
+ /* map아이템들을 template(dom-repeat)용 배열로 변환하는 함수 */
185
+ _toArray(map: KeyValues) {
186
+ var array: ArrayedKeyValues[] = []
187
+
188
+ for (var key in map) {
189
+ array.push({
190
+ key: key,
191
+ value: map[key]
192
+ })
193
+ }
194
+
195
+ return array
196
+ }
197
+
198
+ _add() {
199
+ this._build(true)
200
+
201
+ const inputs = this.renderRoot.querySelectorAll(
202
+ '[data-record-new] input:not([style*="display: none"])'
203
+ ) as NodeListOf<HTMLInputElement & { value: any }>
204
+
205
+ for (var i = 0; i < inputs.length; i++) {
206
+ let input = inputs[i]
207
+
208
+ if (input.type == 'checkbox') input.checked = false
209
+ else input.value = ''
210
+ }
211
+
212
+ inputs[0].focus()
213
+ }
214
+
215
+ _delete(e: MouseEvent) {
216
+ const record = (e.target as Element).closest('[data-record]') as HTMLElement
217
+
218
+ ;(record!.querySelector('[data-key]') as HTMLInputElement)!.value = ''
219
+
220
+ this._build()
221
+ }
222
+
223
+ @queryAll('[data-record]') records!: NodeListOf<HTMLElement>
224
+
225
+ _up(e: MouseEvent) {
226
+ const record = (e.target as Element).closest('[data-record]') as HTMLElement
227
+ const array = Array.from(this.records)
228
+ const index = array.indexOf(record) - 1
229
+
230
+ if (index < 0) {
231
+ return
232
+ }
233
+
234
+ const deleted = array.splice(index, 1)
235
+ array.splice(index + 1, 0, ...deleted)
236
+
237
+ this.value = array.reduce((sum, record) => {
238
+ const key = (record.querySelector('[data-key]') as HTMLInputElement).value
239
+ const value = (record.querySelector('[data-value]') as HTMLInputElement).value
240
+
241
+ sum[key] = value
242
+ return sum
243
+ }, {} as { [key: string]: string })
244
+
245
+ this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))
246
+ }
247
+
248
+ _down(e: MouseEvent) {
249
+ const record = (e.target as Element).closest('[data-record]') as HTMLElement
250
+ const array = Array.from(this.records)
251
+ const index = array.indexOf(record)
252
+
253
+ if (index > array.length) {
254
+ return
255
+ }
256
+
257
+ array.splice(index, 1)
258
+ array.splice(index + 1, 0, record)
259
+
260
+ this.value = array.reduce((sum, record) => {
261
+ const key = (record.querySelector('[data-key]') as HTMLInputElement).value
262
+ const value = (record.querySelector('[data-value]') as HTMLInputElement).value
263
+
264
+ sum[key] = value
265
+ return sum
266
+ }, {} as { [key: string]: string })
267
+
268
+ this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))
269
+ }
270
+ }
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import './ox-input-color.js'
6
+ import '@material/mwc-icon'
6
7
 
7
8
  import { css, html } from 'lit'
8
9
  import { customElement, property, query, queryAll } from 'lit/decorators.js'
@@ -28,29 +29,38 @@ export class OxInputMultipleColors extends OxFormField {
28
29
  :host {
29
30
  display: inline-block;
30
31
  }
31
-
32
32
  #colors-container > div {
33
33
  display: grid;
34
- grid-template-columns: 22px 1fr 22px;
35
- grid-gap: 5px;
34
+ grid-template-columns: 34px 1fr 34px;
35
+ grid-gap: var(--margin-default);
36
36
  align-items: center;
37
37
  justify-content: left;
38
+ margin-bottom: var(--margin-narrow);
38
39
  }
39
40
 
40
41
  ox-input-color {
41
- height: 25px;
42
42
  width: 100%;
43
43
  }
44
44
 
45
- input[type='button'] {
46
- width: 22px;
47
- height: 25px;
48
- border: 1px solid rgba(0, 0, 0, 0.15);
49
- padding-top: 0px;
50
- padding-bottom: 2px;
51
- background-color: #f1f2f4;
52
- color: #8f9192;
53
- font-size: 16px;
45
+ button {
46
+ height: 100%;
47
+ border: var(--button-border);
48
+ border-radius: var(--border-radius);
49
+ background-color: var(--button-background-color);
50
+ padding: var(--padding-narrow) var(--padding-default);
51
+ line-height: 0.8;
52
+ color: var(--button-color);
53
+ cursor: pointer;
54
+ }
55
+ button mwc-icon {
56
+ font-size: var(--fontsize-default);
57
+ }
58
+ button:focus,
59
+ button:hover,
60
+ button:active {
61
+ border: var(--button-activ-border);
62
+ background-color: var(--button-background-focus-color);
63
+ color: var(--theme-white-color);
54
64
  }
55
65
  `
56
66
 
@@ -69,18 +79,16 @@ export class OxInputMultipleColors extends OxFormField {
69
79
  ${(this.value || []).map(
70
80
  (item, index) => html`
71
81
  <div>
72
- <input type="button" value="+" @click=${() => this._appendEditorColor()} data-index=${index} />
73
-
82
+ <button @click=${() => this._appendEditorColor()} data-index=${index}>
83
+ <mwc-icon>add</mwc-icon>
84
+ </button>
74
85
  <ox-input-color .value=${item}> </ox-input-color>
75
86
 
76
87
  ${(this.value || []).length > 1
77
88
  ? html`
78
- <input
79
- type="button"
80
- value="-"
81
- @click=${(e: Event) => this._removeEditorColor(e)}
82
- data-index=${index}
83
- />
89
+ <button @click=${(e: Event) => this._removeEditorColor(e)} data-index=${index}>
90
+ <mwc-icon>remove</mwc-icon>
91
+ </button>
84
92
  `
85
93
  : html``}
86
94
  </div>
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
+ import '@material/mwc-icon'
4
5
 
5
6
  import { css, html } from 'lit'
6
7
  import { customElement, property } from 'lit/decorators.js'
@@ -12,23 +13,58 @@ type Option = { text: string; value: string }
12
13
  @customElement('ox-input-options')
13
14
  export class OxInputOptions extends OxFormField {
14
15
  static styles = css`
15
- div {
16
- display: grid;
17
- grid-template-columns: repeat(10, 1fr);
18
- grid-gap: 5px;
19
- grid-auto-rows: minmax(24px, auto);
16
+ :host {
17
+ display: flex;
18
+ flex-direction: column;
19
+ overflow: hidden;
20
+ margin-bottom: var(--margin-wide);
20
21
  }
21
22
 
22
- input[data-text] {
23
- grid-column: span 5;
23
+ div {
24
+ display: flex;
25
+ flex-flow: row nowrap;
26
+ gap: var(--margin-default);
27
+ margin-bottom: var(--margin-narrow);
24
28
  }
25
29
 
26
- input[data-value] {
27
- grid-column: span 4;
30
+ button {
31
+ border: var(--button-border);
32
+ border-radius: var(--border-radius);
33
+ background-color: var(--button-background-color);
34
+ padding: var(--padding-narrow) var(--padding-default);
35
+ line-height: 0.8;
36
+ color: var(--button-color);
37
+ cursor: pointer;
38
+ }
39
+ button + button {
40
+ margin-left: -5px;
41
+ }
42
+ button mwc-icon {
43
+ font-size: var(--fontsize-default);
44
+ }
45
+ button:focus,
46
+ button:hover,
47
+ button:active {
48
+ border: var(--button-activ-border);
49
+ background-color: var(--button-background-focus-color);
50
+ color: var(--theme-white-color);
28
51
  }
29
52
 
30
- button {
31
- grid-column: span 1;
53
+ input {
54
+ flex: 1;
55
+ border: 0;
56
+ border-bottom: var(--border-dark-color);
57
+ padding: var(--input-padding);
58
+ font: var(--input-font);
59
+ color: var(--primary-text-color);
60
+ }
61
+ input:focus {
62
+ outline: none;
63
+ border-bottom: 1px solid var(--primary-color);
64
+ }
65
+ button.hidden {
66
+ opacity: 0;
67
+ cursor: default;
32
68
  }
33
69
  `
34
70
 
@@ -47,7 +83,9 @@ export class OxInputOptions extends OxFormField {
47
83
  <div data-record="">
48
84
  <input type="text" data-text="" placeholder="text" .value=${item.text} />
49
85
  <input type="text" data-value="" placeholder="value" .value=${item.value} />
50
- <button class="record-action" @click=${(e: MouseEvent) => this._delete(e)} tabindex="-1">-</button>
86
+ <button class="record-action" @click=${(e: MouseEvent) => this._delete(e)} tabindex="-1">
87
+ <mwc-icon>remove</mwc-icon>
88
+ </button>
51
89
  </div>
52
90
  `
53
91
  )}
@@ -55,7 +93,9 @@ export class OxInputOptions extends OxFormField {
55
93
  <div data-record-new="">
56
94
  <input type="text" data-text="" placeholder="text" value="" />
57
95
  <input type="text" data-value="" placeholder="value" value="" @change=${(e: Event) => this._add()} />
58
- <button class="record-action" @click=${(e: MouseEvent) => this._add()} tabindex="-1">+</button>
96
+ <button class="record-action" @click=${(e: MouseEvent) => this._add()} tabindex="-1">
97
+ <mwc-icon>add</mwc-icon>
98
+ </button>
59
99
  </div>
60
100
  `
61
101
  }
@@ -2,6 +2,8 @@
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
4
 
5
+ import '@material/mwc-icon'
6
+
5
7
  import { css, html } from 'lit'
6
8
  import { customElement, property, queryAll } from 'lit/decorators.js'
7
9
 
@@ -25,38 +27,55 @@ export class OxInputPartitionKeys extends OxFormField {
25
27
  :host {
26
28
  display: flex;
27
29
  flex-direction: column;
28
- align-content: center;
29
-
30
- width: 100%;
31
30
  overflow: hidden;
32
- border: 1px solid #ccc;
31
+ margin-bottom: var(--margin-wide);
33
32
  }
34
33
 
35
34
  div {
36
35
  display: flex;
37
36
  flex-flow: row nowrap;
38
- align-items: center;
39
-
40
- border-bottom: 1px solid #c0c0c0;
37
+ gap: var(--margin-default);
38
+ margin-bottom: var(--margin-narrow);
41
39
  }
42
40
 
43
- div:last-child {
44
- border-bottom: none;
41
+ button {
42
+ border: var(--button-border);
43
+ border-radius: var(--border-radius);
44
+ background-color: var(--button-background-color);
45
+ padding: var(--padding-narrow) var(--padding-default);
46
+ line-height: 0.8;
47
+ color: var(--button-color);
48
+ cursor: pointer;
45
49
  }
46
-
47
- div > * {
48
- min-width: 0px;
49
- margin: 2px;
50
- padding: 0;
50
+ button + button {
51
+ margin-left: -5px;
51
52
  }
52
-
53
- button {
54
- width: 20px;
55
- text-align: center;
53
+ button mwc-icon {
54
+ font-size: var(--fontsize-default);
55
+ }
56
+ button:focus,
57
+ button:hover,
58
+ button:active {
59
+ border: var(--button-activ-border);
60
+ background-color: var(--button-background-focus-color);
61
+ color: var(--theme-white-color);
56
62
  }
57
63
 
58
64
  input {
59
65
  flex: 1;
66
+ border: 0;
67
+ border-bottom: var(--border-dark-color);
68
+ padding: var(--input-padding);
69
+ font: var(--input-font);
70
+ color: var(--primary-text-color);
71
+ }
72
+ input:focus {
73
+ outline: none;
74
+ border-bottom: 1px solid var(--primary-color);
75
+ }
76
+ button.hidden {
77
+ opacity: 0;
78
+ cursor: default;
60
79
  }
61
80
  `
62
81
 
@@ -77,9 +96,15 @@ export class OxInputPartitionKeys extends OxFormField {
77
96
  <div data-record>
78
97
  <input type="text" data-key placeholder="key" .value=${item.key} />
79
98
  <input type="text" data-value placeholder="value" .value=${item.value} list="value-template" />
80
- <button class="record-action" @click=${(e: MouseEvent) => this._delete(e)} tabindex="-1">-</button>
81
- <button class="record-action" @click=${(e: MouseEvent) => this._up(e)} tabindex="-1">↑</button>
82
- <button class="record-action" @click=${(e: MouseEvent) => this._down(e)} tabindex="-1">↓</button>
99
+ <button class="record-action" @click=${(e: MouseEvent) => this._delete(e)} tabindex="-1">
100
+ <mwc-icon>remove</mwc-icon>
101
+ </button>
102
+ <button class="record-action" @click=${(e: MouseEvent) => this._up(e)} tabindex="-1">
103
+ <mwc-icon>arrow_upward</mwc-icon>
104
+ </button>
105
+ <button class="record-action" @click=${(e: MouseEvent) => this._down(e)} tabindex="-1">
106
+ <mwc-icon>arrow_downward</mwc-icon>
107
+ </button>
83
108
  </div>
84
109
  `
85
110
  )}
@@ -87,7 +112,11 @@ export class OxInputPartitionKeys extends OxFormField {
87
112
  <div data-record-new>
88
113
  <input type="text" data-key placeholder="key" value="" />
89
114
  <input type="text" data-value placeholder="value" value="" list="value-template" />
90
- <button class="record-action" @click=${(e: MouseEvent) => this._add()} tabindex="-1">+</button>
115
+ <button class="record-action" @click=${(e: MouseEvent) => this._add()} tabindex="-1">
116
+ <mwc-icon>add</mwc-icon>
117
+ </button>
118
+ <button class="hidden"><mwc-icon>add</mwc-icon></button>
119
+ <button class="hidden"><mwc-icon>add</mwc-icon></button>
91
120
  </div>
92
121
 
93
122
  <datalist id="value-template">
@@ -11,10 +11,9 @@ import { OxFormField } from './ox-form-field.js'
11
11
  class OxInputRange extends OxFormField {
12
12
  static styles = css`
13
13
  :host {
14
- font-size: 16px;
15
14
  display: flex;
15
+ gap: var(--margin-default);
16
16
  align-items: center;
17
- padding: 1px 0;
18
17
 
19
18
  width: 100%;
20
19
  user-select: text;
@@ -22,15 +21,15 @@ class OxInputRange extends OxFormField {
22
21
 
23
22
  input[type='number'] {
24
23
  width: 48px;
25
- overflow: hidden;
24
+ border: 0;
25
+ border-bottom: var(--border-dark-color);
26
+ padding: var(--input-padding);
27
+ font: var(--input-font);
28
+ color: var(--primary-text-color);
26
29
  }
27
-
28
- input[type='number'] {
29
- color: black;
30
- border: none;
31
- font-weight: 300;
32
- background: white;
33
- padding: 1px 2px;
30
+ input[type='number']:focus {
31
+ outline: none;
32
+ border-bottom: 1px solid var(--primary-color);
34
33
  }
35
34
 
36
35
  input[type='range'] {
@@ -44,40 +43,40 @@ class OxInputRange extends OxFormField {
44
43
  }
45
44
  input[type='range']::-webkit-slider-runnable-track {
46
45
  width: 100%;
47
- height: 1px;
48
- background: black;
49
- border: none;
46
+ height: 7px;
47
+ background-color: rgba(0, 0, 0, 0.02);
48
+ border: 1px solid rgba(0, 0, 0, 0.05);
50
49
  border-radius: 5px;
51
50
  }
52
51
  input[type='range']::-webkit-slider-thumb {
53
52
  -webkit-appearance: none;
54
53
  border: none;
55
- height: 10px;
56
- width: 10px;
54
+ height: 16px;
55
+ width: 16px;
57
56
  border-radius: 50%;
58
- background: black;
59
- margin-top: -5px;
57
+ background: var(--primary-color);
58
+ margin-top: -6px;
59
+ box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 0.15);
60
60
  }
61
61
  input[type='range']:focus {
62
62
  outline: none;
63
63
  }
64
- input[type='range']:focus::-webkit-slider-runnable-track {
65
- background: black;
66
- }
67
64
 
68
65
  input[type='range']::-moz-range-track {
69
66
  width: 100%;
70
- height: 1px;
71
- background: black;
72
- border: none;
67
+ height: 7px;
68
+ background-color: rgba(0, 0, 0, 0.02);
69
+ border: 1px solid rgba(0, 0, 0, 0.05);
73
70
  border-radius: 5px;
74
71
  }
75
72
  input[type='range']::-moz-range-thumb {
76
73
  border: none;
77
- height: 10px;
78
- width: 10px;
74
+ height: 16px;
75
+ width: 16px;
79
76
  border-radius: 50%;
80
- background: black;
77
+ background: var(--primary-color);
78
+ margin-top: -6px;
79
+ box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 0.15);
81
80
  }
82
81
 
83
82
  input[type='range']:-moz-focusring {
@@ -87,21 +86,19 @@ class OxInputRange extends OxFormField {
87
86
 
88
87
  input[type='range']::-ms-track {
89
88
  width: 100%;
90
- height: 1px;
91
- background: black;
92
- border-radius: 10px;
93
- color: transparent;
94
- border: none;
95
- outline: none;
89
+ height: 7px;
90
+ background-color: rgba(0, 0, 0, 0.02);
91
+ border: 1px solid rgba(0, 0, 0, 0.05);
92
+ border-radius: 5px;
96
93
  }
97
94
  input[type='range']::-ms-thumb {
98
- height: 10px;
99
- width: 10px;
100
- border-radius: 50%;
101
- background: black;
102
95
  border: none;
103
- outline: none;
104
- margin-top: 2px;
96
+ height: 16px;
97
+ width: 16px;
98
+ border-radius: 50%;
99
+ background: var(--primary-color);
100
+ margin-top: -6px;
101
+ box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 0.15);
105
102
  }
106
103
 
107
104
  input:focus {