@operato/board 0.2.46 → 0.2.50

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 (156) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/assets/images/components/audio.png +0 -0
  3. package/assets/images/components/both-arrow.png +0 -0
  4. package/assets/images/components/color-image.png +0 -0
  5. package/assets/images/components/container.png +0 -0
  6. package/assets/images/components/dash.png +0 -0
  7. package/assets/images/components/donut.png +0 -0
  8. package/assets/images/components/ellipse.png +0 -0
  9. package/assets/images/components/forklift.png +0 -0
  10. package/assets/images/components/gif-image.png +0 -0
  11. package/assets/images/components/global-reference.png +0 -0
  12. package/assets/images/components/gray-image.png +0 -0
  13. package/assets/images/components/humidity-sensor.png +0 -0
  14. package/assets/images/components/info-window.png +0 -0
  15. package/assets/images/components/line.png +0 -0
  16. package/assets/images/components/local-reference.png +0 -0
  17. package/assets/images/components/person.png +0 -0
  18. package/assets/images/components/polygon.png +0 -0
  19. package/assets/images/components/polyline.png +0 -0
  20. package/assets/images/components/popup.png +0 -0
  21. package/assets/images/components/rect.png +0 -0
  22. package/assets/images/components/single-arrow.png +0 -0
  23. package/assets/images/components/star.png +0 -0
  24. package/assets/images/components/text.png +0 -0
  25. package/assets/images/components/triangle.png +0 -0
  26. package/assets/images/icon-vtoolbar.png +0 -0
  27. package/custom-elements.json +1647 -1130
  28. package/demo/index-modeller.html +101 -0
  29. package/demo/index.html +3 -3
  30. package/dist/src/component/3d.d.ts +2 -0
  31. package/dist/src/component/3d.js +27 -0
  32. package/dist/src/component/3d.js.map +1 -0
  33. package/dist/src/component/chart-and-gauge.d.ts +2 -0
  34. package/dist/src/component/chart-and-gauge.js +26 -0
  35. package/dist/src/component/chart-and-gauge.js.map +1 -0
  36. package/dist/src/component/container.d.ts +2 -0
  37. package/dist/src/component/container.js +60 -0
  38. package/dist/src/component/container.js.map +1 -0
  39. package/dist/src/component/data-source.d.ts +2 -0
  40. package/dist/src/component/data-source.js +28 -0
  41. package/dist/src/component/data-source.js.map +1 -0
  42. package/dist/src/component/etc.d.ts +2 -0
  43. package/dist/src/component/etc.js +82 -0
  44. package/dist/src/component/etc.js.map +1 -0
  45. package/dist/src/component/form.d.ts +2 -0
  46. package/dist/src/component/form.js +40 -0
  47. package/dist/src/component/form.js.map +1 -0
  48. package/dist/src/component/index.d.ts +12 -0
  49. package/dist/src/component/index.js +13 -0
  50. package/dist/src/component/index.js.map +1 -0
  51. package/dist/src/component/iot.d.ts +2 -0
  52. package/dist/src/component/iot.js +50 -0
  53. package/dist/src/component/iot.js.map +1 -0
  54. package/dist/src/component/line.d.ts +2 -0
  55. package/dist/src/component/line.js +130 -0
  56. package/dist/src/component/line.js.map +1 -0
  57. package/dist/src/component/register-default-groups.d.ts +1 -0
  58. package/dist/src/component/register-default-groups.js +28 -0
  59. package/dist/src/component/register-default-groups.js.map +1 -0
  60. package/dist/src/component/shape.d.ts +2 -0
  61. package/dist/src/component/shape.js +152 -0
  62. package/dist/src/component/shape.js.map +1 -0
  63. package/dist/src/component/table.d.ts +2 -0
  64. package/dist/src/component/table.js +26 -0
  65. package/dist/src/component/table.js.map +1 -0
  66. package/dist/src/component/text-and-media.d.ts +2 -0
  67. package/dist/src/component/text-and-media.js +122 -0
  68. package/dist/src/component/text-and-media.js.map +1 -0
  69. package/dist/src/component/warehouse.d.ts +2 -0
  70. package/dist/src/component/warehouse.js +24 -0
  71. package/dist/src/component/warehouse.js.map +1 -0
  72. package/dist/src/modeller/component-toolbar/component-detail.d.ts +4 -0
  73. package/dist/src/modeller/component-toolbar/component-detail.js +56 -0
  74. package/dist/src/modeller/component-toolbar/component-detail.js.map +1 -0
  75. package/dist/src/modeller/component-toolbar/component-menu.d.ts +1 -1
  76. package/dist/src/modeller/component-toolbar/component-menu.js +55 -10
  77. package/dist/src/modeller/component-toolbar/component-menu.js.map +1 -1
  78. package/dist/src/modeller/component-toolbar/component-toolbar.js +44 -89
  79. package/dist/src/modeller/component-toolbar/component-toolbar.js.map +1 -1
  80. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.d.ts +2 -3
  81. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.js +25 -22
  82. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.js.map +1 -1
  83. package/dist/src/modeller/property-sidebar/data-binding/data-binding.d.ts +1 -1
  84. package/dist/src/modeller/property-sidebar/data-binding/data-binding.js +21 -17
  85. package/dist/src/modeller/property-sidebar/data-binding/data-binding.js.map +1 -1
  86. package/dist/src/modeller/property-sidebar/effects/effects-shared-style.js +2 -2
  87. package/dist/src/modeller/property-sidebar/effects/effects-shared-style.js.map +1 -1
  88. package/dist/src/modeller/property-sidebar/effects/effects.d.ts +0 -1
  89. package/dist/src/modeller/property-sidebar/effects/effects.js +6 -10
  90. package/dist/src/modeller/property-sidebar/effects/effects.js.map +1 -1
  91. package/dist/src/modeller/property-sidebar/effects/property-animation.d.ts +2 -3
  92. package/dist/src/modeller/property-sidebar/effects/property-animation.js +21 -25
  93. package/dist/src/modeller/property-sidebar/effects/property-animation.js.map +1 -1
  94. package/dist/src/modeller/property-sidebar/effects/property-animations.d.ts +0 -1
  95. package/dist/src/modeller/property-sidebar/effects/property-animations.js +3 -4
  96. package/dist/src/modeller/property-sidebar/effects/property-animations.js.map +1 -1
  97. package/dist/src/modeller/property-sidebar/effects/property-event-hover.d.ts +1 -1
  98. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js +3 -7
  99. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js.map +1 -1
  100. package/dist/src/modeller/property-sidebar/effects/property-event-tap.d.ts +1 -1
  101. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js +3 -7
  102. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js.map +1 -1
  103. package/dist/src/modeller/property-sidebar/effects/property-event.d.ts +0 -1
  104. package/dist/src/modeller/property-sidebar/effects/property-event.js +4 -8
  105. package/dist/src/modeller/property-sidebar/effects/property-event.js.map +1 -1
  106. package/dist/src/modeller/property-sidebar/effects/property-shadow.d.ts +1 -2
  107. package/dist/src/modeller/property-sidebar/effects/property-shadow.js +6 -10
  108. package/dist/src/modeller/property-sidebar/effects/property-shadow.js.map +1 -1
  109. package/dist/src/modeller/property-sidebar/inspector/inspector.d.ts +1 -1
  110. package/dist/src/modeller/property-sidebar/property-shared-style.js +2 -2
  111. package/dist/src/modeller/property-sidebar/property-shared-style.js.map +1 -1
  112. package/dist/src/modeller/property-sidebar/shapes/shapes.d.ts +2 -3
  113. package/dist/src/modeller/property-sidebar/shapes/shapes.js +27 -30
  114. package/dist/src/modeller/property-sidebar/shapes/shapes.js.map +1 -1
  115. package/dist/src/modeller/property-sidebar/styles/styles.d.ts +0 -1
  116. package/dist/src/modeller/property-sidebar/styles/styles.js +0 -1
  117. package/dist/src/modeller/property-sidebar/styles/styles.js.map +1 -1
  118. package/dist/src/ox-board-modeller.d.ts +5 -0
  119. package/dist/src/ox-board-modeller.js +33 -0
  120. package/dist/src/ox-board-modeller.js.map +1 -1
  121. package/dist/src/types.d.ts +13 -0
  122. package/dist/src/types.js.map +1 -1
  123. package/dist/tsconfig.tsbuildinfo +1 -1
  124. package/package.json +6 -5
  125. package/src/component/3d.ts +29 -0
  126. package/src/component/chart-and-gauge.ts +28 -0
  127. package/src/component/container.ts +62 -0
  128. package/src/component/data-source.ts +30 -0
  129. package/src/component/etc.ts +87 -0
  130. package/src/component/form.ts +42 -0
  131. package/src/component/index.ts +12 -0
  132. package/src/component/iot.ts +52 -0
  133. package/src/component/line.ts +132 -0
  134. package/src/component/register-default-groups.ts +28 -0
  135. package/src/component/shape.ts +154 -0
  136. package/src/component/table.ts +28 -0
  137. package/src/component/text-and-media.ts +124 -0
  138. package/src/component/warehouse.ts +26 -0
  139. package/src/modeller/component-toolbar/component-detail.ts +53 -0
  140. package/src/modeller/component-toolbar/component-menu.ts +56 -11
  141. package/src/modeller/component-toolbar/component-toolbar.ts +54 -94
  142. package/src/modeller/property-sidebar/data-binding/data-binding-mapper.ts +26 -23
  143. package/src/modeller/property-sidebar/data-binding/data-binding.ts +19 -17
  144. package/src/modeller/property-sidebar/effects/effects-shared-style.ts +2 -2
  145. package/src/modeller/property-sidebar/effects/effects.ts +10 -8
  146. package/src/modeller/property-sidebar/effects/property-animation.ts +25 -23
  147. package/src/modeller/property-sidebar/effects/property-animations.ts +7 -5
  148. package/src/modeller/property-sidebar/effects/property-event-hover.ts +4 -4
  149. package/src/modeller/property-sidebar/effects/property-event-tap.ts +4 -4
  150. package/src/modeller/property-sidebar/effects/property-event.ts +8 -6
  151. package/src/modeller/property-sidebar/effects/property-shadow.ts +9 -7
  152. package/src/modeller/property-sidebar/property-shared-style.ts +2 -2
  153. package/src/modeller/property-sidebar/shapes/shapes.ts +29 -31
  154. package/src/modeller/property-sidebar/styles/styles.ts +2 -2
  155. package/src/ox-board-modeller.ts +46 -6
  156. package/src/types.ts +28 -0
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
- export {};
4
+ import './component-detail';
@@ -2,8 +2,9 @@
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
4
  import { __decorate } from "tslib";
5
+ import './component-detail';
5
6
  import { LitElement, css, html } from 'lit';
6
- import { customElement, property } from 'lit/decorators.js';
7
+ import { customElement, property, query, state } from 'lit/decorators.js';
7
8
  import { ScrollbarStyles } from '@operato/styles';
8
9
  import noImage from '../../../../assets/images/components/no-image.png';
9
10
  let ComponentMenu = class ComponentMenu extends LitElement {
@@ -19,13 +20,27 @@ let ComponentMenu = class ComponentMenu extends LitElement {
19
20
  ? html `
20
21
  <h2 onclick=${(e) => e.stopPropagation()}>${this.group} list</h2>
21
22
 
22
- <div templates>
23
+ <div
24
+ templates
25
+ @mouseover=${(e) => this.onHoverComponent(e)}
26
+ @mouseout=${(e) => (this.template = null)}
27
+ >
23
28
  ${(this.templates || []).map(template => html `
24
29
  <div @click=${this.onClickTemplate} data-type=${template.type} template>
25
30
  <img src=${this.templateIcon(template)} />${template.type}
26
31
  </div>
27
32
  `)}
28
33
  </div>
34
+
35
+ <component-detail
36
+ tabindex="-1"
37
+ @focusout=${() => {
38
+ this.template = null;
39
+ }}
40
+ .template=${this.template}
41
+ hidden
42
+ >
43
+ </component-detail>
29
44
  `
30
45
  : html ``;
31
46
  }
@@ -33,14 +48,27 @@ let ComponentMenu = class ComponentMenu extends LitElement {
33
48
  var _a;
34
49
  if (changes.has('group')) {
35
50
  if (!this.group) {
36
- this.style.display = 'none';
37
51
  this.templates = [];
52
+ this.setAttribute('hidden', '');
38
53
  }
39
54
  else {
40
- this.style.display = 'flex';
41
55
  this.templates = ((_a = this.groups.find((g) => g.name === this.group)) === null || _a === void 0 ? void 0 : _a.templates) || [];
56
+ this.removeAttribute('active');
42
57
  }
43
58
  }
59
+ if (changes.has('template')) {
60
+ this.template && this.template.about
61
+ ? this.detail.removeAttribute('hidden')
62
+ : this.detail.setAttribute('hidden', '');
63
+ }
64
+ }
65
+ findTemplate(type) {
66
+ this.template = type && this.templates.find(template => template.type == type);
67
+ }
68
+ onHoverComponent(e) {
69
+ var _a;
70
+ const button = e.target;
71
+ this.findTemplate((_a = button.closest('[data-type]')) === null || _a === void 0 ? void 0 : _a.getAttribute('data-type'));
44
72
  }
45
73
  onClickTemplate(e) {
46
74
  var _a;
@@ -49,10 +77,9 @@ let ComponentMenu = class ComponentMenu extends LitElement {
49
77
  if (!type) {
50
78
  return;
51
79
  }
52
- var group = this.groups.find(g => g.name == this.group);
53
- if (this.scene && group) {
54
- var template = group.templates.find(template => template.type == type);
55
- template && this.scene.add(JSON.parse(JSON.stringify(template.model)), { cx: 200, cy: 200 });
80
+ if (this.scene) {
81
+ this.template = this.templates.find(template => template.type == type);
82
+ this.template && this.scene.add(JSON.parse(JSON.stringify(this.template.model)), { cx: 200, cy: 200 });
56
83
  }
57
84
  this.group = null;
58
85
  }
@@ -75,7 +102,7 @@ ComponentMenu.styles = [
75
102
  width: 180px;
76
103
  height: 100%;
77
104
 
78
- overflow: hidden;
105
+ overflow: visible;
79
106
 
80
107
  border: 2px solid var(--component-menu-border-color);
81
108
  box-sizing: border-box;
@@ -128,6 +155,18 @@ ComponentMenu.styles = [
128
155
  width: var(--component-menu-item-icon-size);
129
156
  height: var(--component-menu-item-icon-size);
130
157
  }
158
+
159
+ component-detail {
160
+ position: absolute;
161
+ top: 0;
162
+ left: 180px;
163
+ height: 100%;
164
+ outline: none;
165
+ }
166
+
167
+ component-detail[hidden] {
168
+ display: none;
169
+ }
131
170
  `
132
171
  ];
133
172
  __decorate([
@@ -140,8 +179,14 @@ __decorate([
140
179
  property({ type: String })
141
180
  ], ComponentMenu.prototype, "group", void 0);
142
181
  __decorate([
143
- property({ type: Array })
182
+ state()
144
183
  ], ComponentMenu.prototype, "templates", void 0);
184
+ __decorate([
185
+ state()
186
+ ], ComponentMenu.prototype, "template", void 0);
187
+ __decorate([
188
+ query('component-detail')
189
+ ], ComponentMenu.prototype, "detail", void 0);
145
190
  ComponentMenu = __decorate([
146
191
  customElement('component-menu')
147
192
  ], ComponentMenu);
@@ -1 +1 @@
1
- {"version":3,"file":"component-menu.js","sourceRoot":"","sources":["../../../../src/modeller/component-toolbar/component-menu.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { LitElement, PropertyValues, css, html } from 'lit'\nimport { Pallet, PalletItem } from '../../types'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { Scene } from '@hatiolab/things-scene'\nimport { ScrollbarStyles } from '@operato/styles'\nimport noImage from '../../../../assets/images/components/no-image.png'\n\n@customElement('component-menu')\nclass ComponentMenu extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n align-content: stretch;\n\n background-color: var(--component-menu-background-color);\n margin: 0px;\n padding: 0px;\n\n width: 180px;\n height: 100%;\n\n overflow: hidden;\n\n border: 2px solid var(--component-menu-border-color);\n box-sizing: border-box;\n\n position: absolute;\n top: 0px;\n\n z-index: 1;\n }\n\n h2 {\n background-color: var(--component-menu-border-color);\n padding: 1px 5px;\n margin: 0;\n font: var(--component-menu-title);\n color: #fff;\n text-transform: capitalize;\n }\n\n [templates] {\n flex: 1;\n\n display: block;\n margin: 0;\n padding: 0;\n overflow-y: auto;\n\n background-color: var(--component-menu-background-color);\n }\n\n [template] {\n display: flex;\n align-items: center;\n min-height: var(--component-menu-item-icon-size);\n padding: 0 5px 0 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 11px;\n color: var(--component-menu-item-color);\n }\n\n [template]:hover,\n [template]:focus {\n color: var(--component-menu-item-hover-color);\n font-weight: bold;\n cursor: pointer;\n }\n\n [template] img {\n margin: 5px;\n width: var(--component-menu-item-icon-size);\n height: var(--component-menu-item-icon-size);\n }\n `\n ]\n\n @property({ type: Object }) groups: Pallet[] = []\n @property({ type: Object }) scene: Scene | null = null\n @property({ type: String }) group: string | null = ''\n @property({ type: Array }) templates: PalletItem[] = []\n\n render() {\n return this.group\n ? html`\n <h2 onclick=${(e: MouseEvent) => e.stopPropagation()}>${this.group} list</h2>\n\n <div templates>\n ${(this.templates || []).map(\n template => html`\n <div @click=${this.onClickTemplate} data-type=${template.type} template>\n <img src=${this.templateIcon(template)} />${template.type}\n </div>\n `\n )}\n </div>\n `\n : html``\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('group')) {\n if (!this.group) {\n this.style.display = 'none'\n this.templates = []\n } else {\n this.style.display = 'flex'\n this.templates = this.groups.find((g: Pallet) => g.name === this.group)?.templates || []\n }\n }\n }\n\n onClickTemplate(e: MouseEvent) {\n var item = e.target as HTMLElement\n var type = item.closest('[data-type]')?.getAttribute('data-type')\n\n if (!type) {\n return\n }\n\n var group = this.groups.find(g => g.name == this.group)\n\n if (this.scene && group) {\n var template = group.templates.find(template => template.type == type)\n template && this.scene.add(JSON.parse(JSON.stringify(template.model)), { cx: 200, cy: 200 })\n }\n\n this.group = null\n }\n\n templateIcon(template: PalletItem) {\n return template.icon || noImage\n }\n}\n"]}
1
+ {"version":3,"file":"component-menu.js","sourceRoot":"","sources":["../../../../src/modeller/component-toolbar/component-menu.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './component-detail'\n\nimport { LitElement, PropertyValues, css, html } from 'lit'\nimport { Pallet, PalletItem } from '../../types'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { Scene } from '@hatiolab/things-scene'\nimport { ScrollbarStyles } from '@operato/styles'\nimport noImage from '../../../../assets/images/components/no-image.png'\n\n@customElement('component-menu')\nclass ComponentMenu extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n align-content: stretch;\n\n background-color: var(--component-menu-background-color);\n margin: 0px;\n padding: 0px;\n\n width: 180px;\n height: 100%;\n\n overflow: visible;\n\n border: 2px solid var(--component-menu-border-color);\n box-sizing: border-box;\n\n position: absolute;\n top: 0px;\n\n z-index: 1;\n }\n\n h2 {\n background-color: var(--component-menu-border-color);\n padding: 1px 5px;\n margin: 0;\n font: var(--component-menu-title);\n color: #fff;\n text-transform: capitalize;\n }\n\n [templates] {\n flex: 1;\n\n display: block;\n margin: 0;\n padding: 0;\n overflow-y: auto;\n\n background-color: var(--component-menu-background-color);\n }\n\n [template] {\n display: flex;\n align-items: center;\n min-height: var(--component-menu-item-icon-size);\n padding: 0 5px 0 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 11px;\n color: var(--component-menu-item-color);\n }\n\n [template]:hover,\n [template]:focus {\n color: var(--component-menu-item-hover-color);\n font-weight: bold;\n cursor: pointer;\n }\n\n [template] img {\n margin: 5px;\n width: var(--component-menu-item-icon-size);\n height: var(--component-menu-item-icon-size);\n }\n\n component-detail {\n position: absolute;\n top: 0;\n left: 180px;\n height: 100%;\n outline: none;\n }\n\n component-detail[hidden] {\n display: none;\n }\n `\n ]\n\n @property({ type: Object }) groups: Pallet[] = []\n @property({ type: Object }) scene: Scene | null = null\n @property({ type: String }) group: string | null = ''\n\n @state() templates: PalletItem[] = []\n @state() template: PalletItem | any\n\n @query('component-detail') detail!: HTMLElement\n\n render() {\n return this.group\n ? html`\n <h2 onclick=${(e: MouseEvent) => e.stopPropagation()}>${this.group} list</h2>\n\n <div\n templates\n @mouseover=${(e: MouseEvent) => this.onHoverComponent(e)}\n @mouseout=${(e: MouseEvent) => (this.template = null)}\n >\n ${(this.templates || []).map(\n template => html`\n <div @click=${this.onClickTemplate} data-type=${template.type} template>\n <img src=${this.templateIcon(template)} />${template.type}\n </div>\n `\n )}\n </div>\n\n <component-detail\n tabindex=\"-1\"\n @focusout=${() => {\n this.template = null\n }}\n .template=${this.template}\n hidden\n >\n </component-detail>\n `\n : html``\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('group')) {\n if (!this.group) {\n this.templates = []\n this.setAttribute('hidden', '')\n } else {\n this.templates = this.groups.find((g: Pallet) => g.name === this.group)?.templates || []\n this.removeAttribute('active')\n }\n }\n\n if (changes.has('template')) {\n this.template && this.template.about\n ? this.detail.removeAttribute('hidden')\n : this.detail.setAttribute('hidden', '')\n }\n }\n\n findTemplate(type: string | null | undefined) {\n this.template = type && this.templates.find(template => template.type == type)\n }\n\n onHoverComponent(e: MouseEvent) {\n const button = e.target as HTMLElement\n this.findTemplate(button!.closest('[data-type]')?.getAttribute('data-type'))\n }\n\n onClickTemplate(e: MouseEvent) {\n var item = e.target as HTMLElement\n var type = item.closest('[data-type]')?.getAttribute('data-type')\n\n if (!type) {\n return\n }\n\n if (this.scene) {\n this.template = this.templates.find(template => template.type == type)\n this.template && this.scene.add(JSON.parse(JSON.stringify(this.template.model)), { cx: 200, cy: 200 })\n }\n\n this.group = null\n }\n\n templateIcon(template: PalletItem) {\n return template.icon || noImage\n }\n}\n"]}
@@ -5,54 +5,60 @@ import { __decorate } from "tslib";
5
5
  import './component-menu';
6
6
  import { LitElement, css, html } from 'lit';
7
7
  import { SCENE_MODE } from '@hatiolab/things-scene';
8
- import { customElement, property, query } from 'lit/decorators.js';
8
+ import { customElement, property, query, queryAll } from 'lit/decorators.js';
9
9
  let ComponentToolbar = class ComponentToolbar extends LitElement {
10
10
  constructor() {
11
11
  super(...arguments);
12
12
  this.componentGroupList = [];
13
13
  this.mode = SCENE_MODE.VIEW;
14
+ this.icons = {};
15
+ }
16
+ updated(changes) {
17
+ if (changes.has('componentGroupList')) {
18
+ const color = getComputedStyle(this, null).getPropertyValue('--primary-color');
19
+ this.icons = (this.componentGroupList || [])
20
+ .filter(group => { var _a; return ((_a = group.templates) === null || _a === void 0 ? void 0 : _a.length) > 0; })
21
+ .reduce((sum, group) => {
22
+ sum[group.name] =
23
+ 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(group.icon.replace(/{{strokeColor}}/g, color));
24
+ return sum;
25
+ }, {});
26
+ }
27
+ if (changes.has('group')) {
28
+ this.groups.forEach(group => {
29
+ group.getAttribute('data-group') === this.group
30
+ ? group.setAttribute('active', '')
31
+ : group.removeAttribute('active');
32
+ });
33
+ this.group ? this.menu.removeAttribute('hidden') : this.menu.setAttribute('hidden', '');
34
+ }
14
35
  }
15
36
  render() {
37
+ const componentList = this.componentGroupList || [];
16
38
  return html `
17
- <span id="shift" class="pressed" @click=${() => this._onClickShift()}> </span>
18
-
19
- ${this.componentGroupList
39
+ ${componentList
20
40
  .filter(group => { var _a; return ((_a = group.templates) === null || _a === void 0 ? void 0 : _a.length) > 0; })
21
- .map(item => html ` <span data-group=${item.name} @click=${(e) => this._onClickGroup(e)}> </span> `)}
41
+ .map(group => html `
42
+ <img
43
+ data-group=${group.name}
44
+ @click=${(e) => this._onClickGroup(e)}
45
+ .src=${this.icons[group.name]}
46
+ />
47
+ `)}
22
48
 
23
49
  <component-menu
24
50
  tabindex="-1"
25
51
  @focusout=${() => {
26
52
  this.group = null;
27
53
  }}
28
- id="menu"
29
54
  .scene=${this.scene}
30
55
  .group=${this.group}
31
- .groups=${this.componentGroupList}
32
- class="shadow"
56
+ .groups=${componentList}
57
+ hidden
33
58
  >
34
59
  </component-menu>
35
60
  `;
36
61
  }
37
- _setMode(mode) {
38
- this.mode = mode;
39
- this.dispatchEvent(new CustomEvent('mode-changed', {
40
- bubbles: true,
41
- composed: true,
42
- detail: { value: mode }
43
- }));
44
- }
45
- _onClickShift() {
46
- var shift = this.renderRoot.querySelector('#shift');
47
- if (shift === null || shift === void 0 ? void 0 : shift.hasAttribute('active')) {
48
- shift.removeAttribute('active');
49
- this._setMode(SCENE_MODE.EDIT);
50
- }
51
- else {
52
- shift.setAttribute('active', '');
53
- this._setMode(SCENE_MODE.SHIFT);
54
- }
55
- }
56
62
  async _onClickGroup(e) {
57
63
  var _a, _b;
58
64
  var button = e.target;
@@ -74,7 +80,7 @@ ComponentToolbar.styles = [
74
80
  background-color: var(--component-toolbar-background-color);
75
81
  }
76
82
 
77
- span {
83
+ img {
78
84
  display: flex;
79
85
  flex-direction: row;
80
86
 
@@ -84,75 +90,21 @@ ComponentToolbar.styles = [
84
90
 
85
91
  border-bottom: var(--component-toolbar-border);
86
92
  margin: 0;
87
- background: url(/assets/images/icon-vtoolbar.png) -1px 0 no-repeat;
88
- }
89
-
90
- span[data-group='line'] {
91
- background-position: 50% -186px;
92
- }
93
-
94
- span[data-group='shape'] {
95
- background-position: 0px -284px;
96
- }
97
-
98
- span[data-group='textAndMedia'] {
99
- background-position: 50% -385px;
100
- }
101
-
102
- span[data-group='chartAndGauge'] {
103
- background-position: 50% -488px;
104
- }
105
-
106
- span[data-group='table'] {
107
- background-position: 50% -585px;
108
- }
109
-
110
- span[data-group='container'] {
111
- background-position: 50% -685px;
112
- }
113
-
114
- span[data-group='dataSource'] {
115
- background-position: 50% -888px;
116
- }
117
-
118
- span[data-group='IoT'] {
119
- background-position: -3px -788px;
120
- }
121
-
122
- span[data-group='3D'] {
123
- background-position: 50% -992px;
124
- }
125
-
126
- span[data-group='warehouse'] {
127
- background-position: -2px -1089px;
128
- }
129
-
130
- span[data-group='form'] {
131
- background-position: -2px -1287px;
132
- }
133
-
134
- span[data-group='etc'] {
135
- background-position: -1px -1189px;
136
- }
137
-
138
- .pressed {
139
- background-position: 0 15px;
140
- }
141
-
142
- .pressed[pressed],
143
- .pressed[active] {
144
- background-position: -3px -88px;
145
- background-color: #beb9b3;
93
+ padding: 6px;
94
+ box-sizing: border-box;
146
95
  }
147
96
 
148
97
  component-menu {
149
- display: none;
150
98
  position: absolute;
151
99
  top: 0;
152
100
  left: var(--component-toolbar-icon-size);
153
101
  height: 100%;
154
102
  outline: none;
155
103
  }
104
+
105
+ component-menu[hidden] {
106
+ display: none;
107
+ }
156
108
  `
157
109
  ];
158
110
  __decorate([
@@ -168,8 +120,11 @@ __decorate([
168
120
  property({ type: Number })
169
121
  ], ComponentToolbar.prototype, "mode", void 0);
170
122
  __decorate([
171
- query('#menu')
123
+ query('component-menu')
172
124
  ], ComponentToolbar.prototype, "menu", void 0);
125
+ __decorate([
126
+ queryAll('[data-group]')
127
+ ], ComponentToolbar.prototype, "groups", void 0);
173
128
  ComponentToolbar = __decorate([
174
129
  customElement('component-toolbar')
175
130
  ], ComponentToolbar);
@@ -1 +1 @@
1
- {"version":3,"file":"component-toolbar.js","sourceRoot":"","sources":["../../../../src/modeller/component-toolbar/component-toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './component-menu'\n\nimport { LitElement, css, html } from 'lit'\nimport { SCENE_MODE, Scene } from '@hatiolab/things-scene'\nimport { customElement, property, query } from 'lit/decorators.js'\n\n@customElement('component-toolbar')\nclass ComponentToolbar extends LitElement {\n static styles = [\n css`\n :host {\n left: 0;\n display: block;\n position: relative;\n\n width: var(--component-toolbar-icon-size);\n background-color: var(--component-toolbar-background-color);\n }\n\n span {\n display: flex;\n flex-direction: row;\n\n width: var(--component-toolbar-icon-size);\n height: var(--component-toolbar-icon-size);\n min-width: 50%;\n\n border-bottom: var(--component-toolbar-border);\n margin: 0;\n background: url(/assets/images/icon-vtoolbar.png) -1px 0 no-repeat;\n }\n\n span[data-group='line'] {\n background-position: 50% -186px;\n }\n\n span[data-group='shape'] {\n background-position: 0px -284px;\n }\n\n span[data-group='textAndMedia'] {\n background-position: 50% -385px;\n }\n\n span[data-group='chartAndGauge'] {\n background-position: 50% -488px;\n }\n\n span[data-group='table'] {\n background-position: 50% -585px;\n }\n\n span[data-group='container'] {\n background-position: 50% -685px;\n }\n\n span[data-group='dataSource'] {\n background-position: 50% -888px;\n }\n\n span[data-group='IoT'] {\n background-position: -3px -788px;\n }\n\n span[data-group='3D'] {\n background-position: 50% -992px;\n }\n\n span[data-group='warehouse'] {\n background-position: -2px -1089px;\n }\n\n span[data-group='form'] {\n background-position: -2px -1287px;\n }\n\n span[data-group='etc'] {\n background-position: -1px -1189px;\n }\n\n .pressed {\n background-position: 0 15px;\n }\n\n .pressed[pressed],\n .pressed[active] {\n background-position: -3px -88px;\n background-color: #beb9b3;\n }\n\n component-menu {\n display: none;\n position: absolute;\n top: 0;\n left: var(--component-toolbar-icon-size);\n height: 100%;\n outline: none;\n }\n `\n ]\n\n @property({ type: Array }) componentGroupList: any[] = []\n @property({ type: String }) group?: string | null\n @property({ type: Object }) scene!: Scene\n @property({ type: Number }) mode: SCENE_MODE = SCENE_MODE.VIEW\n\n @query('#menu') private menu!: HTMLElement\n\n render() {\n return html`\n <span id=\"shift\" class=\"pressed\" @click=${() => this._onClickShift()}> </span>\n\n ${this.componentGroupList\n .filter(group => group.templates?.length > 0)\n .map(item => html` <span data-group=${item.name} @click=${(e: MouseEvent) => this._onClickGroup(e)}> </span> `)}\n\n <component-menu\n tabindex=\"-1\"\n @focusout=${() => {\n this.group = null\n }}\n id=\"menu\"\n .scene=${this.scene}\n .group=${this.group}\n .groups=${this.componentGroupList}\n class=\"shadow\"\n >\n </component-menu>\n `\n }\n\n _setMode(mode: SCENE_MODE) {\n this.mode = mode\n this.dispatchEvent(\n new CustomEvent('mode-changed', {\n bubbles: true,\n composed: true,\n detail: { value: mode }\n })\n )\n }\n\n _onClickShift() {\n var shift = this.renderRoot.querySelector('#shift')\n if (shift?.hasAttribute('active')) {\n shift.removeAttribute('active')\n this._setMode(SCENE_MODE.EDIT)\n } else {\n shift!.setAttribute('active', '')\n this._setMode(SCENE_MODE.SHIFT)\n }\n }\n\n async _onClickGroup(e: MouseEvent) {\n var button = e.target as HTMLElement\n\n this.group = button!.closest('[data-group]')?.getAttribute('data-group')\n\n if (!this.group) return\n\n await this.updateComplete\n\n this.menu?.focus()\n }\n}\n"]}
1
+ {"version":3,"file":"component-toolbar.js","sourceRoot":"","sources":["../../../../src/modeller/component-toolbar/component-toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './component-menu'\n\nimport { LitElement, PropertyValues, css, html } from 'lit'\nimport { SCENE_MODE, Scene } from '@hatiolab/things-scene'\nimport { customElement, property, query, queryAll } from 'lit/decorators.js'\n\nimport { Group } from '../../types'\n\n@customElement('component-toolbar')\nclass ComponentToolbar extends LitElement {\n static styles = [\n css`\n :host {\n left: 0;\n display: block;\n position: relative;\n\n width: var(--component-toolbar-icon-size);\n background-color: var(--component-toolbar-background-color);\n }\n\n img {\n display: flex;\n flex-direction: row;\n\n width: var(--component-toolbar-icon-size);\n height: var(--component-toolbar-icon-size);\n min-width: 50%;\n\n border-bottom: var(--component-toolbar-border);\n margin: 0;\n padding: 6px;\n box-sizing: border-box;\n }\n\n component-menu {\n position: absolute;\n top: 0;\n left: var(--component-toolbar-icon-size);\n height: 100%;\n outline: none;\n }\n\n component-menu[hidden] {\n display: none;\n }\n `\n ]\n\n @property({ type: Array }) componentGroupList: Group[] = []\n @property({ type: String }) group?: string | null\n @property({ type: Object }) scene!: Scene\n @property({ type: Number }) mode: SCENE_MODE = SCENE_MODE.VIEW\n\n @query('component-menu') private menu!: HTMLElement\n @queryAll('[data-group]') private groups!: NodeListOf<HTMLElement>\n\n private icons: { [name: string]: string } = {}\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('componentGroupList')) {\n const color = getComputedStyle(this, null).getPropertyValue('--primary-color')\n\n this.icons = (this.componentGroupList || [])\n .filter(group => group.templates?.length > 0)\n .reduce((sum, group: Group) => {\n sum[group.name] =\n 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(group.icon.replace(/{{strokeColor}}/g, color))\n return sum\n }, {} as { [name: string]: string })\n }\n\n if (changes.has('group')) {\n this.groups.forEach(group => {\n group.getAttribute('data-group') === this.group\n ? group.setAttribute('active', '')\n : group.removeAttribute('active')\n })\n\n this.group ? this.menu.removeAttribute('hidden') : this.menu.setAttribute('hidden', '')\n }\n }\n\n render() {\n const componentList = this.componentGroupList || []\n\n return html`\n ${componentList\n .filter(group => group.templates?.length > 0)\n .map(\n group => html`\n <img\n data-group=${group.name}\n @click=${(e: MouseEvent) => this._onClickGroup(e)}\n .src=${this.icons[group.name]}\n />\n `\n )}\n\n <component-menu\n tabindex=\"-1\"\n @focusout=${() => {\n this.group = null\n }}\n .scene=${this.scene}\n .group=${this.group}\n .groups=${componentList}\n hidden\n >\n </component-menu>\n `\n }\n\n async _onClickGroup(e: MouseEvent) {\n var button = e.target as HTMLElement\n\n this.group = button!.closest('[data-group]')?.getAttribute('data-group')\n\n if (!this.group) return\n\n await this.updateComplete\n\n this.menu?.focus()\n }\n}\n"]}
@@ -1,11 +1,10 @@
1
1
  /**
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
- import '@things-factory/i18n-base';
5
- import '@things-factory/modeller-ui/client/editors/things-editor-code';
6
4
  import '@things-factory/modeller-ui/client/editors/things-editor-value-map';
7
5
  import '@things-factory/modeller-ui/client/editors/things-editor-value-range';
8
- import '@things-factory/modeller-ui/client/editors/things-editor-buttons-radio';
6
+ import '@operato/input/dist/src/ox-buttons-radio';
7
+ import '@operato/input/dist/src/ox-input-code';
9
8
  import { LitElement, PropertyValues } from 'lit';
10
9
  import { Properties, Scene } from '@hatiolab/things-scene';
11
10
  export declare type Rule = {
@@ -2,11 +2,11 @@
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
4
  import { __decorate } from "tslib";
5
- import '@things-factory/i18n-base';
6
- import '@things-factory/modeller-ui/client/editors/things-editor-code';
5
+ // import '@things-factory/modeller-ui/client/editors/things-editor-code'
7
6
  import '@things-factory/modeller-ui/client/editors/things-editor-value-map';
8
7
  import '@things-factory/modeller-ui/client/editors/things-editor-value-range';
9
- import '@things-factory/modeller-ui/client/editors/things-editor-buttons-radio';
8
+ import '@operato/input/dist/src/ox-buttons-radio';
9
+ import '@operato/input/dist/src/ox-input-code';
10
10
  import { LitElement, css, html } from 'lit';
11
11
  import { customElement, property, query, state } from 'lit/decorators';
12
12
  /**
@@ -51,6 +51,9 @@ let DataBindingMapper = class DataBindingMapper extends LitElement {
51
51
  changes.has('mapping') && this._onChangedMapping();
52
52
  }
53
53
  render() {
54
+ const mapping = this.mapping || {
55
+ rule: 'value'
56
+ };
54
57
  return html `
55
58
  <label for="accessor-input"> <i18n-msg msgid="label.accessor">accessor</i18n-msg> </label>
56
59
  <input
@@ -58,7 +61,7 @@ let DataBindingMapper = class DataBindingMapper extends LitElement {
58
61
  value-key="accessor"
59
62
  type="text"
60
63
  data-mapping-accessor
61
- .value=${this.mapping.accessor || ''}
64
+ .value=${mapping.accessor || ''}
62
65
  />
63
66
 
64
67
  <label for="target-input"> <i18n-msg msgid="label.target">target</i18n-msg> </label>
@@ -67,7 +70,7 @@ let DataBindingMapper = class DataBindingMapper extends LitElement {
67
70
  type="text"
68
71
  value-key="target"
69
72
  list="target-list"
70
- .value=${this.mapping.target || ''}
73
+ .value=${mapping.target || ''}
71
74
  @focusin=${() => {
72
75
  if (!this.scene)
73
76
  this._componentIds = [];
@@ -83,42 +86,42 @@ let DataBindingMapper = class DataBindingMapper extends LitElement {
83
86
  </datalist>
84
87
 
85
88
  <label for="property-input"> <i18n-msg msgid="label.property">property</i18n-msg> </label>
86
- <select id="property-input" value-key="property" .value=${this.mapping.property}>
87
- ${this.properties.map(item => html ` <option .value=${item.name} ?selected=${item.name == this.mapping.property}>${item.label}</option> `)}
89
+ <select id="property-input" value-key="property" .value=${mapping.property}>
90
+ ${this.properties.map(item => html ` <option .value=${item.name} ?selected=${item.name == mapping.property}>${item.label}</option> `)}
88
91
  </select>
89
92
 
90
93
  <label> <i18n-msg msgid="label.rule-type">rule type</i18n-msg> </label>
91
- <things-editor-buttons-radio .value=${this.mapping.rule} @change=${(e) => this._onChangeRule(e)}>
94
+ <ox-buttons-radio .value=${mapping.rule} @change=${(e) => this._onChangeRule(e)}>
92
95
  <div data-value="value"><i18n-msg msgid="label.value"></i18n-msg></div>
93
96
  <div data-value="map"><i18n-msg msgid="label.map"></i18n-msg></div>
94
97
  <div data-value="range"><i18n-msg msgid="label.range"></i18n-msg></div>
95
98
  <div data-value="eval"><i18n-msg msgid="label.eval"></i18n-msg></div>
96
- </things-editor-buttons-radio>
99
+ </ox-buttons-radio>
97
100
 
98
- <div rule-editors class="content" ?hidden=${this.mapping.rule == 'value'}>
101
+ <div rule-editors class="content" ?hidden=${mapping.rule == 'value'}>
99
102
  <things-editor-value-map
100
103
  value-key="map"
101
104
  .value=${this.rule.map || {}}
102
- .valuetype=${this._valuetype(this.mapping.property)}
103
- ?active=${this.mapping.rule == 'map'}
105
+ .valuetype=${this._valuetype(mapping.property)}
106
+ ?active=${mapping.rule == 'map'}
104
107
  >
105
108
  </things-editor-value-map>
106
109
 
107
110
  <things-editor-value-range
108
111
  value-key="range"
109
112
  .value=${this.rule.range || []}
110
- .valuetype=${this._valuetype(this.mapping.property)}
111
- ?active=${this.mapping.rule == 'range'}
113
+ .valuetype=${this._valuetype(mapping.property)}
114
+ ?active=${mapping.rule == 'range'}
112
115
  >
113
116
  </things-editor-value-range>
114
117
 
115
- <things-editor-code
118
+ <ox-input-code
116
119
  value-key="eval"
117
120
  id="eval-editor"
118
121
  .value=${this.rule.eval || ''}
119
- ?active=${this.mapping.rule == 'eval'}
122
+ ?active=${mapping.rule == 'eval'}
120
123
  >
121
- </things-editor-code>
124
+ </ox-input-code>
122
125
  </div>
123
126
  `;
124
127
  }
@@ -260,7 +263,7 @@ DataBindingMapper.styles = [
260
263
 
261
264
  input,
262
265
  select,
263
- things-editor-buttons-radio,
266
+ ox-buttons-radio,
264
267
  [mapping-rule] {
265
268
  grid-column: span 7;
266
269
  }
@@ -269,19 +272,19 @@ DataBindingMapper.styles = [
269
272
  border: var(--property-sidebar-fieldset-border);
270
273
  }
271
274
 
272
- things-editor-buttons-radio {
275
+ ox-buttons-radio {
273
276
  display: flex;
274
277
  padding: 0 4px;
275
278
  }
276
279
 
277
- things-editor-buttons-radio > * {
280
+ ox-buttons-radio > * {
278
281
  text-align: center;
279
282
  flex: 1;
280
283
  margin: 2px;
281
284
  border-bottom: 2px solid #fff;
282
285
  }
283
286
 
284
- things-editor-buttons-radio div[active] {
287
+ ox-buttons-radio div[active] {
285
288
  border-color: #f2471c;
286
289
  }
287
290
 
@@ -311,7 +314,7 @@ DataBindingMapper.styles = [
311
314
  display: none;
312
315
  }
313
316
 
314
- things-editor-code {
317
+ ox-input-code {
315
318
  height: 300px;
316
319
  overflow: auto;
317
320
  }
@@ -1 +1 @@
1
- {"version":3,"file":"data-binding-mapper.js","sourceRoot":"","sources":["../../../../../src/modeller/property-sidebar/data-binding/data-binding-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '@things-factory/i18n-base'\nimport '@things-factory/modeller-ui/client/editors/things-editor-code'\nimport '@things-factory/modeller-ui/client/editors/things-editor-value-map'\nimport '@things-factory/modeller-ui/client/editors/things-editor-value-range'\nimport '@things-factory/modeller-ui/client/editors/things-editor-buttons-radio'\n\nimport { LitElement, PropertyValues, css, html } from 'lit'\nimport { Properties, Scene } from '@hatiolab/things-scene'\nimport { customElement, property, query, state } from 'lit/decorators'\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}\n\n/**\nelement for mapping data value editing\n\nExample:\n\n <data-binding-mapper mapping=${mapping}>\n </data-binding-mapper>\n*/\n\n@customElement('data-binding-mapper')\nexport default 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 things-editor-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 things-editor-buttons-radio {\n display: flex;\n padding: 0 4px;\n }\n\n things-editor-buttons-radio > * {\n text-align: center;\n flex: 1;\n margin: 2px;\n border-bottom: 2px solid #fff;\n }\n\n things-editor-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 things-editor-code {\n height: 300px;\n overflow: auto;\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: any[] = []\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 return html`\n <label for=\"accessor-input\"> <i18n-msg msgid=\"label.accessor\">accessor</i18n-msg> </label>\n <input\n id=\"accessor-input\"\n value-key=\"accessor\"\n type=\"text\"\n data-mapping-accessor\n .value=${this.mapping.accessor || ''}\n />\n\n <label for=\"target-input\"> <i18n-msg msgid=\"label.target\">target</i18n-msg> </label>\n <input\n id=\"target-input\"\n type=\"text\"\n value-key=\"target\"\n list=\"target-list\"\n .value=${this.mapping.target || ''}\n @focusin=${() => {\n if (!this.scene) this._componentIds = []\n this._componentIds = this.scene!.ids.map(info => info.key).filter(id => !!id)\n }}\n />\n <datalist id=\"target-list\">\n <option value=\"(self)\"></option>\n <option value=\"(key)\"></option>\n ${this._componentIds.length\n ? html` ${this._componentIds.map(id => html` <option value=${id}></option> `)} `\n : html``}\n </datalist>\n\n <label for=\"property-input\"> <i18n-msg msgid=\"label.property\">property</i18n-msg> </label>\n <select id=\"property-input\" value-key=\"property\" .value=${this.mapping.property}>\n ${this.properties.map(\n item =>\n html` <option .value=${item.name} ?selected=${item.name == this.mapping.property}>${item.label}</option> `\n )}\n </select>\n\n <label> <i18n-msg msgid=\"label.rule-type\">rule type</i18n-msg> </label>\n <things-editor-buttons-radio .value=${this.mapping.rule} @change=${(e: Event) => this._onChangeRule(e)}>\n <div data-value=\"value\"><i18n-msg msgid=\"label.value\"></i18n-msg></div>\n <div data-value=\"map\"><i18n-msg msgid=\"label.map\"></i18n-msg></div>\n <div data-value=\"range\"><i18n-msg msgid=\"label.range\"></i18n-msg></div>\n <div data-value=\"eval\"><i18n-msg msgid=\"label.eval\"></i18n-msg></div>\n </things-editor-buttons-radio>\n\n <div rule-editors class=\"content\" ?hidden=${this.mapping.rule == 'value'}>\n <things-editor-value-map\n value-key=\"map\"\n .value=${this.rule.map || {}}\n .valuetype=${this._valuetype(this.mapping.property!)}\n ?active=${this.mapping.rule == 'map'}\n >\n </things-editor-value-map>\n\n <things-editor-value-range\n value-key=\"range\"\n .value=${this.rule.range || []}\n .valuetype=${this._valuetype(this.mapping.property!)}\n ?active=${this.mapping.rule == 'range'}\n >\n </things-editor-value-range>\n\n <things-editor-code\n value-key=\"eval\"\n id=\"eval-editor\"\n .value=${this.rule.eval || ''}\n ?active=${this.mapping.rule == 'eval'}\n >\n </things-editor-code>\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 = 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 }\n\n if (!this.mapping.rule) this.mapping.rule = 'value'\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"]}
1
+ {"version":3,"file":"data-binding-mapper.js","sourceRoot":"","sources":["../../../../../src/modeller/property-sidebar/data-binding/data-binding-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\n// import '@things-factory/modeller-ui/client/editors/things-editor-code'\nimport '@things-factory/modeller-ui/client/editors/things-editor-value-map'\nimport '@things-factory/modeller-ui/client/editors/things-editor-value-range'\nimport '@operato/input/dist/src/ox-buttons-radio'\nimport '@operato/input/dist/src/ox-input-code'\n\nimport { LitElement, PropertyValues, css, html } from 'lit'\nimport { Properties, Scene } from '@hatiolab/things-scene'\nimport { customElement, property, query, state } from 'lit/decorators'\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}\n\n/**\nelement for mapping data value editing\n\nExample:\n\n <data-binding-mapper mapping=${mapping}>\n </data-binding-mapper>\n*/\n\n@customElement('data-binding-mapper')\nexport default 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 ]\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: any[] = []\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\"> <i18n-msg msgid=\"label.accessor\">accessor</i18n-msg> </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\"> <i18n-msg msgid=\"label.target\">target</i18n-msg> </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 if (!this.scene) this._componentIds = []\n this._componentIds = this.scene!.ids.map(info => info.key).filter(id => !!id)\n }}\n />\n <datalist id=\"target-list\">\n <option value=\"(self)\"></option>\n <option value=\"(key)\"></option>\n ${this._componentIds.length\n ? html` ${this._componentIds.map(id => html` <option value=${id}></option> `)} `\n : html``}\n </datalist>\n\n <label for=\"property-input\"> <i18n-msg msgid=\"label.property\">property</i18n-msg> </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> <i18n-msg msgid=\"label.rule-type\">rule type</i18n-msg> </label>\n <ox-buttons-radio .value=${mapping.rule} @change=${(e: Event) => this._onChangeRule(e)}>\n <div data-value=\"value\"><i18n-msg msgid=\"label.value\"></i18n-msg></div>\n <div data-value=\"map\"><i18n-msg msgid=\"label.map\"></i18n-msg></div>\n <div data-value=\"range\"><i18n-msg msgid=\"label.range\"></i18n-msg></div>\n <div data-value=\"eval\"><i18n-msg msgid=\"label.eval\"></i18n-msg></div>\n </ox-buttons-radio>\n\n <div rule-editors class=\"content\" ?hidden=${mapping.rule == 'value'}>\n <things-editor-value-map\n value-key=\"map\"\n .value=${this.rule.map || {}}\n .valuetype=${this._valuetype(mapping.property!)}\n ?active=${mapping.rule == 'map'}\n >\n </things-editor-value-map>\n\n <things-editor-value-range\n value-key=\"range\"\n .value=${this.rule.range || []}\n .valuetype=${this._valuetype(mapping.property!)}\n ?active=${mapping.rule == 'range'}\n >\n </things-editor-value-range>\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 }\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 = 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 }\n\n if (!this.mapping.rule) this.mapping.rule = 'value'\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"]}