@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":"ortholine.js","sourceRoot":"","sources":["../../src/components/ortholine.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAEvD,MAAM,IAAI,GAAG,CAAC,CAAA;AACd,MAAM,EAAE,GAAG,CAAC,CAAA;AAEZ,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE;gBACR,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,GAAG;gBACR,IAAI,EAAE,CAAC;aACR;SACF;KACF;IACD,IAAI,EAAE,2BAA2B;CAClC,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,IAAI;IACzC,IAAI,cAAc;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,QAAQ;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE/B,MAAM,EACJ,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,aAAa,EACxB,gBAAgB,EAAE,oBAAoB,GAAG,YAAY,EACtD,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;QACtB,MAAM,EACJ,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,WAAW,EACtB,gBAAgB,EAAE,kBAAkB,GAAG,UAAU,EAClD,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;QAEpB,IAAI,iBAAiB,GAAG,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAA;QAElE,IAAI,IAAI,GAAG,EAAE,CAAA;QAEb,IAAI,oBAAoB,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;SAChC;QAED,2BAA2B;QAC3B,IAAI,gBAAgB,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,CAAA;QAC5C,IAAI,gBAAgB,EAAE;YACpB,IAAI,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;YAC3F,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;YAEjE,gBAAgB,GAAG;gBACjB,GAAG,gBAAgB;gBACnB,IAAI,EAAE,YAAY,CAAC,CAAC;gBACpB,GAAG,EAAE,YAAY,CAAC,CAAC;aACpB,CAAA;SACF;QAED,IAAI,UAAU,GAAG,gBAAgB;YAC/B,CAAC,CAAC;gBACE,IAAI,EAAE,gBAAgB,CAAC,IAAI,GAAG,EAAE;gBAChC,GAAG,EAAE,gBAAgB,CAAC,GAAG,GAAG,EAAE;gBAC9B,KAAK,EAAE,gBAAgB,CAAC,KAAK,GAAG,EAAE;gBAClC,MAAM,EAAE,gBAAgB,CAAC,MAAM,GAAG,EAAE;aACrC;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,oBAAoB,CAAC,CAAC;gBAC5B,GAAG,EAAE,oBAAoB,CAAC,CAAC;gBAC3B,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;aACV,CAAA;QACL,gBAAgB,GAAG,gBAAgB,IAAI,UAAU,CAAA;QAEjD,IAAI,cAAc,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,CAAA;QACxC,IAAI,cAAc,EAAE;YAClB,IAAI,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,CAAA;YACrF,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;YAEjE,cAAc,GAAG;gBACf,GAAG,cAAc;gBACjB,IAAI,EAAE,YAAY,CAAC,CAAC;gBACpB,GAAG,EAAE,YAAY,CAAC,CAAC;aACpB,CAAA;SACF;QAED,IAAI,QAAQ,GAAG,cAAc;YAC3B,CAAC,CAAC;gBACE,IAAI,EAAE,cAAc,CAAC,IAAI,GAAG,EAAE;gBAC9B,GAAG,EAAE,cAAc,CAAC,GAAG,GAAG,EAAE;gBAC5B,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,EAAE;gBAChC,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,EAAE;aACnC;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,kBAAkB,CAAC,CAAC;gBAC1B,GAAG,EAAE,kBAAkB,CAAC,CAAC;gBACzB,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;aACV,CAAA;QACL,cAAc,GAAG,cAAc,IAAI,QAAQ,CAAA;QAE3C,IAAI,YAAY,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEzC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAA;QAClF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAA;QAE7E,IAAI,WAAW,GAAG;YAChB,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,OAAO;YACZ,KAAK,EACH,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK;gBACjE,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,QAAQ;gBAC/C,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ;YAC/C,MAAM,EACJ,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM;gBACjE,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,OAAO;gBAC9C,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,OAAO;SAC/C,CAAA;QAED,0BAA0B;QAC1B,IAAI,OAAO,EACT,OAAO,EACP,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,CAAC,CAAA;QAClB,IAAI,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,CAAA;QACjE,IAAI,uBAAuB,EAAE,uBAAuB,CAAA;QACpD,IAAI,sBAAsB,EAAE,uBAAuB,CAAA;QAEnD,IAAI,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE;YACxE,aAAa,GAAG,IAAI,CAAA;YACpB,cAAc,GAAG,EAAE,CAAA;YACnB,sBAAsB,GAAG,aAAa,CAAA;YACtC,uBAAuB,GAAG,WAAW,CAAA;YACrC,OAAO,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACpF,WAAW,GAAG,cAAc,CAAC,IAAI,GAAG,OAAO,CAAA;SAC5C;aAAM,IAAI,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE;YAC7E,aAAa,GAAG,EAAE,CAAA;YAClB,cAAc,GAAG,IAAI,CAAA;YACrB,sBAAsB,GAAG,WAAW,CAAA;YACpC,uBAAuB,GAAG,aAAa,CAAA;YACvC,OAAO,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClF,WAAW,GAAG,gBAAgB,CAAC,IAAI,GAAG,OAAO,CAAA;SAC9C;QAED,IAAI,gBAAgB,CAAC,GAAG,GAAG,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE;YACvE,cAAc,GAAG,IAAI,CAAA;YACrB,cAAc,GAAG,EAAE,CAAA;YACnB,uBAAuB,GAAG,aAAa,CAAA;YACvC,uBAAuB,GAAG,WAAW,CAAA;YACrC,OAAO,GAAG,CAAC,gBAAgB,CAAC,GAAG,GAAG,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACnF,YAAY,GAAG,cAAc,CAAC,GAAG,GAAG,OAAO,CAAA;SAC5C;aAAM,IAAI,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE;YAC5E,cAAc,GAAG,EAAE,CAAA;YACnB,cAAc,GAAG,IAAI,CAAA;YACrB,uBAAuB,GAAG,WAAW,CAAA;YACrC,uBAAuB,GAAG,aAAa,CAAA;YACvC,OAAO,GAAG,CAAC,gBAAgB,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjF,YAAY,GAAG,gBAAgB,CAAC,GAAG,GAAG,OAAO,CAAA;SAC9C;QAED,2BAA2B;QAC3B,IAAI,KAAK,GAAG,EAAE,CAAA;QAEd,IAAI,OAAO,IAAI,WAAW,GAAG,YAAY,EAAE;YACzC,QAAQ,uBAAuB,EAAE;gBAC/B,KAAK,IAAI;oBACP,QAAQ,sBAAsB,EAAE;wBAC9B,KAAK,IAAI;4BACP,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,OAAO;gCACV,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;6BACtC,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,OAAO;gCACV,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;6BACvC,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,oBAAoB,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;4BACnG,IAAI,KAAK,GACP,oBAAoB,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACxD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCAChF,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,EACpE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CACpC,CAAA;4BAEP,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;gCACrC,CAAC,EAAE,KAAK;6BACT,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,OAAO;gCACV,CAAC,EAAE,KAAK;6BACT,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,OAAO;gCACV,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;6BACvC,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,KAAK,CAAC;wBACX,KAAK,KAAK;4BACR,IAAI,KAAK,GACP,sBAAsB,KAAK,KAAK;gCAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCACnF,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;4BAEvF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;gCACrC,CAAC,EAAE,KAAK;6BACT,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,OAAO;gCACV,CAAC,EAAE,KAAK;6BACT,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,OAAO;gCACV,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;6BACvC,CAAC,CAAA;4BACF,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBACD,MAAK;gBACP,KAAK,IAAI;oBACP,QAAQ,sBAAsB,EAAE;wBAC9B,KAAK,IAAI;4BACP,IAAI,KAAK,GACP,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACtE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gCAChF,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,MAAM,EACtE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CACnC,CAAA;4BACP,IAAI,MAAM,GAAG,KAAK,CAAA;4BAClB,MAAK;wBAEP,KAAK,IAAI;4BACP,IAAI,KAAK,GACP,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,OAAO;gCACT,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;oCAC1E,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,WAAW,GAAG,GAAG;oCACrC,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,GAAG,GAAG,CAAA;4BAE9D,IAAI,MAAM,GAAG,KAAK,CAAA;4BAElB,MAAK;wBAEP,KAAK,KAAK;4BACR,IAAI,KAAK,GACP,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gCACvD,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BAC1C,IAAI,MAAM,GAAG,KAAK,CAAA;4BAElB,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAA;4BAC1F,IAAI,MAAM,GAAG,KAAK,CAAA;4BAElB,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBAED,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;wBACrC,CAAC,EAAE,KAAK;qBACT,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,OAAO;wBACV,CAAC,EAAE,KAAK;qBACT,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,OAAO;wBACV,CAAC,EAAE,MAAM;qBACV,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;wBACtC,CAAC,EAAE,MAAM;qBACV,CAAC,CAAA;oBAEF,MAAK;gBACP,KAAK,KAAK;oBACR,QAAQ,sBAAsB,EAAE;wBAC9B,KAAK,IAAI;4BACP,IAAI,KAAK,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;4BAC9C,IAAI,MAAM,GACR,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACtE,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;gCACpC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,MAAM,CAAA;4BAC5E,MAAK;wBAEP,KAAK,IAAI;4BACP,IAAI,KAAK,GAAG,OAAO;gCACjB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;gCAC3F,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BACxC,IAAI,MAAM,GAAG,KAAK,CAAA;4BAElB,MAAK;wBAEP,KAAK,KAAK;4BACR,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BAChD,IAAI,MAAM,GAAG,KAAK,CAAA;4BAElB,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,CAAA;4BAC1G,IAAI,MAAM,GAAG,OAAO;gCAClB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;gCAC3F,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,MAAM,CAAA;4BAE1E,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBAED,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;wBACrC,CAAC,EAAE,KAAK;qBACT,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,OAAO;wBACV,CAAC,EAAE,KAAK;qBACT,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,OAAO;wBACV,CAAC,EAAE,MAAM;qBACV,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;wBACtC,CAAC,EAAE,MAAM;qBACV,CAAC,CAAA;oBACF,MAAK;gBACP,KAAK,KAAK;oBACR,QAAQ,sBAAsB,EAAE;wBAC9B,KAAK,IAAI;4BACP,IAAI,KAAK,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;4BAC9C,IAAI,MAAM,GACR,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACtE,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;gCACpC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,CAAA;4BACtC,MAAK;wBAEP,KAAK,IAAI;4BACP,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAA;4BAC3F,IAAI,MAAM,GAAG,KAAK,CAAA;4BAElB,MAAK;wBAEP,KAAK,KAAK;4BACR,IAAI,KAAK,GACP,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gCACvD,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;4BACxC,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCACxD,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;4BAEzC,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAA;4BAC3B,IAAI,MAAM,GAAG,KAAK,CAAA;4BAElB,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBAED,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;wBACrC,CAAC,EAAE,KAAK;qBACT,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,OAAO;wBACV,CAAC,EAAE,KAAK;qBACT,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,OAAO;wBACV,CAAC,EAAE,MAAM;qBACV,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;wBACtC,CAAC,EAAE,MAAM;qBACV,CAAC,CAAA;oBACF,MAAK;gBACP;oBACE,OAAO,IAAI,CAAC,IAAI,CAAA;aACnB;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;SACjE;aAAM,IAAI,OAAO,EAAE;YAClB,QAAQ,uBAAuB,EAAE;gBAC/B,KAAK,KAAK;oBACR,QAAQ,uBAAuB,EAAE;wBAC/B,KAAK,KAAK;4BACR,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACtC,CAAC,EAAE,OAAO;6BACX,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACtC,CAAC,EAAE,OAAO;6BACX,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,qBAAqB,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;4BACtG,IAAI,MAAM,GACR,qBAAqB,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACzD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCAClF,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,EACtE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CACpC,CAAA;4BAEP,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,MAAM;gCACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;6BACvC,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,MAAM;gCACT,CAAC,EAAE,OAAO;6BACX,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACtC,CAAC,EAAE,OAAO;6BACX,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;4BAE/F,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,MAAM;gCACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;6BACvC,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,MAAM;gCACT,CAAC,EAAE,OAAO;6BACX,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACtC,CAAC,EAAE,OAAO;6BACX,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;4BAE/F,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,MAAM;gCACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;6BACvC,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,MAAM;gCACT,CAAC,EAAE,OAAO;6BACX,CAAC,CAAA;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACtC,CAAC,EAAE,OAAO;6BACX,CAAC,CAAA;4BACF,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBACD,MAAK;gBACP,KAAK,KAAK;oBACR,QAAQ,uBAAuB,EAAE;wBAC/B,KAAK,IAAI;4BACP,IAAI,MAAM,GAAG,WAAW,CAAC,IAAI,CAAA;4BAC7B,IAAI,MAAM,GAAG,MAAM,CAAA;4BACnB,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCACxD,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;4BAC1C,IAAI,MAAM,GAAG,MAAM,CAAA;4BACnB,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,OAAO;gCACT,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;oCAC3E,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,YAAY,GAAG,GAAG;oCACvC,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,YAAY,GAAG,GAAG,CAAA;4BAC/D,IAAI,MAAM,GAAG,MAAM,CAAA;4BACnB,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;4BAChD,IAAI,MAAM,GACR,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACvE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCAClF,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,EACtE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CACpC,CAAA;4BACP,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBAED,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;qBACvC,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,OAAO;qBACX,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,OAAO;qBACX,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;qBACvC,CAAC,CAAA;oBACF,MAAK;gBACP,KAAK,IAAI;oBACP,QAAQ,uBAAuB,EAAE;wBAC/B,KAAK,IAAI;4BACP,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCACxD,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;4BACzC,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCACxD,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;4BACzC,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,MAAM,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;4BACjD,IAAI,MAAM,GAAG,MAAM,CAAA;4BACnB,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCACxD,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;4BAC1C,IAAI,MAAM,GAAG,MAAM,CAAA;4BACnB,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;4BAChD,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CACnB,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,EACtE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CACpC,CAAA;4BACD,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBAED,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;qBACvC,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,OAAO;qBACX,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,OAAO;qBACX,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;qBACvC,CAAC,CAAA;oBACF,MAAK;gBACP,KAAK,IAAI;oBACP,QAAQ,uBAAuB,EAAE;wBAC/B,KAAK,IAAI;4BACP,IAAI,MAAM,GAAG,WAAW,CAAC,IAAI,CAAA;4BAC7B,IAAI,MAAM,GAAG,MAAM,CAAA;4BAEnB,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCACxD,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;4BACzC,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;gCACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCACxD,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;4BACzC,MAAK;wBAEP,KAAK,KAAK;4BACR,IAAI,MAAM,GAAG,WAAW,CAAC,IAAI,CAAA;4BAC7B,IAAI,MAAM,GAAG,MAAM,CAAA;4BAEnB,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,MAAM,GACR,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;gCACvE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gCAClF,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;4BACzC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;4BAClE,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBAED,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;qBACvC,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,OAAO;qBACX,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,OAAO;qBACX,CAAC,CAAA;oBAEF,KAAK,CAAC,IAAI,CAAC;wBACT,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;qBACvC,CAAC,CAAA;oBACF,MAAK;gBACP;oBACE,OAAO,IAAI,CAAC,IAAI,CAAA;aACnB;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;SAClE;aAAM;YACL,QAAQ,aAAa,EAAE;gBACrB,KAAK,KAAK;oBACR,QAAQ,WAAW,EAAE;wBACnB,KAAK,KAAK;4BACR,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAA;4BACvB,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;4BAC5C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;6BAC7B,CAAC,CAAA;4BAEF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM;6BACxC,CAAC,CAAA;4BAEF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC,EAAE,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM;6BACxC,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,CAAC,GACH,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCACnD,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCACjD,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC3B,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;4BAE1C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;6BAC7B,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;6BAC3B,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAA;4BACxB,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;6BAC7B,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;6BAC3B,CAAC,CAAA;4BAEF,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBACD,MAAK;gBACP,KAAK,KAAK;oBACR,QAAQ,WAAW,EAAE;wBACnB,KAAK,KAAK;4BACR,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;4BAC5C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;6BAC7B,CAAC,CAAA;4BAEF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,WAAW,CAAC,GAAG;6BACnB,CAAC,CAAA;4BAEF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC,EAAE,WAAW,CAAC,GAAG;6BACnB,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BAC5C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BAC5C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BAC5C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBACD,MAAK;gBACP,KAAK,IAAI;oBACP,QAAQ,WAAW,EAAE;wBACnB,KAAK,KAAK;4BACR,IAAI,CAAC,GACH,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACnD,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACjD,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACzB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA;4BACtB,IAAI,CAAC,GACH,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACnD,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACjD,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;4BAE1D,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;6BAC7B,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAA;4BACxB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;4BAEjF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;6BAC7B,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;4BAC5C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC,EAAE,WAAW,CAAC,GAAG;6BACnB,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,WAAW,CAAC,GAAG;6BACnB,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;6BAC3B,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAA;4BACxB,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;6BAC7B,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC;gCACD,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;6BAC3B,CAAC,CAAA;4BACF,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBACD,MAAK;gBACP,KAAK,IAAI;oBACP,QAAQ,WAAW,EAAE;wBACnB,KAAK,KAAK;4BACR,IAAI,CAAC,GACH,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACnD,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACjD,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC3B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAA;4BAErB,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,KAAK;4BACR,IAAI,CAAC,GACH,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACnD,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCACjD,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC3B,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BAE1C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,IAAI;4BACP,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BAE5C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC;6BACF,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBAEP,KAAK,IAAI;4BACP,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAA;4BAE5C,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC5B,CAAC;6BACF,CAAC,CAAA;4BAEF,IAAI,CAAC,IAAI,CAAC;gCACR,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC1B,CAAC;6BACF,CAAC,CAAA;4BACF,MAAK;wBACP;4BACE,OAAO,IAAI,CAAC,IAAI,CAAA;qBACnB;oBACD,MAAK;gBACP;oBACE,OAAO,IAAI,CAAC,IAAI,CAAA;aACnB;SACF;QAED,IAAI,kBAAkB,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;SAC9B;QAED,0CAA0C;QAC1C,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC;aACvC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACvB,IAAI,GAAG,KAAK,CAAC,EAAE;gBACb,OAAO,IAAI,CAAA;aACZ;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE;gBACpC,OAAO,KAAK,CAAA;aACb;YAED,OAAO,IAAI,CAAA;QACb,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACvB,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,OAAO,IAAI,CAAA;aACZ;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;YAE1B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;gBAC5E,OAAO,KAAK,CAAA;aACb;YAED,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from './component'\nimport Line, { SOUTH, NORTH, EAST, WEST } from './line'\n\nconst FROM = 0\nconst TO = 1\n\nconst NATURE = {\n mutable: false,\n resizable: false,\n rotatable: false,\n properties: [\n {\n type: 'number',\n label: 'round',\n name: 'round',\n property: {\n min: 0,\n max: 100,\n step: 1\n }\n }\n ],\n help: 'scene/component/ortholine'\n}\n\nexport default class OrthoLine extends Line {\n get pathExtendable() {\n return false\n }\n\n get drawPath() {\n const fromPosition = this.path[0]\n const toPosition = this.path[1]\n\n const {\n component: fromComponent,\n direction: fromDirection,\n boundaryPosition: fromBoundaryPosition = fromPosition\n } = this.fromEnd || {}\n const {\n component: toComponent,\n direction: toDirection,\n boundaryPosition: toBoundaryPosition = toPosition\n } = this.toEnd || {}\n\n var boundaryPositions = [fromBoundaryPosition, toBoundaryPosition]\n\n var path = []\n\n if (fromBoundaryPosition) {\n path.push(fromBoundaryPosition)\n }\n\n /* 두 컴포넌트의 확장된 바운드를 구한다. */\n var fromOriginBounds = fromComponent?.bounds\n if (fromOriginBounds) {\n var transcoorded = fromComponent.transcoordS2T(fromOriginBounds.left, fromOriginBounds.top)\n transcoorded = this.transcoordT2P(transcoorded.x, transcoorded.y)\n\n fromOriginBounds = {\n ...fromOriginBounds,\n left: transcoorded.x,\n top: transcoorded.y\n }\n }\n\n var fromBounds = fromOriginBounds\n ? {\n left: fromOriginBounds.left - 20,\n top: fromOriginBounds.top - 20,\n width: fromOriginBounds.width + 40,\n height: fromOriginBounds.height + 40\n }\n : {\n left: fromBoundaryPosition.x,\n top: fromBoundaryPosition.y,\n width: 0,\n height: 0\n }\n fromOriginBounds = fromOriginBounds || fromBounds\n\n var toOriginBounds = toComponent?.bounds\n if (toOriginBounds) {\n var transcoorded = toComponent.transcoordS2T(toOriginBounds.left, toOriginBounds.top)\n transcoorded = this.transcoordT2P(transcoorded.x, transcoorded.y)\n\n toOriginBounds = {\n ...toOriginBounds,\n left: transcoorded.x,\n top: transcoorded.y\n }\n }\n\n var toBounds = toOriginBounds\n ? {\n left: toOriginBounds.left - 20,\n top: toOriginBounds.top - 20,\n width: toOriginBounds.width + 40,\n height: toOriginBounds.height + 40\n }\n : {\n left: toBoundaryPosition.x,\n top: toBoundaryPosition.y,\n width: 0,\n height: 0\n }\n toOriginBounds = toOriginBounds || toBounds\n\n var fromToBounds = [fromBounds, toBounds]\n\n const leftMost = fromBounds.left > toBounds.left ? toBounds.left : fromBounds.left\n const topMost = fromBounds.top > toBounds.top ? toBounds.top : fromBounds.top\n\n var unionBounds = {\n left: leftMost,\n top: topMost,\n width:\n fromBounds.left + fromBounds.width > toBounds.left + toBounds.width\n ? fromBounds.left + fromBounds.width - leftMost\n : toBounds.left + toBounds.width - leftMost,\n height:\n fromBounds.top + fromBounds.height > toBounds.top + toBounds.height\n ? fromBounds.top + fromBounds.height - topMost\n : toBounds.top + toBounds.height - topMost\n }\n\n /* 두 컴포넌트 바운드의 센터를 찾는다. */\n var centerX,\n centerY,\n centerWidth = 0,\n centerHeight = 0\n var upperComponent, leftComponent, rightComponent, lowerComponent\n var upperComponentDirection, lowerComponentDirection\n var leftComponentDirection, rightComponentDirection\n\n if (fromOriginBounds.left + fromOriginBounds.width < toOriginBounds.left) {\n leftComponent = FROM\n rightComponent = TO\n leftComponentDirection = fromDirection\n rightComponentDirection = toDirection\n centerX = (fromOriginBounds.left + fromOriginBounds.width + toOriginBounds.left) / 2\n centerWidth = toOriginBounds.left - centerX\n } else if (toOriginBounds.left + toOriginBounds.width < fromOriginBounds.left) {\n leftComponent = TO\n rightComponent = FROM\n leftComponentDirection = toDirection\n rightComponentDirection = fromDirection\n centerX = (fromOriginBounds.left + toOriginBounds.width + toOriginBounds.left) / 2\n centerWidth = fromOriginBounds.left - centerX\n }\n\n if (fromOriginBounds.top + fromOriginBounds.height < toOriginBounds.top) {\n upperComponent = FROM\n lowerComponent = TO\n upperComponentDirection = fromDirection\n lowerComponentDirection = toDirection\n centerY = (fromOriginBounds.top + fromOriginBounds.height + toOriginBounds.top) / 2\n centerHeight = toOriginBounds.top - centerY\n } else if (toOriginBounds.top + toOriginBounds.height < fromOriginBounds.top) {\n upperComponent = TO\n lowerComponent = FROM\n upperComponentDirection = toDirection\n lowerComponentDirection = fromDirection\n centerY = (fromOriginBounds.top + toOriginBounds.height + toOriginBounds.top) / 2\n centerHeight = fromOriginBounds.top - centerY\n }\n\n /* 각 LinkEnd의 방향별 패스 구하기 */\n var lpath = []\n\n if (centerX && centerWidth > centerHeight) {\n switch (rightComponentDirection) {\n case WEST:\n switch (leftComponentDirection) {\n case EAST:\n lpath.push({\n x: centerX,\n y: boundaryPositions[leftComponent].y\n })\n\n lpath.push({\n x: centerX,\n y: boundaryPositions[rightComponent].y\n })\n break\n case WEST:\n var leftComponentCenterY = fromToBounds[leftComponent].top + fromToBounds[leftComponent].height / 2\n var leftY =\n leftComponentCenterY > boundaryPositions[rightComponent].y\n ? Math.min(fromToBounds[leftComponent].top, boundaryPositions[rightComponent].y)\n : Math.max(\n fromToBounds[leftComponent].top + fromToBounds[leftComponent].height,\n boundaryPositions[rightComponent].y\n )\n\n lpath.push({\n x: boundaryPositions[leftComponent].x,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: boundaryPositions[rightComponent].y\n })\n break\n case NORTH:\n case SOUTH:\n var leftY =\n leftComponentDirection === SOUTH\n ? Math.max(boundaryPositions[leftComponent].y, boundaryPositions[rightComponent].y)\n : Math.min(boundaryPositions[leftComponent].y, boundaryPositions[rightComponent].y)\n\n lpath.push({\n x: boundaryPositions[leftComponent].x,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: boundaryPositions[rightComponent].y\n })\n break\n default:\n return this.path\n }\n break\n case EAST:\n switch (leftComponentDirection) {\n case EAST:\n var leftY =\n boundaryPositions[leftComponent].y < boundaryPositions[rightComponent].y\n ? Math.min(fromToBounds[rightComponent].top, boundaryPositions[leftComponent].y)\n : Math.max(\n fromToBounds[rightComponent].top + fromToBounds[rightComponent].height,\n boundaryPositions[leftComponent].y\n )\n var rightY = leftY\n break\n\n case WEST:\n var leftY =\n centerY !== undefined\n ? centerY\n : boundaryPositions[leftComponent].y < boundaryPositions[rightComponent].y\n ? unionBounds.top - centerWidth * 0.5\n : unionBounds.top + unionBounds.height + centerWidth * 0.5\n\n var rightY = leftY\n\n break\n\n case SOUTH:\n var leftY =\n centerY !== undefined\n ? Math.max(centerY, boundaryPositions[leftComponent].y)\n : unionBounds.top + unionBounds.height\n var rightY = leftY\n\n break\n case NORTH:\n var leftY = centerY ? Math.min(centerY, fromToBounds[leftComponent].top) : unionBounds.top\n var rightY = leftY\n\n break\n default:\n return this.path\n }\n\n lpath.push({\n x: boundaryPositions[leftComponent].x,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: rightY\n })\n\n lpath.push({\n x: boundaryPositions[rightComponent].x,\n y: rightY\n })\n\n break\n case SOUTH:\n switch (leftComponentDirection) {\n case EAST:\n var leftY = boundaryPositions[leftComponent].y\n var rightY =\n boundaryPositions[leftComponent].y > boundaryPositions[rightComponent].y\n ? boundaryPositions[leftComponent].y\n : fromToBounds[rightComponent].top + fromToBounds[rightComponent].height\n break\n\n case WEST:\n var leftY = centerY\n ? Math.max(centerY, fromToBounds[rightComponent].top + fromToBounds[rightComponent].height)\n : unionBounds.top + unionBounds.height\n var rightY = leftY\n\n break\n\n case SOUTH:\n var leftY = unionBounds.top + unionBounds.height\n var rightY = leftY\n\n break\n case NORTH:\n var leftY = centerY ? Math.min(centerY, fromToBounds[leftComponent].top) : fromToBounds[leftComponent].top\n var rightY = centerY\n ? Math.max(centerY, fromToBounds[rightComponent].top + fromToBounds[rightComponent].height)\n : fromToBounds[rightComponent].top + fromToBounds[rightComponent].height\n\n break\n default:\n return this.path\n }\n\n lpath.push({\n x: boundaryPositions[leftComponent].x,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: rightY\n })\n\n lpath.push({\n x: boundaryPositions[rightComponent].x,\n y: rightY\n })\n break\n case NORTH:\n switch (leftComponentDirection) {\n case EAST:\n var leftY = boundaryPositions[leftComponent].y\n var rightY =\n boundaryPositions[leftComponent].y < boundaryPositions[rightComponent].y\n ? boundaryPositions[leftComponent].y\n : fromToBounds[rightComponent].top\n break\n\n case WEST:\n var leftY = centerY ? Math.min(centerY, fromToBounds[rightComponent].top) : unionBounds.top\n var rightY = leftY\n\n break\n\n case SOUTH:\n var leftY =\n centerY !== undefined\n ? Math.max(centerY, boundaryPositions[leftComponent].y)\n : boundaryPositions[leftComponent].y\n var rightY =\n centerY !== undefined\n ? Math.min(centerY, boundaryPositions[rightComponent].y)\n : boundaryPositions[rightComponent].y\n\n break\n case NORTH:\n var leftY = unionBounds.top\n var rightY = leftY\n\n break\n default:\n return this.path\n }\n\n lpath.push({\n x: boundaryPositions[leftComponent].x,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: leftY\n })\n\n lpath.push({\n x: centerX,\n y: rightY\n })\n\n lpath.push({\n x: boundaryPositions[rightComponent].x,\n y: rightY\n })\n break\n default:\n return this.path\n }\n\n path.push(...(leftComponent === FROM ? lpath : lpath.reverse()))\n } else if (centerY) {\n switch (lowerComponentDirection) {\n case NORTH:\n switch (upperComponentDirection) {\n case SOUTH:\n lpath.push({\n x: boundaryPositions[upperComponent].x,\n y: centerY\n })\n\n lpath.push({\n x: boundaryPositions[lowerComponent].x,\n y: centerY\n })\n break\n case NORTH:\n var upperComponentCenterX = fromToBounds[upperComponent].left + fromToBounds[upperComponent].width / 2\n var upperX =\n upperComponentCenterX > boundaryPositions[lowerComponent].x\n ? Math.min(fromToBounds[upperComponent].left, boundaryPositions[lowerComponent].x)\n : Math.max(\n fromToBounds[upperComponent].left + fromToBounds[upperComponent].width,\n boundaryPositions[lowerComponent].x\n )\n\n lpath.push({\n x: upperX,\n y: boundaryPositions[upperComponent].y\n })\n\n lpath.push({\n x: upperX,\n y: centerY\n })\n\n lpath.push({\n x: boundaryPositions[lowerComponent].x,\n y: centerY\n })\n break\n case WEST:\n var upperX = Math.min(boundaryPositions[upperComponent].x, boundaryPositions[lowerComponent].x)\n\n lpath.push({\n x: upperX,\n y: boundaryPositions[upperComponent].y\n })\n\n lpath.push({\n x: upperX,\n y: centerY\n })\n\n lpath.push({\n x: boundaryPositions[lowerComponent].x,\n y: centerY\n })\n break\n case EAST:\n var upperX = Math.max(boundaryPositions[upperComponent].x, boundaryPositions[lowerComponent].x)\n\n lpath.push({\n x: upperX,\n y: boundaryPositions[upperComponent].y\n })\n\n lpath.push({\n x: upperX,\n y: centerY\n })\n\n lpath.push({\n x: boundaryPositions[lowerComponent].x,\n y: centerY\n })\n break\n default:\n return this.path\n }\n break\n case SOUTH:\n switch (upperComponentDirection) {\n case WEST:\n var upperX = unionBounds.left\n var lowerX = upperX\n break\n case EAST:\n var upperX =\n centerX !== undefined\n ? Math.max(centerX, boundaryPositions[upperComponent].x)\n : unionBounds.left + unionBounds.width\n var lowerX = upperX\n break\n case NORTH:\n var upperX =\n centerX !== undefined\n ? centerX\n : boundaryPositions[upperComponent].x < boundaryPositions[lowerComponent].x\n ? unionBounds.left - centerHeight * 0.5\n : unionBounds.left + unionBounds.width + centerHeight * 0.5\n var lowerX = upperX\n break\n case SOUTH:\n var upperX = boundaryPositions[upperComponent].x\n var lowerX =\n boundaryPositions[upperComponent].x < boundaryPositions[lowerComponent].x\n ? Math.min(fromToBounds[lowerComponent].left, boundaryPositions[upperComponent].x)\n : Math.max(\n fromToBounds[lowerComponent].left + fromToBounds[lowerComponent].width,\n boundaryPositions[upperComponent].x\n )\n break\n default:\n return this.path\n }\n\n lpath.push({\n x: upperX,\n y: boundaryPositions[upperComponent].y\n })\n\n lpath.push({\n x: upperX,\n y: centerY\n })\n\n lpath.push({\n x: lowerX,\n y: centerY\n })\n\n lpath.push({\n x: lowerX,\n y: boundaryPositions[lowerComponent].y\n })\n break\n case EAST:\n switch (upperComponentDirection) {\n case WEST:\n var upperX =\n centerX !== undefined\n ? Math.min(centerX, boundaryPositions[upperComponent].x)\n : boundaryPositions[upperComponent].x\n var lowerX =\n centerX !== undefined\n ? Math.max(centerX, boundaryPositions[lowerComponent].x)\n : boundaryPositions[lowerComponent].x\n break\n case EAST:\n var upperX = unionBounds.left + unionBounds.width\n var lowerX = upperX\n break\n case NORTH:\n var upperX =\n centerX !== undefined\n ? Math.max(centerX, boundaryPositions[lowerComponent].x)\n : unionBounds.left + unionBounds.width\n var lowerX = upperX\n break\n case SOUTH:\n var upperX = boundaryPositions[upperComponent].x\n var lowerX = Math.max(\n fromToBounds[lowerComponent].left + fromToBounds[lowerComponent].width,\n boundaryPositions[upperComponent].x\n )\n break\n default:\n return this.path\n }\n\n lpath.push({\n x: upperX,\n y: boundaryPositions[upperComponent].y\n })\n\n lpath.push({\n x: upperX,\n y: centerY\n })\n\n lpath.push({\n x: lowerX,\n y: centerY\n })\n\n lpath.push({\n x: lowerX,\n y: boundaryPositions[lowerComponent].y\n })\n break\n case WEST:\n switch (upperComponentDirection) {\n case WEST:\n var upperX = unionBounds.left\n var lowerX = upperX\n\n break\n case EAST:\n var upperX =\n centerX !== undefined\n ? Math.max(centerX, boundaryPositions[upperComponent].x)\n : boundaryPositions[upperComponent].x\n var lowerX =\n centerX !== undefined\n ? Math.min(centerX, boundaryPositions[lowerComponent].x)\n : boundaryPositions[lowerComponent].x\n break\n\n case NORTH:\n var upperX = unionBounds.left\n var lowerX = upperX\n\n break\n case SOUTH:\n var upperX =\n boundaryPositions[upperComponent].x < boundaryPositions[lowerComponent].x\n ? Math.min(fromToBounds[lowerComponent].left, boundaryPositions[upperComponent].x)\n : boundaryPositions[upperComponent].x\n var lowerX = Math.min(upperX, boundaryPositions[lowerComponent].x)\n break\n default:\n return this.path\n }\n\n lpath.push({\n x: upperX,\n y: boundaryPositions[upperComponent].y\n })\n\n lpath.push({\n x: upperX,\n y: centerY\n })\n\n lpath.push({\n x: lowerX,\n y: centerY\n })\n\n lpath.push({\n x: lowerX,\n y: boundaryPositions[lowerComponent].y\n })\n break\n default:\n return this.path\n }\n\n path.push(...(upperComponent === FROM ? lpath : lpath.reverse()))\n } else {\n switch (fromDirection) {\n case NORTH:\n switch (toDirection) {\n case NORTH:\n var y = unionBounds.top\n path.push({\n x: boundaryPositions[FROM].x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n case SOUTH:\n var x = unionBounds.left + unionBounds.width\n path.push({\n x,\n y: boundaryPositions[FROM].y\n })\n\n path.push({\n x,\n y: unionBounds.top + unionBounds.height\n })\n\n path.push({\n x: boundaryPositions[TO].x,\n y: unionBounds.top + unionBounds.height\n })\n break\n case EAST:\n var x =\n boundaryPositions[TO].y < boundaryPositions[FROM].y &&\n boundaryPositions[TO].x < boundaryPositions[FROM].x\n ? boundaryPositions[FROM].x\n : unionBounds.left + unionBounds.width\n\n path.push({\n x,\n y: boundaryPositions[FROM].y\n })\n path.push({\n x,\n y: boundaryPositions[TO].y\n })\n break\n case WEST:\n var x = unionBounds.left\n path.push({\n x,\n y: boundaryPositions[FROM].y\n })\n path.push({\n x,\n y: boundaryPositions[TO].y\n })\n\n break\n default:\n return this.path\n }\n break\n case SOUTH:\n switch (toDirection) {\n case NORTH:\n var x = unionBounds.left + unionBounds.width\n path.push({\n x,\n y: boundaryPositions[FROM].y\n })\n\n path.push({\n x,\n y: unionBounds.top\n })\n\n path.push({\n x: boundaryPositions[TO].x,\n y: unionBounds.top\n })\n break\n case SOUTH:\n var y = unionBounds.top + unionBounds.height\n path.push({\n x: boundaryPositions[FROM].x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n case EAST:\n var y = unionBounds.top + unionBounds.height\n path.push({\n x: boundaryPositions[FROM].x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n case WEST:\n var y = unionBounds.top + unionBounds.height\n path.push({\n x: boundaryPositions[FROM].x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n default:\n return this.path\n }\n break\n case WEST:\n switch (toDirection) {\n case NORTH:\n var x =\n boundaryPositions[FROM].x > boundaryPositions[TO].x &&\n boundaryPositions[FROM].y < boundaryPositions[TO].y\n ? boundaryPositions[TO].x\n : unionBounds.left\n var y =\n boundaryPositions[FROM].x > boundaryPositions[TO].x &&\n boundaryPositions[FROM].y < boundaryPositions[TO].y\n ? boundaryPositions[TO].y\n : Math.min(unionBounds.top, boundaryPositions[FROM].y)\n\n path.push({\n x,\n y: boundaryPositions[FROM].y\n })\n path.push({\n x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n case SOUTH:\n var x = unionBounds.left\n var y = Math.max(unionBounds.top + unionBounds.height, boundaryPositions[FROM].y)\n\n path.push({\n x,\n y: boundaryPositions[FROM].y\n })\n path.push({\n x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n case EAST:\n var x = unionBounds.left + unionBounds.width\n path.push({\n x: boundaryPositions[FROM].x,\n y: unionBounds.top\n })\n path.push({\n x,\n y: unionBounds.top\n })\n path.push({\n x,\n y: boundaryPositions[TO].y\n })\n break\n case WEST:\n var x = unionBounds.left\n path.push({\n x,\n y: boundaryPositions[FROM].y\n })\n path.push({\n x,\n y: boundaryPositions[TO].y\n })\n break\n default:\n return this.path\n }\n break\n case EAST:\n switch (toDirection) {\n case NORTH:\n var y =\n boundaryPositions[FROM].y < boundaryPositions[TO].y &&\n boundaryPositions[FROM].x < boundaryPositions[TO].x\n ? boundaryPositions[FROM].y\n : unionBounds.top\n\n path.push({\n x: boundaryPositions[FROM].x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n case SOUTH:\n var y =\n boundaryPositions[FROM].y > boundaryPositions[TO].y &&\n boundaryPositions[FROM].x < boundaryPositions[TO].x\n ? boundaryPositions[FROM].y\n : unionBounds.top + unionBounds.height\n\n path.push({\n x: boundaryPositions[FROM].x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n case EAST:\n var y = unionBounds.top + unionBounds.height\n\n path.push({\n x: boundaryPositions[FROM].x,\n y\n })\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n\n case WEST:\n var y = unionBounds.top + unionBounds.height\n\n path.push({\n x: boundaryPositions[FROM].x,\n y\n })\n\n path.push({\n x: boundaryPositions[TO].x,\n y\n })\n break\n default:\n return this.path\n }\n break\n default:\n return this.path\n }\n }\n\n if (toBoundaryPosition) {\n path.push(toBoundaryPosition)\n }\n\n /* following 2 filters not to be merged */\n return [fromPosition, ...path, toPosition]\n .filter((p, idx, path) => {\n if (idx === 0) {\n return true\n }\n\n const prev = path[idx - 1]\n if (p.x === prev.x && p.y === prev.y) {\n return false\n }\n\n return true\n })\n .filter((p, idx, path) => {\n if (idx === 0 || idx >= path.length - 1) {\n return true\n }\n\n const prev = path[idx - 1]\n const next = path[idx + 1]\n\n if ((p.x === prev.x && p.x === next.x) || (p.y === prev.y && p.y === next.y)) {\n return false\n }\n\n return true\n })\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.register('ortholine', OrthoLine)\n"]}
@@ -0,0 +1,4 @@
1
+ /// <reference path="../../../things-scene.d.ts" />
2
+ /// <reference path="../../../src/component.d.ts" />
3
+ import { Component } from '@hatiolab/things-scene';
4
+ export default function ellipseOutline(component: Component, progress: number): import("@hatiolab/things-scene").DIMENSION;
@@ -0,0 +1,11 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ export default function ellipseOutline(component, progress) {
5
+ var { cx, cy, rx, ry } = component.model;
6
+ var theta = Math.PI * 2 * progress;
7
+ var x = cx + rx * Math.cos(theta);
8
+ var y = cy + ry * Math.sin(theta);
9
+ return component.transcoordS2T(x, y);
10
+ }
11
+ //# sourceMappingURL=ellipse-outline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipse-outline.js","sourceRoot":"","sources":["../../../src/components/outline/ellipse-outline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,SAAoB,EAAE,QAAgB;IAC3E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,CAAA;IACxC,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAA;IAElC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAEjC,OAAO,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACtC,CAAC","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component } from '@hatiolab/things-scene'\n\nexport default function ellipseOutline(component: Component, progress: number) {\n var { cx, cy, rx, ry } = component.model\n var theta = Math.PI * 2 * progress\n\n var x = cx + rx * Math.cos(theta)\n var y = cy + ry * Math.sin(theta)\n\n return component.transcoordS2T(x, y)\n}\n"]}
@@ -0,0 +1 @@
1
+ export default function pathOutline(component: any, progress: any): any;
@@ -0,0 +1,5 @@
1
+ export default class Path extends Component {
2
+ set path(arg: any);
3
+ get path(): any;
4
+ }
5
+ import Component from "./component";
@@ -0,0 +1,40 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import Component from './component';
5
+ export default class Path extends Component {
6
+ render(ctx) {
7
+ var { path = [] } = this.state;
8
+ if (path.length <= 1)
9
+ return;
10
+ // Polyline을 그린다.
11
+ ctx.beginPath();
12
+ ctx.moveTo(path[0].x, path[0].y);
13
+ for (let i = 1; i < path.length; i++)
14
+ ctx.lineTo(path[i].x, path[i].y);
15
+ ctx.closePath();
16
+ this.drawStroke(ctx);
17
+ }
18
+ get path() {
19
+ return this.model.path;
20
+ }
21
+ set path(path) {
22
+ this.set('path', path);
23
+ }
24
+ contains(x, y) {
25
+ var path = this.state.path;
26
+ var result = false;
27
+ path.forEach((p, idx) => {
28
+ let j = (idx + path.length + 1) % path.length;
29
+ let x1 = p.x;
30
+ let y1 = p.y;
31
+ let x2 = path[j].x;
32
+ let y2 = path[j].y;
33
+ if (y1 > y != y2 > y && x < ((x2 - x1) * (y - y1)) / (y2 - y1) + x1)
34
+ result = !result;
35
+ });
36
+ return result;
37
+ }
38
+ }
39
+ Component.register('path', Path);
40
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/components/path.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,SAAS,MAAM,aAAa,CAAA;AAEnC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,SAAS;IACzC,MAAM,CAAC,GAAG;QACR,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAE9B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,OAAM;QAE5B,iBAAiB;QACjB,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEtE,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI;QACX,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACxB,CAAC;IAED,QAAQ,CAAC,CAAC,EAAE,CAAC;QACX,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;QAC1B,IAAI,MAAM,GAAG,KAAK,CAAA;QAElB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACtB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;YAE7C,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YACZ,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YACZ,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAElB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE;gBAAE,MAAM,GAAG,CAAC,MAAM,CAAA;QACvF,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from './component'\n\nexport default class Path extends Component {\n render(ctx) {\n var { path = [] } = this.state\n\n if (path.length <= 1) return\n\n // Polyline을 그린다.\n ctx.beginPath()\n\n ctx.moveTo(path[0].x, path[0].y)\n\n for (let i = 1; i < path.length; i++) ctx.lineTo(path[i].x, path[i].y)\n\n ctx.closePath()\n\n this.drawStroke(ctx)\n }\n\n get path() {\n return this.model.path\n }\n\n set path(path) {\n this.set('path', path)\n }\n\n contains(x, y) {\n var path = this.state.path\n var result = false\n\n path.forEach((p, idx) => {\n let j = (idx + path.length + 1) % path.length\n\n let x1 = p.x\n let y1 = p.y\n let x2 = path[j].x\n let y2 = path[j].y\n\n if (y1 > y != y2 > y && x < ((x2 - x1) * (y - y1)) / (y2 - y1) + x1) result = !result\n })\n\n return result\n }\n}\n\nComponent.register('path', Path)\n"]}
@@ -0,0 +1,40 @@
1
+ import * as THREE from 'three';
2
+ import { Component, ComponentNature, DIMENSION, Shape } from '@hatiolab/things-scene';
3
+ import RealObject from '../threed/real-object';
4
+ import RealObjectExtrude from '../threed/real-object-extrude';
5
+ export declare class PolygonExtrude extends RealObjectExtrude {
6
+ _minMax?: {
7
+ minX?: number;
8
+ minY?: number;
9
+ maxX?: number;
10
+ maxY?: number;
11
+ };
12
+ get shape(): THREE.Shape;
13
+ get minMax(): {
14
+ minX?: number | undefined;
15
+ minY?: number | undefined;
16
+ maxX?: number | undefined;
17
+ maxY?: number | undefined;
18
+ };
19
+ get cx(): number;
20
+ get cy(): number;
21
+ }
22
+ export default class Polygon extends Shape {
23
+ is3dish(): boolean;
24
+ get mutable(): boolean;
25
+ get pathExtendable(): boolean;
26
+ get path(): any;
27
+ set path(path: any);
28
+ contains(x: number, y: number): boolean;
29
+ get controls(): {
30
+ x: number;
31
+ y: number;
32
+ handler: {
33
+ ondragstart: (point: DIMENSION, index: number, component: Component) => void;
34
+ ondragmove: (point: DIMENSION, index: number, component: Component) => void;
35
+ ondragend: (point: DIMENSION, index: number, component: Component) => void;
36
+ };
37
+ }[];
38
+ buildRealObject(): RealObject | undefined;
39
+ get nature(): ComponentNature;
40
+ }
@@ -0,0 +1,157 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import * as THREE from 'three';
5
+ import { Component, Shape } from '@hatiolab/things-scene';
6
+ import RealObjectExtrude from '../threed/real-object-extrude';
7
+ var controlHandler = {
8
+ ondragstart: function (point, index, component) {
9
+ component.mutatePath(null, function (path) {
10
+ path.splice(index + 1, 0, point);
11
+ });
12
+ },
13
+ ondragmove: function (point, index, component) {
14
+ component.mutatePath(null, function (path) {
15
+ path[index + 1] = point;
16
+ });
17
+ },
18
+ ondragend: function (point, index, component) { }
19
+ };
20
+ const NATURE = {
21
+ mutable: true,
22
+ resizable: false,
23
+ rotatable: true,
24
+ properties: [
25
+ {
26
+ type: 'number',
27
+ label: 'round',
28
+ name: 'round',
29
+ property: {
30
+ min: 0,
31
+ max: 100,
32
+ step: 1
33
+ }
34
+ }
35
+ ],
36
+ help: 'scene/component/polygon'
37
+ };
38
+ export class PolygonExtrude extends RealObjectExtrude {
39
+ get shape() {
40
+ var { path = [], round = 0 } = this.component.state;
41
+ var shape = new THREE.Shape();
42
+ for (var i = 0; i < path.length; i++) {
43
+ const prev = path[(i - 1 + path.length) % path.length];
44
+ const cursor = path[(i + path.length) % path.length];
45
+ const next = path[(i + 1) % path.length];
46
+ if (prev.x === cursor.x && prev.y === cursor.y) {
47
+ continue;
48
+ }
49
+ var length = Math.sqrt((prev.x - cursor.x) * (prev.x - cursor.x) + (prev.y - cursor.y) * (prev.y - cursor.y));
50
+ var theta = length !== 0 ? Math.atan2(prev.x - cursor.x, prev.y - cursor.y) : 0;
51
+ var x = Math.sin(theta) * Math.min(round, length / 2) + cursor.x;
52
+ var y = Math.cos(theta) * Math.min(round, length / 2) + cursor.y;
53
+ const p1 = round > 0 || length !== 0 ? { x, y } : cursor;
54
+ var length = Math.sqrt((next.x - cursor.x) * (next.x - cursor.x) + (next.y - cursor.y) * (next.y - cursor.y));
55
+ theta = length !== 0 ? Math.atan2(next.x - cursor.x, next.y - cursor.y) : 0;
56
+ x = Math.sin(theta) * Math.min(round, length / 2) + cursor.x;
57
+ y = Math.cos(theta) * Math.min(round, length / 2) + cursor.y;
58
+ const p2 = round > 0 || length !== 0 ? { x, y } : cursor;
59
+ i == 0 ? shape.moveTo(p1.x, p1.y) : shape.lineTo(p1.x, p1.y);
60
+ round > 0 && shape.quadraticCurveTo(cursor.x, cursor.y, p2.x, p2.y);
61
+ }
62
+ return shape;
63
+ }
64
+ get minMax() {
65
+ if (!this._minMax) {
66
+ var { path } = this.component.state;
67
+ var minX;
68
+ var minY;
69
+ var maxX;
70
+ var maxY;
71
+ path.forEach((p, i) => {
72
+ if (i == 0) {
73
+ minX = maxX = p.x;
74
+ minY = maxY = p.y;
75
+ return;
76
+ }
77
+ minX = Math.min(minX, p.x);
78
+ maxX = Math.max(maxX, p.x);
79
+ minY = Math.min(minY, p.y);
80
+ maxY = Math.max(maxY, p.y);
81
+ });
82
+ this._minMax = {
83
+ minX,
84
+ minY,
85
+ maxX,
86
+ maxY
87
+ };
88
+ }
89
+ return this._minMax;
90
+ }
91
+ get cx() {
92
+ var { minX, maxX } = this.minMax;
93
+ var left = minX;
94
+ var width = maxX - minX;
95
+ var { width: parentWidth = 0 } = this.component.parent.bounds;
96
+ return left + width / 2 - parentWidth / 2;
97
+ }
98
+ get cy() {
99
+ var { minY, maxY } = this.minMax;
100
+ var top = minY;
101
+ var height = maxY - minY;
102
+ var { height: parentHeight = 0 } = this.component.parent.bounds;
103
+ return top + height / 2 - parentHeight / 2;
104
+ }
105
+ }
106
+ export default class Polygon extends Shape {
107
+ is3dish() {
108
+ return true;
109
+ }
110
+ get mutable() {
111
+ return true;
112
+ }
113
+ get pathExtendable() {
114
+ return true;
115
+ }
116
+ get path() {
117
+ return this.state.path;
118
+ }
119
+ set path(path) {
120
+ this.set('path', path);
121
+ }
122
+ contains(x, y) {
123
+ var path = this.state.path;
124
+ var result = false;
125
+ path.forEach((p, idx) => {
126
+ let j = (idx + path.length + 1) % path.length;
127
+ let x1 = p.x;
128
+ let y1 = p.y;
129
+ let x2 = path[j].x;
130
+ let y2 = path[j].y;
131
+ if (y1 > y != y2 > y && x < ((x2 - x1) * (y - y1)) / (y2 - y1) + x1)
132
+ result = !result;
133
+ });
134
+ return result;
135
+ }
136
+ get controls() {
137
+ // 폴리곤에서의 control은 새로운 path를 추가하는 포인트이다.
138
+ var path = this.path;
139
+ return path.map((p1, i) => {
140
+ let p2 = path[i + 1 >= path.length ? 0 : i + 1];
141
+ return {
142
+ x: (p1.x + p2.x) / 2,
143
+ y: (p1.y + p2.y) / 2,
144
+ handler: controlHandler
145
+ };
146
+ });
147
+ }
148
+ buildRealObject() {
149
+ return new PolygonExtrude(this);
150
+ }
151
+ get nature() {
152
+ return NATURE;
153
+ }
154
+ }
155
+ Component.memoize(Polygon.prototype, 'controls', false);
156
+ Component.register('polygon', Polygon);
157
+ //# sourceMappingURL=polygon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon.js","sourceRoot":"","sources":["../../src/components/polygon.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport * as THREE from 'three'\n\nimport {\n Component,\n ComponentNature,\n DIMENSION,\n POINT,\n POSITION,\n Properties,\n RectPath,\n Shape\n} from '@hatiolab/things-scene'\nimport RealObject from '../threed/real-object'\nimport RealObjectExtrude from '../threed/real-object-extrude'\n\nvar controlHandler = {\n ondragstart: function (point: POSITION, index: number, component: Component) {\n component.mutatePath(null, function (path: Array<DIMENSION>) {\n path.splice(index + 1, 0, point)\n })\n },\n\n ondragmove: function (point: POSITION, index: number, component: Component) {\n component.mutatePath(null, function (path: Array<DIMENSION>) {\n path[index + 1] = point\n })\n },\n\n ondragend: function (point: POSITION, index: number, component: Component) {}\n}\n\nconst NATURE: ComponentNature = {\n mutable: true,\n resizable: false,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'round',\n name: 'round',\n property: {\n min: 0,\n max: 100,\n step: 1\n }\n }\n ],\n help: 'scene/component/polygon'\n}\n\nexport class PolygonExtrude extends RealObjectExtrude {\n _minMax?: {\n minX?: number\n minY?: number\n maxX?: number\n maxY?: number\n }\n\n get shape() {\n var { path = [], round = 0 } = this.component.state\n\n var shape = new THREE.Shape()\n\n for (var i = 0; i < path.length; i++) {\n const prev = path[(i - 1 + path.length) % path.length]\n const cursor = path[(i + path.length) % path.length]\n const next = path[(i + 1) % path.length]\n\n if (prev.x === cursor.x && prev.y === cursor.y) {\n continue\n }\n\n var length = Math.sqrt((prev.x - cursor.x) * (prev.x - cursor.x) + (prev.y - cursor.y) * (prev.y - cursor.y))\n var theta = length !== 0 ? Math.atan2(prev.x - cursor.x, prev.y - cursor.y) : 0\n var x = Math.sin(theta) * Math.min(round, length / 2) + cursor.x\n var y = Math.cos(theta) * Math.min(round, length / 2) + cursor.y\n\n const p1 = round > 0 || length !== 0 ? { x, y } : cursor\n\n var length = Math.sqrt((next.x - cursor.x) * (next.x - cursor.x) + (next.y - cursor.y) * (next.y - cursor.y))\n theta = length !== 0 ? Math.atan2(next.x - cursor.x, next.y - cursor.y) : 0\n x = Math.sin(theta) * Math.min(round, length / 2) + cursor.x\n y = Math.cos(theta) * Math.min(round, length / 2) + cursor.y\n\n const p2 = round > 0 || length !== 0 ? { x, y } : cursor\n\n i == 0 ? shape.moveTo(p1.x, p1.y) : shape.lineTo(p1.x, p1.y)\n round > 0 && shape.quadraticCurveTo(cursor.x, cursor.y, p2.x, p2.y)\n }\n\n return shape\n }\n\n get minMax() {\n if (!this._minMax) {\n var { path } = this.component.state\n\n var minX: number | undefined\n var minY: number | undefined\n var maxX: number | undefined\n var maxY: number | undefined\n\n path.forEach((p: POINT, i: number) => {\n if (i == 0) {\n minX = maxX = p.x\n minY = maxY = p.y\n return\n }\n\n minX = Math.min(minX!, p.x)\n maxX = Math.max(maxX!, p.x)\n minY = Math.min(minY!, p.y)\n maxY = Math.max(maxY!, p.y)\n })\n\n this._minMax = {\n minX,\n minY,\n maxX,\n maxY\n }\n }\n\n return this._minMax\n }\n\n get cx() {\n var { minX, maxX } = this.minMax\n\n var left = minX\n var width = maxX! - minX!\n\n var { width: parentWidth = 0 } = this.component.parent.bounds\n\n return left! + width / 2 - parentWidth / 2\n }\n\n get cy() {\n var { minY, maxY } = this.minMax\n\n var top = minY\n var height = maxY! - minY!\n\n var { height: parentHeight = 0 } = this.component.parent.bounds\n\n return top! + height / 2 - parentHeight / 2\n }\n\n // raycast(raycaster, intersects) {}\n}\n\nexport default class Polygon extends Shape {\n is3dish() {\n return true\n }\n\n get mutable() {\n return true\n }\n\n get pathExtendable() {\n return true\n }\n\n get path() {\n return this.state.path\n }\n\n set path(path) {\n this.set('path', path)\n }\n\n contains(x: number, y: number) {\n var path = this.state.path as Array<DIMENSION>\n var result = false\n\n path.forEach((p, idx) => {\n let j = (idx + path.length + 1) % path.length\n\n let x1 = p.x\n let y1 = p.y\n let x2 = path[j].x\n let y2 = path[j].y\n\n if (y1 > y != y2 > y && x < ((x2 - x1) * (y - y1)) / (y2 - y1) + x1) result = !result\n })\n\n return result\n }\n\n get controls() {\n // 폴리곤에서의 control은 새로운 path를 추가하는 포인트이다.\n var path = this.path as Array<DIMENSION>\n\n return path.map((p1, i) => {\n let p2 = path[i + 1 >= path.length ? 0 : i + 1]\n\n return {\n x: (p1.x + p2.x) / 2,\n y: (p1.y + p2.y) / 2,\n handler: controlHandler\n }\n })\n }\n\n buildRealObject(): RealObject | undefined {\n return new PolygonExtrude(this)\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.memoize(Polygon.prototype, 'controls', false)\n\nComponent.register('polygon', Polygon)\n"]}
@@ -0,0 +1,18 @@
1
+ import { Component, ComponentNature, Line } from '@hatiolab/things-scene';
2
+ export default class Polyline extends Line {
3
+ _fromEnd: any;
4
+ _toEnd: any;
5
+ get pathExtendable(): boolean;
6
+ get path(): any[];
7
+ set path(path: any[]);
8
+ get controls(): {
9
+ x: any;
10
+ y: any;
11
+ handler: {
12
+ ondragstart: (point: import("@hatiolab/things-scene").DIMENSION, index: number, component: Component) => void;
13
+ ondragmove: (point: import("@hatiolab/things-scene").DIMENSION, index: number, component: Component) => void;
14
+ ondragend: (point: import("@hatiolab/things-scene").DIMENSION, index: number, component: Component) => void;
15
+ };
16
+ }[];
17
+ get nature(): ComponentNature;
18
+ }
@@ -0,0 +1,102 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { Component, Line } from '@hatiolab/things-scene';
5
+ var controlHandler = {
6
+ ondragstart: function (point, index, component) {
7
+ component.mutatePath(null, function (path) {
8
+ path.splice(index, 0, point); // array.insert(index, point) 의 의미임.
9
+ });
10
+ },
11
+ ondragmove: function (point, index, component) {
12
+ component.mutatePath(null, function (path) {
13
+ path[index] = point;
14
+ });
15
+ },
16
+ ondragend: function (point, index, component) { }
17
+ };
18
+ const NATURE = {
19
+ mutable: false,
20
+ resizable: false,
21
+ rotatable: false,
22
+ properties: [
23
+ {
24
+ type: 'number',
25
+ label: 'round',
26
+ name: 'round',
27
+ property: {
28
+ min: 0,
29
+ max: 100,
30
+ step: 1
31
+ }
32
+ }
33
+ ],
34
+ help: 'scene/component/polyline'
35
+ };
36
+ export default class Polyline extends Line {
37
+ get pathExtendable() {
38
+ return true;
39
+ }
40
+ get path() {
41
+ var _a, _b;
42
+ const { from, to } = this.state;
43
+ const { path } = this.state;
44
+ return [
45
+ ((_a = this.fromEnd) === null || _a === void 0 ? void 0 : _a.position) || (from === null || from === void 0 ? void 0 : from.position) || path[0],
46
+ ...path.slice(1, -1),
47
+ ((_b = this.toEnd) === null || _b === void 0 ? void 0 : _b.position) || (to === null || to === void 0 ? void 0 : to.position) || path[path.length - 1]
48
+ ];
49
+ }
50
+ set path(path) {
51
+ const { from, to } = this.state;
52
+ delete this._fromEnd;
53
+ delete this._toEnd;
54
+ this.set({
55
+ from: {
56
+ ...from,
57
+ position: path[0]
58
+ },
59
+ to: {
60
+ ...to,
61
+ position: path[path.length - 1]
62
+ },
63
+ path
64
+ });
65
+ }
66
+ get controls() {
67
+ // 폴리라인에서의 control은 새로운 path를 추가하는 포인트이다.
68
+ var path = this.path;
69
+ var controls = [];
70
+ for (let i = 0; i < path.length - 1; i++) {
71
+ let p1 = path[i];
72
+ let p2 = path[i + 1];
73
+ if (i == 0) {
74
+ controls.push({
75
+ x: p1.x,
76
+ y: p1.y,
77
+ handler: controlHandler
78
+ });
79
+ }
80
+ controls.push({
81
+ x: (p1.x + p2.x) / 2,
82
+ y: (p1.y + p2.y) / 2,
83
+ handler: controlHandler
84
+ });
85
+ if (i == path.length - 2) {
86
+ controls.push({
87
+ x: p2.x,
88
+ y: p2.y,
89
+ handler: controlHandler
90
+ });
91
+ }
92
+ }
93
+ return controls;
94
+ }
95
+ get nature() {
96
+ return NATURE;
97
+ }
98
+ }
99
+ /* target anchor의 움직임이 반영되지 못하므로, 일단 controls memoize를 제거함. */
100
+ // Component.memoize(Polyline.prototype, 'controls', false)
101
+ Component.register('polyline', Polyline);
102
+ //# sourceMappingURL=polyline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyline.js","sourceRoot":"","sources":["../../src/components/polyline.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport { Component, ComponentNature, Properties, Line, POSITION } from '@hatiolab/things-scene'\n\nvar controlHandler = {\n ondragstart: function (point: POSITION, index: number, component: Component) {\n component.mutatePath(null, function (path) {\n path.splice(index, 0, point) // array.insert(index, point) 의 의미임.\n })\n },\n\n ondragmove: function (point: POSITION, index: number, component: Component) {\n component.mutatePath(null, function (path) {\n path[index] = point\n })\n },\n\n ondragend: function (point: POSITION, index: number, component: Component) {}\n}\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: false,\n rotatable: false,\n properties: [\n {\n type: 'number',\n label: 'round',\n name: 'round',\n property: {\n min: 0,\n max: 100,\n step: 1\n }\n }\n ],\n help: 'scene/component/polyline'\n}\n\nexport default class Polyline extends Line {\n _fromEnd: any\n _toEnd: any\n\n get pathExtendable() {\n return true\n }\n\n get path() {\n const { from, to } = this.state\n const { path } = this.state\n\n return [\n this.fromEnd?.position || from?.position || path[0],\n ...path.slice(1, -1),\n this.toEnd?.position || to?.position || path[path.length - 1]\n ]\n }\n\n set path(path) {\n const { from, to } = this.state\n\n delete this._fromEnd\n delete this._toEnd\n\n this.set({\n from: {\n ...from,\n position: path[0]\n },\n to: {\n ...to,\n position: path[path.length - 1]\n },\n path\n })\n }\n\n get controls() {\n // 폴리라인에서의 control은 새로운 path를 추가하는 포인트이다.\n var path = this.path\n var controls = []\n\n for (let i = 0; i < path.length - 1; i++) {\n let p1 = path[i]\n let p2 = path[i + 1]\n\n if (i == 0) {\n controls.push({\n x: p1.x,\n y: p1.y,\n handler: controlHandler\n })\n }\n\n controls.push({\n x: (p1.x + p2.x) / 2,\n y: (p1.y + p2.y) / 2,\n handler: controlHandler\n })\n\n if (i == path.length - 2) {\n controls.push({\n x: p2.x,\n y: p2.y,\n handler: controlHandler\n })\n }\n }\n\n return controls\n }\n\n get nature() {\n return NATURE\n }\n}\n\n/* target anchor의 움직임이 반영되지 못하므로, 일단 controls memoize를 제거함. */\n// Component.memoize(Polyline.prototype, 'controls', false)\n\nComponent.register('polyline', Polyline)\n"]}
@@ -0,0 +1,48 @@
1
+ declare const Popup_base: {
2
+ new (): {
3
+ [x: string]: any;
4
+ contains(x: any, y: any): boolean;
5
+ path: {
6
+ x: any;
7
+ y: any;
8
+ }[];
9
+ readonly anchors: import("./anchor/anchor").Anchor[];
10
+ };
11
+ [x: string]: any;
12
+ };
13
+ export default class Popup extends Popup_base {
14
+ static get image(): any;
15
+ ready(): void;
16
+ render(context: any): void;
17
+ onchange(after: any, before: any): void;
18
+ set show(arg: any);
19
+ get show(): any;
20
+ onchangeShow(value: any): void;
21
+ set board(arg: any);
22
+ get board(): any;
23
+ set started(arg: any);
24
+ get started(): any;
25
+ set value(arg: any);
26
+ get value(): any;
27
+ get hasTextProperty(): boolean;
28
+ get nature(): {
29
+ mutable: boolean;
30
+ resizable: boolean;
31
+ rotatable: boolean;
32
+ properties: ({
33
+ type: string;
34
+ label: string;
35
+ name: string;
36
+ property?: undefined;
37
+ } | {
38
+ type: string;
39
+ label: string;
40
+ name: string;
41
+ property: {
42
+ options: string[];
43
+ };
44
+ })[];
45
+ help: string;
46
+ };
47
+ }
48
+ export {};