@operato/property-editor 0.2.5 → 0.2.30

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 (58) hide show
  1. package/.storybook/main.js +2 -2
  2. package/.storybook/server.mjs +4 -4
  3. package/CHANGELOG.md +1 -50
  4. package/LICENSE +2 -2
  5. package/README.md +26 -7
  6. package/custom-elements.json +317 -0
  7. package/demo/index.html +16 -39
  8. package/dist/src/index.d.ts +1 -5
  9. package/dist/src/index.js +1 -5
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/ox-property-editor.d.ts +28 -0
  12. package/dist/src/ox-property-editor.js +161 -0
  13. package/dist/src/ox-property-editor.js.map +1 -0
  14. package/dist/stories/index.stories.d.ts +1 -1
  15. package/dist/stories/index.stories.js +11 -15
  16. package/dist/stories/index.stories.js.map +1 -1
  17. package/dist/test/property-editor.test.d.ts +1 -0
  18. package/dist/test/property-editor.test.js +24 -0
  19. package/dist/test/property-editor.test.js.map +1 -0
  20. package/dist/tsconfig.tsbuildinfo +1 -1
  21. package/package.json +14 -33
  22. package/src/index.ts +1 -5
  23. package/src/ox-property-editor.ts +158 -0
  24. package/stories/index.stories.ts +30 -38
  25. package/test/property-editor.test.ts +34 -0
  26. package/tsconfig.json +2 -2
  27. package/web-dev-server.config.mjs +9 -8
  28. package/web-test-runner.config.mjs +7 -19
  29. package/.editorconfig +0 -29
  30. package/demo/index-3dish.html +0 -22
  31. package/demo/index-angle.html +0 -31
  32. package/demo/index-button-radio.html +0 -30
  33. package/demo/index-checkbox.html +0 -54
  34. package/demo/index-stack.html +0 -21
  35. package/dist/src/ox-buttons-radio.d.ts +0 -28
  36. package/dist/src/ox-buttons-radio.js +0 -90
  37. package/dist/src/ox-buttons-radio.js.map +0 -1
  38. package/dist/src/ox-checkbox.d.ts +0 -16
  39. package/dist/src/ox-checkbox.js +0 -146
  40. package/dist/src/ox-checkbox.js.map +0 -1
  41. package/dist/src/ox-input-3dish.d.ts +0 -30
  42. package/dist/src/ox-input-3dish.js +0 -140
  43. package/dist/src/ox-input-3dish.js.map +0 -1
  44. package/dist/src/ox-input-angle.d.ts +0 -14
  45. package/dist/src/ox-input-angle.js +0 -56
  46. package/dist/src/ox-input-angle.js.map +0 -1
  47. package/dist/src/ox-input-stack.d.ts +0 -21
  48. package/dist/src/ox-input-stack.js +0 -108
  49. package/dist/src/ox-input-stack.js.map +0 -1
  50. package/dist/test/property-angle.test.d.ts +0 -1
  51. package/dist/test/property-angle.test.js +0 -23
  52. package/dist/test/property-angle.test.js.map +0 -1
  53. package/src/ox-buttons-radio.ts +0 -87
  54. package/src/ox-checkbox.ts +0 -141
  55. package/src/ox-input-3dish.ts +0 -150
  56. package/src/ox-input-angle.ts +0 -56
  57. package/src/ox-input-stack.ts +0 -109
  58. package/test/property-angle.test.ts +0 -33
@@ -1,90 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { __decorate } from "tslib";
5
- import { css, html, LitElement } from 'lit';
6
- import { customElement, property } from 'lit/decorators.js';
7
- /**
8
- 여러 버튼 중에서 하나만 눌리거나, 모두 눌리지 않은 상태만을 갖는 라디오 형태의 버튼이다.
9
-
10
- Example:
11
-
12
- <ox-buttons-radio @change=${e => this._onChange(e)} value=${value}>
13
- <div data-value="top"></div>
14
- <div data-value="middle"></div>
15
- <div data-value="bottom"></div>
16
- </ox-buttons-radio>
17
- */
18
- let PropertyButtonsRadio = class PropertyButtonsRadio extends LitElement {
19
- constructor() {
20
- super(...arguments);
21
- /**
22
- * `value`는 버튼의 눌린 상태를 값으로 갖는 속성이다.
23
- */
24
- this.value = null;
25
- }
26
- render() {
27
- return html ` <slot @click=${(e) => this._onTapButton(e)}></slot> `;
28
- }
29
- updated(changes) {
30
- changes.has('value') && this._onValueChanged(this.value);
31
- }
32
- get buttons() {
33
- return Array.from(this.querySelectorAll('*'));
34
- }
35
- _onValueChanged(value) {
36
- this.buttons.forEach(button => {
37
- if (value === button.getAttribute('data-value')) {
38
- button.setAttribute('active', '');
39
- }
40
- else {
41
- button.removeAttribute('active');
42
- }
43
- });
44
- }
45
- _onTapButton(e) {
46
- var target = e.target;
47
- while (!target.hasAttribute('data-value') && target !== this) {
48
- target = target.parentElement;
49
- }
50
- if (target === this) {
51
- return;
52
- }
53
- var old = this.value;
54
- if (!this.mandatory) {
55
- if (!target.getAttribute('active')) {
56
- this.value = target.getAttribute('data-value');
57
- target.setAttribute('active', '');
58
- }
59
- else {
60
- this.value = null;
61
- target.removeAttribute('active');
62
- }
63
- }
64
- else {
65
- this.value = target.getAttribute('data-value');
66
- target.setAttribute('active', '');
67
- }
68
- if (old !== this.value) {
69
- this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }));
70
- }
71
- }
72
- };
73
- PropertyButtonsRadio.styles = [
74
- css `
75
- :host {
76
- display: inline-block;
77
- }
78
- `
79
- ];
80
- __decorate([
81
- property({ type: Object })
82
- ], PropertyButtonsRadio.prototype, "value", void 0);
83
- __decorate([
84
- property({ type: Boolean })
85
- ], PropertyButtonsRadio.prototype, "mandatory", void 0);
86
- PropertyButtonsRadio = __decorate([
87
- customElement('ox-buttons-radio')
88
- ], PropertyButtonsRadio);
89
- export { PropertyButtonsRadio };
90
- //# sourceMappingURL=ox-buttons-radio.js.map
@@ -1 +0,0 @@
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,EAAE,UAAU,EAAkB,MAAM,KAAK,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D;;;;;;;;;;EAUE;AAEF,IAAa,oBAAoB,GAAjC,MAAa,oBAAqB,SAAQ,UAAU;IAApD;;QASE;;WAEG;QACyB,UAAK,GAAkB,IAAI,CAAA;IAuDzD,CAAC;IApDC,MAAM;QACJ,OAAO,IAAI,CAAA,iBAAiB,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,OAA6B;QACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,OAAO;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,eAAe,CAAC,KAAoB;QAClC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC5B,IAAI,KAAK,KAAK,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;gBAC/C,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;aAClC;iBAAM;gBACL,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;aACjC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,YAAY,CAAC,CAAQ;QACnB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAA;QAEpC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,MAAM,KAAK,IAAI,EAAE;YAC5D,MAAM,GAAG,MAAM,CAAC,aAAc,CAAA;SAC/B;QAED,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,OAAM;SACP;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA;QAEpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;gBAClC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;gBAC9C,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;aAClC;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;gBACjB,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;aACjC;SACF;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;YAC9C,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;SAClC;QAED,IAAI,GAAG,KAAK,IAAI,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;SACjF;IACH,CAAC;CACF,CAAA;AAlEQ,2BAAM,GAAG;IACd,GAAG,CAAA;;;;KAIF;CACF,CAAA;AAK2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;mDAA4B;AAC1B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;uDAAoB;AAbrC,oBAAoB;IADhC,aAAa,CAAC,kBAAkB,CAAC;GACrB,oBAAoB,CAmEhC;SAnEY,oBAAoB","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n여러 버튼 중에서 하나만 눌리거나, 모두 눌리지 않은 상태만을 갖는 라디오 형태의 버튼이다.\n\nExample:\n\n <ox-buttons-radio @change=${e => this._onChange(e)} value=${value}>\n <div data-value=\"top\"></div>\n <div data-value=\"middle\"></div>\n <div data-value=\"bottom\"></div>\n </ox-buttons-radio>\n*/\n@customElement('ox-buttons-radio')\nexport class PropertyButtonsRadio extends LitElement {\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('data-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('data-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('data-value')\n target.setAttribute('active', '')\n } else {\n this.value = null\n target.removeAttribute('active')\n }\n } else {\n this.value = target.getAttribute('data-value')\n target.setAttribute('active', '')\n }\n\n if (old !== this.value) {\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }))\n }\n }\n}\n"]}
@@ -1,16 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { LitElement } from 'lit';
5
- export declare class OxCheckbox extends LitElement {
6
- static styles: import("lit").CSSResult[];
7
- checked: boolean;
8
- disabled: boolean;
9
- name: string;
10
- _hasInner: boolean;
11
- render(): import("lit-html").TemplateResult<1>;
12
- onClick(): void;
13
- get checkedIcon(): import("lit-html").TemplateResult<1>;
14
- get uncheckedIcon(): import("lit-html").TemplateResult<1>;
15
- onKeyDown(e: KeyboardEvent): void;
16
- }
@@ -1,146 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { __decorate } from "tslib";
5
- /*
6
- This component is inspired by https://github.com/Polydile/dile-components, thanks Dile.
7
- */
8
- import { css, html, LitElement } from 'lit';
9
- import { customElement, property, state } from 'lit/decorators.js';
10
- let OxCheckbox = class OxCheckbox extends LitElement {
11
- constructor() {
12
- super(...arguments);
13
- this.checked = false;
14
- this.disabled = false;
15
- this.name = '';
16
- this._hasInner = !!this.innerHTML.trim().length;
17
- }
18
- render() {
19
- return html `
20
- <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
- >
28
- ${this.checked ? this.checkedIcon : this.uncheckedIcon}
29
- </a>
30
- ${this._hasInner
31
- ? html ` <span label>
32
- <slot></slot>
33
- </span>`
34
- : ''}
35
- </div>
36
- `;
37
- }
38
- onClick() {
39
- if (this.disabled) {
40
- return;
41
- }
42
- this.checked = !this.checked;
43
- this.dispatchEvent(new CustomEvent('change', {
44
- bubbles: true,
45
- composed: true,
46
- detail: {
47
- checked: this.checked,
48
- name: this.name
49
- }
50
- }));
51
- }
52
- get checkedIcon() {
53
- return html `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
54
- <path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z" />
55
- </svg>`;
56
- }
57
- get uncheckedIcon() {
58
- return html `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
59
- <path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z" />
60
- </svg>`;
61
- }
62
- onKeyDown(e) {
63
- e.preventDefault();
64
- if (e.keyCode == 32 || e.code == 'Space') {
65
- this.onClick();
66
- }
67
- }
68
- };
69
- OxCheckbox.styles = [
70
- css `
71
- :host {
72
- display: block;
73
- }
74
-
75
- div {
76
- display: flex;
77
- align-items: center;
78
- cursor: pointer;
79
- }
80
-
81
- [disabled] {
82
- opacity: var(--ox-checkbox-disabled-opacity, 0.5);
83
- cursor: auto;
84
- }
85
-
86
- [checkbox] {
87
- display: flex;
88
- border-radius: var(--ox-checkbox-border-radius, 4px);
89
- border: var(--ox-checkbox-border, 1px solid rgba(0, 0, 0, 0.3));
90
- background-color: var(--ox-checkbox-background-color, #fff);
91
- width: var(--ox-checkbox-size, 18px);
92
- height: var(--ox-checkbox-size, 18px);
93
- align-items: center;
94
- justify-content: center;
95
- }
96
-
97
- a {
98
- background-color: var(--ox-checkbox-unchecked-background-color, #fff);
99
- border: var(--ox-checkbox-unchecked-border, 1px solid rgba(0, 0, 0, 0.3));
100
- }
101
-
102
- a[checked] {
103
- background-color: var(--ox-checkbox-checked-background-color, #fff);
104
- border: var(--ox-checkbox-checked-border, 1px solid #38a25b);
105
- }
106
-
107
- path {
108
- fill: var(--ox-checkbox-fill-color, rgba(0, 0, 0, 0.1));
109
- }
110
-
111
- [checked] path {
112
- fill: var(--ox-checkbox-checked-color, #38a25b);
113
- }
114
-
115
- svg {
116
- width: var(--ox-checkbox-size, 18px);
117
- height: var(--ox-checkbox-size, 18px);
118
- }
119
-
120
- [label] {
121
- margin: var(--ox-checkbox-label-margin, 0 0 0 7px);
122
- color: var(--ox-checkbox-label-color, #3a5877);
123
- }
124
-
125
- [checked] + [label] {
126
- font-weight: var(--ox-checkbox-checked-font-weight, bold);
127
- }
128
- `
129
- ];
130
- __decorate([
131
- property({ type: Boolean })
132
- ], OxCheckbox.prototype, "checked", void 0);
133
- __decorate([
134
- property({ type: Boolean })
135
- ], OxCheckbox.prototype, "disabled", void 0);
136
- __decorate([
137
- property({ type: String })
138
- ], OxCheckbox.prototype, "name", void 0);
139
- __decorate([
140
- state()
141
- ], OxCheckbox.prototype, "_hasInner", void 0);
142
- OxCheckbox = __decorate([
143
- customElement('ox-checkbox')
144
- ], OxCheckbox);
145
- export { OxCheckbox };
146
- //# sourceMappingURL=ox-checkbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-checkbox.js","sourceRoot":"","sources":["../../src/ox-checkbox.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH;;EAEE;AAEF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAGlE,IAAa,UAAU,GAAvB,MAAa,UAAW,SAAQ,UAAU;IAA1C;;QA+D+B,YAAO,GAAY,KAAK,CAAA;QACxB,aAAQ,GAAY,KAAK,CAAA;QAC1B,SAAI,GAAW,EAAE,CAAA;QAEpC,cAAS,GAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,CAAA;IA6D9D,CAAC;IA3DC,MAAM;QACJ,OAAO,IAAI,CAAA;oBACK,IAAI,CAAC,OAAO,cAAc,IAAI,CAAC,QAAQ;;;mBAGxC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;qBAC9B,IAAI,CAAC,SAAS;qBACd,IAAI,CAAC,OAAO;;;YAGrB,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,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;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAA;;WAEJ,CAAA;IACT,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAA;;WAEJ,CAAA;IACT,CAAC;IAED,SAAS,CAAC,CAAgB;QACxB,CAAC,CAAC,cAAc,EAAE,CAAA;QAElB,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE;YACxC,IAAI,CAAC,OAAO,EAAE,CAAA;SACf;IACH,CAAC;CACF,CAAA;AA/HQ,iBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0DF;CACF,CAAA;AAE4B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;2CAAyB;AACxB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4CAA0B;AAC1B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAAkB;AAEpC;IAAR,KAAK,EAAE;6CAAoD;AAnEjD,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CAgItB;SAhIY,UAAU","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\n/*\n This component is inspired by https://github.com/Polydile/dile-components, thanks Dile.\n*/\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\n@customElement('ox-checkbox')\nexport class OxCheckbox extends LitElement {\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, 18px);\n height: var(--ox-checkbox-size, 18px);\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 a[checked] {\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 [checked] path {\n fill: var(--ox-checkbox-checked-color, #38a25b);\n }\n\n svg {\n width: var(--ox-checkbox-size, 18px);\n height: var(--ox-checkbox-size, 18px);\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 [checked] + [label] {\n font-weight: var(--ox-checkbox-checked-font-weight, bold);\n }\n `\n ]\n\n @property({ type: Boolean }) 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\n href=\"#\"\n @click=${(e: Event) => e.preventDefault()}\n @keydown=${this.onKeyDown}\n ?checked=${this.checked}\n checkbox\n >\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 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: {\n checked: this.checked,\n name: this.name\n }\n })\n )\n }\n\n get checkedIcon() {\n return html`<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 get uncheckedIcon() {\n return html`<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 onKeyDown(e: KeyboardEvent) {\n e.preventDefault()\n\n if (e.keyCode == 32 || e.code == 'Space') {\n this.onClick()\n }\n }\n}\n"]}
@@ -1,30 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { LitElement } from 'lit';
5
- export declare class OxInput3Dish extends LitElement {
6
- static styles: import("lit").CSSResult[];
7
- dimension?: {
8
- width: number;
9
- height: number;
10
- depth: number;
11
- };
12
- translatex?: {
13
- x: number;
14
- y: number;
15
- z: number;
16
- };
17
- rotate?: {
18
- x: number;
19
- y: number;
20
- z: number;
21
- };
22
- scale?: {
23
- x: number;
24
- y: number;
25
- z: number;
26
- };
27
- firstUpdated(): void;
28
- _onChange(e: Event): void;
29
- render(): import("lit-html").TemplateResult<1>;
30
- }
@@ -1,140 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { __decorate } from "tslib";
5
- import { css, html, LitElement } from 'lit';
6
- import { customElement, property } from 'lit/decorators.js';
7
- let OxInput3Dish = class OxInput3Dish extends LitElement {
8
- firstUpdated() {
9
- this.renderRoot.addEventListener('change', this._onChange.bind(this));
10
- }
11
- _onChange(e) {
12
- var element = e.target;
13
- var id = element.id;
14
- var prop = id.substr(1);
15
- var value = Number(element.value);
16
- switch (element.tagName) {
17
- case 'PROPERTY-ANGLE':
18
- value = Number(element.radian || 0);
19
- break;
20
- }
21
- switch (id) {
22
- case 'tx':
23
- case 'ty':
24
- case 'tz':
25
- this.dispatchEvent(new CustomEvent('translate-changed', {
26
- bubbles: true,
27
- composed: true,
28
- detail: {
29
- value: {
30
- ...this.translatex,
31
- [prop]: value
32
- }
33
- }
34
- }));
35
- break;
36
- case 'rx':
37
- case 'ry':
38
- case 'rz':
39
- this.dispatchEvent(new CustomEvent('rotate-changed', {
40
- bubbles: true,
41
- composed: true,
42
- detail: {
43
- value: {
44
- ...this.rotate,
45
- [prop]: value
46
- }
47
- }
48
- }));
49
- break;
50
- case 'sx':
51
- case 'sy':
52
- case 'sz':
53
- this.dispatchEvent(new CustomEvent('scale-changed', {
54
- bubbles: true,
55
- composed: true,
56
- detail: {
57
- value: {
58
- ...this.scale,
59
- [prop]: value
60
- }
61
- }
62
- }));
63
- break;
64
- default:
65
- // dimension
66
- this.dispatchEvent(new CustomEvent('dimension-changed', {
67
- bubbles: true,
68
- composed: true,
69
- detail: {
70
- value: {
71
- ...this.dimension,
72
- [prop]: value
73
- }
74
- }
75
- }));
76
- }
77
- }
78
- render() {
79
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
80
- return html `
81
- <span></span> <span><i18n-msg msgid="label.x-axes">x-axes</i18n-msg></span>
82
- <span><i18n-msg msgid="label.y-axes">y-axes</i18n-msg></span>
83
- <span><i18n-msg msgid="label.z-axes">z-axes</i18n-msg></span>
84
-
85
- <label><i18n-msg msgid="label.dimension">dimension</i18n-msg></label>
86
- <input type="number" id="dwidth" .value=${(_a = this.dimension) === null || _a === void 0 ? void 0 : _a.width} />
87
- <input type="number" id="dheight" .value=${(_b = this.dimension) === null || _b === void 0 ? void 0 : _b.height} />
88
- <input type="number" id="ddepth" .value=${(_c = this.dimension) === null || _c === void 0 ? void 0 : _c.depth} />
89
-
90
- <label><i18n-msg msgid="label.translate">translate</i18n-msg></label>
91
- <input type="number" id="tx" .value=${(_d = this.translatex) === null || _d === void 0 ? void 0 : _d.x} />
92
- <input type="number" id="ty" .value=${(_e = this.translatex) === null || _e === void 0 ? void 0 : _e.y} />
93
- <input type="number" id="tz" .value=${(_f = this.translatex) === null || _f === void 0 ? void 0 : _f.z} />
94
-
95
- <label><i18n-msg msgid="label.rotate">rotate</i18n-msg></label>
96
- <ox-input-angle id="rx" .radian=${(_g = this.rotate) === null || _g === void 0 ? void 0 : _g.x}></ox-input-angle>
97
- <ox-input-angle id="ry" .radian=${(_h = this.rotate) === null || _h === void 0 ? void 0 : _h.y}></ox-input-angle>
98
- <ox-input-angle id="rz" .radian=${(_j = this.rotate) === null || _j === void 0 ? void 0 : _j.z}></ox-input-angle>
99
- `;
100
- }
101
- };
102
- OxInput3Dish.styles = [
103
- css `
104
- :host {
105
- display: grid;
106
- grid-template-columns: repeat(4, minmax(50px, 1fr));
107
- grid-gap: 5px;
108
- grid-auto-rows: minmax(24px, auto);
109
- }
110
-
111
- :host > * {
112
- grid-column: span 1;
113
- }
114
-
115
- label {
116
- text-align: right;
117
- }
118
-
119
- span {
120
- text-align: center;
121
- }
122
- `
123
- ];
124
- __decorate([
125
- property({ type: Object })
126
- ], OxInput3Dish.prototype, "dimension", void 0);
127
- __decorate([
128
- property({ type: Object })
129
- ], OxInput3Dish.prototype, "translatex", void 0);
130
- __decorate([
131
- property({ type: Object })
132
- ], OxInput3Dish.prototype, "rotate", void 0);
133
- __decorate([
134
- property({ type: Object })
135
- ], OxInput3Dish.prototype, "scale", void 0);
136
- OxInput3Dish = __decorate([
137
- customElement('ox-input-3dish')
138
- ], OxInput3Dish);
139
- export { OxInput3Dish };
140
- //# sourceMappingURL=ox-input-3dish.js.map
@@ -1 +0,0 @@
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, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { OxInputAngle } from './ox-input-angle'\n\n@customElement('ox-input-3dish')\nexport class OxInput3Dish extends LitElement {\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 /*\n * translate는 고유한 html element의 attribute이므로, property는 translatex로 한다.\n */\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 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).radian || 0)\n break\n }\n\n switch (id) {\n case 'tx':\n case 'ty':\n case 'tz':\n this.dispatchEvent(\n new CustomEvent('translate-changed', {\n bubbles: true,\n composed: true,\n detail: {\n value: {\n ...this.translatex,\n [prop]: value\n }\n }\n })\n )\n break\n\n case 'rx':\n case 'ry':\n case 'rz':\n this.dispatchEvent(\n new CustomEvent('rotate-changed', {\n bubbles: true,\n composed: true,\n detail: {\n value: {\n ...this.rotate,\n [prop]: value\n }\n }\n })\n )\n break\n\n case 'sx':\n case 'sy':\n case 'sz':\n this.dispatchEvent(\n new CustomEvent('scale-changed', {\n bubbles: true,\n composed: true,\n detail: {\n value: {\n ...this.scale,\n [prop]: value\n }\n }\n })\n )\n break\n\n default:\n // dimension\n this.dispatchEvent(\n new CustomEvent('dimension-changed', {\n bubbles: true,\n composed: true,\n detail: {\n value: {\n ...this.dimension,\n [prop]: value\n }\n }\n })\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.rotate\">rotate</i18n-msg></label>\n <ox-input-angle id=\"rx\" .radian=${this.rotate?.x}></ox-input-angle>\n <ox-input-angle id=\"ry\" .radian=${this.rotate?.y}></ox-input-angle>\n <ox-input-angle id=\"rz\" .radian=${this.rotate?.z}></ox-input-angle>\n `\n }\n}\n"]}
@@ -1,14 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { LitElement } from 'lit';
5
- export declare class OxInputAngle extends LitElement {
6
- static styles: import("lit").CSSResult[];
7
- radian?: string | number;
8
- input: HTMLInputElement;
9
- render(): import("lit-html").TemplateResult<1>;
10
- get placeholder(): string;
11
- _onChangeValue(e: Event): void;
12
- _toDegree(radian: string | number | undefined): number;
13
- _toRadian(degree: string | number | undefined): number | undefined;
14
- }
@@ -1,56 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { __decorate } from "tslib";
5
- import { css, html, LitElement } from 'lit';
6
- import { customElement, property, query } from 'lit/decorators.js';
7
- let OxInputAngle = class OxInputAngle extends LitElement {
8
- render() {
9
- return html `
10
- <input
11
- type="number"
12
- .value=${this._toDegree(this.radian)}
13
- @change=${(e) => this._onChangeValue(e)}
14
- .placeholder=${this.placeholder}
15
- />
16
- `;
17
- }
18
- get placeholder() {
19
- return this.getAttribute('placeholder') || '0°';
20
- }
21
- _onChangeValue(e) {
22
- this.radian = this._toRadian(this.input.value);
23
- this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }));
24
- }
25
- _toDegree(radian) {
26
- return Math.round(((Number(radian) || 0) * 180) / Math.PI);
27
- }
28
- _toRadian(degree) {
29
- return isNaN(Number(degree)) ? undefined : Number(degree) * (Math.PI / 180);
30
- }
31
- };
32
- OxInputAngle.styles = [
33
- css `
34
- :host {
35
- display: inline-block;
36
- }
37
-
38
- input {
39
- width: 100%;
40
- height: 100%;
41
- box-sizing: border-box;
42
- border: 1px solid rgba(0, 0, 0, 0.2);
43
- }
44
- `
45
- ];
46
- __decorate([
47
- property({ type: Number })
48
- ], OxInputAngle.prototype, "radian", void 0);
49
- __decorate([
50
- query('input')
51
- ], OxInputAngle.prototype, "input", void 0);
52
- OxInputAngle = __decorate([
53
- customElement('ox-input-angle')
54
- ], OxInputAngle);
55
- export { OxInputAngle };
56
- //# sourceMappingURL=ox-input-angle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-input-angle.js","sourceRoot":"","sources":["../../src/ox-input-angle.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAGlE,IAAa,YAAY,GAAzB,MAAa,YAAa,SAAQ,UAAU;IAmB1C,MAAM;QACJ,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;kBAC1B,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;uBAC/B,IAAI,CAAC,WAAW;;KAElC,CAAA;IACH,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,IAAI,CAAA;IACjD,CAAC;IAED,cAAc,CAAC,CAAQ;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAE9C,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAClF,CAAC;IAED,SAAS,CAAC,MAAmC;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,SAAS,CAAC,MAAmC;QAC3C,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAA;IAC7E,CAAC;CACF,CAAA;AA9CQ,mBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;KAWF;CACF,CAAA;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CAAyB;AACpC;IAAf,KAAK,CAAC,OAAO,CAAC;2CAAyB;AAjB7B,YAAY;IADxB,aAAa,CAAC,gBAAgB,CAAC;GACnB,YAAY,CA+CxB;SA/CY,YAAY","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\n@customElement('ox-input-angle')\nexport class OxInputAngle extends LitElement {\n static styles = [\n css`\n :host {\n display: inline-block;\n }\n\n input {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n }\n `\n ]\n\n @property({ type: Number }) radian?: string | number\n @query('input') input!: HTMLInputElement\n\n render() {\n return html`\n <input\n type=\"number\"\n .value=${this._toDegree(this.radian)}\n @change=${(e: Event) => this._onChangeValue(e)}\n .placeholder=${this.placeholder}\n />\n `\n }\n\n get placeholder() {\n return this.getAttribute('placeholder') || '0°'\n }\n\n _onChangeValue(e: Event) {\n this.radian = this._toRadian(this.input.value)\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }))\n }\n\n _toDegree(radian: string | number | undefined) {\n return Math.round(((Number(radian) || 0) * 180) / Math.PI)\n }\n\n _toRadian(degree: string | number | undefined) {\n return isNaN(Number(degree)) ? undefined : Number(degree) * (Math.PI / 180)\n }\n}\n"]}
@@ -1,21 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { LitElement } from 'lit';
5
- export default class OxStack extends LitElement {
6
- static styles: import("lit").CSSResult[];
7
- /**
8
- * `stack`은 stack에 의해 만들어진 층의 배열을 유지한다.
9
- */
10
- stack: {
11
- name: string;
12
- }[];
13
- /**
14
- * `activeIndex`은 현재 active된 층의 인덱스를 유지한다.
15
- */
16
- activeIndex: number;
17
- render(): import("lit-html").TemplateResult<1>;
18
- _onClickAddFloor(e: Event): void;
19
- _onClickToActive(e: Event): void;
20
- _onClickRemoveFloor(e: Event): void;
21
- }
@@ -1,108 +0,0 @@
1
- /**
2
- * @license Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { __decorate } from "tslib";
5
- import { css, html, LitElement } from 'lit';
6
- import { customElement, property } from 'lit/decorators.js';
7
- let OxStack = class OxStack extends LitElement {
8
- constructor() {
9
- super(...arguments);
10
- /**
11
- * `stack`은 stack에 의해 만들어진 층의 배열을 유지한다.
12
- */
13
- this.stack = [];
14
- /**
15
- * `activeIndex`은 현재 active된 층의 인덱스를 유지한다.
16
- */
17
- this.activeIndex = 0;
18
- }
19
- render() {
20
- const stack = [...this.stack].reverse();
21
- const length = stack.length;
22
- return html `
23
- <button id="add-floor" @click=${(e) => this._onClickAddFloor(e)}>+</button>
24
-
25
- ${stack.map((item, index) => html `
26
- <div
27
- ?active=${length - index - 1 == this.activeIndex}
28
- @click=${(e) => this._onClickToActive(e)}
29
- idx=${length - index - 1}
30
- >
31
- ${item.name} <button @click=${(e) => this._onClickRemoveFloor(e)}>-</button>
32
- </div>
33
- `)}
34
- `;
35
- }
36
- _onClickAddFloor(e) {
37
- this.stack.push({ name: String(this.stack.length + 1) });
38
- this.requestUpdate();
39
- }
40
- _onClickToActive(e) {
41
- const div = e.target;
42
- if (div.tagName != 'DIV') {
43
- return;
44
- }
45
- this.activeIndex = Number(div.getAttribute('idx'));
46
- }
47
- _onClickRemoveFloor(e) {
48
- const div = e.target.parentElement;
49
- if ((div === null || div === void 0 ? void 0 : div.tagName) != 'DIV') {
50
- return;
51
- }
52
- const idx = Number(div.getAttribute('idx'));
53
- this.stack.splice(idx, 1);
54
- if (this.activeIndex == idx) {
55
- this.activeIndex = 0;
56
- }
57
- else if (this.activeIndex >= idx) {
58
- this.activeIndex--;
59
- }
60
- else if (this.activeIndex >= this.stack.length) {
61
- this.activeIndex = 0;
62
- }
63
- this.requestUpdate();
64
- }
65
- };
66
- OxStack.styles = [
67
- css `
68
- :host {
69
- display: block;
70
- }
71
-
72
- #add-floor {
73
- width: 100%;
74
- height: 20px;
75
- background-color: blue;
76
- color: white;
77
- }
78
-
79
- div {
80
- background-color: blue;
81
- width: calc(100% - 40px);
82
- width: -webkit-calc(100% - 40px);
83
- min-height: 20px;
84
- }
85
-
86
- div[active] {
87
- background-color: red;
88
- }
89
-
90
- div button {
91
- position: absolute;
92
- right: 10px;
93
- width: 30px;
94
- min-height: 20px;
95
- }
96
- `
97
- ];
98
- __decorate([
99
- property({ type: Array })
100
- ], OxStack.prototype, "stack", void 0);
101
- __decorate([
102
- property({ type: Number })
103
- ], OxStack.prototype, "activeIndex", void 0);
104
- OxStack = __decorate([
105
- customElement('ox-stack')
106
- ], OxStack);
107
- export default OxStack;
108
- //# sourceMappingURL=ox-input-stack.js.map