@operato/process 1.1.27 → 1.1.29

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 (25) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.d.ts +54 -0
  3. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.js +389 -0
  4. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.js.map +1 -0
  5. package/dist/src/modeller/property-sidebar/data-binding/data-binding.d.ts +44 -0
  6. package/dist/src/modeller/property-sidebar/data-binding/data-binding.js +455 -0
  7. package/dist/src/modeller/property-sidebar/data-binding/data-binding.js.map +1 -0
  8. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js +6 -1
  9. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js.map +1 -1
  10. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js +18 -9
  11. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js.map +1 -1
  12. package/dist/src/modeller/property-sidebar/property-sidebar.d.ts +2 -0
  13. package/dist/src/modeller/property-sidebar/property-sidebar.js +11 -0
  14. package/dist/src/modeller/property-sidebar/property-sidebar.js.map +1 -1
  15. package/dist/src/ox-process-viewer.d.ts +1 -0
  16. package/dist/src/ox-process-viewer.js +5 -0
  17. package/dist/src/ox-process-viewer.js.map +1 -1
  18. package/dist/tsconfig.tsbuildinfo +1 -1
  19. package/package.json +11 -11
  20. package/src/modeller/property-sidebar/data-binding/data-binding-mapper.ts +419 -0
  21. package/src/modeller/property-sidebar/data-binding/data-binding.ts +476 -0
  22. package/src/modeller/property-sidebar/effects/property-event-hover.ts +6 -1
  23. package/src/modeller/property-sidebar/effects/property-event-tap.ts +16 -7
  24. package/src/modeller/property-sidebar/property-sidebar.ts +11 -0
  25. package/src/ox-process-viewer.ts +6 -0
@@ -0,0 +1,455 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import '@material/mwc-icon';
6
+ import '@operato/help/ox-title-with-help.js';
7
+ import '@operato/input/ox-buttons-radio.js';
8
+ import '@operato/input/ox-input-data.js';
9
+ import '@operato/i18n/ox-i18n.js';
10
+ import { css, html } from 'lit';
11
+ import { property, query, state } from 'lit/decorators.js';
12
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
13
+ import { AbstractProperty } from '../abstract-property.js';
14
+ import { PropertySharedStyle } from '../property-shared-style.js';
15
+ import { DataBindingMapper } from './data-binding-mapper.js';
16
+ var clipboard = '{}';
17
+ const PROPS = [
18
+ '',
19
+ 'text',
20
+ ['fillStyle', 'fill style'],
21
+ ['strokeStyle', 'stroke style'],
22
+ ['fontColor', 'font color'],
23
+ 'value',
24
+ 'data',
25
+ 'source',
26
+ 'hidden',
27
+ 'started',
28
+ 'play',
29
+ ['ref', 'reference'],
30
+ 'options',
31
+ 'rotate',
32
+ 'scale',
33
+ 'translate',
34
+ 'dimension',
35
+ 'location',
36
+ 'accessor'
37
+ ].map(prop => {
38
+ return typeof prop == 'string' ? { name: prop, label: prop } : { name: prop[0], label: prop[1] };
39
+ });
40
+ export class PropertyDataBinding extends ScopedElementsMixin(AbstractProperty) {
41
+ constructor() {
42
+ super(...arguments);
43
+ this.mappingIndex = 0;
44
+ this._dataExpanded = false;
45
+ this.mapping = {};
46
+ }
47
+ get mappings() {
48
+ var _a;
49
+ return ((_a = this.value) === null || _a === void 0 ? void 0 : _a.mappings) || [];
50
+ }
51
+ firstUpdated() {
52
+ this.renderRoot.addEventListener('change', this._onValueChange.bind(this));
53
+ this.tabContainer.addEventListener('scroll', () => {
54
+ this._onTabScroll();
55
+ });
56
+ }
57
+ updated(changes) {
58
+ if (changes.has('value')) {
59
+ this._onValueChanged();
60
+ }
61
+ }
62
+ static get scopedElements() {
63
+ return {
64
+ 'data-binding-mapper': DataBindingMapper
65
+ };
66
+ }
67
+ render() {
68
+ const value = this.value || {
69
+ mappings: []
70
+ };
71
+ return html `
72
+ <fieldset>
73
+ <legend>
74
+ <ox-title-with-help topic="board-modeller/data-binding" msgid="label.identifier"
75
+ >identifier</ox-title-with-help
76
+ >
77
+ </legend>
78
+ <div class="property-grid">
79
+ <label> <ox-i18n msgid="label.id">ID</ox-i18n> </label>
80
+ <input value-key="id" .value=${value.id || ''} />
81
+
82
+ <label> <ox-i18n msgid="label.class">Class</ox-i18n> </label>
83
+ <input value-key="class" .value=${value.class || ''} />
84
+
85
+ <label> <ox-i18n msgid="label.tag">Tag</ox-i18n> </label>
86
+ <input value-key="tag" .value=${value.tag || ''} />
87
+
88
+ <label> <ox-i18n msgid="label.template-prefix">Template Prefix</ox-i18n> </label>
89
+ <input value-key="templatePrefix" .value=${value.templatePrefix || ''} />
90
+
91
+ <div class="checkbox-row">
92
+ <input id="checkbox-ndns" type="checkbox" value-key="ndns" .checked=${value.ndns} />
93
+ <label for="checkbox-ndns"> <ox-i18n msgid="label.ndns">No Data No Show</ox-i18n> </label>
94
+ </div>
95
+
96
+ <div class="checkbox-row">
97
+ <input id="checkbox-sensitive" type="checkbox" value-key="sensitive" .checked=${value.sensitive} />
98
+ <label for="checkbox-sensitive">
99
+ <ox-i18n msgid="label.intent-sensitive">Intent Sensitive</ox-i18n>
100
+ </label>
101
+ </div>
102
+
103
+ <div class="checkbox-row">
104
+ <input id="checkbox-persistent" type="checkbox" value-key="persistent" .checked=${value.persistent} />
105
+ <label for="checkbox-persistent">
106
+ <ox-i18n msgid="label.persistent-data">Persistent Data</ox-i18n>
107
+ </label>
108
+ </div>
109
+ </div>
110
+ </fieldset>
111
+
112
+ <fieldset collapsable ?collapsed=${!this._dataExpanded}>
113
+ <legend>
114
+ <ox-title-with-help topic="board-modeller/initial-data" msgid="label.initial-data"
115
+ >initial value</ox-title-with-help
116
+ >
117
+ <mwc-icon
118
+ @click=${() => {
119
+ this._dataExpanded = !this._dataExpanded;
120
+ }}
121
+ >${this._dataExpanded ? 'expand_less' : 'expand_more'}</mwc-icon
122
+ >
123
+ </legend>
124
+ <ox-input-data value-key="data" .value=${value.data}> </ox-input-data>
125
+ </fieldset>
126
+
127
+ <fieldset>
128
+ <legend>
129
+ <ox-title-with-help topic="board-modeller/data-spread" msgid="label.data-spread"
130
+ >Data Spread</ox-title-with-help
131
+ >
132
+ </legend>
133
+
134
+ <div id="tab-header">
135
+ <mwc-icon
136
+ id="tab-nav-left-button"
137
+ @click=${() => {
138
+ this._onTabScrollNavLeft();
139
+ }}
140
+ disabled
141
+ >chevron_left</mwc-icon
142
+ >
143
+
144
+ <ox-buttons-radio
145
+ id="tabs"
146
+ .value=${String(this.mappingIndex)}
147
+ @change=${(e) => {
148
+ e.stopPropagation();
149
+ this._setMappingIndex(e.target.value);
150
+ }}
151
+ >
152
+ ${this.mappings.map((m, i) => html ` <div data-value=${i} data-mapping>${i + 1}</div> `)}
153
+ <div data-value=${this.mappings.length} data-mapping disabled>${this.mappings.length + 1}</div>
154
+ </ox-buttons-radio>
155
+
156
+ <mwc-icon
157
+ id="tab-nav-right-button"
158
+ @click=${(e) => {
159
+ this._onTabScrollNavRight();
160
+ }}
161
+ disabled
162
+ >chevron_right</mwc-icon
163
+ >
164
+ </div>
165
+
166
+ <div binding>
167
+ <mwc-icon style="font-size:19px" @click=${() => this._clearDataBindingMapper()} title="delete current tab"
168
+ >delete_forever</mwc-icon
169
+ >
170
+ <mwc-icon @click=${() => this._pasteDataBindingMapper()} title="replace all tabs">content_paste</mwc-icon>
171
+ <mwc-icon style="font-size:17px" @click=${() => this._copyDataBindingMapper()} title="copy all tabs"
172
+ >content_copy</mwc-icon
173
+ >
174
+ </div>
175
+
176
+ <data-binding-mapper
177
+ @value-change=${(e) => this._onMappingChanged(e)}
178
+ .scene=${this.scene}
179
+ .mapping=${(value.mappings && value.mappings[this.mappingIndex]) || {}}
180
+ .properties=${PROPS}
181
+ >
182
+ </data-binding-mapper>
183
+ </fieldset>
184
+ `;
185
+ }
186
+ _setMappingIndex(idx) {
187
+ this.mappingIndex = isNaN(Number(idx)) ? 0 : Number(idx);
188
+ this._onTabScroll();
189
+ }
190
+ _clearDataBindingMapper() {
191
+ var _a;
192
+ var mappings = [...(((_a = this.value) === null || _a === void 0 ? void 0 : _a.mappings) || [])];
193
+ mappings.splice(this.mappingIndex, 1);
194
+ this._onAfterValueChange('mappings', mappings.filter(m => !!m));
195
+ }
196
+ _copyDataBindingMapper() {
197
+ clipboard = JSON.stringify(this.mappings[this.mappingIndex]);
198
+ }
199
+ async _pasteDataBindingMapper() {
200
+ var _a;
201
+ var index = this.mappingIndex;
202
+ var mappings = [...(((_a = this.value) === null || _a === void 0 ? void 0 : _a.mappings) || [])];
203
+ mappings[this.mappingIndex] = JSON.parse(clipboard);
204
+ this._onAfterValueChange('mappings', mappings);
205
+ setTimeout(() => {
206
+ this._setMappingIndex(index);
207
+ }, 100);
208
+ }
209
+ async _onValueChanged() {
210
+ await this.updateComplete;
211
+ if (this._afterRender) {
212
+ this._afterRender();
213
+ }
214
+ else {
215
+ this._setMappingIndex(0);
216
+ }
217
+ this._afterRender = null;
218
+ }
219
+ _onValueChange(e) {
220
+ var element = e.target;
221
+ var key = element.getAttribute('value-key');
222
+ var value = this._getValueFromEventTarget(element);
223
+ if (!key) {
224
+ return;
225
+ }
226
+ this.value = {
227
+ ...this.value,
228
+ [key]: value
229
+ };
230
+ this._onAfterValueChange(key, value);
231
+ }
232
+ get tabContainer() {
233
+ return this.tabs;
234
+ }
235
+ async _onMappingChanged(e) {
236
+ var _a;
237
+ var mapping = e.target.mapping;
238
+ /* data spread target의 변경이 있는 경우, target 컴포넌트들의 태그를 블링크 시킨다 */
239
+ if (mapping && mapping.target) {
240
+ this.scene &&
241
+ this.scene.findAll(mapping.target, this.scene.selected && this.scene.selected[0]).forEach((c, i) => {
242
+ if (i == 0)
243
+ c.trigger('decotagreset');
244
+ c.trigger('decotag', {});
245
+ });
246
+ }
247
+ /* mapping의 모든 속성이 편집되면, 모델에 반영한다. */
248
+ var mappings = [...(((_a = this.value) === null || _a === void 0 ? void 0 : _a.mappings) || [])];
249
+ if (mapping.target && mapping.property && mapping.rule) {
250
+ mappings[this.mappingIndex] = mapping;
251
+ var mappingIdx = this.mappingIndex;
252
+ this._afterRender = () => {
253
+ this._setMappingIndex(mappingIdx);
254
+ this.tabContainer.scrollLeft = this.tabContainer.scrollWidth;
255
+ };
256
+ this.dispatchEvent(new CustomEvent('property-change', {
257
+ bubbles: true,
258
+ composed: true,
259
+ detail: {
260
+ mappings: mappings.filter(m => !!m)
261
+ }
262
+ }));
263
+ await this.requestUpdate();
264
+ }
265
+ else if (!mapping.target && !mapping.property) {
266
+ // accessor를 입력중인 경우 tabIndex Change 방지
267
+ if (e.detail && e.detail.changed && !e.detail.changed.accessor) {
268
+ mappings[this.mappingIndex] = null;
269
+ var nextMappingIdx = Math.max(this.mappingIndex - 1, 0);
270
+ this._afterRender = () => {
271
+ this._setMappingIndex(nextMappingIdx);
272
+ };
273
+ this.dispatchEvent(new CustomEvent('property-change', {
274
+ bubbles: true,
275
+ composed: true,
276
+ detail: {
277
+ mappings: mappings.filter(m => !!m)
278
+ }
279
+ }));
280
+ }
281
+ }
282
+ }
283
+ _onTabScroll() {
284
+ if (this.tabContainer.clientWidth == this.tabContainer.scrollWidth) {
285
+ this.tabNavLeftButton.setAttribute('disabled', '');
286
+ this.tabNavRightButton.setAttribute('disabled', '');
287
+ }
288
+ // left-end
289
+ else if (this.tabContainer.scrollLeft == 0) {
290
+ this.tabNavLeftButton.setAttribute('disabled', '');
291
+ this.tabNavRightButton.removeAttribute('disabled');
292
+ }
293
+ // right-end
294
+ else if (this.tabContainer.scrollLeft + this.tabContainer.clientWidth >= this.tabContainer.scrollWidth) {
295
+ this.tabNavLeftButton.removeAttribute('disabled');
296
+ this.tabNavRightButton.setAttribute('disabled', '');
297
+ }
298
+ else {
299
+ this.tabNavLeftButton.removeAttribute('disabled');
300
+ this.tabNavRightButton.removeAttribute('disabled');
301
+ }
302
+ }
303
+ _onTabScrollNavLeft() {
304
+ this.tabContainer.style.scrollBehavior = 'smooth';
305
+ this.tabContainer.scrollLeft -= this.tabContainer.clientWidth;
306
+ this.tabContainer.style.scrollBehavior = 'auto';
307
+ }
308
+ _onTabScrollNavRight() {
309
+ this.tabContainer.style.scrollBehavior = 'smooth';
310
+ this.tabContainer.scrollLeft += this.tabContainer.clientWidth;
311
+ this.tabContainer.style.scrollBehavior = 'auto';
312
+ }
313
+ }
314
+ PropertyDataBinding.styles = [
315
+ PropertySharedStyle,
316
+ css `
317
+ #tab-header {
318
+ display: flex;
319
+ align-items: center;
320
+ justify-content: space-between;
321
+ }
322
+
323
+ #tab-header > mwc-icon {
324
+ padding: 0;
325
+ margin: 0;
326
+ width: 25px;
327
+ height: 25px;
328
+ font-size: x-large;
329
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
330
+ }
331
+
332
+ fieldset[collapsable] legend {
333
+ box-sizing: border-box;
334
+ width: 100%;
335
+ }
336
+
337
+ fieldset[collapsable] legend mwc-icon {
338
+ float: right;
339
+ font-size: medium;
340
+ margin: 0;
341
+ }
342
+
343
+ fieldset[collapsable][collapsed] > :not(legend) {
344
+ display: none;
345
+ }
346
+
347
+ ox-buttons-radio {
348
+ flex: 1;
349
+ height: 25px;
350
+ border: 1px solid rgba(0, 0, 0, 0.2);
351
+ border-width: 1px 1px 0 1px;
352
+ text-align: center;
353
+
354
+ display: flex;
355
+ padding: 0;
356
+ box-sizing: border-box;
357
+
358
+ width: 0; /* limit width */
359
+ overflow-x: hidden;
360
+ }
361
+
362
+ ox-buttons-radio > div {
363
+ background-color: rgba(0, 0, 0, 0.2);
364
+ border: 1px solid rgba(0, 0, 0, 0.07);
365
+ border-width: 0 0 2px 0;
366
+ padding: 0;
367
+ color: #fff;
368
+ font-size: 13px;
369
+ max-width: 25px;
370
+ min-width: 25px;
371
+ }
372
+
373
+ ox-buttons-radio > div[disabled] {
374
+ background-color: rgba(0, 0, 0, 0.1);
375
+ }
376
+
377
+ ox-buttons-radio > div[active] {
378
+ border-color: rgb(242, 71, 28);
379
+ }
380
+
381
+ ox-buttons-radio > div.iron-selected {
382
+ background-color: rgba(255, 255, 255, 0.5);
383
+ color: #585858;
384
+ }
385
+
386
+ div[binding] {
387
+ display: flex;
388
+ flex-direction: row-reverse;
389
+ background-color: rgba(255, 255, 255, 0.5);
390
+ overflow: hidden;
391
+ border-style: solid;
392
+ border-color: rgba(0, 0, 0, 0.2);
393
+ border-image: initial;
394
+ border-width: 0px 1px;
395
+ padding: 7px 5px 2px 5px;
396
+ }
397
+
398
+ mwc-icon {
399
+ margin-left: 5px;
400
+ color: var(--secondary-color);
401
+ opacity: 0.8;
402
+ cursor: pointer;
403
+ --mdc-icon-size: 18px;
404
+ }
405
+
406
+ mwc-icon:hover {
407
+ color: var(--primary-color);
408
+ opacity: 1;
409
+ }
410
+
411
+ mwc-icon[disabled] {
412
+ color: rgba(0, 0, 0, 0.1);
413
+ }
414
+
415
+ data-binding-mapper {
416
+ --things-select: {
417
+ min-width: 50%;
418
+ margin-bottom: 10px;
419
+ padding: 3px 20px 2px 5px;
420
+ -webkit-border-radius: 4px;
421
+ -moz-border-radius: 4px;
422
+ border-radius: 4px;
423
+ border: 1px solid rgba(0, 0, 0, 0.15);
424
+ font-size: 15px;
425
+ font-weight: 300;
426
+ -webkit-appearance: none;
427
+ }
428
+ }
429
+ `
430
+ ];
431
+ __decorate([
432
+ property({ type: Object })
433
+ ], PropertyDataBinding.prototype, "value", void 0);
434
+ __decorate([
435
+ property({ type: Object })
436
+ ], PropertyDataBinding.prototype, "scene", void 0);
437
+ __decorate([
438
+ state()
439
+ ], PropertyDataBinding.prototype, "mappingIndex", void 0);
440
+ __decorate([
441
+ state()
442
+ ], PropertyDataBinding.prototype, "_afterRender", void 0);
443
+ __decorate([
444
+ state()
445
+ ], PropertyDataBinding.prototype, "_dataExpanded", void 0);
446
+ __decorate([
447
+ query('#tabs')
448
+ ], PropertyDataBinding.prototype, "tabs", void 0);
449
+ __decorate([
450
+ query('#tab-nav-left-button')
451
+ ], PropertyDataBinding.prototype, "tabNavLeftButton", void 0);
452
+ __decorate([
453
+ query('#tab-nav-right-button')
454
+ ], PropertyDataBinding.prototype, "tabNavRightButton", void 0);
455
+ //# sourceMappingURL=data-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-binding.js","sourceRoot":"","sources":["../../../../../src/modeller/property-sidebar/data-binding/data-binding.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '@material/mwc-icon'\nimport '@operato/help/ox-title-with-help.js'\nimport '@operato/input/ox-buttons-radio.js'\nimport '@operato/input/ox-input-data.js'\nimport '@operato/i18n/ox-i18n.js'\n\nimport { css, html, PropertyValues } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\n\nimport { Properties, Scene } from '@hatiolab/things-scene'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\n\nimport { AbstractProperty } from '../abstract-property.js'\nimport { PropertySharedStyle } from '../property-shared-style.js'\nimport { DataBindingMapper } from './data-binding-mapper.js'\n\nvar clipboard = '{}'\n\nconst PROPS = [\n '',\n 'text',\n ['fillStyle', 'fill style'],\n ['strokeStyle', 'stroke style'],\n ['fontColor', 'font color'],\n 'value',\n 'data',\n 'source',\n 'hidden',\n 'started',\n 'play',\n ['ref', 'reference'],\n 'options',\n 'rotate',\n 'scale',\n 'translate',\n 'dimension',\n 'location',\n 'accessor'\n].map(prop => {\n return typeof prop == 'string' ? { name: prop, label: prop } : { name: prop[0], label: prop[1] }\n})\n\nexport class PropertyDataBinding extends ScopedElementsMixin(AbstractProperty) {\n static styles = [\n PropertySharedStyle,\n css`\n #tab-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n #tab-header > mwc-icon {\n padding: 0;\n margin: 0;\n width: 25px;\n height: 25px;\n font-size: x-large;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n }\n\n fieldset[collapsable] legend {\n box-sizing: border-box;\n width: 100%;\n }\n\n fieldset[collapsable] legend mwc-icon {\n float: right;\n font-size: medium;\n margin: 0;\n }\n\n fieldset[collapsable][collapsed] > :not(legend) {\n display: none;\n }\n\n ox-buttons-radio {\n flex: 1;\n height: 25px;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-width: 1px 1px 0 1px;\n text-align: center;\n\n display: flex;\n padding: 0;\n box-sizing: border-box;\n\n width: 0; /* limit width */\n overflow-x: hidden;\n }\n\n ox-buttons-radio > div {\n background-color: rgba(0, 0, 0, 0.2);\n border: 1px solid rgba(0, 0, 0, 0.07);\n border-width: 0 0 2px 0;\n padding: 0;\n color: #fff;\n font-size: 13px;\n max-width: 25px;\n min-width: 25px;\n }\n\n ox-buttons-radio > div[disabled] {\n background-color: rgba(0, 0, 0, 0.1);\n }\n\n ox-buttons-radio > div[active] {\n border-color: rgb(242, 71, 28);\n }\n\n ox-buttons-radio > div.iron-selected {\n background-color: rgba(255, 255, 255, 0.5);\n color: #585858;\n }\n\n div[binding] {\n display: flex;\n flex-direction: row-reverse;\n background-color: rgba(255, 255, 255, 0.5);\n overflow: hidden;\n border-style: solid;\n border-color: rgba(0, 0, 0, 0.2);\n border-image: initial;\n border-width: 0px 1px;\n padding: 7px 5px 2px 5px;\n }\n\n mwc-icon {\n margin-left: 5px;\n color: var(--secondary-color);\n opacity: 0.8;\n cursor: pointer;\n --mdc-icon-size: 18px;\n }\n\n mwc-icon:hover {\n color: var(--primary-color);\n opacity: 1;\n }\n\n mwc-icon[disabled] {\n color: rgba(0, 0, 0, 0.1);\n }\n\n data-binding-mapper {\n --things-select: {\n min-width: 50%;\n margin-bottom: 10px;\n padding: 3px 20px 2px 5px;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.15);\n font-size: 15px;\n font-weight: 300;\n -webkit-appearance: none;\n }\n }\n `\n ]\n\n @property({ type: Object }) value?: Properties\n @property({ type: Object }) scene?: Scene\n\n @state() mappingIndex: number = 0\n @state() _afterRender?: Function | null\n @state() _dataExpanded: boolean = false\n\n @query('#tabs') tabs!: HTMLElement\n @query('#tab-nav-left-button') tabNavLeftButton!: HTMLElement\n @query('#tab-nav-right-button') tabNavRightButton!: HTMLElement\n\n private mapping: Properties = {}\n\n get mappings() {\n return this.value?.mappings || []\n }\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onValueChange.bind(this))\n\n this.tabContainer.addEventListener('scroll', () => {\n this._onTabScroll()\n })\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('value')) {\n this._onValueChanged()\n }\n }\n\n static get scopedElements() {\n return {\n 'data-binding-mapper': DataBindingMapper\n }\n }\n\n render() {\n const value = this.value || {\n mappings: []\n }\n\n return html`\n <fieldset>\n <legend>\n <ox-title-with-help topic=\"board-modeller/data-binding\" msgid=\"label.identifier\"\n >identifier</ox-title-with-help\n >\n </legend>\n <div class=\"property-grid\">\n <label> <ox-i18n msgid=\"label.id\">ID</ox-i18n> </label>\n <input value-key=\"id\" .value=${value.id || ''} />\n\n <label> <ox-i18n msgid=\"label.class\">Class</ox-i18n> </label>\n <input value-key=\"class\" .value=${value.class || ''} />\n\n <label> <ox-i18n msgid=\"label.tag\">Tag</ox-i18n> </label>\n <input value-key=\"tag\" .value=${value.tag || ''} />\n\n <label> <ox-i18n msgid=\"label.template-prefix\">Template Prefix</ox-i18n> </label>\n <input value-key=\"templatePrefix\" .value=${value.templatePrefix || ''} />\n\n <div class=\"checkbox-row\">\n <input id=\"checkbox-ndns\" type=\"checkbox\" value-key=\"ndns\" .checked=${value.ndns} />\n <label for=\"checkbox-ndns\"> <ox-i18n msgid=\"label.ndns\">No Data No Show</ox-i18n> </label>\n </div>\n\n <div class=\"checkbox-row\">\n <input id=\"checkbox-sensitive\" type=\"checkbox\" value-key=\"sensitive\" .checked=${value.sensitive} />\n <label for=\"checkbox-sensitive\">\n <ox-i18n msgid=\"label.intent-sensitive\">Intent Sensitive</ox-i18n>\n </label>\n </div>\n\n <div class=\"checkbox-row\">\n <input id=\"checkbox-persistent\" type=\"checkbox\" value-key=\"persistent\" .checked=${value.persistent} />\n <label for=\"checkbox-persistent\">\n <ox-i18n msgid=\"label.persistent-data\">Persistent Data</ox-i18n>\n </label>\n </div>\n </div>\n </fieldset>\n\n <fieldset collapsable ?collapsed=${!this._dataExpanded}>\n <legend>\n <ox-title-with-help topic=\"board-modeller/initial-data\" msgid=\"label.initial-data\"\n >initial value</ox-title-with-help\n >\n <mwc-icon\n @click=${() => {\n this._dataExpanded = !this._dataExpanded\n }}\n >${this._dataExpanded ? 'expand_less' : 'expand_more'}</mwc-icon\n >\n </legend>\n <ox-input-data value-key=\"data\" .value=${value.data}> </ox-input-data>\n </fieldset>\n\n <fieldset>\n <legend>\n <ox-title-with-help topic=\"board-modeller/data-spread\" msgid=\"label.data-spread\"\n >Data Spread</ox-title-with-help\n >\n </legend>\n\n <div id=\"tab-header\">\n <mwc-icon\n id=\"tab-nav-left-button\"\n @click=${() => {\n this._onTabScrollNavLeft()\n }}\n disabled\n >chevron_left</mwc-icon\n >\n\n <ox-buttons-radio\n id=\"tabs\"\n .value=${String(this.mappingIndex)}\n @change=${(e: Event) => {\n e.stopPropagation()\n this._setMappingIndex((e.target as any).value)\n }}\n >\n ${this.mappings.map((m: string, i: number) => html` <div data-value=${i} data-mapping>${i + 1}</div> `)}\n <div data-value=${this.mappings.length} data-mapping disabled>${this.mappings.length + 1}</div>\n </ox-buttons-radio>\n\n <mwc-icon\n id=\"tab-nav-right-button\"\n @click=${(e: Event) => {\n this._onTabScrollNavRight()\n }}\n disabled\n >chevron_right</mwc-icon\n >\n </div>\n\n <div binding>\n <mwc-icon style=\"font-size:19px\" @click=${() => this._clearDataBindingMapper()} title=\"delete current tab\"\n >delete_forever</mwc-icon\n >\n <mwc-icon @click=${() => this._pasteDataBindingMapper()} title=\"replace all tabs\">content_paste</mwc-icon>\n <mwc-icon style=\"font-size:17px\" @click=${() => this._copyDataBindingMapper()} title=\"copy all tabs\"\n >content_copy</mwc-icon\n >\n </div>\n\n <data-binding-mapper\n @value-change=${(e: CustomEvent) => this._onMappingChanged(e)}\n .scene=${this.scene}\n .mapping=${(value.mappings && value.mappings[this.mappingIndex]) || {}}\n .properties=${PROPS}\n >\n </data-binding-mapper>\n </fieldset>\n `\n }\n\n _setMappingIndex(idx: number) {\n this.mappingIndex = isNaN(Number(idx)) ? 0 : Number(idx)\n\n this._onTabScroll()\n }\n\n _clearDataBindingMapper() {\n var mappings = [...(this.value?.mappings || [])]\n mappings.splice(this.mappingIndex, 1)\n this._onAfterValueChange(\n 'mappings',\n mappings.filter(m => !!m)\n )\n }\n\n _copyDataBindingMapper() {\n clipboard = JSON.stringify(this.mappings[this.mappingIndex])\n }\n\n async _pasteDataBindingMapper() {\n var index = this.mappingIndex\n var mappings = [...(this.value?.mappings || [])]\n mappings[this.mappingIndex] = JSON.parse(clipboard)\n\n this._onAfterValueChange('mappings', mappings)\n\n setTimeout(() => {\n this._setMappingIndex(index)\n }, 100)\n }\n\n async _onValueChanged() {\n await this.updateComplete\n\n if (this._afterRender) {\n this._afterRender()\n } else {\n this._setMappingIndex(0)\n }\n\n this._afterRender = null\n }\n\n _onValueChange(e: Event) {\n var element = e.target as HTMLElement\n var key = element.getAttribute('value-key')\n\n var value = this._getValueFromEventTarget(element)\n\n if (!key) {\n return\n }\n\n this.value = {\n ...this.value,\n [key]: value\n }\n\n this._onAfterValueChange(key, value)\n }\n\n get tabContainer() {\n return this.tabs\n }\n\n async _onMappingChanged(e: CustomEvent) {\n var mapping = (e.target as any).mapping\n\n /* data spread target의 변경이 있는 경우, target 컴포넌트들의 태그를 블링크 시킨다 */\n if (mapping && mapping.target) {\n this.scene &&\n this.scene.findAll(mapping.target, this.scene.selected && this.scene.selected[0]).forEach((c, i) => {\n if (i == 0) c.trigger('decotagreset')\n c.trigger('decotag', {})\n })\n }\n\n /* mapping의 모든 속성이 편집되면, 모델에 반영한다. */\n var mappings = [...(this.value?.mappings || [])]\n\n if (mapping.target && mapping.property && mapping.rule) {\n mappings[this.mappingIndex] = mapping\n\n var mappingIdx = this.mappingIndex\n this._afterRender = () => {\n this._setMappingIndex(mappingIdx)\n this.tabContainer.scrollLeft = this.tabContainer.scrollWidth\n }\n\n this.dispatchEvent(\n new CustomEvent('property-change', {\n bubbles: true,\n composed: true,\n detail: {\n mappings: mappings.filter(m => !!m)\n }\n })\n )\n\n await this.requestUpdate()\n } else if (!mapping.target && !mapping.property) {\n // accessor를 입력중인 경우 tabIndex Change 방지\n if (e.detail && e.detail.changed && !e.detail.changed.accessor) {\n mappings[this.mappingIndex] = null\n var nextMappingIdx = Math.max(this.mappingIndex - 1, 0)\n this._afterRender = () => {\n this._setMappingIndex(nextMappingIdx)\n }\n this.dispatchEvent(\n new CustomEvent('property-change', {\n bubbles: true,\n composed: true,\n detail: {\n mappings: mappings.filter(m => !!m)\n }\n })\n )\n }\n }\n }\n\n _onTabScroll() {\n if (this.tabContainer.clientWidth == this.tabContainer.scrollWidth) {\n this.tabNavLeftButton.setAttribute('disabled', '')\n this.tabNavRightButton.setAttribute('disabled', '')\n }\n // left-end\n else if (this.tabContainer.scrollLeft == 0) {\n this.tabNavLeftButton.setAttribute('disabled', '')\n this.tabNavRightButton.removeAttribute('disabled')\n }\n // right-end\n else if (this.tabContainer.scrollLeft + this.tabContainer.clientWidth >= this.tabContainer.scrollWidth) {\n this.tabNavLeftButton.removeAttribute('disabled')\n this.tabNavRightButton.setAttribute('disabled', '')\n } else {\n this.tabNavLeftButton.removeAttribute('disabled')\n this.tabNavRightButton.removeAttribute('disabled')\n }\n }\n\n _onTabScrollNavLeft() {\n this.tabContainer.style.scrollBehavior = 'smooth'\n this.tabContainer.scrollLeft -= this.tabContainer.clientWidth\n this.tabContainer.style.scrollBehavior = 'auto'\n }\n\n _onTabScrollNavRight() {\n this.tabContainer.style.scrollBehavior = 'smooth'\n this.tabContainer.scrollLeft += this.tabContainer.clientWidth\n this.tabContainer.style.scrollBehavior = 'auto'\n }\n}\n"]}
@@ -23,7 +23,12 @@ export class PropertyEventHover extends LitElement {
23
23
  <label> <ox-i18n msgid="label.action">action</ox-i18n> </label>
24
24
  <select id="tap-select" value-key="action" .value=${action || ''}>
25
25
  <option value=""></option>
26
- <option value="popup">popup target board</option>
26
+ <option value="popup">popup target process</option>
27
+ <option value="infoWindow">open infowindow</option>
28
+ <option value="data-toggle">toggle(true/false) target component data</option>
29
+ <option value="data-tristate">tristate(0/1/2) target component data</option>
30
+ <option value="data-set">set value to target component data</option>
31
+ <option value="value-set">set value to target component value</option>
27
32
  </select>
28
33
 
29
34
  <label> <ox-i18n msgid="label.target">target</ox-i18n> </label>
@@ -1 +1 @@
1
- {"version":3,"file":"property-event-hover.js","sourceRoot":"","sources":["../../../../../src/modeller/property-sidebar/effects/property-event-hover.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '@operato/input/ox-input-data.js'\nimport '@operato/i18n/ox-i18n.js'\n\nimport { html, LitElement } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport { Properties, Scene } from '@hatiolab/things-scene'\n\nimport { EffectsSharedStyle } from './effects-shared-style.js'\nimport { convert } from './value-converter'\n\nexport class PropertyEventHover extends LitElement {\n static styles = [EffectsSharedStyle]\n\n @property({ type: Object }) value?: Properties\n @property({ type: Object }) scene?: Scene\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onValueChange.bind(this))\n }\n\n render() {\n var { action, value = '', target = '', emphasize, restore } = this.value || {}\n\n return html`\n <input id=\"checkbox-emphasize\" type=\"checkbox\" value-key=\"emphasize\" .checked=${emphasize} />\n <label for=\"checkbox-emphasize\" class=\"checkbox-label\">\n <ox-i18n msgid=\"label.emphasize\">emphasize</ox-i18n>\n </label>\n\n <label> <ox-i18n msgid=\"label.action\">action</ox-i18n> </label>\n <select id=\"tap-select\" value-key=\"action\" .value=${action || ''}>\n <option value=\"\"></option>\n <option value=\"popup\">popup target board</option>\n </select>\n\n <label> <ox-i18n msgid=\"label.target\">target</ox-i18n> </label>\n\n ${action == 'popup'\n ? html`\n <things-editor-board-selector\n value-key=\"target\"\n .value=${target}\n custom-editor\n ></things-editor-board-selector>\n `\n : html`\n <input\n value-key=\"target\"\n .value=${target || ''}\n list=\"target-list\"\n .placeholder=\"${this._getPlaceHoder(action)}\"\n />\n\n <datalist id=\"target-list\">\n ${this._getTargetList(action).map(\n ({ value, description }) => html` <option .value=${value}>${description}</option> `\n )}\n </datalist>\n `}\n ${action == 'data-set' || action == 'value-set'\n ? html`\n <label> <ox-i18n msgid=\"label.value\">value</ox-i18n> </label>\n <ox-input-data value-key=\"value\" .value=${value} custom-editor fullwidth></ox-input-data>\n `\n : html``}\n\n <input id=\"checkbox-restore\" type=\"checkbox\" value-key=\"restore\" .checked=${restore} />\n <label for=\"checkbox-restore\" class=\"checkbox-label\">\n <ox-i18n msgid=\"label.restore-on-leave\">restore on leave</ox-i18n>\n </label>\n `\n }\n\n _getPlaceHoder(action: string) {\n switch (action) {\n case 'popup':\n case 'goto':\n return 'SCENE-100'\n case 'link-open':\n case 'link-move':\n return 'http://www.hatiolab.com/'\n default:\n return ''\n }\n }\n\n _getTargetList(action: string): { value: string; description: string }[] {\n switch (action) {\n case 'data-toggle':\n case 'data-tristate':\n case 'data-set':\n case 'value-set':\n let ids =\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 ids.unshift({ value: '(self)', description: 'self component' })\n return ids\n case 'infoWindow':\n return (\n (this.scene &&\n this.scene.ids\n .filter(i => {\n return this.scene!.findById(i.key).get('type') == 'info-window'\n })\n .map(i => {\n const id = i.key\n return { value: `#${id}`, description: this.scene!.findById(id)?.get('type') }\n })) ||\n []\n )\n default:\n return []\n }\n }\n\n _onValueChange(e: Event) {\n var element = e.target as HTMLElement\n var key = element.getAttribute('value-key')\n\n if (!key) {\n return\n }\n\n this.value = {\n ...this.value,\n [key]: convert(element)\n }\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }))\n }\n}\n"]}
1
+ {"version":3,"file":"property-event-hover.js","sourceRoot":"","sources":["../../../../../src/modeller/property-sidebar/effects/property-event-hover.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '@operato/input/ox-input-data.js'\nimport '@operato/i18n/ox-i18n.js'\n\nimport { html, LitElement } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport { Properties, Scene } from '@hatiolab/things-scene'\n\nimport { EffectsSharedStyle } from './effects-shared-style.js'\nimport { convert } from './value-converter'\n\nexport class PropertyEventHover extends LitElement {\n static styles = [EffectsSharedStyle]\n\n @property({ type: Object }) value?: Properties\n @property({ type: Object }) scene?: Scene\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onValueChange.bind(this))\n }\n\n render() {\n var { action, value = '', target = '', emphasize, restore } = this.value || {}\n\n return html`\n <input id=\"checkbox-emphasize\" type=\"checkbox\" value-key=\"emphasize\" .checked=${emphasize} />\n <label for=\"checkbox-emphasize\" class=\"checkbox-label\">\n <ox-i18n msgid=\"label.emphasize\">emphasize</ox-i18n>\n </label>\n\n <label> <ox-i18n msgid=\"label.action\">action</ox-i18n> </label>\n <select id=\"tap-select\" value-key=\"action\" .value=${action || ''}>\n <option value=\"\"></option>\n <option value=\"popup\">popup target process</option>\n <option value=\"infoWindow\">open infowindow</option>\n <option value=\"data-toggle\">toggle(true/false) target component data</option>\n <option value=\"data-tristate\">tristate(0/1/2) target component data</option>\n <option value=\"data-set\">set value to target component data</option>\n <option value=\"value-set\">set value to target component value</option>\n </select>\n\n <label> <ox-i18n msgid=\"label.target\">target</ox-i18n> </label>\n\n ${action == 'popup'\n ? html`\n <things-editor-board-selector\n value-key=\"target\"\n .value=${target}\n custom-editor\n ></things-editor-board-selector>\n `\n : html`\n <input\n value-key=\"target\"\n .value=${target || ''}\n list=\"target-list\"\n .placeholder=\"${this._getPlaceHoder(action)}\"\n />\n\n <datalist id=\"target-list\">\n ${this._getTargetList(action).map(\n ({ value, description }) => html` <option .value=${value}>${description}</option> `\n )}\n </datalist>\n `}\n ${action == 'data-set' || action == 'value-set'\n ? html`\n <label> <ox-i18n msgid=\"label.value\">value</ox-i18n> </label>\n <ox-input-data value-key=\"value\" .value=${value} custom-editor fullwidth></ox-input-data>\n `\n : html``}\n\n <input id=\"checkbox-restore\" type=\"checkbox\" value-key=\"restore\" .checked=${restore} />\n <label for=\"checkbox-restore\" class=\"checkbox-label\">\n <ox-i18n msgid=\"label.restore-on-leave\">restore on leave</ox-i18n>\n </label>\n `\n }\n\n _getPlaceHoder(action: string) {\n switch (action) {\n case 'popup':\n case 'goto':\n return 'SCENE-100'\n case 'link-open':\n case 'link-move':\n return 'http://www.hatiolab.com/'\n default:\n return ''\n }\n }\n\n _getTargetList(action: string): { value: string; description: string }[] {\n switch (action) {\n case 'data-toggle':\n case 'data-tristate':\n case 'data-set':\n case 'value-set':\n let ids =\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 ids.unshift({ value: '(self)', description: 'self component' })\n return ids\n case 'infoWindow':\n return (\n (this.scene &&\n this.scene.ids\n .filter(i => {\n return this.scene!.findById(i.key).get('type') == 'info-window'\n })\n .map(i => {\n const id = i.key\n return { value: `#${id}`, description: this.scene!.findById(id)?.get('type') }\n })) ||\n []\n )\n default:\n return []\n }\n }\n\n _onValueChange(e: Event) {\n var element = e.target as HTMLElement\n var key = element.getAttribute('value-key')\n\n if (!key) {\n return\n }\n\n this.value = {\n ...this.value,\n [key]: convert(element)\n }\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }))\n }\n}\n"]}
@@ -31,7 +31,7 @@ export class PropertyEventTap extends LitElement {
31
31
  value-key="action"
32
32
  .value=${action || ''}
33
33
  @change=${async (e) => {
34
- if (e.target.value === 'start-scenario') {
34
+ if (e.target.value.includes('scenario')) {
35
35
  this.scenarios = (await scenarios()).map(({ name, description }) => {
36
36
  return { value: name, description };
37
37
  });
@@ -39,15 +39,22 @@ export class PropertyEventTap extends LitElement {
39
39
  }}
40
40
  >
41
41
  <option value=""></option>
42
- <option value="goto">go to target board</option>
42
+ <option value="run">run this process</option>
43
+ <option value="goto">go to target process</option>
43
44
  <option value="link-open">open new window for target link</option>
44
45
  <option value="link-move">move to target link</option>
45
46
  <option value="route-page">route to page</option>
46
- <option value="popup">popup target board</option>
47
- <option value="modal-popup">modal popup target board</option>
48
- <option value="close-scene">close current board</option>
47
+ <option value="popup">popup target process</option>
48
+ <option value="modal-popup">modal popup target process</option>
49
+ <option value="close-scene">close current process</option>
49
50
  <option value="infoWindow">open infowindow</option>
50
51
  <option value="toggle-info-window">toggle infowindow</option>
52
+ <option value="data-toggle">toggle(true/false) target component data</option>
53
+ <option value="data-tristate">tristate(0/1/2) target component data</option>
54
+ <option value="data-set">set value to target component data</option>
55
+ <option value="value-set">set value to target component value</option>
56
+ <option value="start-scenario">start the given scenario</option>
57
+ <option value="run-scenario">run the given scenario</option>
51
58
  </select>
52
59
 
53
60
  <label> <ox-i18n msgid="label.target">target</ox-i18n> </label>
@@ -60,21 +67,23 @@ export class PropertyEventTap extends LitElement {
60
67
  custom-editor
61
68
  ></things-editor-board-selector>
62
69
  `
63
- : html `
70
+ : action !== 'run'
71
+ ? html `
64
72
  <input
65
73
  value-key="target"
66
74
  .value=${target}
67
75
  list="target-list"
68
76
  .placeholder=${this._getPlaceHoder(action)}
69
77
  @focusin=${() => {
70
- this.targetList = this._getInputList(action);
71
- }}
78
+ this.targetList = this._getInputList(action);
79
+ }}
72
80
  />
73
81
 
74
82
  <datalist id="target-list">
75
83
  ${this.targetList.map(({ value, description }) => html ` <option .value=${value}>${description}</option> `)}
76
84
  </datalist>
77
- `}
85
+ `
86
+ : html ``}
78
87
  ${action === 'goto' || (action === null || action === void 0 ? void 0 : action.includes('popup'))
79
88
  ? html `
80
89
  <label for="input"> <ox-i18n msgid="label.input-data">input</ox-i18n> </label>