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