@operato/input 0.2.35 → 0.2.42
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/CHANGELOG.md +52 -0
- package/demo/index-3dish.html +15 -2
- package/demo/index-angle.html +9 -4
- package/demo/index-barcode.html +66 -0
- package/demo/index-button-radio.html +18 -6
- package/demo/index-checkbox.html +17 -9
- package/demo/index-select.html +118 -0
- package/demo/index-stack.html +15 -3
- package/demo/index.html +42 -86
- package/dist/src/ox-buttons-radio.d.ts +7 -5
- package/dist/src/ox-buttons-radio.js +18 -10
- package/dist/src/ox-buttons-radio.js.map +1 -1
- package/dist/src/ox-checkbox.d.ts +5 -6
- package/dist/src/ox-checkbox.js +33 -33
- package/dist/src/ox-checkbox.js.map +1 -1
- package/dist/src/ox-formfield.d.ts +10 -0
- package/dist/src/ox-formfield.js +38 -0
- package/dist/src/ox-formfield.js.map +1 -0
- package/dist/src/ox-input-3dish.d.ts +15 -14
- package/dist/src/ox-input-3dish.js +49 -23
- package/dist/src/ox-input-3dish.js.map +1 -1
- package/dist/src/ox-input-angle.d.ts +4 -5
- package/dist/src/ox-input-angle.js +15 -13
- package/dist/src/ox-input-angle.js.map +1 -1
- package/dist/src/ox-input-barcode.d.ts +22 -0
- package/dist/src/ox-input-barcode.js +205 -0
- package/dist/src/ox-input-barcode.js.map +1 -0
- package/dist/src/ox-input-stack.d.ts +5 -3
- package/dist/src/ox-input-stack.js +44 -35
- package/dist/src/ox-input-stack.js.map +1 -1
- package/dist/src/ox-select.d.ts +5 -4
- package/dist/src/ox-select.js +34 -12
- package/dist/src/ox-select.js.map +1 -1
- package/dist/test/property-angle.test.js +3 -3
- package/dist/test/property-angle.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/src/ox-buttons-radio.ts +22 -10
- package/src/ox-checkbox.ts +37 -33
- package/src/ox-formfield.ts +36 -0
- package/src/ox-input-3dish.ts +63 -29
- package/src/ox-input-angle.ts +19 -14
- package/src/ox-input-barcode.ts +203 -0
- package/src/ox-input-stack.ts +49 -24
- package/src/ox-select.ts +46 -16
- package/test/property-angle.test.ts +3 -4
@@ -2,20 +2,21 @@
|
|
2
2
|
* @license Copyright © HatioLab Inc. All rights reserved.
|
3
3
|
*/
|
4
4
|
import { __decorate } from "tslib";
|
5
|
-
import { css, html
|
5
|
+
import { css, html } from 'lit';
|
6
6
|
import { customElement, property } from 'lit/decorators.js';
|
7
|
+
import { OxFormField } from './ox-formfield';
|
7
8
|
/**
|
8
9
|
여러 버튼 중에서 하나만 눌리거나, 모두 눌리지 않은 상태만을 갖는 라디오 형태의 버튼이다.
|
9
10
|
|
10
11
|
Example:
|
11
12
|
|
12
13
|
<ox-buttons-radio @change=${e => this._onChange(e)} value=${value}>
|
13
|
-
<div
|
14
|
-
<div
|
15
|
-
<div
|
14
|
+
<div value="top"></div>
|
15
|
+
<div value="middle"></div>
|
16
|
+
<div value="bottom"></div>
|
16
17
|
</ox-buttons-radio>
|
17
18
|
*/
|
18
|
-
let PropertyButtonsRadio = class PropertyButtonsRadio extends
|
19
|
+
let PropertyButtonsRadio = class PropertyButtonsRadio extends OxFormField {
|
19
20
|
constructor() {
|
20
21
|
super(...arguments);
|
21
22
|
/**
|
@@ -34,7 +35,7 @@ let PropertyButtonsRadio = class PropertyButtonsRadio extends LitElement {
|
|
34
35
|
}
|
35
36
|
_onValueChanged(value) {
|
36
37
|
this.buttons.forEach(button => {
|
37
|
-
if (value === button.getAttribute('
|
38
|
+
if (value === button.getAttribute('value')) {
|
38
39
|
button.setAttribute('active', '');
|
39
40
|
}
|
40
41
|
else {
|
@@ -44,7 +45,7 @@ let PropertyButtonsRadio = class PropertyButtonsRadio extends LitElement {
|
|
44
45
|
}
|
45
46
|
_onTapButton(e) {
|
46
47
|
var target = e.target;
|
47
|
-
while (!target.hasAttribute('
|
48
|
+
while (!target.hasAttribute('value') && target !== this) {
|
48
49
|
target = target.parentElement;
|
49
50
|
}
|
50
51
|
if (target === this) {
|
@@ -53,7 +54,7 @@ let PropertyButtonsRadio = class PropertyButtonsRadio extends LitElement {
|
|
53
54
|
var old = this.value;
|
54
55
|
if (!this.mandatory) {
|
55
56
|
if (!target.getAttribute('active')) {
|
56
|
-
this.value = target.getAttribute('
|
57
|
+
this.value = target.getAttribute('value');
|
57
58
|
target.setAttribute('active', '');
|
58
59
|
}
|
59
60
|
else {
|
@@ -62,13 +63,20 @@ let PropertyButtonsRadio = class PropertyButtonsRadio extends LitElement {
|
|
62
63
|
}
|
63
64
|
}
|
64
65
|
else {
|
65
|
-
this.value = target.getAttribute('
|
66
|
+
this.value = target.getAttribute('value');
|
66
67
|
target.setAttribute('active', '');
|
67
68
|
}
|
68
69
|
if (old !== this.value) {
|
69
|
-
this.dispatchEvent(new CustomEvent('change', {
|
70
|
+
this.dispatchEvent(new CustomEvent('change', {
|
71
|
+
bubbles: true,
|
72
|
+
composed: true,
|
73
|
+
detail: this.value
|
74
|
+
}));
|
70
75
|
}
|
71
76
|
}
|
77
|
+
appendFormData({ formData }) {
|
78
|
+
this.name && formData.append(this.name, JSON.stringify(this.value));
|
79
|
+
}
|
72
80
|
};
|
73
81
|
PropertyButtonsRadio.styles = [
|
74
82
|
css `
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ox-buttons-radio.js","sourceRoot":"","sources":["../../src/ox-buttons-radio.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,
|
1
|
+
{"version":3,"file":"ox-buttons-radio.js","sourceRoot":"","sources":["../../src/ox-buttons-radio.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { OxFormField } from './ox-formfield'\n\n/**\n여러 버튼 중에서 하나만 눌리거나, 모두 눌리지 않은 상태만을 갖는 라디오 형태의 버튼이다.\n\nExample:\n\n <ox-buttons-radio @change=${e => this._onChange(e)} value=${value}>\n <div value=\"top\"></div>\n <div value=\"middle\"></div>\n <div value=\"bottom\"></div>\n </ox-buttons-radio>\n*/\n@customElement('ox-buttons-radio')\nexport class PropertyButtonsRadio extends OxFormField {\n static styles = [\n css`\n :host {\n display: inline-block;\n }\n `\n ]\n\n /**\n * `value`는 버튼의 눌린 상태를 값으로 갖는 속성이다.\n */\n @property({ type: Object }) value: Object | null = null\n @property({ type: Boolean }) mandatory!: boolean\n\n render() {\n return html` <slot @click=${(e: Event) => this._onTapButton(e)}></slot> `\n }\n\n updated(changes: PropertyValues<this>) {\n changes.has('value') && this._onValueChanged(this.value)\n }\n\n get buttons() {\n return Array.from(this.querySelectorAll('*'))\n }\n\n _onValueChanged(value: Object | null) {\n this.buttons.forEach(button => {\n if (value === button.getAttribute('value')) {\n button.setAttribute('active', '')\n } else {\n button.removeAttribute('active')\n }\n })\n }\n\n _onTapButton(e: Event) {\n var target = e.target as HTMLElement\n\n while (!target.hasAttribute('value') && target !== this) {\n target = target.parentElement!\n }\n\n if (target === this) {\n return\n }\n\n var old = this.value\n\n if (!this.mandatory) {\n if (!target.getAttribute('active')) {\n this.value = target.getAttribute('value')\n target.setAttribute('active', '')\n } else {\n this.value = null\n target.removeAttribute('active')\n }\n } else {\n this.value = target.getAttribute('value')\n target.setAttribute('active', '')\n }\n\n if (old !== this.value) {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: this.value\n })\n )\n }\n }\n\n protected appendFormData({ formData }: FormDataEvent): void {\n this.name && formData.append(this.name, JSON.stringify(this.value))\n }\n}\n"]}
|
@@ -1,16 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
*/
|
4
|
-
import { LitElement } from 'lit';
|
5
|
-
export declare class OxCheckbox extends LitElement {
|
1
|
+
import { OxFormField } from './ox-formfield';
|
2
|
+
export declare class OxCheckbox extends OxFormField {
|
6
3
|
static styles: import("lit").CSSResult[];
|
7
4
|
checked: boolean;
|
8
5
|
disabled: boolean;
|
9
|
-
name
|
6
|
+
name?: string;
|
10
7
|
_hasInner: boolean;
|
11
8
|
render(): import("lit-html").TemplateResult<1>;
|
9
|
+
connectedCallback(): void;
|
12
10
|
onClick(): void;
|
13
11
|
get checkedIcon(): import("lit-html").TemplateResult<1>;
|
14
12
|
get uncheckedIcon(): import("lit-html").TemplateResult<1>;
|
15
13
|
onKeyDown(e: KeyboardEvent): void;
|
14
|
+
protected appendFormData({ formData }: FormDataEvent): void;
|
16
15
|
}
|
package/dist/src/ox-checkbox.js
CHANGED
@@ -1,30 +1,21 @@
|
|
1
|
-
/**
|
2
|
-
* @license Copyright © HatioLab Inc. All rights reserved.
|
3
|
-
*/
|
4
|
-
import { __decorate } from "tslib";
|
5
1
|
/*
|
6
2
|
This component is inspired by https://github.com/Polydile/dile-components, thanks Dile.
|
7
3
|
*/
|
8
|
-
import {
|
4
|
+
import { __decorate } from "tslib";
|
5
|
+
import { css, html } from 'lit';
|
9
6
|
import { customElement, property, state } from 'lit/decorators.js';
|
10
|
-
|
7
|
+
import { OxFormField } from './ox-formfield';
|
8
|
+
let OxCheckbox = class OxCheckbox extends OxFormField {
|
11
9
|
constructor() {
|
12
10
|
super(...arguments);
|
13
11
|
this.checked = false;
|
14
12
|
this.disabled = false;
|
15
|
-
this.name = '';
|
16
13
|
this._hasInner = !!this.innerHTML.trim().length;
|
17
14
|
}
|
18
15
|
render() {
|
19
16
|
return html `
|
20
17
|
<div @click=${this.onClick} ?disabled=${this.disabled}>
|
21
|
-
<a
|
22
|
-
href="#"
|
23
|
-
@click=${(e) => e.preventDefault()}
|
24
|
-
@keydown=${this.onKeyDown}
|
25
|
-
?checked=${this.checked}
|
26
|
-
checkbox
|
27
|
-
>
|
18
|
+
<a href="#" @click=${(e) => e.preventDefault()} checkbox>
|
28
19
|
${this.checked ? this.checkedIcon : this.uncheckedIcon}
|
29
20
|
</a>
|
30
21
|
${this._hasInner
|
@@ -35,6 +26,11 @@ let OxCheckbox = class OxCheckbox extends LitElement {
|
|
35
26
|
</div>
|
36
27
|
`;
|
37
28
|
}
|
29
|
+
connectedCallback() {
|
30
|
+
super.connectedCallback();
|
31
|
+
this.setAttribute('tabindex', '0');
|
32
|
+
this.addEventListener('keydown', this.onKeyDown.bind(this));
|
33
|
+
}
|
38
34
|
onClick() {
|
39
35
|
if (this.disabled) {
|
40
36
|
return;
|
@@ -43,28 +39,32 @@ let OxCheckbox = class OxCheckbox extends LitElement {
|
|
43
39
|
this.dispatchEvent(new CustomEvent('change', {
|
44
40
|
bubbles: true,
|
45
41
|
composed: true,
|
46
|
-
detail:
|
47
|
-
checked: this.checked,
|
48
|
-
name: this.name
|
49
|
-
}
|
42
|
+
detail: this.checked
|
50
43
|
}));
|
51
44
|
}
|
52
45
|
get checkedIcon() {
|
53
|
-
return html
|
54
|
-
<
|
55
|
-
|
46
|
+
return html `
|
47
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
48
|
+
<path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z" />
|
49
|
+
</svg>
|
50
|
+
`;
|
56
51
|
}
|
57
52
|
get uncheckedIcon() {
|
58
|
-
return html
|
59
|
-
<
|
60
|
-
|
53
|
+
return html `
|
54
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
55
|
+
<path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z" />
|
56
|
+
</svg>
|
57
|
+
`;
|
61
58
|
}
|
62
59
|
onKeyDown(e) {
|
63
60
|
e.preventDefault();
|
64
|
-
if (e.
|
61
|
+
if (e.key === ' ' || e.key == 'Spacebar') {
|
65
62
|
this.onClick();
|
66
63
|
}
|
67
64
|
}
|
65
|
+
appendFormData({ formData }) {
|
66
|
+
this.name && formData.append(this.name, this.checked ? 'true' : 'false');
|
67
|
+
}
|
68
68
|
};
|
69
69
|
OxCheckbox.styles = [
|
70
70
|
css `
|
@@ -88,8 +88,8 @@ OxCheckbox.styles = [
|
|
88
88
|
border-radius: var(--ox-checkbox-border-radius, 4px);
|
89
89
|
border: var(--ox-checkbox-border, 1px solid rgba(0, 0, 0, 0.3));
|
90
90
|
background-color: var(--ox-checkbox-background-color, #fff);
|
91
|
-
width: var(--ox-checkbox-size,
|
92
|
-
height: var(--ox-checkbox-size,
|
91
|
+
width: var(--ox-checkbox-size, 15px);
|
92
|
+
height: var(--ox-checkbox-size, 15px);
|
93
93
|
align-items: center;
|
94
94
|
justify-content: center;
|
95
95
|
}
|
@@ -99,7 +99,7 @@ OxCheckbox.styles = [
|
|
99
99
|
border: var(--ox-checkbox-unchecked-border, 1px solid rgba(0, 0, 0, 0.3));
|
100
100
|
}
|
101
101
|
|
102
|
-
|
102
|
+
:host([checked]) a {
|
103
103
|
background-color: var(--ox-checkbox-checked-background-color, #fff);
|
104
104
|
border: var(--ox-checkbox-checked-border, 1px solid #38a25b);
|
105
105
|
}
|
@@ -108,13 +108,13 @@ OxCheckbox.styles = [
|
|
108
108
|
fill: var(--ox-checkbox-fill-color, rgba(0, 0, 0, 0.1));
|
109
109
|
}
|
110
110
|
|
111
|
-
[checked] path {
|
111
|
+
:host([checked]) path {
|
112
112
|
fill: var(--ox-checkbox-checked-color, #38a25b);
|
113
113
|
}
|
114
114
|
|
115
115
|
svg {
|
116
|
-
width: var(--ox-checkbox-size,
|
117
|
-
height: var(--ox-checkbox-size,
|
116
|
+
width: var(--ox-checkbox-size, 15px);
|
117
|
+
height: var(--ox-checkbox-size, 15px);
|
118
118
|
}
|
119
119
|
|
120
120
|
[label] {
|
@@ -122,13 +122,13 @@ OxCheckbox.styles = [
|
|
122
122
|
color: var(--ox-checkbox-label-color, #3a5877);
|
123
123
|
}
|
124
124
|
|
125
|
-
[checked]
|
125
|
+
:host([checked]) [label] {
|
126
126
|
font-weight: var(--ox-checkbox-checked-font-weight, bold);
|
127
127
|
}
|
128
128
|
`
|
129
129
|
];
|
130
130
|
__decorate([
|
131
|
-
property({ type: Boolean })
|
131
|
+
property({ type: Boolean, attribute: 'checked', reflect: true })
|
132
132
|
], OxCheckbox.prototype, "checked", void 0);
|
133
133
|
__decorate([
|
134
134
|
property({ type: Boolean })
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ox-checkbox.js","sourceRoot":"","sources":["../../src/ox-checkbox.ts"],"names":[],"mappings":"AAAA;;
|
1
|
+
{"version":3,"file":"ox-checkbox.js","sourceRoot":"","sources":["../../src/ox-checkbox.ts"],"names":[],"mappings":"AAAA;;EAEE;;AAEF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG5C,IAAa,UAAU,GAAvB,MAAa,UAAW,SAAQ,WAAW;IAA3C;;QA+DoE,YAAO,GAAY,KAAK,CAAA;QAC7D,aAAQ,GAAY,KAAK,CAAA;QAG7C,cAAS,GAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,CAAA;IAmE9D,CAAC;IAjEC,MAAM;QACJ,OAAO,IAAI,CAAA;oBACK,IAAI,CAAC,OAAO,cAAc,IAAI,CAAC,QAAQ;6BAC9B,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;YACjD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa;;UAEtD,IAAI,CAAC,SAAS;YACd,CAAC,CAAC,IAAI,CAAA;;oBAEI;YACV,CAAC,CAAC,EAAE;;KAET,CAAA;IACH,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAEzB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAM;SACP;QAED,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAA;QAE5B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAA;;;;KAIV,CAAA;IACH,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAA;;;;KAIV,CAAA;IACH,CAAC;IAED,SAAS,CAAC,CAAgB;QACxB,CAAC,CAAC,cAAc,EAAE,CAAA;QAElB,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,EAAE;YACxC,IAAI,CAAC,OAAO,EAAE,CAAA;SACf;IACH,CAAC;IAES,cAAc,CAAC,EAAE,QAAQ,EAAiB;QAClD,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC1E,CAAC;CACF,CAAA;AArIQ,iBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0DF;CACF,CAAA;AAEiE;IAAjE,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;2CAAyB;AAC7D;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4CAA0B;AAC1B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAAc;AAEhC;IAAR,KAAK,EAAE;6CAAoD;AAnEjD,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CAsItB;SAtIY,UAAU","sourcesContent":["/*\n This component is inspired by https://github.com/Polydile/dile-components, thanks Dile.\n*/\n\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { OxFormField } from './ox-formfield'\n\n@customElement('ox-checkbox')\nexport class OxCheckbox extends OxFormField {\n static styles = [\n css`\n :host {\n display: block;\n }\n\n div {\n display: flex;\n align-items: center;\n cursor: pointer;\n }\n\n [disabled] {\n opacity: var(--ox-checkbox-disabled-opacity, 0.5);\n cursor: auto;\n }\n\n [checkbox] {\n display: flex;\n border-radius: var(--ox-checkbox-border-radius, 4px);\n border: var(--ox-checkbox-border, 1px solid rgba(0, 0, 0, 0.3));\n background-color: var(--ox-checkbox-background-color, #fff);\n width: var(--ox-checkbox-size, 15px);\n height: var(--ox-checkbox-size, 15px);\n align-items: center;\n justify-content: center;\n }\n\n a {\n background-color: var(--ox-checkbox-unchecked-background-color, #fff);\n border: var(--ox-checkbox-unchecked-border, 1px solid rgba(0, 0, 0, 0.3));\n }\n\n :host([checked]) a {\n background-color: var(--ox-checkbox-checked-background-color, #fff);\n border: var(--ox-checkbox-checked-border, 1px solid #38a25b);\n }\n\n path {\n fill: var(--ox-checkbox-fill-color, rgba(0, 0, 0, 0.1));\n }\n\n :host([checked]) path {\n fill: var(--ox-checkbox-checked-color, #38a25b);\n }\n\n svg {\n width: var(--ox-checkbox-size, 15px);\n height: var(--ox-checkbox-size, 15px);\n }\n\n [label] {\n margin: var(--ox-checkbox-label-margin, 0 0 0 7px);\n color: var(--ox-checkbox-label-color, #3a5877);\n }\n\n :host([checked]) [label] {\n font-weight: var(--ox-checkbox-checked-font-weight, bold);\n }\n `\n ]\n\n @property({ type: Boolean, attribute: 'checked', reflect: true }) checked: boolean = false\n @property({ type: Boolean }) disabled: boolean = false\n @property({ type: String }) name?: string\n\n @state() _hasInner: boolean = !!this.innerHTML.trim().length\n\n render() {\n return html`\n <div @click=${this.onClick} ?disabled=${this.disabled}>\n <a href=\"#\" @click=${(e: Event) => e.preventDefault()} checkbox>\n ${this.checked ? this.checkedIcon : this.uncheckedIcon}\n </a>\n ${this._hasInner\n ? html` <span label>\n <slot></slot>\n </span>`\n : ''}\n </div>\n `\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n this.setAttribute('tabindex', '0')\n this.addEventListener('keydown', this.onKeyDown.bind(this))\n }\n\n onClick() {\n if (this.disabled) {\n return\n }\n\n this.checked = !this.checked\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: this.checked\n })\n )\n }\n\n get checkedIcon() {\n return html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z\" />\n </svg>\n `\n }\n\n get uncheckedIcon() {\n return html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z\" />\n </svg>\n `\n }\n\n onKeyDown(e: KeyboardEvent) {\n e.preventDefault()\n\n if (e.key === ' ' || e.key == 'Spacebar') {\n this.onClick()\n }\n }\n\n protected appendFormData({ formData }: FormDataEvent): void {\n this.name && formData.append(this.name, this.checked ? 'true' : 'false')\n }\n}\n"]}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { LitElement } from 'lit-element';
|
2
|
+
export declare abstract class OxFormField extends LitElement {
|
3
|
+
name?: string;
|
4
|
+
value?: any;
|
5
|
+
private _form;
|
6
|
+
private _formdataEventHandler;
|
7
|
+
connectedCallback(): void;
|
8
|
+
disconnectedCallback(): void;
|
9
|
+
protected appendFormData({ formData }: FormDataEvent): void;
|
10
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import { __decorate } from "tslib";
|
2
|
+
import { LitElement } from 'lit-element';
|
3
|
+
import { property } from 'lit/decorators.js';
|
4
|
+
export class OxFormField extends LitElement {
|
5
|
+
constructor() {
|
6
|
+
super(...arguments);
|
7
|
+
this._form = null;
|
8
|
+
this._formdataEventHandler = null;
|
9
|
+
}
|
10
|
+
connectedCallback() {
|
11
|
+
super.connectedCallback();
|
12
|
+
if (this.name) {
|
13
|
+
this._form = this.closest('form');
|
14
|
+
if (this._form) {
|
15
|
+
this._formdataEventHandler = this.appendFormData.bind(this);
|
16
|
+
this._form.addEventListener('formdata', this._formdataEventHandler);
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
disconnectedCallback() {
|
21
|
+
super.disconnectedCallback();
|
22
|
+
if (this._form) {
|
23
|
+
this._form.removeEventListener('formdata', this._formdataEventHandler);
|
24
|
+
this._form = null;
|
25
|
+
this._formdataEventHandler = null;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
appendFormData({ formData }) {
|
29
|
+
this.name && formData.append(this.name, this.value);
|
30
|
+
}
|
31
|
+
}
|
32
|
+
__decorate([
|
33
|
+
property({ type: String })
|
34
|
+
], OxFormField.prototype, "name", void 0);
|
35
|
+
__decorate([
|
36
|
+
property()
|
37
|
+
], OxFormField.prototype, "value", void 0);
|
38
|
+
//# sourceMappingURL=ox-formfield.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ox-formfield.js","sourceRoot":"","sources":["../../src/ox-formfield.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,MAAM,OAAgB,WAAY,SAAQ,UAAU;IAApD;;QAIU,UAAK,GAA2B,IAAI,CAAA;QACpC,0BAAqB,GAAyB,IAAI,CAAA;IA2B5D,CAAC;IAzBU,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAEzB,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACjC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAkB,CAAA;gBAC5E,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;aACpE;SACF;IACH,CAAC;IAEQ,oBAAoB;QAC3B,KAAK,CAAC,oBAAoB,EAAE,CAAA;QAE5B,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAsB,CAAC,CAAA;YACvE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACjB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAA;SAClC;IACH,CAAC;IAES,cAAc,CAAC,EAAE,QAAQ,EAAiB;QAClD,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACrD,CAAC;CACF;AA/B6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yCAAc;AAC7B;IAAX,QAAQ,EAAE;0CAAY","sourcesContent":["import { LitElement } from 'lit-element'\nimport { property } from 'lit/decorators.js'\n\nexport abstract class OxFormField extends LitElement {\n @property({ type: String }) name?: string\n @property() value?: any\n\n private _form: HTMLFormElement | null = null\n private _formdataEventHandler: EventListener | null = null\n\n override connectedCallback(): void {\n super.connectedCallback()\n\n if (this.name) {\n this._form = this.closest('form')\n if (this._form) {\n this._formdataEventHandler = this.appendFormData.bind(this) as EventListener\n this._form.addEventListener('formdata', this._formdataEventHandler)\n }\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback()\n\n if (this._form) {\n this._form.removeEventListener('formdata', this._formdataEventHandler!)\n this._form = null\n this._formdataEventHandler = null\n }\n }\n\n protected appendFormData({ formData }: FormDataEvent): void {\n this.name && formData.append(this.name, this.value)\n }\n}\n"]}
|
@@ -1,30 +1,31 @@
|
|
1
1
|
/**
|
2
2
|
* @license Copyright © HatioLab Inc. All rights reserved.
|
3
3
|
*/
|
4
|
-
import {
|
5
|
-
export declare class OxInput3Dish extends
|
4
|
+
import { OxFormField } from './ox-formfield';
|
5
|
+
export declare class OxInput3Dish extends OxFormField {
|
6
6
|
static styles: import("lit").CSSResult[];
|
7
7
|
dimension?: {
|
8
|
-
width
|
9
|
-
height
|
10
|
-
depth
|
8
|
+
width?: number;
|
9
|
+
height?: number;
|
10
|
+
depth?: number;
|
11
11
|
};
|
12
12
|
translatex?: {
|
13
|
-
x
|
14
|
-
y
|
15
|
-
z
|
13
|
+
x?: number;
|
14
|
+
y?: number;
|
15
|
+
z?: number;
|
16
16
|
};
|
17
17
|
rotate?: {
|
18
|
-
x
|
19
|
-
y
|
20
|
-
z
|
18
|
+
x?: number;
|
19
|
+
y?: number;
|
20
|
+
z?: number;
|
21
21
|
};
|
22
22
|
scale?: {
|
23
|
-
x
|
24
|
-
y
|
25
|
-
z
|
23
|
+
x?: number;
|
24
|
+
y?: number;
|
25
|
+
z?: number;
|
26
26
|
};
|
27
27
|
firstUpdated(): void;
|
28
28
|
_onChange(e: Event): void;
|
29
29
|
render(): import("lit-html").TemplateResult<1>;
|
30
|
+
protected appendFormData({ formData }: FormDataEvent): void;
|
30
31
|
}
|
@@ -2,81 +2,99 @@
|
|
2
2
|
* @license Copyright © HatioLab Inc. All rights reserved.
|
3
3
|
*/
|
4
4
|
import { __decorate } from "tslib";
|
5
|
-
import { css, html
|
5
|
+
import { css, html } from 'lit';
|
6
6
|
import { customElement, property } from 'lit/decorators.js';
|
7
|
-
|
7
|
+
import { OxFormField } from './ox-formfield';
|
8
|
+
let OxInput3Dish = class OxInput3Dish extends OxFormField {
|
8
9
|
firstUpdated() {
|
9
10
|
this.renderRoot.addEventListener('change', this._onChange.bind(this));
|
10
11
|
}
|
11
12
|
_onChange(e) {
|
13
|
+
e.stopPropagation();
|
14
|
+
e.preventDefault();
|
12
15
|
var element = e.target;
|
13
16
|
var id = element.id;
|
14
17
|
var prop = id.substr(1);
|
15
18
|
var value = Number(element.value);
|
16
19
|
switch (element.tagName) {
|
17
20
|
case 'PROPERTY-ANGLE':
|
18
|
-
value = Number(element.
|
21
|
+
value = Number(element.value || 0);
|
19
22
|
break;
|
20
23
|
}
|
21
24
|
switch (id) {
|
22
25
|
case 'tx':
|
23
26
|
case 'ty':
|
24
27
|
case 'tz':
|
28
|
+
this.translatex = {
|
29
|
+
...this.translatex,
|
30
|
+
[prop]: value
|
31
|
+
};
|
25
32
|
this.dispatchEvent(new CustomEvent('translate-changed', {
|
26
33
|
bubbles: true,
|
27
34
|
composed: true,
|
28
35
|
detail: {
|
29
|
-
value:
|
30
|
-
...this.translatex,
|
31
|
-
[prop]: value
|
32
|
-
}
|
36
|
+
value: this.translatex
|
33
37
|
}
|
34
38
|
}));
|
35
39
|
break;
|
36
40
|
case 'rx':
|
37
41
|
case 'ry':
|
38
42
|
case 'rz':
|
43
|
+
this.rotate = {
|
44
|
+
...this.rotate,
|
45
|
+
[prop]: value
|
46
|
+
};
|
39
47
|
this.dispatchEvent(new CustomEvent('rotate-changed', {
|
40
48
|
bubbles: true,
|
41
49
|
composed: true,
|
42
50
|
detail: {
|
43
|
-
value:
|
44
|
-
...this.rotate,
|
45
|
-
[prop]: value
|
46
|
-
}
|
51
|
+
value: this.rotate
|
47
52
|
}
|
48
53
|
}));
|
49
54
|
break;
|
50
55
|
case 'sx':
|
51
56
|
case 'sy':
|
52
57
|
case 'sz':
|
58
|
+
this.scale = {
|
59
|
+
...this.scale,
|
60
|
+
[prop]: value
|
61
|
+
};
|
53
62
|
this.dispatchEvent(new CustomEvent('scale-changed', {
|
54
63
|
bubbles: true,
|
55
64
|
composed: true,
|
56
65
|
detail: {
|
57
|
-
value:
|
58
|
-
...this.scale,
|
59
|
-
[prop]: value
|
60
|
-
}
|
66
|
+
value: this.scale
|
61
67
|
}
|
62
68
|
}));
|
63
69
|
break;
|
64
70
|
default:
|
65
71
|
// dimension
|
72
|
+
this.dimension = {
|
73
|
+
...this.dimension,
|
74
|
+
[prop]: value
|
75
|
+
};
|
66
76
|
this.dispatchEvent(new CustomEvent('dimension-changed', {
|
67
77
|
bubbles: true,
|
68
78
|
composed: true,
|
69
79
|
detail: {
|
70
|
-
value:
|
71
|
-
...this.dimension,
|
72
|
-
[prop]: value
|
73
|
-
}
|
80
|
+
value: this.dimension
|
74
81
|
}
|
75
82
|
}));
|
76
83
|
}
|
84
|
+
this.value = {
|
85
|
+
translate: this.translatex,
|
86
|
+
rotate: this.rotate,
|
87
|
+
scale: this.scale,
|
88
|
+
dimension: this.dimension
|
89
|
+
};
|
90
|
+
this.dispatchEvent(new CustomEvent('change', {
|
91
|
+
bubbles: true,
|
92
|
+
composed: true,
|
93
|
+
detail: this.value
|
94
|
+
}));
|
77
95
|
}
|
78
96
|
render() {
|
79
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
97
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
80
98
|
return html `
|
81
99
|
<span></span> <span><i18n-msg msgid="label.x-axes">x-axes</i18n-msg></span>
|
82
100
|
<span><i18n-msg msgid="label.y-axes">y-axes</i18n-msg></span>
|
@@ -92,12 +110,20 @@ let OxInput3Dish = class OxInput3Dish extends LitElement {
|
|
92
110
|
<input type="number" id="ty" .value=${(_e = this.translatex) === null || _e === void 0 ? void 0 : _e.y} />
|
93
111
|
<input type="number" id="tz" .value=${(_f = this.translatex) === null || _f === void 0 ? void 0 : _f.z} />
|
94
112
|
|
113
|
+
<label><i18n-msg msgid="label.scale">scale</i18n-msg></label>
|
114
|
+
<input type="number" id="sx" .value=${(_g = this.scale) === null || _g === void 0 ? void 0 : _g.x} />
|
115
|
+
<input type="number" id="sy" .value=${(_h = this.scale) === null || _h === void 0 ? void 0 : _h.y} />
|
116
|
+
<input type="number" id="sz" .value=${(_j = this.scale) === null || _j === void 0 ? void 0 : _j.z} />
|
117
|
+
|
95
118
|
<label><i18n-msg msgid="label.rotate">rotate</i18n-msg></label>
|
96
|
-
<ox-input-angle id="rx" .
|
97
|
-
<ox-input-angle id="ry" .
|
98
|
-
<ox-input-angle id="rz" .
|
119
|
+
<ox-input-angle id="rx" .value=${(_k = this.rotate) === null || _k === void 0 ? void 0 : _k.x}></ox-input-angle>
|
120
|
+
<ox-input-angle id="ry" .value=${(_l = this.rotate) === null || _l === void 0 ? void 0 : _l.y}></ox-input-angle>
|
121
|
+
<ox-input-angle id="rz" .value=${(_m = this.rotate) === null || _m === void 0 ? void 0 : _m.z}></ox-input-angle>
|
99
122
|
`;
|
100
123
|
}
|
124
|
+
appendFormData({ formData }) {
|
125
|
+
this.name && formData.append(this.name, JSON.stringify(this.value));
|
126
|
+
}
|
101
127
|
};
|
102
128
|
OxInput3Dish.styles = [
|
103
129
|
css `
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ox-input-3dish.js","sourceRoot":"","sources":["../../src/ox-input-3dish.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,
|
1
|
+
{"version":3,"file":"ox-input-3dish.js","sourceRoot":"","sources":["../../src/ox-input-3dish.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 } from 'lit/decorators.js'\n\nimport { OxFormField } from './ox-formfield'\nimport { OxInputAngle } from './ox-input-angle'\n\n@customElement('ox-input-3dish')\nexport class OxInput3Dish extends OxFormField {\n static styles = [\n css`\n :host {\n display: grid;\n grid-template-columns: repeat(4, minmax(50px, 1fr));\n grid-gap: 5px;\n grid-auto-rows: minmax(24px, auto);\n }\n\n :host > * {\n grid-column: span 1;\n }\n\n label {\n text-align: right;\n }\n\n span {\n text-align: center;\n }\n `\n ]\n\n @property({ type: Object }) dimension?: { width?: number; height?: number; depth?: number }\n // translate는 고유한 html element의 attribute이므로, property는 translatex로 한다.\n @property({ type: Object }) translatex?: { x?: number; y?: number; z?: number }\n @property({ type: Object }) rotate?: { x?: number; y?: number; z?: number }\n @property({ type: Object }) scale?: { x?: number; y?: number; z?: number }\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onChange.bind(this))\n }\n\n _onChange(e: Event) {\n e.stopPropagation()\n e.preventDefault()\n\n var element = e.target as HTMLElement\n var id = element.id\n var prop = id.substr(1)\n var value = Number((element as HTMLInputElement).value)\n\n switch (element.tagName) {\n case 'PROPERTY-ANGLE':\n value = Number((element as OxInputAngle).value || 0)\n break\n }\n\n switch (id) {\n case 'tx':\n case 'ty':\n case 'tz':\n this.translatex = {\n ...this.translatex,\n [prop]: value\n }\n\n this.dispatchEvent(\n new CustomEvent('translate-changed', {\n bubbles: true,\n composed: true,\n detail: {\n value: this.translatex\n }\n })\n )\n break\n\n case 'rx':\n case 'ry':\n case 'rz':\n this.rotate = {\n ...this.rotate,\n [prop]: value\n }\n\n this.dispatchEvent(\n new CustomEvent('rotate-changed', {\n bubbles: true,\n composed: true,\n detail: {\n value: this.rotate\n }\n })\n )\n break\n\n case 'sx':\n case 'sy':\n case 'sz':\n this.scale = {\n ...this.scale,\n [prop]: value\n }\n\n this.dispatchEvent(\n new CustomEvent('scale-changed', {\n bubbles: true,\n composed: true,\n detail: {\n value: this.scale\n }\n })\n )\n break\n\n default:\n // dimension\n this.dimension = {\n ...this.dimension,\n [prop]: value\n }\n\n this.dispatchEvent(\n new CustomEvent('dimension-changed', {\n bubbles: true,\n composed: true,\n detail: {\n value: this.dimension\n }\n })\n )\n }\n\n this.value = {\n translate: this.translatex,\n rotate: this.rotate,\n scale: this.scale,\n dimension: this.dimension\n }\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: this.value\n })\n )\n }\n\n render() {\n return html`\n <span></span> <span><i18n-msg msgid=\"label.x-axes\">x-axes</i18n-msg></span>\n <span><i18n-msg msgid=\"label.y-axes\">y-axes</i18n-msg></span>\n <span><i18n-msg msgid=\"label.z-axes\">z-axes</i18n-msg></span>\n\n <label><i18n-msg msgid=\"label.dimension\">dimension</i18n-msg></label>\n <input type=\"number\" id=\"dwidth\" .value=${this.dimension?.width} />\n <input type=\"number\" id=\"dheight\" .value=${this.dimension?.height} />\n <input type=\"number\" id=\"ddepth\" .value=${this.dimension?.depth} />\n\n <label><i18n-msg msgid=\"label.translate\">translate</i18n-msg></label>\n <input type=\"number\" id=\"tx\" .value=${this.translatex?.x} />\n <input type=\"number\" id=\"ty\" .value=${this.translatex?.y} />\n <input type=\"number\" id=\"tz\" .value=${this.translatex?.z} />\n\n <label><i18n-msg msgid=\"label.scale\">scale</i18n-msg></label>\n <input type=\"number\" id=\"sx\" .value=${this.scale?.x} />\n <input type=\"number\" id=\"sy\" .value=${this.scale?.y} />\n <input type=\"number\" id=\"sz\" .value=${this.scale?.z} />\n\n <label><i18n-msg msgid=\"label.rotate\">rotate</i18n-msg></label>\n <ox-input-angle id=\"rx\" .value=${this.rotate?.x}></ox-input-angle>\n <ox-input-angle id=\"ry\" .value=${this.rotate?.y}></ox-input-angle>\n <ox-input-angle id=\"rz\" .value=${this.rotate?.z}></ox-input-angle>\n `\n }\n\n protected appendFormData({ formData }: FormDataEvent): void {\n this.name && formData.append(this.name, JSON.stringify(this.value))\n }\n}\n"]}
|
@@ -1,14 +1,13 @@
|
|
1
1
|
/**
|
2
2
|
* @license Copyright © HatioLab Inc. All rights reserved.
|
3
3
|
*/
|
4
|
-
import {
|
5
|
-
export declare class OxInputAngle extends
|
4
|
+
import { OxFormField } from './ox-formfield';
|
5
|
+
export declare class OxInputAngle extends OxFormField {
|
6
6
|
static styles: import("lit").CSSResult[];
|
7
|
-
|
7
|
+
placeholder?: string;
|
8
8
|
input: HTMLInputElement;
|
9
9
|
render(): import("lit-html").TemplateResult<1>;
|
10
|
-
get placeholder(): string;
|
11
10
|
_onChangeValue(e: Event): void;
|
12
|
-
_toDegree(
|
11
|
+
_toDegree(value: string | number | undefined): number;
|
13
12
|
_toRadian(degree: string | number | undefined): number | undefined;
|
14
13
|
}
|