@operato/input 1.0.0-beta.2 → 1.0.0-beta.20
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.
- package/.storybook/main.js +2 -2
- package/.storybook/server.mjs +4 -4
- package/CHANGELOG.md +398 -0
- package/demo/index-multiple-colors.html +4 -1
- package/demo/index-partition-keys.html +2 -5
- package/demo/index-select.html +1 -1
- package/demo/index.html +4 -0
- package/dist/src/locales/en.d.ts +8 -0
- package/dist/src/locales/en.js +8 -0
- package/dist/src/locales/en.js.map +1 -1
- package/dist/src/locales/ko.d.ts +8 -0
- package/dist/src/locales/ko.js +8 -0
- package/dist/src/locales/ko.js.map +1 -1
- package/dist/src/locales/ms.d.ts +8 -0
- package/dist/src/locales/ms.js +8 -0
- package/dist/src/locales/ms.js.map +1 -1
- package/dist/src/locales/zh.d.ts +8 -0
- package/dist/src/locales/zh.js +8 -0
- package/dist/src/locales/zh.js.map +1 -1
- package/dist/src/ox-input-3dish.js +24 -8
- package/dist/src/ox-input-3dish.js.map +1 -1
- package/dist/src/ox-input-color.js +16 -11
- package/dist/src/ox-input-color.js.map +1 -1
- package/dist/src/ox-input-crontab.js +13 -10
- package/dist/src/ox-input-crontab.js.map +1 -1
- package/dist/src/ox-input-file.js +5 -3
- package/dist/src/ox-input-file.js.map +1 -1
- package/dist/src/ox-input-multiple-colors.d.ts +1 -0
- package/dist/src/ox-input-multiple-colors.js +29 -21
- package/dist/src/ox-input-multiple-colors.js.map +1 -1
- package/dist/src/ox-input-options.d.ts +1 -0
- package/dist/src/ox-input-options.js +54 -14
- package/dist/src/ox-input-options.js.map +1 -1
- package/dist/src/ox-input-partition-keys.d.ts +1 -0
- package/dist/src/ox-input-partition-keys.js +51 -23
- package/dist/src/ox-input-partition-keys.js.map +1 -1
- package/dist/src/ox-input-range.js +35 -38
- package/dist/src/ox-input-range.js.map +1 -1
- package/dist/src/ox-input-search.d.ts +0 -1
- package/dist/src/ox-input-search.js +14 -7
- package/dist/src/ox-input-search.js.map +1 -1
- package/dist/src/ox-input-unit.d.ts +17 -0
- package/dist/src/ox-input-unit.js +122 -0
- package/dist/src/ox-input-unit.js.map +1 -0
- package/dist/src/ox-input-work-shift.js +77 -43
- package/dist/src/ox-input-work-shift.js.map +1 -1
- package/dist/src/ox-select.js +12 -1
- package/dist/src/ox-select.js.map +1 -1
- package/dist/stories/ox-checkbox.stories.d.ts +39 -0
- package/dist/stories/ox-checkbox.stories.js +44 -0
- package/dist/stories/ox-checkbox.stories.js.map +1 -0
- package/dist/stories/ox-input-3dish.stories.d.ts +26 -0
- package/dist/stories/ox-input-3dish.stories.js +59 -0
- package/dist/stories/ox-input-3dish.stories.js.map +1 -0
- package/dist/stories/{index.stories.d.ts → ox-input-barcode.stories.d.ts} +11 -11
- package/dist/stories/ox-input-barcode.stories.js +22 -0
- package/dist/stories/ox-input-barcode.stories.js.map +1 -0
- package/dist/stories/ox-input-conntab.stories.d.ts +26 -0
- package/dist/stories/ox-input-conntab.stories.js +37 -0
- package/dist/stories/ox-input-conntab.stories.js.map +1 -0
- package/dist/stories/ox-input-crontab.stories.d.ts +26 -0
- package/dist/stories/ox-input-crontab.stories.js +37 -0
- package/dist/stories/ox-input-crontab.stories.js.map +1 -0
- package/dist/stories/ox-input-file.stories.d.ts +49 -0
- package/dist/stories/ox-input-file.stories.js +48 -0
- package/dist/stories/ox-input-file.stories.js.map +1 -0
- package/dist/stories/ox-input-multiple-colors.stories.d.ts +20 -0
- package/dist/stories/ox-input-multiple-colors.stories.js +167 -0
- package/dist/stories/ox-input-multiple-colors.stories.js.map +1 -0
- package/dist/stories/ox-input-options.stories.d.ts +25 -0
- package/dist/stories/ox-input-options.stories.js +33 -0
- package/dist/stories/ox-input-options.stories.js.map +1 -0
- package/dist/stories/ox-input-partition-keys.stories.d.ts +27 -0
- package/dist/stories/ox-input-partition-keys.stories.js +55 -0
- package/dist/stories/ox-input-partition-keys.stories.js.map +1 -0
- package/dist/stories/ox-input-range.stories.d.ts +37 -0
- package/dist/stories/ox-input-range.stories.js +28 -0
- package/dist/stories/ox-input-range.stories.js.map +1 -0
- package/dist/stories/ox-input-search.stories.d.ts +29 -0
- package/dist/stories/ox-input-search.stories.js +32 -0
- package/dist/stories/ox-input-search.stories.js.map +1 -0
- package/dist/stories/ox-input-unit.stories.d.ts +40 -0
- package/dist/stories/ox-input-unit.stories.js +42 -0
- package/dist/stories/ox-input-unit.stories.js.map +1 -0
- package/dist/stories/ox-input-work-shift.stories.d.ts +26 -0
- package/dist/stories/ox-input-work-shift.stories.js +59 -0
- package/dist/stories/ox-input-work-shift.stories.js.map +1 -0
- package/dist/stories/ox-select.stories.d.ts +30 -0
- package/dist/stories/ox-select.stories.js +83 -0
- package/dist/stories/ox-select.stories.js.map +1 -0
- package/dist/themes/common-grist-styles.d.ts +1 -0
- package/dist/themes/common-grist-styles.js +110 -0
- package/dist/themes/common-grist-styles.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/src/locales/en.ts +8 -0
- package/src/locales/ko.ts +8 -0
- package/src/locales/ms.ts +8 -0
- package/src/locales/zh.ts +8 -0
- package/src/ox-input-3dish.ts +24 -8
- package/src/ox-input-color.ts +17 -11
- package/src/ox-input-crontab.ts +13 -10
- package/src/ox-input-file.ts +7 -6
- package/src/ox-input-multiple-colors.ts +29 -21
- package/src/ox-input-options.ts +53 -13
- package/src/ox-input-partition-keys.ts +51 -22
- package/src/ox-input-range.ts +35 -38
- package/src/ox-input-search.ts +14 -8
- package/src/ox-input-unit.ts +123 -0
- package/src/ox-input-work-shift.ts +78 -43
- package/src/ox-select.ts +15 -3
- package/stories/ox-checkbox.stories.ts +69 -0
- package/stories/ox-input-3dish.stories.ts +73 -0
- package/stories/ox-input-barcode.stories.ts +38 -0
- package/stories/ox-input-code.stories.ts_ +71 -0
- package/stories/ox-input-crontab.stories.ts +51 -0
- package/stories/ox-input-file.stories.ts +77 -0
- package/stories/ox-input-multiple-colors.stories.ts +178 -0
- package/stories/ox-input-options.stories.ts +47 -0
- package/stories/ox-input-partition-keys.stories.ts +71 -0
- package/stories/ox-input-range.stories.ts +45 -0
- package/stories/ox-input-search.stories.ts +47 -0
- package/stories/ox-input-unit.stories.ts +66 -0
- package/stories/ox-input-work-shift.stories.ts +73 -0
- package/stories/ox-select.stories.ts +101 -0
- package/themes/app-theme.css +142 -0
- package/themes/common-grist-styles.ts +110 -0
- package/themes/input-theme.css +19 -0
- package/xliff/en.xlf +24 -0
- package/xliff/ko.xlf +32 -0
- package/xliff/ms.xlf +24 -0
- package/xliff/zh.xlf +24 -0
- package/dist/stories/index.stories.js +0 -33
- package/dist/stories/index.stories.js.map +0 -1
- package/stories/index.stories.ts +0 -52
@@ -0,0 +1,122 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright © HatioLab Inc. All rights reserved.
|
3
|
+
*/
|
4
|
+
import { __decorate } from "tslib";
|
5
|
+
import { css, html } from 'lit';
|
6
|
+
import { customElement, property, query } from 'lit/decorators.js';
|
7
|
+
import { OxFormField } from './ox-form-field';
|
8
|
+
const UNIT_SYSTEMS = {
|
9
|
+
kg: {
|
10
|
+
mg: 1000000,
|
11
|
+
g: 1000,
|
12
|
+
ton: 0.001
|
13
|
+
},
|
14
|
+
rad: {
|
15
|
+
degree: 180 / Math.PI
|
16
|
+
}
|
17
|
+
};
|
18
|
+
let OxInputUnit = class OxInputUnit extends OxFormField {
|
19
|
+
static { this.styles = [
|
20
|
+
css `
|
21
|
+
input {
|
22
|
+
border: 0;
|
23
|
+
border-bottom: var(--border-dark-color);
|
24
|
+
padding: var(--input-padding);
|
25
|
+
font: var(--input-font);
|
26
|
+
color: var(--primary-text-color);
|
27
|
+
}
|
28
|
+
input:focus {
|
29
|
+
outline: none;
|
30
|
+
border-bottom: 1px solid var(--primary-color);
|
31
|
+
}
|
32
|
+
|
33
|
+
input::-webkit-outer-spin-button,
|
34
|
+
input::-webkit-inner-spin-button {
|
35
|
+
-webkit-appearance: none;
|
36
|
+
margin: 0;
|
37
|
+
}
|
38
|
+
|
39
|
+
input[type='number'] {
|
40
|
+
-moz-appearance: textfield;
|
41
|
+
}
|
42
|
+
|
43
|
+
div {
|
44
|
+
display: inline;
|
45
|
+
position: relative;
|
46
|
+
margin-left: var(--margin-narrow);
|
47
|
+
font: var(--label-font);
|
48
|
+
color: var(--label-color);
|
49
|
+
opacity: 0.7;
|
50
|
+
}
|
51
|
+
`
|
52
|
+
]; }
|
53
|
+
render() {
|
54
|
+
const userUnit = this.userUnit || this.stdUnit;
|
55
|
+
const units = Object.keys(UNIT_SYSTEMS[this.stdUnit]);
|
56
|
+
const rate = !this.userUnit || this.userUnit === this.stdUnit ? 1 : UNIT_SYSTEMS[this.stdUnit][this.userUnit] || 1;
|
57
|
+
return html `
|
58
|
+
<input
|
59
|
+
type="number"
|
60
|
+
.value=${this._toUserUnit(this.value)}
|
61
|
+
placeholder=${this.placeholder}
|
62
|
+
@change=${(e) => this._onChangeValue(e)}
|
63
|
+
/>
|
64
|
+
<div
|
65
|
+
@click=${(e) => {
|
66
|
+
const target = e.currentTarget;
|
67
|
+
this.popup.open({
|
68
|
+
right: 0,
|
69
|
+
top: target.offsetTop + target.offsetHeight
|
70
|
+
});
|
71
|
+
}}
|
72
|
+
>
|
73
|
+
${userUnit}
|
74
|
+
<ox-popup-list
|
75
|
+
.value=${userUnit}
|
76
|
+
@select=${(e) => {
|
77
|
+
this.userUnit = e.detail;
|
78
|
+
}}
|
79
|
+
>
|
80
|
+
<div option value=${this.stdUnit}>${this.stdUnit}</div>
|
81
|
+
${units.map(unit => html `<div option value=${unit}>${unit}</div>`)}
|
82
|
+
</ox-popup-list>
|
83
|
+
</div>
|
84
|
+
`;
|
85
|
+
}
|
86
|
+
_onChangeValue(e) {
|
87
|
+
this.value = this._toStdUnit(this.input.value);
|
88
|
+
this.dispatchEvent(new CustomEvent('change', {
|
89
|
+
bubbles: true,
|
90
|
+
composed: true,
|
91
|
+
detail: this.value
|
92
|
+
}));
|
93
|
+
}
|
94
|
+
_toUserUnit(stdValue) {
|
95
|
+
const rate = !this.userUnit || this.userUnit === this.stdUnit ? 1 : UNIT_SYSTEMS[this.stdUnit][this.userUnit] || 1;
|
96
|
+
return Number(stdValue) * rate;
|
97
|
+
}
|
98
|
+
_toStdUnit(userValue) {
|
99
|
+
const rate = !this.userUnit || this.userUnit === this.stdUnit ? 1 : UNIT_SYSTEMS[this.stdUnit][this.userUnit] || 1;
|
100
|
+
return isNaN(Number(userValue)) ? undefined : Number(userValue) / rate;
|
101
|
+
}
|
102
|
+
};
|
103
|
+
__decorate([
|
104
|
+
property({ type: String })
|
105
|
+
], OxInputUnit.prototype, "placeholder", void 0);
|
106
|
+
__decorate([
|
107
|
+
property({ type: String, attribute: 'std-unit' })
|
108
|
+
], OxInputUnit.prototype, "stdUnit", void 0);
|
109
|
+
__decorate([
|
110
|
+
property({ type: String, attribute: 'user-unit' })
|
111
|
+
], OxInputUnit.prototype, "userUnit", void 0);
|
112
|
+
__decorate([
|
113
|
+
query('input')
|
114
|
+
], OxInputUnit.prototype, "input", void 0);
|
115
|
+
__decorate([
|
116
|
+
query('ox-popup-list')
|
117
|
+
], OxInputUnit.prototype, "popup", void 0);
|
118
|
+
OxInputUnit = __decorate([
|
119
|
+
customElement('ox-input-unit')
|
120
|
+
], OxInputUnit);
|
121
|
+
export { OxInputUnit };
|
122
|
+
//# sourceMappingURL=ox-input-unit.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ox-input-unit.js","sourceRoot":"","sources":["../../src/ox-input-unit.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { OxPopupList } from '@operato/popup'\n\nimport { OxFormField } from './ox-form-field'\n\nconst UNIT_SYSTEMS: { [unit: string]: { [unit: string]: number } } = {\n kg: {\n mg: 1000000,\n g: 1000,\n ton: 0.001\n },\n rad: {\n degree: 180 / Math.PI\n }\n}\n\n@customElement('ox-input-unit')\nexport class OxInputUnit extends OxFormField {\n static styles = [\n css`\n input {\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 input:focus {\n outline: none;\n border-bottom: 1px solid var(--primary-color);\n }\n\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n input[type='number'] {\n -moz-appearance: textfield;\n }\n\n div {\n display: inline;\n position: relative;\n margin-left: var(--margin-narrow);\n font: var(--label-font);\n color: var(--label-color);\n opacity: 0.7;\n }\n `\n ]\n\n @property({ type: String }) placeholder?: string\n @property({ type: String, attribute: 'std-unit' }) stdUnit!: string\n @property({ type: String, attribute: 'user-unit' }) userUnit?: string\n\n @query('input') input!: HTMLInputElement\n @query('ox-popup-list') popup!: OxPopupList\n\n render() {\n const userUnit = this.userUnit || this.stdUnit\n const units = Object.keys(UNIT_SYSTEMS[this.stdUnit])\n const rate = !this.userUnit || this.userUnit === this.stdUnit ? 1 : UNIT_SYSTEMS[this.stdUnit][this.userUnit] || 1\n\n return html`\n <input\n type=\"number\"\n .value=${this._toUserUnit(this.value)}\n placeholder=${this.placeholder}\n @change=${(e: Event) => this._onChangeValue(e)}\n />\n <div\n @click=${(e: Event) => {\n const target = e.currentTarget as HTMLElement\n this.popup.open({\n right: 0,\n top: target.offsetTop + target.offsetHeight\n })\n }}\n >\n ${userUnit}\n <ox-popup-list\n .value=${userUnit}\n @select=${(e: CustomEvent) => {\n this.userUnit = e.detail\n }}\n >\n <div option value=${this.stdUnit}>${this.stdUnit}</div>\n ${units.map(unit => html`<div option value=${unit}>${unit}</div>`)}\n </ox-popup-list>\n </div>\n `\n }\n\n _onChangeValue(e: Event) {\n this.value = this._toStdUnit(this.input.value)\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: this.value\n })\n )\n }\n\n _toUserUnit(stdValue: string | number | undefined) {\n const rate = !this.userUnit || this.userUnit === this.stdUnit ? 1 : UNIT_SYSTEMS[this.stdUnit][this.userUnit] || 1\n return Number(stdValue) * rate\n }\n\n _toStdUnit(userValue: string | number | undefined) {\n const rate = !this.userUnit || this.userUnit === this.stdUnit ? 1 : UNIT_SYSTEMS[this.stdUnit][this.userUnit] || 1\n return isNaN(Number(userValue)) ? undefined : Number(userValue) / rate\n }\n}\n"]}
|
@@ -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
|
-
|
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:
|
41
|
+
width: 34px;
|
56
42
|
text-align: center;
|
57
43
|
}
|
58
44
|
|
@@ -61,21 +47,64 @@ 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
|
-
|
70
|
-
flex: 2;
|
82
|
+
input[type='time'] {
|
83
|
+
padding: 2px var(--padding-default);
|
71
84
|
}
|
72
85
|
|
73
|
-
|
74
|
-
border
|
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
|
-
|
78
|
-
|
106
|
+
[placeholder='value'] {
|
107
|
+
flex: 2;
|
79
108
|
}
|
80
109
|
`; }
|
81
110
|
firstUpdated() {
|
@@ -84,11 +113,11 @@ let OxInputWorkShift = class OxInputWorkShift extends OxFormField {
|
|
84
113
|
render() {
|
85
114
|
return html `
|
86
115
|
<div data-header>
|
87
|
-
<span
|
88
|
-
<span
|
89
|
-
<span
|
90
|
-
<span
|
91
|
-
<span
|
116
|
+
<span>${msg('name')}</span>
|
117
|
+
<span>${msg('from date')}</span>
|
118
|
+
<span>${msg('from time')}</span>
|
119
|
+
<span>${msg('to date')}</span>
|
120
|
+
<span>${msg('to time')}</span>
|
92
121
|
<empty-element></empty-element>
|
93
122
|
</div>
|
94
123
|
|
@@ -97,20 +126,22 @@ let OxInputWorkShift = class OxInputWorkShift extends OxFormField {
|
|
97
126
|
<input type="text" data-name .value=${item.name} required />
|
98
127
|
|
99
128
|
<select data-from-date .value=${item.fromDate || 0}>
|
100
|
-
<option value="-1"
|
101
|
-
<option value="0"
|
102
|
-
<option value="1"
|
129
|
+
<option value="-1">${msg('The day before')}</option>
|
130
|
+
<option value="0">${msg('The day')}</option>
|
131
|
+
<option value="1">${msg('The day after')}</option>
|
103
132
|
</select>
|
104
133
|
<input type="time" data-from-time .value=${item.fromTime} step="1800" required />
|
105
134
|
|
106
135
|
<select data-to-date .value=${item.toDate || 0}>
|
107
|
-
<option value="-1"
|
108
|
-
<option value="0"
|
109
|
-
<option value="1"
|
136
|
+
<option value="-1">${msg('The day before')}</option>
|
137
|
+
<option value="0">${msg('The day')}</option>
|
138
|
+
<option value="1">${msg('The day after')}</option>
|
110
139
|
</select>
|
111
140
|
<input type="time" data-to-time .value=${item.toTime} step="1800" required />
|
112
141
|
|
113
|
-
<button class="record-action" @click=${(e) => this._delete(e)} tabindex="-1"
|
142
|
+
<button class="record-action" @click=${(e) => this._delete(e)} tabindex="-1">
|
143
|
+
<mwc-icon>remove</mwc-icon>
|
144
|
+
</button>
|
114
145
|
</div>
|
115
146
|
`)}
|
116
147
|
|
@@ -118,20 +149,22 @@ let OxInputWorkShift = class OxInputWorkShift extends OxFormField {
|
|
118
149
|
<input type="text" data-name />
|
119
150
|
|
120
151
|
<select data-from-date>
|
121
|
-
<option value="-1"
|
122
|
-
<option value="0" selected
|
123
|
-
<option value="+1"
|
152
|
+
<option value="-1">${msg('The day before')}</option>
|
153
|
+
<option value="0" selected>${msg('The day')}</option>
|
154
|
+
<option value="+1">${msg('The day after')}</option>
|
124
155
|
</select>
|
125
156
|
<input type="time" data-from-time step="1800" />
|
126
157
|
|
127
158
|
<select data-to-date>
|
128
|
-
<option value="-1"
|
129
|
-
<option value="0" selected
|
130
|
-
<option value="+1"
|
159
|
+
<option value="-1">${msg('The day before')}</option>
|
160
|
+
<option value="0" selected>${msg('The day')}</option>
|
161
|
+
<option value="+1">${msg('The day after')}</option>
|
131
162
|
</select>
|
132
163
|
<input type="time" data-to-time step="1800" />
|
133
164
|
|
134
|
-
<button class="record-action" @click=${(e) => this._add()} tabindex="-1"
|
165
|
+
<button class="record-action" @click=${(e) => this._add()} tabindex="-1">
|
166
|
+
<mwc-icon>add</mwc-icon>
|
167
|
+
</button>
|
135
168
|
</div>
|
136
169
|
`;
|
137
170
|
}
|
@@ -223,6 +256,7 @@ __decorate([
|
|
223
256
|
property({ type: Object })
|
224
257
|
], OxInputWorkShift.prototype, "value", void 0);
|
225
258
|
OxInputWorkShift = __decorate([
|
259
|
+
localized(),
|
226
260
|
customElement('ox-input-work-shift')
|
227
261
|
], OxInputWorkShift);
|
228
262
|
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 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 ${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\">${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"]}
|
package/dist/src/ox-select.js
CHANGED
@@ -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)) {
|
@@ -40,6 +40,11 @@ let Select = class Select extends OxFormField {
|
|
40
40
|
align-items: center;
|
41
41
|
justify-content: center;
|
42
42
|
cursor: pointer;
|
43
|
+
|
44
|
+
border-bottom: var(--border-dark-color);
|
45
|
+
padding: var(--input-padding);
|
46
|
+
font: var(--input-font);
|
47
|
+
color: var(--primary-text-color);
|
43
48
|
}
|
44
49
|
|
45
50
|
span {
|
@@ -48,6 +53,9 @@ let Select = class Select extends OxFormField {
|
|
48
53
|
text-overflow: ellipsis;
|
49
54
|
white-space: nowrap;
|
50
55
|
}
|
56
|
+
div:hover {
|
57
|
+
border-bottom: 1px solid var(--primary-color);
|
58
|
+
}
|
51
59
|
|
52
60
|
mwc-icon {
|
53
61
|
display: block;
|
@@ -57,6 +65,9 @@ let Select = class Select extends OxFormField {
|
|
57
65
|
color: var(--theme-primary-text-color, #3c3938);
|
58
66
|
opacity: 0.7;
|
59
67
|
}
|
68
|
+
div:hover mwc-icon {
|
69
|
+
color: var(--primary-color);
|
70
|
+
}
|
60
71
|
|
61
72
|
::slotted(ox-popup-list) {
|
62
73
|
width: 100%;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ox-select.js","sourceRoot":"","sources":["../../src/ox-select.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,oBAAoB,CAAA;AAC3B,OAAO,iCAAiC,CAAA;AAExC,OAAO,
|
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 }\n\n div {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\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\n span {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n div:hover {\n border-bottom: 1px solid var(--primary-color);\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 = (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"]}
|
@@ -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
|