@operato/input 1.0.0-beta.9 → 1.0.0

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 (182) hide show
  1. package/.storybook/main.js +2 -2
  2. package/.storybook/server.mjs +4 -4
  3. package/CHANGELOG.md +399 -0
  4. package/demo/index-multiple-colors.html +4 -1
  5. package/demo/index-partition-keys.html +2 -5
  6. package/demo/index.html +4 -0
  7. package/dist/src/index.d.ts +4 -2
  8. package/dist/src/index.js +4 -2
  9. package/dist/src/index.js.map +1 -1
  10. package/dist/src/locales/en.d.ts +8 -0
  11. package/dist/src/locales/en.js +8 -0
  12. package/dist/src/locales/en.js.map +1 -1
  13. package/dist/src/locales/ko.d.ts +8 -0
  14. package/dist/src/locales/ko.js +8 -0
  15. package/dist/src/locales/ko.js.map +1 -1
  16. package/dist/src/locales/ms.d.ts +8 -0
  17. package/dist/src/locales/ms.js +8 -0
  18. package/dist/src/locales/ms.js.map +1 -1
  19. package/dist/src/locales/zh.d.ts +8 -0
  20. package/dist/src/locales/zh.js +8 -0
  21. package/dist/src/locales/zh.js.map +1 -1
  22. package/dist/src/ox-input-3dish.js +24 -8
  23. package/dist/src/ox-input-3dish.js.map +1 -1
  24. package/dist/src/ox-input-barcode.d.ts +5 -2
  25. package/dist/src/ox-input-barcode.js +61 -31
  26. package/dist/src/ox-input-barcode.js.map +1 -1
  27. package/dist/src/ox-input-color.js +16 -11
  28. package/dist/src/ox-input-color.js.map +1 -1
  29. package/dist/src/ox-input-crontab.js +28 -10
  30. package/dist/src/ox-input-crontab.js.map +1 -1
  31. package/dist/src/ox-input-data.js +1 -1
  32. package/dist/src/ox-input-data.js.map +1 -1
  33. package/dist/src/ox-input-duration.d.ts +13 -0
  34. package/dist/src/ox-input-duration.js +163 -0
  35. package/dist/src/ox-input-duration.js.map +1 -0
  36. package/dist/src/ox-input-file.js +5 -3
  37. package/dist/src/ox-input-file.js.map +1 -1
  38. package/dist/src/ox-input-key-values.d.ts +41 -0
  39. package/dist/src/ox-input-key-values.js +233 -0
  40. package/dist/src/ox-input-key-values.js.map +1 -0
  41. package/dist/src/ox-input-multiple-colors.d.ts +1 -0
  42. package/dist/src/ox-input-multiple-colors.js +29 -21
  43. package/dist/src/ox-input-multiple-colors.js.map +1 -1
  44. package/dist/src/ox-input-options.d.ts +1 -0
  45. package/dist/src/ox-input-options.js +55 -14
  46. package/dist/src/ox-input-options.js.map +1 -1
  47. package/dist/src/ox-input-partition-keys.d.ts +1 -0
  48. package/dist/src/ox-input-partition-keys.js +51 -23
  49. package/dist/src/ox-input-partition-keys.js.map +1 -1
  50. package/dist/src/ox-input-quantifier.d.ts +11 -0
  51. package/dist/src/ox-input-quantifier.js +67 -0
  52. package/dist/src/ox-input-quantifier.js.map +1 -0
  53. package/dist/src/ox-input-range.js +35 -38
  54. package/dist/src/ox-input-range.js.map +1 -1
  55. package/dist/src/ox-input-search.d.ts +1 -0
  56. package/dist/src/ox-input-search.js +27 -3
  57. package/dist/src/ox-input-search.js.map +1 -1
  58. package/dist/src/ox-input-unit.d.ts +17 -0
  59. package/dist/src/ox-input-unit.js +122 -0
  60. package/dist/src/ox-input-unit.js.map +1 -0
  61. package/dist/src/ox-input-value-map.d.ts +2 -2
  62. package/dist/src/ox-input-value-map.js +51 -15
  63. package/dist/src/ox-input-value-map.js.map +1 -1
  64. package/dist/src/ox-input-value-ranges.d.ts +2 -2
  65. package/dist/src/ox-input-value-ranges.js +50 -23
  66. package/dist/src/ox-input-value-ranges.js.map +1 -1
  67. package/dist/src/ox-input-work-shift.js +79 -44
  68. package/dist/src/ox-input-work-shift.js.map +1 -1
  69. package/dist/src/ox-select.js +12 -3
  70. package/dist/src/ox-select.js.map +1 -1
  71. package/dist/stories/ox-checkbox.stories.d.ts +39 -0
  72. package/dist/stories/ox-checkbox.stories.js +44 -0
  73. package/dist/stories/ox-checkbox.stories.js.map +1 -0
  74. package/dist/stories/ox-input-3dish.stories.d.ts +26 -0
  75. package/dist/stories/ox-input-3dish.stories.js +59 -0
  76. package/dist/stories/ox-input-3dish.stories.js.map +1 -0
  77. package/dist/stories/ox-input-barcode.stories.d.ts +43 -0
  78. package/dist/stories/ox-input-barcode.stories.js +59 -0
  79. package/dist/stories/ox-input-barcode.stories.js.map +1 -0
  80. package/dist/stories/ox-input-crontab.stories.d.ts +25 -0
  81. package/dist/stories/ox-input-crontab.stories.js +35 -0
  82. package/dist/stories/ox-input-crontab.stories.js.map +1 -0
  83. package/dist/stories/ox-input-duration.stories.d.ts +26 -0
  84. package/dist/stories/ox-input-duration.stories.js +37 -0
  85. package/dist/stories/ox-input-duration.stories.js.map +1 -0
  86. package/dist/stories/ox-input-file.stories.d.ts +49 -0
  87. package/dist/stories/ox-input-file.stories.js +48 -0
  88. package/dist/stories/ox-input-file.stories.js.map +1 -0
  89. package/dist/stories/{index.stories.d.ts → ox-input-key-values.stories.d.ts} +7 -11
  90. package/dist/stories/ox-input-key-values.stories.js +49 -0
  91. package/dist/stories/ox-input-key-values.stories.js.map +1 -0
  92. package/dist/stories/ox-input-multiple-colors.stories.d.ts +20 -0
  93. package/dist/stories/ox-input-multiple-colors.stories.js +167 -0
  94. package/dist/stories/ox-input-multiple-colors.stories.js.map +1 -0
  95. package/dist/stories/ox-input-options.stories.d.ts +25 -0
  96. package/dist/stories/ox-input-options.stories.js +33 -0
  97. package/dist/stories/ox-input-options.stories.js.map +1 -0
  98. package/dist/stories/ox-input-partition-keys.stories.d.ts +25 -0
  99. package/dist/stories/ox-input-partition-keys.stories.js +37 -0
  100. package/dist/stories/ox-input-partition-keys.stories.js.map +1 -0
  101. package/dist/stories/ox-input-quantifier.stories.d.ts +25 -0
  102. package/dist/stories/ox-input-quantifier.stories.js +27 -0
  103. package/dist/stories/ox-input-quantifier.stories.js.map +1 -0
  104. package/dist/stories/ox-input-range.stories.d.ts +37 -0
  105. package/dist/stories/ox-input-range.stories.js +28 -0
  106. package/dist/stories/ox-input-range.stories.js.map +1 -0
  107. package/dist/stories/ox-input-search.stories.d.ts +33 -0
  108. package/dist/stories/ox-input-search.stories.js +35 -0
  109. package/dist/stories/ox-input-search.stories.js.map +1 -0
  110. package/dist/stories/ox-input-unit.stories.d.ts +40 -0
  111. package/dist/stories/ox-input-unit.stories.js +42 -0
  112. package/dist/stories/ox-input-unit.stories.js.map +1 -0
  113. package/dist/stories/ox-input-value-map.stories.d.ts +35 -0
  114. package/dist/stories/ox-input-value-map.stories.js +37 -0
  115. package/dist/stories/ox-input-value-map.stories.js.map +1 -0
  116. package/dist/stories/ox-input-value-ranges.stories.d.ts +35 -0
  117. package/dist/stories/ox-input-value-ranges.stories.js +37 -0
  118. package/dist/stories/ox-input-value-ranges.stories.js.map +1 -0
  119. package/dist/stories/ox-input-work-shift.stories.d.ts +26 -0
  120. package/dist/stories/ox-input-work-shift.stories.js +59 -0
  121. package/dist/stories/ox-input-work-shift.stories.js.map +1 -0
  122. package/dist/stories/ox-select.stories.d.ts +30 -0
  123. package/dist/stories/ox-select.stories.js +83 -0
  124. package/dist/stories/ox-select.stories.js.map +1 -0
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +16 -13
  127. package/src/index.ts +4 -2
  128. package/src/locales/en.ts +8 -0
  129. package/src/locales/ko.ts +8 -0
  130. package/src/locales/ms.ts +8 -0
  131. package/src/locales/zh.ts +8 -0
  132. package/src/ox-input-3dish.ts +24 -8
  133. package/src/ox-input-barcode.ts +67 -34
  134. package/src/ox-input-color.ts +17 -11
  135. package/src/ox-input-crontab.ts +30 -10
  136. package/src/ox-input-data.ts +2 -2
  137. package/src/ox-input-duration.ts +168 -0
  138. package/src/ox-input-file.ts +7 -6
  139. package/src/ox-input-key-values.ts +270 -0
  140. package/src/ox-input-multiple-colors.ts +29 -21
  141. package/src/ox-input-options.ts +54 -13
  142. package/src/ox-input-partition-keys.ts +51 -22
  143. package/src/ox-input-quantifier.ts +62 -0
  144. package/src/ox-input-range.ts +35 -38
  145. package/src/ox-input-search.ts +29 -3
  146. package/src/ox-input-unit.ts +123 -0
  147. package/src/ox-input-value-map.ts +52 -16
  148. package/src/ox-input-value-ranges.ts +52 -25
  149. package/src/ox-input-work-shift.ts +81 -44
  150. package/src/ox-select.ts +19 -5
  151. package/stories/ox-checkbox.stories.ts +69 -0
  152. package/stories/ox-input-3dish.stories.ts +73 -0
  153. package/stories/ox-input-barcode.stories.ts +85 -0
  154. package/stories/ox-input-code.stories.ts_ +51 -0
  155. package/stories/ox-input-crontab.stories.ts +49 -0
  156. package/stories/ox-input-duration.stories.ts +51 -0
  157. package/stories/ox-input-file.stories.ts +77 -0
  158. package/stories/ox-input-key-values.stories.ts +64 -0
  159. package/stories/ox-input-multiple-colors.stories.ts +178 -0
  160. package/stories/ox-input-options.stories.ts +47 -0
  161. package/stories/ox-input-partition-keys.stories.ts +51 -0
  162. package/stories/ox-input-quantifier.stories.ts +43 -0
  163. package/stories/ox-input-range.stories.ts +45 -0
  164. package/stories/ox-input-search.stories.ts +56 -0
  165. package/stories/ox-input-unit.stories.ts +66 -0
  166. package/stories/ox-input-value-map.stories.ts +58 -0
  167. package/stories/ox-input-value-ranges.stories.ts +58 -0
  168. package/stories/ox-input-work-shift.stories.ts +73 -0
  169. package/stories/ox-select.stories.ts +101 -0
  170. package/themes/app-theme.css +142 -0
  171. package/themes/input-theme.css +19 -0
  172. package/translations/en.json +45 -1
  173. package/translations/ko.json +43 -1
  174. package/translations/ms.json +43 -1
  175. package/translations/zh.json +43 -1
  176. package/xliff/en.xlf +24 -0
  177. package/xliff/ko.xlf +32 -0
  178. package/xliff/ms.xlf +24 -0
  179. package/xliff/zh.xlf +24 -0
  180. package/dist/stories/index.stories.js +0 -33
  181. package/dist/stories/index.stories.js.map +0 -1
  182. package/stories/index.stories.ts +0 -52
@@ -5,6 +5,7 @@ import { __decorate } from "tslib";
5
5
  import './ox-input-color';
6
6
  import { css, html } from 'lit';
7
7
  import { customElement, property } from 'lit/decorators.js';
8
+ import { localized, msg } from '@lit/localize';
8
9
  import { OxFormField } from './ox-form-field.js';
9
10
  /**
10
11
  work-shift array value editor element
@@ -25,34 +26,19 @@ let OxInputWorkShift = class OxInputWorkShift extends OxFormField {
25
26
  :host {
26
27
  display: flex;
27
28
  flex-direction: column;
28
- align-content: center;
29
29
 
30
30
  width: 100%;
31
31
  overflow: hidden;
32
- border: 1px solid #ccc;
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;
41
- }
42
-
43
- div:last-child {
44
- border-bottom: none;
37
+ gap: var(--margin-default);
45
38
  }
46
39
 
47
- div > * {
48
- min-width: 0px;
49
- margin: 2px;
50
- padding: 0;
51
- }
52
-
53
- button,
54
40
  empty-element {
55
- width: 20px;
41
+ width: 34px;
56
42
  text-align: center;
57
43
  }
58
44
 
@@ -61,56 +47,102 @@ let OxInputWorkShift = class OxInputWorkShift extends OxFormField {
61
47
  span {
62
48
  flex: 1;
63
49
  }
50
+ [data-header] {
51
+ background-color: rgba(var(--primary-color-rgb), 0.05);
52
+ padding: var(--padding-narrow);
53
+ }
54
+ [data-header] span {
55
+ font: var(--label-font);
56
+ color: var(--label-color);
57
+ text-transform: var(--label-text-transform);
58
+ text-align: center;
59
+ }
60
+ [data-record] {
61
+ margin-bottom: var(--margin-narrow);
62
+ }
63
+ input,
64
+ select {
65
+ border: 0;
66
+ border-bottom: var(--border-dark-color);
67
+ padding: var(--input-padding);
68
+ font: var(--input-font);
69
+ color: var(--primary-text-color);
70
+
71
+ max-height: 35px;
72
+ }
73
+ input:focus,
74
+ select:focus {
75
+ outline: none;
76
+ border-bottom: 1px solid var(--primary-color);
77
+ }
64
78
 
65
79
  input:required:invalid {
66
80
  border: 1px dashed red;
67
81
  }
68
-
69
- [placeholder='value'] {
70
- flex: 2;
82
+ input[type='time'] {
83
+ padding: 2px var(--padding-default);
71
84
  }
72
85
 
73
- div {
74
- border-bottom: 1px solid #c0c0c0;
86
+ button {
87
+ border: var(--button-border);
88
+ border-radius: var(--border-radius);
89
+ background-color: var(--button-background-color);
90
+ padding: var(--padding-narrow) var(--padding-default);
91
+ line-height: 0.8;
92
+ color: var(--button-color);
93
+ cursor: pointer;
94
+ }
95
+ button mwc-icon {
96
+ font-size: var(--fontsize-default);
97
+ }
98
+ button:focus,
99
+ button:hover,
100
+ button:active {
101
+ border: var(--button-activ-border);
102
+ background-color: var(--button-background-focus-color);
103
+ color: var(--theme-white-color);
75
104
  }
76
105
 
77
- div:last-child {
78
- border-bottom: none;
106
+ [placeholder='value'] {
107
+ flex: 2;
79
108
  }
80
109
  `; }
81
110
  firstUpdated() {
82
111
  this.renderRoot.addEventListener('change', this._onChange.bind(this));
83
112
  }
84
113
  render() {
114
+ const workshifts = this.value || [];
85
115
  return html `
86
116
  <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>
117
+ <span>${msg('name')}</span>
118
+ <span>${msg('from date')}</span>
119
+ <span>${msg('from time')}</span>
120
+ <span>${msg('to date')}</span>
121
+ <span>${msg('to time')}</span>
92
122
  <empty-element></empty-element>
93
123
  </div>
94
124
 
95
- ${this.value.map(item => html `
125
+ ${workshifts.map(item => html `
96
126
  <div data-record>
97
127
  <input type="text" data-name .value=${item.name} required />
98
128
 
99
129
  <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>
130
+ <option value="-1">${msg('The day before')}</option>
131
+ <option value="0">${msg('The day')}</option>
132
+ <option value="1">${msg('The day after')}</option>
103
133
  </select>
104
134
  <input type="time" data-from-time .value=${item.fromTime} step="1800" required />
105
135
 
106
136
  <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>
137
+ <option value="-1">${msg('The day before')}</option>
138
+ <option value="0">${msg('The day')}</option>
139
+ <option value="1">${msg('The day after')}</option>
110
140
  </select>
111
141
  <input type="time" data-to-time .value=${item.toTime} step="1800" required />
112
142
 
113
- <button class="record-action" @click=${(e) => this._delete(e)} tabindex="-1">-</button>
143
+ <button class="record-action" @click=${(e) => this._delete(e)} tabindex="-1">
144
+ <mwc-icon>remove</mwc-icon>
145
+ </button>
114
146
  </div>
115
147
  `)}
116
148
 
@@ -118,20 +150,22 @@ let OxInputWorkShift = class OxInputWorkShift extends OxFormField {
118
150
  <input type="text" data-name />
119
151
 
120
152
  <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>
153
+ <option value="-1">${msg('The day before')}</option>
154
+ <option value="0" selected>${msg('The day')}</option>
155
+ <option value="+1">${msg('The day after')}</option>
124
156
  </select>
125
157
  <input type="time" data-from-time step="1800" />
126
158
 
127
159
  <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>
160
+ <option value="-1">${msg('The day before')}</option>
161
+ <option value="0" selected>${msg('The day')}</option>
162
+ <option value="+1">${msg('The day after')}</option>
131
163
  </select>
132
164
  <input type="time" data-to-time step="1800" />
133
165
 
134
- <button class="record-action" @click=${(e) => this._add()} tabindex="-1">+</button>
166
+ <button class="record-action" @click=${(e) => this._add()} tabindex="-1">
167
+ <mwc-icon>add</mwc-icon>
168
+ </button>
135
169
  </div>
136
170
  `;
137
171
  }
@@ -223,6 +257,7 @@ __decorate([
223
257
  property({ type: Object })
224
258
  ], OxInputWorkShift.prototype, "value", void 0);
225
259
  OxInputWorkShift = __decorate([
260
+ localized(),
226
261
  customElement('ox-input-work-shift')
227
262
  ], OxInputWorkShift);
228
263
  export { OxInputWorkShift };
@@ -1 +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"]}
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 { localized, msg } from '@lit/localize'\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@localized()\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\n width: 100%;\n overflow: hidden;\n }\n\n div {\n display: flex;\n flex-flow: row nowrap;\n gap: var(--margin-default);\n }\n\n empty-element {\n width: 34px;\n text-align: center;\n }\n\n input,\n select,\n span {\n flex: 1;\n }\n [data-header] {\n background-color: rgba(var(--primary-color-rgb), 0.05);\n padding: var(--padding-narrow);\n }\n [data-header] span {\n font: var(--label-font);\n color: var(--label-color);\n text-transform: var(--label-text-transform);\n text-align: center;\n }\n [data-record] {\n margin-bottom: var(--margin-narrow);\n }\n input,\n select {\n border: 0;\n border-bottom: var(--border-dark-color);\n padding: var(--input-padding);\n font: var(--input-font);\n color: var(--primary-text-color);\n\n max-height: 35px;\n }\n input:focus,\n select:focus {\n outline: none;\n border-bottom: 1px solid var(--primary-color);\n }\n\n input:required:invalid {\n border: 1px dashed red;\n }\n input[type='time'] {\n padding: 2px var(--padding-default);\n }\n\n button {\n border: var(--button-border);\n border-radius: var(--border-radius);\n background-color: var(--button-background-color);\n padding: var(--padding-narrow) var(--padding-default);\n line-height: 0.8;\n color: var(--button-color);\n cursor: pointer;\n }\n button mwc-icon {\n font-size: var(--fontsize-default);\n }\n button:focus,\n button:hover,\n button:active {\n border: var(--button-activ-border);\n background-color: var(--button-background-focus-color);\n color: var(--theme-white-color);\n }\n\n [placeholder='value'] {\n flex: 2;\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 const workshifts = this.value || []\n\n return html`\n <div data-header>\n <span>${msg('name')}</span>\n <span>${msg('from date')}</span>\n <span>${msg('from time')}</span>\n <span>${msg('to date')}</span>\n <span>${msg('to time')}</span>\n <empty-element></empty-element>\n </div>\n\n ${workshifts.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\">${msg('The day before')}</option>\n <option value=\"0\">${msg('The day')}</option>\n <option value=\"1\">${msg('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\">${msg('The day before')}</option>\n <option value=\"0\">${msg('The day')}</option>\n <option value=\"1\">${msg('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\">\n <mwc-icon>remove</mwc-icon>\n </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\">${msg('The day before')}</option>\n <option value=\"0\" selected>${msg('The day')}</option>\n <option value=\"+1\">${msg('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\">${msg('The day before')}</option>\n <option value=\"0\" selected>${msg('The day')}</option>\n <option value=\"+1\">${msg('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\">\n <mwc-icon>add</mwc-icon>\n </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"]}
@@ -6,9 +6,9 @@ import '@material/mwc-icon';
6
6
  import '@operato/popup/ox-popup-list.js';
7
7
  import { css, html } from 'lit';
8
8
  import { customElement, property, state } from 'lit/decorators.js';
9
- import { OxFormField } from './ox-form-field.js';
10
9
  import { TooltipStyles } from '@operato/styles';
11
10
  import { detectOverflow } from '@operato/utils';
11
+ import { OxFormField } from './ox-form-field.js';
12
12
  function onmouseover(e) {
13
13
  const element = e.target;
14
14
  if (detectOverflow(element)) {
@@ -32,6 +32,7 @@ let Select = class Select extends OxFormField {
32
32
  :host {
33
33
  display: block;
34
34
  position: relative;
35
+ border-bottom: var(--border-dark-color);
35
36
  }
36
37
 
37
38
  div {
@@ -40,6 +41,9 @@ let Select = class Select extends OxFormField {
40
41
  align-items: center;
41
42
  justify-content: center;
42
43
  cursor: pointer;
44
+ padding: var(--input-padding);
45
+ font: var(--input-font);
46
+ color: var(--primary-text-color);
43
47
  }
44
48
 
45
49
  span {
@@ -57,6 +61,9 @@ let Select = class Select extends OxFormField {
57
61
  color: var(--theme-primary-text-color, #3c3938);
58
62
  opacity: 0.7;
59
63
  }
64
+ div:hover mwc-icon {
65
+ color: var(--primary-color);
66
+ }
60
67
 
61
68
  ::slotted(ox-popup-list) {
62
69
  width: 100%;
@@ -64,7 +71,7 @@ let Select = class Select extends OxFormField {
64
71
  `
65
72
  ]; }
66
73
  render() {
67
- const label = (this.label instanceof Array ? this.label.join(', ') : this.label?.trim()) || this.placeholder || '';
74
+ const label = (this.label instanceof Array ? this.label.join(', ') : this.label?.trim()) || this.value || this.placeholder || '';
68
75
  return html `
69
76
  <div @click=${this.expand}>
70
77
  <span @mouseover=${onmouseover} @mouseout=${onmouseout}>${label}</span>
@@ -87,18 +94,20 @@ let Select = class Select extends OxFormField {
87
94
  });
88
95
  this.addEventListener('keydown', (e) => {
89
96
  e.preventDefault();
90
- if (e.key === ' ' || e.key == 'Spacebar' || e.key == 'ArrowDown') {
97
+ if (e.key === ' ' || e.key === 'Spacebar' || e.key === 'ArrowDown') {
91
98
  this.expand();
92
99
  }
93
100
  });
94
101
  }
95
102
  async updated(changes) {
103
+ const popupList = this.querySelector('ox-popup-list');
96
104
  if (changes.has('value')) {
97
105
  const popupList = this.querySelector('ox-popup-list');
98
106
  popupList.value = this.value;
99
107
  await this.requestUpdate();
100
108
  this.label = popupList.getSelectedLabels();
101
109
  }
110
+ this.label = popupList.getSelectedLabels();
102
111
  }
103
112
  expand() {
104
113
  const popupList = this.querySelector('ox-popup-list');
@@ -1 +1 @@
1
- {"version":3,"file":"ox-select.js","sourceRoot":"","sources":["../../src/ox-select.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '@material/mwc-icon'\nimport '@operato/popup/ox-popup-list.js'\n\nimport { PropertyValues, css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { OxFormField } from './ox-form-field.js'\nimport { OxPopupList } from '@operato/popup'\nimport { TooltipStyles } from '@operato/styles'\nimport { detectOverflow } from '@operato/utils'\n\nfunction onmouseover(e: Event) {\n const element = e.target as HTMLSpanElement\n if (detectOverflow(element)) {\n element.setAttribute('data-tooltip', element.textContent!)\n }\n}\n\nfunction onmouseout(e: Event) {\n const element = e.target as HTMLSpanElement\n element.removeAttribute('data-tooltip')\n}\n\n@customElement('ox-select')\nexport class Select extends OxFormField {\n static styles = [\n TooltipStyles,\n css`\n :host {\n display: block;\n position: relative;\n }\n\n div {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n\n span {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n mwc-icon {\n display: block;\n width: 24px;\n text-align: right;\n font-size: 18px;\n color: var(--theme-primary-text-color, #3c3938);\n opacity: 0.7;\n }\n\n ::slotted(ox-popup-list) {\n width: 100%;\n }\n `\n ]\n\n @property({ type: String }) name: string = ''\n @property({ type: String }) placeholder: string = ''\n\n @state() label: string | string[] = ''\n\n render() {\n const label = (this.label instanceof Array ? this.label.join(', ') : this.label?.trim()) || this.placeholder || ''\n\n return html`\n <div @click=${this.expand}>\n <span @mouseover=${onmouseover} @mouseout=${onmouseout}>${label}</span>\n <mwc-icon>expand_more</mwc-icon>\n </div>\n\n <slot></slot>\n `\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n this.setAttribute('tabindex', '0')\n\n this.addEventListener('select', (e: Event) => {\n this.value = (e as CustomEvent).detail\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: this.value\n })\n )\n })\n\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n e.preventDefault()\n\n if (e.key === ' ' || e.key == 'Spacebar' || e.key == 'ArrowDown') {\n this.expand()\n }\n })\n }\n\n async updated(changes: PropertyValues<this>) {\n if (changes.has('value')) {\n const popupList = this.querySelector('ox-popup-list') as OxPopupList\n popupList.value = this.value\n\n await this.requestUpdate()\n this.label = popupList.getSelectedLabels()\n }\n }\n\n expand() {\n const popupList = this.querySelector('ox-popup-list') as OxPopupList\n\n if (popupList) {\n popupList.style.width = `${this.offsetWidth}px`\n const align = popupList.hasAttribute('align-left') ? 'left' : 'right'\n\n const props = {\n top: this.offsetHeight,\n [align]: 0\n }\n\n popupList.open(props)\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ox-select.js","sourceRoot":"","sources":["../../src/ox-select.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '@material/mwc-icon'\nimport '@operato/popup/ox-popup-list.js'\n\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { OxPopupList } from '@operato/popup'\nimport { TooltipStyles } from '@operato/styles'\nimport { detectOverflow } from '@operato/utils'\n\nimport { OxFormField } from './ox-form-field.js'\n\nfunction onmouseover(e: Event) {\n const element = e.target as HTMLSpanElement\n if (detectOverflow(element)) {\n element.setAttribute('data-tooltip', element.textContent!)\n }\n}\n\nfunction onmouseout(e: Event) {\n const element = e.target as HTMLSpanElement\n element.removeAttribute('data-tooltip')\n}\n\n@customElement('ox-select')\nexport class Select extends OxFormField {\n static styles = [\n TooltipStyles,\n css`\n :host {\n display: block;\n position: relative;\n border-bottom: var(--border-dark-color);\n }\n\n div {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: var(--input-padding);\n font: var(--input-font);\n color: var(--primary-text-color);\n }\n\n span {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n mwc-icon {\n display: block;\n width: 24px;\n text-align: right;\n font-size: 18px;\n color: var(--theme-primary-text-color, #3c3938);\n opacity: 0.7;\n }\n div:hover mwc-icon {\n color: var(--primary-color);\n }\n\n ::slotted(ox-popup-list) {\n width: 100%;\n }\n `\n ]\n\n @property({ type: String }) name: string = ''\n @property({ type: String }) placeholder: string = ''\n\n @state() label: string | string[] = ''\n\n render() {\n const label =\n (this.label instanceof Array ? this.label.join(', ') : this.label?.trim()) || this.value || this.placeholder || ''\n\n return html`\n <div @click=${this.expand}>\n <span @mouseover=${onmouseover} @mouseout=${onmouseout}>${label}</span>\n <mwc-icon>expand_more</mwc-icon>\n </div>\n\n <slot></slot>\n `\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n this.setAttribute('tabindex', '0')\n\n this.addEventListener('select', (e: Event) => {\n this.value = (e as CustomEvent).detail\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: this.value\n })\n )\n })\n\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n e.preventDefault()\n\n if (e.key === ' ' || e.key === 'Spacebar' || e.key === 'ArrowDown') {\n this.expand()\n }\n })\n }\n\n async updated(changes: PropertyValues<this>) {\n const popupList = this.querySelector('ox-popup-list') as OxPopupList\n\n if (changes.has('value')) {\n const popupList = this.querySelector('ox-popup-list') as OxPopupList\n popupList.value = this.value\n\n await this.requestUpdate()\n\n this.label = popupList.getSelectedLabels()\n }\n\n this.label = popupList.getSelectedLabels()\n }\n\n expand() {\n const popupList = this.querySelector('ox-popup-list') as OxPopupList\n\n if (popupList) {\n popupList.style.width = `${this.offsetWidth}px`\n const align = popupList.hasAttribute('align-left') ? 'left' : 'right'\n\n const props = {\n top: this.offsetHeight,\n [align]: 0\n }\n\n popupList.open(props)\n }\n }\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import '../src/ox-checkbox.js';
2
+ import { TemplateResult } from 'lit';
3
+ declare const _default: {
4
+ title: string;
5
+ component: string;
6
+ argTypes: {
7
+ label: {
8
+ control: string;
9
+ };
10
+ name: {
11
+ control: string;
12
+ };
13
+ value: {
14
+ control: string;
15
+ };
16
+ indeterminatable: {
17
+ control: string;
18
+ };
19
+ indeterminate: {
20
+ control: string;
21
+ };
22
+ };
23
+ };
24
+ export default _default;
25
+ interface Story<T> {
26
+ (args: T): TemplateResult;
27
+ args?: Partial<T>;
28
+ argTypes?: Record<string, unknown>;
29
+ }
30
+ interface ArgTypes {
31
+ label?: string;
32
+ name?: string;
33
+ value?: boolean;
34
+ indeterminatable?: boolean;
35
+ indeterminate?: boolean;
36
+ }
37
+ export declare const Regular: Story<ArgTypes>;
38
+ export declare const CustomActivated: Story<ArgTypes>;
39
+ export declare const CustomIndeterminated: Story<ArgTypes>;
@@ -0,0 +1,44 @@
1
+ import '../src/ox-checkbox.js';
2
+ import { html } from 'lit';
3
+ export default {
4
+ title: 'ox-checkbox',
5
+ component: 'ox-checkbox',
6
+ argTypes: {
7
+ label: { control: 'text' },
8
+ name: { control: 'text' },
9
+ value: { control: 'boolean' },
10
+ indeterminatable: { control: 'boolean' },
11
+ indeterminate: { control: 'boolean' }
12
+ }
13
+ };
14
+ const Template = ({ label = 'Checkbox', name = 'hello', value = true, indeterminatable = false, indeterminate = false }) => html `
15
+ <ox-checkbox
16
+ @click=${(e) => console.log('clicked')}
17
+ name=${name}
18
+ .checked=${value}
19
+ ?indeterminatable=${indeterminatable}
20
+ ?indeterminate=${indeterminate}
21
+ >
22
+ ${label}
23
+ </ox-checkbox>
24
+ `;
25
+ export const Regular = Template.bind({});
26
+ Regular.args = {
27
+ label: 'label',
28
+ name: 'label',
29
+ value: false
30
+ };
31
+ export const CustomActivated = Template.bind({});
32
+ CustomActivated.args = {
33
+ label: 'Activated',
34
+ name: 'activated',
35
+ indeterminate: false,
36
+ value: true
37
+ };
38
+ export const CustomIndeterminated = Template.bind({});
39
+ CustomIndeterminated.args = {
40
+ label: 'Indeterminated',
41
+ indeterminate: true,
42
+ value: true
43
+ };
44
+ //# sourceMappingURL=ox-checkbox.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-checkbox.stories.js","sourceRoot":"","sources":["../../stories/ox-checkbox.stories.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAA;AAE9B,OAAO,EAAkB,IAAI,EAAE,MAAM,KAAK,CAAA;AAE1C,eAAe;IACb,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,aAAa;IACxB,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QACzB,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAC7B,gBAAgB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QACxC,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;KACtC;CACF,CAAA;AAgBD,MAAM,QAAQ,GAAoB,CAAC,EACjC,KAAK,GAAG,UAAU,EAClB,IAAI,GAAG,OAAO,EACd,KAAK,GAAG,IAAI,EACZ,gBAAgB,GAAG,KAAK,EACxB,aAAa,GAAG,KAAK,EACZ,EAAE,EAAE,CAAC,IAAI,CAAA;;aAEP,CAAC,CAAa,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;WAC3C,IAAI;eACA,KAAK;wBACI,gBAAgB;qBACnB,aAAa;;MAE5B,KAAK;;CAEV,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxC,OAAO,CAAC,IAAI,GAAG;IACb,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,KAAK;CACb,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAChD,eAAe,CAAC,IAAI,GAAG;IACrB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,WAAW;IACjB,aAAa,EAAE,KAAK;IACpB,KAAK,EAAE,IAAI;CACZ,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACrD,oBAAoB,CAAC,IAAI,GAAG;IAC1B,KAAK,EAAE,gBAAgB;IACvB,aAAa,EAAE,IAAI;IACnB,KAAK,EAAE,IAAI;CACZ,CAAA","sourcesContent":["import '../src/ox-checkbox.js'\n\nimport { TemplateResult, html } from 'lit'\n\nexport default {\n title: 'ox-checkbox',\n component: 'ox-checkbox',\n argTypes: {\n label: { control: 'text' },\n name: { control: 'text' },\n value: { control: 'boolean' },\n indeterminatable: { control: 'boolean' },\n indeterminate: { control: 'boolean' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n label?: string\n name?: string\n value?: boolean\n indeterminatable?: boolean\n indeterminate?: boolean\n}\n\nconst Template: Story<ArgTypes> = ({\n label = 'Checkbox',\n name = 'hello',\n value = true,\n indeterminatable = false,\n indeterminate = false\n}: ArgTypes) => html`\n <ox-checkbox\n @click=${(e: MouseEvent) => console.log('clicked')}\n name=${name}\n .checked=${value}\n ?indeterminatable=${indeterminatable}\n ?indeterminate=${indeterminate}\n >\n ${label}\n </ox-checkbox>\n`\n\nexport const Regular = Template.bind({})\nRegular.args = {\n label: 'label',\n name: 'label',\n value: false\n}\n\nexport const CustomActivated = Template.bind({})\nCustomActivated.args = {\n label: 'Activated',\n name: 'activated',\n indeterminate: false,\n value: true\n}\n\nexport const CustomIndeterminated = Template.bind({})\nCustomIndeterminated.args = {\n label: 'Indeterminated',\n indeterminate: true,\n value: true\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import '../src/ox-input-3dish.js';
2
+ import '../src/locale/locale-picker.js';
3
+ import { TemplateResult } from 'lit';
4
+ declare const _default: {
5
+ title: string;
6
+ component: string;
7
+ argTypes: {
8
+ value: {
9
+ control: string;
10
+ };
11
+ name: {
12
+ control: string;
13
+ };
14
+ };
15
+ };
16
+ export default _default;
17
+ interface Story<T> {
18
+ (args: T): TemplateResult;
19
+ args?: Partial<T>;
20
+ argTypes?: Record<string, unknown>;
21
+ }
22
+ interface ArgTypes {
23
+ name?: string;
24
+ value?: object;
25
+ }
26
+ export declare const Regular: Story<ArgTypes>;
@@ -0,0 +1,59 @@
1
+ import '../src/ox-input-3dish.js';
2
+ import '../src/locale/locale-picker.js';
3
+ import { html } from 'lit';
4
+ export default {
5
+ title: 'ox-input-3dish',
6
+ component: 'ox-input-3dish',
7
+ argTypes: {
8
+ value: { control: 'object' },
9
+ name: { control: 'text' }
10
+ }
11
+ };
12
+ const Template = ({ name = '3dish', value = [] }) => html `
13
+ <link href="/themes/app-theme.css" rel="stylesheet" />
14
+ <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
15
+ <style>
16
+ body {
17
+ }
18
+ </style>
19
+
20
+ <locale-picker></locale-picker>
21
+ <br /><br />
22
+
23
+ <ox-input-3dish
24
+ @change=${(e) => {
25
+ console.log(e.target.value);
26
+ }}
27
+ name=${name}
28
+ .value=${value}
29
+ >
30
+ </ox-input-3dish>
31
+ `;
32
+ export const Regular = Template.bind({});
33
+ Regular.args = {
34
+ name: '3dish',
35
+ value: [
36
+ {
37
+ name: 'DAY',
38
+ fromDate: -1,
39
+ fromTime: '22:00',
40
+ toDate: 0,
41
+ toTime: '06:00'
42
+ },
43
+ {
44
+ name: 'SWING',
45
+ fromDate: 0,
46
+ fromTime: '06:00',
47
+ toDate: 0,
48
+ toTime: '14:00'
49
+ },
50
+ {
51
+ name: 'NIGHT',
52
+ fromDate: 0,
53
+ fromTime: '14:00',
54
+ toDate: 0,
55
+ toTime: '22:00'
56
+ }
57
+ ]
58
+ };
59
+ //# sourceMappingURL=ox-input-3dish.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-input-3dish.stories.js","sourceRoot":"","sources":["../../stories/ox-input-3dish.stories.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAA;AACjC,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAA;AAE1C,eAAe;IACb,KAAK,EAAE,gBAAgB;IACvB,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;KAC1B;CACF,CAAA;AAaD,MAAM,QAAQ,GAAoB,CAAC,EAAE,IAAI,GAAG,OAAO,EAAE,KAAK,GAAG,EAAE,EAAY,EAAE,EAAE,CAAC,IAAI,CAAA;;;;;;;;;;;;cAYtE,CAAC,CAAQ,EAAE,EAAE;IACrB,OAAO,CAAC,GAAG,CAAE,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAA;AACnD,CAAC;WACM,IAAI;aACF,KAAK;;;CAGjB,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxC,OAAO,CAAC,IAAI,GAAG;IACb,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACL;YACE,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,CAAC,CAAC;YACZ,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,OAAO;SAChB;QACD;YACE,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,OAAO;SAChB;QACD;YACE,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,OAAO;SAChB;KACF;CACF,CAAA","sourcesContent":["import '../src/ox-input-3dish.js'\nimport '../src/locale/locale-picker.js'\n\nimport { html, TemplateResult } from 'lit'\n\nexport default {\n title: 'ox-input-3dish',\n component: 'ox-input-3dish',\n argTypes: {\n value: { control: 'object' },\n name: { control: 'text' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n name?: string\n value?: object\n}\n\nconst Template: Story<ArgTypes> = ({ name = '3dish', value = [] }: ArgTypes) => html`\n <link href=\"/themes/app-theme.css\" rel=\"stylesheet\" />\n <link href=\"https://fonts.googleapis.com/css?family=Material+Icons&display=block\" rel=\"stylesheet\" />\n <style>\n body {\n }\n </style>\n\n <locale-picker></locale-picker>\n <br /><br />\n\n <ox-input-3dish\n @change=${(e: Event) => {\n console.log((e.target as HTMLInputElement).value)\n }}\n name=${name}\n .value=${value}\n >\n </ox-input-3dish>\n`\n\nexport const Regular = Template.bind({})\nRegular.args = {\n name: '3dish',\n value: [\n {\n name: 'DAY',\n fromDate: -1,\n fromTime: '22:00',\n toDate: 0,\n toTime: '06:00'\n },\n {\n name: 'SWING',\n fromDate: 0,\n fromTime: '06:00',\n toDate: 0,\n toTime: '14:00'\n },\n {\n name: 'NIGHT',\n fromDate: 0,\n fromTime: '14:00',\n toDate: 0,\n toTime: '22:00'\n }\n ]\n}\n"]}
@@ -0,0 +1,43 @@
1
+ import '../src/ox-input-barcode.js';
2
+ import { TemplateResult } from 'lit';
3
+ declare const _default: {
4
+ title: string;
5
+ component: string;
6
+ argTypes: {
7
+ name: {
8
+ control: string;
9
+ };
10
+ value: {
11
+ control: string;
12
+ };
13
+ scannable: {
14
+ control: string;
15
+ };
16
+ withoutEnter: {
17
+ control: string;
18
+ };
19
+ englishOnly: {
20
+ control: string;
21
+ };
22
+ selectAfterChange: {
23
+ control: string;
24
+ };
25
+ };
26
+ };
27
+ export default _default;
28
+ interface Story<T> {
29
+ (args: T): TemplateResult;
30
+ args?: Partial<T>;
31
+ argTypes?: Record<string, unknown>;
32
+ }
33
+ interface ArgTypes {
34
+ name?: string;
35
+ value?: string;
36
+ scannable?: boolean;
37
+ withoutEnter?: boolean;
38
+ englishOnly?: boolean;
39
+ selectAfterChange?: boolean;
40
+ }
41
+ export declare const Regular: Story<ArgTypes>;
42
+ export declare const EnglishOnly: Story<ArgTypes>;
43
+ export declare const selectAfterChange: Story<ArgTypes>;
@@ -0,0 +1,59 @@
1
+ import '../src/ox-input-barcode.js';
2
+ import { html } from 'lit';
3
+ export default {
4
+ title: 'ox-input-barcode',
5
+ component: 'ox-input-barcode',
6
+ argTypes: {
7
+ name: { control: 'text' },
8
+ value: { control: 'text' },
9
+ scannable: { control: 'boolean' },
10
+ withoutEnter: { control: 'boolean' },
11
+ englishOnly: { control: 'boolean' },
12
+ selectAfterChange: { control: 'boolean' }
13
+ }
14
+ };
15
+ const Template = ({ name = 'barcode', scannable = true, withoutEnter = true, englishOnly = false, selectAfterChange = false }) => html `
16
+ <link href="/themes/app-theme.css" rel="stylesheet" />
17
+ <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
18
+ <style>
19
+ ox-input-barcode {
20
+ font-size: 80px;
21
+ --input-font: initial;
22
+ }
23
+ </style>
24
+
25
+ <ox-input-barcode
26
+ name=${name}
27
+ ?without-enter=${withoutEnter}
28
+ ?scannable=${scannable}
29
+ ?english-only=${englishOnly}
30
+ ?select-after-change=${selectAfterChange}
31
+ @change=${(e) => console.log(e.target.value)}
32
+ >
33
+ </ox-input-barcode>
34
+ `;
35
+ export const Regular = Template.bind({});
36
+ Regular.args = {
37
+ name: 'barcode',
38
+ scannable: true,
39
+ withoutEnter: true,
40
+ englishOnly: false,
41
+ selectAfterChange: false
42
+ };
43
+ export const EnglishOnly = Template.bind({});
44
+ EnglishOnly.args = {
45
+ name: 'barcode',
46
+ scannable: true,
47
+ withoutEnter: true,
48
+ englishOnly: true,
49
+ selectAfterChange: false
50
+ };
51
+ export const selectAfterChange = Template.bind({});
52
+ selectAfterChange.args = {
53
+ name: 'barcode',
54
+ scannable: true,
55
+ withoutEnter: true,
56
+ englishOnly: true,
57
+ selectAfterChange: true
58
+ };
59
+ //# sourceMappingURL=ox-input-barcode.stories.js.map