@fmsim/board 0.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/.storybook/main.js +3 -0
  2. package/.storybook/server.mjs +8 -0
  3. package/custom-elements.json +6500 -0
  4. package/demo/index-modeller.html +102 -0
  5. package/demo/index-player.html +101 -0
  6. package/demo/index-viewer.html +101 -0
  7. package/demo/index.html +101 -0
  8. package/dist/src/component/etc.d.ts +2 -0
  9. package/dist/src/component/etc.js +104 -0
  10. package/dist/src/component/etc.js.map +1 -0
  11. package/dist/src/component/index.d.ts +1 -0
  12. package/dist/src/component/index.js +2 -0
  13. package/dist/src/component/index.js.map +1 -0
  14. package/dist/src/component/register-default-groups.d.ts +1 -0
  15. package/dist/src/component/register-default-groups.js +6 -0
  16. package/dist/src/component/register-default-groups.js.map +1 -0
  17. package/dist/src/data-storage/data-storage.d.ts +8 -0
  18. package/dist/src/data-storage/data-storage.js +28 -0
  19. package/dist/src/data-storage/data-storage.js.map +1 -0
  20. package/dist/src/graphql/board.d.ts +6 -0
  21. package/dist/src/graphql/board.js +139 -0
  22. package/dist/src/graphql/board.js.map +1 -0
  23. package/dist/src/graphql/data-subscription.d.ts +5 -0
  24. package/dist/src/graphql/data-subscription.js +24 -0
  25. package/dist/src/graphql/data-subscription.js.map +1 -0
  26. package/dist/src/graphql/favorite-board.d.ts +1 -0
  27. package/dist/src/graphql/favorite-board.js +23 -0
  28. package/dist/src/graphql/favorite-board.js.map +1 -0
  29. package/dist/src/graphql/group.d.ts +7 -0
  30. package/dist/src/graphql/group.js +125 -0
  31. package/dist/src/graphql/group.js.map +1 -0
  32. package/dist/src/graphql/index.d.ts +4 -0
  33. package/dist/src/graphql/index.js +5 -0
  34. package/dist/src/graphql/index.js.map +1 -0
  35. package/dist/src/graphql/play-group.d.ts +8 -0
  36. package/dist/src/graphql/play-group.js +173 -0
  37. package/dist/src/graphql/play-group.js.map +1 -0
  38. package/dist/src/graphql/scenario.d.ts +6 -0
  39. package/dist/src/graphql/scenario.js +69 -0
  40. package/dist/src/graphql/scenario.js.map +1 -0
  41. package/dist/src/index.d.ts +6 -0
  42. package/dist/src/index.js +7 -0
  43. package/dist/src/index.js.map +1 -0
  44. package/dist/src/layers/bouncing-arrow-decorator.d.ts +1 -0
  45. package/dist/src/layers/bouncing-arrow-decorator.js +40 -0
  46. package/dist/src/layers/bouncing-arrow-decorator.js.map +1 -0
  47. package/dist/src/layers/event-handlers.d.ts +1 -0
  48. package/dist/src/layers/event-handlers.js +70 -0
  49. package/dist/src/layers/event-handlers.js.map +1 -0
  50. package/dist/src/layers/mcs-event-handlers.d.ts +1 -0
  51. package/dist/src/layers/mcs-event-handlers.js +73 -0
  52. package/dist/src/layers/mcs-event-handlers.js.map +1 -0
  53. package/dist/src/layers/movement-layer.d.ts +27 -0
  54. package/dist/src/layers/movement-layer.js +109 -0
  55. package/dist/src/layers/movement-layer.js.map +1 -0
  56. package/dist/src/layers/ox-mini-map.d.ts +1 -0
  57. package/dist/src/layers/ox-mini-map.js +189 -0
  58. package/dist/src/layers/ox-mini-map.js.map +1 -0
  59. package/dist/src/layers/scroll-layer.d.ts +24 -0
  60. package/dist/src/layers/scroll-layer.js +125 -0
  61. package/dist/src/layers/scroll-layer.js.map +1 -0
  62. package/dist/src/layers/shift-handler.d.ts +1 -0
  63. package/dist/src/layers/shift-handler.js +38 -0
  64. package/dist/src/layers/shift-handler.js.map +1 -0
  65. package/dist/src/layers/zoom-handler.d.ts +1 -0
  66. package/dist/src/layers/zoom-handler.js +36 -0
  67. package/dist/src/layers/zoom-handler.js.map +1 -0
  68. package/dist/src/modeller/component-toolbar/component-detail.d.ts +12 -0
  69. package/dist/src/modeller/component-toolbar/component-detail.js +53 -0
  70. package/dist/src/modeller/component-toolbar/component-detail.js.map +1 -0
  71. package/dist/src/modeller/component-toolbar/component-menu.d.ts +27 -0
  72. package/dist/src/modeller/component-toolbar/component-menu.js +192 -0
  73. package/dist/src/modeller/component-toolbar/component-menu.js.map +1 -0
  74. package/dist/src/modeller/component-toolbar/component-toolbar.d.ts +30 -0
  75. package/dist/src/modeller/component-toolbar/component-toolbar.js +188 -0
  76. package/dist/src/modeller/component-toolbar/component-toolbar.js.map +1 -0
  77. package/dist/src/modeller/component-toolbar/mode-icons.d.ts +2 -0
  78. package/dist/src/modeller/component-toolbar/mode-icons.js +86 -0
  79. package/dist/src/modeller/component-toolbar/mode-icons.js.map +1 -0
  80. package/dist/src/modeller/edit-toolbar-style.d.ts +4 -0
  81. package/dist/src/modeller/edit-toolbar-style.js +227 -0
  82. package/dist/src/modeller/edit-toolbar-style.js.map +1 -0
  83. package/dist/src/modeller/edit-toolbar.d.ts +61 -0
  84. package/dist/src/modeller/edit-toolbar.js +646 -0
  85. package/dist/src/modeller/edit-toolbar.js.map +1 -0
  86. package/dist/src/modeller/property-sidebar/abstract-property.d.ts +10 -0
  87. package/dist/src/modeller/property-sidebar/abstract-property.js +55 -0
  88. package/dist/src/modeller/property-sidebar/abstract-property.js.map +1 -0
  89. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.d.ts +54 -0
  90. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.js +392 -0
  91. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.js.map +1 -0
  92. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-map.d.ts +6 -0
  93. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-map.js +19 -0
  94. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-map.js.map +1 -0
  95. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-range.d.ts +6 -0
  96. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-range.js +19 -0
  97. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-range.js.map +1 -0
  98. package/dist/src/modeller/property-sidebar/data-binding/data-binding.d.ts +43 -0
  99. package/dist/src/modeller/property-sidebar/data-binding/data-binding.js +416 -0
  100. package/dist/src/modeller/property-sidebar/data-binding/data-binding.js.map +1 -0
  101. package/dist/src/modeller/property-sidebar/effects/effects-shared-style.d.ts +4 -0
  102. package/dist/src/modeller/property-sidebar/effects/effects-shared-style.js +61 -0
  103. package/dist/src/modeller/property-sidebar/effects/effects-shared-style.js.map +1 -0
  104. package/dist/src/modeller/property-sidebar/effects/effects.d.ts +22 -0
  105. package/dist/src/modeller/property-sidebar/effects/effects.js +46 -0
  106. package/dist/src/modeller/property-sidebar/effects/effects.js.map +1 -0
  107. package/dist/src/modeller/property-sidebar/effects/property-event-hover.d.ts +20 -0
  108. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js +128 -0
  109. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js.map +1 -0
  110. package/dist/src/modeller/property-sidebar/effects/property-event-tap.d.ts +28 -0
  111. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js +190 -0
  112. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js.map +1 -0
  113. package/dist/src/modeller/property-sidebar/effects/property-event.d.ts +22 -0
  114. package/dist/src/modeller/property-sidebar/effects/property-event.js +55 -0
  115. package/dist/src/modeller/property-sidebar/effects/property-event.js.map +1 -0
  116. package/dist/src/modeller/property-sidebar/effects/property-shadow.d.ts +23 -0
  117. package/dist/src/modeller/property-sidebar/effects/property-shadow.js +103 -0
  118. package/dist/src/modeller/property-sidebar/effects/property-shadow.js.map +1 -0
  119. package/dist/src/modeller/property-sidebar/effects/value-converter.d.ts +1 -0
  120. package/dist/src/modeller/property-sidebar/effects/value-converter.js +21 -0
  121. package/dist/src/modeller/property-sidebar/effects/value-converter.js.map +1 -0
  122. package/dist/src/modeller/property-sidebar/inspector/inspector.d.ts +29 -0
  123. package/dist/src/modeller/property-sidebar/inspector/inspector.js +334 -0
  124. package/dist/src/modeller/property-sidebar/inspector/inspector.js.map +1 -0
  125. package/dist/src/modeller/property-sidebar/property-shared-style.d.ts +4 -0
  126. package/dist/src/modeller/property-sidebar/property-shared-style.js +135 -0
  127. package/dist/src/modeller/property-sidebar/property-shared-style.js.map +1 -0
  128. package/dist/src/modeller/property-sidebar/property-sidebar.d.ts +47 -0
  129. package/dist/src/modeller/property-sidebar/property-sidebar.js +324 -0
  130. package/dist/src/modeller/property-sidebar/property-sidebar.js.map +1 -0
  131. package/dist/src/modeller/property-sidebar/shapes/box-padding-editor-styles.d.ts +1 -0
  132. package/dist/src/modeller/property-sidebar/shapes/box-padding-editor-styles.js +94 -0
  133. package/dist/src/modeller/property-sidebar/shapes/box-padding-editor-styles.js.map +1 -0
  134. package/dist/src/modeller/property-sidebar/shapes/shapes.d.ts +25 -0
  135. package/dist/src/modeller/property-sidebar/shapes/shapes.js +354 -0
  136. package/dist/src/modeller/property-sidebar/shapes/shapes.js.map +1 -0
  137. package/dist/src/modeller/property-sidebar/specifics/specific-properties-builder.d.ts +16 -0
  138. package/dist/src/modeller/property-sidebar/specifics/specific-properties-builder.js +132 -0
  139. package/dist/src/modeller/property-sidebar/specifics/specific-properties-builder.js.map +1 -0
  140. package/dist/src/modeller/property-sidebar/specifics/specifics.d.ts +28 -0
  141. package/dist/src/modeller/property-sidebar/specifics/specifics.js +129 -0
  142. package/dist/src/modeller/property-sidebar/specifics/specifics.js.map +1 -0
  143. package/dist/src/modeller/property-sidebar/styles/styles.d.ts +21 -0
  144. package/dist/src/modeller/property-sidebar/styles/styles.js +559 -0
  145. package/dist/src/modeller/property-sidebar/styles/styles.js.map +1 -0
  146. package/dist/src/modeller/scene-viewer/confidential-overlay.d.ts +4 -0
  147. package/dist/src/modeller/scene-viewer/confidential-overlay.js +14 -0
  148. package/dist/src/modeller/scene-viewer/confidential-overlay.js.map +1 -0
  149. package/dist/src/modeller/scene-viewer/ox-scene-handler.d.ts +11 -0
  150. package/dist/src/modeller/scene-viewer/ox-scene-handler.js +36 -0
  151. package/dist/src/modeller/scene-viewer/ox-scene-handler.js.map +1 -0
  152. package/dist/src/modeller/scene-viewer/ox-scene-layer.d.ts +10 -0
  153. package/dist/src/modeller/scene-viewer/ox-scene-layer.js +42 -0
  154. package/dist/src/modeller/scene-viewer/ox-scene-layer.js.map +1 -0
  155. package/dist/src/modeller/scene-viewer/ox-scene-property.d.ts +6 -0
  156. package/dist/src/modeller/scene-viewer/ox-scene-property.js +19 -0
  157. package/dist/src/modeller/scene-viewer/ox-scene-property.js.map +1 -0
  158. package/dist/src/modeller/scene-viewer/ox-scene-viewer.d.ts +40 -0
  159. package/dist/src/modeller/scene-viewer/ox-scene-viewer.js +253 -0
  160. package/dist/src/modeller/scene-viewer/ox-scene-viewer.js.map +1 -0
  161. package/dist/src/ox-board-list.d.ts +2 -0
  162. package/dist/src/ox-board-list.js +425 -0
  163. package/dist/src/ox-board-list.js.map +1 -0
  164. package/dist/src/ox-board-modeller.d.ts +57 -0
  165. package/dist/src/ox-board-modeller.js +401 -0
  166. package/dist/src/ox-board-modeller.js.map +1 -0
  167. package/dist/src/ox-board-viewer-backup.d.ts +64 -0
  168. package/dist/src/ox-board-viewer-backup.js +529 -0
  169. package/dist/src/ox-board-viewer-backup.js.map +1 -0
  170. package/dist/src/ox-board-viewer-other.d.ts +19 -0
  171. package/dist/src/ox-board-viewer-other.js +82 -0
  172. package/dist/src/ox-board-viewer-other.js.map +1 -0
  173. package/dist/src/ox-board-viewer.d.ts +60 -0
  174. package/dist/src/ox-board-viewer.js +503 -0
  175. package/dist/src/ox-board-viewer.js.map +1 -0
  176. package/dist/src/ox-editor-board-selector.d.ts +15 -0
  177. package/dist/src/ox-editor-board-selector.js +85 -0
  178. package/dist/src/ox-editor-board-selector.js.map +1 -0
  179. package/dist/src/ox-property-editor-board-selector.d.ts +4 -0
  180. package/dist/src/ox-property-editor-board-selector.js +22 -0
  181. package/dist/src/ox-property-editor-board-selector.js.map +1 -0
  182. package/dist/src/ox-property-editor-theme.d.ts +19 -0
  183. package/dist/src/ox-property-editor-theme.js +111 -0
  184. package/dist/src/ox-property-editor-theme.js.map +1 -0
  185. package/dist/src/selector/board-creation-popup.d.ts +19 -0
  186. package/dist/src/selector/board-creation-popup.js +100 -0
  187. package/dist/src/selector/board-creation-popup.js.map +1 -0
  188. package/dist/src/selector/board-thumbnail-card.d.ts +15 -0
  189. package/dist/src/selector/board-thumbnail-card.js +168 -0
  190. package/dist/src/selector/board-thumbnail-card.js.map +1 -0
  191. package/dist/src/selector/ox-board-creation-card.d.ts +14 -0
  192. package/dist/src/selector/ox-board-creation-card.js +84 -0
  193. package/dist/src/selector/ox-board-creation-card.js.map +1 -0
  194. package/dist/src/selector/ox-board-selector.d.ts +45 -0
  195. package/dist/src/selector/ox-board-selector.js +273 -0
  196. package/dist/src/selector/ox-board-selector.js.map +1 -0
  197. package/dist/src/types.d.ts +37 -0
  198. package/dist/src/types.js +2 -0
  199. package/dist/src/types.js.map +1 -0
  200. package/dist/stories/index.stories.d.ts +33 -0
  201. package/dist/stories/index.stories.js +33 -0
  202. package/dist/stories/index.stories.js.map +1 -0
  203. package/dist/tsconfig.tsbuildinfo +1 -0
  204. package/icons/components/dash.png +0 -0
  205. package/icons/components/ellipse.png +0 -0
  206. package/icons/components/line.png +0 -0
  207. package/icons/components/no-image.png +0 -0
  208. package/icons/components/popup.png +0 -0
  209. package/icons/components/rect.png +0 -0
  210. package/icons/icon-collapse-active.png +0 -0
  211. package/icons/icon-collapse.png +0 -0
  212. package/icons/icon-fullscreen.png +0 -0
  213. package/icons/icon-htoolbar.png +0 -0
  214. package/icons/icon-properties-arrow-type.png +0 -0
  215. package/icons/icon-properties-gradient-direction.png +0 -0
  216. package/icons/icon-properties-label.png +0 -0
  217. package/icons/icon-properties-line-type.png +0 -0
  218. package/icons/icon-properties-padding.png +0 -0
  219. package/icons/icon-properties-ratio.png +0 -0
  220. package/icons/icon-properties-table.png +0 -0
  221. package/icons/icon-properties.png +0 -0
  222. package/icons/icon-shell-inspector.png +0 -0
  223. package/package.json +149 -0
  224. package/stories/index.stories.ts +52 -0
  225. package/web-dev-server.config.mjs +30 -0
  226. package/web-test-runner.config.mjs +29 -0
@@ -0,0 +1,646 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import { html, LitElement } from 'lit';
6
+ import { property, query, queryAll } from 'lit/decorators.js';
7
+ import { copyToClipboard, isMacOS } from '@operato/utils';
8
+ import { style } from './edit-toolbar-style';
9
+ const MACOS = isMacOS();
10
+ export class EditToolbar extends LitElement {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.selected = [];
14
+ this.hideProperty = false;
15
+ }
16
+ firstUpdated() {
17
+ this.addEventListener('mousewheel', this.onWheelEvent.bind(this), false);
18
+ window.addEventListener('paste', (e) => {
19
+ var _a;
20
+ try {
21
+ this.cliped = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/plain');
22
+ }
23
+ catch (e) {
24
+ console.error('model paste failed', e);
25
+ }
26
+ });
27
+ this.aligners.forEach(aligner => aligner.addEventListener('tap', this.onTapAlign.bind(this)));
28
+ this.zorders.forEach(zorder => zorder.addEventListener('tap', this.onTapZorder.bind(this)));
29
+ this.distributes.forEach(distribute => distribute.addEventListener('tap', this.onTapDistribute.bind(this)));
30
+ this.undo.addEventListener('tap', this.onTapUndo.bind(this));
31
+ this.redo.addEventListener('tap', this.onTapRedo.bind(this));
32
+ this.fullscreen.addEventListener('tap', this.onTapFullscreen.bind(this));
33
+ this.cut.addEventListener('tap', this.onTapCut.bind(this));
34
+ this.copy.addEventListener('tap', this.onTapCopy.bind(this));
35
+ this.paste.addEventListener('tap', this.onTapPaste.bind(this));
36
+ this.delete.addEventListener('tap', this.onTapDelete.bind(this));
37
+ this.renderRoot
38
+ .querySelector('#font-increase')
39
+ .addEventListener('tap', this.onTapFontIncrease.bind(this));
40
+ this.renderRoot
41
+ .querySelector('#font-decrease')
42
+ .addEventListener('tap', this.onTapFontDecrease.bind(this));
43
+ this.renderRoot.querySelector('#group').addEventListener('tap', this.onTapGroup.bind(this));
44
+ this.renderRoot.querySelector('#ungroup').addEventListener('tap', this.onTapUngroup.bind(this));
45
+ this.renderRoot
46
+ .querySelector('#symmetry-x')
47
+ .addEventListener('tap', this.onTapSymmetryX.bind(this));
48
+ this.renderRoot
49
+ .querySelector('#symmetry-y')
50
+ .addEventListener('tap', this.onTapSymmetryY.bind(this));
51
+ this.renderRoot.querySelector('#rotate-cw').addEventListener('tap', this.onTapRotateCW.bind(this));
52
+ this.renderRoot
53
+ .querySelector('#rotate-ccw')
54
+ .addEventListener('tap', this.onTapRotateCCW.bind(this));
55
+ this.renderRoot
56
+ .querySelector('#toggle-property')
57
+ .addEventListener('tap', this.onTapToggle.bind(this));
58
+ this.renderRoot.querySelector('#fit-scene').addEventListener('tap', this.onTapFitScene.bind(this));
59
+ this.renderRoot.querySelector('#preview').addEventListener('tap', this.onTapPreview.bind(this));
60
+ }
61
+ updated(changes) {
62
+ changes.has('scene') && this.onSceneChanged(this.scene, changes.get('scene'));
63
+ changes.has('selected') && this.onSelectedChanged(this.selected, changes.get('selected'));
64
+ }
65
+ render() {
66
+ return html `
67
+ <div tools>
68
+ <span><slot></slot></span>
69
+
70
+ <span button id="undo" title="undo (${this.getShortcutString('cmd', 'z')})"> </span>
71
+ <span button id="redo" title="redo (${this.getShortcutString('cmd', 'shift', 'z')})"> </span>
72
+
73
+ <span class="vline"></span>
74
+
75
+ <span button id="cut" title="cut (${this.getShortcutString('cmd', 'x')})"> </span>
76
+ <span button id="copy" title="copy (${this.getShortcutString('cmd', 'c')})"> </span>
77
+ <span button id="paste" title="paste (${this.getShortcutString('cmd', 'v')})"> </span>
78
+ <span
79
+ button
80
+ id="delete"
81
+ title="delete (${this.getShortcutString('backspace')}, ${this.getShortcutString('delete')})"
82
+ >
83
+ </span>
84
+
85
+ <span class="vline"></span>
86
+
87
+ <!-- TODO Implement style-copy
88
+ <span button id="style-copy" title="format painter"></span>
89
+ <span class="vline"></span>
90
+ -->
91
+
92
+ <span
93
+ button
94
+ data-align="left"
95
+ id="align-left"
96
+ title="align left (${this.getShortcutString('alt', 'shift', 'l')})"
97
+ >
98
+ </span>
99
+ <span
100
+ button
101
+ data-align="center"
102
+ id="align-center"
103
+ title="align center (${this.getShortcutString('alt', 'shift', 'c')})"
104
+ >
105
+ </span>
106
+ <span
107
+ button
108
+ data-align="right"
109
+ id="align-right"
110
+ title="align right (${this.getShortcutString('alt', 'shift', 'r')})"
111
+ >
112
+ </span>
113
+
114
+ <span button data-align="top" id="align-top" title="align top (${this.getShortcutString('alt', 'shift', 't')})">
115
+ </span>
116
+ <span
117
+ button
118
+ data-align="middle"
119
+ id="align-middle"
120
+ title="align middle (${this.getShortcutString('alt', 'shift', 'm')})"
121
+ >
122
+ </span>
123
+ <span
124
+ button
125
+ data-align="bottom"
126
+ id="align-bottom"
127
+ title="align bottom (${this.getShortcutString('alt', 'shift', 'b')})"
128
+ >
129
+ </span>
130
+
131
+ <span
132
+ button
133
+ data-distribute="HORIZONTAL"
134
+ id="distribute-horizontal"
135
+ title="distribute horizontally (${this.getShortcutString('alt', 'shift', 'h')})"
136
+ >
137
+ </span>
138
+
139
+ <span
140
+ button
141
+ data-distribute="VERTICAL"
142
+ id="distribute-vertical"
143
+ title="distribute vertically (${this.getShortcutString('alt', 'shift', 'v')})"
144
+ >
145
+ </span>
146
+
147
+ <span class="vline"></span>
148
+
149
+ <span
150
+ button
151
+ id="front"
152
+ data-zorder="front"
153
+ title="bring to front (${this.getShortcutString('cmd', 'shift', 'f')})"
154
+ >
155
+ </span>
156
+ <span button id="back" data-zorder="back" title="send to back (${this.getShortcutString('cmd', 'shift', 'b')})">
157
+ </span>
158
+ <span button id="forward" data-zorder="forward" title="bring forward (${this.getShortcutString('cmd', 'f')})">
159
+ </span>
160
+ <span button id="backward" data-zorder="backward" title="send backward (${this.getShortcutString('cmd', 'b')})">
161
+ </span>
162
+
163
+ <span class="vline"></span>
164
+
165
+ <span button id="symmetry-x" title="symmetry-x (${this.getShortcutString('alt', 'shift', 'x')})"> </span>
166
+ <span button id="symmetry-y" title="symmetry-y (${this.getShortcutString('alt', 'shift', 'y')})"> </span>
167
+ <span button id="rotate-cw" title="rotate clockwise (${this.getShortcutString('alt', 'shift', 'e')})"> </span>
168
+ <span button id="rotate-ccw" title="rotate counter clockwise (${this.getShortcutString('alt', 'shift', 'w')})">
169
+ </span>
170
+
171
+ <span class="vline"></span>
172
+
173
+ <span button id="group" title="group (${this.getShortcutString('cmd', 'g')})"> </span>
174
+ <span button id="ungroup" title="ungroup (${this.getShortcutString('cmd', 'shift', 'g')})"> </span>
175
+
176
+ <span class="vline"></span>
177
+
178
+ <span button id="font-increase" title="increase font size"></span>
179
+ <span button id="font-decrease" title="decrease font size"></span>
180
+
181
+ <span class="vline"></span>
182
+ <span padding></span>
183
+
184
+ <span button id="fit-scene" title="fit scene (${this.getShortcutString('cmd', 'd')})"> </span>
185
+
186
+ <span class="vline"></span>
187
+
188
+ <span button id="preview" title="preview (${this.getShortcutString('ctrl', 'p')})"> </span>
189
+
190
+ <span button id="fullscreen" title="fullscreen (${this.getShortcutString('f11')})"> </span>
191
+
192
+ <span
193
+ button
194
+ id="toggle-property"
195
+ title="toggle property panel (${this.getShortcutString('cmd', 'h')})"
196
+ toggles="true"
197
+ >
198
+ </span>
199
+ </div>
200
+ `;
201
+ }
202
+ onWheelEvent(e) {
203
+ var delta = Math.max(-1, Math.min(1, e.deltaY || -e.detail));
204
+ this.scrollLeft -= delta * 40;
205
+ e.preventDefault();
206
+ }
207
+ getSymbol(key) {
208
+ var symbol;
209
+ switch (key) {
210
+ case 'cmd':
211
+ case 'ctrl':
212
+ symbol = MACOS ? '⌘' : 'Ctrl';
213
+ break;
214
+ case 'shift':
215
+ symbol = MACOS ? '⇧' : 'Shift';
216
+ break;
217
+ case 'alt':
218
+ case 'option':
219
+ symbol = MACOS ? '⌥' : 'Alt';
220
+ break;
221
+ case 'backspace':
222
+ symbol = MACOS ? '⌫' : 'BackSpace';
223
+ break;
224
+ case 'delete':
225
+ symbol = MACOS ? '⌦' : 'Del';
226
+ break;
227
+ default:
228
+ symbol = key.toUpperCase();
229
+ break;
230
+ }
231
+ return symbol;
232
+ }
233
+ getShortcutString(...keys) {
234
+ var symbols = [];
235
+ for (var i = 0; i < arguments.length; i++) {
236
+ symbols.push(this.getSymbol(arguments[i]));
237
+ }
238
+ return symbols.join(MACOS ? '' : '+');
239
+ }
240
+ onShortcut(e) {
241
+ var _a, _b, _c, _d;
242
+ if (MACOS)
243
+ var ctrlKey = e.metaKey;
244
+ else
245
+ var ctrlKey = e.ctrlKey;
246
+ var altKey = e.altKey;
247
+ var shiftKey = e.shiftKey;
248
+ var defaultPrevent = ctrlKey || altKey;
249
+ switch (e.code) {
250
+ case 'KeyZ':
251
+ if (ctrlKey && !shiftKey)
252
+ this.onTapUndo();
253
+ else if (ctrlKey && shiftKey)
254
+ this.onTapRedo();
255
+ break;
256
+ case 'KeyY':
257
+ if (ctrlKey && !shiftKey)
258
+ this.onTapRedo();
259
+ else if (altKey && shiftKey)
260
+ this.onTapSymmetryY();
261
+ break;
262
+ case 'KeyC':
263
+ if (ctrlKey && !shiftKey)
264
+ this.onTapCopy();
265
+ else if (altKey && shiftKey)
266
+ this.onTapAlign('center');
267
+ break;
268
+ case 'KeyX':
269
+ if (ctrlKey && !shiftKey)
270
+ this.onTapCut();
271
+ else if (altKey && shiftKey)
272
+ this.onTapSymmetryX();
273
+ break;
274
+ case 'KeyV':
275
+ if (ctrlKey && !shiftKey) {
276
+ this.onTapPaste();
277
+ defaultPrevent = false;
278
+ }
279
+ else if (altKey && shiftKey)
280
+ this.onTapDistribute('VERTICAL');
281
+ break;
282
+ case 'Delete':
283
+ case 'Backspace':
284
+ this.onTapDelete();
285
+ defaultPrevent = true;
286
+ break;
287
+ case 'KeyG':
288
+ if (ctrlKey && !shiftKey)
289
+ this.onTapGroup();
290
+ else if (ctrlKey && shiftKey)
291
+ this.onTapUngroup();
292
+ break;
293
+ case 'KeyF':
294
+ if (ctrlKey && !shiftKey)
295
+ (_a = this.scene) === null || _a === void 0 ? void 0 : _a.zorder('forward');
296
+ else if (ctrlKey && shiftKey)
297
+ (_b = this.scene) === null || _b === void 0 ? void 0 : _b.zorder('front');
298
+ break;
299
+ case 'KeyB':
300
+ if (ctrlKey && !shiftKey)
301
+ (_c = this.scene) === null || _c === void 0 ? void 0 : _c.zorder('backward');
302
+ else if (ctrlKey && shiftKey)
303
+ (_d = this.scene) === null || _d === void 0 ? void 0 : _d.zorder('back');
304
+ else if (altKey && shiftKey)
305
+ this.onTapAlign('bottom');
306
+ break;
307
+ // case 'Equal':
308
+ // if (ctrlKey) this.onTapZoom(zoomin)
309
+ // break
310
+ // case 'Minus':
311
+ // if (ctrlKey) this.onTapZoom(zoomout)
312
+ // break
313
+ case 'KeyH':
314
+ if (ctrlKey && !shiftKey)
315
+ this.onTapToggle();
316
+ else if (altKey && shiftKey)
317
+ this.onTapDistribute('HORIZONTAL');
318
+ break;
319
+ case 'F11':
320
+ this.onTapFullscreen();
321
+ defaultPrevent = true;
322
+ break;
323
+ case 'KeyP':
324
+ if (ctrlKey) {
325
+ this.onTapPreview();
326
+ defaultPrevent = true;
327
+ }
328
+ break;
329
+ case 'KeyA':
330
+ if (ctrlKey)
331
+ this.onTapSelectAll();
332
+ break;
333
+ case 'KeyL':
334
+ if (altKey && shiftKey)
335
+ this.onTapAlign('left');
336
+ break;
337
+ case 'KeyR':
338
+ if (altKey && shiftKey)
339
+ this.onTapAlign('right');
340
+ break;
341
+ case 'KeyM':
342
+ if (altKey && shiftKey)
343
+ this.onTapAlign('middle');
344
+ break;
345
+ case 'KeyT':
346
+ if (altKey && shiftKey)
347
+ this.onTapAlign('top');
348
+ break;
349
+ case 'KeyY':
350
+ if (altKey && shiftKey)
351
+ this.onTapSymmetryY();
352
+ break;
353
+ case 'KeyD':
354
+ if (ctrlKey) {
355
+ this.onTapFitScene();
356
+ defaultPrevent = true;
357
+ }
358
+ break;
359
+ case 'KeyE':
360
+ if (altKey && shiftKey)
361
+ this.onTapRotateCW();
362
+ else if (ctrlKey && shiftKey)
363
+ this.onTapDownloadModel();
364
+ break;
365
+ case 'KeyW':
366
+ if (altKey && shiftKey)
367
+ this.onTapRotateCCW();
368
+ break;
369
+ case 'Digit1':
370
+ if (ctrlKey) {
371
+ console.log('MODEL', this.scene && this.scene.model);
372
+ defaultPrevent = true;
373
+ }
374
+ break;
375
+ case 'Digit2':
376
+ if (ctrlKey) {
377
+ console.log('SELECTED', this.scene && this.scene.selected);
378
+ defaultPrevent = true;
379
+ }
380
+ break;
381
+ default:
382
+ return false;
383
+ }
384
+ if (defaultPrevent)
385
+ e.preventDefault();
386
+ return true;
387
+ }
388
+ onExecute(command, undoable, redoable) {
389
+ !undoable ? this.undo.setAttribute('disabled', '') : this.undo.removeAttribute('disabled');
390
+ !redoable ? this.redo.setAttribute('disabled', '') : this.redo.removeAttribute('disabled');
391
+ }
392
+ onUndo(undoable, redoable) {
393
+ !undoable ? this.undo.setAttribute('disabled', '') : this.undo.removeAttribute('disabled');
394
+ !redoable ? this.redo.setAttribute('disabled', '') : this.redo.removeAttribute('disabled');
395
+ }
396
+ onRedo(undoable, redoable) {
397
+ !undoable ? this.undo.setAttribute('disabled', '') : this.undo.removeAttribute('disabled');
398
+ !redoable ? this.redo.setAttribute('disabled', '') : this.redo.removeAttribute('disabled');
399
+ }
400
+ onSceneChanged(after, before) {
401
+ if (before) {
402
+ before.off('execute', this.onExecute, this);
403
+ before.off('undo', this.onUndo, this);
404
+ before.off('redo', this.onRedo, this);
405
+ }
406
+ if (after) {
407
+ after.on('execute', this.onExecute, this);
408
+ after.on('undo', this.onUndo, this);
409
+ after.on('redo', this.onRedo, this);
410
+ }
411
+ }
412
+ // @query('#align-left') private alignLeft!: HTMLElement
413
+ // @query('#align-center') private alignCenter!: HTMLElement
414
+ // @query('#align-right') private alignRight!: HTMLElement
415
+ // @query('#align-top') private alignTop!: HTMLElement
416
+ // @query('#align-middle') private alignMiddle!: HTMLElement
417
+ // @query('#align-bottom') private alignBottom!: HTMLElement
418
+ onSelectedChanged(after, before) {
419
+ var alignable = after.length > 1;
420
+ this.aligners.forEach(aligner => alignable ? aligner.removeAttribute('disabled') : aligner.setAttribute('disabled', ''));
421
+ var movable = after.length === 1;
422
+ /* forward, backward 이동은 한 컴포넌트만 가능하다. */
423
+ !movable ? this.forward.setAttribute('disabled', '') : this.forward.removeAttribute('disabled');
424
+ !movable ? this.backward.setAttribute('disabled', '') : this.backward.removeAttribute('disabled');
425
+ /* 여러 컴포넌트는 front, back 이동이 가능하다. */
426
+ !(alignable || movable) ? this.front.setAttribute('disabled', '') : this.front.removeAttribute('disabled');
427
+ !(alignable || movable) ? this.back.setAttribute('disabled', '') : this.back.removeAttribute('disabled');
428
+ }
429
+ onTapUndo() {
430
+ var _a;
431
+ (_a = this.scene) === null || _a === void 0 ? void 0 : _a.undo();
432
+ }
433
+ onTapRedo() {
434
+ var _a;
435
+ (_a = this.scene) === null || _a === void 0 ? void 0 : _a.redo();
436
+ }
437
+ onTapCut() {
438
+ var _a;
439
+ (_a = this.scene) === null || _a === void 0 ? void 0 : _a.cut();
440
+ }
441
+ async onTapCopy() {
442
+ var _a;
443
+ var copied = (_a = this.scene) === null || _a === void 0 ? void 0 : _a.copy();
444
+ if (!copied)
445
+ return;
446
+ await copyToClipboard(copied);
447
+ this.cliped = copied;
448
+ }
449
+ onTapPaste() {
450
+ setTimeout(() => {
451
+ var _a;
452
+ this.cliped && ((_a = this.scene) === null || _a === void 0 ? void 0 : _a.paste(this.cliped));
453
+ }, 100);
454
+ }
455
+ onTapDelete() {
456
+ var _a;
457
+ (_a = this.scene) === null || _a === void 0 ? void 0 : _a.remove();
458
+ }
459
+ onTapSelectAll() {
460
+ var _a;
461
+ (_a = this.scene) === null || _a === void 0 ? void 0 : _a.select('(child)');
462
+ }
463
+ onTapFontIncrease(e) {
464
+ var _a, _b;
465
+ var selected = (_a = this.scene) === null || _a === void 0 ? void 0 : _a.selected;
466
+ if (!selected || !selected.length) {
467
+ return;
468
+ }
469
+ (_b = this.scene) === null || _b === void 0 ? void 0 : _b.undoableChange(function () {
470
+ selected.forEach(function (component) {
471
+ var fontSize = component.get('fontSize');
472
+ if (!fontSize)
473
+ fontSize = '15';
474
+ if (fontSize) {
475
+ var size = parseInt(fontSize);
476
+ component.set('fontSize', size + 1);
477
+ }
478
+ });
479
+ });
480
+ }
481
+ onTapFontDecrease(e) {
482
+ var _a, _b;
483
+ var selected = (_a = this.scene) === null || _a === void 0 ? void 0 : _a.selected;
484
+ if (!selected || !selected.length) {
485
+ return;
486
+ }
487
+ (_b = this.scene) === null || _b === void 0 ? void 0 : _b.undoableChange(function () {
488
+ selected.forEach(function (component) {
489
+ var fontSize = component.get('fontSize');
490
+ if (!fontSize)
491
+ fontSize = '15';
492
+ if (fontSize) {
493
+ var size = parseInt(fontSize);
494
+ if (size > 1)
495
+ component.set('fontSize', size - 1);
496
+ }
497
+ });
498
+ });
499
+ }
500
+ onTapAlign(e) {
501
+ if (!this.scene)
502
+ return;
503
+ var selected = this.scene.selected;
504
+ if (selected.length <= 1)
505
+ return;
506
+ var align = typeof e === 'string' ? e : e.target.getAttribute('data-align');
507
+ align && this.scene.align(align);
508
+ }
509
+ onTapZorder(e) {
510
+ if (!this.scene)
511
+ return;
512
+ var selected = this.scene.selected;
513
+ if (selected.length < 1)
514
+ return;
515
+ var zorder = typeof e === 'string' ? e : e.target.getAttribute('data-zorder');
516
+ zorder && this.scene.zorder(zorder);
517
+ }
518
+ onTapSymmetryX() {
519
+ this.scene && this.scene.symmetryX();
520
+ }
521
+ onTapSymmetryY() {
522
+ this.scene && this.scene.symmetryY();
523
+ }
524
+ onTapRotateCW() {
525
+ if (!this.scene)
526
+ return;
527
+ var selected = this.scene.selected;
528
+ if (selected.length && selected[0].isRootModel())
529
+ return;
530
+ this.scene.undoableChange(function () {
531
+ selected.forEach(function (component) {
532
+ var rotation = component.get('rotation');
533
+ if (!rotation)
534
+ rotation = 0;
535
+ component.set('rotation', (rotation + Math.PI / 2) % (Math.PI * 2));
536
+ });
537
+ });
538
+ }
539
+ onTapRotateCCW() {
540
+ if (!this.scene)
541
+ return;
542
+ var selected = this.scene.selected;
543
+ if (selected.length && selected[0].isRootModel())
544
+ return;
545
+ this.scene.undoableChange(function () {
546
+ selected.forEach(function (component) {
547
+ var rotation = component.get('rotation');
548
+ if (!rotation)
549
+ rotation = 0;
550
+ component.set('rotation', (rotation - Math.PI / 2) % (Math.PI * 2));
551
+ });
552
+ });
553
+ }
554
+ onTapGroup() {
555
+ this.scene && this.scene.group();
556
+ }
557
+ onTapUngroup() {
558
+ this.scene && this.scene.ungroup();
559
+ }
560
+ onTapFullscreen() {
561
+ this.dispatchEvent(new CustomEvent('modeller-fullscreen'));
562
+ }
563
+ onTapToggle() {
564
+ this.hideProperty = !this.hideProperty;
565
+ this.dispatchEvent(new CustomEvent('hide-property-changed', {
566
+ bubbles: true,
567
+ composed: true,
568
+ detail: { value: this.hideProperty }
569
+ }));
570
+ }
571
+ onTapFitScene() {
572
+ if (this.scene) {
573
+ this.scene.resize();
574
+ this.scene.fit('ratio');
575
+ }
576
+ }
577
+ onTapPreview() {
578
+ this.dispatchEvent(new CustomEvent('open-preview'));
579
+ }
580
+ onTapDownloadModel() {
581
+ this.dispatchEvent(new CustomEvent('download-model'));
582
+ }
583
+ onTapDistribute(e) {
584
+ if (!this.scene)
585
+ return;
586
+ var selected = this.scene.selected;
587
+ if (selected.length <= 1) {
588
+ return;
589
+ }
590
+ var distribute = typeof e === 'string' ? e : e.target.getAttribute('data-distribute');
591
+ distribute && this.scene.distribute(distribute);
592
+ }
593
+ }
594
+ EditToolbar.styles = [style];
595
+ __decorate([
596
+ property({ type: Object })
597
+ ], EditToolbar.prototype, "scene", void 0);
598
+ __decorate([
599
+ property({ type: Array })
600
+ ], EditToolbar.prototype, "selected", void 0);
601
+ __decorate([
602
+ property({ type: Boolean })
603
+ ], EditToolbar.prototype, "hideProperty", void 0);
604
+ __decorate([
605
+ query('#redo')
606
+ ], EditToolbar.prototype, "redo", void 0);
607
+ __decorate([
608
+ query('#undo')
609
+ ], EditToolbar.prototype, "undo", void 0);
610
+ __decorate([
611
+ query('#fullscreen')
612
+ ], EditToolbar.prototype, "fullscreen", void 0);
613
+ __decorate([
614
+ query('#cut')
615
+ ], EditToolbar.prototype, "cut", void 0);
616
+ __decorate([
617
+ query('#copy')
618
+ ], EditToolbar.prototype, "copy", void 0);
619
+ __decorate([
620
+ query('#paste')
621
+ ], EditToolbar.prototype, "paste", void 0);
622
+ __decorate([
623
+ query('#delete')
624
+ ], EditToolbar.prototype, "delete", void 0);
625
+ __decorate([
626
+ query('#forward')
627
+ ], EditToolbar.prototype, "forward", void 0);
628
+ __decorate([
629
+ query('#backward')
630
+ ], EditToolbar.prototype, "backward", void 0);
631
+ __decorate([
632
+ query('#front')
633
+ ], EditToolbar.prototype, "front", void 0);
634
+ __decorate([
635
+ query('#back')
636
+ ], EditToolbar.prototype, "back", void 0);
637
+ __decorate([
638
+ queryAll('[data-align]')
639
+ ], EditToolbar.prototype, "aligners", void 0);
640
+ __decorate([
641
+ queryAll('[data-zorder]')
642
+ ], EditToolbar.prototype, "zorders", void 0);
643
+ __decorate([
644
+ queryAll('[data-distribute]')
645
+ ], EditToolbar.prototype, "distributes", void 0);
646
+ //# sourceMappingURL=edit-toolbar.js.map