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

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