@operato/input 0.2.45 → 0.2.49

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.
@@ -0,0 +1,149 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import 'codemirror/mode/javascript/javascript';
6
+ import 'codemirror/mode/python/python';
7
+ import 'codemirror/addon/display/fullscreen';
8
+ import 'codemirror/addon/display/autorefresh';
9
+ import { css, html, unsafeCSS } from 'lit';
10
+ import { customElement, property } from 'lit/decorators';
11
+ import CodeMirror from 'codemirror';
12
+ import CodeMirrorStyle from '!!text-loader!codemirror/lib/codemirror.css';
13
+ import FullScreenStyle from '!!text-loader!codemirror/addon/display/fullscreen.css';
14
+ import NightThemeStyle from '!!text-loader!codemirror/theme/night.css';
15
+ import { OxFormField } from './ox-formfield';
16
+ import { ScrollbarStyles } from '@operato/styles';
17
+ /**
18
+ WEB Component for code-mirror code editor.
19
+
20
+ Example:
21
+
22
+ <things-editor-code .value=${text} mode=${mode} tab-size="4" tab-as-space="true">
23
+ </things-editor-code>
24
+ */
25
+ let OxInputCode = class OxInputCode extends OxFormField {
26
+ constructor() {
27
+ super(...arguments);
28
+ /**
29
+ * `value`는 에디터에서 작성중인 contents이다.
30
+ */
31
+ this.value = '';
32
+ this.tabSize = 2;
33
+ this.tabAsSpace = true;
34
+ this._outside_changing = false;
35
+ this._self_changing = false;
36
+ this._editor = null;
37
+ this._changed = false;
38
+ }
39
+ // private lint: any
40
+ // private hintOptions: any
41
+ updated(changes) {
42
+ var _a, _b;
43
+ this._outside_changing = true;
44
+ if (changes.has('value') && this.editor && !this._self_changing) {
45
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.setValue(this.value === undefined ? '' : String(this.value));
46
+ (_b = this.editor) === null || _b === void 0 ? void 0 : _b.refresh();
47
+ }
48
+ this._outside_changing = false;
49
+ }
50
+ render() {
51
+ return html ` <textarea></textarea> `;
52
+ }
53
+ get editor() {
54
+ if (!this._editor) {
55
+ let textarea = this.renderRoot.querySelector('textarea');
56
+ let mode = this.mode || 'javascript';
57
+ let tabSize = Number(this.tabSize) || 2;
58
+ let indentUnit = tabSize;
59
+ // let lint = this.lint
60
+ // let hintOptions = this.hintOptions
61
+ let tabAsSpace = this.tabAsSpace;
62
+ if (textarea) {
63
+ this._editor = CodeMirror.fromTextArea(textarea, {
64
+ value: this.value,
65
+ mode,
66
+ // lint,
67
+ // hintOptions,
68
+ tabSize,
69
+ indentUnit,
70
+ lineNumbers: false,
71
+ showCursorWhenSelecting: true,
72
+ theme: 'night',
73
+ extraKeys: {
74
+ F11: function (cm) {
75
+ cm.setOption('fullScreen', !cm.getOption('fullScreen'));
76
+ },
77
+ Esc: function (cm) {
78
+ cm.setOption('fullScreen', !cm.getOption('fullScreen'));
79
+ },
80
+ // https://github.com/codemirror/CodeMirror/issues/988#issuecomment-37095621
81
+ Tab: tabAsSpace
82
+ ? function (cm) {
83
+ cm.replaceSelection(Array(cm.getOption('tabSize')).join(' '));
84
+ }
85
+ : false
86
+ },
87
+ autoRefresh: {
88
+ delay: 500
89
+ }
90
+ });
91
+ this._editor.on('blur', e => {
92
+ if (!this._changed)
93
+ return;
94
+ this.value = e.getValue();
95
+ this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }));
96
+ });
97
+ this._editor.on('change', async (e) => {
98
+ this._self_changing = true;
99
+ this._changed = true;
100
+ await this.updateComplete;
101
+ this._self_changing = false;
102
+ });
103
+ }
104
+ }
105
+ return this._editor;
106
+ }
107
+ };
108
+ OxInputCode.styles = [
109
+ ScrollbarStyles,
110
+ css `
111
+ ${unsafeCSS(CodeMirrorStyle)}
112
+ ${unsafeCSS(FullScreenStyle)}
113
+ ${unsafeCSS(NightThemeStyle)}
114
+ `,
115
+ css `
116
+ :host {
117
+ display: block;
118
+ position: relative;
119
+ }
120
+
121
+ textarea {
122
+ display: block;
123
+ height: 100%;
124
+ width: 100%;
125
+ resize: none;
126
+ font-size: 16px;
127
+ line-height: 20px;
128
+ border: 0px;
129
+ padding: 0px;
130
+ }
131
+ `
132
+ ];
133
+ __decorate([
134
+ property({ type: String })
135
+ ], OxInputCode.prototype, "value", void 0);
136
+ __decorate([
137
+ property({ type: String })
138
+ ], OxInputCode.prototype, "mode", void 0);
139
+ __decorate([
140
+ property({ type: Number, attribute: 'tab-size' })
141
+ ], OxInputCode.prototype, "tabSize", void 0);
142
+ __decorate([
143
+ property({ type: Boolean, attribute: 'tab-as-space' })
144
+ ], OxInputCode.prototype, "tabAsSpace", void 0);
145
+ OxInputCode = __decorate([
146
+ customElement('ox-input-code')
147
+ ], OxInputCode);
148
+ export default OxInputCode;
149
+ //# sourceMappingURL=ox-input-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-input-code.js","sourceRoot":"","sources":["../../src/ox-input-code.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport 'codemirror/mode/javascript/javascript'\nimport 'codemirror/mode/python/python'\nimport 'codemirror/addon/display/fullscreen'\nimport 'codemirror/addon/display/autorefresh'\n\nimport { PropertyValues, css, html, unsafeCSS } from 'lit'\nimport { customElement, property } from 'lit/decorators'\n\nimport CodeMirror from 'codemirror'\nimport CodeMirrorStyle from '!!text-loader!codemirror/lib/codemirror.css'\nimport FullScreenStyle from '!!text-loader!codemirror/addon/display/fullscreen.css'\nimport NightThemeStyle from '!!text-loader!codemirror/theme/night.css'\nimport { OxFormField } from './ox-formfield'\nimport { ScrollbarStyles } from '@operato/styles'\n\n/**\nWEB Component for code-mirror code editor.\n\nExample:\n\n <things-editor-code .value=${text} mode=${mode} tab-size=\"4\" tab-as-space=\"true\">\n </things-editor-code>\n*/\n@customElement('ox-input-code')\nexport default class OxInputCode extends OxFormField {\n static styles = [\n ScrollbarStyles,\n css`\n ${unsafeCSS(CodeMirrorStyle)}\n ${unsafeCSS(FullScreenStyle)}\n ${unsafeCSS(NightThemeStyle)}\n `,\n css`\n :host {\n display: block;\n position: relative;\n }\n\n textarea {\n display: block;\n height: 100%;\n width: 100%;\n resize: none;\n font-size: 16px;\n line-height: 20px;\n border: 0px;\n padding: 0px;\n }\n `\n ]\n\n /**\n * `value`는 에디터에서 작성중인 contents이다.\n */\n @property({ type: String }) value: string = ''\n @property({ type: String }) mode?: string\n @property({ type: Number, attribute: 'tab-size' }) tabSize: number = 2\n @property({ type: Boolean, attribute: 'tab-as-space' }) tabAsSpace: boolean = true\n\n private _outside_changing: boolean = false\n private _self_changing: boolean = false\n private _editor: CodeMirror.EditorFromTextArea | null | undefined = null\n private _changed: boolean = false\n\n // private lint: any\n // private hintOptions: any\n\n updated(changes: PropertyValues<this>) {\n this._outside_changing = true\n if (changes.has('value') && this.editor && !this._self_changing) {\n this.editor?.setValue(this.value === undefined ? '' : String(this.value))\n this.editor?.refresh()\n }\n this._outside_changing = false\n }\n\n render() {\n return html` <textarea></textarea> `\n }\n\n get editor() {\n if (!this._editor) {\n let textarea = this.renderRoot.querySelector('textarea')\n let mode = this.mode || 'javascript'\n let tabSize = Number(this.tabSize) || 2\n let indentUnit = tabSize\n // let lint = this.lint\n // let hintOptions = this.hintOptions\n let tabAsSpace = this.tabAsSpace\n\n if (textarea) {\n this._editor = CodeMirror.fromTextArea(textarea, {\n value: this.value,\n mode,\n // lint,\n // hintOptions,\n tabSize,\n indentUnit,\n lineNumbers: false,\n showCursorWhenSelecting: true,\n theme: 'night',\n extraKeys: {\n F11: function (cm) {\n cm.setOption('fullScreen', !cm.getOption('fullScreen'))\n },\n Esc: function (cm) {\n cm.setOption('fullScreen', !cm.getOption('fullScreen'))\n },\n // https://github.com/codemirror/CodeMirror/issues/988#issuecomment-37095621\n Tab: tabAsSpace\n ? function (cm: CodeMirror.Editor) {\n cm.replaceSelection(Array(cm.getOption('tabSize')).join(' '))\n }\n : false\n },\n autoRefresh: {\n delay: 500\n }\n })\n\n this._editor.on('blur', e => {\n if (!this._changed) return\n\n this.value = e.getValue()\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }))\n })\n\n this._editor.on('change', async e => {\n this._self_changing = true\n\n this._changed = true\n\n await this.updateComplete\n this._self_changing = false\n })\n }\n }\n\n return this._editor\n }\n}\n"]}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import './ox-input-code';
5
+ import { PropertyValues } from 'lit';
6
+ import { OxFormField } from './ox-formfield';
7
+ /**
8
+ WEB Component for code-mirror based data editor.
9
+
10
+ Example:
11
+
12
+ <ox-input-data value=${text}>
13
+ </ox-input-data>
14
+ */
15
+ export default class OxInputData extends OxFormField {
16
+ static styles: import("lit").CSSResult[];
17
+ /**
18
+ * `value`는 에디터에서 작성중인 contents이다.
19
+ */
20
+ value: any;
21
+ render(): import("lit-html").TemplateResult<1>;
22
+ firstUpdated(): void;
23
+ udpated(changes: PropertyValues<this>): void;
24
+ _setDataType(type: string | undefined | null): void;
25
+ _clearData(): void;
26
+ _getData(data: any): any;
27
+ _onAfterValueChange(): void;
28
+ }
@@ -0,0 +1,139 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import './ox-input-code';
6
+ import { css, html } from 'lit';
7
+ import { customElement, property } from 'lit/decorators';
8
+ import { OxFormField } from './ox-formfield';
9
+ /**
10
+ WEB Component for code-mirror based data editor.
11
+
12
+ Example:
13
+
14
+ <ox-input-data value=${text}>
15
+ </ox-input-data>
16
+ */
17
+ let OxInputData = class OxInputData extends OxFormField {
18
+ render() {
19
+ return html `
20
+ <div datatype>
21
+ <input
22
+ type="radio"
23
+ name="data-type"
24
+ data-value="string"
25
+ .checked=${typeof this.value == 'string'}
26
+ @click=${() => this._setDataType('string')}
27
+ />string
28
+
29
+ <input
30
+ type="radio"
31
+ name="data-type"
32
+ data-value="number"
33
+ .checked=${typeof this.value == 'number'}
34
+ @click=${() => this._setDataType('number')}
35
+ />number
36
+
37
+ <input
38
+ type="radio"
39
+ name="data-type"
40
+ data-value="object"
41
+ .checked=${typeof this.value == 'object'}
42
+ @click=${() => this._setDataType('object')}
43
+ />object
44
+ <mwc-icon @click=${() => this._clearData()} title="delete">delete_forever</mwc-icon>
45
+ </div>
46
+
47
+ <ox-input-code .value=${this._getData(this.value)} editor> </ox-input-code>
48
+ `;
49
+ }
50
+ firstUpdated() {
51
+ this.renderRoot.addEventListener('change', e => {
52
+ var _a;
53
+ e.stopPropagation();
54
+ const target = e.target;
55
+ if (target.hasAttribute('editor')) {
56
+ this.value = target.value;
57
+ }
58
+ const type = (_a = this.renderRoot.querySelector('input[name=data-type]:checked')) === null || _a === void 0 ? void 0 : _a.getAttribute('data-value');
59
+ this._setDataType(type);
60
+ });
61
+ }
62
+ udpated(changes) {
63
+ if (changes.has('value')) {
64
+ this.value = this._getData(this.value);
65
+ }
66
+ }
67
+ _setDataType(type) {
68
+ if (typeof this.value !== type) {
69
+ var value = this.value;
70
+ try {
71
+ switch (type) {
72
+ case 'string':
73
+ this.value = String(value || '');
74
+ break;
75
+ case 'number':
76
+ if (!isNaN(value)) {
77
+ this.value = Number(value);
78
+ }
79
+ break;
80
+ case 'object':
81
+ this.value = eval('(' + value + ')');
82
+ break;
83
+ }
84
+ }
85
+ catch (e) {
86
+ console.log(e);
87
+ }
88
+ }
89
+ this._onAfterValueChange();
90
+ }
91
+ _clearData() {
92
+ this.value = undefined;
93
+ this._onAfterValueChange();
94
+ }
95
+ _getData(data) {
96
+ return typeof data !== 'object' ? data || '' : JSON.stringify(data, null, 1);
97
+ }
98
+ _onAfterValueChange() {
99
+ this.dispatchEvent(new CustomEvent('change', {
100
+ bubbles: true,
101
+ composed: true
102
+ }));
103
+ }
104
+ };
105
+ OxInputData.styles = [
106
+ css `
107
+ :host {
108
+ display: flex;
109
+ flex-direction: column;
110
+ position: relative;
111
+ }
112
+
113
+ div[datatype] {
114
+ display: flex;
115
+ align-items: center;
116
+ padding: 2px;
117
+ background-color: rgba(0, 0, 0, 0.08);
118
+ font-size: small;
119
+ }
120
+
121
+ div[datatype] mwc-icon {
122
+ margin-left: auto;
123
+ }
124
+
125
+ ox-input-code {
126
+ flex: 1;
127
+ max-width: 260px;
128
+ overflow: auto;
129
+ }
130
+ `
131
+ ];
132
+ __decorate([
133
+ property({ type: Object })
134
+ ], OxInputData.prototype, "value", void 0);
135
+ OxInputData = __decorate([
136
+ customElement('ox-input-data')
137
+ ], OxInputData);
138
+ export default OxInputData;
139
+ //# sourceMappingURL=ox-input-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-input-data.js","sourceRoot":"","sources":["../../src/ox-input-data.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './ox-input-code'\n\nimport { PropertyValues, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators'\n\nimport { OxFormField } from './ox-formfield'\nimport OxInputCode from './ox-input-code'\n\n/**\nWEB Component for code-mirror based data editor.\n\nExample:\n\n <ox-input-data value=${text}>\n </ox-input-data>\n*/\n@customElement('ox-input-data')\nexport default class OxInputData extends OxFormField {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n div[datatype] {\n display: flex;\n align-items: center;\n padding: 2px;\n background-color: rgba(0, 0, 0, 0.08);\n font-size: small;\n }\n\n div[datatype] mwc-icon {\n margin-left: auto;\n }\n\n ox-input-code {\n flex: 1;\n max-width: 260px;\n overflow: auto;\n }\n `\n ]\n\n /**\n * `value`는 에디터에서 작성중인 contents이다.\n */\n @property({ type: Object }) value: any\n\n render() {\n return html`\n <div datatype>\n <input\n type=\"radio\"\n name=\"data-type\"\n data-value=\"string\"\n .checked=${typeof this.value == 'string'}\n @click=${() => this._setDataType('string')}\n />string\n\n <input\n type=\"radio\"\n name=\"data-type\"\n data-value=\"number\"\n .checked=${typeof this.value == 'number'}\n @click=${() => this._setDataType('number')}\n />number\n\n <input\n type=\"radio\"\n name=\"data-type\"\n data-value=\"object\"\n .checked=${typeof this.value == 'object'}\n @click=${() => this._setDataType('object')}\n />object\n <mwc-icon @click=${() => this._clearData()} title=\"delete\">delete_forever</mwc-icon>\n </div>\n\n <ox-input-code .value=${this._getData(this.value)} editor> </ox-input-code>\n `\n }\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', e => {\n e.stopPropagation()\n const target = e.target as OxInputCode\n if (target.hasAttribute('editor')) {\n this.value = target.value\n }\n\n const type = this.renderRoot.querySelector('input[name=data-type]:checked')?.getAttribute('data-value')\n this._setDataType(type)\n })\n }\n\n udpated(changes: PropertyValues<this>) {\n if (changes.has('value')) {\n this.value = this._getData(this.value)\n }\n }\n\n _setDataType(type: string | undefined | null) {\n if (typeof this.value !== type) {\n var value = this.value\n\n try {\n switch (type) {\n case 'string':\n this.value = String(value || '')\n break\n case 'number':\n if (!isNaN(value)) {\n this.value = Number(value)\n }\n break\n case 'object':\n this.value = eval('(' + value + ')')\n break\n }\n } catch (e) {\n console.log(e)\n }\n }\n\n this._onAfterValueChange()\n }\n\n _clearData() {\n this.value = undefined\n this._onAfterValueChange()\n }\n\n _getData(data: any) {\n return typeof data !== 'object' ? data || '' : JSON.stringify(data, null, 1)\n }\n\n _onAfterValueChange() {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true\n })\n )\n }\n}\n"]}