@hatiolab/things-scene 3.4.43 → 3.4.45

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 (338) 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 +1 -1
  335. package/schema.graphql +1 -1
  336. package/things-scene-ie.js +1 -1
  337. package/things-scene-min.js +1 -1
  338. package/things-scene.mjs +6 -2
@@ -0,0 +1,36 @@
1
+ export default class GlobalRef extends HTMLOverlayContainer {
2
+ get nature(): {
3
+ mutable: boolean;
4
+ resizable: boolean;
5
+ rotatable: boolean;
6
+ properties: ({
7
+ type: string;
8
+ label: string;
9
+ name: string;
10
+ placeholder: string;
11
+ property?: undefined;
12
+ } | {
13
+ type: string;
14
+ label: string;
15
+ name: string;
16
+ property: {
17
+ options: string[];
18
+ };
19
+ placeholder?: undefined;
20
+ })[];
21
+ 'value-property': string;
22
+ help: string;
23
+ };
24
+ get tagName(): string;
25
+ _element_bounds: {
26
+ offsetWidth: any;
27
+ offsetHeight: any;
28
+ } | undefined;
29
+ fetchRef(): Promise<void>;
30
+ __ref: any;
31
+ set ref(arg: any);
32
+ get ref(): any;
33
+ _releaseRef(): void;
34
+ onchange(after: any, before: any, hint: any): void;
35
+ }
36
+ import HTMLOverlayContainer from "./html-overlay-container";
@@ -0,0 +1,128 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import Component from './component';
5
+ import HTMLOverlayContainer from './html-overlay-container';
6
+ import { error } from '../core/logger';
7
+ const NATURE = {
8
+ mutable: false,
9
+ resizable: true,
10
+ rotatable: true,
11
+ properties: [
12
+ {
13
+ type: 'board-selector',
14
+ label: 'scene-number',
15
+ name: 'ref',
16
+ placeholder: 'SCENE-1'
17
+ },
18
+ {
19
+ type: 'select',
20
+ label: 'fit',
21
+ name: 'fit',
22
+ property: {
23
+ options: ['both', 'ratio']
24
+ }
25
+ },
26
+ {
27
+ type: 'select',
28
+ label: 'mode',
29
+ name: 'mode',
30
+ property: {
31
+ options: ['view', 'interaction']
32
+ }
33
+ }
34
+ ],
35
+ 'value-property': 'ref',
36
+ help: 'scene/component/global-ref'
37
+ };
38
+ export default class GlobalRef extends HTMLOverlayContainer {
39
+ dispose() {
40
+ this._releaseRef();
41
+ super.dispose();
42
+ }
43
+ get nature() {
44
+ return NATURE;
45
+ }
46
+ get hasTextProperty() {
47
+ return false;
48
+ }
49
+ get tagName() {
50
+ return 'div';
51
+ }
52
+ setElementProperties(element) {
53
+ var { mode = 'view' } = this.state;
54
+ if (mode == 'view') {
55
+ element.style.pointerEvents = 'none';
56
+ }
57
+ else {
58
+ element.style.pointerEvents = 'inherit';
59
+ }
60
+ }
61
+ ready() {
62
+ super.ready();
63
+ this.fetchRef();
64
+ }
65
+ reposition() {
66
+ if (!this.element)
67
+ return;
68
+ super.reposition();
69
+ /* 컴포넌트 자신의 bound가 변화했다면, reference 를 다시 맞춘다. */
70
+ let oldBounds = this._element_bounds;
71
+ let { offsetWidth, offsetHeight } = this.element;
72
+ this._element_bounds = { offsetWidth, offsetHeight };
73
+ if (oldBounds && oldBounds.offsetWidth == offsetWidth && oldBounds.offsetHeight == offsetHeight) {
74
+ return;
75
+ }
76
+ if (this.ref && this.root.target_element) {
77
+ let { fit = 'ratio' } = this.state;
78
+ this.ref.fit(fit);
79
+ }
80
+ }
81
+ async fetchRef() {
82
+ this._releaseRef();
83
+ var { ref, fit = 'ratio' } = this.state;
84
+ if (!ref)
85
+ return;
86
+ var provider = this.app.refProvider;
87
+ if (provider && ref) {
88
+ try {
89
+ this.__ref = await provider.get(ref, true);
90
+ this.__ref.target = this.element;
91
+ this.__ref.fit(fit);
92
+ this.__ref.data = this.data;
93
+ }
94
+ catch (e) {
95
+ error(e);
96
+ }
97
+ }
98
+ }
99
+ get ref() {
100
+ return this.__ref;
101
+ }
102
+ set ref(ref) {
103
+ this.setState('ref', ref);
104
+ }
105
+ _releaseRef() {
106
+ if (this.__ref && this.__ref.release) {
107
+ this.__ref.release();
108
+ }
109
+ delete this.__ref;
110
+ }
111
+ onchange(after, before, hint) {
112
+ super.onchange(after, before, hint);
113
+ 'ref' in after && this.fetchRef();
114
+ if ('fit' in after && this.ref) {
115
+ requestAnimationFrame(() => {
116
+ let { fit } = this.state;
117
+ this.ref.fit(fit);
118
+ });
119
+ }
120
+ if ('data' in after && this.ref) {
121
+ requestAnimationFrame(() => {
122
+ this.ref.data = after.data;
123
+ });
124
+ }
125
+ }
126
+ }
127
+ Component.register('global-ref', GlobalRef);
128
+ //# sourceMappingURL=global-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-ref.js","sourceRoot":"","sources":["../../src/components/global-ref.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from './component'\nimport HTMLOverlayContainer from './html-overlay-container'\nimport { error } from '../core/logger'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'board-selector',\n label: 'scene-number',\n name: 'ref',\n placeholder: 'SCENE-1'\n },\n {\n type: 'select',\n label: 'fit',\n name: 'fit',\n property: {\n options: ['both', 'ratio']\n }\n },\n {\n type: 'select',\n label: 'mode',\n name: 'mode',\n property: {\n options: ['view', 'interaction']\n }\n }\n ],\n 'value-property': 'ref',\n help: 'scene/component/global-ref'\n}\n\nexport default class GlobalRef extends HTMLOverlayContainer {\n dispose() {\n this._releaseRef()\n super.dispose()\n }\n\n get nature() {\n return NATURE\n }\n\n get hasTextProperty() {\n return false\n }\n\n get tagName() {\n return 'div'\n }\n\n setElementProperties(element) {\n var { mode = 'view' } = this.state\n\n if (mode == 'view') {\n element.style.pointerEvents = 'none'\n } else {\n element.style.pointerEvents = 'inherit'\n }\n }\n\n ready() {\n super.ready()\n this.fetchRef()\n }\n\n reposition() {\n if (!this.element) return\n\n super.reposition()\n\n /* 컴포넌트 자신의 bound가 변화했다면, reference 를 다시 맞춘다. */\n let oldBounds = this._element_bounds\n let { offsetWidth, offsetHeight } = this.element\n this._element_bounds = { offsetWidth, offsetHeight }\n\n if (oldBounds && oldBounds.offsetWidth == offsetWidth && oldBounds.offsetHeight == offsetHeight) {\n return\n }\n\n if (this.ref && this.root.target_element) {\n let { fit = 'ratio' } = this.state\n\n this.ref.fit(fit)\n }\n }\n\n async fetchRef() {\n this._releaseRef()\n\n var { ref, fit = 'ratio' } = this.state\n\n if (!ref) return\n\n var provider = this.app.refProvider\n\n if (provider && ref) {\n try {\n this.__ref = await provider.get(ref, true)\n this.__ref.target = this.element\n this.__ref.fit(fit)\n this.__ref.data = this.data\n } catch (e) {\n error(e)\n }\n }\n }\n\n get ref() {\n return this.__ref\n }\n\n set ref(ref) {\n this.setState('ref', ref)\n }\n\n _releaseRef() {\n if (this.__ref && this.__ref.release) {\n this.__ref.release()\n }\n delete this.__ref\n }\n\n onchange(after, before, hint) {\n super.onchange(after, before, hint)\n\n 'ref' in after && this.fetchRef()\n if ('fit' in after && this.ref) {\n requestAnimationFrame(() => {\n let { fit } = this.state\n this.ref.fit(fit)\n })\n }\n\n if ('data' in after && this.ref) {\n requestAnimationFrame(() => {\n this.ref.data = after.data\n })\n }\n }\n}\n\nComponent.register('global-ref', GlobalRef)\n"]}
@@ -0,0 +1,15 @@
1
+ export default class Group extends Container {
2
+ isGroup(): boolean;
3
+ get(property: any): any;
4
+ set(props: any, propval: any): any;
5
+ capture(x: any, y: any, except: any): any;
6
+ set bounds(arg: any);
7
+ get bounds(): any;
8
+ path: any;
9
+ get focusible(): boolean;
10
+ calculateBounds(): void;
11
+ __MUTATING__: boolean | undefined;
12
+ render(context: any): void;
13
+ postrender(context: any): void;
14
+ }
15
+ import Container from "../components/container";
@@ -0,0 +1,145 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import Container from '../components/container';
5
+ import Component from './component';
6
+ const GROUP_PROPS = ['refid', 'left', 'top', 'width', 'height', 'rotation', 'animation'];
7
+ export default class Group extends Container {
8
+ isGroup() {
9
+ return true;
10
+ }
11
+ /*
12
+ * 컴포넌트의 모델 속성값을 가져오는 메쏘드.
13
+ */
14
+ get(property) {
15
+ return this._model[property];
16
+ }
17
+ /*
18
+ * 컴포넌트의 모델 속성값을 바꾸는 메쏘드. 그룹은 5개의 속성만을 가진다.
19
+ *
20
+ * - 하나의 속성을 변경하는 경우.
21
+ * component.set('top', 10)
22
+ * - 여러개의 속성을 변경하는 경우.
23
+ * component.set({top:10, left:50})
24
+ */
25
+ set(props, propval) {
26
+ if (typeof props === 'string')
27
+ return this.set({ [props]: propval });
28
+ var filtered = GROUP_PROPS.reduce((filtered, prop) => {
29
+ if (props.hasOwnProperty(prop))
30
+ filtered[prop] = props[prop];
31
+ return filtered;
32
+ }, {});
33
+ return super.set(filtered);
34
+ }
35
+ capture(x, y, except) {
36
+ var captured = super.capture(x, y, except);
37
+ // 그룹 자신은 capture를 받을 수 없다.
38
+ if (captured === this)
39
+ return;
40
+ return captured;
41
+ }
42
+ set bounds(bounds) {
43
+ if (this.__MUTATING__) {
44
+ super.bounds = bounds;
45
+ return;
46
+ }
47
+ // 1. left, top의 변화만큼 translate 한다.
48
+ var old_bounds = this.bounds;
49
+ // 2. width, height의 변화비율을 scale-x, scale-y 에 보관한다.
50
+ var scale = {
51
+ x: bounds.width / old_bounds.width,
52
+ y: bounds.height / old_bounds.height
53
+ };
54
+ // 3. 기존 포인트들을 기존 거리에 scale-x, scale-y 만큼 조정된 위치로 새로운 bounds의 left-top으로부터 설정한다.
55
+ this.path = this.path.map(point => {
56
+ return {
57
+ x: bounds.left + (point.x - old_bounds.left) * scale.x,
58
+ y: bounds.top + (point.y - old_bounds.top) * scale.y
59
+ };
60
+ });
61
+ // 4. PATH스타일(mutable)의 도형은 mutatePath를 사용하고,
62
+ // Bounds 스타일 도형은 기존 포인트들을 기존 거리에 scale-x, scale-y 만큼 조정된 center 위치로부터
63
+ // 새로운 bounds를 설정한다.
64
+ this.components &&
65
+ this.components.forEach(comp => {
66
+ if (comp.mutable) {
67
+ comp.mutatePath(null, function (path_in_parent) {
68
+ return path_in_parent.map(function (point) {
69
+ return {
70
+ x: point.x * scale.x,
71
+ y: point.y * scale.y
72
+ };
73
+ });
74
+ });
75
+ }
76
+ else {
77
+ let bounds = comp.bounds;
78
+ let center = comp.center;
79
+ let delta_center = {
80
+ x: center.x * (1 - scale.x),
81
+ y: center.y * (1 - scale.y)
82
+ };
83
+ let delta_width = bounds.width * (1 - scale.x);
84
+ let delta_height = bounds.height * (1 - scale.y);
85
+ let delta_left = -(delta_center.x - delta_width / 2);
86
+ let delta_top = -(delta_center.y - delta_height / 2);
87
+ comp.bounds = {
88
+ left: bounds.left + delta_left,
89
+ top: bounds.top + delta_top,
90
+ width: bounds.width * scale.x,
91
+ height: bounds.height * scale.y
92
+ };
93
+ }
94
+ });
95
+ }
96
+ get focusible() {
97
+ return false;
98
+ }
99
+ get bounds() {
100
+ return super.bounds;
101
+ }
102
+ get hasTextProperty() {
103
+ return false;
104
+ }
105
+ calculateBounds() {
106
+ this.clearCache();
107
+ this.__MUTATING__ = true;
108
+ this.mutateBounds(function (bounds) {
109
+ var union = Component.union(this.components.map(component => {
110
+ return component.bounds;
111
+ }));
112
+ this.components.forEach(component => {
113
+ let cbounds = component.bounds;
114
+ component.bounds = {
115
+ left: cbounds.left - union.left,
116
+ top: cbounds.top - union.top,
117
+ width: cbounds.width,
118
+ height: cbounds.height
119
+ };
120
+ });
121
+ return {
122
+ left: bounds.left + union.left,
123
+ top: bounds.top + union.top,
124
+ width: union.width,
125
+ height: union.height
126
+ };
127
+ }, this);
128
+ this.__MUTATING__ = false;
129
+ if (this.parent.isGroup())
130
+ this.parent.calculateBounds();
131
+ }
132
+ /* 그룹은 자체적으로는 아무것도 그리지 않는다. */
133
+ render(context) { }
134
+ postrender(context) {
135
+ /* 자식 컴포넌트들 그리기 */
136
+ var { top, left, scale } = this.state;
137
+ context.translate(left, top);
138
+ this.layout.drawables(this).forEach(m => {
139
+ m.draw(context);
140
+ });
141
+ context.translate(-left, -top);
142
+ }
143
+ }
144
+ Component.register('group', Group);
145
+ //# sourceMappingURL=group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../src/components/group.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Container from '../components/container'\nimport Component from './component'\n\nconst GROUP_PROPS = ['refid', 'left', 'top', 'width', 'height', 'rotation', 'animation']\n\nexport default class Group extends Container {\n isGroup() {\n return true\n }\n\n /*\n * 컴포넌트의 모델 속성값을 가져오는 메쏘드.\n */\n get(property) {\n return this._model[property]\n }\n\n /*\n * 컴포넌트의 모델 속성값을 바꾸는 메쏘드. 그룹은 5개의 속성만을 가진다.\n *\n * - 하나의 속성을 변경하는 경우.\n * component.set('top', 10)\n * - 여러개의 속성을 변경하는 경우.\n * component.set({top:10, left:50})\n */\n\n set(props, propval) {\n if (typeof props === 'string') return this.set({ [props]: propval })\n\n var filtered = GROUP_PROPS.reduce((filtered, prop) => {\n if (props.hasOwnProperty(prop)) filtered[prop] = props[prop]\n return filtered\n }, {})\n\n return super.set(filtered)\n }\n\n capture(x, y, except) {\n var captured = super.capture(x, y, except)\n\n // 그룹 자신은 capture를 받을 수 없다.\n if (captured === this) return\n\n return captured\n }\n\n set bounds(bounds) {\n if (this.__MUTATING__) {\n super.bounds = bounds\n return\n }\n\n // 1. left, top의 변화만큼 translate 한다.\n\n var old_bounds = this.bounds\n\n // 2. width, height의 변화비율을 scale-x, scale-y 에 보관한다.\n\n var scale = {\n x: bounds.width / old_bounds.width,\n y: bounds.height / old_bounds.height\n }\n\n // 3. 기존 포인트들을 기존 거리에 scale-x, scale-y 만큼 조정된 위치로 새로운 bounds의 left-top으로부터 설정한다.\n\n this.path = this.path.map(point => {\n return {\n x: bounds.left + (point.x - old_bounds.left) * scale.x,\n y: bounds.top + (point.y - old_bounds.top) * scale.y\n }\n })\n\n // 4. PATH스타일(mutable)의 도형은 mutatePath를 사용하고,\n // Bounds 스타일 도형은 기존 포인트들을 기존 거리에 scale-x, scale-y 만큼 조정된 center 위치로부터\n // 새로운 bounds를 설정한다.\n\n this.components &&\n this.components.forEach(comp => {\n if (comp.mutable) {\n comp.mutatePath(null, function (path_in_parent) {\n return path_in_parent.map(function (point) {\n return {\n x: point.x * scale.x,\n y: point.y * scale.y\n }\n })\n })\n } else {\n let bounds = comp.bounds\n let center = comp.center\n\n let delta_center = {\n x: center.x * (1 - scale.x),\n y: center.y * (1 - scale.y)\n }\n\n let delta_width = bounds.width * (1 - scale.x)\n let delta_height = bounds.height * (1 - scale.y)\n\n let delta_left = -(delta_center.x - delta_width / 2)\n let delta_top = -(delta_center.y - delta_height / 2)\n\n comp.bounds = {\n left: bounds.left + delta_left,\n top: bounds.top + delta_top,\n width: bounds.width * scale.x,\n height: bounds.height * scale.y\n }\n }\n })\n }\n\n get focusible() {\n return false\n }\n\n get bounds() {\n return super.bounds\n }\n\n get hasTextProperty() {\n return false\n }\n\n calculateBounds() {\n this.clearCache()\n\n this.__MUTATING__ = true\n\n this.mutateBounds(function (bounds) {\n var union = Component.union(\n this.components.map(component => {\n return component.bounds\n })\n )\n\n this.components.forEach(component => {\n let cbounds = component.bounds\n\n component.bounds = {\n left: cbounds.left - union.left,\n top: cbounds.top - union.top,\n width: cbounds.width,\n height: cbounds.height\n }\n })\n\n return {\n left: bounds.left + union.left,\n top: bounds.top + union.top,\n width: union.width,\n height: union.height\n }\n }, this)\n\n this.__MUTATING__ = false\n\n if (this.parent.isGroup()) this.parent.calculateBounds()\n }\n\n /* 그룹은 자체적으로는 아무것도 그리지 않는다. */\n\n render(context) {}\n\n postrender(context) {\n /* 자식 컴포넌트들 그리기 */\n var { top, left, scale } = this.state\n context.translate(left, top)\n\n this.layout.drawables(this).forEach(m => {\n m.draw(context)\n })\n\n context.translate(-left, -top)\n }\n}\n\nComponent.register('group', Group)\n"]}
@@ -0,0 +1,2 @@
1
+ export const createCanvas: any;
2
+ export const createElement: any;
@@ -0,0 +1 @@
1
+ export default function fill(component: any): void;
@@ -0,0 +1 @@
1
+ export default function reposition(component: any): void;
@@ -0,0 +1 @@
1
+ export default function shadow(component: any): void;
@@ -0,0 +1,27 @@
1
+ declare const HTMLOverlayContainer_base: {
2
+ new (): {
3
+ [x: string]: any;
4
+ isHTMLElement(): boolean;
5
+ isShadowable(): boolean;
6
+ element: any;
7
+ _element: any;
8
+ readonly tagName: any;
9
+ setElementProperties(element: any): void;
10
+ createElement(): void;
11
+ userInputEventHandler(e: any): void;
12
+ reposition(): void;
13
+ disposeElement(): void;
14
+ ready(): void;
15
+ dispose(): void;
16
+ readonly hasTextProperty: boolean;
17
+ readonly textHidden: boolean;
18
+ onchange(after: any, before: any): void;
19
+ isDescendible(container: any): any;
20
+ };
21
+ [x: string]: any;
22
+ };
23
+ export default class HTMLOverlayContainer extends HTMLOverlayContainer_base {
24
+ render(context: any): void;
25
+ get layout(): any;
26
+ }
27
+ export {};
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import ContainerAbstract from './container-abstract';
5
+ import MixinHTMLElement from './mixins/html-element';
6
+ import { Layout, HTMLAbsoluteLayout } from '../layout';
7
+ export default class HTMLOverlayContainer extends MixinHTMLElement(ContainerAbstract) {
8
+ /* render .. */
9
+ render(context) { }
10
+ get layout() {
11
+ return Layout.get(this.get('layout')) || HTMLAbsoluteLayout;
12
+ }
13
+ }
14
+ //# sourceMappingURL=html-overlay-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-overlay-container.js","sourceRoot":"","sources":["../../src/components/html-overlay-container.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,iBAAiB,MAAM,sBAAsB,CAAA;AACpD,OAAO,gBAAgB,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAEtD,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,gBAAgB,CAAC,iBAAiB,CAAC;IACnF,eAAe;IAEf,MAAM,CAAC,OAAO,IAAG,CAAC;IAElB,IAAI,MAAM;QACR,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,kBAAkB,CAAA;IAC7D,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport ContainerAbstract from './container-abstract'\nimport MixinHTMLElement from './mixins/html-element'\nimport { Layout, HTMLAbsoluteLayout } from '../layout'\n\nexport default class HTMLOverlayContainer extends MixinHTMLElement(ContainerAbstract) {\n /* render .. */\n\n render(context) {}\n\n get layout() {\n return Layout.get(this.get('layout')) || HTMLAbsoluteLayout\n }\n}\n"]}
@@ -0,0 +1,25 @@
1
+ declare const HTMLOverlayElement_base: {
2
+ new (): {
3
+ [x: string]: any;
4
+ isHTMLElement(): boolean;
5
+ isShadowable(): boolean;
6
+ element: any;
7
+ _element: any;
8
+ readonly tagName: any;
9
+ setElementProperties(element: any): void;
10
+ createElement(): void;
11
+ userInputEventHandler(e: any): void;
12
+ reposition(): void;
13
+ disposeElement(): void;
14
+ ready(): void;
15
+ dispose(): void;
16
+ readonly hasTextProperty: boolean;
17
+ readonly textHidden: boolean;
18
+ onchange(after: any, before: any): void;
19
+ isDescendible(container: any): any;
20
+ };
21
+ [x: string]: any;
22
+ };
23
+ export default class HTMLOverlayElement extends HTMLOverlayElement_base {
24
+ }
25
+ export {};
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import Component from './component';
5
+ import RectPath from './mixins/rect-path';
6
+ import MixinHTMLElement from './mixins/html-element';
7
+ export default class HTMLOverlayElement extends MixinHTMLElement(RectPath(Component)) {
8
+ }
9
+ //# sourceMappingURL=html-overlay-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-overlay-element.js","sourceRoot":"","sources":["../../src/components/html-overlay-element.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AACzC,OAAO,gBAAgB,MAAM,uBAAuB,CAAA;AAEpD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;CAAG","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from './component'\nimport RectPath from './mixins/rect-path'\nimport MixinHTMLElement from './mixins/html-element'\n\nexport default class HTMLOverlayElement extends MixinHTMLElement(RectPath(Component)) {}\n"]}
@@ -0,0 +1,19 @@
1
+ import { ComponentNature, Properties, Shape } from '@hatiolab/things-scene';
2
+ declare const ImageView_base: typeof Shape;
3
+ export default class ImageView extends ImageView_base {
4
+ static NOIMAGE?: any;
5
+ static get noimage(): any;
6
+ _offcanvas?: HTMLCanvasElement;
7
+ _image?: any;
8
+ dispose(): void;
9
+ render(ctx: CanvasRenderingContext2D): void;
10
+ get nature(): ComponentNature;
11
+ get hasTextProperty(): boolean;
12
+ ready(): void;
13
+ prepare(resolve: (ret?: any) => void, reject: (e?: any) => void): void;
14
+ get src(): any;
15
+ set src(src: any);
16
+ onchange(after: Properties, before: Properties): void;
17
+ ondropfile(transfered: DataTransferItemList, files: FileList): void;
18
+ }
19
+ export {};
@@ -0,0 +1,180 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { error, Component, RectPath, Shape } from '@hatiolab/things-scene';
5
+ const NATURE = {
6
+ mutable: false,
7
+ resizable: true,
8
+ rotatable: true,
9
+ properties: [
10
+ {
11
+ type: 'image-selector',
12
+ label: 'image-src',
13
+ name: 'src',
14
+ property: {
15
+ displayField: 'id',
16
+ displayFullUrl: true,
17
+ baseUrlAlias: '$base_url',
18
+ defaultStorage: 'scene-image',
19
+ storageFilters: {
20
+ type: Array,
21
+ value: [
22
+ {
23
+ name: 'category',
24
+ value: 'image'
25
+ }
26
+ ]
27
+ },
28
+ useUpload: true
29
+ }
30
+ },
31
+ {
32
+ type: 'select',
33
+ label: 'cross-origin',
34
+ name: 'crossOrigin',
35
+ property: {
36
+ options: ['', 'anonymous', 'use-credentials']
37
+ }
38
+ }
39
+ ],
40
+ 'value-property': 'src',
41
+ help: 'scene/component/image-view'
42
+ };
43
+ const NOIMAGE_DATA_URI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABIBAMAAAD7Se1QAAAAIVBMVEUAAABHcEwBAQEREREBAQEEBAQGBgYLCwsDAwMDAwMICAi6HF9tAAAAC3RSTlNNAEAERiMYCS41Eac10lYAAAEgSURBVHhe7dY9asQwEAXgh7DNertNiJy48pIitY3SB7bYdk0ukL1BDDmA9gZecoH4pmFQ3MQayUMguPBrNPD4wD9TCMvJmt3M/AtYwXOlXiWgqADVCUBD46MAnGhMBaCiUQmAm8VA/Eh/eWl9Fn5WcxD+OLuRrUYJDKLluwH2InACUgkoACSdADxQc50Bytadb9RkM0CT13TcvlCT1HFg8UTHvasuUVACCa3El6u2UdD8LFTlKhUFFgA+d3dj10aABkUN72N3jAADCrJq7PIIsPidcxBoTHIIAjMFmyCwmGYIAA1P9gFgfCANAOsDSccCDW+uLDB+kLGg94OkZoAGkwsDDAe2DOg5oPxAg03rBR88OHpBz4N8UVeHFSwma74BTW6Ge4rIRa4AAAAASUVORK5CYII=';
44
+ export default class ImageView extends RectPath(Shape) {
45
+ static get noimage() {
46
+ if (!ImageView.NOIMAGE) {
47
+ ImageView.NOIMAGE = new Image();
48
+ ImageView.NOIMAGE.src = NOIMAGE_DATA_URI;
49
+ }
50
+ return ImageView.NOIMAGE;
51
+ }
52
+ dispose() {
53
+ super.dispose();
54
+ delete this._offcanvas;
55
+ delete this._image;
56
+ }
57
+ render(ctx) {
58
+ var { left, top, width, height, isGray = false, alpha = 1, src } = this.state;
59
+ this.prepareIf(!this._image && src);
60
+ // 박스 그리기
61
+ ctx.beginPath();
62
+ ctx.globalAlpha *= alpha;
63
+ if (this._image && this._image.complete) {
64
+ if (isGray && this._offcanvas) {
65
+ ctx.drawImage(this._offcanvas, left, top, width, height);
66
+ }
67
+ else {
68
+ try {
69
+ ctx.drawImage(this._image, left, top, width, height);
70
+ }
71
+ catch (e) {
72
+ ctx.drawImage(ImageView.noimage, left, top, width, height);
73
+ }
74
+ }
75
+ }
76
+ else {
77
+ !this.app.isViewMode && ctx.drawImage(ImageView.noimage, left, top, width, height);
78
+ }
79
+ }
80
+ get nature() {
81
+ return NATURE;
82
+ }
83
+ get hasTextProperty() {
84
+ return false;
85
+ }
86
+ ready() {
87
+ super.ready();
88
+ this.prepareIf(!this._image && this.state.src);
89
+ }
90
+ prepare(resolve, reject) {
91
+ var { src, crossOrigin } = this.state;
92
+ if (!src) {
93
+ resolve(this);
94
+ return;
95
+ }
96
+ this._image = new Image();
97
+ try {
98
+ if (crossOrigin) {
99
+ this._image.crossOrigin = crossOrigin;
100
+ }
101
+ this._image.src = this.app.url(src) || '';
102
+ }
103
+ catch (e) {
104
+ reject(e);
105
+ return;
106
+ }
107
+ this._image.onload = () => {
108
+ if (this.get('isGray')) {
109
+ let width = this._image.width;
110
+ let height = this._image.height;
111
+ this._offcanvas = Component.createCanvas(width, height);
112
+ let offcontext = this._offcanvas.getContext('2d');
113
+ offcontext.drawImage(this._image, 0, 0);
114
+ let imageData = makeGrayImage(offcontext, width, height);
115
+ offcontext.putImageData(imageData, 0, 0);
116
+ }
117
+ resolve(this);
118
+ };
119
+ this._image.onerror = (e) => {
120
+ if (this._image && !this._image.currentSrc)
121
+ this._image = null;
122
+ reject(e);
123
+ };
124
+ }
125
+ get src() {
126
+ return this.get('src');
127
+ }
128
+ set src(src) {
129
+ this.set('src', src);
130
+ }
131
+ onchange(after, before) {
132
+ if (after.hasOwnProperty('src') || after.hasOwnProperty('isGray')) {
133
+ delete this._offcanvas;
134
+ delete this._image;
135
+ this.prepareIf(after.src);
136
+ }
137
+ }
138
+ ondropfile(transfered, files) {
139
+ for (let i = 0; i < transfered.length; i++) {
140
+ if (transfered[i].type.startsWith('image/')) {
141
+ this.src = files[i];
142
+ return;
143
+ }
144
+ }
145
+ }
146
+ }
147
+ function makeGrayImage(ctx, width, height) {
148
+ try {
149
+ var img = ctx.getImageData(0, 0, width, height);
150
+ }
151
+ catch (e) {
152
+ error('Get Image Data Error: ' + e.message);
153
+ return null;
154
+ }
155
+ var data = img.data;
156
+ // Loop through data.
157
+ for (let i = 0; i < width * height * 4; i += 4) {
158
+ // First bytes are red bytes.
159
+ // Get red value.
160
+ let red = data[i];
161
+ // Second bytes are green bytes.
162
+ // Get green value.
163
+ let green = data[i + 1];
164
+ // Third bytes are blue bytes.
165
+ // Get blue value.
166
+ let blue = data[i + 2];
167
+ // Fourth bytes are alpha bytes
168
+ // We don't care about alpha here.
169
+ // Add the three values and divide by three.
170
+ // Make it an integer.
171
+ let gray = parseInt(String((red + green + blue) / 3));
172
+ // Assign average to red, green, and blue.
173
+ img.data[i] = gray;
174
+ img.data[i + 1] = gray;
175
+ img.data[i + 2] = gray;
176
+ }
177
+ return img;
178
+ }
179
+ Component.register('image-view', ImageView);
180
+ //# sourceMappingURL=image-view.js.map