@hatiolab/things-scene 9.0.0-beta.2 → 9.0.0-beta.21

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 (341) hide show
  1. package/db.sqlite +0 -0
  2. package/dist/animation/animate.d.ts +4 -0
  3. package/dist/animation/animations/animation.d.ts +14 -0
  4. package/dist/animation/animations/fade.d.ts +4 -0
  5. package/dist/animation/animations/heartbeat.d.ts +4 -0
  6. package/dist/animation/animations/moving.d.ts +4 -0
  7. package/dist/animation/animations/outline.d.ts +10 -0
  8. package/dist/animation/animations/rotation.d.ts +4 -0
  9. package/dist/animation/animations/vibration.d.ts +4 -0
  10. package/dist/animation/compile.d.ts +1 -0
  11. package/dist/animation/delta.d.ts +19 -0
  12. package/dist/animation/index.d.ts +1 -0
  13. package/dist/command/command-change.d.ts +7 -0
  14. package/dist/command/command-migrate.d.ts +4 -0
  15. package/dist/command/command-migrate.js +85 -0
  16. package/dist/command/command-migrate.js.map +1 -0
  17. package/dist/command/command.d.ts +5 -0
  18. package/dist/command/snapshot-commander.d.ts +15 -0
  19. package/dist/components/anchor/anchor.d.ts +128 -0
  20. package/dist/components/anchor/ellipse-anchors.d.ts +2 -0
  21. package/dist/components/anchor/ellipse-anchors.js +38 -0
  22. package/dist/components/anchor/ellipse-anchors.js.map +1 -0
  23. package/dist/components/anchor/rect-anchors.d.ts +10 -0
  24. package/dist/components/audio.d.ts +25 -0
  25. package/dist/components/audio.js +141 -0
  26. package/dist/components/audio.js.map +1 -0
  27. package/dist/components/cloud.d.ts +13 -0
  28. package/dist/components/cloud.js +31 -0
  29. package/dist/components/cloud.js.map +1 -0
  30. package/dist/components/component.d.ts +227 -0
  31. package/dist/components/component.js +912 -0
  32. package/dist/components/component.js.map +1 -0
  33. package/dist/components/container-abstract.d.ts +51 -0
  34. package/dist/components/container-abstract.js +372 -0
  35. package/dist/components/container-abstract.js.map +1 -0
  36. package/dist/components/container.d.ts +38 -0
  37. package/dist/components/container.js +75 -0
  38. package/dist/components/container.js.map +1 -0
  39. package/dist/components/data/data-mapping.d.ts +16 -0
  40. package/dist/components/data/data.d.ts +8 -0
  41. package/dist/components/data/evaluator.d.ts +1 -0
  42. package/dist/components/donut.d.ts +15 -0
  43. package/dist/components/donut.js +74 -0
  44. package/dist/components/donut.js.map +1 -0
  45. package/dist/components/drawer/draw-image-pendable.d.ts +1 -0
  46. package/dist/components/drawer/effect.d.ts +1 -0
  47. package/dist/components/drawer/fill.d.ts +14 -0
  48. package/dist/components/drawer/format.d.ts +1 -0
  49. package/dist/components/drawer/line.d.ts +3 -0
  50. package/dist/components/drawer/stroke.d.ts +1 -0
  51. package/dist/components/drawer/text-wrapper.d.ts +10 -0
  52. package/dist/components/drawer/text.d.ts +3 -0
  53. package/dist/components/ellipse.d.ts +35 -0
  54. package/dist/components/ellipse.js +99 -0
  55. package/dist/components/ellipse.js.map +1 -0
  56. package/dist/components/file/ondropfile.d.ts +1 -0
  57. package/dist/components/fit/fit.d.ts +15 -0
  58. package/dist/components/geometry/transcoord.d.ts +41 -0
  59. package/dist/components/geometry/union.d.ts +6 -0
  60. package/dist/components/gif-view.d.ts +18 -0
  61. package/dist/components/gif-view.js +116 -0
  62. package/dist/components/gif-view.js.map +1 -0
  63. package/dist/components/global-ref.d.ts +36 -0
  64. package/dist/components/global-ref.js +128 -0
  65. package/dist/components/global-ref.js.map +1 -0
  66. package/dist/components/group.d.ts +15 -0
  67. package/dist/components/group.js +145 -0
  68. package/dist/components/group.js.map +1 -0
  69. package/dist/components/html/elements.d.ts +2 -0
  70. package/dist/components/html/fill.d.ts +1 -0
  71. package/dist/components/html/reposition.d.ts +1 -0
  72. package/dist/components/html/shadow.d.ts +1 -0
  73. package/dist/components/html-overlay-container.d.ts +27 -0
  74. package/dist/components/html-overlay-container.js +14 -0
  75. package/dist/components/html-overlay-container.js.map +1 -0
  76. package/dist/components/html-overlay-element.d.ts +25 -0
  77. package/dist/components/html-overlay-element.js +9 -0
  78. package/dist/components/html-overlay-element.js.map +1 -0
  79. package/dist/components/image-view.d.ts +19 -0
  80. package/dist/components/image-view.js +180 -0
  81. package/dist/components/image-view.js.map +1 -0
  82. package/dist/components/index.d.ts +32 -0
  83. package/dist/components/index.js +39 -0
  84. package/dist/components/index.js.map +1 -0
  85. package/dist/components/info-window.d.ts +41 -0
  86. package/dist/components/info-window.js +425 -0
  87. package/dist/components/info-window.js.map +1 -0
  88. package/dist/components/line.d.ts +91 -0
  89. package/dist/components/line.js +303 -0
  90. package/dist/components/line.js.map +1 -0
  91. package/dist/components/local-ref.d.ts +47 -0
  92. package/dist/components/local-ref.js +103 -0
  93. package/dist/components/local-ref.js.map +1 -0
  94. package/dist/components/mixins/connectable.d.ts +45 -0
  95. package/dist/components/mixins/data-source.d.ts +9 -0
  96. package/dist/components/mixins/html-element.d.ts +24 -0
  97. package/dist/components/mixins/move-handle.d.ts +11 -0
  98. package/dist/components/mixins/rect-path.d.ts +13 -0
  99. package/dist/components/mixins/value-holder.d.ts +18 -0
  100. package/dist/components/mutater/bounds.d.ts +10 -0
  101. package/dist/components/mutater/path.d.ts +5 -0
  102. package/dist/components/ortholine.d.ts +21 -0
  103. package/dist/components/ortholine.js +814 -0
  104. package/dist/components/ortholine.js.map +1 -0
  105. package/dist/components/outline/ellipse-outline.d.ts +4 -0
  106. package/dist/components/outline/ellipse-outline.js +11 -0
  107. package/dist/components/outline/ellipse-outline.js.map +1 -0
  108. package/dist/components/outline/path-outline.d.ts +1 -0
  109. package/dist/components/path.d.ts +5 -0
  110. package/dist/components/path.js +40 -0
  111. package/dist/components/path.js.map +1 -0
  112. package/dist/components/polygon.d.ts +40 -0
  113. package/dist/components/polygon.js +157 -0
  114. package/dist/components/polygon.js.map +1 -0
  115. package/dist/components/polyline.d.ts +18 -0
  116. package/dist/components/polyline.js +102 -0
  117. package/dist/components/polyline.js.map +1 -0
  118. package/dist/components/popup.d.ts +48 -0
  119. package/dist/components/popup.js +138 -0
  120. package/dist/components/popup.js.map +1 -0
  121. package/dist/components/rect.d.ts +26 -0
  122. package/dist/components/rect.js +91 -0
  123. package/dist/components/rect.js.map +1 -0
  124. package/dist/components/retention/retention-manager.d.ts +8 -0
  125. package/dist/components/root-container.d.ts +90 -0
  126. package/dist/components/root-container.js +478 -0
  127. package/dist/components/root-container.js.map +1 -0
  128. package/dist/components/ruler.d.ts +16 -0
  129. package/dist/components/ruler.js +77 -0
  130. package/dist/components/ruler.js.map +1 -0
  131. package/dist/components/shape.d.ts +25 -0
  132. package/dist/components/shape.js +80 -0
  133. package/dist/components/shape.js.map +1 -0
  134. package/dist/components/star.d.ts +13 -0
  135. package/dist/components/star.js +80 -0
  136. package/dist/components/star.js.map +1 -0
  137. package/dist/components/text/substitutor.d.ts +3 -0
  138. package/dist/components/text.d.ts +8 -0
  139. package/dist/components/text.js +15 -0
  140. package/dist/components/text.js.map +1 -0
  141. package/dist/components/three-container.d.ts +60 -0
  142. package/dist/components/three-container.js +515 -0
  143. package/dist/components/three-container.js.map +1 -0
  144. package/dist/components/triangle.d.ts +15 -0
  145. package/dist/components/triangle.js +76 -0
  146. package/dist/components/triangle.js.map +1 -0
  147. package/dist/const.d.ts +39 -0
  148. package/dist/core/collection.d.ts +8 -0
  149. package/dist/core/debug.d.ts +1 -0
  150. package/dist/core/deep-equals.d.ts +1 -0
  151. package/dist/core/dom-to-image.d.ts +127 -0
  152. package/dist/core/event.d.ts +92 -0
  153. package/dist/core/index.d.ts +2 -0
  154. package/dist/core/list.d.ts +32 -0
  155. package/dist/core/logger.d.ts +3 -0
  156. package/dist/core/memoize.d.ts +6 -0
  157. package/dist/core/mixin.d.ts +1 -0
  158. package/dist/core/obj-accessor.d.ts +1 -0
  159. package/dist/core/reference-map.d.ts +14 -0
  160. package/dist/core/round-rect.d.ts +19 -0
  161. package/dist/core/script-loader.d.ts +3 -0
  162. package/dist/core/snapshot-taker.d.ts +12 -0
  163. package/dist/core/stack.d.ts +2 -0
  164. package/dist/core/timecapsule.d.ts +18 -0
  165. package/dist/core/utils.d.ts +9 -0
  166. package/dist/decorator/anchors-decorator.d.ts +31 -0
  167. package/dist/decorator/data-spread-decorator.d.ts +1 -0
  168. package/dist/decorator/decotag-decorator.d.ts +1 -0
  169. package/dist/decorator/index.d.ts +2 -0
  170. package/dist/decorator/link-decorator.d.ts +1 -0
  171. package/dist/effect/gradation.d.ts +1 -0
  172. package/dist/effect/index.d.ts +1 -0
  173. package/dist/effect/shadow.d.ts +2 -0
  174. package/dist/effect/turn.d.ts +1 -0
  175. package/dist/event/event-engine.d.ts +12 -0
  176. package/dist/event/event-pump.d.ts +11 -0
  177. package/dist/event/event-tracker.d.ts +21 -0
  178. package/dist/event/index.d.ts +2 -0
  179. package/dist/event/ua-event-handler.d.ts +32 -0
  180. package/dist/event-map/event-map.d.ts +9 -0
  181. package/dist/event-map/index.d.ts +1 -0
  182. package/dist/event-map/move-handler.d.ts +1 -0
  183. package/dist/event-map/text-editor-lite.d.ts +1 -0
  184. package/dist/index.d.ts +1 -0
  185. package/dist/index.js +3 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/layer/action/emphasize.d.ts +2 -0
  188. package/dist/layer/action/popup.d.ts +5 -0
  189. package/dist/layer/action/pressed.d.ts +2 -0
  190. package/dist/layer/add-layer.d.ts +42 -0
  191. package/dist/layer/add-layer.js +142 -0
  192. package/dist/layer/add-layer.js.map +1 -0
  193. package/dist/layer/decotag-layer.d.ts +27 -0
  194. package/dist/layer/decotag-layer.js +105 -0
  195. package/dist/layer/decotag-layer.js.map +1 -0
  196. package/dist/layer/guide-layer.d.ts +44 -0
  197. package/dist/layer/guide-layer.js +261 -0
  198. package/dist/layer/guide-layer.js.map +1 -0
  199. package/dist/layer/index.d.ts +7 -0
  200. package/dist/layer/index.js +11 -0
  201. package/dist/layer/index.js.map +1 -0
  202. package/dist/layer/layer.d.ts +32 -0
  203. package/dist/layer/layer.js +155 -0
  204. package/dist/layer/layer.js.map +1 -0
  205. package/dist/layer/model-layer.d.ts +46 -0
  206. package/dist/layer/model-layer.js +402 -0
  207. package/dist/layer/model-layer.js.map +1 -0
  208. package/dist/layer/modeler/anchor-handler.d.ts +36 -0
  209. package/dist/layer/modeler/control-handler.d.ts +18 -0
  210. package/dist/layer/modeler/focus-outline.d.ts +5 -0
  211. package/dist/layer/modeler/group-outline.d.ts +5 -0
  212. package/dist/layer/modeler/index.d.ts +7 -0
  213. package/dist/layer/modeler/path-handler.d.ts +22 -0
  214. package/dist/layer/modeler/resizer.d.ts +13 -0
  215. package/dist/layer/modeler/rotator.d.ts +15 -0
  216. package/dist/layer/modeler/rotator.js +120 -0
  217. package/dist/layer/modeler/rotator.js.map +1 -0
  218. package/dist/layer/modeling-layer.d.ts +66 -0
  219. package/dist/layer/modeling-layer.js +451 -0
  220. package/dist/layer/modeling-layer.js.map +1 -0
  221. package/dist/layer/selection/selected-finder.d.ts +1 -0
  222. package/dist/layer/selection-layer.d.ts +42 -0
  223. package/dist/layer/selection-layer.js +307 -0
  224. package/dist/layer/selection-layer.js.map +1 -0
  225. package/dist/layer/shift-layer.d.ts +18 -0
  226. package/dist/layer/shift-layer.js +61 -0
  227. package/dist/layer/shift-layer.js.map +1 -0
  228. package/dist/layout/absolute.d.ts +8 -0
  229. package/dist/layout/card.d.ts +7 -0
  230. package/dist/layout/html-absolute.d.ts +8 -0
  231. package/dist/layout/index.d.ts +8 -0
  232. package/dist/layout/index.js +12 -0
  233. package/dist/layout/index.js.map +1 -0
  234. package/dist/layout/layout.d.ts +11 -0
  235. package/dist/layout/linear-horizontal.d.ts +7 -0
  236. package/dist/layout/linear-vertical.d.ts +7 -0
  237. package/dist/layout/table.d.ts +9 -0
  238. package/dist/layout/three.d.ts +8 -0
  239. package/dist/layout/three.js +20 -0
  240. package/dist/layout/three.js.map +1 -0
  241. package/dist/license/license.d.ts +18 -0
  242. package/dist/model/compile.d.ts +1 -0
  243. package/dist/model/compile.js +28 -0
  244. package/dist/model/compile.js.map +1 -0
  245. package/dist/model/duplicate.d.ts +1 -0
  246. package/dist/model/index.d.ts +3 -0
  247. package/dist/model/selector.d.ts +2 -0
  248. package/dist/style/compile.d.ts +1 -0
  249. package/dist/style/index.d.ts +1 -0
  250. package/dist/things-scene/api/add-start.d.ts +1 -0
  251. package/dist/things-scene/api/add.d.ts +5 -0
  252. package/dist/things-scene/api/align.d.ts +1 -0
  253. package/dist/things-scene/api/change.d.ts +2 -0
  254. package/dist/things-scene/api/clipboard.d.ts +3 -0
  255. package/dist/things-scene/api/distribute.d.ts +1 -0
  256. package/dist/things-scene/api/duplicate.d.ts +4 -0
  257. package/dist/things-scene/api/fullscreen.d.ts +1 -0
  258. package/dist/things-scene/api/group.d.ts +8 -0
  259. package/dist/things-scene/api/group.js +78 -0
  260. package/dist/things-scene/api/group.js.map +1 -0
  261. package/dist/things-scene/api/ids.d.ts +4 -0
  262. package/dist/things-scene/api/index.d.ts +15 -0
  263. package/dist/things-scene/api/listener.d.ts +3 -0
  264. package/dist/things-scene/api/remove.d.ts +4 -0
  265. package/dist/things-scene/api/symmetry.d.ts +2 -0
  266. package/dist/things-scene/api/symmetry.js +39 -0
  267. package/dist/things-scene/api/symmetry.js.map +1 -0
  268. package/dist/things-scene/api/to-data-url.d.ts +1 -0
  269. package/dist/things-scene/api/to-data-url.js +69 -0
  270. package/dist/things-scene/api/to-data-url.js.map +1 -0
  271. package/dist/things-scene/api/zorder.d.ts +2 -0
  272. package/dist/things-scene/application-context.d.ts +40 -0
  273. package/dist/things-scene/config.d.ts +4 -0
  274. package/dist/things-scene/create.d.ts +20 -0
  275. package/dist/things-scene/fps.d.ts +1 -0
  276. package/dist/things-scene/index.d.ts +17 -0
  277. package/dist/things-scene/index.js +23 -0
  278. package/dist/things-scene/index.js.map +1 -0
  279. package/dist/things-scene/polyfill.d.ts +2 -0
  280. package/dist/things-scene/scene.d.ts +155 -0
  281. package/dist/things-scene/version.d.ts +2 -0
  282. package/dist/threed/common.d.ts +22 -0
  283. package/dist/threed/control/three-controls.d.ts +11 -0
  284. package/dist/threed/control/three-controls.js +620 -0
  285. package/dist/threed/control/three-controls.js.map +1 -0
  286. package/dist/threed/html/elements.d.ts +2 -0
  287. package/dist/threed/real-object-camera-meshed.d.ts +12 -0
  288. package/dist/threed/real-object-camera-meshed.js +49 -0
  289. package/dist/threed/real-object-camera-meshed.js.map +1 -0
  290. package/dist/threed/real-object-camera.d.ts +9 -0
  291. package/dist/threed/real-object-camera.js +31 -0
  292. package/dist/threed/real-object-camera.js.map +1 -0
  293. package/dist/threed/real-object-dom-element.d.ts +20 -0
  294. package/dist/threed/real-object-dom-element.js +78 -0
  295. package/dist/threed/real-object-dom-element.js.map +1 -0
  296. package/dist/threed/real-object-dummy.d.ts +6 -0
  297. package/dist/threed/real-object-dummy.js +11 -0
  298. package/dist/threed/real-object-dummy.js.map +1 -0
  299. package/dist/threed/real-object-extrude.d.ts +19 -0
  300. package/dist/threed/real-object-extrude.js +171 -0
  301. package/dist/threed/real-object-extrude.js.map +1 -0
  302. package/dist/threed/real-object-gltf.d.ts +15 -0
  303. package/dist/threed/real-object-gltf.js +97 -0
  304. package/dist/threed/real-object-gltf.js.map +1 -0
  305. package/dist/threed/real-object-group.d.ts +5 -0
  306. package/dist/threed/real-object-group.js +11 -0
  307. package/dist/threed/real-object-group.js.map +1 -0
  308. package/dist/threed/real-object-mesh.d.ts +11 -0
  309. package/dist/threed/real-object-mesh.js +55 -0
  310. package/dist/threed/real-object-mesh.js.map +1 -0
  311. package/dist/threed/real-object-plane.d.ts +6 -0
  312. package/dist/threed/real-object-plane.js +23 -0
  313. package/dist/threed/real-object-plane.js.map +1 -0
  314. package/dist/threed/real-object-scene.d.ts +21 -0
  315. package/dist/threed/real-object-scene.js +89 -0
  316. package/dist/threed/real-object-scene.js.map +1 -0
  317. package/dist/threed/real-object-sprite.d.ts +12 -0
  318. package/dist/threed/real-object-sprite.js +35 -0
  319. package/dist/threed/real-object-sprite.js.map +1 -0
  320. package/dist/threed/real-object-text.d.ts +16 -0
  321. package/dist/threed/real-object-text.js +70 -0
  322. package/dist/threed/real-object-text.js.map +1 -0
  323. package/dist/threed/real-object.d.ts +48 -0
  324. package/dist/threed/real-object.js +199 -0
  325. package/dist/threed/real-object.js.map +1 -0
  326. package/dist/threed/texture/text-texture.d.ts +8 -0
  327. package/dist/threed/three-dimensional-container.d.ts +7 -0
  328. package/dist/threed/three-dimensional-container.js +2 -0
  329. package/dist/threed/three-dimensional-container.js.map +1 -0
  330. package/dist/threed/utils/bound-uv-generator.d.ts +16 -0
  331. package/dist/types.d.ts +53 -0
  332. package/dist/types.js +368 -0
  333. package/dist/types.js.map +1 -0
  334. package/package.json +5 -2
  335. package/schema.graphql +5 -0
  336. package/things-scene-ie.js +1 -1
  337. package/things-scene-ie.js.LICENSE.txt +22 -0
  338. package/things-scene-min.js +1 -1
  339. package/things-scene-min.js.LICENSE.txt +22 -0
  340. package/things-scene.d.ts +13 -1
  341. package/things-scene.mjs +34 -14
@@ -0,0 +1,402 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import Component from '../components/component';
5
+ import InfoWindow from '../components/info-window';
6
+ import HTMLAbsoluteLayout from '../layout/html-absolute';
7
+ import * as Emphasize from './action/emphasize';
8
+ import ScenePopup from './action/popup';
9
+ import * as Pressed from './action/pressed';
10
+ import Layer from './layer';
11
+ const SCALE_DEFAULT = { x: 1, y: 1 };
12
+ const TRANSLATE_DEFAULT = { x: 0, y: 0 };
13
+ export default class ModelLayer extends Layer {
14
+ constructor(x, y) {
15
+ super(x, y);
16
+ }
17
+ dispose() {
18
+ super.dispose();
19
+ delete this._canvas;
20
+ delete this._overlay;
21
+ }
22
+ contains(x, y) {
23
+ return true;
24
+ }
25
+ isRootModel() {
26
+ return true;
27
+ }
28
+ get stuck() {
29
+ return true;
30
+ }
31
+ get layout() {
32
+ /* reflow 시 하위 html-component들의 reposition을 수행하도록 함. */
33
+ return HTMLAbsoluteLayout;
34
+ }
35
+ get overlay() {
36
+ if (!this._overlay) {
37
+ var overlay = document.createElement('div');
38
+ overlay.style.position = 'absolute';
39
+ overlay.style.width = 0;
40
+ overlay.style.height = 0;
41
+ overlay.style.overflow = 'initial';
42
+ overlay.style['user-select'] = 'none';
43
+ overlay.style['transform-origin'] = 'top left';
44
+ this.element && this.element.appendChild(overlay);
45
+ this._overlay = overlay;
46
+ this._repositionOverlay();
47
+ }
48
+ return this._overlay;
49
+ }
50
+ createElement() {
51
+ var anchor = document.createElement('div');
52
+ anchor.style.position = 'absolute';
53
+ anchor.style['user-select'] = 'none';
54
+ anchor.style.overflow = 'hidden';
55
+ this._canvas = Component.createCanvas(1, 1);
56
+ this._canvas.style.position = 'absolute';
57
+ anchor.appendChild(this._canvas);
58
+ if (this._overlay)
59
+ anchor.appendChild(this._overlay);
60
+ return anchor;
61
+ }
62
+ resize() {
63
+ if (!this.target) {
64
+ return;
65
+ }
66
+ var { width: modelWidth, height: modelHeight, fitMode } = this.model;
67
+ if (this.root.fitMode) {
68
+ fitMode = this.root.fitMode;
69
+ }
70
+ else if (!fitMode) {
71
+ fitMode = 'ratio';
72
+ }
73
+ try {
74
+ var style = getComputedStyle(this.target);
75
+ }
76
+ catch (e) {
77
+ console.error(e, this.target);
78
+ return;
79
+ }
80
+ var width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth;
81
+ var height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight;
82
+ switch (fitMode) {
83
+ case 'both':
84
+ case 'ratio':
85
+ // width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth
86
+ // height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight
87
+ break;
88
+ case 'width':
89
+ // width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth
90
+ height = (modelHeight * width) / modelWidth;
91
+ break;
92
+ case 'height':
93
+ // height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight
94
+ width = (modelWidth * height) / modelHeight;
95
+ break;
96
+ case 'center':
97
+ case 'none':
98
+ default:
99
+ width = Math.max(modelWidth, width);
100
+ height = Math.max(modelHeight, height);
101
+ }
102
+ this.fitSize(this.canvas, true, width, height);
103
+ switch (fitMode) {
104
+ case 'ratio':
105
+ case 'both':
106
+ break;
107
+ case 'width':
108
+ this.element.style.overflowX = 'hidden';
109
+ this.element.style.overflowY = 'auto';
110
+ break;
111
+ case 'height':
112
+ this.element.style.overflowX = 'auto';
113
+ this.element.style.overflowY = 'hidden';
114
+ break;
115
+ case 'center':
116
+ case 'none':
117
+ default:
118
+ this.element.style.overflowX = width > modelWidth ? 'hidden' : 'auto';
119
+ this.element.style.overflowY = height > modelHeight ? 'hidden' : 'auto';
120
+ }
121
+ /* element는 항상 부모의 크기에 맞춘다. */
122
+ this.fitSize(this.element, true);
123
+ }
124
+ get canvas() {
125
+ return this._canvas;
126
+ }
127
+ /* Pixel하나가 차지하는 길이의 값 환산 */
128
+ get MPP() {
129
+ var { scale = { x: 1, y: 1 }, unit } = this.model;
130
+ switch (unit) {
131
+ case 'mm':
132
+ case 'cm':
133
+ return 1 / this.app.PPM / scale.x;
134
+ case 'in':
135
+ return 1 / this.app.PPI / scale.x;
136
+ case 'px':
137
+ default:
138
+ return 1 / scale.x;
139
+ }
140
+ }
141
+ /*
142
+ * capturePath(path) 파라미터로 주어진 path를 포함하는 컨테이너를 찾는다.
143
+ * @path
144
+ * @excepts 컨테이너를 찾을 때 제외되는 대상이다.
145
+ */
146
+ capturePath(path, excepts) {
147
+ var capturables = this.layout.capturables(this);
148
+ for (let i = capturables.length - 1; i >= 0; i--) {
149
+ let capturable = capturables[i];
150
+ if (!capturable.isContainer())
151
+ continue;
152
+ let found = capturable.capturePath(path, excepts);
153
+ if (found)
154
+ return found;
155
+ }
156
+ return false;
157
+ }
158
+ get eventMap() {
159
+ return {
160
+ '(self)': {
161
+ '(all)': {
162
+ change: this._onchanged_all,
163
+ mouseenter: this._onmouseenter_all,
164
+ mouseleave: this._onmouseleave_all,
165
+ click: this._onclick,
166
+ mousedown: this._onmousedownup,
167
+ mouseup: this._onmousedownup,
168
+ touchstart: this._onmousedownup,
169
+ touchend: this._onmousedownup
170
+ }
171
+ }
172
+ };
173
+ }
174
+ closeScene(data) {
175
+ requestAnimationFrame(() => this.overlay.dispatchEvent(new CustomEvent('close-scene', {
176
+ bubbles: true,
177
+ composed: true,
178
+ detail: data
179
+ })));
180
+ }
181
+ _repositionOverlay() {
182
+ var overlay = this._overlay;
183
+ if (!overlay)
184
+ return;
185
+ var { translate = TRANSLATE_DEFAULT, scale = SCALE_DEFAULT, rotation = 0 } = this.model;
186
+ var { left, top, width, height } = this.bounds;
187
+ overlay.style.left = left + 'px';
188
+ overlay.style.top = top + 'px';
189
+ /*
190
+ * overlay가 마우스 이벤트를 받게되면, scale이 반영되지 않은 좌표로 이벤트가 발생하므로,
191
+ * 마우스 이벤트를 직접 받지 못하도록 크기를 0로 유지한다.
192
+ */
193
+ // overlay.style['user-select'] = 'none';
194
+ // overlay.style.width = 0 + 'px';
195
+ // overlay.style.height = 0 + 'px';
196
+ /* CONFIRM-ME `transform: perspective(1px)` 스타일 설정은 scaling된 dom element를 좀 더 선명하게 보이도록 해준다. (Chrome 브라우저에서) */
197
+ var transform = `rotate(${rotation}rad) scale(${scale.x}, ${scale.y}) perspective(1px)`;
198
+ overlay.style['margin-left'] = translate.x + 'px';
199
+ overlay.style['margin-top'] = translate.y + 'px';
200
+ ['-webkit-', '-moz-', '-ms-', '-o-', ''].forEach(prefix => {
201
+ overlay.style[prefix + 'transform'] = transform;
202
+ });
203
+ }
204
+ onchange(after) {
205
+ // Root Component는 id, class, text 속성을 가지지 않는다.
206
+ var model = this._model;
207
+ delete model.id;
208
+ delete model.text;
209
+ delete model.class;
210
+ this._repositionOverlay();
211
+ }
212
+ _onchanged_all(after, before, hint) {
213
+ this.invalidate();
214
+ }
215
+ _onmouseenter_all(event, hint) {
216
+ event.stopPropagation();
217
+ if (!this.app || this.app.isEditMode)
218
+ return;
219
+ if (!hint)
220
+ return;
221
+ var source = hint.origin;
222
+ // model-layer는 hover event를 처리하지 않는다.
223
+ if (source instanceof ModelLayer || !source.model.event || !source.model.event.hover)
224
+ return;
225
+ if (source.hidden)
226
+ return;
227
+ var hoverEvtModel = source.model.event.hover;
228
+ hoverEvtModel && this._doEventAction(hoverEvtModel, source, true, event);
229
+ }
230
+ _onmouseleave_all(event, hint) {
231
+ event.stopPropagation();
232
+ if (!hint) {
233
+ return;
234
+ }
235
+ var source = hint.origin;
236
+ if (!this.app || this.app.isEditMode) {
237
+ return;
238
+ }
239
+ var hoverEvtModel = source.model.event && source.model.event.hover;
240
+ hoverEvtModel && this._doEventAction(hoverEvtModel, source, false, event);
241
+ }
242
+ _onclick(event, hint) {
243
+ event.stopPropagation();
244
+ if (this.app.isEditMode)
245
+ return;
246
+ if (!hint)
247
+ return;
248
+ var source = hint.origin;
249
+ var tapEvtModel = source.model.event && source.model.event.tap;
250
+ tapEvtModel && this._doEventAction(tapEvtModel, source, true, event);
251
+ }
252
+ _onmousedownup(event, hint) {
253
+ event.stopPropagation();
254
+ if (this.app.isEditMode)
255
+ return;
256
+ if (!hint)
257
+ return;
258
+ var source = hint.origin;
259
+ var tapEvtModel = source.model.event && source.model.event.tap;
260
+ tapEvtModel &&
261
+ tapEvtModel.pressed &&
262
+ this._doMouseDownUpEventAction(tapEvtModel, source, event.type == 'mousedown' || event.type == 'touchstart', event);
263
+ }
264
+ _doMouseDownUpEventAction(event, component, enter, org_event) {
265
+ var { pressed = false } = event;
266
+ if (!pressed) {
267
+ return;
268
+ }
269
+ if (enter) {
270
+ Pressed.pressed(component);
271
+ }
272
+ else {
273
+ Pressed.normalize(component);
274
+ }
275
+ }
276
+ _doEventAction(event, component, enter, org_event) {
277
+ var _a;
278
+ var { action, target, value, emphasize = false, restore = false, pressed = false, options } = event;
279
+ if (target) {
280
+ target = component.access(target);
281
+ }
282
+ if (value) {
283
+ value = component.access(value);
284
+ }
285
+ // IMPLEMENT-ME
286
+ if (emphasize) {
287
+ if (enter) {
288
+ Emphasize.emphasize(component);
289
+ }
290
+ else if (restore) {
291
+ Emphasize.normalize(component);
292
+ }
293
+ }
294
+ if (!action)
295
+ return;
296
+ switch (action) {
297
+ case 'data-toggle':
298
+ if (!target)
299
+ return;
300
+ (enter || restore) &&
301
+ this.root.findAll(target, component).forEach(component => {
302
+ component.data = !component.data;
303
+ });
304
+ break;
305
+ case 'data-tristate':
306
+ if (!target)
307
+ return;
308
+ (enter || restore) &&
309
+ this.root.findAll(target, component).forEach(component => {
310
+ let number = Math.round(Math.max(Number(component.data) || 0, 0));
311
+ component.data = (number + (enter ? 1 : 2)) % 3;
312
+ });
313
+ break;
314
+ case 'data-set':
315
+ if (!target)
316
+ return;
317
+ if (enter) {
318
+ var data = value;
319
+ this.root.findAll(target, component).forEach(comp => {
320
+ comp.data = data;
321
+ });
322
+ }
323
+ else if (restore) {
324
+ // TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.
325
+ // data-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.
326
+ }
327
+ break;
328
+ case 'value-set':
329
+ if (!target)
330
+ return;
331
+ if (enter) {
332
+ var data = value;
333
+ this.root.findAll(target, component).forEach(comp => {
334
+ comp.value = data;
335
+ });
336
+ }
337
+ else if (restore) {
338
+ // TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.
339
+ // value-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.
340
+ }
341
+ break;
342
+ case 'infoWindow':
343
+ case 'info-window':
344
+ if (!target)
345
+ return;
346
+ if (org_event.type == 'click') {
347
+ InfoWindow.show(component, target, restore /* close button */, {
348
+ x: org_event.offsetX,
349
+ y: org_event.offsetY
350
+ });
351
+ }
352
+ else {
353
+ if (enter) {
354
+ InfoWindow.show(component, target, restore /* auto close - no close button */, {
355
+ x: org_event.offsetX,
356
+ y: org_event.offsetY
357
+ });
358
+ }
359
+ else if (restore) {
360
+ InfoWindow.hide(component, target);
361
+ }
362
+ }
363
+ break;
364
+ case 'toggle-info-window':
365
+ if (!target)
366
+ return;
367
+ InfoWindow.toggle(component, target, false, {
368
+ x: org_event.offsetX,
369
+ y: org_event.offsetY
370
+ });
371
+ break;
372
+ case 'popup':
373
+ case 'modal-popup':
374
+ if (!target)
375
+ return;
376
+ /*
377
+ For backward compatibility,
378
+ if the option is not set, it is assumed that the component's own data is input and the result output is received.
379
+ */
380
+ let input = !options ? '(self)' : 'input' in options ? options.input : '(self)';
381
+ let output = !options ? true : 'output' in options ? options.output : true;
382
+ // for things-scene model version >= 1.1
383
+ ScenePopup.show(component, target, {
384
+ data: input && ((_a = this.root.findFirst(input, component)) === null || _a === void 0 ? void 0 : _a.data),
385
+ output /* boolean - specifies whether to receive a return value from the popup or not. */,
386
+ modal: action === 'modal-popup'
387
+ });
388
+ break;
389
+ case 'close-scene':
390
+ this.closeScene(component.data);
391
+ break;
392
+ case 'goto':
393
+ this.trigger(action, target, options, component);
394
+ break;
395
+ default:
396
+ this.trigger(action, target, value, component);
397
+ }
398
+ }
399
+ }
400
+ ModelLayer.Popup = ScenePopup;
401
+ Component.register('model-layer', ModelLayer);
402
+ //# sourceMappingURL=model-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-layer.js","sourceRoot":"","sources":["../../src/layer/model-layer.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from '../components/component'\nimport InfoWindow from '../components/info-window'\nimport HTMLAbsoluteLayout from '../layout/html-absolute'\nimport * as Emphasize from './action/emphasize'\nimport ScenePopup from './action/popup'\nimport * as Pressed from './action/pressed'\nimport Layer from './layer'\n\nconst SCALE_DEFAULT = { x: 1, y: 1 }\nconst TRANSLATE_DEFAULT = { x: 0, y: 0 }\n\nexport default class ModelLayer extends Layer {\n constructor(x, y) {\n super(x, y)\n }\n\n dispose() {\n super.dispose()\n\n delete this._canvas\n delete this._overlay\n }\n\n contains(x, y) {\n return true\n }\n\n isRootModel() {\n return true\n }\n\n get stuck() {\n return true\n }\n\n get layout() {\n /* reflow 시 하위 html-component들의 reposition을 수행하도록 함. */\n return HTMLAbsoluteLayout\n }\n\n get overlay() {\n if (!this._overlay) {\n var overlay = document.createElement('div')\n overlay.style.position = 'absolute'\n overlay.style.width = 0\n overlay.style.height = 0\n overlay.style.overflow = 'initial'\n\n overlay.style['user-select'] = 'none'\n overlay.style['transform-origin'] = 'top left'\n\n this.element && this.element.appendChild(overlay)\n this._overlay = overlay\n this._repositionOverlay()\n }\n\n return this._overlay\n }\n\n createElement() {\n var anchor = document.createElement('div')\n anchor.style.position = 'absolute'\n\n anchor.style['user-select'] = 'none'\n anchor.style.overflow = 'hidden'\n\n this._canvas = Component.createCanvas(1, 1)\n\n this._canvas.style.position = 'absolute'\n anchor.appendChild(this._canvas)\n\n if (this._overlay) anchor.appendChild(this._overlay)\n\n return anchor\n }\n\n resize() {\n if (!this.target) {\n return\n }\n\n var { width: modelWidth, height: modelHeight, fitMode } = this.model\n\n if (this.root.fitMode) {\n fitMode = this.root.fitMode\n } else if (!fitMode) {\n fitMode = 'ratio'\n }\n\n try {\n var style = getComputedStyle(this.target)\n } catch (e) {\n console.error(e, this.target)\n return\n }\n var width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth\n var height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight\n\n switch (fitMode) {\n case 'both':\n case 'ratio':\n // width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth\n // height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight\n break\n case 'width':\n // width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth\n height = (modelHeight * width) / modelWidth\n break\n case 'height':\n // height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight\n width = (modelWidth * height) / modelHeight\n break\n case 'center':\n case 'none':\n default:\n width = Math.max(modelWidth, width)\n height = Math.max(modelHeight, height)\n }\n\n this.fitSize(this.canvas, true, width, height)\n\n switch (fitMode) {\n case 'ratio':\n case 'both':\n break\n case 'width':\n this.element.style.overflowX = 'hidden'\n this.element.style.overflowY = 'auto'\n break\n case 'height':\n this.element.style.overflowX = 'auto'\n this.element.style.overflowY = 'hidden'\n break\n case 'center':\n case 'none':\n default:\n this.element.style.overflowX = width > modelWidth ? 'hidden' : 'auto'\n this.element.style.overflowY = height > modelHeight ? 'hidden' : 'auto'\n }\n\n /* element는 항상 부모의 크기에 맞춘다. */\n this.fitSize(this.element, true)\n }\n\n get canvas() {\n return this._canvas\n }\n\n /* Pixel하나가 차지하는 길이의 값 환산 */\n get MPP() {\n var { scale = { x: 1, y: 1 }, unit } = this.model\n\n switch (unit) {\n case 'mm':\n case 'cm':\n return 1 / this.app.PPM / scale.x\n case 'in':\n return 1 / this.app.PPI / scale.x\n case 'px':\n default:\n return 1 / scale.x\n }\n }\n\n /*\n * capturePath(path) 파라미터로 주어진 path를 포함하는 컨테이너를 찾는다.\n * @path\n * @excepts 컨테이너를 찾을 때 제외되는 대상이다.\n */\n\n capturePath(path, excepts) {\n var capturables = this.layout.capturables(this)\n\n for (let i = capturables.length - 1; i >= 0; i--) {\n let capturable = capturables[i]\n if (!capturable.isContainer()) continue\n\n let found = capturable.capturePath(path, excepts)\n if (found) return found\n }\n\n return false\n }\n\n get eventMap() {\n return {\n '(self)': {\n '(all)': {\n change: this._onchanged_all,\n mouseenter: this._onmouseenter_all,\n mouseleave: this._onmouseleave_all,\n click: this._onclick,\n mousedown: this._onmousedownup,\n mouseup: this._onmousedownup,\n touchstart: this._onmousedownup,\n touchend: this._onmousedownup\n }\n }\n }\n }\n\n closeScene(data) {\n requestAnimationFrame(() =>\n this.overlay.dispatchEvent(\n new CustomEvent('close-scene', {\n bubbles: true,\n composed: true,\n detail: data\n })\n )\n )\n }\n\n _repositionOverlay() {\n var overlay = this._overlay\n\n if (!overlay) return\n\n var { translate = TRANSLATE_DEFAULT, scale = SCALE_DEFAULT, rotation = 0 } = this.model\n\n var { left, top, width, height } = this.bounds\n\n overlay.style.left = left + 'px'\n overlay.style.top = top + 'px'\n /*\n * overlay가 마우스 이벤트를 받게되면, scale이 반영되지 않은 좌표로 이벤트가 발생하므로,\n * 마우스 이벤트를 직접 받지 못하도록 크기를 0로 유지한다.\n */\n // overlay.style['user-select'] = 'none';\n // overlay.style.width = 0 + 'px';\n // overlay.style.height = 0 + 'px';\n\n /* CONFIRM-ME `transform: perspective(1px)` 스타일 설정은 scaling된 dom element를 좀 더 선명하게 보이도록 해준다. (Chrome 브라우저에서) */\n var transform = `rotate(${rotation}rad) scale(${scale.x}, ${scale.y}) perspective(1px)`\n overlay.style['margin-left'] = translate.x + 'px'\n overlay.style['margin-top'] = translate.y + 'px'\n ;['-webkit-', '-moz-', '-ms-', '-o-', ''].forEach(prefix => {\n overlay.style[prefix + 'transform'] = transform\n })\n }\n\n onchange(after) {\n // Root Component는 id, class, text 속성을 가지지 않는다.\n var model = this._model\n\n delete model.id\n delete model.text\n delete model.class\n\n this._repositionOverlay()\n }\n\n _onchanged_all(after, before, hint) {\n this.invalidate()\n }\n\n _onmouseenter_all(event, hint) {\n event.stopPropagation()\n\n if (!this.app || this.app.isEditMode) return\n\n if (!hint) return\n\n var source = hint.origin\n\n // model-layer는 hover event를 처리하지 않는다.\n if (source instanceof ModelLayer || !source.model.event || !source.model.event.hover) return\n\n if (source.hidden) return\n\n var hoverEvtModel = source.model.event.hover\n\n hoverEvtModel && this._doEventAction(hoverEvtModel, source, true, event)\n }\n\n _onmouseleave_all(event, hint) {\n event.stopPropagation()\n\n if (!hint) {\n return\n }\n\n var source = hint.origin\n\n if (!this.app || this.app.isEditMode) {\n return\n }\n\n var hoverEvtModel = source.model.event && source.model.event.hover\n\n hoverEvtModel && this._doEventAction(hoverEvtModel, source, false, event)\n }\n\n _onclick(event, hint) {\n event.stopPropagation()\n\n if (this.app.isEditMode) return\n\n if (!hint) return\n\n var source = hint.origin\n\n var tapEvtModel = source.model.event && source.model.event.tap\n\n tapEvtModel && this._doEventAction(tapEvtModel, source, true, event)\n }\n\n _onmousedownup(event, hint) {\n event.stopPropagation()\n\n if (this.app.isEditMode) return\n\n if (!hint) return\n\n var source = hint.origin\n\n var tapEvtModel = source.model.event && source.model.event.tap\n\n tapEvtModel &&\n tapEvtModel.pressed &&\n this._doMouseDownUpEventAction(\n tapEvtModel,\n source,\n event.type == 'mousedown' || event.type == 'touchstart',\n event\n )\n }\n\n _doMouseDownUpEventAction(event, component, enter, org_event) {\n var { pressed = false } = event\n if (!pressed) {\n return\n }\n\n if (enter) {\n Pressed.pressed(component)\n } else {\n Pressed.normalize(component)\n }\n }\n\n _doEventAction(event, component, enter, org_event) {\n var { action, target, value, emphasize = false, restore = false, pressed = false, options } = event\n\n if (target) {\n target = component.access(target)\n }\n if (value) {\n value = component.access(value)\n }\n\n // IMPLEMENT-ME\n if (emphasize) {\n if (enter) {\n Emphasize.emphasize(component)\n } else if (restore) {\n Emphasize.normalize(component)\n }\n }\n\n if (!action) return\n\n switch (action) {\n case 'data-toggle':\n if (!target) return\n ;(enter || restore) &&\n this.root.findAll(target, component).forEach(component => {\n component.data = !component.data\n })\n break\n\n case 'data-tristate':\n if (!target) return\n ;(enter || restore) &&\n this.root.findAll(target, component).forEach(component => {\n let number = Math.round(Math.max(Number(component.data) || 0, 0))\n component.data = (number + (enter ? 1 : 2)) % 3\n })\n break\n\n case 'data-set':\n if (!target) return\n\n if (enter) {\n var data = value\n this.root.findAll(target, component).forEach(comp => {\n comp.data = data\n })\n } else if (restore) {\n // TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.\n // data-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.\n }\n break\n\n case 'value-set':\n if (!target) return\n\n if (enter) {\n var data = value\n this.root.findAll(target, component).forEach(comp => {\n comp.value = data\n })\n } else if (restore) {\n // TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.\n // value-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.\n }\n break\n\n case 'infoWindow':\n case 'info-window':\n if (!target) return\n\n if (org_event.type == 'click') {\n InfoWindow.show(component, target, restore /* close button */, {\n x: org_event.offsetX,\n y: org_event.offsetY\n })\n } else {\n if (enter) {\n InfoWindow.show(component, target, restore /* auto close - no close button */, {\n x: org_event.offsetX,\n y: org_event.offsetY\n })\n } else if (restore) {\n InfoWindow.hide(component, target)\n }\n }\n break\n\n case 'toggle-info-window':\n if (!target) return\n\n InfoWindow.toggle(component, target, false, {\n x: org_event.offsetX,\n y: org_event.offsetY\n })\n break\n\n case 'popup':\n case 'modal-popup':\n if (!target) return\n\n /* \n For backward compatibility, \n if the option is not set, it is assumed that the component's own data is input and the result output is received. \n */\n let input = !options ? '(self)' : 'input' in options ? options.input : '(self)'\n let output = !options ? true : 'output' in options ? options.output : true\n\n // for things-scene model version >= 1.1\n ScenePopup.show(component, target, {\n data: input && this.root.findFirst(input, component)?.data,\n output /* boolean - specifies whether to receive a return value from the popup or not. */,\n modal: action === 'modal-popup'\n })\n break\n\n case 'close-scene':\n this.closeScene(component.data)\n break\n\n case 'goto':\n this.trigger(action, target, options, component)\n break\n\n default:\n this.trigger(action, target, value, component)\n }\n }\n}\n\nModelLayer.Popup = ScenePopup\n\nComponent.register('model-layer', ModelLayer)\n"]}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ActiveAnchor definition
3
+ * @typedef {Object} ActiveAnchor
4
+ * @property {Object} component - owner component of anchor
5
+ * @property {string} anchor - anchor name
6
+ */
7
+ export default class AnchorHandler {
8
+ constructor(layer: any);
9
+ layer: any;
10
+ set active(arg: ActiveAnchor);
11
+ /**
12
+ * @type {ActiveAnchor} active
13
+ */
14
+ get active(): ActiveAnchor;
15
+ _active: ActiveAnchor | null | undefined;
16
+ reset(): void;
17
+ contains(x: any, y: any, component: any, scale: any): boolean;
18
+ draw(ctx: any, component: any, scale: any): void;
19
+ onmousedown(e: any): void;
20
+ ondragstart(e: any): void;
21
+ ondragmove(e: any): void;
22
+ ondragend(e: any): void;
23
+ }
24
+ /**
25
+ * ActiveAnchor definition
26
+ */
27
+ export type ActiveAnchor = {
28
+ /**
29
+ * - owner component of anchor
30
+ */
31
+ component: Object;
32
+ /**
33
+ * - anchor name
34
+ */
35
+ anchor: string;
36
+ };
@@ -0,0 +1,18 @@
1
+ export default class ControlHandler {
2
+ constructor(layer: any);
3
+ layer: any;
4
+ reset(): void;
5
+ active: {
6
+ component: any;
7
+ index: any;
8
+ handler: any;
9
+ } | null | undefined;
10
+ get selected(): any;
11
+ contains(x: any, y: any, component: any, scale: any): boolean;
12
+ draw(context: any, component: any, scale: any): void;
13
+ onevent(event: any, e: any): void;
14
+ onmousedown(e: any): void;
15
+ ondragstart(e: any): void;
16
+ ondragmove(e: any): void;
17
+ ondragend(e: any): void;
18
+ }
@@ -0,0 +1,5 @@
1
+ export default class FocusOutline {
2
+ constructor(layer: any);
3
+ layer: any;
4
+ draw(context: any, component: any, scale: any): void;
5
+ }
@@ -0,0 +1,5 @@
1
+ export default class GroupOutline {
2
+ constructor(layer: any);
3
+ layer: any;
4
+ draw(context: any, component: any, scale: any): void;
5
+ }
@@ -0,0 +1,7 @@
1
+ export { default as FocusOutline } from "./focus-outline";
2
+ export { default as GroupOutline } from "./group-outline";
3
+ export { default as ControlHandler } from "./control-handler";
4
+ export { default as PathHandler } from "./path-handler";
5
+ export { default as AnchorHandler } from "./anchor-handler";
6
+ export { default as Resizer } from "./resizer";
7
+ export { default as Rotator } from "./rotator";
@@ -0,0 +1,22 @@
1
+ export default class PathHandler {
2
+ constructor(layer: any);
3
+ layer: any;
4
+ reset(): void;
5
+ active: {
6
+ component: any;
7
+ index: any;
8
+ } | {
9
+ component: any;
10
+ index: number;
11
+ } | null | undefined;
12
+ created: any;
13
+ get selected(): any;
14
+ contains(x: any, y: any, component: any, scale: any): boolean;
15
+ startLinkProcess(linkFrom: any, linkModel: any, e: any): any;
16
+ draw(context: any, component: any, scale: any): void;
17
+ ondblclick(e: any): void;
18
+ onmousedown(e: any): void;
19
+ ondragstart(e: any): void;
20
+ ondragmove(e: any): void;
21
+ ondragend(e: any): void;
22
+ }
@@ -0,0 +1,13 @@
1
+ export default class Resizer {
2
+ constructor(layer: any);
3
+ layer: any;
4
+ reset(): void;
5
+ active: any;
6
+ get selected(): any;
7
+ contains(x: any, y: any, component: any, scale: any): boolean;
8
+ draw(ctx: any, component: any, scale: any): void;
9
+ onmousedown(e: any): void;
10
+ ondragstart(e: any): void;
11
+ ondragmove(e: any): void;
12
+ ondragend(e: any): void;
13
+ }
@@ -0,0 +1,15 @@
1
+ export default class Rotator {
2
+ constructor(layer: any);
3
+ layer: any;
4
+ reset(): void;
5
+ active: {
6
+ component: any;
7
+ } | null | undefined;
8
+ get selected(): any;
9
+ contains(x: any, y: any, component: any, scale: any): boolean;
10
+ draw(context: any, component: any, scale: any): void;
11
+ onmousedown(e: any): void;
12
+ ondragstart(e: any): void;
13
+ ondragmove(e: any): void;
14
+ ondragend(e: any): void;
15
+ }