@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,453 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ exports.trigger = trigger;
8
+ var Const = _interopRequireWildcard(require("../const.js"));
9
+ 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); }
10
+ 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; }
11
+ /*
12
+ * Copyright © HatioLab Inc. All rights reserved.
13
+ */
14
+
15
+ /* 여기서는 사용자 이벤트 관련한 처리를 담당한다.
16
+ - 사용자 이벤트를 브라우저에서 서브스크라이브한다.
17
+ - 드래그 관련된 이벤트를 생성한다.
18
+ */
19
+
20
+ const STATUS = {
21
+ NORMAL: 0,
22
+ DRAGGABLE: 1,
23
+ DRAGGING: 2
24
+ };
25
+ const TOUCH_STATUS = {
26
+ NORMAL: 0,
27
+ TOUCH_START: 1,
28
+ TOUCH_MOVE: 2,
29
+ TOUCH_END: 3,
30
+ TOUCH_CANCEL: 4
31
+ };
32
+ const DRAG_THRESHOLD = 16;
33
+ const DOUBLE_TAP_INTERVAL = 500;
34
+ const TAP_HOLD_INTERVAL = 500;
35
+ var LAST_OFFSET = {};
36
+ var LAST_TOUCHES_DISTANCE = 0;
37
+ function getOffset(e) {
38
+ if (e.touches) {
39
+ let touch = e.touches[0];
40
+ if (!touch) return LAST_OFFSET;
41
+ let targetBound = touch.target.getBoundingClientRect();
42
+ LAST_OFFSET = {
43
+ x: e.offsetX || touch.clientX - (targetBound.x || targetBound.left),
44
+ y: e.offsetY || touch.clientY - (targetBound.y || targetBound.top)
45
+ };
46
+ return LAST_OFFSET;
47
+ }
48
+ return {
49
+ x: e.offsetX,
50
+ y: e.offsetY
51
+ };
52
+ }
53
+ function getTouchPointDistance(e) {
54
+ var minX,
55
+ maxX = 0,
56
+ minY,
57
+ maxY = 0;
58
+ var touchPointDistance = 0;
59
+ if (e.touches.length === 1) return touchPointDistance;
60
+ Array.from(e.touches).forEach(touch => {
61
+ minX = minX != undefined ? Math.min(touch.screenX, minX) : touch.screenX;
62
+ maxX = Math.max(touch.screenX, maxX);
63
+ minY = minY != undefined ? Math.min(touch.screenY, minY) : touch.screenY;
64
+ maxY = Math.max(touch.screenY, maxY);
65
+ });
66
+ var distanceX = maxX - minX || 0;
67
+ var distanceY = maxY - minY || 0;
68
+ touchPointDistance = Math.sqrt(Math.pow(distanceX, 2) + Math.pow(distanceY, 2)) || 0;
69
+ return touchPointDistance;
70
+ }
71
+ class _Event {
72
+ constructor(e, type) {
73
+ // this.originalEvent = e
74
+
75
+ this._type = type || e.type;
76
+ this._ctrlKey = e.ctrlKey;
77
+ this._altKey = e.altKey;
78
+ this._shiftKey = e.shiftKey;
79
+ this._metaKey = e.metaKey;
80
+ var offset = getOffset(e);
81
+ this._offsetX = offset.x;
82
+ this._offsetY = offset.y;
83
+ if (e.type == 'wheel') {
84
+ this.deltaX = e.deltaX;
85
+ this.deltaY = e.deltaY;
86
+ this.deltaZ = e.deltaZ;
87
+ } else if (e.type == 'drop') {
88
+ this.dataTransfer = e.dataTransfer;
89
+ } else if (e.type.match(/^touch/)) {
90
+ this._scale = e.scale;
91
+ this._touches = e.touches;
92
+ this._changedTouches = e.changedTouches;
93
+ if (this._scale == undefined) {
94
+ var touchPointDistance = getTouchPointDistance(e);
95
+ if (LAST_TOUCHES_DISTANCE > 0) this._scale = touchPointDistance / LAST_TOUCHES_DISTANCE;
96
+ LAST_TOUCHES_DISTANCE = touchPointDistance;
97
+ }
98
+ }
99
+ }
100
+ get type() {
101
+ return this._type;
102
+ }
103
+ set type(type) {
104
+ this._type = type;
105
+ }
106
+ get offsetX() {
107
+ return this._offsetX;
108
+ }
109
+ get offsetY() {
110
+ return this._offsetY;
111
+ }
112
+ get altKey() {
113
+ return this._altKey;
114
+ }
115
+ get ctrlKey() {
116
+ return this._ctrlKey;
117
+ }
118
+ get shiftKey() {
119
+ return this._shiftKey;
120
+ }
121
+ get metaKey() {
122
+ return this._metaKey;
123
+ }
124
+ get touches() {
125
+ return this._touches;
126
+ }
127
+ get changedTouches() {
128
+ return this._changedTouches;
129
+ }
130
+ get scale() {
131
+ return this._scale;
132
+ }
133
+ stopPropagation() {
134
+ this._stop_ = true;
135
+ if (this.originalEvent && typeof this.originalEvent.stopPropagation === 'function') {
136
+ this.originalEvent.stopPropagation();
137
+ }
138
+ }
139
+ isPropagationStopped() {
140
+ return this._stop_;
141
+ }
142
+ preventDefault() {
143
+ this._prevented = true; // 사용자 정의 상태 플래그 설정
144
+ }
145
+ isDefaultPrevented() {
146
+ return this._prevented; // 기본 동작이 방지되었는지 확인
147
+ }
148
+ }
149
+ function find_target(container, e) {
150
+ /* UA 이벤트의 타겟(즉, 이벤트 캡쳐된 컴포넌트)를 찾는다 */
151
+ return container.capture(e.offsetX, e.offsetY);
152
+ }
153
+ function trigger(target, type, e) {
154
+ if (!target || !target.app) {
155
+ return;
156
+ }
157
+ if (target.app.isViewMode && target.hidden) {
158
+ return;
159
+ }
160
+ if (!(e instanceof _Event) || type !== e.type) {
161
+ e = new _Event(e, type);
162
+ }
163
+ var handler = 'on' + type;
164
+ target[handler] && target[handler](e);
165
+ if (!e.isPropagationStopped()) {
166
+ target.trigger(type, e);
167
+ }
168
+ }
169
+ class UAEventHandler {
170
+ /*
171
+ * container : things-scene의 최상위 컨테이너임
172
+ * html_element : things-scene이 그려질 상위 HTML 엘리먼트임.
173
+ */
174
+ constructor(container, html_element) {
175
+ this.container = container;
176
+ this.html_element = html_element;
177
+ this.status = STATUS.NORMAL;
178
+ this.last_target = null;
179
+ this.gesture_handlers = Const.GESTURES.map(type => this.gestureHandlerBuilder(type));
180
+ this.keyevent_handlers = Const.KEYEVENTS.map(type => this.keyeventHandlerBuilder(type));
181
+ Const.GESTURES.forEach((type, idx) => html_element.addEventListener(type, this.gesture_handlers[idx]), {
182
+ passive: false
183
+ });
184
+ Const.KEYEVENTS.forEach((type, idx) => html_element.addEventListener(type, this.keyevent_handlers[idx]));
185
+
186
+ /* File Drag & Drop Handler */
187
+ html_element.ondragover = this.gestureHandlerBuilder('dragover');
188
+ html_element.ondrop = this.gestureHandlerBuilder('drop');
189
+
190
+ // DIV에서 keydown 이벤트를 받을 수 있도록 하는 두가지 방법임.
191
+ // 방법 1. tabIndex 속성을 준다.
192
+ html_element.tabIndex = 1;
193
+ // 방법 2. contenteditable 속성을 부여한다.
194
+ // -- 두가지 방법 모두 safari, chrome에서 동작한다.
195
+ // -- 두가지 방법 모두 firefox에서 동작하지 않는다.
196
+ // -- 이 방법은 Edge브라우저에서 DIV에 키보드캐럿을 보인다.
197
+ // html_element.setAttribute('contenteditable', "true");
198
+ }
199
+ dispose() {
200
+ if (this.last_enter_target) {
201
+ trigger(this.last_enter_target, 'mouseleave', new CustomEvent('mouseleave'));
202
+ }
203
+ Const.GESTURES.forEach((type, idx) => this.html_element.removeEventListener(type, this.gesture_handlers[idx]));
204
+ Const.KEYEVENTS.forEach((type, idx) => this.html_element.removeEventListener(type, this.keyevent_handlers[idx]));
205
+ delete this.gesture_handlers;
206
+ delete this.keyevent_handlers;
207
+ delete this.last_target;
208
+ }
209
+ gestureHandlerBuilder(type) {
210
+ var handler = this[`on${type}`].bind(this);
211
+ return e => {
212
+ const _e = new _Event(e);
213
+ handler(_e);
214
+ _e.isDefaultPrevented() && e.preventDefault();
215
+ return false;
216
+ };
217
+ }
218
+ keyeventHandlerBuilder(type) {
219
+ return this[`on${type}`].bind(this);
220
+ }
221
+ ondragover(e) {
222
+ var target = find_target(this.container, e);
223
+ trigger(target, e.type, e);
224
+ return false;
225
+ }
226
+ ondrop(e) {
227
+ var target = find_target(this.container, e);
228
+ trigger(target, e.type, e);
229
+ return false;
230
+ }
231
+ ondblclick(e) {
232
+ var target = find_target(this.container, e);
233
+ trigger(target, e.type, e);
234
+ this.last_target = null;
235
+ return false;
236
+ }
237
+ onkeydown(e) {
238
+ // keydown 이벤트를 각 컴포넌트에서 받을 필요가 있을 때 아래 코멘트 부분을 제거할 것.
239
+ // var prevent, selected = this.container.selected;
240
+ //
241
+ // if(selected.length === 1)
242
+ // prevent = selected[0].onkeydown && selected[0].onkeydown(new _Event(e));
243
+ //
244
+ // if(prevent) {
245
+ // e.preventDefault();
246
+ // return true
247
+ // }
248
+
249
+ /* 키보드 이벤트는 최상위 컨테이너에서만 발생하도록 한다. */
250
+ this.container.trigger(e.type, e);
251
+ return false;
252
+ }
253
+ onkeyup(e) {
254
+ /* 키보드 이벤트는 최상위 컨테이너에서만 발생하도록 한다. */
255
+ this.container.trigger(e.type, e);
256
+ return false;
257
+ }
258
+ onmousemove(e) {
259
+ /* pre-state */
260
+ switch (this.status) {
261
+ case STATUS.DRAGGABLE:
262
+ let diffX = e.offsetX - this.__dragstart_e.offsetX;
263
+ let diffY = e.offsetY - this.__dragstart_e.offsetY;
264
+ if (diffX * diffX + diffY * diffY < DRAG_THRESHOLD) break;
265
+ this.status = STATUS.DRAGGING;
266
+
267
+ /* TODO dragstart의 포인트 포지션을 원래의 포지션으로 보내주어야 한다. */
268
+ trigger(this.last_target, 'dragstart', this.__dragstart_e);
269
+ this.__dragmove_e = e;
270
+ trigger(this.last_target, 'dragmove', e);
271
+ break;
272
+ case STATUS.DRAGGING:
273
+ this.__dragmove_e = e;
274
+ trigger(this.last_target, 'dragmove', e);
275
+ break;
276
+ default:
277
+ var target = find_target(this.container, e);
278
+ if (this.last_enter_target !== target) {
279
+ if (this.last_enter_target) trigger(this.last_enter_target, 'mouseleave', e);
280
+ if (target) trigger(target, 'mouseenter', e);
281
+ this.last_enter_target = target;
282
+ }
283
+ trigger(target, e.type, e);
284
+ this.last_target = target;
285
+ }
286
+ return false;
287
+ }
288
+ onmousedown(e) {
289
+ /* pre-state */
290
+ switch (this.status) {
291
+ case STATUS.DRAGGING:
292
+ trigger(this.last_target, 'dragend', e);
293
+ this.last_target = null;
294
+ this.status = STATUS.NORMAL;
295
+ break;
296
+ default:
297
+ var target = find_target(this.container, e);
298
+ this.last_target = target;
299
+ this.status = STATUS.DRAGGABLE;
300
+ this.__dragstart_e = e;
301
+ trigger(target, e.type, e);
302
+ }
303
+ return false;
304
+ }
305
+ onmouseup(e) {
306
+ /* pre-state */
307
+ switch (this.status) {
308
+ case STATUS.DRAGGING:
309
+ trigger(this.last_target, 'dragend', e);
310
+ break;
311
+ default:
312
+ var target = find_target(this.container, e);
313
+ trigger(target, e.type, e);
314
+ if (this.last_target === target) {
315
+ /**
316
+ * [ 주의 ] window의 click 이벤트를 사용하지 않는다. mouseup 이벤트에서 판단하여 click 이벤트를 발생시켜야 한다.
317
+ * 원인. 모바일 환경에서 Popup 된 보드에서는 (알 수 없는 이유로) 약 2.5초동안 click 이벤트가 발생하지 않기 때문에, 사용성에 불편을 겪을 수 있기 때문이다.
318
+ *
319
+ * [ caution ] Do not use the click event of the window. The click event should be triggered by judging from the mouseup event.
320
+ * cause. This is because in the mobile environment, the click event does not occur for about 2.5 seconds on the popup board (for unknown reasons), which may cause usability problems.
321
+ */
322
+
323
+ trigger(target, 'click', e);
324
+ }
325
+ }
326
+ this.last_target = null;
327
+ this.status = STATUS.NORMAL;
328
+ return false;
329
+ }
330
+ onmouseout(e) {
331
+ var target = find_target(this.container, e);
332
+
333
+ /* pre-state */
334
+ switch (this.status) {
335
+ case STATUS.DRAGGING:
336
+ trigger(this.last_target, 'dragend', e);
337
+ break;
338
+ default:
339
+ if (this.last_target && this.last_target === target) return;
340
+ if (this.last_enter_target) {
341
+ trigger(this.last_enter_target, 'mouseleave', e);
342
+ delete this.last_enter_target;
343
+ }
344
+ }
345
+ this.last_target = null;
346
+ this.status = STATUS.NORMAL;
347
+ return false;
348
+ }
349
+ ontouchstart(e) {
350
+ var target = find_target(this.container, e);
351
+ this.last_target = target;
352
+ this.status = TOUCH_STATUS.TOUCH_START;
353
+ if (!this.touchPoints) this.touchPoints = [];
354
+ this.touchPoints.push(e.changedTouches[0]);
355
+ this.holdTimer = setTimeout(() => {
356
+ this.status = TOUCH_STATUS.NORMAL;
357
+ trigger(this.last_target, 'hold', e);
358
+ delete this.holdTimer;
359
+ }, TAP_HOLD_INTERVAL);
360
+ trigger(target, e.type, e);
361
+ return false;
362
+ }
363
+ ontouchmove(e) {
364
+ if (!(e.touches && e.changedTouches)) {
365
+ /* TODO dragstart의 포인트 포지션을 원래의 포지션으로 보내주어야 한다. */
366
+ trigger(this.last_target, 'dragstart', e);
367
+ trigger(this.last_target, 'dragmove', e);
368
+ return false;
369
+ }
370
+ var target = find_target(this.container, e);
371
+ /* pre-state */
372
+ switch (this.status) {
373
+ case TOUCH_STATUS.TOUCH_START:
374
+ Array.from(e.changedTouches).forEach(tp => {
375
+ var touchPoint = this.touchPoints.find(p => {
376
+ return p.identifier === tp.identifier;
377
+ });
378
+ if (!touchPoint) return;
379
+ var diffX = touchPoint.clientX - tp.clientX;
380
+ var diffY = touchPoint.clientY - tp.clientY;
381
+ if (Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) >= DRAG_THRESHOLD) {
382
+ this.status = TOUCH_STATUS.TOUCH_MOVE;
383
+ if (this.holdTimer) {
384
+ clearTimeout(this.holdTimer);
385
+ delete this.holdTimer;
386
+ }
387
+ return;
388
+ }
389
+ });
390
+ break;
391
+ case TOUCH_STATUS.TOUCH_MOVE:
392
+ if (this.holdTimer) {
393
+ clearTimeout(this.holdTimer);
394
+ delete this.holdTimer;
395
+ }
396
+ if (e.changedTouches.length === 2) {
397
+ if (e.scale != undefined && e.scale !== 1 && (e.scale < 0.9 || e.scale > 1.1)) {
398
+ trigger(this.last_target, 'pinch', e);
399
+ return false;
400
+ }
401
+ }
402
+ trigger(this.last_target, 'pan', e);
403
+ target = this.last_target;
404
+ break;
405
+ default:
406
+ if (this.last_enter_target !== target) {
407
+ if (this.last_enter_target) trigger(this.last_enter_target, 'mouseleave', e);
408
+ if (target) trigger(target, 'mouseenter', e);
409
+ this.last_enter_target = target;
410
+ }
411
+ this.last_target = target;
412
+ break;
413
+ }
414
+ trigger(target, 'touchmove', e);
415
+ return false;
416
+ }
417
+ ontouchend(e) {
418
+ var target = find_target(this.container, e);
419
+ /* pre-state */
420
+ switch (this.status) {
421
+ case TOUCH_STATUS.TOUCH_MOVE:
422
+ target = this.last_target;
423
+ break;
424
+ case TOUCH_STATUS.TOUCH_START:
425
+ var now = performance.now();
426
+ var touchInterval = now - this.touchedAt;
427
+ if (this.holdTimer) {
428
+ clearTimeout(this.holdTimer);
429
+ delete this.holdTimer;
430
+ if (touchInterval < DOUBLE_TAP_INTERVAL) trigger(target, 'doubletap', e);else trigger(target, 'tap', e);
431
+ this.touchedAt = now;
432
+ }
433
+ break;
434
+ default:
435
+ break;
436
+ }
437
+ trigger(target, 'touchend', e);
438
+ var touchPointIndex = this.touchPoints.findIndex(tp => {
439
+ return tp.identifier === e.changedTouches[0].identifier;
440
+ });
441
+ this.touchPoints.splice(touchPointIndex, 1);
442
+ this.last_target = null;
443
+ this.status = TOUCH_STATUS.NORMAL;
444
+ return false;
445
+ }
446
+ onwheel(e) {
447
+ var target = find_target(this.container, e);
448
+ trigger(target, e.type, e);
449
+ return false;
450
+ }
451
+ }
452
+ exports.default = UAEventHandler;
453
+ //# sourceMappingURL=ua-event-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ua-event-handler.js","names":["Const","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","STATUS","NORMAL","DRAGGABLE","DRAGGING","TOUCH_STATUS","TOUCH_START","TOUCH_MOVE","TOUCH_END","TOUCH_CANCEL","DRAG_THRESHOLD","DOUBLE_TAP_INTERVAL","TAP_HOLD_INTERVAL","LAST_OFFSET","LAST_TOUCHES_DISTANCE","getOffset","touches","touch","targetBound","target","getBoundingClientRect","x","offsetX","clientX","left","y","offsetY","clientY","top","getTouchPointDistance","minX","maxX","minY","maxY","touchPointDistance","length","Array","from","forEach","undefined","Math","min","screenX","max","screenY","distanceX","distanceY","sqrt","pow","_Event","constructor","type","_type","_ctrlKey","ctrlKey","_altKey","altKey","_shiftKey","shiftKey","_metaKey","metaKey","offset","_offsetX","_offsetY","deltaX","deltaY","deltaZ","dataTransfer","match","_scale","scale","_touches","_changedTouches","changedTouches","stopPropagation","_stop_","originalEvent","isPropagationStopped","preventDefault","_prevented","isDefaultPrevented","find_target","container","capture","trigger","app","isViewMode","hidden","handler","UAEventHandler","html_element","status","last_target","gesture_handlers","GESTURES","map","gestureHandlerBuilder","keyevent_handlers","KEYEVENTS","keyeventHandlerBuilder","idx","addEventListener","passive","ondragover","ondrop","tabIndex","dispose","last_enter_target","CustomEvent","removeEventListener","bind","_e","ondblclick","onkeydown","onkeyup","onmousemove","diffX","__dragstart_e","diffY","__dragmove_e","onmousedown","onmouseup","onmouseout","ontouchstart","touchPoints","push","holdTimer","setTimeout","ontouchmove","tp","touchPoint","find","p","identifier","clearTimeout","ontouchend","now","performance","touchInterval","touchedAt","touchPointIndex","findIndex","splice","onwheel","exports"],"sources":["../../src/event/ua-event-handler.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as Const from '../const.js'\n\n/* 여기서는 사용자 이벤트 관련한 처리를 담당한다.\n - 사용자 이벤트를 브라우저에서 서브스크라이브한다.\n - 드래그 관련된 이벤트를 생성한다.\n*/\n\nconst STATUS = {\n NORMAL: 0,\n DRAGGABLE: 1,\n DRAGGING: 2\n}\n\nconst TOUCH_STATUS = {\n NORMAL: 0,\n TOUCH_START: 1,\n TOUCH_MOVE: 2,\n TOUCH_END: 3,\n TOUCH_CANCEL: 4\n}\n\nconst DRAG_THRESHOLD = 16\n\nconst DOUBLE_TAP_INTERVAL = 500\nconst TAP_HOLD_INTERVAL = 500\n\nvar LAST_OFFSET = {}\nvar LAST_TOUCHES_DISTANCE = 0\n\nfunction getOffset(e) {\n if (e.touches) {\n let touch = e.touches[0]\n if (!touch) return LAST_OFFSET\n\n let targetBound = touch.target.getBoundingClientRect()\n\n LAST_OFFSET = {\n x: e.offsetX || touch.clientX - (targetBound.x || targetBound.left),\n y: e.offsetY || touch.clientY - (targetBound.y || targetBound.top)\n }\n return LAST_OFFSET\n }\n\n return {\n x: e.offsetX,\n y: e.offsetY\n }\n}\n\nfunction getTouchPointDistance(e) {\n var minX,\n maxX = 0,\n minY,\n maxY = 0\n var touchPointDistance = 0\n\n if (e.touches.length === 1) return touchPointDistance\n\n Array.from(e.touches).forEach(touch => {\n minX = minX != undefined ? Math.min(touch.screenX, minX) : touch.screenX\n maxX = Math.max(touch.screenX, maxX)\n minY = minY != undefined ? Math.min(touch.screenY, minY) : touch.screenY\n maxY = Math.max(touch.screenY, maxY)\n })\n\n var distanceX = maxX - minX || 0\n var distanceY = maxY - minY || 0\n\n touchPointDistance = Math.sqrt(Math.pow(distanceX, 2) + Math.pow(distanceY, 2)) || 0\n\n return touchPointDistance\n}\n\nclass _Event {\n constructor(e, type) {\n // this.originalEvent = e\n\n this._type = type || e.type\n this._ctrlKey = e.ctrlKey\n this._altKey = e.altKey\n this._shiftKey = e.shiftKey\n this._metaKey = e.metaKey\n\n var offset = getOffset(e)\n\n this._offsetX = offset.x\n this._offsetY = offset.y\n\n if (e.type == 'wheel') {\n this.deltaX = e.deltaX\n this.deltaY = e.deltaY\n this.deltaZ = e.deltaZ\n } else if (e.type == 'drop') {\n this.dataTransfer = e.dataTransfer\n } else if (e.type.match(/^touch/)) {\n this._scale = e.scale\n this._touches = e.touches\n this._changedTouches = e.changedTouches\n\n if (this._scale == undefined) {\n var touchPointDistance = getTouchPointDistance(e)\n\n if (LAST_TOUCHES_DISTANCE > 0) this._scale = touchPointDistance / LAST_TOUCHES_DISTANCE\n\n LAST_TOUCHES_DISTANCE = touchPointDistance\n }\n }\n }\n\n get type() {\n return this._type\n }\n\n set type(type) {\n this._type = type\n }\n\n get offsetX() {\n return this._offsetX\n }\n\n get offsetY() {\n return this._offsetY\n }\n\n get altKey() {\n return this._altKey\n }\n\n get ctrlKey() {\n return this._ctrlKey\n }\n\n get shiftKey() {\n return this._shiftKey\n }\n\n get metaKey() {\n return this._metaKey\n }\n\n get touches() {\n return this._touches\n }\n get changedTouches() {\n return this._changedTouches\n }\n\n get scale() {\n return this._scale\n }\n\n stopPropagation() {\n this._stop_ = true\n if (this.originalEvent && typeof this.originalEvent.stopPropagation === 'function') {\n this.originalEvent.stopPropagation()\n }\n }\n\n isPropagationStopped() {\n return this._stop_\n }\n\n preventDefault() {\n this._prevented = true // 사용자 정의 상태 플래그 설정\n }\n\n isDefaultPrevented() {\n return this._prevented // 기본 동작이 방지되었는지 확인\n }\n}\n\nfunction find_target(container, e) {\n /* UA 이벤트의 타겟(즉, 이벤트 캡쳐된 컴포넌트)를 찾는다 */\n return container.capture(e.offsetX, e.offsetY)\n}\n\nexport function trigger(target, type, e) {\n if (!target || !target.app) {\n return\n }\n\n if (target.app.isViewMode && target.hidden) {\n return\n }\n\n if (!(e instanceof _Event) || type !== e.type) {\n e = new _Event(e, type)\n }\n\n var handler = 'on' + type\n target[handler] && target[handler](e)\n\n if (!e.isPropagationStopped()) {\n target.trigger(type, e)\n }\n}\n\nexport default class UAEventHandler {\n /*\n * container : things-scene의 최상위 컨테이너임\n * html_element : things-scene이 그려질 상위 HTML 엘리먼트임.\n */\n constructor(container, html_element) {\n this.container = container\n this.html_element = html_element\n\n this.status = STATUS.NORMAL\n this.last_target = null\n\n this.gesture_handlers = Const.GESTURES.map(type => this.gestureHandlerBuilder(type))\n this.keyevent_handlers = Const.KEYEVENTS.map(type => this.keyeventHandlerBuilder(type))\n\n Const.GESTURES.forEach((type, idx) => html_element.addEventListener(type, this.gesture_handlers[idx]), {\n passive: false\n })\n Const.KEYEVENTS.forEach((type, idx) => html_element.addEventListener(type, this.keyevent_handlers[idx]))\n\n /* File Drag & Drop Handler */\n html_element.ondragover = this.gestureHandlerBuilder('dragover')\n html_element.ondrop = this.gestureHandlerBuilder('drop')\n\n // DIV에서 keydown 이벤트를 받을 수 있도록 하는 두가지 방법임.\n // 방법 1. tabIndex 속성을 준다.\n html_element.tabIndex = 1\n // 방법 2. contenteditable 속성을 부여한다.\n // -- 두가지 방법 모두 safari, chrome에서 동작한다.\n // -- 두가지 방법 모두 firefox에서 동작하지 않는다.\n // -- 이 방법은 Edge브라우저에서 DIV에 키보드캐럿을 보인다.\n // html_element.setAttribute('contenteditable', \"true\");\n }\n\n dispose() {\n if (this.last_enter_target) {\n trigger(this.last_enter_target, 'mouseleave', new CustomEvent('mouseleave'))\n }\n\n Const.GESTURES.forEach((type, idx) => this.html_element.removeEventListener(type, this.gesture_handlers[idx]))\n Const.KEYEVENTS.forEach((type, idx) => this.html_element.removeEventListener(type, this.keyevent_handlers[idx]))\n\n delete this.gesture_handlers\n delete this.keyevent_handlers\n delete this.last_target\n }\n\n gestureHandlerBuilder(type) {\n var handler = this[`on${type}`].bind(this)\n\n return e => {\n const _e = new _Event(e)\n handler(_e)\n\n _e.isDefaultPrevented() && e.preventDefault()\n\n return false\n }\n }\n\n keyeventHandlerBuilder(type) {\n return this[`on${type}`].bind(this)\n }\n\n ondragover(e) {\n var target = find_target(this.container, e)\n\n trigger(target, e.type, e)\n return false\n }\n\n ondrop(e) {\n var target = find_target(this.container, e)\n\n trigger(target, e.type, e)\n\n return false\n }\n\n ondblclick(e) {\n var target = find_target(this.container, e)\n\n trigger(target, e.type, e)\n\n this.last_target = null\n\n return false\n }\n\n onkeydown(e) {\n // keydown 이벤트를 각 컴포넌트에서 받을 필요가 있을 때 아래 코멘트 부분을 제거할 것.\n // var prevent, selected = this.container.selected;\n //\n // if(selected.length === 1)\n // prevent = selected[0].onkeydown && selected[0].onkeydown(new _Event(e));\n //\n // if(prevent) {\n // e.preventDefault();\n // return true\n // }\n\n /* 키보드 이벤트는 최상위 컨테이너에서만 발생하도록 한다. */\n this.container.trigger(e.type, e)\n\n return false\n }\n\n onkeyup(e) {\n /* 키보드 이벤트는 최상위 컨테이너에서만 발생하도록 한다. */\n this.container.trigger(e.type, e)\n\n return false\n }\n\n onmousemove(e) {\n /* pre-state */\n switch (this.status) {\n case STATUS.DRAGGABLE:\n let diffX = e.offsetX - this.__dragstart_e.offsetX\n let diffY = e.offsetY - this.__dragstart_e.offsetY\n\n if (diffX * diffX + diffY * diffY < DRAG_THRESHOLD) break\n\n this.status = STATUS.DRAGGING\n\n /* TODO dragstart의 포인트 포지션을 원래의 포지션으로 보내주어야 한다. */\n trigger(this.last_target, 'dragstart', this.__dragstart_e)\n\n this.__dragmove_e = e\n trigger(this.last_target, 'dragmove', e)\n\n break\n\n case STATUS.DRAGGING:\n this.__dragmove_e = e\n trigger(this.last_target, 'dragmove', e)\n\n break\n\n default:\n var target = find_target(this.container, e)\n\n if (this.last_enter_target !== target) {\n if (this.last_enter_target) trigger(this.last_enter_target, 'mouseleave', e)\n if (target) trigger(target, 'mouseenter', e)\n this.last_enter_target = target\n }\n\n trigger(target, e.type, e)\n this.last_target = target\n }\n\n return false\n }\n\n onmousedown(e) {\n /* pre-state */\n switch (this.status) {\n case STATUS.DRAGGING:\n trigger(this.last_target, 'dragend', e)\n\n this.last_target = null\n this.status = STATUS.NORMAL\n break\n\n default:\n var target = find_target(this.container, e)\n\n this.last_target = target\n this.status = STATUS.DRAGGABLE\n this.__dragstart_e = e\n\n trigger(target, e.type, e)\n }\n\n return false\n }\n\n onmouseup(e) {\n /* pre-state */\n switch (this.status) {\n case STATUS.DRAGGING:\n trigger(this.last_target, 'dragend', e)\n\n break\n\n default:\n var target = find_target(this.container, e)\n trigger(target, e.type, e)\n\n if (this.last_target === target) {\n /**\n * [ 주의 ] window의 click 이벤트를 사용하지 않는다. mouseup 이벤트에서 판단하여 click 이벤트를 발생시켜야 한다.\n * 원인. 모바일 환경에서 Popup 된 보드에서는 (알 수 없는 이유로) 약 2.5초동안 click 이벤트가 발생하지 않기 때문에, 사용성에 불편을 겪을 수 있기 때문이다.\n *\n * [ caution ] Do not use the click event of the window. The click event should be triggered by judging from the mouseup event.\n * cause. This is because in the mobile environment, the click event does not occur for about 2.5 seconds on the popup board (for unknown reasons), which may cause usability problems.\n */\n\n trigger(target, 'click', e)\n }\n }\n\n this.last_target = null\n\n this.status = STATUS.NORMAL\n\n return false\n }\n\n onmouseout(e) {\n var target = find_target(this.container, e)\n\n /* pre-state */\n switch (this.status) {\n case STATUS.DRAGGING:\n trigger(this.last_target, 'dragend', e)\n break\n\n default:\n if (this.last_target && this.last_target === target) return\n\n if (this.last_enter_target) {\n trigger(this.last_enter_target, 'mouseleave', e)\n delete this.last_enter_target\n }\n }\n\n this.last_target = null\n\n this.status = STATUS.NORMAL\n\n return false\n }\n\n ontouchstart(e) {\n var target = find_target(this.container, e)\n\n this.last_target = target\n this.status = TOUCH_STATUS.TOUCH_START\n\n if (!this.touchPoints) this.touchPoints = []\n\n this.touchPoints.push(e.changedTouches[0])\n\n this.holdTimer = setTimeout(() => {\n this.status = TOUCH_STATUS.NORMAL\n trigger(this.last_target, 'hold', e)\n delete this.holdTimer\n }, TAP_HOLD_INTERVAL)\n\n trigger(target, e.type, e)\n\n return false\n }\n\n ontouchmove(e) {\n if (!(e.touches && e.changedTouches)) {\n /* TODO dragstart의 포인트 포지션을 원래의 포지션으로 보내주어야 한다. */\n trigger(this.last_target, 'dragstart', e)\n trigger(this.last_target, 'dragmove', e)\n return false\n }\n\n var target = find_target(this.container, e)\n /* pre-state */\n switch (this.status) {\n case TOUCH_STATUS.TOUCH_START:\n Array.from(e.changedTouches).forEach(tp => {\n var touchPoint = this.touchPoints.find(p => {\n return p.identifier === tp.identifier\n })\n\n if (!touchPoint) return\n\n var diffX = touchPoint.clientX - tp.clientX\n var diffY = touchPoint.clientY - tp.clientY\n\n if (Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) >= DRAG_THRESHOLD) {\n this.status = TOUCH_STATUS.TOUCH_MOVE\n\n if (this.holdTimer) {\n clearTimeout(this.holdTimer)\n delete this.holdTimer\n }\n return\n }\n })\n break\n case TOUCH_STATUS.TOUCH_MOVE:\n if (this.holdTimer) {\n clearTimeout(this.holdTimer)\n delete this.holdTimer\n }\n\n if (e.changedTouches.length === 2) {\n if (e.scale != undefined && e.scale !== 1 && (e.scale < 0.9 || e.scale > 1.1)) {\n trigger(this.last_target, 'pinch', e)\n return false\n }\n }\n\n trigger(this.last_target, 'pan', e)\n target = this.last_target\n\n break\n\n default:\n if (this.last_enter_target !== target) {\n if (this.last_enter_target) trigger(this.last_enter_target, 'mouseleave', e)\n if (target) trigger(target, 'mouseenter', e)\n this.last_enter_target = target\n }\n\n this.last_target = target\n break\n }\n\n trigger(target, 'touchmove', e)\n\n return false\n }\n\n ontouchend(e) {\n var target = find_target(this.container, e)\n /* pre-state */\n switch (this.status) {\n case TOUCH_STATUS.TOUCH_MOVE:\n target = this.last_target\n break\n\n case TOUCH_STATUS.TOUCH_START:\n var now = performance.now()\n var touchInterval = now - this.touchedAt\n\n if (this.holdTimer) {\n clearTimeout(this.holdTimer)\n delete this.holdTimer\n\n if (touchInterval < DOUBLE_TAP_INTERVAL) trigger(target, 'doubletap', e)\n else trigger(target, 'tap', e)\n\n this.touchedAt = now\n }\n break\n\n default:\n break\n }\n\n trigger(target, 'touchend', e)\n\n var touchPointIndex = this.touchPoints.findIndex(tp => {\n return tp.identifier === e.changedTouches[0].identifier\n })\n\n this.touchPoints.splice(touchPointIndex, 1)\n\n this.last_target = null\n\n this.status = TOUCH_STATUS.NORMAL\n\n return false\n }\n\n onwheel(e) {\n var target = find_target(this.container, e)\n\n trigger(target, e.type, e)\n\n return false\n }\n}\n"],"mappings":";;;;;;;AAIA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAoC,SAAAC,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAJpC;AACA;AACA;;AAIA;AACA;AACA;AACA;;AAEA,MAAMW,MAAM,GAAG;EACbC,MAAM,EAAE,CAAC;EACTC,SAAS,EAAE,CAAC;EACZC,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,YAAY,GAAG;EACnBH,MAAM,EAAE,CAAC;EACTI,WAAW,EAAE,CAAC;EACdC,UAAU,EAAE,CAAC;EACbC,SAAS,EAAE,CAAC;EACZC,YAAY,EAAE;AAChB,CAAC;AAED,MAAMC,cAAc,GAAG,EAAE;AAEzB,MAAMC,mBAAmB,GAAG,GAAG;AAC/B,MAAMC,iBAAiB,GAAG,GAAG;AAE7B,IAAIC,WAAW,GAAG,CAAC,CAAC;AACpB,IAAIC,qBAAqB,GAAG,CAAC;AAE7B,SAASC,SAASA,CAACjC,CAAC,EAAE;EACpB,IAAIA,CAAC,CAACkC,OAAO,EAAE;IACb,IAAIC,KAAK,GAAGnC,CAAC,CAACkC,OAAO,CAAC,CAAC,CAAC;IACxB,IAAI,CAACC,KAAK,EAAE,OAAOJ,WAAW;IAE9B,IAAIK,WAAW,GAAGD,KAAK,CAACE,MAAM,CAACC,qBAAqB,CAAC,CAAC;IAEtDP,WAAW,GAAG;MACZQ,CAAC,EAAEvC,CAAC,CAACwC,OAAO,IAAIL,KAAK,CAACM,OAAO,IAAIL,WAAW,CAACG,CAAC,IAAIH,WAAW,CAACM,IAAI,CAAC;MACnEC,CAAC,EAAE3C,CAAC,CAAC4C,OAAO,IAAIT,KAAK,CAACU,OAAO,IAAIT,WAAW,CAACO,CAAC,IAAIP,WAAW,CAACU,GAAG;IACnE,CAAC;IACD,OAAOf,WAAW;EACpB;EAEA,OAAO;IACLQ,CAAC,EAAEvC,CAAC,CAACwC,OAAO;IACZG,CAAC,EAAE3C,CAAC,CAAC4C;EACP,CAAC;AACH;AAEA,SAASG,qBAAqBA,CAAC/C,CAAC,EAAE;EAChC,IAAIgD,IAAI;IACNC,IAAI,GAAG,CAAC;IACRC,IAAI;IACJC,IAAI,GAAG,CAAC;EACV,IAAIC,kBAAkB,GAAG,CAAC;EAE1B,IAAIpD,CAAC,CAACkC,OAAO,CAACmB,MAAM,KAAK,CAAC,EAAE,OAAOD,kBAAkB;EAErDE,KAAK,CAACC,IAAI,CAACvD,CAAC,CAACkC,OAAO,CAAC,CAACsB,OAAO,CAACrB,KAAK,IAAI;IACrCa,IAAI,GAAGA,IAAI,IAAIS,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACxB,KAAK,CAACyB,OAAO,EAAEZ,IAAI,CAAC,GAAGb,KAAK,CAACyB,OAAO;IACxEX,IAAI,GAAGS,IAAI,CAACG,GAAG,CAAC1B,KAAK,CAACyB,OAAO,EAAEX,IAAI,CAAC;IACpCC,IAAI,GAAGA,IAAI,IAAIO,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACxB,KAAK,CAAC2B,OAAO,EAAEZ,IAAI,CAAC,GAAGf,KAAK,CAAC2B,OAAO;IACxEX,IAAI,GAAGO,IAAI,CAACG,GAAG,CAAC1B,KAAK,CAAC2B,OAAO,EAAEX,IAAI,CAAC;EACtC,CAAC,CAAC;EAEF,IAAIY,SAAS,GAAGd,IAAI,GAAGD,IAAI,IAAI,CAAC;EAChC,IAAIgB,SAAS,GAAGb,IAAI,GAAGD,IAAI,IAAI,CAAC;EAEhCE,kBAAkB,GAAGM,IAAI,CAACO,IAAI,CAACP,IAAI,CAACQ,GAAG,CAACH,SAAS,EAAE,CAAC,CAAC,GAAGL,IAAI,CAACQ,GAAG,CAACF,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;EAEpF,OAAOZ,kBAAkB;AAC3B;AAEA,MAAMe,MAAM,CAAC;EACXC,WAAWA,CAACpE,CAAC,EAAEqE,IAAI,EAAE;IACnB;;IAEA,IAAI,CAACC,KAAK,GAAGD,IAAI,IAAIrE,CAAC,CAACqE,IAAI;IAC3B,IAAI,CAACE,QAAQ,GAAGvE,CAAC,CAACwE,OAAO;IACzB,IAAI,CAACC,OAAO,GAAGzE,CAAC,CAAC0E,MAAM;IACvB,IAAI,CAACC,SAAS,GAAG3E,CAAC,CAAC4E,QAAQ;IAC3B,IAAI,CAACC,QAAQ,GAAG7E,CAAC,CAAC8E,OAAO;IAEzB,IAAIC,MAAM,GAAG9C,SAAS,CAACjC,CAAC,CAAC;IAEzB,IAAI,CAACgF,QAAQ,GAAGD,MAAM,CAACxC,CAAC;IACxB,IAAI,CAAC0C,QAAQ,GAAGF,MAAM,CAACpC,CAAC;IAExB,IAAI3C,CAAC,CAACqE,IAAI,IAAI,OAAO,EAAE;MACrB,IAAI,CAACa,MAAM,GAAGlF,CAAC,CAACkF,MAAM;MACtB,IAAI,CAACC,MAAM,GAAGnF,CAAC,CAACmF,MAAM;MACtB,IAAI,CAACC,MAAM,GAAGpF,CAAC,CAACoF,MAAM;IACxB,CAAC,MAAM,IAAIpF,CAAC,CAACqE,IAAI,IAAI,MAAM,EAAE;MAC3B,IAAI,CAACgB,YAAY,GAAGrF,CAAC,CAACqF,YAAY;IACpC,CAAC,MAAM,IAAIrF,CAAC,CAACqE,IAAI,CAACiB,KAAK,CAAC,QAAQ,CAAC,EAAE;MACjC,IAAI,CAACC,MAAM,GAAGvF,CAAC,CAACwF,KAAK;MACrB,IAAI,CAACC,QAAQ,GAAGzF,CAAC,CAACkC,OAAO;MACzB,IAAI,CAACwD,eAAe,GAAG1F,CAAC,CAAC2F,cAAc;MAEvC,IAAI,IAAI,CAACJ,MAAM,IAAI9B,SAAS,EAAE;QAC5B,IAAIL,kBAAkB,GAAGL,qBAAqB,CAAC/C,CAAC,CAAC;QAEjD,IAAIgC,qBAAqB,GAAG,CAAC,EAAE,IAAI,CAACuD,MAAM,GAAGnC,kBAAkB,GAAGpB,qBAAqB;QAEvFA,qBAAqB,GAAGoB,kBAAkB;MAC5C;IACF;EACF;EAEA,IAAIiB,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACC,KAAK;EACnB;EAEA,IAAID,IAAIA,CAACA,IAAI,EAAE;IACb,IAAI,CAACC,KAAK,GAAGD,IAAI;EACnB;EAEA,IAAI7B,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACwC,QAAQ;EACtB;EAEA,IAAIpC,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACqC,QAAQ;EACtB;EAEA,IAAIP,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACD,OAAO;EACrB;EAEA,IAAID,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACD,QAAQ;EACtB;EAEA,IAAIK,QAAQA,CAAA,EAAG;IACb,OAAO,IAAI,CAACD,SAAS;EACvB;EAEA,IAAIG,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACD,QAAQ;EACtB;EAEA,IAAI3C,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACuD,QAAQ;EACtB;EACA,IAAIE,cAAcA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACD,eAAe;EAC7B;EAEA,IAAIF,KAAKA,CAAA,EAAG;IACV,OAAO,IAAI,CAACD,MAAM;EACpB;EAEAK,eAAeA,CAAA,EAAG;IAChB,IAAI,CAACC,MAAM,GAAG,IAAI;IAClB,IAAI,IAAI,CAACC,aAAa,IAAI,OAAO,IAAI,CAACA,aAAa,CAACF,eAAe,KAAK,UAAU,EAAE;MAClF,IAAI,CAACE,aAAa,CAACF,eAAe,CAAC,CAAC;IACtC;EACF;EAEAG,oBAAoBA,CAAA,EAAG;IACrB,OAAO,IAAI,CAACF,MAAM;EACpB;EAEAG,cAAcA,CAAA,EAAG;IACf,IAAI,CAACC,UAAU,GAAG,IAAI,EAAC;EACzB;EAEAC,kBAAkBA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACD,UAAU,EAAC;EACzB;AACF;AAEA,SAASE,WAAWA,CAACC,SAAS,EAAEpG,CAAC,EAAE;EACjC;EACA,OAAOoG,SAAS,CAACC,OAAO,CAACrG,CAAC,CAACwC,OAAO,EAAExC,CAAC,CAAC4C,OAAO,CAAC;AAChD;AAEO,SAAS0D,OAAOA,CAACjE,MAAM,EAAEgC,IAAI,EAAErE,CAAC,EAAE;EACvC,IAAI,CAACqC,MAAM,IAAI,CAACA,MAAM,CAACkE,GAAG,EAAE;IAC1B;EACF;EAEA,IAAIlE,MAAM,CAACkE,GAAG,CAACC,UAAU,IAAInE,MAAM,CAACoE,MAAM,EAAE;IAC1C;EACF;EAEA,IAAI,EAAEzG,CAAC,YAAYmE,MAAM,CAAC,IAAIE,IAAI,KAAKrE,CAAC,CAACqE,IAAI,EAAE;IAC7CrE,CAAC,GAAG,IAAImE,MAAM,CAACnE,CAAC,EAAEqE,IAAI,CAAC;EACzB;EAEA,IAAIqC,OAAO,GAAG,IAAI,GAAGrC,IAAI;EACzBhC,MAAM,CAACqE,OAAO,CAAC,IAAIrE,MAAM,CAACqE,OAAO,CAAC,CAAC1G,CAAC,CAAC;EAErC,IAAI,CAACA,CAAC,CAAC+F,oBAAoB,CAAC,CAAC,EAAE;IAC7B1D,MAAM,CAACiE,OAAO,CAACjC,IAAI,EAAErE,CAAC,CAAC;EACzB;AACF;AAEe,MAAM2G,cAAc,CAAC;EAClC;AACF;AACA;AACA;EACEvC,WAAWA,CAACgC,SAAS,EAAEQ,YAAY,EAAE;IACnC,IAAI,CAACR,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACQ,YAAY,GAAGA,YAAY;IAEhC,IAAI,CAACC,MAAM,GAAG1F,MAAM,CAACC,MAAM;IAC3B,IAAI,CAAC0F,WAAW,GAAG,IAAI;IAEvB,IAAI,CAACC,gBAAgB,GAAGnH,KAAK,CAACoH,QAAQ,CAACC,GAAG,CAAC5C,IAAI,IAAI,IAAI,CAAC6C,qBAAqB,CAAC7C,IAAI,CAAC,CAAC;IACpF,IAAI,CAAC8C,iBAAiB,GAAGvH,KAAK,CAACwH,SAAS,CAACH,GAAG,CAAC5C,IAAI,IAAI,IAAI,CAACgD,sBAAsB,CAAChD,IAAI,CAAC,CAAC;IAEvFzE,KAAK,CAACoH,QAAQ,CAACxD,OAAO,CAAC,CAACa,IAAI,EAAEiD,GAAG,KAAKV,YAAY,CAACW,gBAAgB,CAAClD,IAAI,EAAE,IAAI,CAAC0C,gBAAgB,CAACO,GAAG,CAAC,CAAC,EAAE;MACrGE,OAAO,EAAE;IACX,CAAC,CAAC;IACF5H,KAAK,CAACwH,SAAS,CAAC5D,OAAO,CAAC,CAACa,IAAI,EAAEiD,GAAG,KAAKV,YAAY,CAACW,gBAAgB,CAAClD,IAAI,EAAE,IAAI,CAAC8C,iBAAiB,CAACG,GAAG,CAAC,CAAC,CAAC;;IAExG;IACAV,YAAY,CAACa,UAAU,GAAG,IAAI,CAACP,qBAAqB,CAAC,UAAU,CAAC;IAChEN,YAAY,CAACc,MAAM,GAAG,IAAI,CAACR,qBAAqB,CAAC,MAAM,CAAC;;IAExD;IACA;IACAN,YAAY,CAACe,QAAQ,GAAG,CAAC;IACzB;IACA;IACA;IACA;IACA;EACF;EAEAC,OAAOA,CAAA,EAAG;IACR,IAAI,IAAI,CAACC,iBAAiB,EAAE;MAC1BvB,OAAO,CAAC,IAAI,CAACuB,iBAAiB,EAAE,YAAY,EAAE,IAAIC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC9E;IAEAlI,KAAK,CAACoH,QAAQ,CAACxD,OAAO,CAAC,CAACa,IAAI,EAAEiD,GAAG,KAAK,IAAI,CAACV,YAAY,CAACmB,mBAAmB,CAAC1D,IAAI,EAAE,IAAI,CAAC0C,gBAAgB,CAACO,GAAG,CAAC,CAAC,CAAC;IAC9G1H,KAAK,CAACwH,SAAS,CAAC5D,OAAO,CAAC,CAACa,IAAI,EAAEiD,GAAG,KAAK,IAAI,CAACV,YAAY,CAACmB,mBAAmB,CAAC1D,IAAI,EAAE,IAAI,CAAC8C,iBAAiB,CAACG,GAAG,CAAC,CAAC,CAAC;IAEhH,OAAO,IAAI,CAACP,gBAAgB;IAC5B,OAAO,IAAI,CAACI,iBAAiB;IAC7B,OAAO,IAAI,CAACL,WAAW;EACzB;EAEAI,qBAAqBA,CAAC7C,IAAI,EAAE;IAC1B,IAAIqC,OAAO,GAAG,IAAI,CAAC,KAAKrC,IAAI,EAAE,CAAC,CAAC2D,IAAI,CAAC,IAAI,CAAC;IAE1C,OAAOhI,CAAC,IAAI;MACV,MAAMiI,EAAE,GAAG,IAAI9D,MAAM,CAACnE,CAAC,CAAC;MACxB0G,OAAO,CAACuB,EAAE,CAAC;MAEXA,EAAE,CAAC/B,kBAAkB,CAAC,CAAC,IAAIlG,CAAC,CAACgG,cAAc,CAAC,CAAC;MAE7C,OAAO,KAAK;IACd,CAAC;EACH;EAEAqB,sBAAsBA,CAAChD,IAAI,EAAE;IAC3B,OAAO,IAAI,CAAC,KAAKA,IAAI,EAAE,CAAC,CAAC2D,IAAI,CAAC,IAAI,CAAC;EACrC;EAEAP,UAAUA,CAACzH,CAAC,EAAE;IACZ,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;IAE3CsG,OAAO,CAACjE,MAAM,EAAErC,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;IAC1B,OAAO,KAAK;EACd;EAEA0H,MAAMA,CAAC1H,CAAC,EAAE;IACR,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;IAE3CsG,OAAO,CAACjE,MAAM,EAAErC,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;IAE1B,OAAO,KAAK;EACd;EAEAkI,UAAUA,CAAClI,CAAC,EAAE;IACZ,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;IAE3CsG,OAAO,CAACjE,MAAM,EAAErC,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;IAE1B,IAAI,CAAC8G,WAAW,GAAG,IAAI;IAEvB,OAAO,KAAK;EACd;EAEAqB,SAASA,CAACnI,CAAC,EAAE;IACX;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA,IAAI,CAACoG,SAAS,CAACE,OAAO,CAACtG,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;IAEjC,OAAO,KAAK;EACd;EAEAoI,OAAOA,CAACpI,CAAC,EAAE;IACT;IACA,IAAI,CAACoG,SAAS,CAACE,OAAO,CAACtG,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;IAEjC,OAAO,KAAK;EACd;EAEAqI,WAAWA,CAACrI,CAAC,EAAE;IACb;IACA,QAAQ,IAAI,CAAC6G,MAAM;MACjB,KAAK1F,MAAM,CAACE,SAAS;QACnB,IAAIiH,KAAK,GAAGtI,CAAC,CAACwC,OAAO,GAAG,IAAI,CAAC+F,aAAa,CAAC/F,OAAO;QAClD,IAAIgG,KAAK,GAAGxI,CAAC,CAAC4C,OAAO,GAAG,IAAI,CAAC2F,aAAa,CAAC3F,OAAO;QAElD,IAAI0F,KAAK,GAAGA,KAAK,GAAGE,KAAK,GAAGA,KAAK,GAAG5G,cAAc,EAAE;QAEpD,IAAI,CAACiF,MAAM,GAAG1F,MAAM,CAACG,QAAQ;;QAE7B;QACAgF,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,WAAW,EAAE,IAAI,CAACyB,aAAa,CAAC;QAE1D,IAAI,CAACE,YAAY,GAAGzI,CAAC;QACrBsG,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,UAAU,EAAE9G,CAAC,CAAC;QAExC;MAEF,KAAKmB,MAAM,CAACG,QAAQ;QAClB,IAAI,CAACmH,YAAY,GAAGzI,CAAC;QACrBsG,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,UAAU,EAAE9G,CAAC,CAAC;QAExC;MAEF;QACE,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC6H,iBAAiB,KAAKxF,MAAM,EAAE;UACrC,IAAI,IAAI,CAACwF,iBAAiB,EAAEvB,OAAO,CAAC,IAAI,CAACuB,iBAAiB,EAAE,YAAY,EAAE7H,CAAC,CAAC;UAC5E,IAAIqC,MAAM,EAAEiE,OAAO,CAACjE,MAAM,EAAE,YAAY,EAAErC,CAAC,CAAC;UAC5C,IAAI,CAAC6H,iBAAiB,GAAGxF,MAAM;QACjC;QAEAiE,OAAO,CAACjE,MAAM,EAAErC,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;QAC1B,IAAI,CAAC8G,WAAW,GAAGzE,MAAM;IAC7B;IAEA,OAAO,KAAK;EACd;EAEAqG,WAAWA,CAAC1I,CAAC,EAAE;IACb;IACA,QAAQ,IAAI,CAAC6G,MAAM;MACjB,KAAK1F,MAAM,CAACG,QAAQ;QAClBgF,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,SAAS,EAAE9G,CAAC,CAAC;QAEvC,IAAI,CAAC8G,WAAW,GAAG,IAAI;QACvB,IAAI,CAACD,MAAM,GAAG1F,MAAM,CAACC,MAAM;QAC3B;MAEF;QACE,IAAIiB,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;QAE3C,IAAI,CAAC8G,WAAW,GAAGzE,MAAM;QACzB,IAAI,CAACwE,MAAM,GAAG1F,MAAM,CAACE,SAAS;QAC9B,IAAI,CAACkH,aAAa,GAAGvI,CAAC;QAEtBsG,OAAO,CAACjE,MAAM,EAAErC,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;IAC9B;IAEA,OAAO,KAAK;EACd;EAEA2I,SAASA,CAAC3I,CAAC,EAAE;IACX;IACA,QAAQ,IAAI,CAAC6G,MAAM;MACjB,KAAK1F,MAAM,CAACG,QAAQ;QAClBgF,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,SAAS,EAAE9G,CAAC,CAAC;QAEvC;MAEF;QACE,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;QAC3CsG,OAAO,CAACjE,MAAM,EAAErC,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC8G,WAAW,KAAKzE,MAAM,EAAE;UAC/B;AACV;AACA;AACA;AACA;AACA;AACA;;UAEUiE,OAAO,CAACjE,MAAM,EAAE,OAAO,EAAErC,CAAC,CAAC;QAC7B;IACJ;IAEA,IAAI,CAAC8G,WAAW,GAAG,IAAI;IAEvB,IAAI,CAACD,MAAM,GAAG1F,MAAM,CAACC,MAAM;IAE3B,OAAO,KAAK;EACd;EAEAwH,UAAUA,CAAC5I,CAAC,EAAE;IACZ,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;;IAE3C;IACA,QAAQ,IAAI,CAAC6G,MAAM;MACjB,KAAK1F,MAAM,CAACG,QAAQ;QAClBgF,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,SAAS,EAAE9G,CAAC,CAAC;QACvC;MAEF;QACE,IAAI,IAAI,CAAC8G,WAAW,IAAI,IAAI,CAACA,WAAW,KAAKzE,MAAM,EAAE;QAErD,IAAI,IAAI,CAACwF,iBAAiB,EAAE;UAC1BvB,OAAO,CAAC,IAAI,CAACuB,iBAAiB,EAAE,YAAY,EAAE7H,CAAC,CAAC;UAChD,OAAO,IAAI,CAAC6H,iBAAiB;QAC/B;IACJ;IAEA,IAAI,CAACf,WAAW,GAAG,IAAI;IAEvB,IAAI,CAACD,MAAM,GAAG1F,MAAM,CAACC,MAAM;IAE3B,OAAO,KAAK;EACd;EAEAyH,YAAYA,CAAC7I,CAAC,EAAE;IACd,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;IAE3C,IAAI,CAAC8G,WAAW,GAAGzE,MAAM;IACzB,IAAI,CAACwE,MAAM,GAAGtF,YAAY,CAACC,WAAW;IAEtC,IAAI,CAAC,IAAI,CAACsH,WAAW,EAAE,IAAI,CAACA,WAAW,GAAG,EAAE;IAE5C,IAAI,CAACA,WAAW,CAACC,IAAI,CAAC/I,CAAC,CAAC2F,cAAc,CAAC,CAAC,CAAC,CAAC;IAE1C,IAAI,CAACqD,SAAS,GAAGC,UAAU,CAAC,MAAM;MAChC,IAAI,CAACpC,MAAM,GAAGtF,YAAY,CAACH,MAAM;MACjCkF,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,MAAM,EAAE9G,CAAC,CAAC;MACpC,OAAO,IAAI,CAACgJ,SAAS;IACvB,CAAC,EAAElH,iBAAiB,CAAC;IAErBwE,OAAO,CAACjE,MAAM,EAAErC,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;IAE1B,OAAO,KAAK;EACd;EAEAkJ,WAAWA,CAAClJ,CAAC,EAAE;IACb,IAAI,EAAEA,CAAC,CAACkC,OAAO,IAAIlC,CAAC,CAAC2F,cAAc,CAAC,EAAE;MACpC;MACAW,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,WAAW,EAAE9G,CAAC,CAAC;MACzCsG,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,UAAU,EAAE9G,CAAC,CAAC;MACxC,OAAO,KAAK;IACd;IAEA,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;IAC3C;IACA,QAAQ,IAAI,CAAC6G,MAAM;MACjB,KAAKtF,YAAY,CAACC,WAAW;QAC3B8B,KAAK,CAACC,IAAI,CAACvD,CAAC,CAAC2F,cAAc,CAAC,CAACnC,OAAO,CAAC2F,EAAE,IAAI;UACzC,IAAIC,UAAU,GAAG,IAAI,CAACN,WAAW,CAACO,IAAI,CAACC,CAAC,IAAI;YAC1C,OAAOA,CAAC,CAACC,UAAU,KAAKJ,EAAE,CAACI,UAAU;UACvC,CAAC,CAAC;UAEF,IAAI,CAACH,UAAU,EAAE;UAEjB,IAAId,KAAK,GAAGc,UAAU,CAAC3G,OAAO,GAAG0G,EAAE,CAAC1G,OAAO;UAC3C,IAAI+F,KAAK,GAAGY,UAAU,CAACvG,OAAO,GAAGsG,EAAE,CAACtG,OAAO;UAE3C,IAAIa,IAAI,CAACO,IAAI,CAACP,IAAI,CAACQ,GAAG,CAACoE,KAAK,EAAE,CAAC,CAAC,GAAG5E,IAAI,CAACQ,GAAG,CAACsE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI5G,cAAc,EAAE;YACxE,IAAI,CAACiF,MAAM,GAAGtF,YAAY,CAACE,UAAU;YAErC,IAAI,IAAI,CAACuH,SAAS,EAAE;cAClBQ,YAAY,CAAC,IAAI,CAACR,SAAS,CAAC;cAC5B,OAAO,IAAI,CAACA,SAAS;YACvB;YACA;UACF;QACF,CAAC,CAAC;QACF;MACF,KAAKzH,YAAY,CAACE,UAAU;QAC1B,IAAI,IAAI,CAACuH,SAAS,EAAE;UAClBQ,YAAY,CAAC,IAAI,CAACR,SAAS,CAAC;UAC5B,OAAO,IAAI,CAACA,SAAS;QACvB;QAEA,IAAIhJ,CAAC,CAAC2F,cAAc,CAACtC,MAAM,KAAK,CAAC,EAAE;UACjC,IAAIrD,CAAC,CAACwF,KAAK,IAAI/B,SAAS,IAAIzD,CAAC,CAACwF,KAAK,KAAK,CAAC,KAAKxF,CAAC,CAACwF,KAAK,GAAG,GAAG,IAAIxF,CAAC,CAACwF,KAAK,GAAG,GAAG,CAAC,EAAE;YAC7Ec,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,OAAO,EAAE9G,CAAC,CAAC;YACrC,OAAO,KAAK;UACd;QACF;QAEAsG,OAAO,CAAC,IAAI,CAACQ,WAAW,EAAE,KAAK,EAAE9G,CAAC,CAAC;QACnCqC,MAAM,GAAG,IAAI,CAACyE,WAAW;QAEzB;MAEF;QACE,IAAI,IAAI,CAACe,iBAAiB,KAAKxF,MAAM,EAAE;UACrC,IAAI,IAAI,CAACwF,iBAAiB,EAAEvB,OAAO,CAAC,IAAI,CAACuB,iBAAiB,EAAE,YAAY,EAAE7H,CAAC,CAAC;UAC5E,IAAIqC,MAAM,EAAEiE,OAAO,CAACjE,MAAM,EAAE,YAAY,EAAErC,CAAC,CAAC;UAC5C,IAAI,CAAC6H,iBAAiB,GAAGxF,MAAM;QACjC;QAEA,IAAI,CAACyE,WAAW,GAAGzE,MAAM;QACzB;IACJ;IAEAiE,OAAO,CAACjE,MAAM,EAAE,WAAW,EAAErC,CAAC,CAAC;IAE/B,OAAO,KAAK;EACd;EAEAyJ,UAAUA,CAACzJ,CAAC,EAAE;IACZ,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;IAC3C;IACA,QAAQ,IAAI,CAAC6G,MAAM;MACjB,KAAKtF,YAAY,CAACE,UAAU;QAC1BY,MAAM,GAAG,IAAI,CAACyE,WAAW;QACzB;MAEF,KAAKvF,YAAY,CAACC,WAAW;QAC3B,IAAIkI,GAAG,GAAGC,WAAW,CAACD,GAAG,CAAC,CAAC;QAC3B,IAAIE,aAAa,GAAGF,GAAG,GAAG,IAAI,CAACG,SAAS;QAExC,IAAI,IAAI,CAACb,SAAS,EAAE;UAClBQ,YAAY,CAAC,IAAI,CAACR,SAAS,CAAC;UAC5B,OAAO,IAAI,CAACA,SAAS;UAErB,IAAIY,aAAa,GAAG/H,mBAAmB,EAAEyE,OAAO,CAACjE,MAAM,EAAE,WAAW,EAAErC,CAAC,CAAC,MACnEsG,OAAO,CAACjE,MAAM,EAAE,KAAK,EAAErC,CAAC,CAAC;UAE9B,IAAI,CAAC6J,SAAS,GAAGH,GAAG;QACtB;QACA;MAEF;QACE;IACJ;IAEApD,OAAO,CAACjE,MAAM,EAAE,UAAU,EAAErC,CAAC,CAAC;IAE9B,IAAI8J,eAAe,GAAG,IAAI,CAAChB,WAAW,CAACiB,SAAS,CAACZ,EAAE,IAAI;MACrD,OAAOA,EAAE,CAACI,UAAU,KAAKvJ,CAAC,CAAC2F,cAAc,CAAC,CAAC,CAAC,CAAC4D,UAAU;IACzD,CAAC,CAAC;IAEF,IAAI,CAACT,WAAW,CAACkB,MAAM,CAACF,eAAe,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAChD,WAAW,GAAG,IAAI;IAEvB,IAAI,CAACD,MAAM,GAAGtF,YAAY,CAACH,MAAM;IAEjC,OAAO,KAAK;EACd;EAEA6I,OAAOA,CAACjK,CAAC,EAAE;IACT,IAAIqC,MAAM,GAAG8D,WAAW,CAAC,IAAI,CAACC,SAAS,EAAEpG,CAAC,CAAC;IAE3CsG,OAAO,CAACjE,MAAM,EAAErC,CAAC,CAACqE,IAAI,EAAErE,CAAC,CAAC;IAE1B,OAAO,KAAK;EACd;AACF;AAACkK,OAAA,CAAA7J,OAAA,GAAAsG,cAAA","ignoreList":[]}