@hatiolab/things-scene 9.0.0-beta.35 → 9.0.0-beta.36

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 (385) hide show
  1. package/babel.config.js +4 -3
  2. package/db.sqlite +0 -0
  3. package/dist/animation/animate.js +63 -0
  4. package/dist/animation/animate.js.map +1 -0
  5. package/dist/animation/animations/animation.js +122 -0
  6. package/dist/animation/animations/animation.js.map +1 -0
  7. package/dist/animation/animations/fade.js +28 -0
  8. package/dist/animation/animations/fade.js.map +1 -0
  9. package/dist/animation/animations/heartbeat.js +28 -0
  10. package/dist/animation/animations/heartbeat.js.map +1 -0
  11. package/dist/animation/animations/moving.js +24 -0
  12. package/dist/animation/animations/moving.js.map +1 -0
  13. package/dist/animation/animations/outline.js +47 -0
  14. package/dist/animation/animations/outline.js.map +1 -0
  15. package/dist/animation/animations/rotation.js +22 -0
  16. package/dist/animation/animations/rotation.js.map +1 -0
  17. package/dist/animation/animations/vibration.js +31 -0
  18. package/dist/animation/animations/vibration.js.map +1 -0
  19. package/dist/animation/compile.js +31 -0
  20. package/dist/animation/compile.js.map +1 -0
  21. package/dist/animation/delta.js +51 -0
  22. package/dist/animation/delta.js.map +1 -0
  23. package/dist/animation/index.js +14 -0
  24. package/dist/animation/index.js.map +1 -0
  25. package/dist/command/command-change.js +33 -0
  26. package/dist/command/command-change.js.map +1 -0
  27. package/dist/command/command-migrate.js +103 -0
  28. package/dist/command/command-migrate.js.map +1 -0
  29. package/dist/command/command.js +18 -0
  30. package/dist/command/command.js.map +1 -0
  31. package/dist/command/snapshot-commander.js +84 -0
  32. package/dist/command/snapshot-commander.js.map +1 -0
  33. package/dist/components/anchor/anchor.js +105 -0
  34. package/dist/components/anchor/anchor.js.map +1 -0
  35. package/dist/components/anchor/ellipse-anchors.js +53 -0
  36. package/dist/components/anchor/ellipse-anchors.js.map +1 -0
  37. package/dist/components/anchor/rect-anchors.js +53 -0
  38. package/dist/components/anchor/rect-anchors.js.map +1 -0
  39. package/dist/components/audio.js +154 -0
  40. package/dist/components/audio.js.map +1 -0
  41. package/dist/components/cloud.js +44 -0
  42. package/dist/components/cloud.js.map +1 -0
  43. package/dist/components/component.js +1086 -0
  44. package/dist/components/component.js.map +1 -0
  45. package/dist/components/container-abstract.js +387 -0
  46. package/dist/components/container-abstract.js.map +1 -0
  47. package/dist/components/container.js +331 -0
  48. package/dist/components/container.js.map +1 -0
  49. package/dist/components/data/data-mapping.js +82 -0
  50. package/dist/components/data/data-mapping.js.map +1 -0
  51. package/dist/components/data/data.js +166 -0
  52. package/dist/components/data/data.js.map +1 -0
  53. package/dist/components/data/evaluator.js +103 -0
  54. package/dist/components/data/evaluator.js.map +1 -0
  55. package/dist/components/donut.js +104 -0
  56. package/dist/components/donut.js.map +1 -0
  57. package/dist/components/drawer/draw-image-pendable.js +20 -0
  58. package/dist/components/drawer/draw-image-pendable.js.map +1 -0
  59. package/dist/components/drawer/effect.js +19 -0
  60. package/dist/components/drawer/effect.js.map +1 -0
  61. package/dist/components/drawer/fill.js +228 -0
  62. package/dist/components/drawer/fill.js.map +1 -0
  63. package/dist/components/drawer/format.js +115 -0
  64. package/dist/components/drawer/format.js.map +1 -0
  65. package/dist/components/drawer/line.js +191 -0
  66. package/dist/components/drawer/line.js.map +1 -0
  67. package/dist/components/drawer/stroke.js +62 -0
  68. package/dist/components/drawer/stroke.js.map +1 -0
  69. package/dist/components/drawer/text-wrapper.js +51 -0
  70. package/dist/components/drawer/text-wrapper.js.map +1 -0
  71. package/dist/components/drawer/text.js +269 -0
  72. package/dist/components/drawer/text.js.map +1 -0
  73. package/dist/components/ellipse.js +110 -0
  74. package/dist/components/ellipse.js.map +1 -0
  75. package/dist/components/file/ondropfile.js +19 -0
  76. package/dist/components/file/ondropfile.js.map +1 -0
  77. package/dist/components/fit/fit.js +137 -0
  78. package/dist/components/fit/fit.js.map +1 -0
  79. package/dist/components/geometry/transcoord.js +339 -0
  80. package/dist/components/geometry/transcoord.js.map +1 -0
  81. package/dist/components/geometry/union.js +35 -0
  82. package/dist/components/geometry/union.js.map +1 -0
  83. package/dist/components/gif-view.js +128 -0
  84. package/dist/components/gif-view.js.map +1 -0
  85. package/dist/components/global-ref.js +154 -0
  86. package/dist/components/global-ref.js.map +1 -0
  87. package/dist/components/group.js +171 -0
  88. package/dist/components/group.js.map +1 -0
  89. package/dist/components/html/elements.js +24 -0
  90. package/dist/components/html/elements.js.map +1 -0
  91. package/dist/components/html/fill.js +126 -0
  92. package/dist/components/html/fill.js.map +1 -0
  93. package/dist/components/html/reposition.js +119 -0
  94. package/dist/components/html/reposition.js.map +1 -0
  95. package/dist/components/html/shadow.js +24 -0
  96. package/dist/components/html/shadow.js.map +1 -0
  97. package/dist/components/html-overlay-container.js +27 -0
  98. package/dist/components/html-overlay-container.js.map +1 -0
  99. package/dist/components/html-overlay-element.js +22 -0
  100. package/dist/components/html-overlay-element.js.map +1 -0
  101. package/dist/components/image-view.js +193 -0
  102. package/dist/components/image-view.js.map +1 -0
  103. package/dist/components/index.js +231 -0
  104. package/dist/components/index.js.map +1 -0
  105. package/dist/components/info-window.js +416 -0
  106. package/dist/components/info-window.js.map +1 -0
  107. package/dist/components/line.js +374 -0
  108. package/dist/components/line.js.map +1 -0
  109. package/dist/components/local-ref.js +114 -0
  110. package/dist/components/local-ref.js.map +1 -0
  111. package/dist/components/mixins/connectable.js +128 -0
  112. package/dist/components/mixins/connectable.js.map +1 -0
  113. package/dist/components/mixins/data-source.js +34 -0
  114. package/dist/components/mixins/data-source.js.map +1 -0
  115. package/dist/components/mixins/html-element.js +107 -0
  116. package/dist/components/mixins/html-element.js.map +1 -0
  117. package/dist/components/mixins/move-handle.js +73 -0
  118. package/dist/components/mixins/move-handle.js.map +1 -0
  119. package/dist/components/mixins/rect-path.js +113 -0
  120. package/dist/components/mixins/rect-path.js.map +1 -0
  121. package/dist/components/mixins/value-holder.js +81 -0
  122. package/dist/components/mixins/value-holder.js.map +1 -0
  123. package/dist/components/mutater/bounds.js +68 -0
  124. package/dist/components/mutater/bounds.js.map +1 -0
  125. package/dist/components/mutater/path.js +73 -0
  126. package/dist/components/mutater/path.js.map +1 -0
  127. package/dist/components/ortholine.js +763 -0
  128. package/dist/components/ortholine.js.map +1 -0
  129. package/dist/components/outline/ellipse-outline.js +23 -0
  130. package/dist/components/outline/ellipse-outline.js.map +1 -0
  131. package/dist/components/outline/path-outline.js +48 -0
  132. package/dist/components/outline/path-outline.js.map +1 -0
  133. package/dist/components/path.js +49 -0
  134. package/dist/components/path.js.map +1 -0
  135. package/dist/components/polygon.js +91 -0
  136. package/dist/components/polygon.js.map +1 -0
  137. package/dist/components/polyline.js +114 -0
  138. package/dist/components/polyline.js.map +1 -0
  139. package/dist/components/popup.js +160 -0
  140. package/dist/components/popup.js.map +1 -0
  141. package/dist/components/rect.js +72 -0
  142. package/dist/components/rect.js.map +1 -0
  143. package/dist/components/retention/retention-manager.js +81 -0
  144. package/dist/components/retention/retention-manager.js.map +1 -0
  145. package/dist/components/root-container.js +519 -0
  146. package/dist/components/root-container.js.map +1 -0
  147. package/dist/components/ruler.js +103 -0
  148. package/dist/components/ruler.js.map +1 -0
  149. package/dist/components/shape.js +97 -0
  150. package/dist/components/shape.js.map +1 -0
  151. package/dist/components/star.js +103 -0
  152. package/dist/components/star.js.map +1 -0
  153. package/dist/components/text/substitutor.js +92 -0
  154. package/dist/components/text/substitutor.js.map +1 -0
  155. package/dist/components/text.js +21 -0
  156. package/dist/components/text.js.map +1 -0
  157. package/dist/components/triangle.js +92 -0
  158. package/dist/components/triangle.js.map +1 -0
  159. package/dist/const.js +71 -0
  160. package/dist/const.js.map +1 -0
  161. package/dist/core/collection.js +28 -0
  162. package/dist/core/collection.js.map +1 -0
  163. package/dist/core/debug.js +12 -0
  164. package/dist/core/debug.js.map +1 -0
  165. package/dist/core/deep-equals.js +112 -0
  166. package/dist/core/deep-equals.js.map +1 -0
  167. package/dist/core/dom-to-image.js +617 -0
  168. package/dist/core/dom-to-image.js.map +1 -0
  169. package/dist/core/event.js +205 -0
  170. package/dist/core/event.js.map +1 -0
  171. package/dist/core/index.js +21 -0
  172. package/dist/core/index.js.map +1 -0
  173. package/dist/core/list.js +87 -0
  174. package/dist/core/list.js.map +1 -0
  175. package/dist/core/logger.js +29 -0
  176. package/dist/core/logger.js.map +1 -0
  177. package/dist/core/memoize.js +40 -0
  178. package/dist/core/memoize.js.map +1 -0
  179. package/dist/core/mixin.js +26 -0
  180. package/dist/core/mixin.js.map +1 -0
  181. package/dist/core/obj-accessor.js +26 -0
  182. package/dist/core/obj-accessor.js.map +1 -0
  183. package/dist/core/reference-map.js +147 -0
  184. package/dist/core/reference-map.js.map +1 -0
  185. package/dist/core/round-rect.js +62 -0
  186. package/dist/core/round-rect.js.map +1 -0
  187. package/dist/core/safe-round.js +10 -0
  188. package/dist/core/safe-round.js.map +1 -0
  189. package/dist/core/script-loader.js +148 -0
  190. package/dist/core/script-loader.js.map +1 -0
  191. package/dist/core/snapshot-taker.js +59 -0
  192. package/dist/core/snapshot-taker.js.map +1 -0
  193. package/dist/core/stack.js +18 -0
  194. package/dist/core/stack.js.map +1 -0
  195. package/dist/core/timecapsule.js +88 -0
  196. package/dist/core/timecapsule.js.map +1 -0
  197. package/dist/core/utils.js +309 -0
  198. package/dist/core/utils.js.map +1 -0
  199. package/dist/decorator/anchors-decorator.js +53 -0
  200. package/dist/decorator/anchors-decorator.js.map +1 -0
  201. package/dist/decorator/bouncing-arrow-decorator.js +52 -0
  202. package/dist/decorator/bouncing-arrow-decorator.js.map +1 -0
  203. package/dist/decorator/data-spread-decorator.js +69 -0
  204. package/dist/decorator/data-spread-decorator.js.map +1 -0
  205. package/dist/decorator/decotag-decorator.js +33 -0
  206. package/dist/decorator/decotag-decorator.js.map +1 -0
  207. package/dist/decorator/index.js +31 -0
  208. package/dist/decorator/index.js.map +1 -0
  209. package/dist/decorator/link-decorator.js +66 -0
  210. package/dist/decorator/link-decorator.js.map +1 -0
  211. package/dist/effect/gradation.js +37 -0
  212. package/dist/effect/gradation.js.map +1 -0
  213. package/dist/effect/index.js +23 -0
  214. package/dist/effect/index.js.map +1 -0
  215. package/dist/effect/shadow.js +33 -0
  216. package/dist/effect/shadow.js.map +1 -0
  217. package/dist/effect/turn.js +25 -0
  218. package/dist/effect/turn.js.map +1 -0
  219. package/dist/event/event-engine.js +76 -0
  220. package/dist/event/event-engine.js.map +1 -0
  221. package/dist/event/event-pump.js +92 -0
  222. package/dist/event/event-pump.js.map +1 -0
  223. package/dist/event/event-tracker.js +97 -0
  224. package/dist/event/event-tracker.js.map +1 -0
  225. package/dist/event/index.js +21 -0
  226. package/dist/event/index.js.map +1 -0
  227. package/dist/event/ua-event-handler.js +453 -0
  228. package/dist/event/ua-event-handler.js.map +1 -0
  229. package/dist/event-map/animator-handler.js +225 -0
  230. package/dist/event-map/animator-handler.js.map +1 -0
  231. package/dist/event-map/animators/animated-icon.js +265 -0
  232. package/dist/event-map/animators/animated-icon.js.map +1 -0
  233. package/dist/event-map/animators/border-highlighting.js +476 -0
  234. package/dist/event-map/animators/border-highlighting.js.map +1 -0
  235. package/dist/event-map/animators/bouncing-arrow.js +226 -0
  236. package/dist/event-map/animators/bouncing-arrow.js.map +1 -0
  237. package/dist/event-map/event-map.js +36 -0
  238. package/dist/event-map/event-map.js.map +1 -0
  239. package/dist/event-map/index.js +20 -0
  240. package/dist/event-map/index.js.map +1 -0
  241. package/dist/event-map/move-handler.js +233 -0
  242. package/dist/event-map/move-handler.js.map +1 -0
  243. package/dist/event-map/paste-handler.js +176 -0
  244. package/dist/event-map/paste-handler.js.map +1 -0
  245. package/dist/event-map/shift-handler.js +55 -0
  246. package/dist/event-map/shift-handler.js.map +1 -0
  247. package/dist/event-map/text-editor-lite.js +276 -0
  248. package/dist/event-map/text-editor-lite.js.map +1 -0
  249. package/dist/event-map/zoom-handler.js +49 -0
  250. package/dist/event-map/zoom-handler.js.map +1 -0
  251. package/dist/index.js +20 -0
  252. package/dist/index.js.map +1 -0
  253. package/dist/layer/action/emphasize.js +42 -0
  254. package/dist/layer/action/emphasize.js.map +1 -0
  255. package/dist/layer/action/popup.js +461 -0
  256. package/dist/layer/action/popup.js.map +1 -0
  257. package/dist/layer/action/pressed.js +31 -0
  258. package/dist/layer/action/pressed.js.map +1 -0
  259. package/dist/layer/add-layer.js +180 -0
  260. package/dist/layer/add-layer.js.map +1 -0
  261. package/dist/layer/decotag-layer.js +121 -0
  262. package/dist/layer/decotag-layer.js.map +1 -0
  263. package/dist/layer/guide-layer.js +292 -0
  264. package/dist/layer/guide-layer.js.map +1 -0
  265. package/dist/layer/index.js +70 -0
  266. package/dist/layer/index.js.map +1 -0
  267. package/dist/layer/layer.js +230 -0
  268. package/dist/layer/layer.js.map +1 -0
  269. package/dist/layer/minimap-layer.js +84 -0
  270. package/dist/layer/minimap-layer.js.map +1 -0
  271. package/dist/layer/model-layer.js +465 -0
  272. package/dist/layer/model-layer.js.map +1 -0
  273. package/dist/layer/modeler/anchor-handler.js +193 -0
  274. package/dist/layer/modeler/anchor-handler.js.map +1 -0
  275. package/dist/layer/modeler/control-handler.js +95 -0
  276. package/dist/layer/modeler/control-handler.js.map +1 -0
  277. package/dist/layer/modeler/focus-outline.js +41 -0
  278. package/dist/layer/modeler/focus-outline.js.map +1 -0
  279. package/dist/layer/modeler/group-outline.js +30 -0
  280. package/dist/layer/modeler/group-outline.js.map +1 -0
  281. package/dist/layer/modeler/index.js +56 -0
  282. package/dist/layer/modeler/index.js.map +1 -0
  283. package/dist/layer/modeler/path-handler.js +300 -0
  284. package/dist/layer/modeler/path-handler.js.map +1 -0
  285. package/dist/layer/modeler/resizer.js +333 -0
  286. package/dist/layer/modeler/resizer.js.map +1 -0
  287. package/dist/layer/modeler/rotator.js +134 -0
  288. package/dist/layer/modeler/rotator.js.map +1 -0
  289. package/dist/layer/modeling-layer.js +491 -0
  290. package/dist/layer/modeling-layer.js.map +1 -0
  291. package/dist/layer/reaction-layer.js +111 -0
  292. package/dist/layer/reaction-layer.js.map +1 -0
  293. package/dist/layer/scroll-layer.js +191 -0
  294. package/dist/layer/scroll-layer.js.map +1 -0
  295. package/dist/layer/selection/selected-finder.js +96 -0
  296. package/dist/layer/selection/selected-finder.js.map +1 -0
  297. package/dist/layer/selection-layer.js +373 -0
  298. package/dist/layer/selection-layer.js.map +1 -0
  299. package/dist/layer/shift-layer.js +83 -0
  300. package/dist/layer/shift-layer.js.map +1 -0
  301. package/dist/layout/absolute.js +30 -0
  302. package/dist/layout/absolute.js.map +1 -0
  303. package/dist/layout/card.js +52 -0
  304. package/dist/layout/card.js.map +1 -0
  305. package/dist/layout/html-absolute.js +32 -0
  306. package/dist/layout/html-absolute.js.map +1 -0
  307. package/dist/layout/index.js +56 -0
  308. package/dist/layout/index.js.map +1 -0
  309. package/dist/layout/layout.js +36 -0
  310. package/dist/layout/layout.js.map +1 -0
  311. package/dist/layout/linear-horizontal.js +56 -0
  312. package/dist/layout/linear-horizontal.js.map +1 -0
  313. package/dist/layout/linear-vertical.js +56 -0
  314. package/dist/layout/linear-vertical.js.map +1 -0
  315. package/dist/layout/table.js +106 -0
  316. package/dist/layout/table.js.map +1 -0
  317. package/dist/license/license.js +170 -0
  318. package/dist/license/license.js.map +1 -0
  319. package/dist/model/compile.js +40 -0
  320. package/dist/model/compile.js.map +1 -0
  321. package/dist/model/duplicate.js +19 -0
  322. package/dist/model/duplicate.js.map +1 -0
  323. package/dist/model/index.js +34 -0
  324. package/dist/model/index.js.map +1 -0
  325. package/dist/model/selector.js +104 -0
  326. package/dist/model/selector.js.map +1 -0
  327. package/dist/style/compile.js +14 -0
  328. package/dist/style/compile.js.map +1 -0
  329. package/dist/style/index.js +14 -0
  330. package/dist/style/index.js.map +1 -0
  331. package/dist/things-scene/api/add-start.js +18 -0
  332. package/dist/things-scene/api/add-start.js.map +1 -0
  333. package/dist/things-scene/api/add.js +71 -0
  334. package/dist/things-scene/api/add.js.map +1 -0
  335. package/dist/things-scene/api/align.js +116 -0
  336. package/dist/things-scene/api/align.js.map +1 -0
  337. package/dist/things-scene/api/center-to.js +50 -0
  338. package/dist/things-scene/api/center-to.js.map +1 -0
  339. package/dist/things-scene/api/change.js +27 -0
  340. package/dist/things-scene/api/change.js.map +1 -0
  341. package/dist/things-scene/api/clipboard.js +45 -0
  342. package/dist/things-scene/api/clipboard.js.map +1 -0
  343. package/dist/things-scene/api/distribute.js +57 -0
  344. package/dist/things-scene/api/distribute.js.map +1 -0
  345. package/dist/things-scene/api/duplicate.js +47 -0
  346. package/dist/things-scene/api/duplicate.js.map +1 -0
  347. package/dist/things-scene/api/fullscreen.js +26 -0
  348. package/dist/things-scene/api/fullscreen.js.map +1 -0
  349. package/dist/things-scene/api/group.js +91 -0
  350. package/dist/things-scene/api/group.js.map +1 -0
  351. package/dist/things-scene/api/ids.js +28 -0
  352. package/dist/things-scene/api/ids.js.map +1 -0
  353. package/dist/things-scene/api/index.js +192 -0
  354. package/dist/things-scene/api/index.js.map +1 -0
  355. package/dist/things-scene/api/listener.js +69 -0
  356. package/dist/things-scene/api/listener.js.map +1 -0
  357. package/dist/things-scene/api/paste-start.js +27 -0
  358. package/dist/things-scene/api/paste-start.js.map +1 -0
  359. package/dist/things-scene/api/place.js +98 -0
  360. package/dist/things-scene/api/place.js.map +1 -0
  361. package/dist/things-scene/api/remove.js +57 -0
  362. package/dist/things-scene/api/remove.js.map +1 -0
  363. package/dist/things-scene/api/symmetry.js +47 -0
  364. package/dist/things-scene/api/symmetry.js.map +1 -0
  365. package/dist/things-scene/api/to-data-url.js +76 -0
  366. package/dist/things-scene/api/to-data-url.js.map +1 -0
  367. package/dist/things-scene/api/zorder.js +68 -0
  368. package/dist/things-scene/api/zorder.js.map +1 -0
  369. package/dist/things-scene/application-context.js +168 -0
  370. package/dist/things-scene/application-context.js.map +1 -0
  371. package/dist/things-scene/config.js +18 -0
  372. package/dist/things-scene/config.js.map +1 -0
  373. package/dist/things-scene/create.js +67 -0
  374. package/dist/things-scene/create.js.map +1 -0
  375. package/dist/things-scene/fps.js +26 -0
  376. package/dist/things-scene/fps.js.map +1 -0
  377. package/dist/things-scene/index.js +152 -0
  378. package/dist/things-scene/index.js.map +1 -0
  379. package/dist/things-scene/polyfill.js +111 -0
  380. package/dist/things-scene/polyfill.js.map +1 -0
  381. package/dist/things-scene/scene.js +442 -0
  382. package/dist/things-scene/scene.js.map +1 -0
  383. package/dist/things-scene/version.js +12 -0
  384. package/dist/things-scene/version.js.map +1 -0
  385. package/package.json +8 -6
@@ -0,0 +1,491 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _commandChange = _interopRequireDefault(require("../command/command-change.js"));
8
+ var _commandMigrate = _interopRequireDefault(require("../command/command-migrate.js"));
9
+ var _component = _interopRequireDefault(require("../components/component.js"));
10
+ var Const = _interopRequireWildcard(require("../const.js"));
11
+ var _compile = _interopRequireDefault(require("../model/compile.js"));
12
+ var _layer = _interopRequireDefault(require("./layer.js"));
13
+ var Modeler = _interopRequireWildcard(require("./modeler/index.js"));
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
+ /*
18
+ * Copyright © HatioLab Inc. All rights reserved.
19
+ */
20
+
21
+ class ModelingLayer extends _layer.default {
22
+ constructor(model, context) {
23
+ super(model, context);
24
+ this.pathHandler = new Modeler.PathHandler(this);
25
+ var ph = this.pathHandler;
26
+ var ch = new Modeler.ControlHandler(this);
27
+ var rs = new Modeler.Resizer(this);
28
+ var rt = new Modeler.Rotator(this);
29
+ this._modelers = [ph, ch, rs, rt];
30
+ this._control_mode_modelers = [ch, ph, rs, rt];
31
+ this.focusOutline = new Modeler.FocusOutline(this);
32
+ this.groupOutline = new Modeler.GroupOutline(this);
33
+ this.anchorHandler = new Modeler.AnchorHandler(this);
34
+
35
+ // 그릴 때는 contains 순서의 역순으로 그린다.
36
+ this._reversed_modelers = this._modelers.slice().reverse();
37
+ this._control_mode_reverse_modelers = this._control_mode_modelers.slice().reverse();
38
+ this.hovered = null;
39
+ this.hoveredDest = null;
40
+ }
41
+ get modelers() {
42
+ return this._control_mode ? this._control_mode_modelers : this._modelers;
43
+ }
44
+ get reversedModelers() {
45
+ return this._control_mode ? this._control_mode_reverse_modelers : this._reversed_modelers;
46
+ }
47
+
48
+ // Lifecycle
49
+ ready() {
50
+ super.ready();
51
+ var rootModel = this.rootModel;
52
+ var translate = rootModel.get('translate');
53
+ var scale = rootModel.get('scale');
54
+ this.set('translate', translate);
55
+ this.set('scale', scale);
56
+ }
57
+ contains(x, y) {
58
+ var components = this.selected.filter(c => !!c.parent);
59
+ var scale = this.get('scale') || {
60
+ x: 1,
61
+ y: 1
62
+ };
63
+ if (this._state_dragging) {
64
+ if (this._counter_end) {
65
+ let point = this.anchorTarget.transcoordT2S(x, y);
66
+ if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {
67
+ return true;
68
+ }
69
+ }
70
+ return true;
71
+ }
72
+ this.modelers.forEach(modeler => modeler.reset());
73
+
74
+ /*
75
+ * 부모가 있는 컴포넌트만을 그린다.
76
+ * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)
77
+ */
78
+ var components = this.selected.filter(c => !!c.parent);
79
+ for (let i = 0; i < components.length; i++) {
80
+ let component = components[i];
81
+ let point = component.transcoordT2S(x, y);
82
+ for (let j = 0; j < this.modelers.length; j++) {
83
+ let modeler = this.modelers[j];
84
+ if (modeler.contains(point.x, point.y, component, scale)) {
85
+ this.currentModeler = modeler;
86
+ return true;
87
+ }
88
+ }
89
+ }
90
+ if (this.anchorTarget) {
91
+ let point = this.anchorTarget.transcoordT2S(x, y);
92
+ if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {
93
+ this.currentModeler = this.anchorHandler;
94
+ return true;
95
+ }
96
+ } else {
97
+ this.anchorHandler.reset();
98
+ }
99
+ this.currentModeler = null;
100
+ return false;
101
+ }
102
+ _componentDrawer(context, component, scale, logic) {
103
+ let ancester = [];
104
+ let parent = component.parent;
105
+ if (component.isRootModel()) {
106
+ context.save();
107
+ logic(context, component, scale);
108
+ context.restore();
109
+ return;
110
+ }
111
+ while (parent && !parent.isRootModel()) {
112
+ ancester.push(parent);
113
+ parent = parent.parent;
114
+ }
115
+ context.save();
116
+ ancester.reverse().forEach(function (parent) {
117
+ // 원점으로 이동하여 회전.
118
+ let rotatePoint = parent.rotatePoint;
119
+ context.translate(rotatePoint.x, rotatePoint.y);
120
+ let parent_scale = parent.get('scale');
121
+ if (parent_scale) context.scale(parent_scale.x, parent_scale.y);
122
+ context.rotate(parent.get('rotation'));
123
+ context.translate(-rotatePoint.x, -rotatePoint.y);
124
+ let bounds = parent.bounds;
125
+ context.translate(bounds.left, bounds.top);
126
+ });
127
+ let rotatePoint = component.rotatePoint;
128
+ context.translate(rotatePoint.x, rotatePoint.y);
129
+ let component_scale = component.get('scale');
130
+ if (component_scale) context.scale(component_scale.x, component_scale.y);
131
+ context.rotate(component.get('rotation'));
132
+ context.translate(-rotatePoint.x, -rotatePoint.y);
133
+ logic(context, component, scale);
134
+ context.restore();
135
+ }
136
+ prerender(context) {
137
+ var {
138
+ translate,
139
+ scale = {
140
+ x: 1,
141
+ y: 1
142
+ },
143
+ rotation
144
+ } = this.model;
145
+
146
+ // Scene 모델 바깥쪽을 표현하기 위해서, 먼저 전체 바탕을 회색으로 칠한다.
147
+ context.save();
148
+ context.beginPath();
149
+ context.clearRect(0, 0, context.canvas.width, context.canvas.height);
150
+ context.rect(0, 0, context.canvas.width, context.canvas.height);
151
+ context.fillStyle = 'black';
152
+ context.globalAlpha = 0.5;
153
+ context.fill();
154
+ context.restore();
155
+ translate && context.translate(translate.x * Const.DPPX, translate.y * Const.DPPX);
156
+ context.scale(scale.x * Const.DPPX, scale.y * Const.DPPX);
157
+ rotation && context.rotate(rotation);
158
+ context.clearRect(0, 0, this.rootModel.get('width'), this.rootModel.get('height'));
159
+ }
160
+ render(context) {
161
+ context.beginPath();
162
+ var scale = this.get('scale') || {
163
+ x: 1,
164
+ y: 1
165
+ };
166
+
167
+ /*
168
+ * 부모가 있는 컴포넌트만을 그린다.
169
+ * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)
170
+ */
171
+ var selected = this.selected.filter(c => !!c.parent);
172
+ if (this.focused) {
173
+ this._componentDrawer(context, this.focused, scale, (context, component, scale) => {
174
+ this.focusOutline.draw(context, component, scale);
175
+ });
176
+ }
177
+
178
+ /* TODO selected의 부모가 group인 경우에 최상위 그룹의 모델링 레이아웃을 그려주어야 한다. */
179
+ if (selected.length > 0 && selected[0].parent.isGroup()) {
180
+ let rootGroup = selected[0].parent;
181
+ while (rootGroup.parent.isGroup()) rootGroup = rootGroup.parent;
182
+ this._componentDrawer(context, rootGroup, scale, (context, component, scale) => {
183
+ this.groupOutline.draw(context, component, scale);
184
+ });
185
+ }
186
+ selected.forEach(component => {
187
+ this._componentDrawer(context, component, scale, (context, component, scale) => {
188
+ this.reversedModelers.forEach(modeler => modeler.draw(context, component, scale));
189
+ });
190
+ });
191
+ this.anchorTarget && this._componentDrawer(context, this.anchorTarget, scale, (context, component, scale) => {
192
+ this.anchorHandler.draw(context, component, scale);
193
+ });
194
+ }
195
+ get anchorTarget() {
196
+ if (this.currentModeler !== this.anchorHandler && this.currentModeler !== this.pathHandler && !this.hovered?.isLine()) {
197
+ this._anchorTarget = this.hovered;
198
+ }
199
+ return this._anchorTarget;
200
+ }
201
+ set anchorTarget(target) {
202
+ this._anchorTarget = target;
203
+ }
204
+ get hovered() {
205
+ return this._hovered;
206
+ }
207
+ set hovered(hovered) {
208
+ this._hovered = hovered;
209
+ this.invalidate();
210
+ }
211
+ startLinkProcess(linkFrom, linkModel, e) {
212
+ this.currentModeler = this.pathHandler;
213
+ this.processingLink = this.pathHandler.startLinkProcess(linkFrom, linkModel, e);
214
+ this.counterEnd = this.processingLink.fromEnd;
215
+ this.processingLink.trigger('tag');
216
+ }
217
+ set counterEnd(anchor) {
218
+ this.currentModeler = this.pathHandler;
219
+ this._counter_end = anchor;
220
+ }
221
+ get counterEnd() {
222
+ return this._counter_end;
223
+ }
224
+ endLinkProcess() {
225
+ this.processingLink?.trigger('tagreset');
226
+ this.processingLink = null;
227
+ this._counter_end = null;
228
+ }
229
+ get eventMap() {
230
+ return {
231
+ 'model-layer': {
232
+ '(all)': {
233
+ change: this.onchange_model,
234
+ wheel: this.onwheel_scale,
235
+ drop: this.ondrop
236
+ },
237
+ '(descendant)': {
238
+ mouseenter: this.onmouseenter,
239
+ mouseleave: this.onmouseleave
240
+ },
241
+ '(self)': {
242
+ dblclick: this.ondblclick_model
243
+ }
244
+ },
245
+ '(root)': {
246
+ '(self)': {
247
+ selected: this.onselected,
248
+ keydown: this.onkeydown,
249
+ keyup: this.onkeyup
250
+ }
251
+ }
252
+ };
253
+ }
254
+ onmouseenter(e, hint) {
255
+ this.hovered = hint?.origin;
256
+ }
257
+ onmouseleave(e, hint) {
258
+ this.hovered = null;
259
+ }
260
+ onkeydown(e) {
261
+ if (e.key == 'Alt') {
262
+ this._control_mode = true;
263
+ this.invalidate();
264
+ }
265
+ }
266
+ onkeyup(e) {
267
+ if (e.key == 'Alt') {
268
+ this._control_mode = false;
269
+ this.invalidate();
270
+ }
271
+ }
272
+ onselected(after, before) {
273
+ this.invalidate();
274
+ }
275
+ onchange_model(after, before, hint) {
276
+ var {
277
+ origin,
278
+ deliverer
279
+ } = hint;
280
+ if (origin === deliverer) {
281
+ if (after.translate)
282
+ // Model Base 레이어와 동일한 translate를 유지하도록 한다.
283
+ this.set('translate', after.translate);
284
+ if (after.rotation !== undefined)
285
+ // Model Base 레이어와 동일한 rotation을 유지하도록 한다.
286
+ this.set('rotation', after.rotation);
287
+ if (after.scale)
288
+ // Model Base 레이어와 동일한 scale을 유지하도록 한다.
289
+ this.set('scale', after.scale);
290
+ }
291
+ // Model Base 레이어에서 발생하는 대부분의 변화는 Selection 레이어에서도 반영해야한다.
292
+ this.invalidate();
293
+ }
294
+ ondblclick_model(event, hint) {
295
+ const target = hint.origin;
296
+ target?.root.fit();
297
+ }
298
+
299
+ /* default UI Event Handlers. */
300
+
301
+ ondblclick(e) {
302
+ if (typeof this.currentModeler.ondblclick === 'function') this.currentModeler.ondblclick(e);
303
+ this.invalidate();
304
+ }
305
+ onmousedown(e) {
306
+ this.currentModeler.onmousedown(e);
307
+ this.invalidate();
308
+ }
309
+ onmouseup(e) {
310
+ if (typeof this.currentModeler.onmouseup === 'function') this.currentModeler.onmouseup(e);
311
+ this.invalidate();
312
+ }
313
+ ondragstart(e) {
314
+ this.currentModeler.ondragstart(e);
315
+ this._state_dragging = true;
316
+ }
317
+ ondragmove(e) {
318
+ this.currentModeler.ondragmove(e);
319
+ this.invalidate();
320
+ }
321
+ ondragend(e) {
322
+ this._state_dragging = false;
323
+ this.currentModeler.ondragend(e);
324
+ this.invalidate();
325
+ }
326
+ ondrop(e, hint) {
327
+ /* 현재는 이미지 파일 만 추가할 수 있음 */
328
+ var {
329
+ origin
330
+ } = hint;
331
+ var transfered = e.dataTransfer.files;
332
+ if (transfered.length < 1) return;
333
+ let center = this.rootModel.transcoordC2S(e.offsetX, e.offsetY);
334
+ let rootModel = this.rootModel;
335
+ Promise.all(Array.from(transfered).map(file => {
336
+ return new Promise((resolve, reject) => {
337
+ let reader = new FileReader();
338
+ reader.addEventListener('loadend', e => {
339
+ resolve(reader.result);
340
+ });
341
+ ['error', 'abort'].forEach(event => reader.addEventListener(event, e => {
342
+ reject(e);
343
+ }));
344
+ reader.readAsDataURL(file);
345
+ });
346
+ })).then(files => {
347
+ if (e.altKey) {
348
+ _commandChange.default.around(this.app.commander, () => {
349
+ origin.ondropfile(transfered, files);
350
+ });
351
+ this.selected = [origin];
352
+ return;
353
+ }
354
+ let pendings = [];
355
+ let changes = files.map((file, idx) => {
356
+ let component;
357
+ let type = transfered[idx].type;
358
+ let name = transfered[idx].name;
359
+ if (type.startsWith('image/')) {
360
+ component = (0, _compile.default)({
361
+ type: type.startsWith('image/gif') ? 'gif-view' : 'image-view',
362
+ top: 0,
363
+ left: 0,
364
+ width: 200,
365
+ height: 200,
366
+ src: file
367
+ }, rootModel.app);
368
+ pendings.push(new Promise((resolve, reject) => {
369
+ let image = new Image();
370
+ image.src = file;
371
+ image.onload = () => {
372
+ component.set({
373
+ width: image.width,
374
+ height: image.height
375
+ });
376
+ resolve();
377
+ };
378
+ image.onerror = e => {
379
+ reject(e);
380
+ };
381
+ }));
382
+ } else if (type.startsWith('audio/')) {
383
+ component = (0, _compile.default)({
384
+ type: 'audio',
385
+ top: 0,
386
+ left: 0,
387
+ width: 100,
388
+ height: 100,
389
+ src: file
390
+ }, rootModel.app);
391
+ } else if (type.startsWith('vnd.ms-excel/') || /\.xlsx?$/.test(name)) {
392
+ component = (0, _compile.default)({
393
+ type: 'excel',
394
+ top: 0,
395
+ left: 0,
396
+ width: 100,
397
+ height: 100,
398
+ src: file
399
+ }, rootModel.app);
400
+ } else {
401
+ console.log('droped file', transfered[idx]);
402
+ }
403
+ if (component) {
404
+ component.center = center;
405
+ center.x += 50;
406
+ center.y += 50;
407
+ }
408
+ return component;
409
+ }).filter(Boolean).map(component => {
410
+ return {
411
+ component: component,
412
+ to_container: rootModel
413
+ };
414
+ });
415
+ if (changes.length > 0) {
416
+ Promise.all(pendings).then(() => {
417
+ this.app.commander.execute(new _commandMigrate.default({
418
+ changes
419
+ }));
420
+ this.selected = changes.map(change => change.component);
421
+ }, reason => {
422
+ console.error(reason);
423
+ });
424
+ }
425
+ }, reason => {
426
+ console.error(reason);
427
+ });
428
+ }
429
+ onwheel_scale(e, hint) {
430
+ /* shiftKey + wheel 은 deltaX 값을 변화시킨다. */
431
+ if (e.deltaY == 0 && e.deltaX == 0) return;
432
+ var model_layer = hint.deliverer;
433
+ if (e.shiftKey) {
434
+ // Shift: FontSize 변경
435
+ if (navigator.userAgent.indexOf('Win') != -1) {
436
+ var dir = e.deltaY < 0 ? 1 : -1;
437
+ } else {
438
+ var dir = e.deltaX < 0 ? 1 : -1;
439
+ }
440
+ if (e.altKey) {
441
+ _commandChange.default.around(this.app.commander, () => {
442
+ /* 선택된 컴포넌트의 letterSpacing 조절 */
443
+ model_layer.selected.forEach(component => {
444
+ let letterSpacing = component.get('letterSpacing') || Const.DEFAULT.LETTER_SPACING;
445
+ letterSpacing += dir; // direction에 따라 letterSpacing 증가/감소
446
+ component.set('letterSpacing', letterSpacing);
447
+ });
448
+ });
449
+ } else {
450
+ _commandChange.default.around(this.app.commander, () => {
451
+ /* 선택된 컴포넌트의 텍스트 사이즈를 조절한다. */
452
+ model_layer.selected.forEach(component => {
453
+ let fontSize = component.get('fontSize') || Const.DEFAULT.FONT_SIZE;
454
+ if (fontSize < 1) fontSize = 1;
455
+ fontSize += dir; // direction에 따라 fontSize 증가/감소
456
+ component.set('fontSize', fontSize);
457
+ });
458
+ });
459
+ }
460
+ } else {
461
+ var dir = e.deltaY < 0 ? 1 : -1;
462
+ let scale = model_layer.get('scale') || {
463
+ x: 1,
464
+ y: 1
465
+ };
466
+ let translate = model_layer.get('translate');
467
+ let x = e.offsetX;
468
+ let y = e.offsetY;
469
+ let p = model_layer.transcoordC2S(x, y);
470
+ let delta = dir * 0.1;
471
+ let newscale = {
472
+ x: scale.x + delta,
473
+ y: scale.y + delta
474
+ };
475
+ if (dir < 0 && scale.x < 0.2 || dir > 0 && scale.x > 10) return;
476
+
477
+ /* 휠을 밀면.. 확대 : zoom in */
478
+ /* 휠을 당기면.. 축소 : zoom out */
479
+
480
+ model_layer.set('scale', newscale);
481
+ let newp = model_layer.transcoordC2S(x, y);
482
+ model_layer.set('translate', {
483
+ x: translate.x + (newp.x - p.x) * newscale.x,
484
+ y: translate.y + (newp.y - p.y) * newscale.y
485
+ });
486
+ }
487
+ }
488
+ }
489
+ exports.default = ModelingLayer;
490
+ _component.default.register('modeling-layer', ModelingLayer);
491
+ //# sourceMappingURL=modeling-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modeling-layer.js","names":["_commandChange","_interopRequireDefault","require","_commandMigrate","_component","Const","_interopRequireWildcard","_compile","_layer","Modeler","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","ModelingLayer","Layer","constructor","model","context","pathHandler","PathHandler","ph","ch","ControlHandler","rs","Resizer","rt","Rotator","_modelers","_control_mode_modelers","focusOutline","FocusOutline","groupOutline","GroupOutline","anchorHandler","AnchorHandler","_reversed_modelers","slice","reverse","_control_mode_reverse_modelers","hovered","hoveredDest","modelers","_control_mode","reversedModelers","ready","rootModel","translate","scale","contains","x","y","components","selected","filter","c","parent","_state_dragging","_counter_end","point","anchorTarget","transcoordT2S","forEach","modeler","reset","length","component","j","currentModeler","_componentDrawer","logic","ancester","isRootModel","save","restore","push","rotatePoint","parent_scale","rotate","bounds","left","top","component_scale","prerender","rotation","beginPath","clearRect","canvas","width","height","rect","fillStyle","globalAlpha","fill","DPPX","render","focused","draw","isGroup","rootGroup","isLine","_anchorTarget","target","_hovered","invalidate","startLinkProcess","linkFrom","linkModel","processingLink","counterEnd","fromEnd","trigger","anchor","endLinkProcess","eventMap","change","onchange_model","wheel","onwheel_scale","drop","ondrop","mouseenter","onmouseenter","mouseleave","onmouseleave","dblclick","ondblclick_model","onselected","keydown","onkeydown","keyup","onkeyup","hint","origin","key","after","before","deliverer","undefined","event","root","fit","ondblclick","onmousedown","onmouseup","ondragstart","ondragmove","ondragend","transfered","dataTransfer","files","center","transcoordC2S","offsetX","offsetY","Promise","all","Array","from","map","file","resolve","reject","reader","FileReader","addEventListener","result","readAsDataURL","then","altKey","CommandChange","around","app","commander","ondropfile","pendings","changes","idx","type","name","startsWith","compile","src","image","Image","onload","onerror","test","console","log","Boolean","to_container","execute","CommandMigrate","reason","error","deltaY","deltaX","model_layer","shiftKey","navigator","userAgent","indexOf","dir","letterSpacing","DEFAULT","LETTER_SPACING","fontSize","FONT_SIZE","p","delta","newscale","newp","exports","Component","register"],"sources":["../../src/layer/modeling-layer.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport CommandChange from '../command/command-change.js'\nimport CommandMigrate from '../command/command-migrate.js'\nimport Component from '../components/component.js'\nimport * as Const from '../const.js'\nimport compile from '../model/compile.js'\nimport Layer from './layer.js'\nimport * as Modeler from './modeler/index.js'\n\nexport default class ModelingLayer extends Layer {\n constructor(model, context) {\n super(model, context)\n\n this.pathHandler = new Modeler.PathHandler(this)\n var ph = this.pathHandler\n var ch = new Modeler.ControlHandler(this)\n var rs = new Modeler.Resizer(this)\n var rt = new Modeler.Rotator(this)\n\n this._modelers = [ph, ch, rs, rt]\n this._control_mode_modelers = [ch, ph, rs, rt]\n\n this.focusOutline = new Modeler.FocusOutline(this)\n this.groupOutline = new Modeler.GroupOutline(this)\n this.anchorHandler = new Modeler.AnchorHandler(this)\n\n // 그릴 때는 contains 순서의 역순으로 그린다.\n this._reversed_modelers = this._modelers.slice().reverse()\n this._control_mode_reverse_modelers = this._control_mode_modelers.slice().reverse()\n this.hovered = null\n this.hoveredDest = null\n }\n\n get modelers() {\n return this._control_mode ? this._control_mode_modelers : this._modelers\n }\n\n get reversedModelers() {\n return this._control_mode ? this._control_mode_reverse_modelers : this._reversed_modelers\n }\n\n // Lifecycle\n ready() {\n super.ready()\n var rootModel = this.rootModel\n\n var translate = rootModel.get('translate')\n var scale = rootModel.get('scale')\n\n this.set('translate', translate)\n this.set('scale', scale)\n }\n\n contains(x, y) {\n var components = this.selected.filter(c => !!c.parent)\n var scale = this.get('scale') || { x: 1, y: 1 }\n\n if (this._state_dragging) {\n if (this._counter_end) {\n let point = this.anchorTarget.transcoordT2S(x, y)\n if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {\n return true\n }\n }\n\n return true\n }\n\n this.modelers.forEach(modeler => modeler.reset())\n\n /*\n * 부모가 있는 컴포넌트만을 그린다.\n * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)\n */\n var components = this.selected.filter(c => !!c.parent)\n\n for (let i = 0; i < components.length; i++) {\n let component = components[i]\n\n let point = component.transcoordT2S(x, y)\n\n for (let j = 0; j < this.modelers.length; j++) {\n let modeler = this.modelers[j]\n\n if (modeler.contains(point.x, point.y, component, scale)) {\n this.currentModeler = modeler\n return true\n }\n }\n }\n\n if (this.anchorTarget) {\n let point = this.anchorTarget.transcoordT2S(x, y)\n if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {\n this.currentModeler = this.anchorHandler\n return true\n }\n } else {\n this.anchorHandler.reset()\n }\n\n this.currentModeler = null\n return false\n }\n\n _componentDrawer(context, component, scale, logic) {\n let ancester = []\n let parent = component.parent\n\n if (component.isRootModel()) {\n context.save()\n logic(context, component, scale)\n context.restore()\n\n return\n }\n\n while (parent && !parent.isRootModel()) {\n ancester.push(parent)\n parent = parent.parent\n }\n\n context.save()\n\n ancester.reverse().forEach(function (parent) {\n // 원점으로 이동하여 회전.\n let rotatePoint = parent.rotatePoint\n context.translate(rotatePoint.x, rotatePoint.y)\n let parent_scale = parent.get('scale')\n if (parent_scale) context.scale(parent_scale.x, parent_scale.y)\n\n context.rotate(parent.get('rotation'))\n context.translate(-rotatePoint.x, -rotatePoint.y)\n\n let bounds = parent.bounds\n context.translate(bounds.left, bounds.top)\n })\n\n let rotatePoint = component.rotatePoint\n context.translate(rotatePoint.x, rotatePoint.y)\n\n let component_scale = component.get('scale')\n if (component_scale) context.scale(component_scale.x, component_scale.y)\n\n context.rotate(component.get('rotation'))\n context.translate(-rotatePoint.x, -rotatePoint.y)\n\n logic(context, component, scale)\n\n context.restore()\n }\n\n prerender(context) {\n var { translate, scale = { x: 1, y: 1 }, rotation } = this.model\n\n // Scene 모델 바깥쪽을 표현하기 위해서, 먼저 전체 바탕을 회색으로 칠한다.\n context.save()\n context.beginPath()\n\n context.clearRect(0, 0, context.canvas.width, context.canvas.height)\n context.rect(0, 0, context.canvas.width, context.canvas.height)\n\n context.fillStyle = 'black'\n context.globalAlpha = 0.5\n context.fill()\n\n context.restore()\n\n translate && context.translate(translate.x * Const.DPPX, translate.y * Const.DPPX)\n context.scale(scale.x * Const.DPPX, scale.y * Const.DPPX)\n rotation && context.rotate(rotation)\n\n context.clearRect(0, 0, this.rootModel.get('width'), this.rootModel.get('height'))\n }\n\n render(context) {\n context.beginPath()\n\n var scale = this.get('scale') || { x: 1, y: 1 }\n\n /*\n * 부모가 있는 컴포넌트만을 그린다.\n * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)\n */\n var selected = this.selected.filter(c => !!c.parent)\n\n if (this.focused) {\n this._componentDrawer(context, this.focused, scale, (context, component, scale) => {\n this.focusOutline.draw(context, component, scale)\n })\n }\n\n /* TODO selected의 부모가 group인 경우에 최상위 그룹의 모델링 레이아웃을 그려주어야 한다. */\n if (selected.length > 0 && selected[0].parent.isGroup()) {\n let rootGroup = selected[0].parent\n while (rootGroup.parent.isGroup()) rootGroup = rootGroup.parent\n\n this._componentDrawer(context, rootGroup, scale, (context, component, scale) => {\n this.groupOutline.draw(context, component, scale)\n })\n }\n\n selected.forEach(component => {\n this._componentDrawer(context, component, scale, (context, component, scale) => {\n this.reversedModelers.forEach(modeler => modeler.draw(context, component, scale))\n })\n })\n\n this.anchorTarget &&\n this._componentDrawer(context, this.anchorTarget, scale, (context, component, scale) => {\n this.anchorHandler.draw(context, component, scale)\n })\n }\n\n get anchorTarget() {\n if (\n this.currentModeler !== this.anchorHandler &&\n this.currentModeler !== this.pathHandler &&\n !this.hovered?.isLine()\n ) {\n this._anchorTarget = this.hovered\n }\n\n return this._anchorTarget\n }\n\n set anchorTarget(target) {\n this._anchorTarget = target\n }\n\n get hovered() {\n return this._hovered\n }\n\n set hovered(hovered) {\n this._hovered = hovered\n\n this.invalidate()\n }\n\n startLinkProcess(linkFrom, linkModel, e) {\n this.currentModeler = this.pathHandler\n this.processingLink = this.pathHandler.startLinkProcess(linkFrom, linkModel, e)\n this.counterEnd = this.processingLink.fromEnd\n this.processingLink.trigger('tag')\n }\n\n set counterEnd(anchor) {\n this.currentModeler = this.pathHandler\n this._counter_end = anchor\n }\n\n get counterEnd() {\n return this._counter_end\n }\n\n endLinkProcess() {\n this.processingLink?.trigger('tagreset')\n this.processingLink = null\n this._counter_end = null\n }\n\n get eventMap() {\n return {\n 'model-layer': {\n '(all)': {\n change: this.onchange_model,\n wheel: this.onwheel_scale,\n drop: this.ondrop\n },\n '(descendant)': {\n mouseenter: this.onmouseenter,\n mouseleave: this.onmouseleave\n },\n '(self)': {\n dblclick: this.ondblclick_model\n }\n },\n '(root)': {\n '(self)': {\n selected: this.onselected,\n keydown: this.onkeydown,\n keyup: this.onkeyup\n }\n }\n }\n }\n\n onmouseenter(e, hint) {\n this.hovered = hint?.origin\n }\n\n onmouseleave(e, hint) {\n this.hovered = null\n }\n\n onkeydown(e) {\n if (e.key == 'Alt') {\n this._control_mode = true\n this.invalidate()\n }\n }\n\n onkeyup(e) {\n if (e.key == 'Alt') {\n this._control_mode = false\n this.invalidate()\n }\n }\n\n onselected(after, before) {\n this.invalidate()\n }\n\n onchange_model(after, before, hint) {\n var { origin, deliverer } = hint\n\n if (origin === deliverer) {\n if (after.translate)\n // Model Base 레이어와 동일한 translate를 유지하도록 한다.\n this.set('translate', after.translate)\n\n if (after.rotation !== undefined)\n // Model Base 레이어와 동일한 rotation을 유지하도록 한다.\n this.set('rotation', after.rotation)\n\n if (after.scale)\n // Model Base 레이어와 동일한 scale을 유지하도록 한다.\n this.set('scale', after.scale)\n }\n // Model Base 레이어에서 발생하는 대부분의 변화는 Selection 레이어에서도 반영해야한다.\n this.invalidate()\n }\n\n ondblclick_model(event, hint) {\n const target = hint.origin\n\n target?.root.fit()\n }\n\n /* default UI Event Handlers. */\n\n ondblclick(e) {\n if (typeof this.currentModeler.ondblclick === 'function') this.currentModeler.ondblclick(e)\n\n this.invalidate()\n }\n\n onmousedown(e) {\n this.currentModeler.onmousedown(e)\n\n this.invalidate()\n }\n\n onmouseup(e) {\n if (typeof this.currentModeler.onmouseup === 'function') this.currentModeler.onmouseup(e)\n\n this.invalidate()\n }\n\n ondragstart(e) {\n this.currentModeler.ondragstart(e)\n this._state_dragging = true\n }\n\n ondragmove(e) {\n this.currentModeler.ondragmove(e)\n\n this.invalidate()\n }\n\n ondragend(e) {\n this._state_dragging = false\n this.currentModeler.ondragend(e)\n\n this.invalidate()\n }\n\n ondrop(e, hint) {\n /* 현재는 이미지 파일 만 추가할 수 있음 */\n var { origin } = hint\n var transfered = e.dataTransfer.files\n\n if (transfered.length < 1) return\n\n let center = this.rootModel.transcoordC2S(e.offsetX, e.offsetY)\n let rootModel = this.rootModel\n\n Promise.all(\n Array.from(transfered).map(file => {\n return new Promise((resolve, reject) => {\n let reader = new FileReader()\n\n reader.addEventListener('loadend', e => {\n resolve(reader.result)\n })\n ;['error', 'abort'].forEach(event =>\n reader.addEventListener(event, e => {\n reject(e)\n })\n )\n\n reader.readAsDataURL(file)\n })\n })\n ).then(\n files => {\n if (e.altKey) {\n CommandChange.around(this.app.commander, () => {\n origin.ondropfile(transfered, files)\n })\n\n this.selected = [origin]\n return\n }\n\n let pendings = []\n\n let changes = files\n .map((file, idx) => {\n let component\n let type = transfered[idx].type\n let name = transfered[idx].name\n\n if (type.startsWith('image/')) {\n component = compile(\n {\n type: type.startsWith('image/gif') ? 'gif-view' : 'image-view',\n top: 0,\n left: 0,\n width: 200,\n height: 200,\n src: file\n },\n rootModel.app\n )\n\n pendings.push(\n new Promise((resolve, reject) => {\n let image = new Image()\n image.src = file\n\n image.onload = () => {\n component.set({\n width: image.width,\n height: image.height\n })\n\n resolve()\n }\n\n image.onerror = e => {\n reject(e)\n }\n })\n )\n } else if (type.startsWith('audio/')) {\n component = compile(\n {\n type: 'audio',\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n src: file\n },\n rootModel.app\n )\n } else if (type.startsWith('vnd.ms-excel/') || /\\.xlsx?$/.test(name)) {\n component = compile(\n {\n type: 'excel',\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n src: file\n },\n rootModel.app\n )\n } else {\n console.log('droped file', transfered[idx])\n }\n\n if (component) {\n component.center = center\n center.x += 50\n center.y += 50\n }\n\n return component\n })\n .filter(Boolean)\n .map(component => {\n return {\n component: component,\n to_container: rootModel\n }\n })\n\n if (changes.length > 0) {\n Promise.all(pendings).then(\n () => {\n this.app.commander.execute(new CommandMigrate({ changes }))\n this.selected = changes.map(change => change.component)\n },\n reason => {\n console.error(reason)\n }\n )\n }\n },\n reason => {\n console.error(reason)\n }\n )\n }\n\n onwheel_scale(e, hint) {\n /* shiftKey + wheel 은 deltaX 값을 변화시킨다. */\n if (e.deltaY == 0 && e.deltaX == 0) return\n\n var model_layer = hint.deliverer\n\n if (e.shiftKey) {\n // Shift: FontSize 변경\n if (navigator.userAgent.indexOf('Win') != -1) {\n var dir = e.deltaY < 0 ? 1 : -1\n } else {\n var dir = e.deltaX < 0 ? 1 : -1\n }\n\n if (e.altKey) {\n CommandChange.around(this.app.commander, () => {\n /* 선택된 컴포넌트의 letterSpacing 조절 */\n model_layer.selected.forEach(component => {\n let letterSpacing = component.get('letterSpacing') || Const.DEFAULT.LETTER_SPACING\n\n letterSpacing += dir // direction에 따라 letterSpacing 증가/감소\n component.set('letterSpacing', letterSpacing)\n })\n })\n } else {\n CommandChange.around(this.app.commander, () => {\n /* 선택된 컴포넌트의 텍스트 사이즈를 조절한다. */\n model_layer.selected.forEach(component => {\n let fontSize = component.get('fontSize') || Const.DEFAULT.FONT_SIZE\n\n if (fontSize < 1) fontSize = 1\n\n fontSize += dir // direction에 따라 fontSize 증가/감소\n component.set('fontSize', fontSize)\n })\n })\n }\n } else {\n var dir = e.deltaY < 0 ? 1 : -1\n\n let scale = model_layer.get('scale') || { x: 1, y: 1 }\n let translate = model_layer.get('translate')\n let x = e.offsetX\n let y = e.offsetY\n\n let p = model_layer.transcoordC2S(x, y)\n let delta = dir * 0.1\n\n let newscale = {\n x: scale.x + delta,\n y: scale.y + delta\n }\n\n if ((dir < 0 && scale.x < 0.2) || (dir > 0 && scale.x > 10)) return\n\n /* 휠을 밀면.. 확대 : zoom in */\n /* 휠을 당기면.. 축소 : zoom out */\n\n model_layer.set('scale', newscale)\n\n let newp = model_layer.transcoordC2S(x, y)\n\n model_layer.set('translate', {\n x: translate.x + (newp.x - p.x) * newscale.x,\n y: translate.y + (newp.y - p.y) * newscale.y\n })\n }\n }\n}\n\nComponent.register('modeling-layer', ModelingLayer)\n"],"mappings":"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","ignoreList":[]}