@hatiolab/things-scene 9.0.0-beta.34 → 9.0.0-beta.36
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/babel.config.js +4 -3
- package/db.sqlite +0 -0
- package/dist/animation/animate.js +63 -0
- package/dist/animation/animate.js.map +1 -0
- package/dist/animation/animations/animation.js +122 -0
- package/dist/animation/animations/animation.js.map +1 -0
- package/dist/animation/animations/fade.js +28 -0
- package/dist/animation/animations/fade.js.map +1 -0
- package/dist/animation/animations/heartbeat.js +28 -0
- package/dist/animation/animations/heartbeat.js.map +1 -0
- package/dist/animation/animations/moving.js +24 -0
- package/dist/animation/animations/moving.js.map +1 -0
- package/dist/animation/animations/outline.js +47 -0
- package/dist/animation/animations/outline.js.map +1 -0
- package/dist/animation/animations/rotation.js +22 -0
- package/dist/animation/animations/rotation.js.map +1 -0
- package/dist/animation/animations/vibration.js +31 -0
- package/dist/animation/animations/vibration.js.map +1 -0
- package/dist/animation/compile.js +31 -0
- package/dist/animation/compile.js.map +1 -0
- package/dist/animation/delta.js +51 -0
- package/dist/animation/delta.js.map +1 -0
- package/dist/animation/index.js +14 -0
- package/dist/animation/index.js.map +1 -0
- package/dist/command/command-change.js +33 -0
- package/dist/command/command-change.js.map +1 -0
- package/dist/command/command-migrate.js +103 -0
- package/dist/command/command-migrate.js.map +1 -0
- package/dist/command/command.js +18 -0
- package/dist/command/command.js.map +1 -0
- package/dist/command/snapshot-commander.js +84 -0
- package/dist/command/snapshot-commander.js.map +1 -0
- package/dist/components/anchor/anchor.js +105 -0
- package/dist/components/anchor/anchor.js.map +1 -0
- package/dist/components/anchor/ellipse-anchors.js +53 -0
- package/dist/components/anchor/ellipse-anchors.js.map +1 -0
- package/dist/components/anchor/rect-anchors.js +53 -0
- package/dist/components/anchor/rect-anchors.js.map +1 -0
- package/dist/components/audio.js +154 -0
- package/dist/components/audio.js.map +1 -0
- package/dist/components/cloud.js +44 -0
- package/dist/components/cloud.js.map +1 -0
- package/dist/components/component.js +1086 -0
- package/dist/components/component.js.map +1 -0
- package/dist/components/container-abstract.js +387 -0
- package/dist/components/container-abstract.js.map +1 -0
- package/dist/components/container.js +331 -0
- package/dist/components/container.js.map +1 -0
- package/dist/components/data/data-mapping.js +82 -0
- package/dist/components/data/data-mapping.js.map +1 -0
- package/dist/components/data/data.js +166 -0
- package/dist/components/data/data.js.map +1 -0
- package/dist/components/data/evaluator.js +103 -0
- package/dist/components/data/evaluator.js.map +1 -0
- package/dist/components/donut.js +104 -0
- package/dist/components/donut.js.map +1 -0
- package/dist/components/drawer/draw-image-pendable.js +20 -0
- package/dist/components/drawer/draw-image-pendable.js.map +1 -0
- package/dist/components/drawer/effect.js +19 -0
- package/dist/components/drawer/effect.js.map +1 -0
- package/dist/components/drawer/fill.js +228 -0
- package/dist/components/drawer/fill.js.map +1 -0
- package/dist/components/drawer/format.js +115 -0
- package/dist/components/drawer/format.js.map +1 -0
- package/dist/components/drawer/line.js +191 -0
- package/dist/components/drawer/line.js.map +1 -0
- package/dist/components/drawer/stroke.js +62 -0
- package/dist/components/drawer/stroke.js.map +1 -0
- package/dist/components/drawer/text-wrapper.js +51 -0
- package/dist/components/drawer/text-wrapper.js.map +1 -0
- package/dist/components/drawer/text.js +269 -0
- package/dist/components/drawer/text.js.map +1 -0
- package/dist/components/ellipse.js +110 -0
- package/dist/components/ellipse.js.map +1 -0
- package/dist/components/file/ondropfile.js +19 -0
- package/dist/components/file/ondropfile.js.map +1 -0
- package/dist/components/fit/fit.js +137 -0
- package/dist/components/fit/fit.js.map +1 -0
- package/dist/components/geometry/transcoord.js +339 -0
- package/dist/components/geometry/transcoord.js.map +1 -0
- package/dist/components/geometry/union.js +35 -0
- package/dist/components/geometry/union.js.map +1 -0
- package/dist/components/gif-view.js +128 -0
- package/dist/components/gif-view.js.map +1 -0
- package/dist/components/global-ref.js +154 -0
- package/dist/components/global-ref.js.map +1 -0
- package/dist/components/group.js +171 -0
- package/dist/components/group.js.map +1 -0
- package/dist/components/html/elements.js +24 -0
- package/dist/components/html/elements.js.map +1 -0
- package/dist/components/html/fill.js +126 -0
- package/dist/components/html/fill.js.map +1 -0
- package/dist/components/html/reposition.js +119 -0
- package/dist/components/html/reposition.js.map +1 -0
- package/dist/components/html/shadow.js +24 -0
- package/dist/components/html/shadow.js.map +1 -0
- package/dist/components/html-overlay-container.js +27 -0
- package/dist/components/html-overlay-container.js.map +1 -0
- package/dist/components/html-overlay-element.js +22 -0
- package/dist/components/html-overlay-element.js.map +1 -0
- package/dist/components/image-view.js +193 -0
- package/dist/components/image-view.js.map +1 -0
- package/dist/components/index.js +231 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/info-window.js +416 -0
- package/dist/components/info-window.js.map +1 -0
- package/dist/components/line.js +374 -0
- package/dist/components/line.js.map +1 -0
- package/dist/components/local-ref.js +114 -0
- package/dist/components/local-ref.js.map +1 -0
- package/dist/components/mixins/connectable.js +128 -0
- package/dist/components/mixins/connectable.js.map +1 -0
- package/dist/components/mixins/data-source.js +34 -0
- package/dist/components/mixins/data-source.js.map +1 -0
- package/dist/components/mixins/html-element.js +107 -0
- package/dist/components/mixins/html-element.js.map +1 -0
- package/dist/components/mixins/move-handle.js +73 -0
- package/dist/components/mixins/move-handle.js.map +1 -0
- package/dist/components/mixins/rect-path.js +113 -0
- package/dist/components/mixins/rect-path.js.map +1 -0
- package/dist/components/mixins/value-holder.js +81 -0
- package/dist/components/mixins/value-holder.js.map +1 -0
- package/dist/components/mutater/bounds.js +68 -0
- package/dist/components/mutater/bounds.js.map +1 -0
- package/dist/components/mutater/path.js +73 -0
- package/dist/components/mutater/path.js.map +1 -0
- package/dist/components/ortholine.js +763 -0
- package/dist/components/ortholine.js.map +1 -0
- package/dist/components/outline/ellipse-outline.js +23 -0
- package/dist/components/outline/ellipse-outline.js.map +1 -0
- package/dist/components/outline/path-outline.js +48 -0
- package/dist/components/outline/path-outline.js.map +1 -0
- package/dist/components/path.js +49 -0
- package/dist/components/path.js.map +1 -0
- package/dist/components/polygon.js +91 -0
- package/dist/components/polygon.js.map +1 -0
- package/dist/components/polyline.js +114 -0
- package/dist/components/polyline.js.map +1 -0
- package/dist/components/popup.js +160 -0
- package/dist/components/popup.js.map +1 -0
- package/dist/components/rect.js +72 -0
- package/dist/components/rect.js.map +1 -0
- package/dist/components/retention/retention-manager.js +81 -0
- package/dist/components/retention/retention-manager.js.map +1 -0
- package/dist/components/root-container.js +519 -0
- package/dist/components/root-container.js.map +1 -0
- package/dist/components/ruler.js +103 -0
- package/dist/components/ruler.js.map +1 -0
- package/dist/components/shape.js +97 -0
- package/dist/components/shape.js.map +1 -0
- package/dist/components/star.js +103 -0
- package/dist/components/star.js.map +1 -0
- package/dist/components/text/substitutor.js +92 -0
- package/dist/components/text/substitutor.js.map +1 -0
- package/dist/components/text.js +21 -0
- package/dist/components/text.js.map +1 -0
- package/dist/components/triangle.js +92 -0
- package/dist/components/triangle.js.map +1 -0
- package/dist/const.js +71 -0
- package/dist/const.js.map +1 -0
- package/dist/core/collection.js +28 -0
- package/dist/core/collection.js.map +1 -0
- package/dist/core/debug.js +12 -0
- package/dist/core/debug.js.map +1 -0
- package/dist/core/deep-equals.js +112 -0
- package/dist/core/deep-equals.js.map +1 -0
- package/dist/core/dom-to-image.js +617 -0
- package/dist/core/dom-to-image.js.map +1 -0
- package/dist/core/event.js +205 -0
- package/dist/core/event.js.map +1 -0
- package/dist/core/index.js +21 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/list.js +87 -0
- package/dist/core/list.js.map +1 -0
- package/dist/core/logger.js +29 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/memoize.js +40 -0
- package/dist/core/memoize.js.map +1 -0
- package/dist/core/mixin.js +26 -0
- package/dist/core/mixin.js.map +1 -0
- package/dist/core/obj-accessor.js +26 -0
- package/dist/core/obj-accessor.js.map +1 -0
- package/dist/core/reference-map.js +147 -0
- package/dist/core/reference-map.js.map +1 -0
- package/dist/core/round-rect.js +62 -0
- package/dist/core/round-rect.js.map +1 -0
- package/dist/core/safe-round.js +10 -0
- package/dist/core/safe-round.js.map +1 -0
- package/dist/core/script-loader.js +148 -0
- package/dist/core/script-loader.js.map +1 -0
- package/dist/core/snapshot-taker.js +59 -0
- package/dist/core/snapshot-taker.js.map +1 -0
- package/dist/core/stack.js +18 -0
- package/dist/core/stack.js.map +1 -0
- package/dist/core/timecapsule.js +88 -0
- package/dist/core/timecapsule.js.map +1 -0
- package/dist/core/utils.js +309 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/decorator/anchors-decorator.js +53 -0
- package/dist/decorator/anchors-decorator.js.map +1 -0
- package/dist/decorator/bouncing-arrow-decorator.js +52 -0
- package/dist/decorator/bouncing-arrow-decorator.js.map +1 -0
- package/dist/decorator/data-spread-decorator.js +69 -0
- package/dist/decorator/data-spread-decorator.js.map +1 -0
- package/dist/decorator/decotag-decorator.js +33 -0
- package/dist/decorator/decotag-decorator.js.map +1 -0
- package/dist/decorator/index.js +31 -0
- package/dist/decorator/index.js.map +1 -0
- package/dist/decorator/link-decorator.js +66 -0
- package/dist/decorator/link-decorator.js.map +1 -0
- package/dist/effect/gradation.js +37 -0
- package/dist/effect/gradation.js.map +1 -0
- package/dist/effect/index.js +23 -0
- package/dist/effect/index.js.map +1 -0
- package/dist/effect/shadow.js +33 -0
- package/dist/effect/shadow.js.map +1 -0
- package/dist/effect/turn.js +25 -0
- package/dist/effect/turn.js.map +1 -0
- package/dist/event/event-engine.js +76 -0
- package/dist/event/event-engine.js.map +1 -0
- package/dist/event/event-pump.js +92 -0
- package/dist/event/event-pump.js.map +1 -0
- package/dist/event/event-tracker.js +97 -0
- package/dist/event/event-tracker.js.map +1 -0
- package/dist/event/index.js +21 -0
- package/dist/event/index.js.map +1 -0
- package/dist/event/ua-event-handler.js +453 -0
- package/dist/event/ua-event-handler.js.map +1 -0
- package/dist/event-map/animator-handler.js +225 -0
- package/dist/event-map/animator-handler.js.map +1 -0
- package/dist/event-map/animators/animated-icon.js +265 -0
- package/dist/event-map/animators/animated-icon.js.map +1 -0
- package/dist/event-map/animators/border-highlighting.js +476 -0
- package/dist/event-map/animators/border-highlighting.js.map +1 -0
- package/dist/event-map/animators/bouncing-arrow.js +226 -0
- package/dist/event-map/animators/bouncing-arrow.js.map +1 -0
- package/dist/event-map/event-map.js +36 -0
- package/dist/event-map/event-map.js.map +1 -0
- package/dist/event-map/index.js +20 -0
- package/dist/event-map/index.js.map +1 -0
- package/dist/event-map/move-handler.js +233 -0
- package/dist/event-map/move-handler.js.map +1 -0
- package/dist/event-map/paste-handler.js +176 -0
- package/dist/event-map/paste-handler.js.map +1 -0
- package/dist/event-map/shift-handler.js +55 -0
- package/dist/event-map/shift-handler.js.map +1 -0
- package/dist/event-map/text-editor-lite.js +276 -0
- package/dist/event-map/text-editor-lite.js.map +1 -0
- package/dist/event-map/zoom-handler.js +49 -0
- package/dist/event-map/zoom-handler.js.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/layer/action/emphasize.js +42 -0
- package/dist/layer/action/emphasize.js.map +1 -0
- package/dist/layer/action/popup.js +461 -0
- package/dist/layer/action/popup.js.map +1 -0
- package/dist/layer/action/pressed.js +31 -0
- package/dist/layer/action/pressed.js.map +1 -0
- package/dist/layer/add-layer.js +180 -0
- package/dist/layer/add-layer.js.map +1 -0
- package/dist/layer/decotag-layer.js +121 -0
- package/dist/layer/decotag-layer.js.map +1 -0
- package/dist/layer/guide-layer.js +292 -0
- package/dist/layer/guide-layer.js.map +1 -0
- package/dist/layer/index.js +70 -0
- package/dist/layer/index.js.map +1 -0
- package/dist/layer/layer.js +230 -0
- package/dist/layer/layer.js.map +1 -0
- package/dist/layer/minimap-layer.js +84 -0
- package/dist/layer/minimap-layer.js.map +1 -0
- package/dist/layer/model-layer.js +465 -0
- package/dist/layer/model-layer.js.map +1 -0
- package/dist/layer/modeler/anchor-handler.js +193 -0
- package/dist/layer/modeler/anchor-handler.js.map +1 -0
- package/dist/layer/modeler/control-handler.js +95 -0
- package/dist/layer/modeler/control-handler.js.map +1 -0
- package/dist/layer/modeler/focus-outline.js +41 -0
- package/dist/layer/modeler/focus-outline.js.map +1 -0
- package/dist/layer/modeler/group-outline.js +30 -0
- package/dist/layer/modeler/group-outline.js.map +1 -0
- package/dist/layer/modeler/index.js +56 -0
- package/dist/layer/modeler/index.js.map +1 -0
- package/dist/layer/modeler/path-handler.js +300 -0
- package/dist/layer/modeler/path-handler.js.map +1 -0
- package/dist/layer/modeler/resizer.js +333 -0
- package/dist/layer/modeler/resizer.js.map +1 -0
- package/dist/layer/modeler/rotator.js +134 -0
- package/dist/layer/modeler/rotator.js.map +1 -0
- package/dist/layer/modeling-layer.js +491 -0
- package/dist/layer/modeling-layer.js.map +1 -0
- package/dist/layer/reaction-layer.js +111 -0
- package/dist/layer/reaction-layer.js.map +1 -0
- package/dist/layer/scroll-layer.js +191 -0
- package/dist/layer/scroll-layer.js.map +1 -0
- package/dist/layer/selection/selected-finder.js +96 -0
- package/dist/layer/selection/selected-finder.js.map +1 -0
- package/dist/layer/selection-layer.js +373 -0
- package/dist/layer/selection-layer.js.map +1 -0
- package/dist/layer/shift-layer.js +83 -0
- package/dist/layer/shift-layer.js.map +1 -0
- package/dist/layout/absolute.js +30 -0
- package/dist/layout/absolute.js.map +1 -0
- package/dist/layout/card.js +52 -0
- package/dist/layout/card.js.map +1 -0
- package/dist/layout/html-absolute.js +32 -0
- package/dist/layout/html-absolute.js.map +1 -0
- package/dist/layout/index.js +56 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/layout.js +36 -0
- package/dist/layout/layout.js.map +1 -0
- package/dist/layout/linear-horizontal.js +56 -0
- package/dist/layout/linear-horizontal.js.map +1 -0
- package/dist/layout/linear-vertical.js +56 -0
- package/dist/layout/linear-vertical.js.map +1 -0
- package/dist/layout/table.js +106 -0
- package/dist/layout/table.js.map +1 -0
- package/dist/license/license.js +170 -0
- package/dist/license/license.js.map +1 -0
- package/dist/model/compile.js +40 -0
- package/dist/model/compile.js.map +1 -0
- package/dist/model/duplicate.js +19 -0
- package/dist/model/duplicate.js.map +1 -0
- package/dist/model/index.js +34 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/selector.js +104 -0
- package/dist/model/selector.js.map +1 -0
- package/dist/style/compile.js +14 -0
- package/dist/style/compile.js.map +1 -0
- package/dist/style/index.js +14 -0
- package/dist/style/index.js.map +1 -0
- package/dist/things-scene/api/add-start.js +18 -0
- package/dist/things-scene/api/add-start.js.map +1 -0
- package/dist/things-scene/api/add.js +71 -0
- package/dist/things-scene/api/add.js.map +1 -0
- package/dist/things-scene/api/align.js +116 -0
- package/dist/things-scene/api/align.js.map +1 -0
- package/dist/things-scene/api/center-to.js +50 -0
- package/dist/things-scene/api/center-to.js.map +1 -0
- package/dist/things-scene/api/change.js +27 -0
- package/dist/things-scene/api/change.js.map +1 -0
- package/dist/things-scene/api/clipboard.js +45 -0
- package/dist/things-scene/api/clipboard.js.map +1 -0
- package/dist/things-scene/api/distribute.js +57 -0
- package/dist/things-scene/api/distribute.js.map +1 -0
- package/dist/things-scene/api/duplicate.js +47 -0
- package/dist/things-scene/api/duplicate.js.map +1 -0
- package/dist/things-scene/api/fullscreen.js +26 -0
- package/dist/things-scene/api/fullscreen.js.map +1 -0
- package/dist/things-scene/api/group.js +91 -0
- package/dist/things-scene/api/group.js.map +1 -0
- package/dist/things-scene/api/ids.js +28 -0
- package/dist/things-scene/api/ids.js.map +1 -0
- package/dist/things-scene/api/index.js +192 -0
- package/dist/things-scene/api/index.js.map +1 -0
- package/dist/things-scene/api/listener.js +69 -0
- package/dist/things-scene/api/listener.js.map +1 -0
- package/dist/things-scene/api/paste-start.js +27 -0
- package/dist/things-scene/api/paste-start.js.map +1 -0
- package/dist/things-scene/api/place.js +98 -0
- package/dist/things-scene/api/place.js.map +1 -0
- package/dist/things-scene/api/remove.js +57 -0
- package/dist/things-scene/api/remove.js.map +1 -0
- package/dist/things-scene/api/symmetry.js +47 -0
- package/dist/things-scene/api/symmetry.js.map +1 -0
- package/dist/things-scene/api/to-data-url.js +76 -0
- package/dist/things-scene/api/to-data-url.js.map +1 -0
- package/dist/things-scene/api/zorder.js +68 -0
- package/dist/things-scene/api/zorder.js.map +1 -0
- package/dist/things-scene/application-context.js +168 -0
- package/dist/things-scene/application-context.js.map +1 -0
- package/dist/things-scene/config.js +18 -0
- package/dist/things-scene/config.js.map +1 -0
- package/dist/things-scene/create.js +67 -0
- package/dist/things-scene/create.js.map +1 -0
- package/dist/things-scene/fps.js +26 -0
- package/dist/things-scene/fps.js.map +1 -0
- package/dist/things-scene/index.js +152 -0
- package/dist/things-scene/index.js.map +1 -0
- package/dist/things-scene/polyfill.js +111 -0
- package/dist/things-scene/polyfill.js.map +1 -0
- package/dist/things-scene/scene.js +442 -0
- package/dist/things-scene/scene.js.map +1 -0
- package/dist/things-scene/version.js +12 -0
- package/dist/things-scene/version.js.map +1 -0
- package/package.json +8 -6
- package/things-scene.d.ts +1 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _component = _interopRequireDefault(require("../components/component.js"));
|
|
8
|
+
var _infoWindow = _interopRequireDefault(require("../components/info-window.js"));
|
|
9
|
+
var _htmlAbsolute = _interopRequireDefault(require("../layout/html-absolute.js"));
|
|
10
|
+
var Emphasize = _interopRequireWildcard(require("./action/emphasize.js"));
|
|
11
|
+
var _popup = _interopRequireDefault(require("./action/popup.js"));
|
|
12
|
+
var Pressed = _interopRequireWildcard(require("./action/pressed.js"));
|
|
13
|
+
var _layer = _interopRequireDefault(require("./layer.js"));
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
/*
|
|
18
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const SCALE_DEFAULT = {
|
|
22
|
+
x: 1,
|
|
23
|
+
y: 1
|
|
24
|
+
};
|
|
25
|
+
const TRANSLATE_DEFAULT = {
|
|
26
|
+
x: 0,
|
|
27
|
+
y: 0
|
|
28
|
+
};
|
|
29
|
+
class ModelLayer extends _layer.default {
|
|
30
|
+
dispose() {
|
|
31
|
+
super.dispose();
|
|
32
|
+
delete this._canvas;
|
|
33
|
+
delete this._overlay;
|
|
34
|
+
}
|
|
35
|
+
contains(x, y) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
isRootModel() {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
get stuck() {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
get layout() {
|
|
45
|
+
/* reflow 시 하위 html-component들의 reposition을 수행하도록 함. */
|
|
46
|
+
return _htmlAbsolute.default;
|
|
47
|
+
}
|
|
48
|
+
get overlay() {
|
|
49
|
+
if (!this._overlay) {
|
|
50
|
+
var overlay = document.createElement('div');
|
|
51
|
+
overlay.style.position = 'absolute';
|
|
52
|
+
overlay.style.width = 0;
|
|
53
|
+
overlay.style.height = 0;
|
|
54
|
+
overlay.style.overflow = 'initial';
|
|
55
|
+
overlay.style['user-select'] = 'none';
|
|
56
|
+
overlay.style['transform-origin'] = 'top left';
|
|
57
|
+
this.element && this.element.appendChild(overlay);
|
|
58
|
+
this._overlay = overlay;
|
|
59
|
+
this._repositionOverlay();
|
|
60
|
+
}
|
|
61
|
+
return this._overlay;
|
|
62
|
+
}
|
|
63
|
+
createElement() {
|
|
64
|
+
var anchor = document.createElement('div');
|
|
65
|
+
anchor.style.position = 'absolute';
|
|
66
|
+
anchor.setAttribute('scene', this.state.type);
|
|
67
|
+
anchor.style['user-select'] = 'none';
|
|
68
|
+
anchor.style.overflow = 'hidden';
|
|
69
|
+
this._canvas = _component.default.createCanvas(1, 1);
|
|
70
|
+
this._canvas.style.position = 'absolute';
|
|
71
|
+
anchor.appendChild(this._canvas);
|
|
72
|
+
if (this._overlay) anchor.appendChild(this._overlay);
|
|
73
|
+
return anchor;
|
|
74
|
+
}
|
|
75
|
+
resize() {
|
|
76
|
+
if (!this.target) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
var {
|
|
80
|
+
width: modelWidth,
|
|
81
|
+
height: modelHeight,
|
|
82
|
+
fitMode
|
|
83
|
+
} = this.model;
|
|
84
|
+
if (this.root.fitMode) {
|
|
85
|
+
fitMode = this.root.fitMode;
|
|
86
|
+
} else if (!fitMode) {
|
|
87
|
+
fitMode = 'ratio';
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
var style = getComputedStyle(this.target);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
console.error(e, this.target);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
var width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth;
|
|
96
|
+
var height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight;
|
|
97
|
+
switch (fitMode) {
|
|
98
|
+
case 'both':
|
|
99
|
+
case 'ratio':
|
|
100
|
+
// width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth
|
|
101
|
+
// height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight
|
|
102
|
+
break;
|
|
103
|
+
case 'width':
|
|
104
|
+
// width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth
|
|
105
|
+
height = modelHeight * width / modelWidth;
|
|
106
|
+
break;
|
|
107
|
+
case 'height':
|
|
108
|
+
// height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight
|
|
109
|
+
width = modelWidth * height / modelHeight;
|
|
110
|
+
break;
|
|
111
|
+
case 'center':
|
|
112
|
+
case 'none':
|
|
113
|
+
default:
|
|
114
|
+
width = Math.max(modelWidth, width);
|
|
115
|
+
height = Math.max(modelHeight, height);
|
|
116
|
+
}
|
|
117
|
+
this.fitSize(this.canvas, true, width, height);
|
|
118
|
+
switch (fitMode) {
|
|
119
|
+
case 'ratio':
|
|
120
|
+
case 'both':
|
|
121
|
+
break;
|
|
122
|
+
case 'width':
|
|
123
|
+
this.element.style.overflowX = 'hidden';
|
|
124
|
+
this.element.style.overflowY = 'auto';
|
|
125
|
+
break;
|
|
126
|
+
case 'height':
|
|
127
|
+
this.element.style.overflowX = 'auto';
|
|
128
|
+
this.element.style.overflowY = 'hidden';
|
|
129
|
+
break;
|
|
130
|
+
case 'center':
|
|
131
|
+
case 'none':
|
|
132
|
+
default:
|
|
133
|
+
this.element.style.overflowX = width > modelWidth ? 'hidden' : 'auto';
|
|
134
|
+
this.element.style.overflowY = height > modelHeight ? 'hidden' : 'auto';
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* element는 항상 부모의 크기에 맞춘다. */
|
|
138
|
+
this.fitSize(this.element, true);
|
|
139
|
+
}
|
|
140
|
+
get canvas() {
|
|
141
|
+
return this._canvas;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Pixel하나가 차지하는 길이의 값 환산 */
|
|
145
|
+
get MPP() {
|
|
146
|
+
var {
|
|
147
|
+
scale = {
|
|
148
|
+
x: 1,
|
|
149
|
+
y: 1
|
|
150
|
+
},
|
|
151
|
+
unit
|
|
152
|
+
} = this.model;
|
|
153
|
+
switch (unit) {
|
|
154
|
+
case 'mm':
|
|
155
|
+
case 'cm':
|
|
156
|
+
return 1 / this.app.PPM / scale.x;
|
|
157
|
+
case 'in':
|
|
158
|
+
return 1 / this.app.PPI / scale.x;
|
|
159
|
+
case 'px':
|
|
160
|
+
default:
|
|
161
|
+
return 1 / scale.x;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/*
|
|
166
|
+
* capturePath(path) 파라미터로 주어진 path를 포함하는 컨테이너를 찾는다.
|
|
167
|
+
* @path
|
|
168
|
+
* @excepts 컨테이너를 찾을 때 제외되는 대상이다.
|
|
169
|
+
*/
|
|
170
|
+
|
|
171
|
+
capturePath(path, excepts) {
|
|
172
|
+
var capturables = this.layout.capturables(this);
|
|
173
|
+
for (let i = capturables.length - 1; i >= 0; i--) {
|
|
174
|
+
let capturable = capturables[i];
|
|
175
|
+
if (!capturable.isContainer()) continue;
|
|
176
|
+
let found = capturable.capturePath(path, excepts);
|
|
177
|
+
if (found) return found;
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
get eventMap() {
|
|
182
|
+
return {
|
|
183
|
+
'(self)': {
|
|
184
|
+
'(all)': {
|
|
185
|
+
change: this._onchanged_all,
|
|
186
|
+
mouseenter: this._onmouseenter_all,
|
|
187
|
+
mouseleave: this._onmouseleave_all,
|
|
188
|
+
click: this._onclick,
|
|
189
|
+
mousedown: this._onmousedownup,
|
|
190
|
+
mouseup: this._onmousedownup,
|
|
191
|
+
touchstart: this._onmousedownup,
|
|
192
|
+
touchend: this._onmousedownup
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
closeScene(data) {
|
|
198
|
+
requestAnimationFrame(() => this.overlay.dispatchEvent(new CustomEvent('close-scene', {
|
|
199
|
+
bubbles: true,
|
|
200
|
+
composed: true,
|
|
201
|
+
detail: data
|
|
202
|
+
})));
|
|
203
|
+
}
|
|
204
|
+
_repositionOverlay() {
|
|
205
|
+
var overlay = this._overlay;
|
|
206
|
+
if (!overlay) return;
|
|
207
|
+
var {
|
|
208
|
+
translate = TRANSLATE_DEFAULT,
|
|
209
|
+
scale = SCALE_DEFAULT,
|
|
210
|
+
rotation = 0
|
|
211
|
+
} = this.model;
|
|
212
|
+
var {
|
|
213
|
+
left,
|
|
214
|
+
top,
|
|
215
|
+
width,
|
|
216
|
+
height
|
|
217
|
+
} = this.bounds;
|
|
218
|
+
overlay.style.left = left + 'px';
|
|
219
|
+
overlay.style.top = top + 'px';
|
|
220
|
+
/*
|
|
221
|
+
* overlay가 마우스 이벤트를 받게되면, scale이 반영되지 않은 좌표로 이벤트가 발생하므로,
|
|
222
|
+
* 마우스 이벤트를 직접 받지 못하도록 크기를 0로 유지한다.
|
|
223
|
+
*/
|
|
224
|
+
// overlay.style['user-select'] = 'none';
|
|
225
|
+
// overlay.style.width = 0 + 'px';
|
|
226
|
+
// overlay.style.height = 0 + 'px';
|
|
227
|
+
|
|
228
|
+
/* CONFIRM-ME `transform: perspective(1px)` 스타일 설정은 scaling된 dom element를 좀 더 선명하게 보이도록 해준다. (Chrome 브라우저에서) */
|
|
229
|
+
overlay.style.transform = `rotate(${rotation}rad) scale(${scale.x}, ${scale.y}) perspective(1px)`;
|
|
230
|
+
overlay.style.marginLeft = `${translate.x}px`;
|
|
231
|
+
overlay.style.marginTop = `${translate.y}px`;
|
|
232
|
+
}
|
|
233
|
+
onchange(after) {
|
|
234
|
+
// Root Component는 id, class, text 속성을 가지지 않는다.
|
|
235
|
+
var model = this._model;
|
|
236
|
+
delete model.id;
|
|
237
|
+
delete model.text;
|
|
238
|
+
delete model.class;
|
|
239
|
+
this._repositionOverlay();
|
|
240
|
+
}
|
|
241
|
+
_onchanged_all(after, before, hint) {
|
|
242
|
+
this.invalidate();
|
|
243
|
+
}
|
|
244
|
+
_onmouseenter_all(event, hint) {
|
|
245
|
+
event.stopPropagation();
|
|
246
|
+
if (!this.app || this.app.isEditMode) return;
|
|
247
|
+
if (!hint) return;
|
|
248
|
+
var source = hint.origin;
|
|
249
|
+
|
|
250
|
+
// model-layer는 hover event를 처리하지 않는다.
|
|
251
|
+
if (source instanceof ModelLayer || !source.model.event || !source.model.event.hover) return;
|
|
252
|
+
if (source.hidden) return;
|
|
253
|
+
var hoverEvtModel = source.model.event.hover;
|
|
254
|
+
hoverEvtModel && this._doEventAction(hoverEvtModel, source, true, event);
|
|
255
|
+
}
|
|
256
|
+
_onmouseleave_all(event, hint) {
|
|
257
|
+
event.stopPropagation();
|
|
258
|
+
if (!hint) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
var source = hint.origin;
|
|
262
|
+
if (!this.app || this.app.isEditMode) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
var hoverEvtModel = source.model.event && source.model.event.hover;
|
|
266
|
+
hoverEvtModel && this._doEventAction(hoverEvtModel, source, false, event);
|
|
267
|
+
}
|
|
268
|
+
_onclick(event, hint) {
|
|
269
|
+
event.stopPropagation();
|
|
270
|
+
if (this.app.isEditMode) return;
|
|
271
|
+
if (!hint) return;
|
|
272
|
+
var source = hint.origin;
|
|
273
|
+
var tapEvtModel = source.model.event?.tap;
|
|
274
|
+
tapEvtModel && this._doEventAction(tapEvtModel, source, true, event);
|
|
275
|
+
}
|
|
276
|
+
_onmousedownup(event, hint) {
|
|
277
|
+
event.stopPropagation();
|
|
278
|
+
if (this.app.isEditMode) return;
|
|
279
|
+
if (!hint) return;
|
|
280
|
+
var source = hint.origin;
|
|
281
|
+
var tapEvtModel = source.model.event?.tap;
|
|
282
|
+
tapEvtModel && tapEvtModel.pressed && this._doMouseDownUpEventAction(tapEvtModel, source, event.type == 'mousedown' || event.type == 'touchstart', event);
|
|
283
|
+
}
|
|
284
|
+
_doMouseDownUpEventAction(event, component, enter, org_event) {
|
|
285
|
+
var {
|
|
286
|
+
pressed = false
|
|
287
|
+
} = event;
|
|
288
|
+
if (!pressed) {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (enter) {
|
|
292
|
+
Pressed.pressed(component);
|
|
293
|
+
} else {
|
|
294
|
+
Pressed.normalize(component);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
_doEventAction(event, component, enter, org_event) {
|
|
298
|
+
var {
|
|
299
|
+
action,
|
|
300
|
+
target,
|
|
301
|
+
value,
|
|
302
|
+
emphasize = false,
|
|
303
|
+
restore = false,
|
|
304
|
+
pressed = false,
|
|
305
|
+
options
|
|
306
|
+
} = event;
|
|
307
|
+
if (target) {
|
|
308
|
+
target = component.access(target);
|
|
309
|
+
}
|
|
310
|
+
if (value) {
|
|
311
|
+
value = component.access(value);
|
|
312
|
+
}
|
|
313
|
+
if (emphasize) {
|
|
314
|
+
if (enter) {
|
|
315
|
+
Emphasize.emphasize(component);
|
|
316
|
+
} else if (restore) {
|
|
317
|
+
Emphasize.normalize(component);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (!action) return;
|
|
321
|
+
switch (action) {
|
|
322
|
+
case 'data-toggle':
|
|
323
|
+
if (!target) return;
|
|
324
|
+
(enter || restore) && this.root.findAll(target, component).forEach(component => {
|
|
325
|
+
component.data = !component.data;
|
|
326
|
+
});
|
|
327
|
+
break;
|
|
328
|
+
case 'data-tristate':
|
|
329
|
+
if (!target) return;
|
|
330
|
+
(enter || restore) && this.root.findAll(target, component).forEach(component => {
|
|
331
|
+
let number = Math.round(Math.max(Number(component.data) || 0, 0));
|
|
332
|
+
component.data = (number + (enter ? 1 : 2)) % 3;
|
|
333
|
+
});
|
|
334
|
+
break;
|
|
335
|
+
case 'data-spreading':
|
|
336
|
+
if (!target) return;
|
|
337
|
+
if (enter) {
|
|
338
|
+
var data = component.access(value);
|
|
339
|
+
this.root.findAll(target, component).forEach(comp => {
|
|
340
|
+
comp.executeMappings(true);
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
break;
|
|
344
|
+
case 'data-set':
|
|
345
|
+
if (!target) return;
|
|
346
|
+
if (enter) {
|
|
347
|
+
var data = component.access(value);
|
|
348
|
+
this.root.findAll(target, component).forEach(comp => {
|
|
349
|
+
comp.data = data;
|
|
350
|
+
});
|
|
351
|
+
} else if (restore) {
|
|
352
|
+
// TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.
|
|
353
|
+
// data-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.
|
|
354
|
+
}
|
|
355
|
+
break;
|
|
356
|
+
case 'partial-data-set':
|
|
357
|
+
if (!target) return;
|
|
358
|
+
if (enter) {
|
|
359
|
+
var data = component.access(value);
|
|
360
|
+
this.root.findAll(target, component).forEach(comp => {
|
|
361
|
+
comp.data = {
|
|
362
|
+
...comp.data,
|
|
363
|
+
...data
|
|
364
|
+
};
|
|
365
|
+
});
|
|
366
|
+
} else if (restore) {
|
|
367
|
+
// TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.
|
|
368
|
+
// data-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.
|
|
369
|
+
}
|
|
370
|
+
break;
|
|
371
|
+
case 'value-set':
|
|
372
|
+
if (!target) return;
|
|
373
|
+
if (enter) {
|
|
374
|
+
var data = component.access(value);
|
|
375
|
+
this.root.findAll(target, component).forEach(comp => {
|
|
376
|
+
comp.value = data;
|
|
377
|
+
});
|
|
378
|
+
} else if (restore) {
|
|
379
|
+
// TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.
|
|
380
|
+
// value-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.
|
|
381
|
+
}
|
|
382
|
+
break;
|
|
383
|
+
case 'partial-value-set':
|
|
384
|
+
if (!target) return;
|
|
385
|
+
if (enter) {
|
|
386
|
+
var data = component.access(value);
|
|
387
|
+
this.root.findAll(target, component).forEach(comp => {
|
|
388
|
+
comp.value = {
|
|
389
|
+
...comp.value,
|
|
390
|
+
...data
|
|
391
|
+
};
|
|
392
|
+
});
|
|
393
|
+
} else if (restore) {
|
|
394
|
+
// TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.
|
|
395
|
+
// value-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.
|
|
396
|
+
}
|
|
397
|
+
break;
|
|
398
|
+
case 'infoWindow':
|
|
399
|
+
case 'info-window':
|
|
400
|
+
if (!target) return;
|
|
401
|
+
if (org_event.type == 'click') {
|
|
402
|
+
_infoWindow.default.show(component, target, restore /* close button */, {
|
|
403
|
+
x: org_event.offsetX,
|
|
404
|
+
y: org_event.offsetY
|
|
405
|
+
});
|
|
406
|
+
} else {
|
|
407
|
+
if (enter) {
|
|
408
|
+
_infoWindow.default.show(component, target, restore /* auto close - no close button */, {
|
|
409
|
+
x: org_event.offsetX,
|
|
410
|
+
y: org_event.offsetY
|
|
411
|
+
});
|
|
412
|
+
} else if (restore) {
|
|
413
|
+
_infoWindow.default.hide(component, target);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
break;
|
|
417
|
+
case 'toggle-info-window':
|
|
418
|
+
if (!target) return;
|
|
419
|
+
_infoWindow.default.toggle(component, target, false, {
|
|
420
|
+
x: org_event.offsetX,
|
|
421
|
+
y: org_event.offsetY
|
|
422
|
+
});
|
|
423
|
+
break;
|
|
424
|
+
case 'popup':
|
|
425
|
+
case 'modal-popup':
|
|
426
|
+
if (!target) return;
|
|
427
|
+
|
|
428
|
+
/*
|
|
429
|
+
For backward compatibility,
|
|
430
|
+
if the option is not set, it is assumed that the component's own data is input and the result output is received.
|
|
431
|
+
*/
|
|
432
|
+
let input = !options ? '(self)' : 'input' in options ? options.input : '(self)';
|
|
433
|
+
let output = !options ? true : 'output' in options ? options.output : true;
|
|
434
|
+
|
|
435
|
+
// for things-scene model version >= 1.1
|
|
436
|
+
_popup.default.show(component, target, {
|
|
437
|
+
data: input && this.root.findFirst(input, component)?.data,
|
|
438
|
+
output /* boolean - specifies whether to receive a return value from the popup or not. */,
|
|
439
|
+
modal: action === 'modal-popup'
|
|
440
|
+
});
|
|
441
|
+
break;
|
|
442
|
+
case 'close-scene':
|
|
443
|
+
this.closeScene(component.data);
|
|
444
|
+
break;
|
|
445
|
+
case 'goto':
|
|
446
|
+
case 'goto-playlist':
|
|
447
|
+
this.trigger(action, target, options, component);
|
|
448
|
+
break;
|
|
449
|
+
case 'mouse-cursor':
|
|
450
|
+
if (enter) {
|
|
451
|
+
this.target.style.cursor = target || 'auto';
|
|
452
|
+
} else if (restore) {
|
|
453
|
+
/* stack 기능은 지원되지 않는다. */
|
|
454
|
+
this.target.style.cursor = 'auto';
|
|
455
|
+
}
|
|
456
|
+
break;
|
|
457
|
+
default:
|
|
458
|
+
this.trigger(action, target, value, component);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
exports.default = ModelLayer;
|
|
463
|
+
ModelLayer.Popup = _popup.default;
|
|
464
|
+
_component.default.register('model-layer', ModelLayer);
|
|
465
|
+
//# sourceMappingURL=model-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-layer.js","names":["_component","_interopRequireDefault","require","_infoWindow","_htmlAbsolute","Emphasize","_interopRequireWildcard","_popup","Pressed","_layer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","SCALE_DEFAULT","x","y","TRANSLATE_DEFAULT","ModelLayer","Layer","dispose","_canvas","_overlay","contains","isRootModel","stuck","layout","HTMLAbsoluteLayout","overlay","document","createElement","style","position","width","height","overflow","element","appendChild","_repositionOverlay","anchor","setAttribute","state","type","Component","createCanvas","resize","target","modelWidth","modelHeight","fitMode","model","root","getComputedStyle","console","error","parseFloat","getPropertyValue","clientWidth","clientHeight","Math","max","fitSize","canvas","overflowX","overflowY","MPP","scale","unit","app","PPM","PPI","capturePath","path","excepts","capturables","length","capturable","isContainer","found","eventMap","change","_onchanged_all","mouseenter","_onmouseenter_all","mouseleave","_onmouseleave_all","click","_onclick","mousedown","_onmousedownup","mouseup","touchstart","touchend","closeScene","data","requestAnimationFrame","dispatchEvent","CustomEvent","bubbles","composed","detail","translate","rotation","left","top","bounds","transform","marginLeft","marginTop","onchange","after","_model","id","text","class","before","hint","invalidate","event","stopPropagation","isEditMode","source","origin","hover","hidden","hoverEvtModel","_doEventAction","tapEvtModel","tap","pressed","_doMouseDownUpEventAction","component","enter","org_event","normalize","action","value","emphasize","restore","options","access","findAll","forEach","number","round","Number","comp","executeMappings","InfoWindow","show","offsetX","offsetY","hide","toggle","input","output","ScenePopup","findFirst","modal","trigger","cursor","exports","Popup","register"],"sources":["../../src/layer/model-layer.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from '../components/component.js'\nimport InfoWindow from '../components/info-window.js'\nimport HTMLAbsoluteLayout from '../layout/html-absolute.js'\nimport * as Emphasize from './action/emphasize.js'\nimport ScenePopup from './action/popup.js'\nimport * as Pressed from './action/pressed.js'\nimport Layer from './layer.js'\n\nconst SCALE_DEFAULT = { x: 1, y: 1 }\nconst TRANSLATE_DEFAULT = { x: 0, y: 0 }\n\nexport default class ModelLayer extends Layer {\n dispose() {\n super.dispose()\n\n delete this._canvas\n delete this._overlay\n }\n\n contains(x, y) {\n return true\n }\n\n isRootModel() {\n return true\n }\n\n get stuck() {\n return true\n }\n\n get layout() {\n /* reflow 시 하위 html-component들의 reposition을 수행하도록 함. */\n return HTMLAbsoluteLayout\n }\n\n get overlay() {\n if (!this._overlay) {\n var overlay = document.createElement('div')\n overlay.style.position = 'absolute'\n overlay.style.width = 0\n overlay.style.height = 0\n overlay.style.overflow = 'initial'\n\n overlay.style['user-select'] = 'none'\n overlay.style['transform-origin'] = 'top left'\n\n this.element && this.element.appendChild(overlay)\n this._overlay = overlay\n this._repositionOverlay()\n }\n\n return this._overlay\n }\n\n createElement() {\n var anchor = document.createElement('div')\n anchor.style.position = 'absolute'\n anchor.setAttribute('scene', this.state.type)\n\n anchor.style['user-select'] = 'none'\n anchor.style.overflow = 'hidden'\n\n this._canvas = Component.createCanvas(1, 1)\n\n this._canvas.style.position = 'absolute'\n anchor.appendChild(this._canvas)\n\n if (this._overlay) anchor.appendChild(this._overlay)\n\n return anchor\n }\n\n resize() {\n if (!this.target) {\n return\n }\n\n var { width: modelWidth, height: modelHeight, fitMode } = this.model\n\n if (this.root.fitMode) {\n fitMode = this.root.fitMode\n } else if (!fitMode) {\n fitMode = 'ratio'\n }\n\n try {\n var style = getComputedStyle(this.target)\n } catch (e) {\n console.error(e, this.target)\n return\n }\n var width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth\n var height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight\n\n switch (fitMode) {\n case 'both':\n case 'ratio':\n // width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth\n // height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight\n break\n case 'width':\n // width = style ? parseFloat(style.getPropertyValue('width')) : this.target.clientWidth\n height = (modelHeight * width) / modelWidth\n break\n case 'height':\n // height = style ? parseFloat(style.getPropertyValue('height')) : this.target.clientHeight\n width = (modelWidth * height) / modelHeight\n break\n case 'center':\n case 'none':\n default:\n width = Math.max(modelWidth, width)\n height = Math.max(modelHeight, height)\n }\n\n this.fitSize(this.canvas, true, width, height)\n\n switch (fitMode) {\n case 'ratio':\n case 'both':\n break\n case 'width':\n this.element.style.overflowX = 'hidden'\n this.element.style.overflowY = 'auto'\n break\n case 'height':\n this.element.style.overflowX = 'auto'\n this.element.style.overflowY = 'hidden'\n break\n case 'center':\n case 'none':\n default:\n this.element.style.overflowX = width > modelWidth ? 'hidden' : 'auto'\n this.element.style.overflowY = height > modelHeight ? 'hidden' : 'auto'\n }\n\n /* element는 항상 부모의 크기에 맞춘다. */\n this.fitSize(this.element, true)\n }\n\n get canvas() {\n return this._canvas\n }\n\n /* Pixel하나가 차지하는 길이의 값 환산 */\n get MPP() {\n var { scale = { x: 1, y: 1 }, unit } = this.model\n\n switch (unit) {\n case 'mm':\n case 'cm':\n return 1 / this.app.PPM / scale.x\n case 'in':\n return 1 / this.app.PPI / scale.x\n case 'px':\n default:\n return 1 / scale.x\n }\n }\n\n /*\n * capturePath(path) 파라미터로 주어진 path를 포함하는 컨테이너를 찾는다.\n * @path\n * @excepts 컨테이너를 찾을 때 제외되는 대상이다.\n */\n\n capturePath(path, excepts) {\n var capturables = this.layout.capturables(this)\n\n for (let i = capturables.length - 1; i >= 0; i--) {\n let capturable = capturables[i]\n if (!capturable.isContainer()) continue\n\n let found = capturable.capturePath(path, excepts)\n if (found) return found\n }\n\n return false\n }\n\n get eventMap() {\n return {\n '(self)': {\n '(all)': {\n change: this._onchanged_all,\n mouseenter: this._onmouseenter_all,\n mouseleave: this._onmouseleave_all,\n click: this._onclick,\n mousedown: this._onmousedownup,\n mouseup: this._onmousedownup,\n touchstart: this._onmousedownup,\n touchend: this._onmousedownup\n }\n }\n }\n }\n\n closeScene(data) {\n requestAnimationFrame(() =>\n this.overlay.dispatchEvent(\n new CustomEvent('close-scene', {\n bubbles: true,\n composed: true,\n detail: data\n })\n )\n )\n }\n\n _repositionOverlay() {\n var overlay = this._overlay\n\n if (!overlay) return\n\n var { translate = TRANSLATE_DEFAULT, scale = SCALE_DEFAULT, rotation = 0 } = this.model\n\n var { left, top, width, height } = this.bounds\n\n overlay.style.left = left + 'px'\n overlay.style.top = top + 'px'\n /*\n * overlay가 마우스 이벤트를 받게되면, scale이 반영되지 않은 좌표로 이벤트가 발생하므로,\n * 마우스 이벤트를 직접 받지 못하도록 크기를 0로 유지한다.\n */\n // overlay.style['user-select'] = 'none';\n // overlay.style.width = 0 + 'px';\n // overlay.style.height = 0 + 'px';\n\n /* CONFIRM-ME `transform: perspective(1px)` 스타일 설정은 scaling된 dom element를 좀 더 선명하게 보이도록 해준다. (Chrome 브라우저에서) */\n overlay.style.transform = `rotate(${rotation}rad) scale(${scale.x}, ${scale.y}) perspective(1px)`\n overlay.style.marginLeft = `${translate.x}px`\n overlay.style.marginTop = `${translate.y}px`\n }\n\n onchange(after) {\n // Root Component는 id, class, text 속성을 가지지 않는다.\n var model = this._model\n\n delete model.id\n delete model.text\n delete model.class\n\n this._repositionOverlay()\n }\n\n _onchanged_all(after, before, hint) {\n this.invalidate()\n }\n\n _onmouseenter_all(event, hint) {\n event.stopPropagation()\n\n if (!this.app || this.app.isEditMode) return\n\n if (!hint) return\n\n var source = hint.origin\n\n // model-layer는 hover event를 처리하지 않는다.\n if (source instanceof ModelLayer || !source.model.event || !source.model.event.hover) return\n\n if (source.hidden) return\n\n var hoverEvtModel = source.model.event.hover\n\n hoverEvtModel && this._doEventAction(hoverEvtModel, source, true, event)\n }\n\n _onmouseleave_all(event, hint) {\n event.stopPropagation()\n\n if (!hint) {\n return\n }\n\n var source = hint.origin\n\n if (!this.app || this.app.isEditMode) {\n return\n }\n\n var hoverEvtModel = source.model.event && source.model.event.hover\n\n hoverEvtModel && this._doEventAction(hoverEvtModel, source, false, event)\n }\n\n _onclick(event, hint) {\n event.stopPropagation()\n\n if (this.app.isEditMode) return\n\n if (!hint) return\n\n var source = hint.origin\n\n var tapEvtModel = source.model.event?.tap\n\n tapEvtModel && this._doEventAction(tapEvtModel, source, true, event)\n }\n\n _onmousedownup(event, hint) {\n event.stopPropagation()\n\n if (this.app.isEditMode) return\n\n if (!hint) return\n\n var source = hint.origin\n\n var tapEvtModel = source.model.event?.tap\n\n tapEvtModel &&\n tapEvtModel.pressed &&\n this._doMouseDownUpEventAction(\n tapEvtModel,\n source,\n event.type == 'mousedown' || event.type == 'touchstart',\n event\n )\n }\n\n _doMouseDownUpEventAction(event, component, enter, org_event) {\n var { pressed = false } = event\n if (!pressed) {\n return\n }\n\n if (enter) {\n Pressed.pressed(component)\n } else {\n Pressed.normalize(component)\n }\n }\n\n _doEventAction(event, component, enter, org_event) {\n var { action, target, value, emphasize = false, restore = false, pressed = false, options } = event\n\n if (target) {\n target = component.access(target)\n }\n if (value) {\n value = component.access(value)\n }\n\n if (emphasize) {\n if (enter) {\n Emphasize.emphasize(component)\n } else if (restore) {\n Emphasize.normalize(component)\n }\n }\n\n if (!action) return\n\n switch (action) {\n case 'data-toggle':\n if (!target) return\n ;(enter || restore) &&\n this.root.findAll(target, component).forEach(component => {\n component.data = !component.data\n })\n break\n\n case 'data-tristate':\n if (!target) return\n ;(enter || restore) &&\n this.root.findAll(target, component).forEach(component => {\n let number = Math.round(Math.max(Number(component.data) || 0, 0))\n component.data = (number + (enter ? 1 : 2)) % 3\n })\n break\n\n case 'data-spreading':\n if (!target) return\n\n if (enter) {\n var data = component.access(value)\n\n this.root.findAll(target, component).forEach(comp => {\n comp.executeMappings(true)\n })\n }\n break\n\n case 'data-set':\n if (!target) return\n\n if (enter) {\n var data = component.access(value)\n\n this.root.findAll(target, component).forEach(comp => {\n comp.data = data\n })\n } else if (restore) {\n // TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.\n // data-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.\n }\n break\n\n case 'partial-data-set':\n if (!target) return\n\n if (enter) {\n var data = component.access(value)\n\n this.root.findAll(target, component).forEach(comp => {\n comp.data = { ...comp.data, ...data }\n })\n } else if (restore) {\n // TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.\n // data-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.\n }\n break\n\n case 'value-set':\n if (!target) return\n\n if (enter) {\n var data = component.access(value)\n\n this.root.findAll(target, component).forEach(comp => {\n comp.value = data\n })\n } else if (restore) {\n // TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.\n // value-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.\n }\n break\n\n case 'partial-value-set':\n if (!target) return\n\n if (enter) {\n var data = component.access(value)\n\n this.root.findAll(target, component).forEach(comp => {\n comp.value = { ...comp.value, ...data }\n })\n } else if (restore) {\n // TODO restore 설정은 leave 시점에 enter 시점의 상태로 되돌린다는 뜻이다.\n // value-set에서는 어떻게 할 것인가 ? 참고로 enter - leave 는 stack 처럼 중복될 수 있다.\n }\n break\n\n case 'infoWindow':\n case 'info-window':\n if (!target) return\n\n if (org_event.type == 'click') {\n InfoWindow.show(component, target, restore /* close button */, {\n x: org_event.offsetX,\n y: org_event.offsetY\n })\n } else {\n if (enter) {\n InfoWindow.show(component, target, restore /* auto close - no close button */, {\n x: org_event.offsetX,\n y: org_event.offsetY\n })\n } else if (restore) {\n InfoWindow.hide(component, target)\n }\n }\n break\n\n case 'toggle-info-window':\n if (!target) return\n\n InfoWindow.toggle(component, target, false, {\n x: org_event.offsetX,\n y: org_event.offsetY\n })\n break\n\n case 'popup':\n case 'modal-popup':\n if (!target) return\n\n /* \n For backward compatibility, \n if the option is not set, it is assumed that the component's own data is input and the result output is received. \n */\n let input = !options ? '(self)' : 'input' in options ? options.input : '(self)'\n let output = !options ? true : 'output' in options ? options.output : true\n\n // for things-scene model version >= 1.1\n ScenePopup.show(component, target, {\n data: input && this.root.findFirst(input, component)?.data,\n output /* boolean - specifies whether to receive a return value from the popup or not. */,\n modal: action === 'modal-popup'\n })\n break\n\n case 'close-scene':\n this.closeScene(component.data)\n break\n\n case 'goto':\n case 'goto-playlist':\n this.trigger(action, target, options, component)\n break\n\n case 'mouse-cursor':\n if (enter) {\n this.target.style.cursor = target || 'auto'\n } else if (restore) {\n /* stack 기능은 지원되지 않는다. */\n this.target.style.cursor = 'auto'\n }\n break\n\n default:\n this.trigger(action, target, value, component)\n }\n }\n}\n\nModelLayer.Popup = ScenePopup\n\nComponent.register('model-layer', ModelLayer)\n"],"mappings":";;;;;;AAIA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,aAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,SAAA,GAAAC,uBAAA,CAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,OAAA,GAAAF,uBAAA,CAAAJ,OAAA;AACA,IAAAO,MAAA,GAAAR,sBAAA,CAAAC,OAAA;AAA8B,SAAAQ,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAlB,uBAAAU,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAI,UAAA,GAAAJ,CAAA,KAAAK,OAAA,EAAAL,CAAA;AAV9B;AACA;AACA;;AAUA,MAAMmB,aAAa,GAAG;EAAEC,CAAC,EAAE,CAAC;EAAEC,CAAC,EAAE;AAAE,CAAC;AACpC,MAAMC,iBAAiB,GAAG;EAAEF,CAAC,EAAE,CAAC;EAAEC,CAAC,EAAE;AAAE,CAAC;AAEzB,MAAME,UAAU,SAASC,cAAK,CAAC;EAC5CC,OAAOA,CAAA,EAAG;IACR,KAAK,CAACA,OAAO,CAAC,CAAC;IAEf,OAAO,IAAI,CAACC,OAAO;IACnB,OAAO,IAAI,CAACC,QAAQ;EACtB;EAEAC,QAAQA,CAACR,CAAC,EAAEC,CAAC,EAAE;IACb,OAAO,IAAI;EACb;EAEAQ,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAI;EACb;EAEA,IAAIC,KAAKA,CAAA,EAAG;IACV,OAAO,IAAI;EACb;EAEA,IAAIC,MAAMA,CAAA,EAAG;IACX;IACA,OAAOC,qBAAkB;EAC3B;EAEA,IAAIC,OAAOA,CAAA,EAAG;IACZ,IAAI,CAAC,IAAI,CAACN,QAAQ,EAAE;MAClB,IAAIM,OAAO,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MAC3CF,OAAO,CAACG,KAAK,CAACC,QAAQ,GAAG,UAAU;MACnCJ,OAAO,CAACG,KAAK,CAACE,KAAK,GAAG,CAAC;MACvBL,OAAO,CAACG,KAAK,CAACG,MAAM,GAAG,CAAC;MACxBN,OAAO,CAACG,KAAK,CAACI,QAAQ,GAAG,SAAS;MAElCP,OAAO,CAACG,KAAK,CAAC,aAAa,CAAC,GAAG,MAAM;MACrCH,OAAO,CAACG,KAAK,CAAC,kBAAkB,CAAC,GAAG,UAAU;MAE9C,IAAI,CAACK,OAAO,IAAI,IAAI,CAACA,OAAO,CAACC,WAAW,CAACT,OAAO,CAAC;MACjD,IAAI,CAACN,QAAQ,GAAGM,OAAO;MACvB,IAAI,CAACU,kBAAkB,CAAC,CAAC;IAC3B;IAEA,OAAO,IAAI,CAAChB,QAAQ;EACtB;EAEAQ,aAAaA,CAAA,EAAG;IACd,IAAIS,MAAM,GAAGV,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;IAC1CS,MAAM,CAACR,KAAK,CAACC,QAAQ,GAAG,UAAU;IAClCO,MAAM,CAACC,YAAY,CAAC,OAAO,EAAE,IAAI,CAACC,KAAK,CAACC,IAAI,CAAC;IAE7CH,MAAM,CAACR,KAAK,CAAC,aAAa,CAAC,GAAG,MAAM;IACpCQ,MAAM,CAACR,KAAK,CAACI,QAAQ,GAAG,QAAQ;IAEhC,IAAI,CAACd,OAAO,GAAGsB,kBAAS,CAACC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAE3C,IAAI,CAACvB,OAAO,CAACU,KAAK,CAACC,QAAQ,GAAG,UAAU;IACxCO,MAAM,CAACF,WAAW,CAAC,IAAI,CAAChB,OAAO,CAAC;IAEhC,IAAI,IAAI,CAACC,QAAQ,EAAEiB,MAAM,CAACF,WAAW,CAAC,IAAI,CAACf,QAAQ,CAAC;IAEpD,OAAOiB,MAAM;EACf;EAEAM,MAAMA,CAAA,EAAG;IACP,IAAI,CAAC,IAAI,CAACC,MAAM,EAAE;MAChB;IACF;IAEA,IAAI;MAAEb,KAAK,EAAEc,UAAU;MAAEb,MAAM,EAAEc,WAAW;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACC,KAAK;IAEpE,IAAI,IAAI,CAACC,IAAI,CAACF,OAAO,EAAE;MACrBA,OAAO,GAAG,IAAI,CAACE,IAAI,CAACF,OAAO;IAC7B,CAAC,MAAM,IAAI,CAACA,OAAO,EAAE;MACnBA,OAAO,GAAG,OAAO;IACnB;IAEA,IAAI;MACF,IAAIlB,KAAK,GAAGqB,gBAAgB,CAAC,IAAI,CAACN,MAAM,CAAC;IAC3C,CAAC,CAAC,OAAOnD,CAAC,EAAE;MACV0D,OAAO,CAACC,KAAK,CAAC3D,CAAC,EAAE,IAAI,CAACmD,MAAM,CAAC;MAC7B;IACF;IACA,IAAIb,KAAK,GAAGF,KAAK,GAAGwB,UAAU,CAACxB,KAAK,CAACyB,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAACV,MAAM,CAACW,WAAW;IACzF,IAAIvB,MAAM,GAAGH,KAAK,GAAGwB,UAAU,CAACxB,KAAK,CAACyB,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAACV,MAAM,CAACY,YAAY;IAE5F,QAAQT,OAAO;MACb,KAAK,MAAM;MACX,KAAK,OAAO;QACV;QACA;QACA;MACF,KAAK,OAAO;QACV;QACAf,MAAM,GAAIc,WAAW,GAAGf,KAAK,GAAIc,UAAU;QAC3C;MACF,KAAK,QAAQ;QACX;QACAd,KAAK,GAAIc,UAAU,GAAGb,MAAM,GAAIc,WAAW;QAC3C;MACF,KAAK,QAAQ;MACb,KAAK,MAAM;MACX;QACEf,KAAK,GAAG0B,IAAI,CAACC,GAAG,CAACb,UAAU,EAAEd,KAAK,CAAC;QACnCC,MAAM,GAAGyB,IAAI,CAACC,GAAG,CAACZ,WAAW,EAAEd,MAAM,CAAC;IAC1C;IAEA,IAAI,CAAC2B,OAAO,CAAC,IAAI,CAACC,MAAM,EAAE,IAAI,EAAE7B,KAAK,EAAEC,MAAM,CAAC;IAE9C,QAAQe,OAAO;MACb,KAAK,OAAO;MACZ,KAAK,MAAM;QACT;MACF,KAAK,OAAO;QACV,IAAI,CAACb,OAAO,CAACL,KAAK,CAACgC,SAAS,GAAG,QAAQ;QACvC,IAAI,CAAC3B,OAAO,CAACL,KAAK,CAACiC,SAAS,GAAG,MAAM;QACrC;MACF,KAAK,QAAQ;QACX,IAAI,CAAC5B,OAAO,CAACL,KAAK,CAACgC,SAAS,GAAG,MAAM;QACrC,IAAI,CAAC3B,OAAO,CAACL,KAAK,CAACiC,SAAS,GAAG,QAAQ;QACvC;MACF,KAAK,QAAQ;MACb,KAAK,MAAM;MACX;QACE,IAAI,CAAC5B,OAAO,CAACL,KAAK,CAACgC,SAAS,GAAG9B,KAAK,GAAGc,UAAU,GAAG,QAAQ,GAAG,MAAM;QACrE,IAAI,CAACX,OAAO,CAACL,KAAK,CAACiC,SAAS,GAAG9B,MAAM,GAAGc,WAAW,GAAG,QAAQ,GAAG,MAAM;IAC3E;;IAEA;IACA,IAAI,CAACa,OAAO,CAAC,IAAI,CAACzB,OAAO,EAAE,IAAI,CAAC;EAClC;EAEA,IAAI0B,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACzC,OAAO;EACrB;;EAEA;EACA,IAAI4C,GAAGA,CAAA,EAAG;IACR,IAAI;MAAEC,KAAK,GAAG;QAAEnD,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE,CAAC;MAAEmD;IAAK,CAAC,GAAG,IAAI,CAACjB,KAAK;IAEjD,QAAQiB,IAAI;MACV,KAAK,IAAI;MACT,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,IAAI,CAACC,GAAG,CAACC,GAAG,GAAGH,KAAK,CAACnD,CAAC;MACnC,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,IAAI,CAACqD,GAAG,CAACE,GAAG,GAAGJ,KAAK,CAACnD,CAAC;MACnC,KAAK,IAAI;MACT;QACE,OAAO,CAAC,GAAGmD,KAAK,CAACnD,CAAC;IACtB;EACF;;EAEA;AACF;AACA;AACA;AACA;;EAEEwD,WAAWA,CAACC,IAAI,EAAEC,OAAO,EAAE;IACzB,IAAIC,WAAW,GAAG,IAAI,CAAChD,MAAM,CAACgD,WAAW,CAAC,IAAI,CAAC;IAE/C,KAAK,IAAI9D,CAAC,GAAG8D,WAAW,CAACC,MAAM,GAAG,CAAC,EAAE/D,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MAChD,IAAIgE,UAAU,GAAGF,WAAW,CAAC9D,CAAC,CAAC;MAC/B,IAAI,CAACgE,UAAU,CAACC,WAAW,CAAC,CAAC,EAAE;MAE/B,IAAIC,KAAK,GAAGF,UAAU,CAACL,WAAW,CAACC,IAAI,EAAEC,OAAO,CAAC;MACjD,IAAIK,KAAK,EAAE,OAAOA,KAAK;IACzB;IAEA,OAAO,KAAK;EACd;EAEA,IAAIC,QAAQA,CAAA,EAAG;IACb,OAAO;MACL,QAAQ,EAAE;QACR,OAAO,EAAE;UACPC,MAAM,EAAE,IAAI,CAACC,cAAc;UAC3BC,UAAU,EAAE,IAAI,CAACC,iBAAiB;UAClCC,UAAU,EAAE,IAAI,CAACC,iBAAiB;UAClCC,KAAK,EAAE,IAAI,CAACC,QAAQ;UACpBC,SAAS,EAAE,IAAI,CAACC,cAAc;UAC9BC,OAAO,EAAE,IAAI,CAACD,cAAc;UAC5BE,UAAU,EAAE,IAAI,CAACF,cAAc;UAC/BG,QAAQ,EAAE,IAAI,CAACH;QACjB;MACF;IACF,CAAC;EACH;EAEAI,UAAUA,CAACC,IAAI,EAAE;IACfC,qBAAqB,CAAC,MACpB,IAAI,CAACnE,OAAO,CAACoE,aAAa,CACxB,IAAIC,WAAW,CAAC,aAAa,EAAE;MAC7BC,OAAO,EAAE,IAAI;MACbC,QAAQ,EAAE,IAAI;MACdC,MAAM,EAAEN;IACV,CAAC,CACH,CACF,CAAC;EACH;EAEAxD,kBAAkBA,CAAA,EAAG;IACnB,IAAIV,OAAO,GAAG,IAAI,CAACN,QAAQ;IAE3B,IAAI,CAACM,OAAO,EAAE;IAEd,IAAI;MAAEyE,SAAS,GAAGpF,iBAAiB;MAAEiD,KAAK,GAAGpD,aAAa;MAAEwF,QAAQ,GAAG;IAAE,CAAC,GAAG,IAAI,CAACpD,KAAK;IAEvF,IAAI;MAAEqD,IAAI;MAAEC,GAAG;MAAEvE,KAAK;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACuE,MAAM;IAE9C7E,OAAO,CAACG,KAAK,CAACwE,IAAI,GAAGA,IAAI,GAAG,IAAI;IAChC3E,OAAO,CAACG,KAAK,CAACyE,GAAG,GAAGA,GAAG,GAAG,IAAI;IAC9B;AACJ;AACA;AACA;IACI;IACA;IACA;;IAEA;IACA5E,OAAO,CAACG,KAAK,CAAC2E,SAAS,GAAG,UAAUJ,QAAQ,cAAcpC,KAAK,CAACnD,CAAC,KAAKmD,KAAK,CAAClD,CAAC,oBAAoB;IACjGY,OAAO,CAACG,KAAK,CAAC4E,UAAU,GAAG,GAAGN,SAAS,CAACtF,CAAC,IAAI;IAC7Ca,OAAO,CAACG,KAAK,CAAC6E,SAAS,GAAG,GAAGP,SAAS,CAACrF,CAAC,IAAI;EAC9C;EAEA6F,QAAQA,CAACC,KAAK,EAAE;IACd;IACA,IAAI5D,KAAK,GAAG,IAAI,CAAC6D,MAAM;IAEvB,OAAO7D,KAAK,CAAC8D,EAAE;IACf,OAAO9D,KAAK,CAAC+D,IAAI;IACjB,OAAO/D,KAAK,CAACgE,KAAK;IAElB,IAAI,CAAC5E,kBAAkB,CAAC,CAAC;EAC3B;EAEA2C,cAAcA,CAAC6B,KAAK,EAAEK,MAAM,EAAEC,IAAI,EAAE;IAClC,IAAI,CAACC,UAAU,CAAC,CAAC;EACnB;EAEAlC,iBAAiBA,CAACmC,KAAK,EAAEF,IAAI,EAAE;IAC7BE,KAAK,CAACC,eAAe,CAAC,CAAC;IAEvB,IAAI,CAAC,IAAI,CAACnD,GAAG,IAAI,IAAI,CAACA,GAAG,CAACoD,UAAU,EAAE;IAEtC,IAAI,CAACJ,IAAI,EAAE;IAEX,IAAIK,MAAM,GAAGL,IAAI,CAACM,MAAM;;IAExB;IACA,IAAID,MAAM,YAAYvG,UAAU,IAAI,CAACuG,MAAM,CAACvE,KAAK,CAACoE,KAAK,IAAI,CAACG,MAAM,CAACvE,KAAK,CAACoE,KAAK,CAACK,KAAK,EAAE;IAEtF,IAAIF,MAAM,CAACG,MAAM,EAAE;IAEnB,IAAIC,aAAa,GAAGJ,MAAM,CAACvE,KAAK,CAACoE,KAAK,CAACK,KAAK;IAE5CE,aAAa,IAAI,IAAI,CAACC,cAAc,CAACD,aAAa,EAAEJ,MAAM,EAAE,IAAI,EAAEH,KAAK,CAAC;EAC1E;EAEAjC,iBAAiBA,CAACiC,KAAK,EAAEF,IAAI,EAAE;IAC7BE,KAAK,CAACC,eAAe,CAAC,CAAC;IAEvB,IAAI,CAACH,IAAI,EAAE;MACT;IACF;IAEA,IAAIK,MAAM,GAAGL,IAAI,CAACM,MAAM;IAExB,IAAI,CAAC,IAAI,CAACtD,GAAG,IAAI,IAAI,CAACA,GAAG,CAACoD,UAAU,EAAE;MACpC;IACF;IAEA,IAAIK,aAAa,GAAGJ,MAAM,CAACvE,KAAK,CAACoE,KAAK,IAAIG,MAAM,CAACvE,KAAK,CAACoE,KAAK,CAACK,KAAK;IAElEE,aAAa,IAAI,IAAI,CAACC,cAAc,CAACD,aAAa,EAAEJ,MAAM,EAAE,KAAK,EAAEH,KAAK,CAAC;EAC3E;EAEA/B,QAAQA,CAAC+B,KAAK,EAAEF,IAAI,EAAE;IACpBE,KAAK,CAACC,eAAe,CAAC,CAAC;IAEvB,IAAI,IAAI,CAACnD,GAAG,CAACoD,UAAU,EAAE;IAEzB,IAAI,CAACJ,IAAI,EAAE;IAEX,IAAIK,MAAM,GAAGL,IAAI,CAACM,MAAM;IAExB,IAAIK,WAAW,GAAGN,MAAM,CAACvE,KAAK,CAACoE,KAAK,EAAEU,GAAG;IAEzCD,WAAW,IAAI,IAAI,CAACD,cAAc,CAACC,WAAW,EAAEN,MAAM,EAAE,IAAI,EAAEH,KAAK,CAAC;EACtE;EAEA7B,cAAcA,CAAC6B,KAAK,EAAEF,IAAI,EAAE;IAC1BE,KAAK,CAACC,eAAe,CAAC,CAAC;IAEvB,IAAI,IAAI,CAACnD,GAAG,CAACoD,UAAU,EAAE;IAEzB,IAAI,CAACJ,IAAI,EAAE;IAEX,IAAIK,MAAM,GAAGL,IAAI,CAACM,MAAM;IAExB,IAAIK,WAAW,GAAGN,MAAM,CAACvE,KAAK,CAACoE,KAAK,EAAEU,GAAG;IAEzCD,WAAW,IACTA,WAAW,CAACE,OAAO,IACnB,IAAI,CAACC,yBAAyB,CAC5BH,WAAW,EACXN,MAAM,EACNH,KAAK,CAAC5E,IAAI,IAAI,WAAW,IAAI4E,KAAK,CAAC5E,IAAI,IAAI,YAAY,EACvD4E,KACF,CAAC;EACL;EAEAY,yBAAyBA,CAACZ,KAAK,EAAEa,SAAS,EAAEC,KAAK,EAAEC,SAAS,EAAE;IAC5D,IAAI;MAAEJ,OAAO,GAAG;IAAM,CAAC,GAAGX,KAAK;IAC/B,IAAI,CAACW,OAAO,EAAE;MACZ;IACF;IAEA,IAAIG,KAAK,EAAE;MACT5I,OAAO,CAACyI,OAAO,CAACE,SAAS,CAAC;IAC5B,CAAC,MAAM;MACL3I,OAAO,CAAC8I,SAAS,CAACH,SAAS,CAAC;IAC9B;EACF;EAEAL,cAAcA,CAACR,KAAK,EAAEa,SAAS,EAAEC,KAAK,EAAEC,SAAS,EAAE;IACjD,IAAI;MAAEE,MAAM;MAAEzF,MAAM;MAAE0F,KAAK;MAAEC,SAAS,GAAG,KAAK;MAAEC,OAAO,GAAG,KAAK;MAAET,OAAO,GAAG,KAAK;MAAEU;IAAQ,CAAC,GAAGrB,KAAK;IAEnG,IAAIxE,MAAM,EAAE;MACVA,MAAM,GAAGqF,SAAS,CAACS,MAAM,CAAC9F,MAAM,CAAC;IACnC;IACA,IAAI0F,KAAK,EAAE;MACTA,KAAK,GAAGL,SAAS,CAACS,MAAM,CAACJ,KAAK,CAAC;IACjC;IAEA,IAAIC,SAAS,EAAE;MACb,IAAIL,KAAK,EAAE;QACT/I,SAAS,CAACoJ,SAAS,CAACN,SAAS,CAAC;MAChC,CAAC,MAAM,IAAIO,OAAO,EAAE;QAClBrJ,SAAS,CAACiJ,SAAS,CAACH,SAAS,CAAC;MAChC;IACF;IAEA,IAAI,CAACI,MAAM,EAAE;IAEb,QAAQA,MAAM;MACZ,KAAK,aAAa;QAChB,IAAI,CAACzF,MAAM,EAAE;QACZ,CAACsF,KAAK,IAAIM,OAAO,KAChB,IAAI,CAACvF,IAAI,CAAC0F,OAAO,CAAC/F,MAAM,EAAEqF,SAAS,CAAC,CAACW,OAAO,CAACX,SAAS,IAAI;UACxDA,SAAS,CAACrC,IAAI,GAAG,CAACqC,SAAS,CAACrC,IAAI;QAClC,CAAC,CAAC;QACJ;MAEF,KAAK,eAAe;QAClB,IAAI,CAAChD,MAAM,EAAE;QACZ,CAACsF,KAAK,IAAIM,OAAO,KAChB,IAAI,CAACvF,IAAI,CAAC0F,OAAO,CAAC/F,MAAM,EAAEqF,SAAS,CAAC,CAACW,OAAO,CAACX,SAAS,IAAI;UACxD,IAAIY,MAAM,GAAGpF,IAAI,CAACqF,KAAK,CAACrF,IAAI,CAACC,GAAG,CAACqF,MAAM,CAACd,SAAS,CAACrC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;UACjEqC,SAAS,CAACrC,IAAI,GAAG,CAACiD,MAAM,IAAIX,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC,CAAC;QACJ;MAEF,KAAK,gBAAgB;QACnB,IAAI,CAACtF,MAAM,EAAE;QAEb,IAAIsF,KAAK,EAAE;UACT,IAAItC,IAAI,GAAGqC,SAAS,CAACS,MAAM,CAACJ,KAAK,CAAC;UAElC,IAAI,CAACrF,IAAI,CAAC0F,OAAO,CAAC/F,MAAM,EAAEqF,SAAS,CAAC,CAACW,OAAO,CAACI,IAAI,IAAI;YACnDA,IAAI,CAACC,eAAe,CAAC,IAAI,CAAC;UAC5B,CAAC,CAAC;QACJ;QACA;MAEF,KAAK,UAAU;QACb,IAAI,CAACrG,MAAM,EAAE;QAEb,IAAIsF,KAAK,EAAE;UACT,IAAItC,IAAI,GAAGqC,SAAS,CAACS,MAAM,CAACJ,KAAK,CAAC;UAElC,IAAI,CAACrF,IAAI,CAAC0F,OAAO,CAAC/F,MAAM,EAAEqF,SAAS,CAAC,CAACW,OAAO,CAACI,IAAI,IAAI;YACnDA,IAAI,CAACpD,IAAI,GAAGA,IAAI;UAClB,CAAC,CAAC;QACJ,CAAC,MAAM,IAAI4C,OAAO,EAAE;UAClB;UACA;QAAA;QAEF;MAEF,KAAK,kBAAkB;QACrB,IAAI,CAAC5F,MAAM,EAAE;QAEb,IAAIsF,KAAK,EAAE;UACT,IAAItC,IAAI,GAAGqC,SAAS,CAACS,MAAM,CAACJ,KAAK,CAAC;UAElC,IAAI,CAACrF,IAAI,CAAC0F,OAAO,CAAC/F,MAAM,EAAEqF,SAAS,CAAC,CAACW,OAAO,CAACI,IAAI,IAAI;YACnDA,IAAI,CAACpD,IAAI,GAAG;cAAE,GAAGoD,IAAI,CAACpD,IAAI;cAAE,GAAGA;YAAK,CAAC;UACvC,CAAC,CAAC;QACJ,CAAC,MAAM,IAAI4C,OAAO,EAAE;UAClB;UACA;QAAA;QAEF;MAEF,KAAK,WAAW;QACd,IAAI,CAAC5F,MAAM,EAAE;QAEb,IAAIsF,KAAK,EAAE;UACT,IAAItC,IAAI,GAAGqC,SAAS,CAACS,MAAM,CAACJ,KAAK,CAAC;UAElC,IAAI,CAACrF,IAAI,CAAC0F,OAAO,CAAC/F,MAAM,EAAEqF,SAAS,CAAC,CAACW,OAAO,CAACI,IAAI,IAAI;YACnDA,IAAI,CAACV,KAAK,GAAG1C,IAAI;UACnB,CAAC,CAAC;QACJ,CAAC,MAAM,IAAI4C,OAAO,EAAE;UAClB;UACA;QAAA;QAEF;MAEF,KAAK,mBAAmB;QACtB,IAAI,CAAC5F,MAAM,EAAE;QAEb,IAAIsF,KAAK,EAAE;UACT,IAAItC,IAAI,GAAGqC,SAAS,CAACS,MAAM,CAACJ,KAAK,CAAC;UAElC,IAAI,CAACrF,IAAI,CAAC0F,OAAO,CAAC/F,MAAM,EAAEqF,SAAS,CAAC,CAACW,OAAO,CAACI,IAAI,IAAI;YACnDA,IAAI,CAACV,KAAK,GAAG;cAAE,GAAGU,IAAI,CAACV,KAAK;cAAE,GAAG1C;YAAK,CAAC;UACzC,CAAC,CAAC;QACJ,CAAC,MAAM,IAAI4C,OAAO,EAAE;UAClB;UACA;QAAA;QAEF;MAEF,KAAK,YAAY;MACjB,KAAK,aAAa;QAChB,IAAI,CAAC5F,MAAM,EAAE;QAEb,IAAIuF,SAAS,CAAC3F,IAAI,IAAI,OAAO,EAAE;UAC7B0G,mBAAU,CAACC,IAAI,CAAClB,SAAS,EAAErF,MAAM,EAAE4F,OAAO,CAAC,oBAAoB;YAC7D3H,CAAC,EAAEsH,SAAS,CAACiB,OAAO;YACpBtI,CAAC,EAAEqH,SAAS,CAACkB;UACf,CAAC,CAAC;QACJ,CAAC,MAAM;UACL,IAAInB,KAAK,EAAE;YACTgB,mBAAU,CAACC,IAAI,CAAClB,SAAS,EAAErF,MAAM,EAAE4F,OAAO,CAAC,oCAAoC;cAC7E3H,CAAC,EAAEsH,SAAS,CAACiB,OAAO;cACpBtI,CAAC,EAAEqH,SAAS,CAACkB;YACf,CAAC,CAAC;UACJ,CAAC,MAAM,IAAIb,OAAO,EAAE;YAClBU,mBAAU,CAACI,IAAI,CAACrB,SAAS,EAAErF,MAAM,CAAC;UACpC;QACF;QACA;MAEF,KAAK,oBAAoB;QACvB,IAAI,CAACA,MAAM,EAAE;QAEbsG,mBAAU,CAACK,MAAM,CAACtB,SAAS,EAAErF,MAAM,EAAE,KAAK,EAAE;UAC1C/B,CAAC,EAAEsH,SAAS,CAACiB,OAAO;UACpBtI,CAAC,EAAEqH,SAAS,CAACkB;QACf,CAAC,CAAC;QACF;MAEF,KAAK,OAAO;MACZ,KAAK,aAAa;QAChB,IAAI,CAACzG,MAAM,EAAE;;QAEb;AACR;AACA;AACA;QACQ,IAAI4G,KAAK,GAAG,CAACf,OAAO,GAAG,QAAQ,GAAG,OAAO,IAAIA,OAAO,GAAGA,OAAO,CAACe,KAAK,GAAG,QAAQ;QAC/E,IAAIC,MAAM,GAAG,CAAChB,OAAO,GAAG,IAAI,GAAG,QAAQ,IAAIA,OAAO,GAAGA,OAAO,CAACgB,MAAM,GAAG,IAAI;;QAE1E;QACAC,cAAU,CAACP,IAAI,CAAClB,SAAS,EAAErF,MAAM,EAAE;UACjCgD,IAAI,EAAE4D,KAAK,IAAI,IAAI,CAACvG,IAAI,CAAC0G,SAAS,CAACH,KAAK,EAAEvB,SAAS,CAAC,EAAErC,IAAI;UAC1D6D,MAAM,CAAC;UACPG,KAAK,EAAEvB,MAAM,KAAK;QACpB,CAAC,CAAC;QACF;MAEF,KAAK,aAAa;QAChB,IAAI,CAAC1C,UAAU,CAACsC,SAAS,CAACrC,IAAI,CAAC;QAC/B;MAEF,KAAK,MAAM;MACX,KAAK,eAAe;QAClB,IAAI,CAACiE,OAAO,CAACxB,MAAM,EAAEzF,MAAM,EAAE6F,OAAO,EAAER,SAAS,CAAC;QAChD;MAEF,KAAK,cAAc;QACjB,IAAIC,KAAK,EAAE;UACT,IAAI,CAACtF,MAAM,CAACf,KAAK,CAACiI,MAAM,GAAGlH,MAAM,IAAI,MAAM;QAC7C,CAAC,MAAM,IAAI4F,OAAO,EAAE;UAClB;UACA,IAAI,CAAC5F,MAAM,CAACf,KAAK,CAACiI,MAAM,GAAG,MAAM;QACnC;QACA;MAEF;QACE,IAAI,CAACD,OAAO,CAACxB,MAAM,EAAEzF,MAAM,EAAE0F,KAAK,EAAEL,SAAS,CAAC;IAClD;EACF;AACF;AAAC8B,OAAA,CAAAjK,OAAA,GAAAkB,UAAA;AAEDA,UAAU,CAACgJ,KAAK,GAAGN,cAAU;AAE7BjH,kBAAS,CAACwH,QAAQ,CAAC,aAAa,EAAEjJ,UAAU,CAAC","ignoreList":[]}
|