@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,416 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _component = _interopRequireDefault(require("./component.js"));
8
+ var _shape = _interopRequireDefault(require("./shape.js"));
9
+ var _rectPath = _interopRequireDefault(require("./mixins/rect-path.js"));
10
+ var _const = require("../const.js");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ /*
13
+ * Copyright © HatioLab Inc. All rights reserved.
14
+ */
15
+
16
+ const NATURE = {
17
+ mutable: false,
18
+ resizable: true,
19
+ rotatable: true,
20
+ properties: [{
21
+ type: 'textarea',
22
+ label: 'front-side-template',
23
+ name: 'frontSideTemplate',
24
+ property: {
25
+ language: 'html'
26
+ }
27
+ }, {
28
+ type: 'textarea',
29
+ label: 'back-side-template',
30
+ name: 'backSideTemplate',
31
+ property: {
32
+ language: 'html'
33
+ }
34
+ }, {
35
+ type: 'textarea',
36
+ label: 'style',
37
+ name: 'style',
38
+ property: {
39
+ language: 'css'
40
+ }
41
+ }],
42
+ help: 'scene/component/info-window'
43
+ };
44
+ const INFOWINDOW_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAY1BMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAbxiAAAAIHRSTlMA+gPshCwwWFzYCeLRm7QRG6rLeDZI9JOJJDtjb1HAf1sAT80AAAQQSURBVHhe7MCBAAAAAMKw/KkzOMG2BAAAAKeu3lUohIEggO7jQi5qHqpgwML5/6+0F0y02z31FlvMMLKt86QMQ1ined2Evih1hFFjLfRWjgzDOGZ6JSiM00B9EuHALtQxJLiQBmqSBCeSUEuEGzs1BDjSaHxWOKK5Eyz/4SoMV/hp4+vtcPkdwZD/udwevNg7t1xXYRiKmkB7C+ENlPLq8fxHeX+RGjWQ1D45ldcIulBIvCvYJGBEadyTzxAcfY57NBjpLScOO/bzugcTHe7IMwiSLMcdHZhocMcMgTLjjgZM7F1bCJZ2v27ARGzYDwIk2Z+JYGJ/iiwQLMv+JAEThjkmRG64Q0Q+gIiIiIiIiIiIyFy0KRFt0bOJZAWSUigmkQaJaXhENiRnYBEpkZySRSRGcmIWEaQnYhHRSI5mESmQnIJFZIqQmGhiEYEbEnPjGlEGjYTogW/WUkOXENENSqZfEXmDiIiIiIiIiIiIiIiIiIiImq5ETIpRpBpjJCMeKy6Ri0ZS9MQjkmkkJs1YRDokp2MRyZGclkUkQnIiEQltaX3Lzb6yiGTpl2y/avqSAxGgelCOKI+Kc2isL0TUSsZ4EREREREREREREREREREREfnIQzXrNWSRTeNxnlOwIgueIr6AAyE+CpiqMEUK71IDO4E+LluEKYKnKcMUifEsTZgiJZ5lDVNkwJPcqzBFoPF/HplfxL/w6b4EPGv1h18Weya1TL8iIiIeiIiIiIiIiEjkPefxV+5YA9PPHylB+u5aqgZ39H+jKOxrqtu+pkzvr9YbzoZ6w2OFkzcrA3yE4WZlSSyFk54VoA/wR43+FaD+r9w32QdWvgvjp2ty2xq8qHPHmtyPFxfrK3hw1ejERlAlfR/Ame2OTow05d4rOLLSlHtDVhI0uRO01JeZ405op6zgNNXT+bIRfpIgn+AkU4pOxBscohojdCHu4RRzjC5EYwVHqRONDkSnEvK/CB3QSU32IRW3ZPnj9iEVoGCNTLVrh8ia1x+6wq8xvB5mz8pxu7oPwIn9lcR0AiuX1+1KX+BXqdvXzWsAC0NsGjzZsS/2Bd6yRA5RgIHkXNhSD3whASZ8rrB9mItuEAizac0fDlHxDMEwpQfD1tW4y3Hjfy5s9nOHH3uwWA+EqEJBWCjoTL/S5toBB/7hu6zer74NgqSP39zJU+qQX3ix763mHTqvIVRUVprCljlElRkEjBqNYevH8veBJ2xhiyhE8YctmhDFH7ZoQhR/2KIJUfxhiyRE8YctmhDFH7ZoQhR/2OIJUfxhC9Ppf/t1jgJACERRsHGyYRZB0Ujvf0xD8w6kP7y6RZmgf/oTFTtbbzJVxZWo2Nlqw6TVy5GowNl6ssm7v50obamfSxQAAAAAAAsKLM15fb3vpQAAAABJRU5ErkJggg==';
45
+ function buttonsTemplate(template, closable, flipable) {
46
+ var buttons = closable || flipable ? ['<div class="info-window-btns">', closable ? '<button class="closable">&#88</button>' : '', flipable ? '<button class="flipable">&#8652</button>' : '', '</div>'] : [];
47
+ var content = ['<div class="info-window-content">', template, '</div>'];
48
+ return buttons.concat(content).join('');
49
+ }
50
+
51
+ // TODO 중복되기 어려운 클래스명으로 부모 클래스를 지정해준다.
52
+ const INFOWINDOW_STYLE = `
53
+ .flip {
54
+ backface-visibility: hidden;
55
+ border-radius: 7px;
56
+ height: auto;
57
+ font: normal 14px helvetica, arial, san serif;
58
+ position: absolute;
59
+ opacity: 0.9;
60
+ transform-origin: 50% 50% 0px;
61
+ transition: all 2s;
62
+ min-width: 100px;
63
+ min-height: 50px;
64
+ background-color: #3e424e;
65
+ box-shadow: 2px 3px 2px 0px rgba(0,0,0,0.15);
66
+ }
67
+
68
+ #side-1 {
69
+ transform: rotateY(0deg);
70
+ }
71
+
72
+ .flip:after {
73
+ content: "";
74
+ display: block;
75
+ position: absolute;
76
+ opacity: 0.9;
77
+ width: 0;
78
+ height: 0;
79
+ }
80
+
81
+ .flip.arrow-top:after {
82
+ left: 45%;
83
+ top: -17px;
84
+ border-left: 10px solid transparent;
85
+ border-bottom: 18px solid #323b44;
86
+ border-right: 10px solid transparent;
87
+ }
88
+
89
+ .flip.arrow-right:after {
90
+ left: 100%;
91
+ top: 48%;
92
+ border-top: 10px solid transparent;
93
+ border-left: 18px solid #323b44;
94
+ border-bottom: 10px solid transparent;
95
+ }
96
+
97
+ .flip.arrow-bottom:after {
98
+ left: 45%;
99
+ top: 100%;
100
+ border-left: 10px solid transparent;
101
+ border-top: 18px solid #323b44;
102
+ border-right: 10px solid transparent;
103
+ }
104
+
105
+ .flip.arrow-left:after {
106
+ right: 100%;
107
+ top: 48%;
108
+ border-top: 10px solid transparent;
109
+ border-right: 18px solid #323b44;
110
+ border-bottom: 10px solid transparent;
111
+ }
112
+
113
+ #side-2 {
114
+ transform: rotateY(180deg);
115
+ }
116
+
117
+ .flip-side-1 {
118
+ transform: rotateY(0deg) !important;
119
+ }
120
+
121
+ .flip-side-2 {
122
+ transform: rotateY(180deg) !important;
123
+ }
124
+
125
+ .info-window-btns {
126
+ position: absolute;
127
+ top: -18px;
128
+ right: 5px;
129
+ overflow: hidden;
130
+ }
131
+
132
+ .info-window-content {
133
+ padding: 10px;
134
+ color: #efefef;
135
+ font-size: 13px;
136
+ line-height: 1.4;
137
+ }
138
+
139
+ .info-window-btns button {
140
+ width: 40px;
141
+ height: 40px;
142
+ float: right;
143
+ border: 0;
144
+ border-radius: 50%;
145
+ background-color: #2a7da1;
146
+ margin-right: 3px;
147
+ text-align: center;
148
+ cursor: pointer;
149
+ font-size: 35px;
150
+ color: #fff;
151
+ line-height: 0;
152
+ }
153
+
154
+ .info-window-btns button:hover {
155
+ background-color: #60bb23;
156
+ }
157
+ `;
158
+ const ARROW_LENGTH = 20;
159
+ function toggleClassName(className, clazz) {
160
+ var classList = className.split(/\s+/);
161
+ var idx = classList.indexOf(clazz);
162
+ if (idx != -1) classList.splice(idx, 1);else classList.splice(-1, 0, clazz);
163
+ return classList.join(' ');
164
+ }
165
+
166
+ /*
167
+ * InfoWindow 선택된 컴포넌트와 관련해서 사용자 정의 정보 윈도우를 보여준다.
168
+ *
169
+ * Information Window를 통해서 보여준다.
170
+ *
171
+ * Information Window는 앞면과 뒷면의 정보를 가지고 있으며, Rotation될 수 있다.
172
+ */
173
+
174
+ class InfoWindow extends (0, _rectPath.default)(_shape.default) {
175
+ static get image() {
176
+ if (!InfoWindow._image) {
177
+ InfoWindow._image = new Image();
178
+ InfoWindow._image.src = INFOWINDOW_IMAGE;
179
+ }
180
+ return InfoWindow._image;
181
+ }
182
+ static toggle(component, infoWindowId, autoClose, position) {
183
+ if (!infoWindowId) {
184
+ console.warn('InfoWindow not defined.');
185
+ return;
186
+ }
187
+ var infowindowComponent = component.root.findById(infoWindowId);
188
+ if (!infowindowComponent) {
189
+ console.warn('InfoWindow Not Found.', infoWindowId);
190
+ return;
191
+ }
192
+ if (infowindowComponent._findInfoWindowByComponent(component)) {
193
+ InfoWindow.hide(component, infoWindowId);
194
+ } else {
195
+ InfoWindow.show(component, infoWindowId, autoClose, position);
196
+ }
197
+ }
198
+ static hide(component, infoWindowId) {
199
+ if (!infoWindowId) return;
200
+ var infoWindowComponent = component.root.findById(infoWindowId);
201
+ if (!infoWindowComponent) {
202
+ console.warn('InfoWindow Not Found.', infoWindowId);
203
+ return;
204
+ }
205
+ infoWindowComponent._removeInfoWindow(component);
206
+ }
207
+ static show(component, infoWindowId, autoClose, position) {
208
+ if (!infoWindowId) {
209
+ console.warn('InfoWindow not defined.');
210
+ return;
211
+ }
212
+
213
+ // 1. InfoWindow 컴포넌트의 템플릿을 가져온다.
214
+ var infowindowComponent = component.root.findById(infoWindowId);
215
+ if (!infowindowComponent) {
216
+ console.warn('InfoWindow Not Found.', infoWindowId);
217
+ return;
218
+ }
219
+ if (infowindowComponent._findInfoWindowByComponent(component)) return;
220
+ var {
221
+ frontSideTemplate = '',
222
+ backSideTemplate = ''
223
+ } = infowindowComponent.model;
224
+ var templates = [frontSideTemplate, backSideTemplate].filter(side => String(side).trim());
225
+ templates = templates.map(template => _component.default.template(buttonsTemplate(template, !autoClose, templates.length == 2)));
226
+ if (templates.length == 0) return;
227
+ var style = INFOWINDOW_STYLE + infowindowComponent.get('style');
228
+ var {
229
+ left,
230
+ top
231
+ } = component.bounds;
232
+ var {
233
+ x,
234
+ y
235
+ } = position ? component.rootModel.transcoordC2S(position.x, position.y) : component.transcoordS2T(left, top);
236
+ left = x;
237
+ top = y;
238
+
239
+ // 2. 컴포넌트의 위치와 패딩 정보를 span에 반영한다.
240
+ var span = document.createElement('span');
241
+ span.style.position = 'absolute';
242
+
243
+ // 3. 스타일 엘리먼트를 생성한다.
244
+ var styleElement = document.createElement('style');
245
+ styleElement.type = 'text/css';
246
+ styleElement.appendChild(document.createTextNode(style));
247
+ span.appendChild(styleElement);
248
+
249
+ // 4. 양면 div 엘리먼트를 생성한다.
250
+ // TODO 템플릿이 한면만 등록된 경우에는 플립 기능과 플립 버튼을 제거한다.
251
+ // TODO 앞면과 뒷면의 크기를 동일하게 유지한다.(큰면을 기준으로 맞춘다.)
252
+
253
+ if (templates[0]) {
254
+ var div_front = document.createElement('div');
255
+ div_front.id = 'side-1';
256
+ div_front.className = 'flip';
257
+ div_front.style.display = 'inline-block';
258
+ div_front.innerHTML = templates[0](component);
259
+ }
260
+ if (templates[1]) {
261
+ var div_back = document.createElement('div');
262
+ div_back.id = 'side-2';
263
+ div_back.className = 'flip';
264
+ div_back.style.display = 'inline-block';
265
+ div_back.innerHTML = templates[1](component);
266
+ }
267
+
268
+ // 5. InfoWindow에서 발생하는 사용자 이벤트의 확산을 막는다.
269
+ _const.GESTURES.forEach(function (event) {
270
+ span.addEventListener(event, function (e) {
271
+ e.stopPropagation();
272
+ });
273
+ });
274
+ _const.KEYEVENTS.forEach(function (event) {
275
+ span.addEventListener(event, function (e) {
276
+ e.stopPropagation();
277
+ });
278
+ });
279
+
280
+ // 6. InfoWindow를 도큐먼트에 추가한다.
281
+ var targetElement = component.root.model_layer.overlay;
282
+ if (div_front) span.appendChild(div_front);
283
+ if (div_back) span.appendChild(div_back);
284
+ targetElement.appendChild(span);
285
+ infowindowComponent._addInfoWindow(component, span, styleElement);
286
+
287
+ // TODO InfoWindow가 사라질때 이벤트리스너를 제거해주어야 한다.
288
+ if (div_front) {
289
+ let flipButton = div_front.querySelector('.info-window-btns > .flipable');
290
+ flipButton && flipButton.addEventListener('click', function (e) {
291
+ e.preventDefault();
292
+ div_back.className = toggleClassName(div_back.className, 'flip-side-1');
293
+ div_front.className = toggleClassName(div_front.className, 'flip-side-2');
294
+ }, false);
295
+ let closeButton = div_front.querySelector('.info-window-btns > .closable');
296
+ closeButton && closeButton.addEventListener('click', function (e) {
297
+ e.preventDefault();
298
+ InfoWindow.hide(component, infoWindowId);
299
+ }, false);
300
+ }
301
+ if (div_back) {
302
+ let flipButton = div_back.querySelector('.info-window-btns > .flipable');
303
+ flipButton && flipButton.addEventListener('click', function (e) {
304
+ e.preventDefault();
305
+ div_back.className = toggleClassName(div_back.className, 'flip-side-1');
306
+ div_front.className = toggleClassName(div_front.className, 'flip-side-2');
307
+ }, false);
308
+ let closeButton = div_back.querySelector('.info-window-btns > .closable');
309
+ closeButton && closeButton.addEventListener('click', function (e) {
310
+ e.preventDefault();
311
+ InfoWindow.hide(component, infoWindowId);
312
+ }, false);
313
+ }
314
+
315
+ // 7. 완성된 InfoWindow의 크기를 감안한 위치 조정
316
+ var infowindow_width = div_front.offsetWidth;
317
+ var infowindow_height = div_front.offsetHeight;
318
+
319
+ // browser의 폭과 높이.
320
+ var full_width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
321
+ var full_height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
322
+
323
+ // scene의 LEFT, TOP, RIGHT, BOTTOM
324
+ var scene_bound = component.rootModel.target.getBoundingClientRect();
325
+ var sides = [];
326
+ div_front && sides.push(div_front);
327
+ div_back && sides.push(div_back);
328
+
329
+ // 컴포넌트의 상하좌우 순으로 여백이 있는 공간에 InfoWindow를 배치한다.
330
+ // TODO 왼쪽 또는 오른쪽에 표현되는 경우에는, 위아래로 플립되도록 한다.
331
+ var point = {
332
+ x: left,
333
+ y: top
334
+ };
335
+ var endpoint = component.transcoordS2C(point.x, point.y);
336
+ if (endpoint.x + infowindow_width / 2 + scene_bound.left < scene_bound.right && endpoint.x - infowindow_width / 2 > scene_bound.left) {
337
+ if (infowindow_height + ARROW_LENGTH < endpoint.y) {
338
+ // TOP
339
+ span.style.marginLeft = point.x - infowindow_width / 2 + 'px';
340
+ span.style.marginTop = point.y - infowindow_height - ARROW_LENGTH + 'px';
341
+ sides.forEach(side => side.className += ' arrow-bottom');
342
+ return;
343
+ } else {
344
+ endpoint = component.transcoordS2C(point.x, point.y + infowindow_height + ARROW_LENGTH);
345
+ if (scene_bound.bottom > endpoint.y + scene_bound.top) {
346
+ // BOTTOM
347
+ span.style.marginLeft = point.x - infowindow_width / 2 + 'px';
348
+ span.style.marginTop = point.y + ARROW_LENGTH + 'px';
349
+ sides.forEach(side => side.className += ' arrow-top');
350
+ return;
351
+ }
352
+ }
353
+ }
354
+ endpoint = component.transcoordS2C(point.x, point.y);
355
+ if (endpoint.x - (infowindow_width + ARROW_LENGTH) > scene_bound.left) {
356
+ // LEFT
357
+ span.style.marginLeft = point.x - infowindow_width - ARROW_LENGTH + 'px';
358
+ span.style.marginTop = point.y - infowindow_height / 2 + 'px';
359
+ sides.forEach(side => side.className += ' arrow-right');
360
+ return;
361
+ }
362
+ span.style.marginLeft = point.x + ARROW_LENGTH + 'px';
363
+ span.style.marginTop = point.y - infowindow_height / 2 + 'px';
364
+ sides.forEach(side => side.className += ' arrow-left');
365
+ }
366
+
367
+ /* Members */
368
+
369
+ dispose() {
370
+ this.infoWindows.map(iw => iw.component).forEach(component => this._removeInfoWindow(component));
371
+ super.dispose();
372
+ }
373
+ get infoWindows() {
374
+ if (!this._windows) this._windows = [];
375
+ return this._windows;
376
+ }
377
+ _findInfoWindowByComponent(component) {
378
+ return this.infoWindows.find(iw => iw.component === component);
379
+ }
380
+ _addInfoWindow(component, window, styleElement) {
381
+ var iw = this._findInfoWindowByComponent(component);
382
+ if (iw) return;
383
+ this._windows.push({
384
+ component,
385
+ window,
386
+ styleElement
387
+ });
388
+ }
389
+ _removeInfoWindow(component) {
390
+ var iw = this._findInfoWindowByComponent(component);
391
+ if (!iw) return;
392
+ let infoWindowElement = iw.window;
393
+ infoWindowElement && infoWindowElement.parentNode.removeChild(infoWindowElement);
394
+ var idx = this.infoWindows.lastIndexOf(iw);
395
+ this.infoWindows.splice(idx, 1);
396
+ }
397
+ render(context) {
398
+ var {
399
+ left,
400
+ top,
401
+ width,
402
+ height
403
+ } = this.bounds;
404
+ context.beginPath();
405
+ this.drawImage(context, InfoWindow.image, left, top, width, height);
406
+ }
407
+ get hasTextProperty() {
408
+ return false;
409
+ }
410
+ get nature() {
411
+ return NATURE;
412
+ }
413
+ }
414
+ exports.default = InfoWindow;
415
+ _component.default.register('info-window', InfoWindow);
416
+ //# sourceMappingURL=info-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info-window.js","names":["_component","_interopRequireDefault","require","_shape","_rectPath","_const","e","__esModule","default","NATURE","mutable","resizable","rotatable","properties","type","label","name","property","language","help","INFOWINDOW_IMAGE","buttonsTemplate","template","closable","flipable","buttons","content","concat","join","INFOWINDOW_STYLE","ARROW_LENGTH","toggleClassName","className","clazz","classList","split","idx","indexOf","splice","InfoWindow","RectPath","Shape","image","_image","Image","src","toggle","component","infoWindowId","autoClose","position","console","warn","infowindowComponent","root","findById","_findInfoWindowByComponent","hide","show","infoWindowComponent","_removeInfoWindow","frontSideTemplate","backSideTemplate","model","templates","filter","side","String","trim","map","Component","length","style","get","left","top","bounds","x","y","rootModel","transcoordC2S","transcoordS2T","span","document","createElement","styleElement","appendChild","createTextNode","div_front","id","display","innerHTML","div_back","GESTURES","forEach","event","addEventListener","stopPropagation","KEYEVENTS","targetElement","model_layer","overlay","_addInfoWindow","flipButton","querySelector","preventDefault","closeButton","infowindow_width","offsetWidth","infowindow_height","offsetHeight","full_width","window","innerWidth","documentElement","clientWidth","body","full_height","innerHeight","clientHeight","scene_bound","target","getBoundingClientRect","sides","push","point","endpoint","transcoordS2C","right","marginLeft","marginTop","bottom","dispose","infoWindows","iw","_windows","find","infoWindowElement","parentNode","removeChild","lastIndexOf","render","context","width","height","beginPath","drawImage","hasTextProperty","nature","exports","register"],"sources":["../../src/components/info-window.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from './component.js'\nimport Shape from './shape.js'\nimport RectPath from './mixins/rect-path.js'\n\nimport { GESTURES, KEYEVENTS } from '../const.js'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'textarea',\n label: 'front-side-template',\n name: 'frontSideTemplate',\n property: {\n language: 'html'\n }\n },\n {\n type: 'textarea',\n label: 'back-side-template',\n name: 'backSideTemplate',\n property: {\n language: 'html'\n }\n },\n {\n type: 'textarea',\n label: 'style',\n name: 'style',\n property: {\n language: 'css'\n }\n }\n ],\n help: 'scene/component/info-window'\n}\n\nconst INFOWINDOW_IMAGE =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAY1BMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAbxiAAAAIHRSTlMA+gPshCwwWFzYCeLRm7QRG6rLeDZI9JOJJDtjb1HAf1sAT80AAAQQSURBVHhe7MCBAAAAAMKw/KkzOMG2BAAAAKeu3lUohIEggO7jQi5qHqpgwML5/6+0F0y02z31FlvMMLKt86QMQ1ined2Evih1hFFjLfRWjgzDOGZ6JSiM00B9EuHALtQxJLiQBmqSBCeSUEuEGzs1BDjSaHxWOKK5Eyz/4SoMV/hp4+vtcPkdwZD/udwevNg7t1xXYRiKmkB7C+ENlPLq8fxHeX+RGjWQ1D45ldcIulBIvCvYJGBEadyTzxAcfY57NBjpLScOO/bzugcTHe7IMwiSLMcdHZhocMcMgTLjjgZM7F1bCJZ2v27ARGzYDwIk2Z+JYGJ/iiwQLMv+JAEThjkmRG64Q0Q+gIiIiIiIiIiIyFy0KRFt0bOJZAWSUigmkQaJaXhENiRnYBEpkZySRSRGcmIWEaQnYhHRSI5mESmQnIJFZIqQmGhiEYEbEnPjGlEGjYTogW/WUkOXENENSqZfEXmDiIiIiIiIiIiIiIiIiIiImq5ETIpRpBpjJCMeKy6Ri0ZS9MQjkmkkJs1YRDokp2MRyZGclkUkQnIiEQltaX3Lzb6yiGTpl2y/avqSAxGgelCOKI+Kc2isL0TUSsZ4EREREREREREREREREREREfnIQzXrNWSRTeNxnlOwIgueIr6AAyE+CpiqMEUK71IDO4E+LluEKYKnKcMUifEsTZgiJZ5lDVNkwJPcqzBFoPF/HplfxL/w6b4EPGv1h18Weya1TL8iIiIeiIiIiIiIiEjkPefxV+5YA9PPHylB+u5aqgZ39H+jKOxrqtu+pkzvr9YbzoZ6w2OFkzcrA3yE4WZlSSyFk54VoA/wR43+FaD+r9w32QdWvgvjp2ty2xq8qHPHmtyPFxfrK3hw1ejERlAlfR/Ame2OTow05d4rOLLSlHtDVhI0uRO01JeZ405op6zgNNXT+bIRfpIgn+AkU4pOxBscohojdCHu4RRzjC5EYwVHqRONDkSnEvK/CB3QSU32IRW3ZPnj9iEVoGCNTLVrh8ia1x+6wq8xvB5mz8pxu7oPwIn9lcR0AiuX1+1KX+BXqdvXzWsAC0NsGjzZsS/2Bd6yRA5RgIHkXNhSD3whASZ8rrB9mItuEAizac0fDlHxDMEwpQfD1tW4y3Hjfy5s9nOHH3uwWA+EqEJBWCjoTL/S5toBB/7hu6zer74NgqSP39zJU+qQX3ix763mHTqvIVRUVprCljlElRkEjBqNYevH8veBJ2xhiyhE8YctmhDFH7ZoQhR/2KIJUfxhiyRE8YctmhDFH7ZoQhR/2OIJUfxhC9Ppf/t1jgJACERRsHGyYRZB0Ujvf0xD8w6kP7y6RZmgf/oTFTtbbzJVxZWo2Nlqw6TVy5GowNl6ssm7v50obamfSxQAAAAAAAsKLM15fb3vpQAAAABJRU5ErkJggg=='\n\nfunction buttonsTemplate(template, closable, flipable) {\n var buttons =\n closable || flipable\n ? [\n '<div class=\"info-window-btns\">',\n closable ? '<button class=\"closable\">&#88</button>' : '',\n flipable ? '<button class=\"flipable\">&#8652</button>' : '',\n '</div>'\n ]\n : []\n\n var content = ['<div class=\"info-window-content\">', template, '</div>']\n\n return buttons.concat(content).join('')\n}\n\n// TODO 중복되기 어려운 클래스명으로 부모 클래스를 지정해준다.\nconst INFOWINDOW_STYLE = `\n.flip {\n backface-visibility: hidden;\n border-radius: 7px;\n height: auto;\n font: normal 14px helvetica, arial, san serif;\n position: absolute;\n opacity: 0.9;\n transform-origin: 50% 50% 0px;\n transition: all 2s;\n min-width: 100px;\n min-height: 50px;\n background-color: #3e424e;\n box-shadow: 2px 3px 2px 0px rgba(0,0,0,0.15);\n}\n\n#side-1 {\n transform: rotateY(0deg);\n}\n\n.flip:after {\n content: \"\";\n display: block;\n position: absolute;\n opacity: 0.9;\n width: 0;\n height: 0;\n}\n\n.flip.arrow-top:after {\n left: 45%;\n top: -17px;\n border-left: 10px solid transparent;\n border-bottom: 18px solid #323b44;\n border-right: 10px solid transparent;\n}\n\n.flip.arrow-right:after {\n left: 100%;\n top: 48%;\n border-top: 10px solid transparent;\n border-left: 18px solid #323b44;\n border-bottom: 10px solid transparent;\n}\n\n.flip.arrow-bottom:after {\n left: 45%;\n top: 100%;\n border-left: 10px solid transparent;\n border-top: 18px solid #323b44;\n border-right: 10px solid transparent;\n}\n\n.flip.arrow-left:after {\n right: 100%;\n top: 48%;\n border-top: 10px solid transparent;\n border-right: 18px solid #323b44;\n border-bottom: 10px solid transparent;\n}\n\n#side-2 {\n transform: rotateY(180deg);\n}\n\n.flip-side-1 {\n transform: rotateY(0deg) !important;\n}\n\n.flip-side-2 {\n transform: rotateY(180deg) !important;\n}\n\n.info-window-btns {\n position: absolute;\n top: -18px;\n right: 5px;\n overflow: hidden;\n}\n\n.info-window-content {\n padding: 10px;\n color: #efefef;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.info-window-btns button {\n width: 40px;\n height: 40px;\n float: right;\n border: 0;\n border-radius: 50%;\n background-color: #2a7da1;\n margin-right: 3px;\n text-align: center;\n cursor: pointer;\n font-size: 35px;\n color: #fff;\n line-height: 0;\n}\n\n.info-window-btns button:hover {\n background-color: #60bb23;\n}\n`\n\nconst ARROW_LENGTH = 20\n\nfunction toggleClassName(className, clazz) {\n var classList = className.split(/\\s+/)\n var idx = classList.indexOf(clazz)\n if (idx != -1) classList.splice(idx, 1)\n else classList.splice(-1, 0, clazz)\n\n return classList.join(' ')\n}\n\n/*\n * InfoWindow 선택된 컴포넌트와 관련해서 사용자 정의 정보 윈도우를 보여준다.\n *\n * Information Window를 통해서 보여준다.\n *\n * Information Window는 앞면과 뒷면의 정보를 가지고 있으며, Rotation될 수 있다.\n */\n\nexport default class InfoWindow extends RectPath(Shape) {\n static get image() {\n if (!InfoWindow._image) {\n InfoWindow._image = new Image()\n InfoWindow._image.src = INFOWINDOW_IMAGE\n }\n\n return InfoWindow._image\n }\n\n static toggle(component, infoWindowId, autoClose, position) {\n if (!infoWindowId) {\n console.warn('InfoWindow not defined.')\n return\n }\n\n var infowindowComponent = component.root.findById(infoWindowId)\n\n if (!infowindowComponent) {\n console.warn('InfoWindow Not Found.', infoWindowId)\n return\n }\n\n if (infowindowComponent._findInfoWindowByComponent(component)) {\n InfoWindow.hide(component, infoWindowId)\n } else {\n InfoWindow.show(component, infoWindowId, autoClose, position)\n }\n }\n\n static hide(component, infoWindowId) {\n if (!infoWindowId) return\n\n var infoWindowComponent = component.root.findById(infoWindowId)\n\n if (!infoWindowComponent) {\n console.warn('InfoWindow Not Found.', infoWindowId)\n return\n }\n\n infoWindowComponent._removeInfoWindow(component)\n }\n\n static show(component, infoWindowId, autoClose, position) {\n if (!infoWindowId) {\n console.warn('InfoWindow not defined.')\n return\n }\n\n // 1. InfoWindow 컴포넌트의 템플릿을 가져온다.\n var infowindowComponent = component.root.findById(infoWindowId)\n\n if (!infowindowComponent) {\n console.warn('InfoWindow Not Found.', infoWindowId)\n return\n }\n\n if (infowindowComponent._findInfoWindowByComponent(component)) return\n\n var { frontSideTemplate = '', backSideTemplate = '' } = infowindowComponent.model\n\n var templates = [frontSideTemplate, backSideTemplate].filter(side => String(side).trim())\n\n templates = templates.map(template =>\n Component.template(buttonsTemplate(template, !autoClose, templates.length == 2))\n )\n\n if (templates.length == 0) return\n\n var style = INFOWINDOW_STYLE + infowindowComponent.get('style')\n\n var { left, top } = component.bounds\n var { x, y } = position\n ? component.rootModel.transcoordC2S(position.x, position.y)\n : component.transcoordS2T(left, top)\n\n left = x\n top = y\n\n // 2. 컴포넌트의 위치와 패딩 정보를 span에 반영한다.\n var span = document.createElement('span')\n\n span.style.position = 'absolute'\n\n // 3. 스타일 엘리먼트를 생성한다.\n var styleElement = document.createElement('style')\n styleElement.type = 'text/css'\n styleElement.appendChild(document.createTextNode(style))\n\n span.appendChild(styleElement)\n\n // 4. 양면 div 엘리먼트를 생성한다.\n // TODO 템플릿이 한면만 등록된 경우에는 플립 기능과 플립 버튼을 제거한다.\n // TODO 앞면과 뒷면의 크기를 동일하게 유지한다.(큰면을 기준으로 맞춘다.)\n\n if (templates[0]) {\n var div_front = document.createElement('div')\n\n div_front.id = 'side-1'\n div_front.className = 'flip'\n div_front.style.display = 'inline-block'\n\n div_front.innerHTML = templates[0](component)\n }\n\n if (templates[1]) {\n var div_back = document.createElement('div')\n\n div_back.id = 'side-2'\n div_back.className = 'flip'\n div_back.style.display = 'inline-block'\n\n div_back.innerHTML = templates[1](component)\n }\n\n // 5. InfoWindow에서 발생하는 사용자 이벤트의 확산을 막는다.\n GESTURES.forEach(function (event) {\n span.addEventListener(event, function (e) {\n e.stopPropagation()\n })\n })\n\n KEYEVENTS.forEach(function (event) {\n span.addEventListener(event, function (e) {\n e.stopPropagation()\n })\n })\n\n // 6. InfoWindow를 도큐먼트에 추가한다.\n var targetElement = component.root.model_layer.overlay\n if (div_front) span.appendChild(div_front)\n if (div_back) span.appendChild(div_back)\n targetElement.appendChild(span)\n\n infowindowComponent._addInfoWindow(component, span, styleElement)\n\n // TODO InfoWindow가 사라질때 이벤트리스너를 제거해주어야 한다.\n if (div_front) {\n let flipButton = div_front.querySelector('.info-window-btns > .flipable')\n flipButton &&\n flipButton.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n div_back.className = toggleClassName(div_back.className, 'flip-side-1')\n div_front.className = toggleClassName(div_front.className, 'flip-side-2')\n },\n false\n )\n\n let closeButton = div_front.querySelector('.info-window-btns > .closable')\n closeButton &&\n closeButton.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n InfoWindow.hide(component, infoWindowId)\n },\n false\n )\n }\n\n if (div_back) {\n let flipButton = div_back.querySelector('.info-window-btns > .flipable')\n flipButton &&\n flipButton.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n div_back.className = toggleClassName(div_back.className, 'flip-side-1')\n div_front.className = toggleClassName(div_front.className, 'flip-side-2')\n },\n false\n )\n\n let closeButton = div_back.querySelector('.info-window-btns > .closable')\n closeButton &&\n closeButton.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n InfoWindow.hide(component, infoWindowId)\n },\n false\n )\n }\n\n // 7. 완성된 InfoWindow의 크기를 감안한 위치 조정\n var infowindow_width = div_front.offsetWidth\n var infowindow_height = div_front.offsetHeight\n\n // browser의 폭과 높이.\n var full_width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\n\n var full_height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n\n // scene의 LEFT, TOP, RIGHT, BOTTOM\n var scene_bound = component.rootModel.target.getBoundingClientRect()\n\n var sides = []\n div_front && sides.push(div_front)\n div_back && sides.push(div_back)\n\n // 컴포넌트의 상하좌우 순으로 여백이 있는 공간에 InfoWindow를 배치한다.\n // TODO 왼쪽 또는 오른쪽에 표현되는 경우에는, 위아래로 플립되도록 한다.\n var point = {\n x: left,\n y: top\n }\n\n var endpoint = component.transcoordS2C(point.x, point.y)\n\n if (\n endpoint.x + infowindow_width / 2 + scene_bound.left < scene_bound.right &&\n endpoint.x - infowindow_width / 2 > scene_bound.left\n ) {\n if (infowindow_height + ARROW_LENGTH < endpoint.y) {\n // TOP\n span.style.marginLeft = point.x - infowindow_width / 2 + 'px'\n span.style.marginTop = point.y - infowindow_height - ARROW_LENGTH + 'px'\n\n sides.forEach(side => (side.className += ' arrow-bottom'))\n return\n } else {\n endpoint = component.transcoordS2C(point.x, point.y + infowindow_height + ARROW_LENGTH)\n\n if (scene_bound.bottom > endpoint.y + scene_bound.top) {\n // BOTTOM\n span.style.marginLeft = point.x - infowindow_width / 2 + 'px'\n span.style.marginTop = point.y + ARROW_LENGTH + 'px'\n\n sides.forEach(side => (side.className += ' arrow-top'))\n return\n }\n }\n }\n\n endpoint = component.transcoordS2C(point.x, point.y)\n\n if (endpoint.x - (infowindow_width + ARROW_LENGTH) > scene_bound.left) {\n // LEFT\n span.style.marginLeft = point.x - infowindow_width - ARROW_LENGTH + 'px'\n span.style.marginTop = point.y - infowindow_height / 2 + 'px'\n\n sides.forEach(side => (side.className += ' arrow-right'))\n return\n }\n\n span.style.marginLeft = point.x + ARROW_LENGTH + 'px'\n span.style.marginTop = point.y - infowindow_height / 2 + 'px'\n\n sides.forEach(side => (side.className += ' arrow-left'))\n }\n\n /* Members */\n\n dispose() {\n this.infoWindows.map(iw => iw.component).forEach(component => this._removeInfoWindow(component))\n\n super.dispose()\n }\n\n get infoWindows() {\n if (!this._windows) this._windows = []\n\n return this._windows\n }\n\n _findInfoWindowByComponent(component) {\n return this.infoWindows.find(iw => iw.component === component)\n }\n\n _addInfoWindow(component, window, styleElement) {\n var iw = this._findInfoWindowByComponent(component)\n if (iw) return\n\n this._windows.push({\n component,\n window,\n styleElement\n })\n }\n\n _removeInfoWindow(component) {\n var iw = this._findInfoWindowByComponent(component)\n if (!iw) return\n\n let infoWindowElement = iw.window\n\n infoWindowElement && infoWindowElement.parentNode.removeChild(infoWindowElement)\n\n var idx = this.infoWindows.lastIndexOf(iw)\n this.infoWindows.splice(idx, 1)\n }\n\n render(context) {\n var { left, top, width, height } = this.bounds\n\n context.beginPath()\n this.drawImage(context, InfoWindow.image, left, top, width, height)\n }\n\n get hasTextProperty() {\n return false\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.register('info-window', InfoWindow)\n"],"mappings":";;;;;;AAIA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAAiD,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AARjD;AACA;AACA;;AAQA,MAAMG,MAAM,GAAG;EACbC,OAAO,EAAE,KAAK;EACdC,SAAS,EAAE,IAAI;EACfC,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE,CACV;IACEC,IAAI,EAAE,UAAU;IAChBC,KAAK,EAAE,qBAAqB;IAC5BC,IAAI,EAAE,mBAAmB;IACzBC,QAAQ,EAAE;MACRC,QAAQ,EAAE;IACZ;EACF,CAAC,EACD;IACEJ,IAAI,EAAE,UAAU;IAChBC,KAAK,EAAE,oBAAoB;IAC3BC,IAAI,EAAE,kBAAkB;IACxBC,QAAQ,EAAE;MACRC,QAAQ,EAAE;IACZ;EACF,CAAC,EACD;IACEJ,IAAI,EAAE,UAAU;IAChBC,KAAK,EAAE,OAAO;IACdC,IAAI,EAAE,OAAO;IACbC,QAAQ,EAAE;MACRC,QAAQ,EAAE;IACZ;EACF,CAAC,CACF;EACDC,IAAI,EAAE;AACR,CAAC;AAED,MAAMC,gBAAgB,GACpB,gqDAAgqD;AAElqD,SAASC,eAAeA,CAACC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAE;EACrD,IAAIC,OAAO,GACTF,QAAQ,IAAIC,QAAQ,GAChB,CACE,gCAAgC,EAChCD,QAAQ,GAAG,wCAAwC,GAAG,EAAE,EACxDC,QAAQ,GAAG,0CAA0C,GAAG,EAAE,EAC1D,QAAQ,CACT,GACD,EAAE;EAER,IAAIE,OAAO,GAAG,CAAC,mCAAmC,EAAEJ,QAAQ,EAAE,QAAQ,CAAC;EAEvE,OAAOG,OAAO,CAACE,MAAM,CAACD,OAAO,CAAC,CAACE,IAAI,CAAC,EAAE,CAAC;AACzC;;AAEA;AACA,MAAMC,gBAAgB,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,YAAY,GAAG,EAAE;AAEvB,SAASC,eAAeA,CAACC,SAAS,EAAEC,KAAK,EAAE;EACzC,IAAIC,SAAS,GAAGF,SAAS,CAACG,KAAK,CAAC,KAAK,CAAC;EACtC,IAAIC,GAAG,GAAGF,SAAS,CAACG,OAAO,CAACJ,KAAK,CAAC;EAClC,IAAIG,GAAG,IAAI,CAAC,CAAC,EAAEF,SAAS,CAACI,MAAM,CAACF,GAAG,EAAE,CAAC,CAAC,MAClCF,SAAS,CAACI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAEL,KAAK,CAAC;EAEnC,OAAOC,SAAS,CAACN,IAAI,CAAC,GAAG,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,MAAMW,UAAU,SAAS,IAAAC,iBAAQ,EAACC,cAAK,CAAC,CAAC;EACtD,WAAWC,KAAKA,CAAA,EAAG;IACjB,IAAI,CAACH,UAAU,CAACI,MAAM,EAAE;MACtBJ,UAAU,CAACI,MAAM,GAAG,IAAIC,KAAK,CAAC,CAAC;MAC/BL,UAAU,CAACI,MAAM,CAACE,GAAG,GAAGzB,gBAAgB;IAC1C;IAEA,OAAOmB,UAAU,CAACI,MAAM;EAC1B;EAEA,OAAOG,MAAMA,CAACC,SAAS,EAAEC,YAAY,EAAEC,SAAS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","ignoreList":[]}