@operato/process 1.1.26 → 1.1.28

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 CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ### [1.1.28](https://github.com/heartyoh/ioperato/compare/v1.1.27...v1.1.28) (2022-12-07)
7
+
8
+
9
+ ### :bug: Bug Fix
10
+
11
+ * add data-binding into process modeller ([1b5459b](https://github.com/heartyoh/ioperato/commit/1b5459b43355c5084c1fe4a554a66634cc1e635b))
12
+
13
+
14
+
15
+ ### [1.1.27](https://github.com/heartyoh/ioperato/compare/v1.1.26...v1.1.27) (2022-12-06)
16
+
17
+ **Note:** Version bump only for package @operato/process
18
+
19
+
20
+
21
+
22
+
6
23
  ### [1.1.26](https://github.com/heartyoh/ioperato/compare/v1.1.25...v1.1.26) (2022-12-05)
7
24
 
8
25
 
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import '@operato/input/ox-input-value-map.js';
5
+ import '@operato/input/ox-input-value-ranges.js';
6
+ import '@operato/input/ox-buttons-radio.js';
7
+ import '@operato/input/ox-input-code.js';
8
+ import '@operato/i18n/ox-i18n.js';
9
+ import '@operato/help/ox-help-icon.js';
10
+ import { LitElement, PropertyValues } from 'lit';
11
+ import { Properties, Scene } from '@hatiolab/things-scene';
12
+ export type Rule = {
13
+ map?: Properties;
14
+ range?: Properties[];
15
+ eval?: string;
16
+ } | any;
17
+ export type Mapping = {
18
+ rule: 'map' | 'range' | 'eval' | 'value';
19
+ accessor?: string;
20
+ target?: string;
21
+ property?: string;
22
+ param?: Rule;
23
+ ndnsp?: boolean;
24
+ };
25
+ /**
26
+ element for mapping data value editing
27
+
28
+ Example:
29
+
30
+ <data-binding-mapper mapping=${mapping}>
31
+ </data-binding-mapper>
32
+ */
33
+ export declare class DataBindingMapper extends LitElement {
34
+ static styles: import("lit").CSSResult[];
35
+ mapping: Mapping;
36
+ rule: Rule;
37
+ properties: Properties[];
38
+ scene?: Scene;
39
+ _valueTypes: any;
40
+ _componentIds: {
41
+ value: string;
42
+ description: string;
43
+ }[];
44
+ editor: HTMLInputElement;
45
+ target: HTMLInputElement;
46
+ firstUpdated(): void;
47
+ updated(changes: PropertyValues<this>): void;
48
+ render(): import("lit-html").TemplateResult<1>;
49
+ _valuetype(property: string): any;
50
+ private _keep_saved_rule_params;
51
+ _onChangedMapping(): Promise<void>;
52
+ _onChangeRule(e: Event): void;
53
+ _onChange(e: Event): void;
54
+ }
@@ -0,0 +1,389 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import '@operato/input/ox-input-value-map.js';
6
+ import '@operato/input/ox-input-value-ranges.js';
7
+ import '@operato/input/ox-buttons-radio.js';
8
+ import '@operato/input/ox-input-code.js';
9
+ import '@operato/i18n/ox-i18n.js';
10
+ import '@operato/help/ox-help-icon.js';
11
+ import { css, html, LitElement } from 'lit';
12
+ import { property, query, state } from 'lit/decorators.js';
13
+ /**
14
+ element for mapping data value editing
15
+
16
+ Example:
17
+
18
+ <data-binding-mapper mapping=${mapping}>
19
+ </data-binding-mapper>
20
+ */
21
+ export class DataBindingMapper extends LitElement {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.mapping = {
25
+ rule: 'value'
26
+ };
27
+ this.rule = {};
28
+ this.properties = [];
29
+ this._valueTypes = {
30
+ play: 'boolean',
31
+ hidden: 'boolean',
32
+ started: 'boolean',
33
+ rotation: 'number',
34
+ value: 'number',
35
+ fillStyle: 'color',
36
+ strokeStyle: 'color',
37
+ fontColor: 'color',
38
+ data: 'object',
39
+ source: 'object',
40
+ location: 'object',
41
+ dimension: 'object',
42
+ text: 'string',
43
+ ref: 'string'
44
+ };
45
+ this._componentIds = [];
46
+ this._keep_saved_rule_params = false;
47
+ }
48
+ firstUpdated() {
49
+ this.renderRoot.addEventListener('change', e => this._onChange(e));
50
+ }
51
+ updated(changes) {
52
+ changes.has('mapping') && this._onChangedMapping();
53
+ }
54
+ render() {
55
+ const mapping = this.mapping || {
56
+ rule: 'value'
57
+ };
58
+ return html `
59
+ <label for="accessor-input"> <ox-i18n msgid="label.accessor">accessor</ox-i18n><ox-help-icon topic="board-modeller/accessor"> </label>
60
+ <input
61
+ id="accessor-input"
62
+ value-key="accessor"
63
+ type="text"
64
+ data-mapping-accessor
65
+ .value=${mapping.accessor || ''}
66
+ />
67
+
68
+ <label for="target-input"> <ox-i18n msgid="label.target">target</ox-i18n> </label>
69
+ <input
70
+ id="target-input"
71
+ type="text"
72
+ value-key="target"
73
+ list="target-list"
74
+ .value=${mapping.target || ''}
75
+ @focusin=${() => {
76
+ this._componentIds =
77
+ (this.scene &&
78
+ this.scene.ids.map(i => {
79
+ var _a;
80
+ const id = i.key;
81
+ return { value: `#${id}`, description: (_a = this.scene.findById(id)) === null || _a === void 0 ? void 0 : _a.get('type') };
82
+ })) ||
83
+ [];
84
+ }}
85
+ />
86
+ <datalist id="target-list">
87
+ <option value="(self)"></option>
88
+ <option value="(key)"></option>
89
+ <option value="[propkey]"></option>
90
+ ${this._componentIds.length
91
+ ? html `
92
+ ${this._componentIds.map(({ value, description }) => html ` <option value=${value}>${description}</option> `)}
93
+ `
94
+ : html ``}
95
+ </datalist>
96
+
97
+ <label for="property-input"> <ox-i18n msgid="label.property">property</ox-i18n> </label>
98
+ <select id="property-input" value-key="property" .value=${mapping.property}>
99
+ ${this.properties.map(item => html ` <option .value=${item.name} ?selected=${item.name == mapping.property}>${item.label}</option> `)}
100
+ </select>
101
+
102
+ <label> <ox-i18n msgid="label.rule-type">rule type</ox-i18n> </label>
103
+ <ox-buttons-radio .value=${mapping.rule} @change=${(e) => this._onChangeRule(e)}>
104
+ <div data-value="value"><ox-i18n msgid="label.value"></ox-i18n></div>
105
+ <div data-value="map"><ox-i18n msgid="label.map"></ox-i18n></div>
106
+ <div data-value="range"><ox-i18n msgid="label.range"></ox-i18n></div>
107
+ <div data-value="eval"><ox-i18n msgid="label.eval"></ox-i18n></div>
108
+ </ox-buttons-radio>
109
+
110
+ <div rule-editors ?hidden=${mapping.rule == 'value'}>
111
+ <ox-input-value-map
112
+ value-key="map"
113
+ .value=${this.rule.map || {}}
114
+ .valuetype=${this._valuetype(mapping.property)}
115
+ ?active=${mapping.rule == 'map'}
116
+ >
117
+ </ox-input-value-map>
118
+
119
+ <ox-input-value-ranges
120
+ value-key="range"
121
+ .value=${this.rule.range || []}
122
+ .valuetype=${this._valuetype(mapping.property)}
123
+ ?active=${mapping.rule == 'range'}
124
+ >
125
+ </ox-input-value-ranges>
126
+
127
+ <ox-input-code
128
+ value-key="eval"
129
+ id="eval-editor"
130
+ .value=${this.rule.eval || ''}
131
+ ?active=${mapping.rule == 'eval'}
132
+ >
133
+ </ox-input-code>
134
+ </div>
135
+
136
+ <div class="checkbox-row">
137
+ <input id="checkbox-ndnsp" type="checkbox" value-key="ndnsp" .checked=${mapping.ndnsp === true} />
138
+ <label for="checkbox-ndnsp"> <ox-i18n msgid="label.ndnsp">No Data No Spreading</ox-i18n> </label>
139
+ </div>
140
+ `;
141
+ }
142
+ _valuetype(property) {
143
+ return this._valueTypes[property] || 'string';
144
+ }
145
+ async _onChangedMapping() {
146
+ if (this._keep_saved_rule_params) {
147
+ this._keep_saved_rule_params = false;
148
+ }
149
+ else {
150
+ await this.updateComplete;
151
+ var rule = {};
152
+ if (this.mapping) {
153
+ switch (this.mapping.rule) {
154
+ case 'map':
155
+ rule.map = this.mapping.param || {};
156
+ break;
157
+ case 'range':
158
+ rule.range = this.mapping.param || [];
159
+ break;
160
+ case 'eval':
161
+ rule.eval = this.mapping.param || '';
162
+ break;
163
+ default:
164
+ this.mapping.rule = 'value';
165
+ break;
166
+ }
167
+ }
168
+ this.rule = rule;
169
+ this.requestUpdate();
170
+ }
171
+ }
172
+ _onChangeRule(e) {
173
+ var element = e.target;
174
+ var value = element.value;
175
+ let param;
176
+ switch (value) {
177
+ case 'map':
178
+ param = this.rule.map;
179
+ break;
180
+ case 'range':
181
+ param = this.rule.range;
182
+ break;
183
+ case 'eval':
184
+ param = this.rule.eval || '';
185
+ // rule.eval에 값이 없을 때, ace-editor 내용이 초기화되지 않는 문제때문에 처리함.
186
+ if (!param) {
187
+ this.editor.value = 'return';
188
+ }
189
+ break;
190
+ default:
191
+ }
192
+ this.mapping = {
193
+ ...this.mapping,
194
+ rule: value,
195
+ param
196
+ };
197
+ this._keep_saved_rule_params = true;
198
+ this.dispatchEvent(new CustomEvent('value-change', { bubbles: true, composed: true }));
199
+ }
200
+ _onChange(e) {
201
+ var element = e.target;
202
+ var key = element.getAttribute('value-key');
203
+ if (!key)
204
+ return;
205
+ var value = element.value;
206
+ if (key === 'target') {
207
+ if (value.length > 0 && !/^[.#(\[]/.test(value)) {
208
+ value = '#' + value.trim();
209
+ this.target.value = value;
210
+ }
211
+ this.mapping = {
212
+ ...this.mapping,
213
+ target: value
214
+ };
215
+ }
216
+ else if (key === 'accessor') {
217
+ this.mapping = {
218
+ ...this.mapping,
219
+ accessor: (value || '').trim()
220
+ };
221
+ }
222
+ else if (key === 'property') {
223
+ this.mapping = {
224
+ ...this.mapping,
225
+ property: (value || '').trim()
226
+ };
227
+ }
228
+ else if (key === 'map' || key === 'range' || key === 'eval') {
229
+ this.rule[key] = value;
230
+ this.mapping = {
231
+ ...this.mapping,
232
+ param: value
233
+ };
234
+ }
235
+ else if (key === 'ndnsp' /* no data no spreading */) {
236
+ value = element.checked;
237
+ this.mapping = {
238
+ ...this.mapping,
239
+ ndnsp: value
240
+ };
241
+ }
242
+ if (!this.mapping.rule) {
243
+ this.mapping.rule = 'value';
244
+ }
245
+ this._keep_saved_rule_params = true;
246
+ this.dispatchEvent(new CustomEvent('value-change', {
247
+ bubbles: true,
248
+ composed: true,
249
+ detail: {
250
+ changed: {
251
+ [key]: value
252
+ }
253
+ }
254
+ }));
255
+ }
256
+ }
257
+ DataBindingMapper.styles = [
258
+ css `
259
+ :host {
260
+ background-color: rgba(255, 255, 255, 0.5);
261
+ overflow: hidden;
262
+ padding: 7px 0 0 0;
263
+ border: 1px solid rgba(0, 0, 0, 0.2);
264
+ border-width: 0 1px 1px 1px;
265
+ padding: 4px;
266
+ line-height: 2;
267
+
268
+ display: grid;
269
+ grid-template-columns: repeat(10, 1fr);
270
+ grid-gap: 4px;
271
+ grid-auto-rows: minmax(24px, auto);
272
+
273
+ align-items: center;
274
+ }
275
+
276
+ :host > * {
277
+ align-self: stretch;
278
+ }
279
+
280
+ label {
281
+ grid-column: span 3;
282
+ text-align: right;
283
+ text-transform: capitalize;
284
+ }
285
+
286
+ input,
287
+ select,
288
+ ox-buttons-radio,
289
+ [mapping-rule] {
290
+ grid-column: span 7;
291
+ }
292
+ input,
293
+ select {
294
+ border: var(--property-sidebar-fieldset-border);
295
+ }
296
+
297
+ ox-buttons-radio {
298
+ display: flex;
299
+ padding: 0 4px;
300
+ }
301
+
302
+ ox-buttons-radio > * {
303
+ text-align: center;
304
+ flex: 1;
305
+ margin: 2px;
306
+ border-bottom: 2px solid #fff;
307
+ }
308
+
309
+ ox-buttons-radio div[active] {
310
+ border-color: #f2471c;
311
+ }
312
+
313
+ select {
314
+ height: 22px;
315
+ }
316
+
317
+ [mapping-rule] {
318
+ display: flex;
319
+ }
320
+
321
+ [mapping-rule] * {
322
+ flex: auto;
323
+ margin: 0;
324
+ text-align: left;
325
+ align-self: center;
326
+ }
327
+
328
+ [rule-editors] {
329
+ grid-column: span 10;
330
+
331
+ display: 'flex';
332
+ align-content: auto;
333
+ }
334
+
335
+ [rule-editors] :not([active]) {
336
+ display: none;
337
+ }
338
+
339
+ ox-input-code {
340
+ height: 300px;
341
+ overflow: auto;
342
+ }
343
+
344
+ /* checkbox-row */
345
+ .checkbox-row {
346
+ grid-column: span 10;
347
+
348
+ display: grid;
349
+ grid-template-columns: repeat(10, 1fr);
350
+ grid-gap: 5px;
351
+ grid-auto-rows: minmax(24px, auto);
352
+ align-items: center;
353
+ }
354
+
355
+ .checkbox-row > input {
356
+ grid-column: 4 / 5;
357
+ }
358
+
359
+ .checkbox-row > label {
360
+ grid-column: span 6;
361
+ text-align: left;
362
+ }
363
+ `
364
+ ];
365
+ __decorate([
366
+ property({ type: Object })
367
+ ], DataBindingMapper.prototype, "mapping", void 0);
368
+ __decorate([
369
+ property({ type: Object })
370
+ ], DataBindingMapper.prototype, "rule", void 0);
371
+ __decorate([
372
+ property({ type: Array })
373
+ ], DataBindingMapper.prototype, "properties", void 0);
374
+ __decorate([
375
+ property({ type: Object })
376
+ ], DataBindingMapper.prototype, "scene", void 0);
377
+ __decorate([
378
+ state()
379
+ ], DataBindingMapper.prototype, "_valueTypes", void 0);
380
+ __decorate([
381
+ state()
382
+ ], DataBindingMapper.prototype, "_componentIds", void 0);
383
+ __decorate([
384
+ query('#eval-editor')
385
+ ], DataBindingMapper.prototype, "editor", void 0);
386
+ __decorate([
387
+ query('#target-input')
388
+ ], DataBindingMapper.prototype, "target", void 0);
389
+ //# sourceMappingURL=data-binding-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-binding-mapper.js","sourceRoot":"","sources":["../../../../../src/modeller/property-sidebar/data-binding/data-binding-mapper.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,sCAAsC,CAAA;AAC7C,OAAO,yCAAyC,CAAA;AAChD,OAAO,oCAAoC,CAAA;AAC3C,OAAO,iCAAiC,CAAA;AACxC,OAAO,0BAA0B,CAAA;AACjC,OAAO,+BAA+B,CAAA;AAEtC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAkB,MAAM,KAAK,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAqB1D;;;;;;;EAOE;AAEF,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAAjD;;QA8G8B,YAAO,GAAY;YAC7C,IAAI,EAAE,OAAO;SACd,CAAA;QAC2B,SAAI,GAAS,EAAE,CAAA;QAChB,eAAU,GAAiB,EAAE,CAAA;QAG/C,gBAAW,GAAQ;YAC1B,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;YAElB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,QAAQ;YAEf,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,OAAO;YAElB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,QAAQ;YAEnB,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,QAAQ;SACd,CAAA;QACQ,kBAAa,GAA6C,EAAE,CAAA;QAgH7D,4BAAuB,GAAY,KAAK,CAAA;IA+HlD,CAAC;IA1OC,YAAY;QACV,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,CAAC,OAA6B;QACnC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAA;IACpD,CAAC;IAED,MAAM;QACJ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI;YAC9B,IAAI,EAAE,OAAO;SACd,CAAA;QAED,OAAO,IAAI,CAAA;;;;;;;iBAOE,OAAO,CAAC,QAAQ,IAAI,EAAE;;;;;;;;;iBAStB,OAAO,CAAC,MAAM,IAAI,EAAE;mBAClB,GAAG,EAAE;YACd,IAAI,CAAC,aAAa;gBAChB,CAAC,IAAI,CAAC,KAAK;oBACT,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;wBACrB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAA;wBAChB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,MAAA,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,0CAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;oBAChF,CAAC,CAAC,CAAC;oBACL,EAAE,CAAA;QACN,CAAC;;;;;;UAOC,IAAI,CAAC,aAAa,CAAC,MAAM;YACvB,CAAC,CAAC,IAAI,CAAA;kBACA,IAAI,CAAC,aAAa,CAAC,GAAG,CACtB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA,kBAAkB,KAAK,IAAI,WAAW,YAAY,CACnF;eACF;YACH,CAAC,CAAC,IAAI,CAAA,EACV;;;;gEAIwD,OAAO,CAAC,QAAQ;UACtE,IAAI,CAAC,UAAU,CAAC,GAAG,CACnB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA,mBAAmB,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,YAAY,CAC9G;;;;iCAIwB,OAAO,CAAC,IAAI,YAAY,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;;;;;;kCAO1D,OAAO,CAAC,IAAI,IAAI,OAAO;;;mBAGtC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE;uBACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAS,CAAC;oBACrC,OAAO,CAAC,IAAI,IAAI,KAAK;;;;;;mBAMtB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;uBACjB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAS,CAAC;oBACrC,OAAO,CAAC,IAAI,IAAI,OAAO;;;;;;;mBAOxB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;oBACnB,OAAO,CAAC,IAAI,IAAI,MAAM;;;;;;gFAMsC,OAAO,CAAC,KAAK,KAAK,IAAI;;;KAGjG,CAAA;IACH,CAAC;IAED,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;IAC/C,CAAC;IAID,KAAK,CAAC,iBAAiB;QACrB,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAA;SACrC;aAAM;YACL,MAAM,IAAI,CAAC,cAAc,CAAA;YAEzB,IAAI,IAAI,GAAS,EAAE,CAAA;YAEnB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;oBACzB,KAAK,KAAK;wBACR,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;wBACnC,MAAK;oBACP,KAAK,OAAO;wBACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;wBACrC,MAAK;oBACP,KAAK,MAAM;wBACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;wBACpC,MAAK;oBACP;wBACE,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAA;wBAC3B,MAAK;iBACR;aACF;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,aAAa,EAAE,CAAA;SACrB;IACH,CAAC;IAED,aAAa,CAAC,CAAQ;QACpB,IAAI,OAAO,GAAG,CAAC,CAAC,MAA0B,CAAA;QAC1C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAEzB,IAAI,KAAK,CAAA;QAET,QAAQ,KAAK,EAAE;YACb,KAAK,KAAK;gBACR,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;gBACrB,MAAK;YACP,KAAK,OAAO;gBACV,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;gBACvB,MAAK;YACP,KAAK,MAAM;gBACT,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;gBAE5B,yDAAyD;gBACzD,IAAI,CAAC,KAAK,EAAE;oBACV,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAA;iBAC7B;gBACD,MAAK;YACP,QAAQ;SACT;QAED,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,IAAI,CAAC,OAAO;YACf,IAAI,EAAE,KAA2C;YACjD,KAAK;SACN,CAAA;QAED,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACxF,CAAC;IAED,SAAS,CAAC,CAAQ;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC,MAA0B,CAAA;QAC1C,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QAE3C,IAAI,CAAC,GAAG;YAAE,OAAM;QAEhB,IAAI,KAAK,GAAqB,OAAO,CAAC,KAAK,CAAA;QAE3C,IAAI,GAAG,KAAK,QAAQ,EAAE;YACpB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC/C,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;gBAE1B,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;aAC1B;YAED,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,IAAI,CAAC,OAAO;gBACf,MAAM,EAAE,KAAK;aACd,CAAA;SACF;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE;YAC7B,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,IAAI,CAAC,OAAO;gBACf,QAAQ,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;aAC/B,CAAA;SACF;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE;YAC7B,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,IAAI,CAAC,OAAO;gBACf,QAAQ,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;aAC/B,CAAA;SACF;aAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,EAAE;YAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACtB,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,IAAI,CAAC,OAAO;gBACf,KAAK,EAAE,KAAK;aACb,CAAA;SACF;aAAM,IAAI,GAAG,KAAK,OAAO,CAAC,0BAA0B,EAAE;YACrD,KAAK,GAAG,OAAO,CAAC,OAAO,CAAA;YAEvB,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,IAAI,CAAC,OAAO;gBACf,KAAK,EAAE,KAAK;aACb,CAAA;SACF;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAA;SAC5B;QAED,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACnC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;YAC9B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,OAAO,EAAE;oBACP,CAAC,GAAG,CAAC,EAAE,KAAK;iBACb;aACF;SACF,CAAC,CACH,CAAA;IACH,CAAC;;AAtXM,wBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyGF;CACF,CAAA;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAE1B;AAC2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CAAgB;AAChB;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;qDAA8B;AAC5B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDAAc;AAEhC;IAAR,KAAK,EAAE;sDAmBP;AACQ;IAAR,KAAK,EAAE;wDAA6D;AAE9C;IAAtB,KAAK,CAAC,cAAc,CAAC;iDAA0B;AACxB;IAAvB,KAAK,CAAC,eAAe,CAAC;iDAA0B","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '@operato/input/ox-input-value-map.js'\nimport '@operato/input/ox-input-value-ranges.js'\nimport '@operato/input/ox-buttons-radio.js'\nimport '@operato/input/ox-input-code.js'\nimport '@operato/i18n/ox-i18n.js'\nimport '@operato/help/ox-help-icon.js'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\n\nimport { Properties, Scene } from '@hatiolab/things-scene'\n\nexport type Rule =\n | {\n map?: Properties\n range?: Properties[]\n eval?: string\n }\n | any\n\nexport type Mapping = {\n rule: 'map' | 'range' | 'eval' | 'value'\n accessor?: string\n target?: string\n property?: string\n param?: Rule\n ndnsp?: boolean\n}\n\n/**\nelement for mapping data value editing\n\nExample:\n\n <data-binding-mapper mapping=${mapping}>\n </data-binding-mapper>\n*/\n\nexport class DataBindingMapper extends LitElement {\n static styles = [\n css`\n :host {\n background-color: rgba(255, 255, 255, 0.5);\n overflow: hidden;\n padding: 7px 0 0 0;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-width: 0 1px 1px 1px;\n padding: 4px;\n line-height: 2;\n\n display: grid;\n grid-template-columns: repeat(10, 1fr);\n grid-gap: 4px;\n grid-auto-rows: minmax(24px, auto);\n\n align-items: center;\n }\n\n :host > * {\n align-self: stretch;\n }\n\n label {\n grid-column: span 3;\n text-align: right;\n text-transform: capitalize;\n }\n\n input,\n select,\n ox-buttons-radio,\n [mapping-rule] {\n grid-column: span 7;\n }\n input,\n select {\n border: var(--property-sidebar-fieldset-border);\n }\n\n ox-buttons-radio {\n display: flex;\n padding: 0 4px;\n }\n\n ox-buttons-radio > * {\n text-align: center;\n flex: 1;\n margin: 2px;\n border-bottom: 2px solid #fff;\n }\n\n ox-buttons-radio div[active] {\n border-color: #f2471c;\n }\n\n select {\n height: 22px;\n }\n\n [mapping-rule] {\n display: flex;\n }\n\n [mapping-rule] * {\n flex: auto;\n margin: 0;\n text-align: left;\n align-self: center;\n }\n\n [rule-editors] {\n grid-column: span 10;\n\n display: 'flex';\n align-content: auto;\n }\n\n [rule-editors] :not([active]) {\n display: none;\n }\n\n ox-input-code {\n height: 300px;\n overflow: auto;\n }\n\n /* checkbox-row */\n .checkbox-row {\n grid-column: span 10;\n\n display: grid;\n grid-template-columns: repeat(10, 1fr);\n grid-gap: 5px;\n grid-auto-rows: minmax(24px, auto);\n align-items: center;\n }\n\n .checkbox-row > input {\n grid-column: 4 / 5;\n }\n\n .checkbox-row > label {\n grid-column: span 6;\n text-align: left;\n }\n `\n ]\n\n @property({ type: Object }) mapping: Mapping = {\n rule: 'value'\n }\n @property({ type: Object }) rule: Rule = {}\n @property({ type: Array }) properties: Properties[] = []\n @property({ type: Object }) scene?: Scene\n\n @state() _valueTypes: any = {\n play: 'boolean',\n hidden: 'boolean',\n started: 'boolean',\n\n rotation: 'number',\n value: 'number',\n\n fillStyle: 'color',\n strokeStyle: 'color',\n fontColor: 'color',\n\n data: 'object',\n source: 'object',\n location: 'object',\n dimension: 'object',\n\n text: 'string',\n ref: 'string'\n }\n @state() _componentIds: { value: string; description: string }[] = []\n\n @query('#eval-editor') editor!: HTMLInputElement\n @query('#target-input') target!: HTMLInputElement\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', e => this._onChange(e))\n }\n\n updated(changes: PropertyValues<this>) {\n changes.has('mapping') && this._onChangedMapping()\n }\n\n render() {\n const mapping = this.mapping || {\n rule: 'value'\n }\n\n return html`\n <label for=\"accessor-input\"> <ox-i18n msgid=\"label.accessor\">accessor</ox-i18n><ox-help-icon topic=\"board-modeller/accessor\"> </label>\n <input\n id=\"accessor-input\"\n value-key=\"accessor\"\n type=\"text\"\n data-mapping-accessor\n .value=${mapping.accessor || ''}\n />\n\n <label for=\"target-input\"> <ox-i18n msgid=\"label.target\">target</ox-i18n> </label>\n <input\n id=\"target-input\"\n type=\"text\"\n value-key=\"target\"\n list=\"target-list\"\n .value=${mapping.target || ''}\n @focusin=${() => {\n this._componentIds =\n (this.scene &&\n this.scene.ids.map(i => {\n const id = i.key\n return { value: `#${id}`, description: this.scene!.findById(id)?.get('type') }\n })) ||\n []\n }}\n />\n <datalist id=\"target-list\">\n <option value=\"(self)\"></option>\n <option value=\"(key)\"></option>\n <option value=\"[propkey]\"></option>\n ${\n this._componentIds.length\n ? html`\n ${this._componentIds.map(\n ({ value, description }) => html` <option value=${value}>${description}</option> `\n )}\n `\n : html``\n }\n </datalist>\n\n <label for=\"property-input\"> <ox-i18n msgid=\"label.property\">property</ox-i18n> </label>\n <select id=\"property-input\" value-key=\"property\" .value=${mapping.property}>\n ${this.properties.map(\n item => html` <option .value=${item.name} ?selected=${item.name == mapping.property}>${item.label}</option> `\n )}\n </select>\n\n <label> <ox-i18n msgid=\"label.rule-type\">rule type</ox-i18n> </label>\n <ox-buttons-radio .value=${mapping.rule} @change=${(e: Event) => this._onChangeRule(e)}>\n <div data-value=\"value\"><ox-i18n msgid=\"label.value\"></ox-i18n></div>\n <div data-value=\"map\"><ox-i18n msgid=\"label.map\"></ox-i18n></div>\n <div data-value=\"range\"><ox-i18n msgid=\"label.range\"></ox-i18n></div>\n <div data-value=\"eval\"><ox-i18n msgid=\"label.eval\"></ox-i18n></div>\n </ox-buttons-radio>\n\n <div rule-editors ?hidden=${mapping.rule == 'value'}>\n <ox-input-value-map\n value-key=\"map\"\n .value=${this.rule.map || {}}\n .valuetype=${this._valuetype(mapping.property!)}\n ?active=${mapping.rule == 'map'}\n >\n </ox-input-value-map>\n\n <ox-input-value-ranges\n value-key=\"range\"\n .value=${this.rule.range || []}\n .valuetype=${this._valuetype(mapping.property!)}\n ?active=${mapping.rule == 'range'}\n >\n </ox-input-value-ranges>\n\n <ox-input-code\n value-key=\"eval\"\n id=\"eval-editor\"\n .value=${this.rule.eval || ''}\n ?active=${mapping.rule == 'eval'}\n >\n </ox-input-code>\n </div>\n\n <div class=\"checkbox-row\">\n <input id=\"checkbox-ndnsp\" type=\"checkbox\" value-key=\"ndnsp\" .checked=${mapping.ndnsp === true} />\n <label for=\"checkbox-ndnsp\"> <ox-i18n msgid=\"label.ndnsp\">No Data No Spreading</ox-i18n> </label>\n </div>\n `\n }\n\n _valuetype(property: string) {\n return this._valueTypes[property] || 'string'\n }\n\n private _keep_saved_rule_params: boolean = false\n\n async _onChangedMapping() {\n if (this._keep_saved_rule_params) {\n this._keep_saved_rule_params = false\n } else {\n await this.updateComplete\n\n var rule: Rule = {}\n\n if (this.mapping) {\n switch (this.mapping.rule) {\n case 'map':\n rule.map = this.mapping.param || {}\n break\n case 'range':\n rule.range = this.mapping.param || []\n break\n case 'eval':\n rule.eval = this.mapping.param || ''\n break\n default:\n this.mapping.rule = 'value'\n break\n }\n }\n\n this.rule = rule\n this.requestUpdate()\n }\n }\n\n _onChangeRule(e: Event) {\n var element = e.target as HTMLInputElement\n var value = element.value\n\n let param\n\n switch (value) {\n case 'map':\n param = this.rule.map\n break\n case 'range':\n param = this.rule.range\n break\n case 'eval':\n param = this.rule.eval || ''\n\n // rule.eval에 값이 없을 때, ace-editor 내용이 초기화되지 않는 문제때문에 처리함.\n if (!param) {\n this.editor.value = 'return'\n }\n break\n default:\n }\n\n this.mapping = {\n ...this.mapping,\n rule: value as 'value' | 'map' | 'range' | 'eval',\n param\n }\n\n this._keep_saved_rule_params = true\n this.dispatchEvent(new CustomEvent('value-change', { bubbles: true, composed: true }))\n }\n\n _onChange(e: Event) {\n var element = e.target as HTMLInputElement\n var key = element.getAttribute('value-key')\n\n if (!key) return\n\n var value: string | boolean = element.value\n\n if (key === 'target') {\n if (value.length > 0 && !/^[.#(\\[]/.test(value)) {\n value = '#' + value.trim()\n\n this.target.value = value\n }\n\n this.mapping = {\n ...this.mapping,\n target: value\n }\n } else if (key === 'accessor') {\n this.mapping = {\n ...this.mapping,\n accessor: (value || '').trim()\n }\n } else if (key === 'property') {\n this.mapping = {\n ...this.mapping,\n property: (value || '').trim()\n }\n } else if (key === 'map' || key === 'range' || key === 'eval') {\n this.rule[key] = value\n this.mapping = {\n ...this.mapping,\n param: value\n }\n } else if (key === 'ndnsp' /* no data no spreading */) {\n value = element.checked\n\n this.mapping = {\n ...this.mapping,\n ndnsp: value\n }\n }\n\n if (!this.mapping.rule) {\n this.mapping.rule = 'value'\n }\n\n this._keep_saved_rule_params = true\n this.dispatchEvent(\n new CustomEvent('value-change', {\n bubbles: true,\n composed: true,\n detail: {\n changed: {\n [key]: value\n }\n }\n })\n )\n }\n}\n"]}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import '@material/mwc-icon';
5
+ import '@operato/help/ox-title-with-help.js';
6
+ import '@operato/input/ox-buttons-radio.js';
7
+ import '@operato/input/ox-input-data.js';
8
+ import '@operato/i18n/ox-i18n.js';
9
+ import { PropertyValues } from 'lit';
10
+ import { Properties, Scene } from '@hatiolab/things-scene';
11
+ import { AbstractProperty } from '../abstract-property.js';
12
+ import { DataBindingMapper } from './data-binding-mapper.js';
13
+ declare const PropertyDataBinding_base: typeof AbstractProperty & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types.js").ScopedElementsHost>;
14
+ export declare class PropertyDataBinding extends PropertyDataBinding_base {
15
+ static styles: import("lit").CSSResult[];
16
+ value?: Properties;
17
+ scene?: Scene;
18
+ mappingIndex: number;
19
+ _afterRender?: Function | null;
20
+ _dataExpanded: boolean;
21
+ tabs: HTMLElement;
22
+ tabNavLeftButton: HTMLElement;
23
+ tabNavRightButton: HTMLElement;
24
+ private mapping;
25
+ get mappings(): any;
26
+ firstUpdated(): void;
27
+ updated(changes: PropertyValues<this>): void;
28
+ static get scopedElements(): {
29
+ 'data-binding-mapper': typeof DataBindingMapper;
30
+ };
31
+ render(): import("lit-html").TemplateResult<1>;
32
+ _setMappingIndex(idx: number): void;
33
+ _clearDataBindingMapper(): void;
34
+ _copyDataBindingMapper(): void;
35
+ _pasteDataBindingMapper(): Promise<void>;
36
+ _onValueChanged(): Promise<void>;
37
+ _onValueChange(e: Event): void;
38
+ get tabContainer(): HTMLElement;
39
+ _onMappingChanged(e: CustomEvent): Promise<void>;
40
+ _onTabScroll(): void;
41
+ _onTabScrollNavLeft(): void;
42
+ _onTabScrollNavRight(): void;
43
+ }
44
+ export {};