@hatiolab/things-scene 9.0.0-beta.2 → 9.0.0-beta.21

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 (341) hide show
  1. package/db.sqlite +0 -0
  2. package/dist/animation/animate.d.ts +4 -0
  3. package/dist/animation/animations/animation.d.ts +14 -0
  4. package/dist/animation/animations/fade.d.ts +4 -0
  5. package/dist/animation/animations/heartbeat.d.ts +4 -0
  6. package/dist/animation/animations/moving.d.ts +4 -0
  7. package/dist/animation/animations/outline.d.ts +10 -0
  8. package/dist/animation/animations/rotation.d.ts +4 -0
  9. package/dist/animation/animations/vibration.d.ts +4 -0
  10. package/dist/animation/compile.d.ts +1 -0
  11. package/dist/animation/delta.d.ts +19 -0
  12. package/dist/animation/index.d.ts +1 -0
  13. package/dist/command/command-change.d.ts +7 -0
  14. package/dist/command/command-migrate.d.ts +4 -0
  15. package/dist/command/command-migrate.js +85 -0
  16. package/dist/command/command-migrate.js.map +1 -0
  17. package/dist/command/command.d.ts +5 -0
  18. package/dist/command/snapshot-commander.d.ts +15 -0
  19. package/dist/components/anchor/anchor.d.ts +128 -0
  20. package/dist/components/anchor/ellipse-anchors.d.ts +2 -0
  21. package/dist/components/anchor/ellipse-anchors.js +38 -0
  22. package/dist/components/anchor/ellipse-anchors.js.map +1 -0
  23. package/dist/components/anchor/rect-anchors.d.ts +10 -0
  24. package/dist/components/audio.d.ts +25 -0
  25. package/dist/components/audio.js +141 -0
  26. package/dist/components/audio.js.map +1 -0
  27. package/dist/components/cloud.d.ts +13 -0
  28. package/dist/components/cloud.js +31 -0
  29. package/dist/components/cloud.js.map +1 -0
  30. package/dist/components/component.d.ts +227 -0
  31. package/dist/components/component.js +912 -0
  32. package/dist/components/component.js.map +1 -0
  33. package/dist/components/container-abstract.d.ts +51 -0
  34. package/dist/components/container-abstract.js +372 -0
  35. package/dist/components/container-abstract.js.map +1 -0
  36. package/dist/components/container.d.ts +38 -0
  37. package/dist/components/container.js +75 -0
  38. package/dist/components/container.js.map +1 -0
  39. package/dist/components/data/data-mapping.d.ts +16 -0
  40. package/dist/components/data/data.d.ts +8 -0
  41. package/dist/components/data/evaluator.d.ts +1 -0
  42. package/dist/components/donut.d.ts +15 -0
  43. package/dist/components/donut.js +74 -0
  44. package/dist/components/donut.js.map +1 -0
  45. package/dist/components/drawer/draw-image-pendable.d.ts +1 -0
  46. package/dist/components/drawer/effect.d.ts +1 -0
  47. package/dist/components/drawer/fill.d.ts +14 -0
  48. package/dist/components/drawer/format.d.ts +1 -0
  49. package/dist/components/drawer/line.d.ts +3 -0
  50. package/dist/components/drawer/stroke.d.ts +1 -0
  51. package/dist/components/drawer/text-wrapper.d.ts +10 -0
  52. package/dist/components/drawer/text.d.ts +3 -0
  53. package/dist/components/ellipse.d.ts +35 -0
  54. package/dist/components/ellipse.js +99 -0
  55. package/dist/components/ellipse.js.map +1 -0
  56. package/dist/components/file/ondropfile.d.ts +1 -0
  57. package/dist/components/fit/fit.d.ts +15 -0
  58. package/dist/components/geometry/transcoord.d.ts +41 -0
  59. package/dist/components/geometry/union.d.ts +6 -0
  60. package/dist/components/gif-view.d.ts +18 -0
  61. package/dist/components/gif-view.js +116 -0
  62. package/dist/components/gif-view.js.map +1 -0
  63. package/dist/components/global-ref.d.ts +36 -0
  64. package/dist/components/global-ref.js +128 -0
  65. package/dist/components/global-ref.js.map +1 -0
  66. package/dist/components/group.d.ts +15 -0
  67. package/dist/components/group.js +145 -0
  68. package/dist/components/group.js.map +1 -0
  69. package/dist/components/html/elements.d.ts +2 -0
  70. package/dist/components/html/fill.d.ts +1 -0
  71. package/dist/components/html/reposition.d.ts +1 -0
  72. package/dist/components/html/shadow.d.ts +1 -0
  73. package/dist/components/html-overlay-container.d.ts +27 -0
  74. package/dist/components/html-overlay-container.js +14 -0
  75. package/dist/components/html-overlay-container.js.map +1 -0
  76. package/dist/components/html-overlay-element.d.ts +25 -0
  77. package/dist/components/html-overlay-element.js +9 -0
  78. package/dist/components/html-overlay-element.js.map +1 -0
  79. package/dist/components/image-view.d.ts +19 -0
  80. package/dist/components/image-view.js +180 -0
  81. package/dist/components/image-view.js.map +1 -0
  82. package/dist/components/index.d.ts +32 -0
  83. package/dist/components/index.js +39 -0
  84. package/dist/components/index.js.map +1 -0
  85. package/dist/components/info-window.d.ts +41 -0
  86. package/dist/components/info-window.js +425 -0
  87. package/dist/components/info-window.js.map +1 -0
  88. package/dist/components/line.d.ts +91 -0
  89. package/dist/components/line.js +303 -0
  90. package/dist/components/line.js.map +1 -0
  91. package/dist/components/local-ref.d.ts +47 -0
  92. package/dist/components/local-ref.js +103 -0
  93. package/dist/components/local-ref.js.map +1 -0
  94. package/dist/components/mixins/connectable.d.ts +45 -0
  95. package/dist/components/mixins/data-source.d.ts +9 -0
  96. package/dist/components/mixins/html-element.d.ts +24 -0
  97. package/dist/components/mixins/move-handle.d.ts +11 -0
  98. package/dist/components/mixins/rect-path.d.ts +13 -0
  99. package/dist/components/mixins/value-holder.d.ts +18 -0
  100. package/dist/components/mutater/bounds.d.ts +10 -0
  101. package/dist/components/mutater/path.d.ts +5 -0
  102. package/dist/components/ortholine.d.ts +21 -0
  103. package/dist/components/ortholine.js +814 -0
  104. package/dist/components/ortholine.js.map +1 -0
  105. package/dist/components/outline/ellipse-outline.d.ts +4 -0
  106. package/dist/components/outline/ellipse-outline.js +11 -0
  107. package/dist/components/outline/ellipse-outline.js.map +1 -0
  108. package/dist/components/outline/path-outline.d.ts +1 -0
  109. package/dist/components/path.d.ts +5 -0
  110. package/dist/components/path.js +40 -0
  111. package/dist/components/path.js.map +1 -0
  112. package/dist/components/polygon.d.ts +40 -0
  113. package/dist/components/polygon.js +157 -0
  114. package/dist/components/polygon.js.map +1 -0
  115. package/dist/components/polyline.d.ts +18 -0
  116. package/dist/components/polyline.js +102 -0
  117. package/dist/components/polyline.js.map +1 -0
  118. package/dist/components/popup.d.ts +48 -0
  119. package/dist/components/popup.js +138 -0
  120. package/dist/components/popup.js.map +1 -0
  121. package/dist/components/rect.d.ts +26 -0
  122. package/dist/components/rect.js +91 -0
  123. package/dist/components/rect.js.map +1 -0
  124. package/dist/components/retention/retention-manager.d.ts +8 -0
  125. package/dist/components/root-container.d.ts +90 -0
  126. package/dist/components/root-container.js +478 -0
  127. package/dist/components/root-container.js.map +1 -0
  128. package/dist/components/ruler.d.ts +16 -0
  129. package/dist/components/ruler.js +77 -0
  130. package/dist/components/ruler.js.map +1 -0
  131. package/dist/components/shape.d.ts +25 -0
  132. package/dist/components/shape.js +80 -0
  133. package/dist/components/shape.js.map +1 -0
  134. package/dist/components/star.d.ts +13 -0
  135. package/dist/components/star.js +80 -0
  136. package/dist/components/star.js.map +1 -0
  137. package/dist/components/text/substitutor.d.ts +3 -0
  138. package/dist/components/text.d.ts +8 -0
  139. package/dist/components/text.js +15 -0
  140. package/dist/components/text.js.map +1 -0
  141. package/dist/components/three-container.d.ts +60 -0
  142. package/dist/components/three-container.js +515 -0
  143. package/dist/components/three-container.js.map +1 -0
  144. package/dist/components/triangle.d.ts +15 -0
  145. package/dist/components/triangle.js +76 -0
  146. package/dist/components/triangle.js.map +1 -0
  147. package/dist/const.d.ts +39 -0
  148. package/dist/core/collection.d.ts +8 -0
  149. package/dist/core/debug.d.ts +1 -0
  150. package/dist/core/deep-equals.d.ts +1 -0
  151. package/dist/core/dom-to-image.d.ts +127 -0
  152. package/dist/core/event.d.ts +92 -0
  153. package/dist/core/index.d.ts +2 -0
  154. package/dist/core/list.d.ts +32 -0
  155. package/dist/core/logger.d.ts +3 -0
  156. package/dist/core/memoize.d.ts +6 -0
  157. package/dist/core/mixin.d.ts +1 -0
  158. package/dist/core/obj-accessor.d.ts +1 -0
  159. package/dist/core/reference-map.d.ts +14 -0
  160. package/dist/core/round-rect.d.ts +19 -0
  161. package/dist/core/script-loader.d.ts +3 -0
  162. package/dist/core/snapshot-taker.d.ts +12 -0
  163. package/dist/core/stack.d.ts +2 -0
  164. package/dist/core/timecapsule.d.ts +18 -0
  165. package/dist/core/utils.d.ts +9 -0
  166. package/dist/decorator/anchors-decorator.d.ts +31 -0
  167. package/dist/decorator/data-spread-decorator.d.ts +1 -0
  168. package/dist/decorator/decotag-decorator.d.ts +1 -0
  169. package/dist/decorator/index.d.ts +2 -0
  170. package/dist/decorator/link-decorator.d.ts +1 -0
  171. package/dist/effect/gradation.d.ts +1 -0
  172. package/dist/effect/index.d.ts +1 -0
  173. package/dist/effect/shadow.d.ts +2 -0
  174. package/dist/effect/turn.d.ts +1 -0
  175. package/dist/event/event-engine.d.ts +12 -0
  176. package/dist/event/event-pump.d.ts +11 -0
  177. package/dist/event/event-tracker.d.ts +21 -0
  178. package/dist/event/index.d.ts +2 -0
  179. package/dist/event/ua-event-handler.d.ts +32 -0
  180. package/dist/event-map/event-map.d.ts +9 -0
  181. package/dist/event-map/index.d.ts +1 -0
  182. package/dist/event-map/move-handler.d.ts +1 -0
  183. package/dist/event-map/text-editor-lite.d.ts +1 -0
  184. package/dist/index.d.ts +1 -0
  185. package/dist/index.js +3 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/layer/action/emphasize.d.ts +2 -0
  188. package/dist/layer/action/popup.d.ts +5 -0
  189. package/dist/layer/action/pressed.d.ts +2 -0
  190. package/dist/layer/add-layer.d.ts +42 -0
  191. package/dist/layer/add-layer.js +142 -0
  192. package/dist/layer/add-layer.js.map +1 -0
  193. package/dist/layer/decotag-layer.d.ts +27 -0
  194. package/dist/layer/decotag-layer.js +105 -0
  195. package/dist/layer/decotag-layer.js.map +1 -0
  196. package/dist/layer/guide-layer.d.ts +44 -0
  197. package/dist/layer/guide-layer.js +261 -0
  198. package/dist/layer/guide-layer.js.map +1 -0
  199. package/dist/layer/index.d.ts +7 -0
  200. package/dist/layer/index.js +11 -0
  201. package/dist/layer/index.js.map +1 -0
  202. package/dist/layer/layer.d.ts +32 -0
  203. package/dist/layer/layer.js +155 -0
  204. package/dist/layer/layer.js.map +1 -0
  205. package/dist/layer/model-layer.d.ts +46 -0
  206. package/dist/layer/model-layer.js +402 -0
  207. package/dist/layer/model-layer.js.map +1 -0
  208. package/dist/layer/modeler/anchor-handler.d.ts +36 -0
  209. package/dist/layer/modeler/control-handler.d.ts +18 -0
  210. package/dist/layer/modeler/focus-outline.d.ts +5 -0
  211. package/dist/layer/modeler/group-outline.d.ts +5 -0
  212. package/dist/layer/modeler/index.d.ts +7 -0
  213. package/dist/layer/modeler/path-handler.d.ts +22 -0
  214. package/dist/layer/modeler/resizer.d.ts +13 -0
  215. package/dist/layer/modeler/rotator.d.ts +15 -0
  216. package/dist/layer/modeler/rotator.js +120 -0
  217. package/dist/layer/modeler/rotator.js.map +1 -0
  218. package/dist/layer/modeling-layer.d.ts +66 -0
  219. package/dist/layer/modeling-layer.js +451 -0
  220. package/dist/layer/modeling-layer.js.map +1 -0
  221. package/dist/layer/selection/selected-finder.d.ts +1 -0
  222. package/dist/layer/selection-layer.d.ts +42 -0
  223. package/dist/layer/selection-layer.js +307 -0
  224. package/dist/layer/selection-layer.js.map +1 -0
  225. package/dist/layer/shift-layer.d.ts +18 -0
  226. package/dist/layer/shift-layer.js +61 -0
  227. package/dist/layer/shift-layer.js.map +1 -0
  228. package/dist/layout/absolute.d.ts +8 -0
  229. package/dist/layout/card.d.ts +7 -0
  230. package/dist/layout/html-absolute.d.ts +8 -0
  231. package/dist/layout/index.d.ts +8 -0
  232. package/dist/layout/index.js +12 -0
  233. package/dist/layout/index.js.map +1 -0
  234. package/dist/layout/layout.d.ts +11 -0
  235. package/dist/layout/linear-horizontal.d.ts +7 -0
  236. package/dist/layout/linear-vertical.d.ts +7 -0
  237. package/dist/layout/table.d.ts +9 -0
  238. package/dist/layout/three.d.ts +8 -0
  239. package/dist/layout/three.js +20 -0
  240. package/dist/layout/three.js.map +1 -0
  241. package/dist/license/license.d.ts +18 -0
  242. package/dist/model/compile.d.ts +1 -0
  243. package/dist/model/compile.js +28 -0
  244. package/dist/model/compile.js.map +1 -0
  245. package/dist/model/duplicate.d.ts +1 -0
  246. package/dist/model/index.d.ts +3 -0
  247. package/dist/model/selector.d.ts +2 -0
  248. package/dist/style/compile.d.ts +1 -0
  249. package/dist/style/index.d.ts +1 -0
  250. package/dist/things-scene/api/add-start.d.ts +1 -0
  251. package/dist/things-scene/api/add.d.ts +5 -0
  252. package/dist/things-scene/api/align.d.ts +1 -0
  253. package/dist/things-scene/api/change.d.ts +2 -0
  254. package/dist/things-scene/api/clipboard.d.ts +3 -0
  255. package/dist/things-scene/api/distribute.d.ts +1 -0
  256. package/dist/things-scene/api/duplicate.d.ts +4 -0
  257. package/dist/things-scene/api/fullscreen.d.ts +1 -0
  258. package/dist/things-scene/api/group.d.ts +8 -0
  259. package/dist/things-scene/api/group.js +78 -0
  260. package/dist/things-scene/api/group.js.map +1 -0
  261. package/dist/things-scene/api/ids.d.ts +4 -0
  262. package/dist/things-scene/api/index.d.ts +15 -0
  263. package/dist/things-scene/api/listener.d.ts +3 -0
  264. package/dist/things-scene/api/remove.d.ts +4 -0
  265. package/dist/things-scene/api/symmetry.d.ts +2 -0
  266. package/dist/things-scene/api/symmetry.js +39 -0
  267. package/dist/things-scene/api/symmetry.js.map +1 -0
  268. package/dist/things-scene/api/to-data-url.d.ts +1 -0
  269. package/dist/things-scene/api/to-data-url.js +69 -0
  270. package/dist/things-scene/api/to-data-url.js.map +1 -0
  271. package/dist/things-scene/api/zorder.d.ts +2 -0
  272. package/dist/things-scene/application-context.d.ts +40 -0
  273. package/dist/things-scene/config.d.ts +4 -0
  274. package/dist/things-scene/create.d.ts +20 -0
  275. package/dist/things-scene/fps.d.ts +1 -0
  276. package/dist/things-scene/index.d.ts +17 -0
  277. package/dist/things-scene/index.js +23 -0
  278. package/dist/things-scene/index.js.map +1 -0
  279. package/dist/things-scene/polyfill.d.ts +2 -0
  280. package/dist/things-scene/scene.d.ts +155 -0
  281. package/dist/things-scene/version.d.ts +2 -0
  282. package/dist/threed/common.d.ts +22 -0
  283. package/dist/threed/control/three-controls.d.ts +11 -0
  284. package/dist/threed/control/three-controls.js +620 -0
  285. package/dist/threed/control/three-controls.js.map +1 -0
  286. package/dist/threed/html/elements.d.ts +2 -0
  287. package/dist/threed/real-object-camera-meshed.d.ts +12 -0
  288. package/dist/threed/real-object-camera-meshed.js +49 -0
  289. package/dist/threed/real-object-camera-meshed.js.map +1 -0
  290. package/dist/threed/real-object-camera.d.ts +9 -0
  291. package/dist/threed/real-object-camera.js +31 -0
  292. package/dist/threed/real-object-camera.js.map +1 -0
  293. package/dist/threed/real-object-dom-element.d.ts +20 -0
  294. package/dist/threed/real-object-dom-element.js +78 -0
  295. package/dist/threed/real-object-dom-element.js.map +1 -0
  296. package/dist/threed/real-object-dummy.d.ts +6 -0
  297. package/dist/threed/real-object-dummy.js +11 -0
  298. package/dist/threed/real-object-dummy.js.map +1 -0
  299. package/dist/threed/real-object-extrude.d.ts +19 -0
  300. package/dist/threed/real-object-extrude.js +171 -0
  301. package/dist/threed/real-object-extrude.js.map +1 -0
  302. package/dist/threed/real-object-gltf.d.ts +15 -0
  303. package/dist/threed/real-object-gltf.js +97 -0
  304. package/dist/threed/real-object-gltf.js.map +1 -0
  305. package/dist/threed/real-object-group.d.ts +5 -0
  306. package/dist/threed/real-object-group.js +11 -0
  307. package/dist/threed/real-object-group.js.map +1 -0
  308. package/dist/threed/real-object-mesh.d.ts +11 -0
  309. package/dist/threed/real-object-mesh.js +55 -0
  310. package/dist/threed/real-object-mesh.js.map +1 -0
  311. package/dist/threed/real-object-plane.d.ts +6 -0
  312. package/dist/threed/real-object-plane.js +23 -0
  313. package/dist/threed/real-object-plane.js.map +1 -0
  314. package/dist/threed/real-object-scene.d.ts +21 -0
  315. package/dist/threed/real-object-scene.js +89 -0
  316. package/dist/threed/real-object-scene.js.map +1 -0
  317. package/dist/threed/real-object-sprite.d.ts +12 -0
  318. package/dist/threed/real-object-sprite.js +35 -0
  319. package/dist/threed/real-object-sprite.js.map +1 -0
  320. package/dist/threed/real-object-text.d.ts +16 -0
  321. package/dist/threed/real-object-text.js +70 -0
  322. package/dist/threed/real-object-text.js.map +1 -0
  323. package/dist/threed/real-object.d.ts +48 -0
  324. package/dist/threed/real-object.js +199 -0
  325. package/dist/threed/real-object.js.map +1 -0
  326. package/dist/threed/texture/text-texture.d.ts +8 -0
  327. package/dist/threed/three-dimensional-container.d.ts +7 -0
  328. package/dist/threed/three-dimensional-container.js +2 -0
  329. package/dist/threed/three-dimensional-container.js.map +1 -0
  330. package/dist/threed/utils/bound-uv-generator.d.ts +16 -0
  331. package/dist/types.d.ts +53 -0
  332. package/dist/types.js +368 -0
  333. package/dist/types.js.map +1 -0
  334. package/package.json +5 -2
  335. package/schema.graphql +5 -0
  336. package/things-scene-ie.js +1 -1
  337. package/things-scene-ie.js.LICENSE.txt +22 -0
  338. package/things-scene-min.js +1 -1
  339. package/things-scene-min.js.LICENSE.txt +22 -0
  340. package/things-scene.d.ts +13 -1
  341. package/things-scene.mjs +34 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modeling-layer.js","sourceRoot":"","sources":["../../src/layer/modeling-layer.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport CommandChange from '../command/command-change'\nimport CommandMigrate from '../command/command-migrate'\nimport Component from '../components/component'\nimport * as Const from '../const'\nimport compile from '../model/compile'\nimport Layer from './layer'\nimport * as Modeler from './modeler'\n\nexport default class ModelingLayer extends Layer {\n constructor(model, context) {\n super(model, context)\n\n this.pathHandler = new Modeler.PathHandler(this)\n var ph = this.pathHandler\n var ch = new Modeler.ControlHandler(this)\n var rs = new Modeler.Resizer(this)\n var rt = new Modeler.Rotator(this)\n\n this._modelers = [ph, ch, rs, rt]\n this._control_mode_modelers = [ch, ph, rs, rt]\n\n this.focusOutline = new Modeler.FocusOutline(this)\n this.groupOutline = new Modeler.GroupOutline(this)\n this.anchorHandler = new Modeler.AnchorHandler(this)\n\n // 그릴 때는 contains 순서의 역순으로 그린다.\n this._reversed_modelers = this._modelers.slice().reverse()\n this._control_mode_reverse_modelers = this._control_mode_modelers.slice().reverse()\n this.hovered = null\n this.hoveredDest = null\n }\n\n get modelers() {\n return this._control_mode ? this._control_mode_modelers : this._modelers\n }\n\n get reversedModelers() {\n return this._control_mode ? this._control_mode_reverse_modelers : this._reversed_modelers\n }\n\n // Lifecycle\n ready() {\n super.ready()\n var rootModel = this.rootModel\n\n var translate = rootModel.get('translate')\n var scale = rootModel.get('scale')\n\n this.set('translate', translate)\n this.set('scale', scale)\n }\n\n contains(x, y) {\n var components = this.selected.filter(c => !!c.parent)\n var scale = this.get('scale') || { x: 1, y: 1 }\n\n if (this._state_dragging) {\n if (this._counter_end) {\n let point = this.anchorTarget.transcoordT2S(x, y)\n if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {\n return true\n }\n }\n\n return true\n }\n\n this.modelers.forEach(modeler => modeler.reset())\n\n /*\n * 부모가 있는 컴포넌트만을 그린다.\n * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)\n */\n var components = this.selected.filter(c => !!c.parent)\n\n for (let i = 0; i < components.length; i++) {\n let component = components[i]\n\n let point = component.transcoordT2S(x, y)\n\n for (let j = 0; j < this.modelers.length; j++) {\n let modeler = this.modelers[j]\n\n if (modeler.contains(point.x, point.y, component, scale)) {\n this.currentModeler = modeler\n return true\n }\n }\n }\n\n if (this.anchorTarget) {\n let point = this.anchorTarget.transcoordT2S(x, y)\n if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {\n this.currentModeler = this.anchorHandler\n return true\n }\n } else {\n this.anchorHandler.reset()\n }\n\n this.currentModeler = null\n return false\n }\n\n _componentDrawer(context, component, scale, logic) {\n let ancester = []\n let parent = component.parent\n\n if (component.isRootModel()) {\n context.save()\n logic(context, component, scale)\n context.restore()\n\n return\n }\n\n while (parent && !parent.isRootModel()) {\n ancester.push(parent)\n parent = parent.parent\n }\n\n context.save()\n\n ancester.reverse().forEach(function (parent) {\n // 원점으로 이동하여 회전.\n let rotatePoint = parent.rotatePoint\n context.translate(rotatePoint.x, rotatePoint.y)\n let parent_scale = parent.get('scale')\n if (parent_scale) context.scale(parent_scale.x, parent_scale.y)\n\n context.rotate(parent.get('rotation'))\n context.translate(-rotatePoint.x, -rotatePoint.y)\n\n let bounds = parent.bounds\n context.translate(bounds.left, bounds.top)\n })\n\n let rotatePoint = component.rotatePoint\n context.translate(rotatePoint.x, rotatePoint.y)\n\n let component_scale = component.get('scale')\n if (component_scale) context.scale(component_scale.x, component_scale.y)\n\n context.rotate(component.get('rotation'))\n context.translate(-rotatePoint.x, -rotatePoint.y)\n\n logic(context, component, scale)\n\n context.restore()\n }\n\n prerender(context) {\n var { translate, scale = { x: 1, y: 1 }, rotation } = this.model\n\n // Scene 모델 바깥쪽을 표현하기 위해서, 먼저 전체 바탕을 회색으로 칠한다.\n context.save()\n context.beginPath()\n\n context.clearRect(0, 0, context.canvas.width, context.canvas.height)\n context.rect(0, 0, context.canvas.width, context.canvas.height)\n\n context.fillStyle = 'black'\n context.globalAlpha = 0.5\n context.fill()\n\n context.restore()\n\n translate && context.translate(translate.x * Const.DPPX, translate.y * Const.DPPX)\n context.scale(scale.x * Const.DPPX, scale.y * Const.DPPX)\n rotation && context.rotate(rotation)\n\n context.clearRect(0, 0, this.rootModel.get('width'), this.rootModel.get('height'))\n }\n\n render(context) {\n context.beginPath()\n\n var scale = this.get('scale') || { x: 1, y: 1 }\n\n /*\n * 부모가 있는 컴포넌트만을 그린다.\n * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)\n */\n var selected = this.selected.filter(c => !!c.parent)\n\n if (this.focused) {\n this._componentDrawer(context, this.focused, scale, (context, component, scale) => {\n this.focusOutline.draw(context, component, scale)\n })\n }\n\n /* TODO selected의 부모가 group인 경우에 최상위 그룹의 모델링 레이아웃을 그려주어야 한다. */\n if (selected.length > 0 && selected[0].parent.isGroup()) {\n let rootGroup = selected[0].parent\n while (rootGroup.parent.isGroup()) rootGroup = rootGroup.parent\n\n this._componentDrawer(context, rootGroup, scale, (context, component, scale) => {\n this.groupOutline.draw(context, component, scale)\n })\n }\n\n selected.forEach(component => {\n this._componentDrawer(context, component, scale, (context, component, scale) => {\n this.reversedModelers.forEach(modeler => modeler.draw(context, component, scale))\n })\n })\n\n this.anchorTarget &&\n this._componentDrawer(context, this.anchorTarget, scale, (context, component, scale) => {\n this.anchorHandler.draw(context, component, scale)\n })\n }\n\n get anchorTarget() {\n if (\n this.currentModeler !== this.anchorHandler &&\n this.currentModeler !== this.pathHandler &&\n !this.hovered?.isLine()\n ) {\n this._anchorTarget = this.hovered\n }\n\n return this._anchorTarget\n }\n\n set anchorTarget(target) {\n this._anchorTarget = target\n }\n\n get hovered() {\n return this._hovered\n }\n\n set hovered(hovered) {\n this._hovered = hovered\n\n this.invalidate()\n }\n\n startLinkProcess(linkFrom, linkModel, e) {\n this.currentModeler = this.pathHandler\n this.processingLink = this.pathHandler.startLinkProcess(linkFrom, linkModel, e)\n this.counterEnd = this.processingLink.fromEnd\n this.processingLink.trigger('tag')\n }\n\n set counterEnd(anchor) {\n this.currentModeler = this.pathHandler\n this._counter_end = anchor\n }\n\n get counterEnd() {\n return this._counter_end\n }\n\n endLinkProcess() {\n this.processingLink?.trigger('tagreset')\n this.processingLink = null\n this._counter_end = null\n }\n\n get eventMap() {\n return {\n 'model-layer': {\n '(all)': {\n change: this.onchange_model,\n wheel: this.onwheel_scale,\n drop: this.ondrop\n },\n '(descendant)': {\n mouseenter: this.onmouseenter,\n mouseleave: this.onmouseleave\n }\n },\n '(root)': {\n '(self)': {\n selected: this.onselected,\n keydown: this.onkeydown,\n keyup: this.onkeyup\n }\n }\n }\n }\n\n onmouseenter(e, hint) {\n this.hovered = hint?.origin\n }\n\n onmouseleave(e, hint) {\n this.hovered = null\n }\n\n onkeydown(e) {\n if (e.key == 'Alt') {\n this._control_mode = true\n this.invalidate()\n }\n }\n\n onkeyup(e) {\n if (e.key == 'Alt') {\n this._control_mode = false\n this.invalidate()\n }\n }\n\n onselected(after, before) {\n this.invalidate()\n }\n\n onchange_model(after, before, hint) {\n var { origin, deliverer } = hint\n\n if (origin === deliverer) {\n if (after.translate)\n // Model Base 레이어와 동일한 translate를 유지하도록 한다.\n this.set('translate', after.translate)\n\n if (after.rotation !== undefined)\n // Model Base 레이어와 동일한 rotation을 유지하도록 한다.\n this.set('rotation', after.rotation)\n\n if (after.scale)\n // Model Base 레이어와 동일한 scale을 유지하도록 한다.\n this.set('scale', after.scale)\n }\n // Model Base 레이어에서 발생하는 대부분의 변화는 Selection 레이어에서도 반영해야한다.\n this.invalidate()\n }\n\n /* default UI Event Handlers. */\n\n ondblclick(e) {\n if (typeof this.currentModeler.ondblclick === 'function') this.currentModeler.ondblclick(e)\n\n this.invalidate()\n }\n\n onmousedown(e) {\n this.currentModeler.onmousedown(e)\n\n this.invalidate()\n }\n\n onmouseup(e) {\n if (typeof this.currentModeler.onmouseup === 'function') this.currentModeler.onmouseup(e)\n\n this.invalidate()\n }\n\n ondragstart(e) {\n this.currentModeler.ondragstart(e)\n this._state_dragging = true\n }\n\n ondragmove(e) {\n this.currentModeler.ondragmove(e)\n\n this.invalidate()\n }\n\n ondragend(e) {\n this._state_dragging = false\n this.currentModeler.ondragend(e)\n\n this.invalidate()\n }\n\n ondrop(e, hint) {\n /* 현재는 이미지 파일 만 추가할 수 있음 */\n var { origin } = hint\n var transfered = e.dataTransfer.files\n\n if (transfered.length < 1) return\n\n let center = this.rootModel.transcoordC2S(e.offsetX, e.offsetY)\n let rootModel = this.rootModel\n\n Promise.all(\n Array.from(transfered).map(file => {\n return new Promise((resolve, reject) => {\n let reader = new FileReader()\n\n reader.addEventListener('loadend', e => {\n resolve(reader.result)\n })\n ;['error', 'abort'].forEach(event =>\n reader.addEventListener(event, e => {\n reject(e)\n })\n )\n\n reader.readAsDataURL(file)\n })\n })\n ).then(\n files => {\n if (e.altKey) {\n CommandChange.around(this.app.commander, () => {\n origin.ondropfile(transfered, files)\n })\n\n this.selected = [origin]\n return\n }\n\n let pendings = []\n\n let changes = files\n .map((file, idx) => {\n let component\n let type = transfered[idx].type\n let name = transfered[idx].name\n\n if (type.startsWith('image/')) {\n component = compile(\n {\n type: type.startsWith('image/gif') ? 'gif-view' : 'image-view',\n top: 0,\n left: 0,\n width: 200,\n height: 200,\n src: file\n },\n rootModel.app\n )\n\n pendings.push(\n new Promise((resolve, reject) => {\n let image = new Image()\n image.src = file\n\n image.onload = () => {\n component.set({\n width: image.width,\n height: image.height\n })\n\n resolve()\n }\n\n image.onerror = e => {\n reject(e)\n }\n })\n )\n } else if (type.startsWith('audio/')) {\n component = compile(\n {\n type: 'audio',\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n src: file\n },\n rootModel.app\n )\n } else if (type.startsWith('vnd.ms-excel/') || /\\.xlsx?$/.test(name)) {\n component = compile(\n {\n type: 'excel',\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n src: file\n },\n rootModel.app\n )\n } else {\n console.log('droped file', transfered[idx])\n }\n\n if (component) {\n component.center = center\n center.x += 50\n center.y += 50\n }\n\n return component\n })\n .filter(Boolean)\n .map(component => {\n return {\n component: component,\n to_container: rootModel\n }\n })\n\n if (changes.length > 0) {\n Promise.all(pendings).then(\n () => {\n this.app.commander.execute(new CommandMigrate({ changes }))\n this.selected = changes.map(change => change.component)\n },\n reason => {\n console.error(reason)\n }\n )\n }\n },\n reason => {\n console.error(reason)\n }\n )\n }\n\n onwheel_scale(e, hint) {\n /* shiftKey + wheel 은 deltaX 값을 변화시킨다. */\n if (e.deltaY == 0 && e.deltaX == 0) return\n\n var model_layer = hint.deliverer\n\n if (e.shiftKey) {\n if (navigator.userAgent.indexOf('Win') != -1) {\n var dir = e.deltaY < 0 ? 1 : -1\n } else {\n var dir = e.deltaX < 0 ? 1 : -1\n }\n\n CommandChange.around(this.app.commander, () => {\n /* 선택된 컴포넌트의 텍스트 사이즈를 조절한다. */\n model_layer.selected.forEach(component => {\n let fontSize = component.get('fontSize') || Const.DEFAULT.FONT_SIZE\n\n if (fontSize < 1) fontSize = 1\n\n fontSize += dir\n component.set('fontSize', fontSize)\n })\n })\n } else {\n var dir = e.deltaY < 0 ? 1 : -1\n\n let scale = model_layer.get('scale') || { x: 1, y: 1 }\n let translate = model_layer.get('translate')\n let x = e.offsetX\n let y = e.offsetY\n\n let p = model_layer.transcoordC2S(x, y)\n let delta = dir * 0.1\n\n let newscale = {\n x: scale.x + delta,\n y: scale.y + delta\n }\n\n if ((dir < 0 && scale.x < 0.2) || (dir > 0 && scale.x > 10)) return\n\n /* 휠을 밀면.. 확대 : zoom in */\n /* 휠을 당기면.. 축소 : zoom out */\n\n model_layer.set('scale', newscale)\n\n let newp = model_layer.transcoordC2S(x, y)\n\n model_layer.set('translate', {\n x: translate.x + (newp.x - p.x) * newscale.x,\n y: translate.y + (newp.y - p.y) * newscale.y\n })\n }\n }\n}\n\nComponent.register('modeling-layer', ModelingLayer)\n"]}
@@ -0,0 +1 @@
1
+ export function selectedFinder(handler: any, container: any, selbox: any, add: any, cancel: any): void;
@@ -0,0 +1,42 @@
1
+ export default class SelectionLayer extends Layer {
2
+ ready(): void;
3
+ get eventMap(): {
4
+ '(root)': {
5
+ '(self)': {
6
+ keydown: (e: any, hint: any) => false | undefined;
7
+ };
8
+ };
9
+ 'model-layer': {
10
+ '(self)': {
11
+ change: (after: any, before: any, hint: any) => void;
12
+ };
13
+ '(all)': {
14
+ dragstart: (e: any, hint: any) => void;
15
+ dragmove: (e: any, hint: any) => void;
16
+ dragend: (e: any, hint: any) => void;
17
+ mousedown: (e: any, hint: any) => void;
18
+ mouseup: (e: any, hint: any) => void;
19
+ };
20
+ };
21
+ };
22
+ onkeydown(e: any, hint: any): false | undefined;
23
+ onchange_root_model(after: any, before: any, hint: any): void;
24
+ _pendingDecision(e: any): void;
25
+ downpoint: {
26
+ x: any;
27
+ y: any;
28
+ } | null | undefined;
29
+ _selectGroupItem(origin: any, e: any): void;
30
+ onmousedown_comp(e: any, hint: any): void;
31
+ onmouseup_comp(e: any, hint: any): void;
32
+ ondragstart_selbox(e: any, hint: any): void;
33
+ selbox: {
34
+ sx: any;
35
+ sy: any;
36
+ selected: never[];
37
+ } | null | undefined;
38
+ ondragmove_selbox(e: any, hint: any): void;
39
+ ondragend_selbox(e: any, hint: any): void;
40
+ last_pos: any;
41
+ }
42
+ import Layer from "./layer";
@@ -0,0 +1,307 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import Component from '../components/component';
5
+ import { warn } from '../core/logger';
6
+ import Layer from './layer';
7
+ import { selectedFinder } from './selection/selected-finder';
8
+ export default class SelectionLayer extends Layer {
9
+ // Lifecycle
10
+ ready() {
11
+ super.ready();
12
+ var rootModel = this.rootModel;
13
+ var translate = rootModel.get('translate');
14
+ var scale = rootModel.get('scale');
15
+ this.set('translate', translate);
16
+ this.set('scale', scale);
17
+ }
18
+ contains(x, y) {
19
+ return false;
20
+ }
21
+ render(ctx) {
22
+ var selbox = this.selbox;
23
+ if (selbox) {
24
+ let { sx, sy, ex, ey } = selbox;
25
+ let scale = this.get('scale') || { x: 1, y: 1 };
26
+ ctx.beginPath();
27
+ ctx.rect(sx, sy, ex - sx, ey - sy);
28
+ ctx.setLineDash([2 / scale.x, 4 / scale.y]);
29
+ ctx.lineWidth = 1 / scale.x;
30
+ ctx.strokeStyle = 'black';
31
+ ctx.stroke();
32
+ }
33
+ }
34
+ get eventMap() {
35
+ return {
36
+ '(root)': {
37
+ '(self)': {
38
+ keydown: this.onkeydown
39
+ }
40
+ },
41
+ 'model-layer': {
42
+ '(self)': {
43
+ change: this.onchange_root_model
44
+ },
45
+ '(all)': {
46
+ dragstart: this.ondragstart_selbox,
47
+ dragmove: this.ondragmove_selbox,
48
+ dragend: this.ondragend_selbox,
49
+ mousedown: this.onmousedown_comp,
50
+ mouseup: this.onmouseup_comp
51
+ }
52
+ }
53
+ };
54
+ }
55
+ onkeydown(e, hint) {
56
+ var { origin, deliverer } = hint; /* deliverer should be RootContainer */
57
+ var selected = deliverer.selected;
58
+ if (selected.length !== 1) {
59
+ return false;
60
+ }
61
+ var component = selected[0];
62
+ var container = component.parent;
63
+ if (!container || container === deliverer) {
64
+ return false;
65
+ }
66
+ if (e.code === 'Tab') {
67
+ var capturables = container.layout.capturables(container);
68
+ var idx = capturables.indexOf(component);
69
+ if (idx == -1) {
70
+ if (container.indexOf(component)) {
71
+ idx = 0;
72
+ }
73
+ else {
74
+ warn('Container not contains [', component, '] as a component');
75
+ return false;
76
+ }
77
+ }
78
+ var length = capturables.length;
79
+ if (e.shiftKey)
80
+ idx--;
81
+ else
82
+ idx++;
83
+ component = capturables[(idx + length) % length];
84
+ }
85
+ else if (container.layout.keyNavigate) {
86
+ component = container.layout.keyNavigate(container, component, e) || component;
87
+ }
88
+ else {
89
+ return false;
90
+ }
91
+ deliverer.selected = [component];
92
+ e.preventDefault();
93
+ }
94
+ onchange_root_model(after, before, hint) {
95
+ if (after.translate) {
96
+ // Model Base 레이어와 동일한 translate를 유지하도록 한다.
97
+ this.set('translate', after.translate);
98
+ }
99
+ if (after.scale) {
100
+ // Model Base 레이어와 동일한 scale 유지하도록 한다.
101
+ this.set('scale', after.scale);
102
+ }
103
+ }
104
+ _pendingDecision(e) {
105
+ /* MouseUP에서 결정하도록 마우스가 눌린 위치를 기억한다. */
106
+ this.downpoint = {
107
+ x: e.offsetX,
108
+ y: e.offsetY
109
+ };
110
+ }
111
+ _selectGroupItem(origin, e) {
112
+ var idx = this.selected.indexOf(origin);
113
+ /*
114
+ * 기존에 선택된 아이템 중에서 그룹내에 있는 아이템이 있다면, 바로 선택되도록 한다.
115
+ * 그렇지 않으면, MouseUP에서 결정하도록 한다.
116
+ */
117
+ let parentOfOrigin = origin.parent;
118
+ // 최상위 그룹을 찾는다.
119
+ while (parentOfOrigin.parent.isGroup()) {
120
+ parentOfOrigin = parentOfOrigin.parent;
121
+ }
122
+ let selectedSiblings = [];
123
+ let foundSibling = false;
124
+ let foundGroup = false;
125
+ this.selected.forEach(item => {
126
+ let parent = item.parent;
127
+ if (item === parentOfOrigin) {
128
+ foundGroup = true;
129
+ return;
130
+ }
131
+ while (parent.parent && parent.parent.isGroup())
132
+ parent = parent.parent;
133
+ if (parent === parentOfOrigin) {
134
+ /* 최상위 그룹이 동일한 경우 sibling으로 판단한다. */
135
+ selectedSiblings.push(item);
136
+ foundSibling = true;
137
+ }
138
+ });
139
+ if (foundSibling) {
140
+ if (e.shiftKey) {
141
+ if (idx == -1) {
142
+ selectedSiblings.push(origin);
143
+ }
144
+ else {
145
+ this._pendingDecision(e);
146
+ return;
147
+ }
148
+ }
149
+ else {
150
+ if (idx == -1) {
151
+ selectedSiblings = [origin];
152
+ }
153
+ else {
154
+ this._pendingDecision(e);
155
+ return;
156
+ }
157
+ }
158
+ } /* no siblinig */
159
+ else {
160
+ if (!foundGroup) {
161
+ /* 기존에 선택된 컴포넌트의 부모 그룹을 찾지 못했다면, 공통부모 여부를 판단해서, 최상위 그룹이 선택된다. */
162
+ if (e.shiftKey) {
163
+ /* (sibling이 없고) 이미 선택된 컴포넌트들이 있다면, ... */
164
+ if (this.selected.length > 0) {
165
+ if (this.selected.indexOf(parentOfOrigin) == -1 && this.selected[0].parent === parentOfOrigin.parent) {
166
+ /* 멀티 선택 리스트에 최상위 그룹을 추가한다. */
167
+ selectedSiblings = [...this.selected, parentOfOrigin];
168
+ }
169
+ else {
170
+ /* 멀티 선택 조건에 맞지 않아서, 아무 동작도 하지 않는다 */
171
+ return;
172
+ }
173
+ }
174
+ else {
175
+ /* (sibling이 없고) 이미 선택된 컴포넌트들이 없다면, 최상위 부모 그룹이 선택된다. */
176
+ selectedSiblings = [parentOfOrigin];
177
+ }
178
+ }
179
+ else {
180
+ selectedSiblings = [parentOfOrigin];
181
+ }
182
+ }
183
+ else {
184
+ /* 기존에 선택된 컴포넌트의 부모 그룹을 찾았다면, 드래깅일 수도 있으므로, 결정을 지연시킨다. */
185
+ this._pendingDecision(e);
186
+ return;
187
+ }
188
+ }
189
+ this.selected = selectedSiblings;
190
+ }
191
+ onmousedown_comp(e, hint) {
192
+ var { origin } = hint;
193
+ this.downpoint = null;
194
+ if (e.shiftKey) {
195
+ // shiftKey 상태에서는 선택은 mousedown에서 처리하고, 선택의 해제는 mouseup 이벤트에서 처리한다.
196
+ // 선택된 대상의 부모가 group인 경우
197
+ if (origin.parent.isGroup()) {
198
+ this._selectGroupItem(origin, e);
199
+ return;
200
+ }
201
+ if (this.selected.indexOf(origin) == -1) {
202
+ // 선택된 컴포넌트와 같은 부모를 가진 컴포넌트들로 선택리스트를 재구성한다.
203
+ // 모델 노드에서 제외된 컴포넌트와 Root Model은 제외한다.
204
+ let selected = this.selected.filter(c => !c.isRootModel() && !!c.parent);
205
+ let parent = selected.length > 0 && selected[0].parent;
206
+ if (parent && parent !== origin.parent) {
207
+ // origin의 부모가 그룹이라면, 그 그룹은 분명히 선택된 상태이다.
208
+ if (origin.parent.isGroup())
209
+ this._pendingDecision(e);
210
+ return;
211
+ }
212
+ selected.push(origin);
213
+ this.selected = selected;
214
+ }
215
+ else {
216
+ this._pendingDecision(e);
217
+ return;
218
+ }
219
+ }
220
+ else {
221
+ /* no shift-key */
222
+ // 선택된 대상의 부모가 group인 경우
223
+ if (origin.parent.isGroup()) {
224
+ this._selectGroupItem(origin, e);
225
+ return;
226
+ }
227
+ if (this.selected.indexOf(origin) == -1)
228
+ this.selected = [origin];
229
+ else
230
+ return; // 변화된 것이 없다.
231
+ }
232
+ }
233
+ onmouseup_comp(e, hint) {
234
+ /*
235
+ * mouse-down 이벤트에서 결정이 pending된 경우 (this.downpoint에 값이 설정된 경우임)
236
+ * 선택은 mousedown에서 처리하고, 선택의 해제는 mouseup 이벤트에서 처리한다.
237
+ * 만약에, 부모가 그룹이라면, mouseup이벤트에서 선택이 처리된다.
238
+ */
239
+ if (!this.downpoint)
240
+ return;
241
+ /*
242
+ * 마우스가 눌린 위치와 동일한 위치에서 버튼릴리즈 된 경우만 처리한다.
243
+ * 선택해제 또는 그룹내 컴포넌트 선택을 위한 행동으로 간주한다.
244
+ */
245
+ if (this.downpoint.x !== e.offsetX || this.downpoint.y !== e.offsetY)
246
+ return;
247
+ var { origin } = hint;
248
+ let idx = this.selected.indexOf(origin);
249
+ if (idx == -1 && origin.parent.isGroup())
250
+ idx = this.selected.indexOf(origin.parent);
251
+ /* 이미 선택되어 있는 컴포넌트를 선택리스트에서 제거 */
252
+ if (idx !== -1 && e.shiftKey) {
253
+ let selected = this.selected.slice();
254
+ if (idx > -1)
255
+ selected.splice(idx, 1); // remove
256
+ this.selected = selected;
257
+ return;
258
+ }
259
+ // 선택된 대상의 부모가 group인 경우
260
+ if (origin.parent.isGroup()) {
261
+ this.selected = [origin];
262
+ return;
263
+ }
264
+ }
265
+ /* 영역을 그려서 다중 선택을 하는 기능을 위한 이벤트 핸들러들임 */
266
+ ondragstart_selbox(e, hint) {
267
+ var { origin } = hint;
268
+ if (!origin.stuck)
269
+ return;
270
+ var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY);
271
+ // Model Base 레이어에서 드래깅이 시작되면, 멀티선택 영역을 시작한다.
272
+ // 만일, origin이 stuck된 컴포넌트이면, 선택리스트에서 제외한다.
273
+ this.selbox = {
274
+ sx: x,
275
+ sy: y,
276
+ selected: []
277
+ };
278
+ }
279
+ ondragmove_selbox(e, hint) {
280
+ var { origin } = hint;
281
+ if (!origin.stuck)
282
+ return;
283
+ var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY);
284
+ var { deliverer } = hint; /* should be rootModel */
285
+ // 드래그 해제 이전에 컨트롤 키를 릴리즈 하는 경우, selbox가 없을 수 있으므로 확인한다.
286
+ // selbox는 여러 컴포넌트를 선택하기 위해서 마우스로 드래깅해서 만들어내는 영역임.
287
+ // 드래그로는 stuck 되어있는 컨테이너의 1차 자식 컴포넌트들만 선택할 수 있다.
288
+ if (this.selbox) {
289
+ this.selbox.ex = x;
290
+ this.selbox.ey = y;
291
+ let container = origin;
292
+ selectedFinder(this, origin, this.selbox, e.shiftKey);
293
+ this.invalidate();
294
+ }
295
+ }
296
+ ondragend_selbox(e, hint) {
297
+ var { origin } = hint;
298
+ if (!origin.stuck)
299
+ return;
300
+ this.last_pos = null;
301
+ this.selbox = null;
302
+ selectedFinder(this, null, null, false, true);
303
+ this.invalidate();
304
+ }
305
+ }
306
+ Component.register('selection-layer', SelectionLayer);
307
+ //# sourceMappingURL=selection-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-layer.js","sourceRoot":"","sources":["../../src/layer/selection-layer.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from '../components/component'\nimport { warn } from '../core/logger'\nimport Layer from './layer'\nimport { selectedFinder } from './selection/selected-finder'\n\nexport default class SelectionLayer extends Layer {\n // Lifecycle\n ready() {\n super.ready()\n var rootModel = this.rootModel\n\n var translate = rootModel.get('translate')\n var scale = rootModel.get('scale')\n\n this.set('translate', translate)\n this.set('scale', scale)\n }\n\n contains(x, y) {\n return false\n }\n\n render(ctx) {\n var selbox = this.selbox\n\n if (selbox) {\n let { sx, sy, ex, ey } = selbox\n let scale = this.get('scale') || { x: 1, y: 1 }\n\n ctx.beginPath()\n\n ctx.rect(sx, sy, ex - sx, ey - sy)\n\n ctx.setLineDash([2 / scale.x, 4 / scale.y])\n ctx.lineWidth = 1 / scale.x\n ctx.strokeStyle = 'black'\n\n ctx.stroke()\n }\n }\n\n get eventMap() {\n return {\n '(root)': {\n '(self)': {\n keydown: this.onkeydown\n }\n },\n 'model-layer': {\n '(self)': {\n change: this.onchange_root_model\n },\n '(all)': {\n dragstart: this.ondragstart_selbox,\n dragmove: this.ondragmove_selbox,\n dragend: this.ondragend_selbox,\n\n mousedown: this.onmousedown_comp,\n mouseup: this.onmouseup_comp\n }\n }\n }\n }\n\n onkeydown(e, hint) {\n var { origin, deliverer } = hint /* deliverer should be RootContainer */\n\n var selected = deliverer.selected\n\n if (selected.length !== 1) {\n return false\n }\n\n var component = selected[0]\n var container = component.parent\n\n if (!container || container === deliverer) {\n return false\n }\n\n if (e.code === 'Tab') {\n var capturables = container.layout.capturables(container)\n\n var idx = capturables.indexOf(component)\n\n if (idx == -1) {\n if (container.indexOf(component)) {\n idx = 0\n } else {\n warn('Container not contains [', component, '] as a component')\n return false\n }\n }\n\n var length = capturables.length\n\n if (e.shiftKey) idx--\n else idx++\n\n component = capturables[(idx + length) % length]\n } else if (container.layout.keyNavigate) {\n component = container.layout.keyNavigate(container, component, e) || component\n } else {\n return false\n }\n\n deliverer.selected = [component]\n e.preventDefault()\n }\n\n onchange_root_model(after, before, hint) {\n if (after.translate) {\n // Model Base 레이어와 동일한 translate를 유지하도록 한다.\n this.set('translate', after.translate)\n }\n\n if (after.scale) {\n // Model Base 레이어와 동일한 scale 유지하도록 한다.\n this.set('scale', after.scale)\n }\n }\n\n _pendingDecision(e) {\n /* MouseUP에서 결정하도록 마우스가 눌린 위치를 기억한다. */\n this.downpoint = {\n x: e.offsetX,\n y: e.offsetY\n }\n }\n\n _selectGroupItem(origin, e) {\n var idx = this.selected.indexOf(origin)\n\n /*\n * 기존에 선택된 아이템 중에서 그룹내에 있는 아이템이 있다면, 바로 선택되도록 한다.\n * 그렇지 않으면, MouseUP에서 결정하도록 한다.\n */\n let parentOfOrigin = origin.parent\n\n // 최상위 그룹을 찾는다.\n while (parentOfOrigin.parent.isGroup()) {\n parentOfOrigin = parentOfOrigin.parent\n }\n\n let selectedSiblings = []\n let foundSibling = false\n let foundGroup = false\n\n this.selected.forEach(item => {\n let parent = item.parent\n\n if (item === parentOfOrigin) {\n foundGroup = true\n return\n }\n\n while (parent.parent && parent.parent.isGroup()) parent = parent.parent\n\n if (parent === parentOfOrigin) {\n /* 최상위 그룹이 동일한 경우 sibling으로 판단한다. */\n\n selectedSiblings.push(item)\n foundSibling = true\n }\n })\n\n if (foundSibling) {\n if (e.shiftKey) {\n if (idx == -1) {\n selectedSiblings.push(origin)\n } else {\n this._pendingDecision(e)\n return\n }\n } else {\n if (idx == -1) {\n selectedSiblings = [origin]\n } else {\n this._pendingDecision(e)\n return\n }\n }\n } /* no siblinig */ else {\n if (!foundGroup) {\n /* 기존에 선택된 컴포넌트의 부모 그룹을 찾지 못했다면, 공통부모 여부를 판단해서, 최상위 그룹이 선택된다. */\n if (e.shiftKey) {\n /* (sibling이 없고) 이미 선택된 컴포넌트들이 있다면, ... */\n if (this.selected.length > 0) {\n if (this.selected.indexOf(parentOfOrigin) == -1 && this.selected[0].parent === parentOfOrigin.parent) {\n /* 멀티 선택 리스트에 최상위 그룹을 추가한다. */\n selectedSiblings = [...this.selected, parentOfOrigin]\n } else {\n /* 멀티 선택 조건에 맞지 않아서, 아무 동작도 하지 않는다 */\n return\n }\n } else {\n /* (sibling이 없고) 이미 선택된 컴포넌트들이 없다면, 최상위 부모 그룹이 선택된다. */\n selectedSiblings = [parentOfOrigin]\n }\n } else {\n selectedSiblings = [parentOfOrigin]\n }\n } else {\n /* 기존에 선택된 컴포넌트의 부모 그룹을 찾았다면, 드래깅일 수도 있으므로, 결정을 지연시킨다. */\n this._pendingDecision(e)\n return\n }\n }\n\n this.selected = selectedSiblings\n }\n\n onmousedown_comp(e, hint) {\n var { origin } = hint\n this.downpoint = null\n\n if (e.shiftKey) {\n // shiftKey 상태에서는 선택은 mousedown에서 처리하고, 선택의 해제는 mouseup 이벤트에서 처리한다.\n\n // 선택된 대상의 부모가 group인 경우\n if (origin.parent.isGroup()) {\n this._selectGroupItem(origin, e)\n return\n }\n\n if (this.selected.indexOf(origin) == -1) {\n // 선택된 컴포넌트와 같은 부모를 가진 컴포넌트들로 선택리스트를 재구성한다.\n // 모델 노드에서 제외된 컴포넌트와 Root Model은 제외한다.\n let selected = this.selected.filter(c => !c.isRootModel() && !!c.parent)\n\n let parent = selected.length > 0 && selected[0].parent\n if (parent && parent !== origin.parent) {\n // origin의 부모가 그룹이라면, 그 그룹은 분명히 선택된 상태이다.\n if (origin.parent.isGroup()) this._pendingDecision(e)\n\n return\n }\n\n selected.push(origin)\n\n this.selected = selected\n } else {\n this._pendingDecision(e)\n return\n }\n } else {\n /* no shift-key */\n\n // 선택된 대상의 부모가 group인 경우\n if (origin.parent.isGroup()) {\n this._selectGroupItem(origin, e)\n return\n }\n\n if (this.selected.indexOf(origin) == -1) this.selected = [origin]\n else return // 변화된 것이 없다.\n }\n }\n\n onmouseup_comp(e, hint) {\n /*\n * mouse-down 이벤트에서 결정이 pending된 경우 (this.downpoint에 값이 설정된 경우임)\n * 선택은 mousedown에서 처리하고, 선택의 해제는 mouseup 이벤트에서 처리한다.\n * 만약에, 부모가 그룹이라면, mouseup이벤트에서 선택이 처리된다.\n */\n\n if (!this.downpoint) return\n\n /*\n * 마우스가 눌린 위치와 동일한 위치에서 버튼릴리즈 된 경우만 처리한다.\n * 선택해제 또는 그룹내 컴포넌트 선택을 위한 행동으로 간주한다.\n */\n if (this.downpoint.x !== e.offsetX || this.downpoint.y !== e.offsetY) return\n\n var { origin } = hint\n let idx = this.selected.indexOf(origin)\n if (idx == -1 && origin.parent.isGroup()) idx = this.selected.indexOf(origin.parent)\n\n /* 이미 선택되어 있는 컴포넌트를 선택리스트에서 제거 */\n if (idx !== -1 && e.shiftKey) {\n let selected = this.selected.slice()\n\n if (idx > -1) selected.splice(idx, 1) // remove\n\n this.selected = selected\n\n return\n }\n\n // 선택된 대상의 부모가 group인 경우\n if (origin.parent.isGroup()) {\n this.selected = [origin]\n return\n }\n }\n\n /* 영역을 그려서 다중 선택을 하는 기능을 위한 이벤트 핸들러들임 */\n\n ondragstart_selbox(e, hint) {\n var { origin } = hint\n\n if (!origin.stuck) return\n\n var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY)\n\n // Model Base 레이어에서 드래깅이 시작되면, 멀티선택 영역을 시작한다.\n // 만일, origin이 stuck된 컴포넌트이면, 선택리스트에서 제외한다.\n\n this.selbox = {\n sx: x,\n sy: y,\n selected: []\n }\n }\n\n ondragmove_selbox(e, hint) {\n var { origin } = hint\n\n if (!origin.stuck) return\n\n var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY)\n var { deliverer } = hint /* should be rootModel */\n\n // 드래그 해제 이전에 컨트롤 키를 릴리즈 하는 경우, selbox가 없을 수 있으므로 확인한다.\n // selbox는 여러 컴포넌트를 선택하기 위해서 마우스로 드래깅해서 만들어내는 영역임.\n // 드래그로는 stuck 되어있는 컨테이너의 1차 자식 컴포넌트들만 선택할 수 있다.\n if (this.selbox) {\n this.selbox.ex = x\n this.selbox.ey = y\n\n let container = origin\n\n selectedFinder(this, origin, this.selbox, e.shiftKey)\n\n this.invalidate()\n }\n }\n\n ondragend_selbox(e, hint) {\n var { origin } = hint\n\n if (!origin.stuck) return\n\n this.last_pos = null\n this.selbox = null\n\n selectedFinder(this, null, null, false, true)\n\n this.invalidate()\n }\n}\n\nComponent.register('selection-layer', SelectionLayer)\n"]}
@@ -0,0 +1,18 @@
1
+ export default class ShiftLayer extends Layer {
2
+ ready(): void;
3
+ get eventMap(): {
4
+ '(root)': {
5
+ '(self)': {
6
+ keydown: (e: any) => void;
7
+ keyup: (e: any) => void;
8
+ };
9
+ };
10
+ };
11
+ onkeydown(e: any): void;
12
+ before_mode: any;
13
+ onkeyup(e: any): void;
14
+ ondragstart(e: any): void;
15
+ last_position: any;
16
+ ondragmove(e: any): void;
17
+ }
18
+ import Layer from "./layer";
@@ -0,0 +1,61 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import Component from '../components/component';
5
+ import * as Const from '../const';
6
+ import Layer from './layer';
7
+ export default class ShiftLayer extends Layer {
8
+ // Lifecycle
9
+ ready() {
10
+ super.ready();
11
+ var translate = this.rootModel.get('translate');
12
+ this.set('translate', translate);
13
+ }
14
+ render(ctx) {
15
+ /* render nothing */
16
+ }
17
+ contains(x, y) {
18
+ return !!(this.app.mode == Const.MODE_SHIFT);
19
+ }
20
+ get eventMap() {
21
+ return {
22
+ '(root)': {
23
+ '(self)': {
24
+ keydown: this.onkeydown,
25
+ keyup: this.onkeyup
26
+ }
27
+ }
28
+ };
29
+ }
30
+ onkeydown(e) {
31
+ if (e.code === 'Space' && this.before_mode === undefined) {
32
+ this.before_mode = this.app.mode;
33
+ this.app.mode = Const.MODE_SHIFT;
34
+ }
35
+ }
36
+ onkeyup(e) {
37
+ if (e.code === 'Space') {
38
+ if (this.before_mode !== undefined) {
39
+ this.app.mode = this.before_mode;
40
+ }
41
+ delete this.before_mode;
42
+ }
43
+ }
44
+ /* default UI Event Handlers. */
45
+ ondragstart(e) {
46
+ this.last_position = this.transcoordC2S(e.offsetX, e.offsetY);
47
+ }
48
+ ondragmove(e) {
49
+ var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY);
50
+ // 모델레이어의 원점을 움직인다.
51
+ this.rootModel.move({
52
+ x: x - this.last_position.x,
53
+ y: y - this.last_position.y
54
+ }, false);
55
+ // 모델레이어의 translate 값이 바뀌었으므로, 이 레이어의 translate도 변경되었을 것이다.
56
+ // 따라서, transcoord을 다시 해주어야 한다.
57
+ this.last_position = this.transcoordC2S(e.offsetX, e.offsetY);
58
+ }
59
+ }
60
+ Component.register('shift-layer', ShiftLayer);
61
+ //# sourceMappingURL=shift-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shift-layer.js","sourceRoot":"","sources":["../../src/layer/shift-layer.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,SAAS,MAAM,yBAAyB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,KAAK;IAC3C,YAAY;IACZ,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC/C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,CAAC,GAAG;QACR,oBAAoB;IACtB,CAAC;IAED,QAAQ,CAAC,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,QAAQ;QACV,OAAO;YACL,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,OAAO,EAAE,IAAI,CAAC,SAAS;oBACvB,KAAK,EAAE,IAAI,CAAC,OAAO;iBACpB;aACF;SACF,CAAA;IACH,CAAC;IAED,SAAS,CAAC,CAAC;QACT,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YACxD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAA;SACjC;IACH,CAAC;IAED,OAAO,CAAC,CAAC;QACP,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;YACtB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;gBAClC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAA;aACjC;YACD,OAAO,IAAI,CAAC,WAAW,CAAA;SACxB;IACH,CAAC;IAED,gCAAgC;IAEhC,WAAW,CAAC,CAAC;QACX,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;IAC/D,CAAC;IAED,UAAU,CAAC,CAAC;QACV,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;QAEvD,mBAAmB;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB;YACE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;SAC5B,EACD,KAAK,CACN,CAAA;QAED,2DAA2D;QAC3D,+BAA+B;QAE/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;IAC/D,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from '../components/component'\nimport * as Const from '../const'\nimport Layer from './layer'\n\nexport default class ShiftLayer extends Layer {\n // Lifecycle\n ready() {\n super.ready()\n var translate = this.rootModel.get('translate')\n this.set('translate', translate)\n }\n\n render(ctx) {\n /* render nothing */\n }\n\n contains(x, y) {\n return !!(this.app.mode == Const.MODE_SHIFT)\n }\n\n get eventMap() {\n return {\n '(root)': {\n '(self)': {\n keydown: this.onkeydown,\n keyup: this.onkeyup\n }\n }\n }\n }\n\n onkeydown(e) {\n if (e.code === 'Space' && this.before_mode === undefined) {\n this.before_mode = this.app.mode\n this.app.mode = Const.MODE_SHIFT\n }\n }\n\n onkeyup(e) {\n if (e.code === 'Space') {\n if (this.before_mode !== undefined) {\n this.app.mode = this.before_mode\n }\n delete this.before_mode\n }\n }\n\n /* default UI Event Handlers. */\n\n ondragstart(e) {\n this.last_position = this.transcoordC2S(e.offsetX, e.offsetY)\n }\n\n ondragmove(e) {\n var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY)\n\n // 모델레이어의 원점을 움직인다.\n this.rootModel.move(\n {\n x: x - this.last_position.x,\n y: y - this.last_position.y\n },\n false\n )\n\n // 모델레이어의 translate 값이 바뀌었으므로, 이 레이어의 translate도 변경되었을 것이다.\n // 따라서, transcoord을 다시 해주어야 한다.\n\n this.last_position = this.transcoordC2S(e.offsetX, e.offsetY)\n }\n}\n\nComponent.register('shift-layer', ShiftLayer)\n"]}
@@ -0,0 +1,8 @@
1
+ export default AbsoluteLayout;
2
+ declare namespace AbsoluteLayout {
3
+ function reflow(container: any, component: any): void;
4
+ function capturables(container: any): any;
5
+ function drawables(container: any): any;
6
+ function isStuck(component: any): boolean;
7
+ const ABSOLUTE: boolean;
8
+ }
@@ -0,0 +1,7 @@
1
+ export default CardLayout;
2
+ declare namespace CardLayout {
3
+ function reflow(container: any): void;
4
+ function capturables(container: any): any;
5
+ function drawables(container: any): any;
6
+ function isStuck(component: any): boolean;
7
+ }
@@ -0,0 +1,8 @@
1
+ export default HTMLAbsoluteLayout;
2
+ declare namespace HTMLAbsoluteLayout {
3
+ function reflow(container: any, component: any): void;
4
+ function capturables(container: any): any;
5
+ function drawables(container: any): any;
6
+ function isStuck(component: any): boolean;
7
+ const ABSOLUTE: boolean;
8
+ }
@@ -0,0 +1,8 @@
1
+ export { default as Layout } from "./layout";
2
+ export { default as AbsoluteLayout } from "./absolute";
3
+ export { default as CardLayout } from "./card";
4
+ export { default as LinearHorizontalLayout } from "./linear-horizontal";
5
+ export { default as LinearVerticalLayout } from "./linear-vertical";
6
+ export { default as TableLayout } from "./table";
7
+ export { default as ThreeLayout } from "./three";
8
+ export { default as HTMLAbsoluteLayout } from "./html-absolute";
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ export { default as Layout } from './layout';
5
+ export { default as AbsoluteLayout } from './absolute';
6
+ export { default as CardLayout } from './card';
7
+ export { default as LinearHorizontalLayout } from './linear-horizontal';
8
+ export { default as LinearVerticalLayout } from './linear-vertical';
9
+ export { default as TableLayout } from './table';
10
+ export { default as ThreeLayout } from './three';
11
+ export { default as HTMLAbsoluteLayout } from './html-absolute';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,SAAS,CAAA;AAEhD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nexport { default as Layout } from './layout'\nexport { default as AbsoluteLayout } from './absolute'\nexport { default as CardLayout } from './card'\nexport { default as LinearHorizontalLayout } from './linear-horizontal'\nexport { default as LinearVerticalLayout } from './linear-vertical'\nexport { default as TableLayout } from './table'\nexport { default as ThreeLayout } from './three'\n\nexport { default as HTMLAbsoluteLayout } from './html-absolute'\n"]}
@@ -0,0 +1,11 @@
1
+ declare namespace _default {
2
+ export { list };
3
+ export { register };
4
+ export { unregister };
5
+ export { get };
6
+ }
7
+ export default _default;
8
+ declare function list(): {};
9
+ declare function register(name: any, layout: any): void;
10
+ declare function unregister(name: any): void;
11
+ declare function get(name: any): any;
@@ -0,0 +1,7 @@
1
+ export default LinearHorizontal;
2
+ declare namespace LinearHorizontal {
3
+ function reflow(container: any): void;
4
+ function capturables(container: any): any;
5
+ function drawables(container: any): any;
6
+ function isStuck(component: any): boolean;
7
+ }
@@ -0,0 +1,7 @@
1
+ export default LinearVertical;
2
+ declare namespace LinearVertical {
3
+ function reflow(container: any): void;
4
+ function capturables(container: any): any;
5
+ function drawables(container: any): any;
6
+ function isStuck(component: any): boolean;
7
+ }