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

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 (397) hide show
  1. package/package.json +1 -1
  2. package/things-scene-min.js +11 -11
  3. package/things-scene-min.js.map +1 -1
  4. package/things-scene.mjs +11 -11
  5. package/things-scene.mjs.map +1 -1
  6. package/.cursorignore +0 -62
  7. package/.prettierrc +0 -21
  8. package/assets/icon-audio.png +0 -0
  9. package/assets/icon-gif-viewer.png +0 -0
  10. package/assets/images/spinner.png +0 -0
  11. package/babel.config.js +0 -23
  12. package/db.sqlite +0 -0
  13. package/dist/animation/animate.js +0 -63
  14. package/dist/animation/animate.js.map +0 -1
  15. package/dist/animation/animations/animation.js +0 -122
  16. package/dist/animation/animations/animation.js.map +0 -1
  17. package/dist/animation/animations/fade.js +0 -28
  18. package/dist/animation/animations/fade.js.map +0 -1
  19. package/dist/animation/animations/heartbeat.js +0 -28
  20. package/dist/animation/animations/heartbeat.js.map +0 -1
  21. package/dist/animation/animations/moving.js +0 -24
  22. package/dist/animation/animations/moving.js.map +0 -1
  23. package/dist/animation/animations/outline.js +0 -47
  24. package/dist/animation/animations/outline.js.map +0 -1
  25. package/dist/animation/animations/rotation.js +0 -22
  26. package/dist/animation/animations/rotation.js.map +0 -1
  27. package/dist/animation/animations/vibration.js +0 -31
  28. package/dist/animation/animations/vibration.js.map +0 -1
  29. package/dist/animation/compile.js +0 -31
  30. package/dist/animation/compile.js.map +0 -1
  31. package/dist/animation/delta.js +0 -51
  32. package/dist/animation/delta.js.map +0 -1
  33. package/dist/animation/index.js +0 -14
  34. package/dist/animation/index.js.map +0 -1
  35. package/dist/command/command-change.js +0 -33
  36. package/dist/command/command-change.js.map +0 -1
  37. package/dist/command/command-migrate.js +0 -103
  38. package/dist/command/command-migrate.js.map +0 -1
  39. package/dist/command/command.js +0 -18
  40. package/dist/command/command.js.map +0 -1
  41. package/dist/command/snapshot-commander.js +0 -84
  42. package/dist/command/snapshot-commander.js.map +0 -1
  43. package/dist/components/anchor/anchor.js +0 -105
  44. package/dist/components/anchor/anchor.js.map +0 -1
  45. package/dist/components/anchor/ellipse-anchors.js +0 -53
  46. package/dist/components/anchor/ellipse-anchors.js.map +0 -1
  47. package/dist/components/anchor/rect-anchors.js +0 -53
  48. package/dist/components/anchor/rect-anchors.js.map +0 -1
  49. package/dist/components/audio.js +0 -154
  50. package/dist/components/audio.js.map +0 -1
  51. package/dist/components/cloud.js +0 -44
  52. package/dist/components/cloud.js.map +0 -1
  53. package/dist/components/component.js +0 -1086
  54. package/dist/components/component.js.map +0 -1
  55. package/dist/components/container-abstract.js +0 -387
  56. package/dist/components/container-abstract.js.map +0 -1
  57. package/dist/components/container.js +0 -331
  58. package/dist/components/container.js.map +0 -1
  59. package/dist/components/data/data-mapping.js +0 -82
  60. package/dist/components/data/data-mapping.js.map +0 -1
  61. package/dist/components/data/data.js +0 -166
  62. package/dist/components/data/data.js.map +0 -1
  63. package/dist/components/data/evaluator.js +0 -103
  64. package/dist/components/data/evaluator.js.map +0 -1
  65. package/dist/components/donut.js +0 -104
  66. package/dist/components/donut.js.map +0 -1
  67. package/dist/components/drawer/draw-image-pendable.js +0 -20
  68. package/dist/components/drawer/draw-image-pendable.js.map +0 -1
  69. package/dist/components/drawer/effect.js +0 -19
  70. package/dist/components/drawer/effect.js.map +0 -1
  71. package/dist/components/drawer/fill.js +0 -228
  72. package/dist/components/drawer/fill.js.map +0 -1
  73. package/dist/components/drawer/format.js +0 -115
  74. package/dist/components/drawer/format.js.map +0 -1
  75. package/dist/components/drawer/line.js +0 -191
  76. package/dist/components/drawer/line.js.map +0 -1
  77. package/dist/components/drawer/stroke.js +0 -62
  78. package/dist/components/drawer/stroke.js.map +0 -1
  79. package/dist/components/drawer/text-wrapper.js +0 -51
  80. package/dist/components/drawer/text-wrapper.js.map +0 -1
  81. package/dist/components/drawer/text.js +0 -269
  82. package/dist/components/drawer/text.js.map +0 -1
  83. package/dist/components/ellipse.js +0 -110
  84. package/dist/components/ellipse.js.map +0 -1
  85. package/dist/components/file/ondropfile.js +0 -19
  86. package/dist/components/file/ondropfile.js.map +0 -1
  87. package/dist/components/fit/fit.js +0 -137
  88. package/dist/components/fit/fit.js.map +0 -1
  89. package/dist/components/geometry/transcoord.js +0 -339
  90. package/dist/components/geometry/transcoord.js.map +0 -1
  91. package/dist/components/geometry/union.js +0 -35
  92. package/dist/components/geometry/union.js.map +0 -1
  93. package/dist/components/gif-view.js +0 -128
  94. package/dist/components/gif-view.js.map +0 -1
  95. package/dist/components/global-ref.js +0 -154
  96. package/dist/components/global-ref.js.map +0 -1
  97. package/dist/components/group.js +0 -171
  98. package/dist/components/group.js.map +0 -1
  99. package/dist/components/html/elements.js +0 -24
  100. package/dist/components/html/elements.js.map +0 -1
  101. package/dist/components/html/fill.js +0 -126
  102. package/dist/components/html/fill.js.map +0 -1
  103. package/dist/components/html/reposition.js +0 -119
  104. package/dist/components/html/reposition.js.map +0 -1
  105. package/dist/components/html/shadow.js +0 -24
  106. package/dist/components/html/shadow.js.map +0 -1
  107. package/dist/components/html-overlay-container.js +0 -27
  108. package/dist/components/html-overlay-container.js.map +0 -1
  109. package/dist/components/html-overlay-element.js +0 -22
  110. package/dist/components/html-overlay-element.js.map +0 -1
  111. package/dist/components/image-view.js +0 -193
  112. package/dist/components/image-view.js.map +0 -1
  113. package/dist/components/index.js +0 -231
  114. package/dist/components/index.js.map +0 -1
  115. package/dist/components/info-window.js +0 -416
  116. package/dist/components/info-window.js.map +0 -1
  117. package/dist/components/line.js +0 -374
  118. package/dist/components/line.js.map +0 -1
  119. package/dist/components/local-ref.js +0 -114
  120. package/dist/components/local-ref.js.map +0 -1
  121. package/dist/components/mixins/connectable.js +0 -128
  122. package/dist/components/mixins/connectable.js.map +0 -1
  123. package/dist/components/mixins/data-source.js +0 -34
  124. package/dist/components/mixins/data-source.js.map +0 -1
  125. package/dist/components/mixins/html-element.js +0 -107
  126. package/dist/components/mixins/html-element.js.map +0 -1
  127. package/dist/components/mixins/move-handle.js +0 -73
  128. package/dist/components/mixins/move-handle.js.map +0 -1
  129. package/dist/components/mixins/rect-path.js +0 -113
  130. package/dist/components/mixins/rect-path.js.map +0 -1
  131. package/dist/components/mixins/value-holder.js +0 -81
  132. package/dist/components/mixins/value-holder.js.map +0 -1
  133. package/dist/components/mutater/bounds.js +0 -68
  134. package/dist/components/mutater/bounds.js.map +0 -1
  135. package/dist/components/mutater/path.js +0 -73
  136. package/dist/components/mutater/path.js.map +0 -1
  137. package/dist/components/ortholine.js +0 -763
  138. package/dist/components/ortholine.js.map +0 -1
  139. package/dist/components/outline/ellipse-outline.js +0 -23
  140. package/dist/components/outline/ellipse-outline.js.map +0 -1
  141. package/dist/components/outline/path-outline.js +0 -48
  142. package/dist/components/outline/path-outline.js.map +0 -1
  143. package/dist/components/path.js +0 -49
  144. package/dist/components/path.js.map +0 -1
  145. package/dist/components/polygon.js +0 -91
  146. package/dist/components/polygon.js.map +0 -1
  147. package/dist/components/polyline.js +0 -114
  148. package/dist/components/polyline.js.map +0 -1
  149. package/dist/components/popup.js +0 -160
  150. package/dist/components/popup.js.map +0 -1
  151. package/dist/components/rect.js +0 -72
  152. package/dist/components/rect.js.map +0 -1
  153. package/dist/components/retention/retention-manager.js +0 -81
  154. package/dist/components/retention/retention-manager.js.map +0 -1
  155. package/dist/components/root-container.js +0 -519
  156. package/dist/components/root-container.js.map +0 -1
  157. package/dist/components/ruler.js +0 -103
  158. package/dist/components/ruler.js.map +0 -1
  159. package/dist/components/shape.js +0 -97
  160. package/dist/components/shape.js.map +0 -1
  161. package/dist/components/star.js +0 -103
  162. package/dist/components/star.js.map +0 -1
  163. package/dist/components/text/substitutor.js +0 -92
  164. package/dist/components/text/substitutor.js.map +0 -1
  165. package/dist/components/text.js +0 -21
  166. package/dist/components/text.js.map +0 -1
  167. package/dist/components/triangle.js +0 -92
  168. package/dist/components/triangle.js.map +0 -1
  169. package/dist/const.js +0 -71
  170. package/dist/const.js.map +0 -1
  171. package/dist/core/collection.js +0 -28
  172. package/dist/core/collection.js.map +0 -1
  173. package/dist/core/debug.js +0 -12
  174. package/dist/core/debug.js.map +0 -1
  175. package/dist/core/deep-equals.js +0 -112
  176. package/dist/core/deep-equals.js.map +0 -1
  177. package/dist/core/dom-to-image.js +0 -617
  178. package/dist/core/dom-to-image.js.map +0 -1
  179. package/dist/core/event.js +0 -205
  180. package/dist/core/event.js.map +0 -1
  181. package/dist/core/index.js +0 -21
  182. package/dist/core/index.js.map +0 -1
  183. package/dist/core/list.js +0 -87
  184. package/dist/core/list.js.map +0 -1
  185. package/dist/core/logger.js +0 -29
  186. package/dist/core/logger.js.map +0 -1
  187. package/dist/core/memoize.js +0 -40
  188. package/dist/core/memoize.js.map +0 -1
  189. package/dist/core/mixin.js +0 -26
  190. package/dist/core/mixin.js.map +0 -1
  191. package/dist/core/obj-accessor.js +0 -26
  192. package/dist/core/obj-accessor.js.map +0 -1
  193. package/dist/core/reference-map.js +0 -147
  194. package/dist/core/reference-map.js.map +0 -1
  195. package/dist/core/round-rect.js +0 -62
  196. package/dist/core/round-rect.js.map +0 -1
  197. package/dist/core/safe-round.js +0 -10
  198. package/dist/core/safe-round.js.map +0 -1
  199. package/dist/core/script-loader.js +0 -148
  200. package/dist/core/script-loader.js.map +0 -1
  201. package/dist/core/snapshot-taker.js +0 -59
  202. package/dist/core/snapshot-taker.js.map +0 -1
  203. package/dist/core/stack.js +0 -18
  204. package/dist/core/stack.js.map +0 -1
  205. package/dist/core/timecapsule.js +0 -88
  206. package/dist/core/timecapsule.js.map +0 -1
  207. package/dist/core/utils.js +0 -309
  208. package/dist/core/utils.js.map +0 -1
  209. package/dist/decorator/anchors-decorator.js +0 -53
  210. package/dist/decorator/anchors-decorator.js.map +0 -1
  211. package/dist/decorator/bouncing-arrow-decorator.js +0 -52
  212. package/dist/decorator/bouncing-arrow-decorator.js.map +0 -1
  213. package/dist/decorator/data-spread-decorator.js +0 -69
  214. package/dist/decorator/data-spread-decorator.js.map +0 -1
  215. package/dist/decorator/decotag-decorator.js +0 -33
  216. package/dist/decorator/decotag-decorator.js.map +0 -1
  217. package/dist/decorator/index.js +0 -31
  218. package/dist/decorator/index.js.map +0 -1
  219. package/dist/decorator/link-decorator.js +0 -66
  220. package/dist/decorator/link-decorator.js.map +0 -1
  221. package/dist/effect/gradation.js +0 -37
  222. package/dist/effect/gradation.js.map +0 -1
  223. package/dist/effect/index.js +0 -23
  224. package/dist/effect/index.js.map +0 -1
  225. package/dist/effect/shadow.js +0 -33
  226. package/dist/effect/shadow.js.map +0 -1
  227. package/dist/effect/turn.js +0 -25
  228. package/dist/effect/turn.js.map +0 -1
  229. package/dist/event/event-engine.js +0 -76
  230. package/dist/event/event-engine.js.map +0 -1
  231. package/dist/event/event-pump.js +0 -92
  232. package/dist/event/event-pump.js.map +0 -1
  233. package/dist/event/event-tracker.js +0 -97
  234. package/dist/event/event-tracker.js.map +0 -1
  235. package/dist/event/index.js +0 -21
  236. package/dist/event/index.js.map +0 -1
  237. package/dist/event/ua-event-handler.js +0 -453
  238. package/dist/event/ua-event-handler.js.map +0 -1
  239. package/dist/event-map/animator-handler.js +0 -225
  240. package/dist/event-map/animator-handler.js.map +0 -1
  241. package/dist/event-map/animators/animated-icon.js +0 -265
  242. package/dist/event-map/animators/animated-icon.js.map +0 -1
  243. package/dist/event-map/animators/border-highlighting.js +0 -476
  244. package/dist/event-map/animators/border-highlighting.js.map +0 -1
  245. package/dist/event-map/animators/bouncing-arrow.js +0 -226
  246. package/dist/event-map/animators/bouncing-arrow.js.map +0 -1
  247. package/dist/event-map/event-map.js +0 -36
  248. package/dist/event-map/event-map.js.map +0 -1
  249. package/dist/event-map/index.js +0 -20
  250. package/dist/event-map/index.js.map +0 -1
  251. package/dist/event-map/move-handler.js +0 -233
  252. package/dist/event-map/move-handler.js.map +0 -1
  253. package/dist/event-map/paste-handler.js +0 -176
  254. package/dist/event-map/paste-handler.js.map +0 -1
  255. package/dist/event-map/shift-handler.js +0 -55
  256. package/dist/event-map/shift-handler.js.map +0 -1
  257. package/dist/event-map/text-editor-lite.js +0 -276
  258. package/dist/event-map/text-editor-lite.js.map +0 -1
  259. package/dist/event-map/zoom-handler.js +0 -49
  260. package/dist/event-map/zoom-handler.js.map +0 -1
  261. package/dist/index.js +0 -20
  262. package/dist/index.js.map +0 -1
  263. package/dist/layer/action/emphasize.js +0 -42
  264. package/dist/layer/action/emphasize.js.map +0 -1
  265. package/dist/layer/action/popup.js +0 -461
  266. package/dist/layer/action/popup.js.map +0 -1
  267. package/dist/layer/action/pressed.js +0 -31
  268. package/dist/layer/action/pressed.js.map +0 -1
  269. package/dist/layer/add-layer.js +0 -180
  270. package/dist/layer/add-layer.js.map +0 -1
  271. package/dist/layer/decotag-layer.js +0 -121
  272. package/dist/layer/decotag-layer.js.map +0 -1
  273. package/dist/layer/guide-layer.js +0 -292
  274. package/dist/layer/guide-layer.js.map +0 -1
  275. package/dist/layer/index.js +0 -70
  276. package/dist/layer/index.js.map +0 -1
  277. package/dist/layer/layer.js +0 -230
  278. package/dist/layer/layer.js.map +0 -1
  279. package/dist/layer/minimap-layer.js +0 -84
  280. package/dist/layer/minimap-layer.js.map +0 -1
  281. package/dist/layer/model-layer.js +0 -465
  282. package/dist/layer/model-layer.js.map +0 -1
  283. package/dist/layer/modeler/anchor-handler.js +0 -193
  284. package/dist/layer/modeler/anchor-handler.js.map +0 -1
  285. package/dist/layer/modeler/control-handler.js +0 -95
  286. package/dist/layer/modeler/control-handler.js.map +0 -1
  287. package/dist/layer/modeler/focus-outline.js +0 -41
  288. package/dist/layer/modeler/focus-outline.js.map +0 -1
  289. package/dist/layer/modeler/group-outline.js +0 -30
  290. package/dist/layer/modeler/group-outline.js.map +0 -1
  291. package/dist/layer/modeler/index.js +0 -56
  292. package/dist/layer/modeler/index.js.map +0 -1
  293. package/dist/layer/modeler/path-handler.js +0 -300
  294. package/dist/layer/modeler/path-handler.js.map +0 -1
  295. package/dist/layer/modeler/resizer.js +0 -333
  296. package/dist/layer/modeler/resizer.js.map +0 -1
  297. package/dist/layer/modeler/rotator.js +0 -134
  298. package/dist/layer/modeler/rotator.js.map +0 -1
  299. package/dist/layer/modeling-layer.js +0 -491
  300. package/dist/layer/modeling-layer.js.map +0 -1
  301. package/dist/layer/reaction-layer.js +0 -111
  302. package/dist/layer/reaction-layer.js.map +0 -1
  303. package/dist/layer/scroll-layer.js +0 -191
  304. package/dist/layer/scroll-layer.js.map +0 -1
  305. package/dist/layer/selection/selected-finder.js +0 -96
  306. package/dist/layer/selection/selected-finder.js.map +0 -1
  307. package/dist/layer/selection-layer.js +0 -373
  308. package/dist/layer/selection-layer.js.map +0 -1
  309. package/dist/layer/shift-layer.js +0 -83
  310. package/dist/layer/shift-layer.js.map +0 -1
  311. package/dist/layout/absolute.js +0 -30
  312. package/dist/layout/absolute.js.map +0 -1
  313. package/dist/layout/card.js +0 -52
  314. package/dist/layout/card.js.map +0 -1
  315. package/dist/layout/html-absolute.js +0 -32
  316. package/dist/layout/html-absolute.js.map +0 -1
  317. package/dist/layout/index.js +0 -56
  318. package/dist/layout/index.js.map +0 -1
  319. package/dist/layout/layout.js +0 -36
  320. package/dist/layout/layout.js.map +0 -1
  321. package/dist/layout/linear-horizontal.js +0 -56
  322. package/dist/layout/linear-horizontal.js.map +0 -1
  323. package/dist/layout/linear-vertical.js +0 -56
  324. package/dist/layout/linear-vertical.js.map +0 -1
  325. package/dist/layout/table.js +0 -106
  326. package/dist/layout/table.js.map +0 -1
  327. package/dist/license/license.js +0 -170
  328. package/dist/license/license.js.map +0 -1
  329. package/dist/model/compile.js +0 -40
  330. package/dist/model/compile.js.map +0 -1
  331. package/dist/model/duplicate.js +0 -19
  332. package/dist/model/duplicate.js.map +0 -1
  333. package/dist/model/index.js +0 -34
  334. package/dist/model/index.js.map +0 -1
  335. package/dist/model/selector.js +0 -104
  336. package/dist/model/selector.js.map +0 -1
  337. package/dist/style/compile.js +0 -14
  338. package/dist/style/compile.js.map +0 -1
  339. package/dist/style/index.js +0 -14
  340. package/dist/style/index.js.map +0 -1
  341. package/dist/things-scene/api/add-start.js +0 -18
  342. package/dist/things-scene/api/add-start.js.map +0 -1
  343. package/dist/things-scene/api/add.js +0 -71
  344. package/dist/things-scene/api/add.js.map +0 -1
  345. package/dist/things-scene/api/align.js +0 -116
  346. package/dist/things-scene/api/align.js.map +0 -1
  347. package/dist/things-scene/api/center-to.js +0 -50
  348. package/dist/things-scene/api/center-to.js.map +0 -1
  349. package/dist/things-scene/api/change.js +0 -27
  350. package/dist/things-scene/api/change.js.map +0 -1
  351. package/dist/things-scene/api/clipboard.js +0 -45
  352. package/dist/things-scene/api/clipboard.js.map +0 -1
  353. package/dist/things-scene/api/distribute.js +0 -57
  354. package/dist/things-scene/api/distribute.js.map +0 -1
  355. package/dist/things-scene/api/duplicate.js +0 -47
  356. package/dist/things-scene/api/duplicate.js.map +0 -1
  357. package/dist/things-scene/api/fullscreen.js +0 -26
  358. package/dist/things-scene/api/fullscreen.js.map +0 -1
  359. package/dist/things-scene/api/group.js +0 -91
  360. package/dist/things-scene/api/group.js.map +0 -1
  361. package/dist/things-scene/api/ids.js +0 -28
  362. package/dist/things-scene/api/ids.js.map +0 -1
  363. package/dist/things-scene/api/index.js +0 -192
  364. package/dist/things-scene/api/index.js.map +0 -1
  365. package/dist/things-scene/api/listener.js +0 -69
  366. package/dist/things-scene/api/listener.js.map +0 -1
  367. package/dist/things-scene/api/paste-start.js +0 -27
  368. package/dist/things-scene/api/paste-start.js.map +0 -1
  369. package/dist/things-scene/api/place.js +0 -98
  370. package/dist/things-scene/api/place.js.map +0 -1
  371. package/dist/things-scene/api/remove.js +0 -57
  372. package/dist/things-scene/api/remove.js.map +0 -1
  373. package/dist/things-scene/api/symmetry.js +0 -47
  374. package/dist/things-scene/api/symmetry.js.map +0 -1
  375. package/dist/things-scene/api/to-data-url.js +0 -76
  376. package/dist/things-scene/api/to-data-url.js.map +0 -1
  377. package/dist/things-scene/api/zorder.js +0 -68
  378. package/dist/things-scene/api/zorder.js.map +0 -1
  379. package/dist/things-scene/application-context.js +0 -168
  380. package/dist/things-scene/application-context.js.map +0 -1
  381. package/dist/things-scene/config.js +0 -18
  382. package/dist/things-scene/config.js.map +0 -1
  383. package/dist/things-scene/create.js +0 -67
  384. package/dist/things-scene/create.js.map +0 -1
  385. package/dist/things-scene/fps.js +0 -26
  386. package/dist/things-scene/fps.js.map +0 -1
  387. package/dist/things-scene/index.js +0 -152
  388. package/dist/things-scene/index.js.map +0 -1
  389. package/dist/things-scene/polyfill.js +0 -111
  390. package/dist/things-scene/polyfill.js.map +0 -1
  391. package/dist/things-scene/scene.js +0 -442
  392. package/dist/things-scene/scene.js.map +0 -1
  393. package/dist/things-scene/version.js +0 -12
  394. package/dist/things-scene/version.js.map +0 -1
  395. package/rollup.config.js +0 -67
  396. package/schema.graphql +0 -4606
  397. package/tsconfig.json +0 -31
@@ -1,491 +0,0 @@
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
@@ -1 +0,0 @@
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":[]}