{"version":3,"file":"editor.min.cjs","sources":["../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/in/packages/editor/src/event/EditorEvent.ts","../../../../../../src/in/packages/editor/src/decorator/data.ts","../../../../../../src/in/packages/editor/src/display/Stroker.ts","../../../../../../src/in/packages/editor/src/display/SelectArea.ts","../../../../../../src/in/packages/editor/src/helper/EditSelectHelper.ts","../../../../../../src/in/packages/editor/src/display/EditSelect.ts","../../../../../../src/in/packages/editor/src/helper/EditDataHelper.ts","../../../../../../src/in/packages/editor/src/editor/cursor.ts","../../../../../../src/in/packages/editor/src/display/EditPoint.ts","../../../../../../src/in/packages/editor/src/display/EditBox.ts","../../../../../../src/in/packages/editor/src/display/EditMask.ts","../../../../../../src/in/packages/editor/src/svg.ts","../../../../../../src/in/packages/editor/src/config.ts","../../../../../../src/in/packages/editor/src/editor/simulate.ts","../../../../../../src/in/packages/editor/src/helper/EditorHelper.ts","../../../../../../src/in/packages/editor/src/tool/EditToolCreator.ts","../../../../../../src/in/packages/editor/src/event/InnerEditorEvent.ts","../../../../../../src/in/packages/editor/src/event/EditorGroupEvent.ts","../../../../../../src/in/packages/editor/src/display/SimulateElement.ts","../../../../../../src/in/packages/editor/src/event/EditorMoveEvent.ts","../../../../../../src/in/packages/editor/src/event/EditorScaleEvent.ts","../../../../../../src/in/packages/editor/src/event/EditorRotateEvent.ts","../../../../../../src/in/packages/editor/src/event/EditorSkewEvent.ts","../../../../../../src/in/packages/editor/src/tool/TransformTool.ts","../../../../../../src/in/packages/editor/src/Editor.ts","../../../../../../src/in/packages/editor/src/editor/target.ts","../../../../../../src/in/packages/editor/src/tool/InnerEditor.ts","../../../../../../src/in/packages/editor/src/tool/EditTool.ts","../../../../../../src/in/packages/editor/src/tool/LineEditTool.ts","../../../../../../src/in/packages/editor/src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n    ownKeys = Object.getOwnPropertyNames || function (o) {\r\n        var ar = [];\r\n        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n        return ar;\r\n    };\r\n    return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose, inner;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n            if (async) inner = dispose;\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    var r, s = 0;\r\n    function next() {\r\n        while (r = env.stack.pop()) {\r\n            try {\r\n                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n                if (r.dispose) {\r\n                    var result = r.dispose.call(r.value);\r\n                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n                }\r\n                else s |= 1;\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n    if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n        return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n            return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n        });\r\n    }\r\n    return path;\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __esDecorate: __esDecorate,\r\n    __runInitializers: __runInitializers,\r\n    __propKey: __propKey,\r\n    __setFunctionName: __setFunctionName,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { IUI, IPointData } from '@leafer-ui/interface'\nimport { Event, isArray } from '@leafer-ui/draw'\n\nimport { IEditor, IEditorEvent } from '@leafer-in/interface'\n\n\nfunction toList(value: IUI | IUI[]): IUI[] {\n    return value ? (isArray(value) ? value : [value]) : []\n}\n\nexport class EditorEvent extends Event implements IEditorEvent {\n\n    static BEFORE_SELECT = 'editor.before_select'\n    static SELECT = 'editor.select'\n    static AFTER_SELECT = 'editor.after_select'\n\n    static BEFORE_HOVER = 'editor.before_hover'\n    static HOVER = 'editor.hover'\n\n    declare readonly target: IUI\n    readonly editor: IEditor\n\n    readonly value: IUI | IUI[]\n    readonly oldValue: IUI | IUI[]\n\n    get list() { return toList(this.value) }\n    get oldList() { return toList(this.oldValue) }\n\n    readonly worldOrigin: IPointData\n    declare readonly origin: IPointData\n\n    constructor(type: string, data?: IEditorEvent) {\n        super(type)\n        if (data) Object.assign(this, data)\n    }\n\n}","import { IFunction, ILeaf, IObject, IUI, } from '@leafer-ui/interface'\nimport { defineKey, isNull, isArray, isObject, isUndefined } from '@leafer-ui/draw'\n\nimport { IEditor } from '@leafer-in/interface'\n\nimport { EditorEvent } from '../event/EditorEvent'\n\n\nexport function targetAttr(fn: IFunction) {\n    return (target: ILeaf, key: string) => {\n        const privateKey = '_' + key\n        defineKey(target, key, {\n            get() { return (this as IObject)[privateKey] },\n            set(value: IUI | IUI[]) {\n                const old = (this as IObject)[privateKey]\n                if (old !== value) {\n\n                    const t = this as IEditor\n\n                    if (t.config) { // Editor\n\n                        const isSelect = key === 'target'\n                        if (isSelect) {\n                            const { beforeSelect } = t.config\n                            if (beforeSelect) {\n                                const check = beforeSelect({ target: value })\n                                if (isObject(check)) value = check\n                                else if (check === false) return\n                            }\n\n                            if (t.hasDimOthers) t.cancelDimOthers()\n\n                            if (isArray(value) && value.length > 1 && value[0].locked) value.splice(0, 1) // fix: 单个锁定 + shift多选\n                            if (t.single) {\n                                delete t.element.syncEventer // 重置 EditBox.load() 同步事件设置\n                                delete t.element.__world.ignorePixelSnap // 重置 EditBox.load() 忽略对齐像素设置\n                            }\n                        }\n\n                        const type = isSelect ? EditorEvent.BEFORE_SELECT : EditorEvent.BEFORE_HOVER\n                        if (this.hasEvent(type)) this.emitEvent(new EditorEvent(type, { editor: t, value: value as IUI, oldValue: old }))\n                    }\n\n                    (this as IObject)[privateKey] = value, fn(this, old)\n                }\n            }\n        } as ThisType<ILeaf>)\n    }\n}\n\n\nexport function mergeConfigAttr() {\n    return (target: IEditor, key: string) => {\n        defineKey(target, key, {\n            get() {\n                const { config, element, dragPoint, editBox, editTool, innerEditor, app } = this, mergeConfig = { ...config } // 实时合并，后期可优化\n\n                if (innerEditor) innerEditor.editConfig && Object.assign(mergeConfig, innerEditor.editConfig) // innerEditor 上的配置\n                else if (editTool) editTool.editConfig && Object.assign(mergeConfig, editTool.editConfig) // editTool 上的配置\n\n                if (element && element.editConfig) {\n                    let { editConfig } = element\n                    if (editConfig.hover || editConfig.hoverStyle || editConfig.hoverPathType) { // 元素的hover样式，不能覆盖到总配置里\n                        editConfig = { ...editConfig }\n                        delete editConfig.hover\n                        delete editConfig.hoverStyle\n                        delete editConfig.hoverPathType\n                    }\n                    Object.assign(mergeConfig, editConfig) // 元素上的配置\n                }\n                if (editBox.config) Object.assign(mergeConfig, editBox.config) // EditBox 上的配置\n                if (dragPoint) {\n                    if (dragPoint.editConfig) Object.assign(mergeConfig, dragPoint.editConfig)\n                    if (mergeConfig.editSize === 'font-size') mergeConfig.lockRatio = true // 强制锁定比例\n                    if (dragPoint.pointType === 'resize-rotate') {\n                        mergeConfig.around || (mergeConfig.around = 'center')\n                        isNull(mergeConfig.lockRatio) && (mergeConfig.lockRatio = true)\n                    }\n                }\n                if (isUndefined(mergeConfig.dragLimitAnimate)) mergeConfig.dragLimitAnimate = app && app.config.pointer.dragLimitAnimate\n                return (this as IObject).mergedConfig = mergeConfig\n            }\n        } as ThisType<IEditor>)\n    }\n}\n\n\n","import { IUI, ILeaferCanvas, IRenderOptions, IUIInputData, IMatrixWithOptionHalfData } from '@leafer-ui/interface'\nimport { Paint, UI, MatrixHelper, getBoundsData, getMatrixData, BoundsHelper, LeafBoundsHelper, isArray, isString, surfaceType, ColorConvert } from '@leafer-ui/draw'\n\nimport { IStroker } from '@leafer-in/interface'\n\nimport { targetAttr } from '../decorator/data'\n\n\nconst { abs } = Math\nconst { copy } = MatrixHelper\nconst { setListWithFn } = BoundsHelper\nconst { worldBounds } = LeafBoundsHelper\nconst matrix = getMatrixData() as IMatrixWithOptionHalfData\nconst bounds = getBoundsData()\n\nexport class Stroker extends UI implements IStroker {\n\n    @targetAttr(onTarget)\n    public target: IUI | IUI[]\n\n    public list: IUI[] = []\n\n    @surfaceType('render-path')\n    public strokePathType: 'path' | 'render-path' | 'box' | 'stroke'\n\n    constructor() {\n        super()\n        this.visible = 0\n        this.hittable = false\n        this.strokeAlign = 'center'\n    }\n\n    public setTarget(target: IUI | IUI[], style?: IUIInputData): void {\n        if (style) this.set(style)\n        this.target = target\n        this.update()\n    }\n\n    public update(style?: IUIInputData): void {\n        const { list } = this\n        if (list.length) {\n            setListWithFn(bounds, list, worldBounds)\n            if (style) this.set(style)\n            this.set(bounds)\n            this.visible = true\n        } else this.visible = 0\n    }\n\n    public __draw(canvas: ILeaferCanvas, options: IRenderOptions): void {\n        const { list } = this\n\n        if (list.length) {\n\n            let leaf: IUI\n            const data = this.__, { stroke, strokeWidth, fill } = data, { bounds } = options\n\n            for (let i = 0; i < list.length; i++) {\n                leaf = list[i]\n                const { worldTransform, worldRenderBounds } = leaf\n\n                if (worldRenderBounds.width && worldRenderBounds.height && (!bounds || bounds.hit(worldRenderBounds, options.matrix))) {\n\n                    const aScaleX = abs(worldTransform.scaleX), aScaleY = abs(worldTransform.scaleY)\n\n                    copy(matrix, worldTransform)\n                    matrix.half = strokeWidth % 2\n\n                    canvas.setWorld(matrix, options.matrix)\n                    canvas.beginPath()\n\n                    switch (this.strokePathType) {\n                        case 'box':\n                            const { boxBounds } = leaf.__layout\n                            canvas.rect(boxBounds.x, boxBounds.y, boxBounds.width, boxBounds.height)\n                            break\n                        case 'stroke':\n                            const { strokeBounds } = leaf.__layout\n                            canvas.rect(strokeBounds.x, strokeBounds.y, strokeBounds.width, strokeBounds.height)\n                            break\n                        case 'path':\n                            leaf.__drawPath(canvas)\n                            break\n                        default:\n                            if (leaf.__.__useArrow) leaf.__drawPath(canvas)\n                            else leaf.__.__pathForRender ? leaf.__drawRenderPath(canvas) : leaf.__drawPathByBox(canvas)\n                    }\n\n                    data.strokeWidth = strokeWidth / Math.max(aScaleX, aScaleY)\n\n                    if (data.shadow) {\n                        const shadow = data.shadow[0], { scaleX, scaleY } = this.getRenderScaleData(true, shadow.scaleFixed)\n                        canvas.save(), canvas.setWorldShadow(shadow.x * scaleX, shadow.y * scaleY, shadow.blur * scaleX, ColorConvert.string(shadow.color))\n                    }\n\n                    if (stroke) isString(stroke) ? Paint.stroke(stroke, this, canvas, options) : Paint.strokes(stroke, this, canvas, options)\n                    if (fill) isString(fill) ? Paint.fill(fill, this, canvas, options) : Paint.fills(fill, this, canvas, options)\n\n                    if (data.shadow) canvas.restore()\n\n                }\n            }\n\n            data.strokeWidth = strokeWidth\n        }\n    }\n\n    public destroy(): void {\n        this.target = null\n        super.destroy()\n    }\n\n}\n\nfunction onTarget(stroker: Stroker): void {\n    const value = stroker.target\n    stroker.list = value ? (isArray(value) ? value : [value]) : []\n}\n","import { IBoundsData, IGroupInputData, IRect, IRectInputData } from '@leafer-ui/interface'\nimport { Group, Rect } from '@leafer-ui/draw'\n\nimport { ISelectArea } from '@leafer-in/interface'\n\n\nexport class SelectArea extends Group implements ISelectArea {\n\n    protected strokeArea: IRect = new Rect({ strokeAlign: 'center' })\n    protected fillArea: IRect = new Rect()\n\n    constructor(data?: IGroupInputData) {\n        super(data)\n        this.visible = 0\n        this.hittable = false\n        this.addMany(this.fillArea, this.strokeArea)\n    }\n\n    public setStyle(style: IRectInputData, userStyle?: IRectInputData): void {\n        const { visible, stroke, strokeWidth } = style\n        this.visible = visible\n        this.strokeArea.reset({ stroke, strokeWidth, ...(userStyle || {}) })\n        this.fillArea.reset({ visible: userStyle ? false : true, fill: stroke, opacity: 0.2 })\n    }\n\n    public setBounds(bounds: IBoundsData): void {\n        this.strokeArea.set(bounds)\n        this.fillArea.set(bounds)\n    }\n\n}","import { IBounds, ILeafList, IUI, IUIData } from '@leafer-ui/interface'\n\n\nexport const EditSelectHelper = {\n\n    findOne(path: ILeafList): IUI {\n        return path.list.find((leaf) => leaf.editable) as IUI\n    },\n\n    findByBounds(branch: IUI, bounds: IBounds): IUI[] {\n        const list: IUI[] = []\n        eachFind([branch], list, bounds)\n        return list\n    }\n\n}\n\n\nfunction eachFind(children: IUI[], list: IUI[], bounds: IBounds): void {\n    let child: IUI, data: IUIData\n    for (let i = 0, len = children.length; i < len; i++) {\n        child = children[i], data = child.__\n        if (data.hittable && data.visible && !data.locked && bounds.hit(child.__world)) {\n\n            if (data.editable) {\n                if (child.isBranch && !data.hitChildren) {\n                    if (data.hitSelf) list.push(child)\n                    continue\n                } else if (child.isFrame) {\n                    if (bounds.includes(child.__layout.boxBounds, child.__world)) {\n                        list.push(child)\n                        continue\n                    }\n                } else if (bounds.hit(child.__layout.boxBounds, child.__world) && data.hitSelf) list.push(child)\n            }\n\n            if (child.isBranch) eachFind(child.children, list, bounds)\n\n        }\n    }\n}","import { IBounds, ILeaf, ILeafList, IUI, IEventListenerId, IPointerEvent, IFunction } from '@leafer-ui/interface'\nimport { Bounds, LeafList, Group } from '@leafer-ui/draw'\nimport { PointerEvent, DragEvent, MoveEvent, ZoomEvent } from '@leafer-ui/core'\n\nimport { IEditSelect, IEditor, ISelectArea, IStroker } from '@leafer-in/interface'\n\nimport { Stroker } from './Stroker'\nimport { SelectArea } from './SelectArea'\nimport { EditSelectHelper } from '../helper/EditSelectHelper'\nimport { EditorEvent } from '../event/EditorEvent'\n\n\nconst { findOne, findByBounds } = EditSelectHelper\n\nexport class EditSelect extends Group implements IEditSelect {\n\n    public editor: IEditor\n\n    public get dragging(): boolean { return !!this.originList }\n    public get running(): boolean { const { editor, app } = this; return this.hittable && editor.visible && editor.hittable && editor.mergeConfig.selector && (app && app.mode === 'normal') }\n    public get isMoveMode(): boolean { const { app } = this; return app && app.interaction.moveMode }\n\n    public hoverStroker: IStroker = new Stroker()\n    public targetStroker: IStroker = new Stroker()\n\n    public bounds: IBounds = new Bounds()\n    public selectArea: ISelectArea = new SelectArea()\n\n    protected originList: ILeafList\n    protected needRemoveItem: IUI\n\n    protected waitSelect: IFunction // 手机端延迟选中，防止多点触屏误选元素\n\n    protected __eventIds: IEventListenerId[] = []\n\n    constructor(editor: IEditor) {\n        super()\n        this.editor = editor\n        this.addMany(this.targetStroker, this.hoverStroker, this.selectArea)\n        this.__listenEvents()\n    }\n\n    // hover / select\n\n    protected onHover(): void {\n        const { editor } = this\n        if (this.running && !this.dragging && !editor.dragging) {\n            const { hoverTarget, mergeConfig } = editor, config = { ...mergeConfig }\n            if (hoverTarget && hoverTarget.editConfig) Object.assign(config, hoverTarget.editConfig) // hover元素上的配置\n            const { stroke, strokeWidth, hover, hoverStyle, hoverPathType } = config\n            this.hoverStroker.setTarget(hover ? hoverTarget : null, { stroke, strokeWidth, strokePathType: hoverPathType, ...(hoverStyle || {}) })\n        } else {\n            this.hoverStroker.target = null\n        }\n    }\n\n    protected onSelect(): void {\n        if (this.running) {\n            this.targetStroker.setTarget(this.editor.list)\n            this.hoverStroker.target = null\n        }\n    }\n\n    public update(): void {\n        this.hoverStroker.update()\n\n        const { stroke, strokeWidth, selectedPathType, selectedStyle } = this.editor.mergedConfig\n        this.targetStroker.update({ stroke, strokeWidth: strokeWidth && Math.max(1, strokeWidth / 2), strokePathType: selectedPathType, ...(selectedStyle || {}) })\n    }\n\n    // move / down\n\n    protected onPointerMove(e: PointerEvent): void {\n        const { app, editor } = this\n        if (this.running && !this.isMoveMode && app.interaction.canHover && !app.interaction.dragging) {\n            const find = this.findUI(e)\n            editor.hoverTarget = editor.hasItem(find) ? null : find\n        } if (this.isMoveMode) {\n            editor.hoverTarget = null //  move.dragEmpty\n        }\n    }\n\n    protected onBeforeDown(e: PointerEvent): void {\n        if (e.multiTouch) return\n\n        const { select } = this.editor.mergeConfig\n        if (select === 'press') {\n            if (this.app.config.mobile) {\n                this.waitSelect = () => this.checkAndSelect(e)\n            } else {\n                this.checkAndSelect(e)\n            }\n        }\n    }\n\n    protected onTap(e: PointerEvent): void {\n        if (e.multiTouch) return\n\n        const { editor } = this\n        const { select, selectKeep } = editor.mergeConfig\n\n        if (select === 'tap') this.checkAndSelect(e)\n        else if (this.waitSelect) this.waitSelect()\n\n        if (this.needRemoveItem) {\n            editor.removeItem(this.needRemoveItem)\n        } else if (this.isMoveMode) {\n            if (!selectKeep) editor.target = null  // move.dragEmpty\n        }\n\n    }\n\n    protected checkAndSelect(e: PointerEvent): void { // pointer.down or tap\n        this.needRemoveItem = null\n\n        if (this.allowSelect(e)) {\n            const { editor } = this\n            const find = this.findUI(e)\n\n            if (find) {\n                if (this.isMultipleSelect(e)) {\n                    if (editor.hasItem(find)) this.needRemoveItem = find // 等待tap事件再实际移除\n                    else editor.addItem(find)\n                } else {\n                    editor.target = find\n                }\n\n                e.path.needUpdate = true // 需要更新一下path\n\n            } else if (this.allow(e.target)) {\n\n                if (!this.isHoldMultipleSelectKey(e) && !this.editor.mergedConfig.selectKeep) editor.target = null\n\n            }\n        }\n    }\n\n    // drag\n\n    protected onDragStart(e: DragEvent): void {\n        if (e.multiTouch) return\n        if (this.waitSelect) this.waitSelect()\n\n        if (this.allowDrag(e)) {\n            const { editor } = this\n            const { stroke, area } = editor.mergeConfig\n            const { x, y } = e.getInnerPoint(this)\n\n            this.bounds.set(x, y)\n\n            this.selectArea.setStyle({ visible: true, stroke, x, y }, area)\n            this.selectArea.setBounds(this.bounds.get())\n\n            this.originList = editor.leafList.clone()\n        }\n    }\n\n    protected onDrag(e: DragEvent): void {\n        if (e.multiTouch) return\n        if (this.editor.dragging) return this.onDragEnd(e)\n\n        if (this.dragging) {\n            const { editor } = this\n            const total = e.getInnerTotal(this)\n\n            const dragBounds = this.bounds.clone().unsign()\n            const list = new LeafList(findByBounds(editor.app, dragBounds))\n\n            this.bounds.width = total.x\n            this.bounds.height = total.y\n\n            this.selectArea.setBounds(dragBounds.get())\n\n            if (list.length) {\n\n                const selectList: ILeaf[] = []\n\n                this.originList.forEach(item => { if (!list.has(item)) selectList.push(item) })\n                list.forEach(item => { if (!this.originList.has(item)) selectList.push(item) })\n\n                if (selectList.length !== editor.list.length || editor.list.some((child, index) => child !== selectList[index])) {\n                    editor.target = selectList as IUI[]\n                }\n\n            } else {\n\n                editor.target = this.originList.list as IUI[]\n\n            }\n        }\n    }\n\n    protected onDragEnd(e: DragEvent): void {\n        if (e.multiTouch) return\n\n        if (this.dragging) this.originList = null, this.selectArea.visible = 0\n    }\n\n    protected onAutoMove(e: MoveEvent): void {\n        if (this.dragging) {\n            const { x, y } = e.getLocalMove(this)\n            this.bounds.x += x\n            this.bounds.y += y\n        }\n    }\n\n    // helper\n\n    protected allow(target: ILeaf): boolean {\n        return target.leafer !== this.editor.leafer\n    }\n\n    protected allowDrag(e: DragEvent) {\n        const { boxSelect, multipleSelect } = this.editor.mergeConfig\n        if (this.running && (multipleSelect && boxSelect) && !e.target.draggable) {\n            return (!this.editor.editing && this.allow(e.target)) || (this.isHoldMultipleSelectKey(e) && !findOne(e.path))\n        } else {\n            return false\n        }\n    }\n\n    protected allowSelect(e: IPointerEvent): boolean {\n        return this.running && !this.isMoveMode && !e.middle\n    }\n\n    public findDeepOne(e: PointerEvent): IUI {\n        const options = { exclude: new LeafList(this.editor.editBox.rect) }\n        return findOne(e.target.leafer.interaction.findPath(e, options)) as IUI\n    }\n\n    public findUI(e: PointerEvent): IUI {\n        return this.isMultipleSelect(e) ? this.findDeepOne(e) : findOne(e.path)\n    }\n\n    public isMultipleSelect(e: IPointerEvent): boolean {\n        const { multipleSelect, continuousSelect } = this.editor.mergeConfig\n        return multipleSelect && (this.isHoldMultipleSelectKey(e) || continuousSelect)\n    }\n\n    public isHoldMultipleSelectKey(e: IPointerEvent): boolean {\n        const { multipleSelectKey } = this.editor.mergedConfig\n        if (multipleSelectKey) return e.isHoldKeys(multipleSelectKey)\n        return e.shiftKey\n    }\n\n    protected __listenEvents(): void {\n        const { editor } = this\n        editor.waitLeafer(() => {\n\n            const { app } = editor\n            app.selector.proxy = editor\n\n            this.__eventIds = [\n                editor.on_([\n                    [EditorEvent.HOVER, this.onHover, this],\n                    [EditorEvent.SELECT, this.onSelect, this]\n                ]),\n\n                app.on_([\n                    [PointerEvent.MOVE, this.onPointerMove, this],\n                    [PointerEvent.BEFORE_DOWN, this.onBeforeDown, this],\n                    [PointerEvent.TAP, this.onTap, this],\n\n                    [DragEvent.START, this.onDragStart, this, true], // 采用捕获事件，需要比EditBox中的dragStart早触发\n                    [DragEvent.DRAG, this.onDrag, this],\n                    [DragEvent.END, this.onDragEnd, this],\n\n                    [MoveEvent.MOVE, this.onAutoMove, this],\n                    [[ZoomEvent.ZOOM, MoveEvent.MOVE], () => { this.editor.hoverTarget = null }],\n                ])\n            ]\n\n        })\n    }\n\n    protected __removeListenEvents(): void {\n        this.off_(this.__eventIds)\n    }\n\n    public destroy(): void {\n        this.editor = this.originList = this.needRemoveItem = null\n        this.__removeListenEvents()\n        super.destroy()\n    }\n}","import { IPointData, IAround, IAlign, IUI, ILayoutBoundsData, IBoundsType } from '@leafer-ui/interface'\nimport { AroundHelper, MathHelper, PointHelper, Direction9, isNumber } from '@leafer-ui/draw'\nimport { DragBoundsHelper } from '@leafer-ui/core'\n\nimport { IEditorScaleEvent, IEditorSkewEvent, IEditorRotateEvent } from '@leafer-in/interface'\n\n\nconst { topLeft, top, topRight, right, bottomRight, bottom, bottomLeft, left } = Direction9\nconst { toPoint } = AroundHelper, { within, sign } = MathHelper, { abs } = Math\n\nexport const EditDataHelper = {\n\n    getScaleData(target: IUI, startBounds: ILayoutBoundsData, direction: Direction9, totalMoveOrScale: IPointData | number, lockRatio: boolean | 'corner', around: IAround, flipable: boolean, scaleMode: boolean, boundsType: IBoundsType): IEditorScaleEvent {\n        let align: IAlign, origin = {} as IPointData, scaleX: number = 1, scaleY: number = 1, lockScale: number\n\n        const { widthRange, heightRange, dragBounds, worldTransform, boxBounds } = target\n        const { width, height } = startBounds\n        const innerBounds = target.getBounds(boundsType, 'inner')\n\n        // 获取已经改变的比例\n        const originChangedScaleX = target.scaleX / startBounds.scaleX\n        const originChangedScaleY = target.scaleY / startBounds.scaleY\n        const signX = sign(originChangedScaleX)\n        const signY = sign(originChangedScaleY)\n\n        const changedScaleX = scaleMode ? originChangedScaleX : signX * innerBounds.width / width\n        const changedScaleY = scaleMode ? originChangedScaleY : signY * innerBounds.height / height\n\n        if (isNumber(totalMoveOrScale)) {\n\n            scaleX = scaleY = Math.sqrt(totalMoveOrScale)\n\n        } else {\n\n            if (around) {\n                totalMoveOrScale.x *= 2\n                totalMoveOrScale.y *= 2\n            }\n\n            totalMoveOrScale.x *= scaleMode ? originChangedScaleX : signX\n            totalMoveOrScale.y *= scaleMode ? originChangedScaleY : signY\n\n            const topScale = (-totalMoveOrScale.y + height) / height\n            const rightScale = (totalMoveOrScale.x + width) / width\n            const bottomScale = (totalMoveOrScale.y + height) / height\n            const leftScale = (-totalMoveOrScale.x + width) / width\n\n            switch (direction) {\n                case top:\n                    scaleY = topScale\n                    align = 'bottom'\n                    break\n                case right:\n                    scaleX = rightScale\n                    align = 'left'\n                    break\n                case bottom:\n                    scaleY = bottomScale\n                    align = 'top'\n                    break\n                case left:\n                    scaleX = leftScale\n                    align = 'right'\n                    break\n                case topLeft:\n                    scaleY = topScale\n                    scaleX = leftScale\n                    align = 'bottom-right'\n                    break\n                case topRight:\n                    scaleY = topScale\n                    scaleX = rightScale\n                    align = 'bottom-left'\n                    break\n                case bottomRight:\n                    scaleY = bottomScale\n                    scaleX = rightScale\n                    align = 'top-left'\n                    break\n                case bottomLeft:\n                    scaleY = bottomScale\n                    scaleX = leftScale\n                    align = 'top-right'\n            }\n\n            if (lockRatio) {\n                if (lockRatio === 'corner' && direction % 2) {\n                    lockRatio = false\n                } else {\n                    switch (direction) {\n                        case top:\n                        case bottom:\n                            scaleX = scaleY\n                            break\n                        case left:\n                        case right:\n                            scaleY = scaleX\n                            break\n                        default:\n                            lockScale = Math.sqrt(abs(scaleX * scaleY))\n                            scaleX = sign(scaleX) * lockScale\n                            scaleY = sign(scaleY) * lockScale\n                    }\n                }\n            }\n\n        }\n\n        const useScaleX = scaleX !== 1, useScaleY = scaleY !== 1\n\n        if (useScaleX) scaleX /= changedScaleX\n        if (useScaleY) scaleY /= changedScaleY\n\n        if (!flipable) {\n            const { worldTransform } = target\n            if (scaleX < 0) scaleX = 1 / innerBounds.width / worldTransform.scaleX\n            if (scaleY < 0) scaleY = 1 / innerBounds.height / worldTransform.scaleY\n        }\n\n        // 检查限制\n\n        toPoint(around || align, innerBounds, origin, true)\n\n        this.checkOrigin(target, origin, boundsType)\n\n        if (dragBounds) {\n            const scaleData = { x: scaleX, y: scaleY }\n            DragBoundsHelper.limitScaleOf(target, origin, scaleData, lockRatio as boolean)\n            scaleX = scaleData.x\n            scaleY = scaleData.y\n        }\n\n        if (useScaleX && widthRange) {\n            const nowWidth = innerBounds.width * target.scaleX\n            scaleX = within(nowWidth * scaleX, widthRange) / nowWidth\n        }\n\n        if (useScaleY && heightRange) {\n            const nowHeight = innerBounds.height * target.scaleY\n            scaleY = within(nowHeight * scaleY, heightRange) / nowHeight\n        }\n\n        // 防止小于1px\n        let minWidth = 1 * abs(worldTransform.scaleX), minHeight = 1 * abs(worldTransform.scaleY)\n\n        if (boundsType !== 'box') {\n            minWidth += innerBounds.width - boxBounds.width\n            minHeight += innerBounds.height - boxBounds.height\n        }\n\n        if (useScaleX && abs(scaleX * innerBounds.width) < minWidth) scaleX = sign(scaleX) * minWidth / innerBounds.width\n        if (useScaleY && abs(scaleY * innerBounds.height) < minHeight) scaleY = sign(scaleY) * minHeight / innerBounds.height\n\n        if (lockRatio && scaleX !== scaleY) {\n            lockScale = Math.min(abs(scaleX), abs(scaleY))\n            scaleX = sign(scaleX) * lockScale\n            scaleY = sign(scaleY) * lockScale\n        }\n\n        isFinite(scaleX) || (scaleX = 1)\n        isFinite(scaleY) || (scaleY = 1)\n\n        return { origin, scaleX, scaleY, direction, lockRatio, around }\n    },\n\n    getRotateData(target: IUI, direction: Direction9, current: IPointData, last: IPointData, around: IAround, boundsType: IBoundsType): IEditorRotateEvent {\n        let align: IAlign, origin = {} as IPointData\n\n        switch (direction) {\n            case topLeft:\n                align = 'bottom-right'\n                break\n            case topRight:\n                align = 'bottom-left'\n                break\n            case bottomRight:\n                align = 'top-left'\n                break\n            case bottomLeft:\n                align = 'top-right'\n                break\n            default:\n                align = 'center'\n        }\n\n        toPoint(around || align, target.getBounds(boundsType, 'inner'), origin, true)\n\n        this.checkOrigin(target, origin, boundsType)\n\n        return { origin, rotation: PointHelper.getRotation(last, target.getWorldPointByBox(origin), current) }\n    },\n\n    getSkewData(target: IUI, direction: Direction9, move: IPointData, around: IAround, boundsType: IBoundsType,): IEditorSkewEvent {\n        let align: IAlign, origin = {} as IPointData, skewX = 0, skewY = 0\n        let last: IPointData\n\n        switch (direction) {\n            case top:\n            case topLeft:\n                last = { x: 0.5, y: 0 }\n                align = 'bottom'\n                skewX = 1\n                break\n            case bottom:\n            case bottomRight:\n                last = { x: 0.5, y: 1 }\n                align = 'top'\n                skewX = 1\n                break\n            case left:\n            case bottomLeft:\n                last = { x: 0, y: 0.5 }\n                align = 'right'\n                skewY = 1\n                break\n            case right:\n            case topRight:\n                last = { x: 1, y: 0.5 }\n                align = 'left'\n                skewY = 1\n        }\n\n        const innerBounds = target.getBounds(boundsType, 'inner')\n        const { width, height } = innerBounds\n\n        last.x = last.x * width\n        last.y = last.y * height\n\n        toPoint(around || align, innerBounds, origin, true)\n\n        this.checkOrigin(target, origin, boundsType)\n\n        const rotation = PointHelper.getRotation(last, origin, { x: last.x + (skewX ? move.x : 0), y: last.y + (skewY ? move.y : 0) })\n        skewX ? skewX = -rotation : skewY = rotation\n\n        return { origin, skewX, skewY }\n    },\n\n\n    checkOrigin(target: IUI, origin: IPointData, boundsType: IBoundsType): void {\n        if (boundsType !== 'box') {\n            const { boxBounds } = target, innerBounds = target.getBounds(boundsType, 'inner')\n            origin.x += innerBounds.x - boxBounds.x\n            origin.y += innerBounds.y - boxBounds.y\n        }\n    },\n\n\n    getAround(around: IAround, altKey: boolean): IAround {\n        return (altKey && !around) ? 'center' : around\n    },\n\n    getRotateDirection(direction: number, rotation: number, totalDirection = 8): number {\n        direction = (direction + Math.round(rotation / (360 / totalDirection))) % totalDirection\n        if (direction < 0) direction += totalDirection\n        return direction\n    },\n\n    getFlipDirection(direction: Direction9, flipedX: boolean, flipedY: boolean): Direction9 {\n        if (flipedX) {\n            switch (direction) {\n                case left: direction = right; break\n                case topLeft: direction = topRight; break\n                case bottomLeft: direction = bottomRight; break\n                case right: direction = left; break\n                case topRight: direction = topLeft; break\n                case bottomRight: direction = bottomLeft; break\n            }\n        }\n\n        if (flipedY) {\n            switch (direction) {\n                case top: direction = bottom; break\n                case topLeft: direction = bottomLeft; break\n                case topRight: direction = bottomRight; break\n                case bottom: direction = top; break\n                case bottomLeft: direction = topLeft; break\n                case bottomRight: direction = topRight; break\n            }\n        }\n\n        return direction\n    }\n\n}","import { IObject, IUIEvent } from '@leafer-ui/interface'\n\nimport { IEditBox } from '@leafer-in/interface'\nimport { MathHelper } from '@leafer-ui/draw'\n\nimport { EditDataHelper } from '../helper/EditDataHelper'\n\n\nconst cacheCursors: IObject = {}\n\nexport function updatePointCursor(editBox: IEditBox, e: IUIEvent): void {\n    const { enterPoint: point, dragging, skewing, resizing, flippedX, flippedY } = editBox\n    if (!point || !editBox.editor.editing || !editBox.canUse) return\n    if (point.name === 'rect') return updateMoveCursor(editBox) // rect 移动元素\n    if (point.name === 'circle') return // 独立旋转按钮\n\n    let { rotation } = editBox\n    const { pointType } = point, { moveCursor, resizeCursor, rotateCursor, skewCursor, moveable, resizeable, rotateable, skewable } = editBox.mergeConfig\n\n    if (pointType === 'move') { // 移动类型\n        point.cursor = moveCursor\n        if (!moveable) point.visible = false\n        return\n    } else if (pointType === 'button') { // 普通按钮\n        if (!point.cursor) point.cursor = 'pointer'\n        return\n    }\n\n    let showResize = pointType.includes('resize')\n    if (showResize && rotateable && (editBox.isHoldRotateKey(e) || !resizeable)) showResize = false\n    const showSkew = skewable && !showResize && (point.name === 'resize-line' || pointType === 'skew')\n\n    const cursor = dragging\n        ? (skewing ? skewCursor : (resizing ? resizeCursor : rotateCursor))\n        : (showSkew ? skewCursor : (showResize ? resizeCursor : rotateCursor))\n\n    rotation += (EditDataHelper.getFlipDirection(point.direction, flippedX, flippedY) + 1) * 45\n    rotation = Math.round(MathHelper.formatRotation(rotation, true) / 2) * 2\n\n    const { url, x, y } = cursor\n    const key = url + rotation\n\n    if (cacheCursors[key]) {\n        point.cursor = cacheCursors[key]\n    } else {\n        cacheCursors[key] = point.cursor = { url: toDataURL(url, rotation), x, y }\n    }\n}\n\nexport function updateMoveCursor(editBox: IEditBox): void {\n    const { moveCursor, moveable } = editBox.mergeConfig\n    if (editBox.canUse) editBox.rect.cursor = moveable ? moveCursor : undefined\n}\n\n\nfunction toDataURL(svg: string, rotation: number): string {\n    return '\"data:image/svg+xml,' + encodeURIComponent(svg.replace('{{rotation}}', rotation.toString())) + '\"'\n}","import { Box, Direction9 } from '@leafer-ui/draw'\n\nimport { IEditPoint, IEditPointInputData, IEditPointType } from '@leafer-in/interface'\n\n\nexport class EditPoint extends Box implements IEditPoint {\n\n    public direction: Direction9\n    public pointType: IEditPointType\n\n    constructor(data: IEditPointInputData) {\n        super(data)\n        this.useFastShadow = true\n    }\n\n}","import { IRect, IEventListenerId, IBoundsData, IPointData, IKeyEvent, IGroup, IBox, IBoxInputData, IAlign, IUI, IEditorConfig, IEditorDragStartData, ITransformTool, IUIEvent, IEditPointInputData } from '@leafer-ui/interface'\nimport { Group, Text, AroundHelper, Direction9, ResizeEvent, BoundsHelper, DataHelper, isArray, isString, isNumber, isNull, getPointData, isUndefined } from '@leafer-ui/draw'\nimport { DragEvent, PointerEvent, KeyEvent, RotateEvent, ZoomEvent, MoveEvent } from '@leafer-ui/core'\n\nimport { IEditBox, IEditor, IEditPoint, IEditPointType } from '@leafer-in/interface'\n\nimport { updatePointCursor, updateMoveCursor } from '../editor/cursor'\nimport { EditPoint } from './EditPoint'\nimport { EditDataHelper } from '../helper/EditDataHelper'\n\n\nconst fourDirection = ['top', 'right', 'bottom', 'left'], editConfig: IEditorConfig = undefined\n\nexport class EditBox extends Group implements IEditBox {\n\n    public editor: IEditor\n\n    public dragging: boolean\n    public gesturing: boolean\n\n    public moving: boolean\n    public resizing: boolean\n    public rotating: boolean\n    public skewing: boolean\n\n    public view: IGroup = new Group()  // 放置默认编辑工具控制点\n\n    public rect: IEditPoint = new EditPoint({ name: 'rect', hitFill: 'all', hitStroke: 'none', strokeAlign: 'center', hitRadius: 5 }) // target rect\n    public circle: IEditPoint = new EditPoint({ name: 'circle', strokeAlign: 'center', around: 'center', cursor: 'crosshair', hitRadius: 5 }) // rotate point\n    public buttons: IGroup = new Group({ around: 'center', hitSelf: false, visible: 0 })\n\n    public resizePoints: IEditPoint[] = [] // topLeft, top, topRight, right, bottomRight, bottom, bottomLeft, left\n    public rotatePoints: IEditPoint[] = [] // topLeft, top, topRight, right, bottomRight, bottom, bottomLeft, left\n    public resizeLines: IEditPoint[] = [] // top, right, bottom, left\n\n    public enterPoint: IEditPoint\n    public dragPoint: IEditPoint // 正在拖拽的控制点\n\n    public dragStartData = {} as IEditorDragStartData\n\n    public config: IEditorConfig\n    public mergedConfig: IEditorConfig\n\n    public get mergeConfig(): IEditorConfig {\n        const { config } = this, { mergeConfig, editBox } = this.editor\n        return this.mergedConfig = config && (editBox !== this) ? { ...mergeConfig, ...config } : mergeConfig // 可能会出现多个editBox的情况\n    }\n\n    protected _target: IUI\n    public get target(): IUI { return this._target || this.editor.element } // 操作的元素，默认为editor.element\n    public set target(target: IUI) { this._target = target }\n\n    public get single(): boolean { return !!this._target || this.editor.single }\n\n    protected _transformTool: ITransformTool\n    public get transformTool(): ITransformTool { return this._transformTool || this.editor }\n    public set transformTool(tool: ITransformTool) { this._transformTool = tool }\n\n    // fliped\n    public get flipped(): boolean { return this.flippedX || this.flippedY }\n    public get flippedX(): boolean { return this.scaleX < 0 }\n    public get flippedY(): boolean { return this.scaleY < 0 }\n    public get flippedOne(): boolean { return this.scaleX * this.scaleY < 0 }\n\n    public get canUse(): boolean { return this.app && this.editor.editing } // 编辑框是否处于激活状态\n    public get canGesture(): boolean { // 是否支持手势\n        if (!this.canUse) return false\n        const { moveable, resizeable, rotateable } = this.mergeConfig\n        return isString(moveable) || isString(resizeable) || isString(rotateable)\n    }\n    public get canDragLimitAnimate(): boolean { return (this.moving && this.mergeConfig.dragLimitAnimate && this.target.dragBounds) as any as boolean }\n\n    protected __eventIds: IEventListenerId[] = []\n\n    constructor(editor: IEditor) {\n        super()\n        this.editor = editor\n        this.visible = false\n        this.create()\n        this.__listenEvents()\n    }\n\n    public create() {\n        let rotatePoint: IEditPoint, resizeLine: IEditPoint, resizePoint: IEditPoint\n        const { view, resizePoints, rotatePoints, resizeLines, rect, circle, buttons } = this\n        const arounds: IAlign[] = ['bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', 'top', 'top-right', 'right']\n\n        for (let i = 0; i < 8; i++) {\n            rotatePoint = new EditPoint({ name: 'rotate-point', around: arounds[i], width: 15, height: 15, hitFill: \"all\" })\n            rotatePoints.push(rotatePoint)\n            this.listenPointEvents(rotatePoint, 'rotate', i)\n\n            if (i % 2) {\n                resizeLine = new EditPoint({ name: 'resize-line', around: 'center', width: 10, height: 10, hitFill: \"all\" })\n                resizeLines.push(resizeLine)\n                this.listenPointEvents(resizeLine, 'resize', i)\n            }\n\n            resizePoint = new EditPoint({ name: 'resize-point', hitRadius: 5 })\n            resizePoints.push(resizePoint)\n            this.listenPointEvents(resizePoint, 'resize', i)\n        }\n\n        this.listenPointEvents(circle, 'rotate', 2)\n        this.listenPointEvents(rect, 'move', 8) // center\n\n        view.addMany(...rotatePoints, rect, circle, buttons, ...resizeLines, ...resizePoints)\n        this.add(view)\n    }\n\n\n    public load(): void {\n        const { target, mergeConfig, single, rect, circle, resizePoints, resizeLines } = this\n        const { stroke, strokeWidth, ignorePixelSnap } = mergeConfig\n\n        const pointsStyle = this.getPointsStyle()\n        const middlePointsStyle = this.getMiddlePointsStyle()\n        const resizeLinesStyle = this.getResizeLinesStyle()\n\n        this.visible = !target.locked\n\n        let resizeP: IRect\n\n        for (let i = 0; i < 8; i++) {\n            resizeP = resizePoints[i]\n            resizeP.set(this.getPointStyle((i % 2) ? middlePointsStyle[((i - 1) / 2) % middlePointsStyle.length] : pointsStyle[(i / 2) % pointsStyle.length]))\n            resizeP.rotation = ((i - (i % 2 ? 1 : 0)) / 2) * 90\n            if (i % 2) resizeLines[(i - 1) / 2].set({ pointType: 'resize', rotation: (i - 1) / 2 * 90, ...(resizeLinesStyle[((i - 1) / 2) % resizeLinesStyle.length] || {}) } as IEditPointInputData)\n        }\n\n        // rotate\n        circle.set(this.getPointStyle(mergeConfig.circle || mergeConfig.rotatePoint || pointsStyle[0]))\n\n        // rect\n        rect.set({ stroke, strokeWidth, opacity: 1, editConfig, ...(mergeConfig.rect || {}) })\n\n        // 编辑框作为底部虚拟元素， 在 unload() 中重置\n        const rectThrough = isNull(mergeConfig.rectThrough) ? single : mergeConfig.rectThrough\n        rect.hittable = !rectThrough\n\n        if (rectThrough) {\n            target.syncEventer = rect // 同步给 rect 冒泡，在 target 属性装饰器中重置\n            this.app.interaction.bottomList = [{ target: rect, proxy: target }]\n        }\n\n        // 忽略元素像素对齐，在 target 属性装饰器中重置\n        if (single) DataHelper.stintSet(target.__world, 'ignorePixelSnap', ignorePixelSnap)\n\n        updateMoveCursor(this)\n    }\n\n    // 必须来自 editor.update()，需同步更新编辑工具 \n    public update(): void {\n        const { editor, mergeConfig } = this\n        const { x, y, scaleX, scaleY, rotation, skewX, skewY, width, height } = this.target.getLayoutBounds(mergeConfig.editBoxType, editor, true)\n        this.visible = !this.target.locked\n        this.set({ x, y, scaleX, scaleY, rotation, skewX, skewY })\n        this.updateBounds({ x: 0, y: 0, width, height })\n    }\n\n    public unload(): void {\n        this.visible = false\n        if (this.app) this.rect.syncEventer = this.app.interaction.bottomList = null\n    }\n\n\n    public updateBounds(bounds: IBoundsData): void {\n        const { editor, mergedConfig, single, rect, circle, buttons, resizePoints, rotatePoints, resizeLines } = this\n        const { editMask } = editor\n        const { middlePoint, resizeable, rotateable, hideOnSmall, editBox, mask, dimOthers, bright, spread, hideRotatePoints, hideResizeLines } = mergedConfig\n\n        editMask.visible = mask ? true : 0\n\n        if (!isUndefined(dimOthers) || !isUndefined(bright)) {  // 没有配置时不强制bright\n            editor.setDimOthers(dimOthers)\n            editor.setBright(!!dimOthers || bright)\n            editor.hasDimOthers = true\n        } else if (editor.hasDimOthers) {\n            editor.cancelDimOthers()\n        }\n\n        if (spread) BoundsHelper.spread(bounds, spread)\n\n        if (this.view.worldOpacity) {\n            const { width, height } = bounds\n            const smallSize = isNumber(hideOnSmall) ? hideOnSmall : 10\n            const showPoints = editBox && !(hideOnSmall && width < smallSize && height < smallSize)\n\n            let point = {} as IPointData, rotateP: IRect, resizeP: IRect, resizeL: IRect\n\n            for (let i = 0; i < 8; i++) {\n\n                AroundHelper.toPoint(AroundHelper.directionData[i], bounds, point)\n                resizeP = resizePoints[i]\n                rotateP = rotatePoints[i]\n                resizeP.set(point)\n                rotateP.set(point)\n\n                // visible \n                resizeP.visible = showPoints && !!(resizeable || rotateable)\n                rotateP.visible = showPoints && rotateable && resizeable && !hideRotatePoints\n\n                if (i % 2) { // top,  right, bottom, left\n\n                    resizeL = resizeLines[(i - 1) / 2]\n                    resizeL.set(point)\n\n                    resizeL.visible = resizeP.visible && !hideResizeLines\n                    if (resizeP.visible) resizeP.visible = !!middlePoint\n                    if (rotateP.visible) rotateP.visible = !!middlePoint\n\n                    if (((i + 1) / 2) % 2) { // top, bottom\n                        resizeL.width = width + resizeL.height\n                        if (hideOnSmall && resizeP.width * 2 > width) resizeP.visible = false\n                    } else {\n                        resizeL.width = height + resizeL.height\n                        if (hideOnSmall && resizeP.width * 2 > height) resizeP.visible = false\n                    }\n                }\n\n            }\n\n            // rotate\n            circle.visible = showPoints && rotateable && !!(mergedConfig.circle || mergedConfig.rotatePoint)\n            if (circle.visible) this.layoutCircle()\n\n            // rect\n            if (rect.path) rect.path = null // line可能会变成path优先模式\n            rect.set({ ...bounds, visible: single ? editBox : true })\n\n            // buttons\n            buttons.visible = showPoints && buttons.children.length > 0 || 0\n            if (buttons.visible) this.layoutButtons()\n        } else rect.set(bounds) // 需要更新大小\n    }\n\n    protected layoutCircle(): void {\n        const { circleDirection, circleMargin, buttonsMargin, buttonsDirection, middlePoint } = this.mergedConfig\n        const direction = fourDirection.indexOf(circleDirection || ((this.buttons.children.length && buttonsDirection === 'bottom') ? 'top' : 'bottom'))\n        this.setButtonPosition(this.circle, direction, circleMargin || buttonsMargin, !!middlePoint)\n    }\n\n    protected layoutButtons(): void {\n        const { buttons } = this\n        const { buttonsDirection, buttonsFixed, buttonsMargin, middlePoint } = this.mergedConfig\n\n        const { flippedX, flippedY } = this\n        let index = fourDirection.indexOf(buttonsDirection)\n        if ((index % 2 && flippedX) || ((index + 1) % 2 && flippedY)) {\n            if (buttonsFixed) index = (index + 2) % 4 // flip x / y\n        }\n\n        const direction = buttonsFixed ? EditDataHelper.getRotateDirection(index, this.flippedOne ? this.rotation : -this.rotation, 4) : index\n        this.setButtonPosition(buttons, direction, buttonsMargin, !!middlePoint)\n\n        if (buttonsFixed) buttons.rotation = (direction - index) * 90\n        buttons.scaleX = flippedX ? -1 : 1\n        buttons.scaleY = flippedY ? -1 : 1\n    }\n\n    protected setButtonPosition(buttons: IUI, direction: number, buttonsMargin: number, useMiddlePoint: boolean): void {\n        const point = this.resizePoints[direction * 2 + 1] // 4 map 8 direction\n        const useX = direction % 2  // left / right\n        const sign = (!direction || direction === 3) ? -1 : 1 // top / left = -1\n\n        const useWidth = direction % 2 // left / right  origin direction\n        const margin = (buttonsMargin + (useWidth ? ((useMiddlePoint ? point.width : 0) + buttons.boxBounds.width) : ((useMiddlePoint ? point.height : 0) + buttons.boxBounds.height)) / 2) * sign\n\n        if (useX) {\n            buttons.x = point.x + margin\n            buttons.y = point.y\n        } else {\n            buttons.x = point.x\n            buttons.y = point.y + margin\n        }\n    }\n\n\n    public getPointStyle(userStyle?: IBoxInputData): IBoxInputData {\n        const { stroke, strokeWidth, pointFill, pointSize, pointRadius } = this.mergedConfig\n        const defaultStyle = { fill: pointFill, stroke, strokeWidth, around: 'center', strokeAlign: 'center', opacity: 1, width: pointSize, height: pointSize, cornerRadius: pointRadius, offsetX: 0, offsetY: 0, editConfig } as IBoxInputData\n        return userStyle ? Object.assign(defaultStyle, userStyle) : defaultStyle\n    }\n\n    public getPointsStyle(): IBoxInputData[] {\n        const { point } = this.mergedConfig\n        return isArray(point) ? point : [point]\n    }\n\n    public getMiddlePointsStyle(): IBoxInputData[] {\n        const { middlePoint } = this.mergedConfig\n        return isArray(middlePoint) ? middlePoint : (middlePoint ? [middlePoint] : this.getPointsStyle())\n    }\n\n    public getResizeLinesStyle(): IBoxInputData[] {\n        const { resizeLine } = this.mergedConfig\n        return isArray(resizeLine) ? resizeLine : [resizeLine]\n    }\n\n\n    // drag\n\n    public onDragStart(e: DragEvent): void {\n        this.dragging = true\n        const point = this.dragPoint = e.current as IEditPoint, { pointType } = point\n        const { moveable, resizeable, rotateable, skewable, onCopy } = this.mergeConfig\n\n        // 确定模式\n        if (pointType === 'move') {\n            // alt复制钩子\n            if (e.altKey && onCopy && onCopy() && this.editor.single) this.app.interaction.replaceDownTarget(this.target)\n            moveable && (this.moving = true)\n        } else {\n            if (pointType.includes('rotate') || this.isHoldRotateKey(e) || !resizeable) {\n                rotateable && (this.rotating = true)\n                if (pointType === 'resize-rotate') resizeable && (this.resizing = true)\n                else if (point.name === 'resize-line') skewable && (this.skewing = true), this.rotating = false\n            } else if (pointType === 'resize') resizeable && (this.resizing = true)\n            if (pointType === 'skew') skewable && (this.skewing = true)\n        }\n\n        this.onTransformStart(e)\n    }\n\n    public onDrag(e: DragEvent): void {\n        const { transformTool, moving, resizing, rotating, skewing } = this\n        if (moving) {\n            transformTool.onMove(e)\n        } else if (resizing || rotating || skewing) {\n            const point = e.current as IEditPoint\n            if (point.pointType) this.enterPoint = point// 防止变化\n            if (rotating) transformTool.onRotate(e)\n            if (resizing) transformTool.onScale(e)\n            if (skewing) transformTool.onSkew(e)\n        }\n        updatePointCursor(this, e)\n    }\n\n    public onDragEnd(e: DragEvent): void {\n        this.onTransformEnd(e)\n        this.dragPoint = null\n    }\n\n    // 操作事件共用\n\n    public onTransformStart(e: IUIEvent): void {\n        const { hideOnMove, editBoxType } = this.mergedConfig\n        if (this.moving || this.gesturing) this.editor.opacity = hideOnMove ? 0 : 1 // move\n        if (this.resizing) ResizeEvent.resizingKeys = this.editor.leafList.keys // 记录正在resize中的元素列表\n\n        const { dragStartData, target } = this\n        dragStartData.x = e.x\n        dragStartData.y = e.y\n        dragStartData.totalOffset = getPointData() // 缩放、旋转造成的总偏移量，一般用于手势操作的move纠正\n        dragStartData.point = { x: target.x, y: target.y } // 用于移动\n        dragStartData.bounds = { ...target.getLayoutBounds(editBoxType, 'local') } // 用于resize\n        dragStartData.rotation = target.rotation // 用于旋转\n    }\n\n    public onTransformEnd(e: IUIEvent): void {\n        if (this.canDragLimitAnimate && (e instanceof DragEvent || e instanceof MoveEvent)) this.transformTool.onMove(e)\n        if (this.resizing) ResizeEvent.resizingKeys = null\n\n        this.dragging = this.gesturing = this.moving = this.resizing = this.rotating = this.skewing = false\n        this.editor.opacity = 1\n        this.editor.update() // 移动端手势操作hideOnMove移动需强制更新一次           \n    }\n\n    // 手势控制元素\n\n    public onMove(e: MoveEvent): void {\n        if (this.canGesture && e.moveType !== 'drag') {\n            e.stop()\n            if (isString(this.mergedConfig.moveable)) {\n                this.gesturing = this.moving = true\n                switch (e.type) {\n                    case MoveEvent.START: this.onTransformStart(e); break\n                    case MoveEvent.END: this.onTransformEnd(e); break\n                    default: this.transformTool.onMove(e)\n                }\n            }\n        }\n    }\n\n    public onScale(e: ZoomEvent): void {\n        if (this.canGesture) {\n            e.stop()\n            if (isString(this.mergedConfig.resizeable)) {\n                this.gesturing = this.resizing = true\n                switch (e.type) {\n                    case ZoomEvent.START: this.onTransformStart(e); break\n                    case ZoomEvent.END: this.onTransformEnd(e); break\n                    default: this.transformTool.onScale(e)\n                }\n            }\n        }\n    }\n\n    public onRotate(e: RotateEvent): void {\n        if (this.canGesture) {\n            e.stop()\n            if (isString(this.mergedConfig.rotateable)) {\n                this.gesturing = this.rotating = true\n                switch (e.type) {\n                    case ZoomEvent.START: this.onTransformStart(e); break\n                    case ZoomEvent.END: this.onTransformEnd(e); break\n                    default: this.transformTool.onRotate(e)\n                }\n            }\n        }\n    }\n\n    // 键盘\n\n    public isHoldRotateKey(e: IUIEvent): boolean { // 按住ctrl在控制点上变旋转功能\n        const { rotateKey } = this.mergedConfig\n        if (rotateKey) return e.isHoldKeys(rotateKey)\n        return e.metaKey || e.ctrlKey\n    }\n\n    protected onKey(e: KeyEvent): void {\n        updatePointCursor(this, e)\n    }\n\n    public onArrow(e: IKeyEvent): void {\n        if (this.canUse) {\n            let x = 0, y = 0\n            switch (e.code) {\n                case 'ArrowDown':\n                    y = 1\n                    break\n                case 'ArrowUp':\n                    y = -1\n                    break\n                case 'ArrowLeft':\n                    x = -1\n                    break\n                case 'ArrowRight':\n                    x = 1\n            }\n            if (x || y) {\n                const { keyEvent, arrowStep, arrowFastStep } = this.mergeConfig\n                if (keyEvent) {\n                    const step = e.shiftKey ? arrowFastStep : arrowStep\n                    this.transformTool.move(x * step, y * step)\n                }\n            }\n        }\n    }\n\n\n    protected onDoubleTap(e: PointerEvent): void {\n        const { openInner, preventEditInner } = this.mergeConfig\n        if (openInner === 'double' && !preventEditInner) this.openInner(e)\n    }\n\n    protected onLongPress(e: PointerEvent): void {\n        const { openInner, preventEditInner } = this.mergeConfig\n        if (openInner === 'long' && preventEditInner) this.openInner(e)\n    }\n\n    protected openInner(e: PointerEvent): void {\n        const { editor, target } = this\n        if (this.single) {\n            if (target.locked) return\n            if (target.isBranch && !target.editInner) {\n                if ((target as IBox).textBox) {\n                    const { children } = target\n                    const find = children.find(item => item.editable && item instanceof Text) || children.find(item => item instanceof Text)\n                    if (find) return editor.openInnerEditor(find) // 文本Box直接进入编辑状态，如便利贴文本\n                }\n\n                editor.openGroup(target as IGroup)\n                editor.target = editor.selector.findDeepOne(e)\n            } else {\n                editor.openInnerEditor()\n            }\n        }\n    }\n\n\n    public listenPointEvents(point: IEditPoint, type: IEditPointType, direction: Direction9): void {\n        point.direction = direction\n        point.pointType = type\n\n        this.__eventIds.push(\n            point.on_([\n                [DragEvent.START, this.onDragStart, this],\n                [DragEvent.DRAG, this.onDrag, this],\n                [DragEvent.END, this.onDragEnd, this],\n\n                [PointerEvent.ENTER, (e: PointerEvent) => { this.enterPoint = point, updatePointCursor(this, e) }],\n                [PointerEvent.LEAVE, () => { this.enterPoint = null }]\n            ])\n        )\n    }\n\n    protected __listenEvents(): void {\n        const { rect, editor, __eventIds: events } = this\n\n        events.push(\n            rect.on_([\n                [PointerEvent.DOUBLE_TAP, this.onDoubleTap, this],\n                [PointerEvent.LONG_PRESS, this.onLongPress, this]\n            ])\n        )\n\n        this.waitLeafer(() => {\n            events.push(\n                editor.app.on_([\n                    [[KeyEvent.HOLD, KeyEvent.UP], this.onKey, this],\n                    [KeyEvent.DOWN, this.onArrow, this],\n\n                    [[MoveEvent.START, MoveEvent.BEFORE_MOVE, MoveEvent.END], this.onMove, this, true],\n                    [[ZoomEvent.START, ZoomEvent.BEFORE_ZOOM, ZoomEvent.END], this.onScale, this, true],\n                    [[RotateEvent.START, RotateEvent.BEFORE_ROTATE, RotateEvent.END], this.onRotate, this, true]\n                ])\n            )\n        })\n    }\n\n    protected __removeListenEvents(): void {\n        this.off_(this.__eventIds)\n    }\n\n    public destroy(): void {\n        this.editor = null\n        this.__removeListenEvents()\n        super.destroy()\n    }\n\n}","import { IBox, ILeaferCanvas, IRenderOptions } from '@leafer-ui/interface'\nimport { UI } from '@leafer-ui/draw'\n\nimport { IEditor } from '@leafer-in/interface'\n\nconst bigBounds = { x: 0, y: 0, width: 100000, height: 100000 }\n\nexport class EditMask extends UI {\n\n    public editor: IEditor\n\n    constructor(editor: IEditor) {\n        super()\n        this.editor = editor\n        this.hittable = false\n        this.visible = 0\n    }\n\n    override __updateWorldBounds(): void {\n        Object.assign(this.__local, bigBounds) // 强制修改渲染包围盒\n        Object.assign(this.__world, bigBounds)\n    }\n\n    public __draw(canvas: ILeaferCanvas, options: IRenderOptions): void {\n\n        const { editor } = this, { mask } = editor.mergedConfig\n        if (mask && editor.editing) {\n            canvas.fillWorld(canvas.bounds, mask === true ? 'rgba(0,0,0,0.8)' : mask)\n            if (options.bounds && !options.bounds.hit(editor.editBox.rect.__world, options.matrix)) return\n\n            canvas.saveBlendMode('destination-out')\n            options = { ...options, shape: true }\n            editor.list.forEach(item => {\n                item.__render(canvas, options)\n                const { parent } = item\n                if (parent && (parent as IBox).textBox) parent.__renderShape(canvas, options) // 文本框\n            })\n            canvas.restoreBlendMode()\n        }\n    }\n\n    public destroy(): void {\n        this.editor = null\n        super.destroy()\n    }\n\n}\n","const filterStyle = `\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" result=\"shape\"/>`\n\n\nexport const resizeSVG = `\n<svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#f)\">\n<g transform=\"rotate({{rotation}},12,12)\">\n<path d=\"M7.5 8.0H8.5V5.9L6.8 7.2L7.5 8.0ZM3 11.4L2.3 10.6L1.3 11.4L2.3 12.2L3 11.4ZM7.5 10.4H6.5V11.4H7.5V10.4ZM16.5 10.4V11.4H17.5V10.4H16.5ZM16.5 8.0L17.1 7.2L15.5 5.9V8.0H16.5ZM21 11.4L21.6 12.2L22.6 11.4L21.6 10.6L21 11.4ZM16.5 14.9H15.5V16.9L17.1 15.7L16.5 14.9ZM16.5 12.4H17.5V11.4H16.5V12.4ZM7.5 12.4V11.4H6.5V12.4H7.5ZM7.5 14.9L6.8 15.7L8.5 16.9V14.9H7.5ZM6.8 7.2L2.3 10.6L3.6 12.2L8.1 8.7L6.8 7.2ZM8.5 10.4V8.0H6.5V10.4H8.5ZM16.5 9.4H7.5V11.4H16.5V9.4ZM17.5 10.4V8.0H15.5V10.4H17.5ZM15.8 8.7L20.3 12.2L21.6 10.6L17.1 7.2L15.8 8.7ZM20.3 10.6L15.8 14.1L17.1 15.7L21.6 12.2L20.3 10.6ZM17.5 14.9V12.4H15.5V14.9H17.5ZM7.5 13.4H16.5V11.4H7.5V13.4ZM8.5 14.9V12.4H6.5V14.9H8.5ZM2.3 12.2L6.8 15.7L8.1 14.1L3.6 10.6L2.3 12.2Z\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" d=\"M3 11.4L7.5 8.0V10.4H16.5V8.0L21 11.4L16.5 14.9V12.4H7.5V14.9L3 11.4Z\" fill=\"black\"/>\n</g>\n</g>\n<defs>\n<filter id=\"f\" x=\"-1.6\" y=\"3.9\" width=\"27.2\" height=\"16.9\" filterUnits=\"userSpaceOnUse\">\n${filterStyle}\n</filter>\n</defs>\n</svg>\n`\n\nexport const rotateSVG = `\n<svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#f)\">\n<g transform=\"rotate(135,12,12),rotate({{rotation}},12,12)\">\n<path d=\"M20.4 8H21.4L20.8 7.1L17.3 2.6L17 2.1L16.6 2.6L13.1 7.1L12.5 8H13.5H15.4C14.9 11.8 11.8 14.9 8 15.4V13.5V12.5L7.1 13.1L2.6 16.6L2.1 17L2.6 17.3L7.1 20.8L8 21.4V20.4V18.4C13.5 17.9 17.9 13.5 18.4 8H20.4Z\" stroke=\"white\"/>\n<path fill-rule=\"evenodd\" d=\"M17 3L20.4 7.5H17.9C17.7 13.1 13.1 17.7 7.5 17.9V20.4L3 17L7.5 13.5V15.9C12.0 15.7 15.7 12.0 15.9 7.5H13.5L17 3Z\" fill=\"black\"/>\n</g>\n</g>\n<defs>\n<filter id=\"f\" x=\"-1.6\" y=\"-0.6\" width=\"27.1\" height=\"27.1\" filterUnits=\"userSpaceOnUse\">\n${filterStyle}\n</filter>\n</defs>\n</svg>\n`\n\nexport const skewSVG = `\n<svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#f)\">\n<g transform=\"rotate(90,12,12),rotate({{rotation}},12,12)\">\n<path d=\"M21 10.4L21 11.4L23.8 11.4L21.6 9.6L21 10.4ZM17 10.4V11.4L17 11.4L17 10.4ZM15.5 6L16.1 5.2L14.5 3.9V6H15.5ZM15.5 8.4V9.4H16.5V8.4H15.5ZM6 8.4V7.4H5V8.4H6ZM6 10.4H5V11.4H6V10.4ZM7 14.4V13.4L7 13.4L7 14.4ZM3 14.4L3 13.4L0.1 13.4L2.3 15.2L3 14.4ZM8.5 18.9L7.8 19.7L9.5 21.0V18.9H8.5ZM8.5 16.4V15.4H7.5V16.4H8.5ZM19 16.4V17.4H20V16.4H19ZM19 14.4H20V13.4H19V14.4ZM21 9.4L17 9.4L17 11.4L21 11.4L21 9.4ZM14.8 6.7L20.3 11.2L21.6 9.6L16.1 5.2L14.8 6.7ZM16.5 8.4V6H14.5V8.4H16.5ZM6 9.4H15.5V7.4H6V9.4ZM7 10.4V8.4H5V10.4H7ZM15.5 9.4H6V11.4H15.5V9.4ZM17 9.4H15.5V11.4H17V9.4ZM7 15.4H8.5V13.4H7V15.4ZM3 15.4L7 15.4L7 13.4L3 13.4L3 15.4ZM9.1 18.1L3.6 13.6L2.3 15.2L7.8 19.7L9.1 18.1ZM7.5 16.4V18.9H9.5V16.4H7.5ZM19 15.4H8.5V17.4H19V15.4ZM18 14.4V16.4H20V14.4H18ZM8.5 15.4H19V13.4H8.5V15.4Z\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" d=\"M17 10.4L21 10.4L15.5 6V8.4H6V10.4H15.5H17ZM8.5 14.4H7L3 14.4L8.5 18.9V16.4H19V14.4H8.5Z\" fill=\"black\"/>\n</g>\n</g>\n<defs>\n<filter x=\"-2.8\" y=\"1.9\" width=\"29.6\" height=\"23.1\" filterUnits=\"userSpaceOnUse\" >\n${filterStyle}\n</filter>\n</defs>\n</svg>\n`","import { IEditorConfig } from '@leafer-in/interface'\nimport { resizeSVG, rotateSVG, skewSVG } from './svg'\n\n\nexport const config: IEditorConfig = {\n    editSize: 'size',\n    keyEvent: true,\n\n    stroke: '#836DFF',\n    strokeWidth: 2,\n\n    pointFill: '#FFFFFF',\n    pointSize: 10,\n    pointRadius: 16,\n\n    rotateGap: 45,\n\n    arrowStep: 1,\n    arrowFastStep: 10,\n\n    buttonsDirection: 'bottom',\n    buttonsMargin: 12,\n\n    hideOnSmall: true,\n\n    moveCursor: 'move',\n    resizeCursor: { url: resizeSVG, x: 12, y: 12 },\n    rotateCursor: { url: rotateSVG, x: 12, y: 12 },\n    skewCursor: { url: skewSVG, x: 12, y: 12 },\n\n    selector: true,\n    editBox: true,\n    editBoxType: 'box',\n    hover: true,\n    select: 'press',\n    openInner: 'double',\n    multipleSelect: true,\n    boxSelect: true,\n\n    moveable: true,\n    resizeable: true,\n    flipable: true,\n    rotateable: true,\n    skewable: true\n}","import { ILeaf } from '@leafer-ui/interface'\nimport { Bounds } from '@leafer-ui/draw'\n\nimport { IEditor } from '@leafer-in/interface'\n\n\nconst bounds = new Bounds()\n\nexport function simulate(editor: IEditor) {\n    const { simulateTarget, list } = editor\n    const { zoomLayer } = list[0].leafer // follow zoomLayer zoom / move\n    simulateTarget.safeChange(() => {\n        bounds.setListWithFn(list, (leaf: ILeaf) => leaf.getBounds('box', 'page'))\n        if (bounds.width === 0) bounds.width = 0.1 // fix\n        if (bounds.height === 0) bounds.height = 0.1\n        simulateTarget.reset(bounds.get())\n    })\n    zoomLayer.add(simulateTarget)\n}","import { IGroup, IGroupInputData, ILeaf, IUI } from '@leafer-ui/interface'\nimport { Group, Matrix } from '@leafer-ui/draw'\n\n\nconst order = (a: ILeaf, b: ILeaf) => a.parent.children.indexOf(a) - b.parent.children.indexOf(b)\nconst reverseOrder = (a: ILeaf, b: ILeaf) => b.parent.children.indexOf(b) - a.parent.children.indexOf(a)\n\nexport const EditorHelper = {\n\n    group(list: IUI[], element?: IUI, userGroup?: IGroup | IGroupInputData): IGroup {\n        list.sort(reverseOrder)\n        const { app, parent } = list[0]\n\n        let group: IGroup\n        if (userGroup && (userGroup as IGroup).add) {\n            group = userGroup as IGroup\n        } else {\n            group = new Group(userGroup)\n        }\n\n        parent.addAt(group, parent.children.indexOf(list[0]))\n        list.sort(order)\n\n        const matrx = new Matrix(element.worldTransform)\n        matrx.divideParent(parent.scrollWorldTransform)\n        group.setTransform(matrx)\n        group.editable = true\n        group.hitChildren = false\n\n        app.lockLayout()\n        list.forEach(child => child.dropTo(group))\n        app.unlockLayout()\n\n        return group\n    },\n\n    ungroup(list: IUI[]): IUI[] {\n        const { app } = list[0]\n        const ungroupList: IUI[] = []\n\n        app.lockLayout()\n        list.forEach(leaf => {\n            if (leaf.isBranch) {\n                const { parent, children } = leaf\n                while (children.length) {\n                    ungroupList.push(children[0])\n                    children[0].dropTo(parent, parent.children.indexOf(leaf))\n                }\n                if (leaf.isBranchLeaf) ungroupList.push(leaf)\n                else leaf.remove()\n            } else {\n                ungroupList.push(leaf)\n            }\n        })\n        app.unlockLayout()\n\n        return ungroupList\n    },\n\n    toTop(list: IUI[]): void {\n        list.sort(order)\n        list.forEach(leaf => {\n            if (leaf.parent) leaf.parent.add(leaf)\n        })\n    },\n\n    toBottom(list: IUI[]): void {\n        list.sort(reverseOrder)\n        list.forEach(leaf => {\n            if (leaf.parent) leaf.parent.addAt(leaf, 0)\n        })\n    }\n\n}","import { IObject } from '@leafer-ui/interface'\nimport { Debug } from '@leafer-ui/draw'\n\nimport { IEditTool, IEditor } from '@leafer-in/interface'\n\n\nconst debug = Debug.get('EditToolCreator')\n\nexport function registerEditTool() {\n    return (target: IObject) => {\n        EditToolCreator.register(target)\n    }\n}\n\nexport const registerInnerEditor = registerEditTool\n\nexport const EditToolCreator = {\n\n    list: {} as IObject,\n\n    register(EditTool: IObject, name?: string): void {\n        const { tag } = EditTool.prototype as IEditTool\n        name || (name = tag)\n        list[name] && debug.repeat(name)\n        list[name] = EditTool\n    },\n\n    get(tag: string, editor: IEditor): IEditTool {\n        return new list[tag](editor)\n    }\n\n}\n\nconst { list } = EditToolCreator","import { IInnerEditorEvent, IInnerEditor } from '@leafer-in/interface'\n\nimport { EditorEvent } from './EditorEvent'\nimport { IUI } from '@leafer-ui/interface'\nimport { } from '../tool/InnerEditor'\n\n\nexport class InnerEditorEvent extends EditorEvent implements IInnerEditorEvent {\n\n    static BEFORE_OPEN = 'innerEditor.before_open'\n    static OPEN = 'innerEditor.open'\n\n    static BEFORE_CLOSE = 'innerEditor.before_close'\n    static CLOSE = 'innerEditor.close'\n\n    readonly editTarget: IUI\n    readonly innerEditor: IInnerEditor\n\n    constructor(type: string, data?: IInnerEditorEvent) {\n        super(type, data)\n    }\n\n}","import { IEditorGroupEvent } from '@leafer-in/interface'\n\nimport { EditorEvent } from './EditorEvent'\nimport { IGroup } from '@leafer-ui/interface'\nimport { } from '../tool/InnerEditor'\n\n\nexport class EditorGroupEvent extends EditorEvent implements IEditorGroupEvent {\n\n\n    static BEFORE_GROUP = 'editor.before_group'\n    static GROUP = 'editor.group'\n\n    static BEFORE_UNGROUP = 'editor.before_ungroup'\n    static UNGROUP = 'editor.ungroup'\n\n    static BEFORE_OPEN = 'editor.before_open_group'\n    static OPEN = 'editor.open_group'\n\n    static BEFORE_CLOSE = 'editor.before_close_group'\n    static CLOSE = 'editor.close_group'\n\n    readonly editTarget: IGroup\n\n    constructor(type: string, data?: IEditorGroupEvent) {\n        super(type, data)\n    }\n\n}","import { IObject, IFunction, IMatrix } from '@leafer-ui/interface'\nimport { LeafHelper, Matrix, PropertyEvent, Rect } from '@leafer-ui/draw'\n\nimport { IEditor, ISimulateElement } from '@leafer-in/interface'\n\n\nconst { updateMatrix } = LeafHelper\nconst checkMap: IObject = { x: 1, y: 1, scaleX: 1, scaleY: 1, rotation: 1, skewX: 1, skewY: 1 }, origin = 'top-left'\n\nexport class SimulateElement extends Rect implements ISimulateElement {\n\n    public get __tag() { return 'SimulateElement' }\n\n    public checkChange = true\n\n    public canChange = true\n\n    public changedTransform: IMatrix\n\n\n    constructor(editor: IEditor) {\n        super()\n\n        this.visible = this.hittable = false\n        this.skipJSON = true\n\n        this.on(PropertyEvent.CHANGE, (event: PropertyEvent) => {\n\n            if (this.checkChange && checkMap[event.attrName]) {\n\n                const { attrName, newValue, oldValue } = event\n                const addValue = attrName[0] === 's' ? (<number>newValue || 1) / (<number>oldValue || 1) : (<number>newValue || 0) - (<number>oldValue || 0)\n\n                this.canChange = false\n\n                const data: IObject = this.__\n\n                // old matrix\n                data[attrName] = oldValue\n                updateMatrix(this.parent)\n                updateMatrix(this)\n\n                const oldMatrix = new Matrix(this.__world)\n\n                // new matrix\n                data[attrName] = newValue\n                this.__layout.rotationChange()\n                updateMatrix(this)\n\n                this.changedTransform = new Matrix(this.__world).divide(oldMatrix) // world change transform\n\n                switch (attrName) {\n                    case 'x':\n                        editor.move(addValue, 0)\n                        break\n                    case 'y':\n                        editor.move(0, addValue)\n                        break\n                    case 'rotation':\n                        editor.rotateOf(origin, addValue)\n                        break\n                    case 'scaleX':\n                        editor.scaleOf(origin, addValue, 1)\n                        break\n                    case 'scaleY':\n                        editor.scaleOf(origin, 1, addValue)\n                        break\n                    case 'skewX':\n                        editor.skewOf(origin, addValue, 0)\n                        break\n                    case 'skewY':\n                        editor.skewOf(origin, 0, addValue)\n                }\n\n                this.canChange = true\n\n            }\n        })\n    }\n\n    public safeChange(changeFn: IFunction): void {\n        if (this.canChange) {\n            this.checkChange = false\n            changeFn()\n            this.checkChange = true\n        }\n    }\n}","import { IEditorMoveEvent } from '@leafer-in/interface'\n\nimport { EditorEvent } from './EditorEvent'\n\n\nexport class EditorMoveEvent extends EditorEvent implements IEditorMoveEvent {\n\n    static BEFORE_MOVE = 'editor.before_move'\n    static MOVE = 'editor.move'\n\n    readonly moveX: number\n    readonly moveY: number\n\n    constructor(type: string, data?: IEditorMoveEvent) {\n        super(type, data)\n    }\n\n}","import { IAround, IDragEvent, IMatrixData } from '@leafer-ui/interface'\n\nimport { IEditorScaleEvent } from '@leafer-in/interface'\nimport { Direction9 } from '@leafer-ui/draw'\n\nimport { EditorEvent } from './EditorEvent'\n\n\nexport class EditorScaleEvent extends EditorEvent implements IEditorScaleEvent {\n\n    static BEFORE_SCALE = 'editor.before_scale'\n    static SCALE = 'editor.scale'\n\n    // scaleOf(origin, scaleX, scaleY, resize)\n    readonly scaleX: number\n    readonly scaleY: number\n    readonly transform?: IMatrixData\n\n    readonly drag: IDragEvent\n\n    readonly direction: Direction9\n    readonly lockRatio: boolean\n    readonly around: IAround\n\n    constructor(type: string, data?: IEditorScaleEvent) {\n        super(type, data)\n    }\n\n}","import { IEditorRotateEvent } from '@leafer-in/interface'\n\nimport { EditorEvent } from './EditorEvent'\n\n\nexport class EditorRotateEvent extends EditorEvent implements IEditorRotateEvent {\n\n    static BEFORE_ROTATE = 'editor.before_rotate'\n    static ROTATE = 'editor.rotate'\n\n    // rotateOf(origin, rotation)\n    readonly rotation: number\n\n    constructor(type: string, data?: IEditorRotateEvent) {\n        super(type, data)\n    }\n\n}","import { IEditorSkewEvent } from '@leafer-in/interface'\n\nimport { EditorEvent } from './EditorEvent'\n\n\nexport class EditorSkewEvent extends EditorEvent implements IEditorSkewEvent {\n\n    static BEFORE_SKEW = 'editor.before_skew'\n    static SKEW = 'editor.skew'\n\n    // skewOf(origin, skewX, skewY)\n    readonly skewX: number\n    readonly skewY: number\n\n    constructor(type: string, data?: IEditorSkewEvent) {\n        super(type, data)\n    }\n\n}","import { IEvent, IPointData, IAlign, IAxis, IFunction, IMatrix, IUI } from '@leafer-ui/interface'\nimport { MathHelper, PointHelper, Matrix, LeafHelper, AroundHelper, isObject, isString, isNumber } from '@leafer-ui/draw'\nimport { DragEvent, RotateEvent, ZoomEvent, MoveEvent } from '@leafer-ui/core'\n\nimport { IEditBox, IEditPoint, IEditTool, IEditorScaleEvent, ISimulateElement, IEditorMoveEvent, IEditorRotateEvent, IEditorSkewEvent } from '@leafer-in/interface'\n\nimport { EditorMoveEvent } from '../event/EditorMoveEvent'\nimport { EditorScaleEvent } from '../event/EditorScaleEvent'\nimport { EditorRotateEvent } from '../event/EditorRotateEvent'\nimport { EditorSkewEvent } from '../event/EditorSkewEvent'\n\nimport { EditDataHelper } from '../helper/EditDataHelper'\nimport { ITransformTool } from '@leafer-ui/interface'\n\n\nexport class TransformTool implements ITransformTool { // Editor use\n\n    public editBox: IEditBox\n\n    public editTool?: IEditTool // 可能不存在值\n\n\n    // operate\n\n    public onMove(e: DragEvent | MoveEvent): void {\n\n        const { target, mergeConfig, dragStartData } = this.editBox\n\n        let move: IPointData, { dragLimitAnimate } = mergeConfig\n\n        const isMoveEnd = e.type === MoveEvent.END || e.type === DragEvent.END\n        const axisDrag = isString(target.draggable)\n        const checkLimitMove = !dragLimitAnimate || isMoveEnd || axisDrag\n\n        const total = { x: e.totalX, y: e.totalY }\n\n        if (e instanceof MoveEvent) {\n            PointHelper.move(total, target.getWorldPointByLocal(dragStartData.totalOffset, null, true))\n        }\n\n        if (e.shiftKey) {\n            if (Math.abs(total.x) > Math.abs(total.y)) total.y = 0\n            else total.x = 0\n        }\n\n        move = DragEvent.getValidMove(target, dragStartData.point, total, checkLimitMove)\n\n        if (move.x || move.y) {\n            if (dragLimitAnimate && !axisDrag && isMoveEnd) LeafHelper.animateMove(this as unknown as IUI, move, isNumber(dragLimitAnimate) ? dragLimitAnimate : 0.3)  // 是否进行动画\n            else this.move(move)\n        }\n    }\n\n    public onScale(e: DragEvent | ZoomEvent): void {\n\n        const { target, mergeConfig, single, dragStartData } = this.editBox\n        let { around, lockRatio, flipable, editSize, editBoxType } = mergeConfig, totalMove: IPointData | number\n\n        if (e instanceof ZoomEvent) {\n            if (!around) around = target.getBoxPoint(e)\n            totalMove = e.totalScale\n        } else {\n            totalMove = e.getInnerTotal(target)\n        }\n\n        const { direction } = e.current as IEditPoint\n        if (e.shiftKey || target.lockRatio) lockRatio = true\n\n        const data = EditDataHelper.getScaleData(target, dragStartData.bounds, direction, totalMove, lockRatio, EditDataHelper.getAround(around, e.altKey), flipable, !single || editSize === 'scale', editBoxType)\n\n        const targetX = target.x, targetY = target.y\n\n        if (e instanceof DragEvent && this.editTool && this.editTool.onScaleWithDrag) {\n            data.drag = e\n            this.scaleWithDrag(data)\n        } else {\n            this.scaleOf(data.origin, data.scaleX, data.scaleY)\n        }\n\n        PointHelper.move(dragStartData.totalOffset, target.x - targetX, target.y - targetY)\n    }\n\n    public onRotate(e: DragEvent | RotateEvent): void {\n\n        const { target, mergeConfig, dragStartData } = this.editBox\n        const { around, rotateAround, rotateGap, diagonalRotateKey, editBoxType } = mergeConfig\n        const { direction } = e.current as IEditPoint\n\n        let origin: IPointData, rotation: number\n\n        if (e instanceof RotateEvent) {\n\n            rotation = e.rotation\n            origin = rotateAround ? AroundHelper.getPoint(rotateAround, target.boxBounds) : target.getBoxPoint(e)\n\n        } else {\n\n            const isDiagonalRotate = diagonalRotateKey ? e.isHoldKeys(diagonalRotateKey) : e.shiftKey // 对角旋转\n\n            const data = EditDataHelper.getRotateData(target, direction, e, dragStartData, isDiagonalRotate ? null : (rotateAround || target.around || target.origin || around || 'center'), editBoxType)\n            rotation = dragStartData.rotation + data.rotation - target.rotation\n            origin = data.origin\n\n        }\n\n        rotation = MathHelper.float(MathHelper.getGapRotation(rotation, rotateGap, target.rotation), 2)\n        if (!rotation) return\n\n        const targetX = target.x, targetY = target.y\n\n        this.rotateOf(origin, rotation)\n\n        PointHelper.move(dragStartData.totalOffset, target.x - targetX, target.y - targetY)\n    }\n\n    public onSkew(e: DragEvent): void {\n\n        const { target, mergeConfig } = this.editBox\n        const { around, editBoxType } = mergeConfig\n\n        const { origin, skewX, skewY } = EditDataHelper.getSkewData(target, (e.current as IEditPoint).direction, e.getInnerMove(target), EditDataHelper.getAround(around, e.altKey), editBoxType)\n        if (!skewX && !skewY) return\n\n        this.skewOf(origin, skewX, skewY)\n    }\n\n\n    // transform\n\n    public move(x: number | IPointData, y = 0): void {\n        if (!this.checkTransform('moveable')) return\n        if (isObject(x)) y = x.y, x = x.x\n\n        const { target, mergeConfig, single, editor } = this.editBox\n        const { beforeMove } = mergeConfig\n        if (beforeMove) {\n            const check = beforeMove({ target, x, y })\n            if (isObject(check)) x = check.x, y = check.y\n            else if (check === false) return\n        }\n\n        const world = target.getWorldPointByLocal({ x, y }, null, true)\n        if (!single) (target as ISimulateElement).safeChange(() => target.move(x, y))\n        const data: IEditorMoveEvent = { target, editor, moveX: world.x, moveY: world.y }\n\n        this.emitEvent(new EditorMoveEvent(EditorMoveEvent.BEFORE_MOVE, data))\n        const event = new EditorMoveEvent(EditorMoveEvent.MOVE, data)\n        this.doMove(event)\n        this.emitEvent(event)\n    }\n\n    public scaleWithDrag(data: IEditorScaleEvent): void {\n        if (!this.checkTransform('resizeable')) return\n\n        const { target, mergeConfig, editor } = this.editBox\n        const { beforeScale } = mergeConfig\n        if (beforeScale) {\n            const { origin, scaleX, scaleY, drag } = data\n            const check = beforeScale({ target, drag, origin, scaleX, scaleY })\n            if (check === false) return\n        }\n\n        data = { ...data, target, editor, worldOrigin: target.getWorldPoint(data.origin) }\n\n        this.emitEvent(new EditorScaleEvent(EditorScaleEvent.BEFORE_SCALE, data))\n        const event = new EditorScaleEvent(EditorScaleEvent.SCALE, data)\n        this.editTool.onScaleWithDrag(event)\n        this.emitEvent(event)\n    }\n\n    public scaleOf(origin: IPointData | IAlign, scaleX: number, scaleY = scaleX, _resize?: boolean): void {\n        if (!this.checkTransform('resizeable')) return\n\n        const { target, mergeConfig, single, editor } = this.editBox\n\n        const { beforeScale, editBoxType } = mergeConfig\n        if (beforeScale) {\n            const check = beforeScale({ target, origin, scaleX, scaleY })\n            if (isObject(check)) scaleX = check.scaleX, scaleY = check.scaleY\n            else if (check === false) return\n        }\n\n        const worldOrigin = this.getWorldOrigin(origin)\n        const transform = !single && this.getChangedTransform(() => (target as ISimulateElement).safeChange(() => target.scaleOf(origin, scaleX, scaleY)))\n        const data: IEditorScaleEvent = { target, editor, worldOrigin, scaleX, scaleY, transform, editBoxType }\n\n        this.emitEvent(new EditorScaleEvent(EditorScaleEvent.BEFORE_SCALE, data))\n        const event = new EditorScaleEvent(EditorScaleEvent.SCALE, data)\n        this.doScale(event)\n        this.emitEvent(event)\n    }\n\n    public flip(axis: IAxis): void {\n        if (!this.checkTransform('resizeable')) return\n\n        const { target, single, editor } = this.editBox\n\n        const worldOrigin = this.getWorldOrigin('center')\n        const transform = !single ? this.getChangedTransform(() => (target as ISimulateElement).safeChange(() => target.flip(axis))) : new Matrix(LeafHelper.getFlipTransform(target, axis))\n        const data: IEditorScaleEvent = { target, editor, worldOrigin, scaleX: axis === 'x' ? -1 : 1, scaleY: axis === 'y' ? -1 : 1, transform }\n\n        this.emitEvent(new EditorScaleEvent(EditorScaleEvent.BEFORE_SCALE, data))\n        const event = new EditorScaleEvent(EditorScaleEvent.SCALE, data)\n        this.doScale(event)\n        this.emitEvent(event)\n    }\n\n    public rotateOf(origin: IPointData | IAlign, rotation: number): void {\n        if (!this.checkTransform('rotateable')) return\n\n        const { target, mergeConfig, single, editor } = this.editBox\n\n        const { beforeRotate, editBoxType } = mergeConfig\n        if (beforeRotate) {\n            const check = beforeRotate({ target, origin, rotation })\n            if (isNumber(check)) rotation = check\n            else if (check === false) return\n        }\n\n        const worldOrigin = this.getWorldOrigin(origin)\n        const transform = !single && this.getChangedTransform(() => (target as ISimulateElement).safeChange(() => target.rotateOf(origin, rotation)))\n        const data: IEditorRotateEvent = { target, editor, worldOrigin, rotation, transform, editBoxType }\n\n        this.emitEvent(new EditorRotateEvent(EditorRotateEvent.BEFORE_ROTATE, data))\n        const event = new EditorRotateEvent(EditorRotateEvent.ROTATE, data)\n        this.doRotate(event)\n        this.emitEvent(event)\n    }\n\n    public skewOf(origin: IPointData | IAlign, skewX: number, skewY = 0, _resize?: boolean): void {\n        if (!this.checkTransform('skewable')) return\n\n        const { target, mergeConfig, single, editor } = this.editBox\n\n        const { beforeSkew, editBoxType } = mergeConfig\n        if (beforeSkew) {\n            const check = beforeSkew({ target, origin, skewX, skewY })\n            if (isObject(check)) skewX = check.skewX, skewY = check.skewY\n            else if (check === false) return\n        }\n\n        const worldOrigin = this.getWorldOrigin(origin)\n        const transform = !single && this.getChangedTransform(() => (target as ISimulateElement).safeChange(() => target.skewOf(origin, skewX, skewY)))\n        const data: IEditorSkewEvent = { target, editor, worldOrigin, skewX, skewY, transform, editBoxType }\n\n        this.emitEvent(new EditorSkewEvent(EditorSkewEvent.BEFORE_SKEW, data))\n        const event = new EditorSkewEvent(EditorSkewEvent.SKEW, data)\n        this.doSkew(event)\n        this.emitEvent(event)\n    }\n\n\n    // do\n\n    protected doMove(event: IEditorMoveEvent) {\n        this.editTool.onMove(event)\n    }\n\n    protected doScale(event: IEditorScaleEvent): void {\n        this.editTool.onScale(event)\n    }\n\n    protected doRotate(event: IEditorRotateEvent): void {\n        this.editTool.onRotate(event)\n    }\n\n    protected doSkew(event: IEditorSkewEvent): void {\n        this.editTool.onSkew(event)\n    }\n\n    // helper\n\n    public checkTransform(type: 'moveable' | 'resizeable' | 'rotateable' | 'skewable'): boolean {\n        const { target, mergeConfig } = this.editBox\n        return target && !target.locked && mergeConfig[type] as boolean\n    }\n\n    protected getWorldOrigin(origin: IPointData | IAlign): IPointData {\n        const { target } = this.editBox\n        return target.getWorldPoint(LeafHelper.getInnerOrigin(target, origin))\n    }\n\n    protected getChangedTransform(func: IFunction): IMatrix {\n\n        const { target, single } = this.editBox\n        if (!single && !(target as ISimulateElement).canChange) return (target as ISimulateElement).changedTransform\n\n        const oldMatrix = new Matrix(target.worldTransform)\n        func()\n        return new Matrix(target.worldTransform).divide(oldMatrix) // world change transform\n    }\n\n    // need rewrite\n    public emitEvent(event?: IEvent, capture?: boolean): void {\n        this.editBox.editor.emitEvent(event, capture)\n    }\n\n}","import { IGroupInputData, IUI, IEventListenerId, IPointData, ILeafList, IEditSize, IGroup, IObject, IAlign, IAxis, IFunction, IMatrix, IApp, ILeaferMode } from '@leafer-ui/interface'\nimport { Group, DataHelper, LeafList, RenderEvent, LeafHelper, Direction9, Plugin, isString, PropertyEvent, LeaferEvent, isArray } from '@leafer-ui/draw'\nimport { DragEvent, RotateEvent, ZoomEvent, MoveEvent, useModule } from '@leafer-ui/core'\n\nimport { IEditBox, IEditPoint, IEditor, IEditorConfig, IEditTool, IEditorScaleEvent, IInnerEditor, ISimulateElement } from '@leafer-in/interface'\n\nimport { EditSelect } from './display/EditSelect'\nimport { EditBox } from './display/EditBox'\nimport { EditMask } from './display/EditMask'\n\nimport { config } from './config'\n\nimport { onTarget, onHover } from './editor/target'\nimport { targetAttr, mergeConfigAttr } from './decorator/data'\nimport { EditorHelper } from './helper/EditorHelper'\nimport { simulate } from './editor/simulate'\nimport { EditToolCreator } from './tool/EditToolCreator'\nimport { InnerEditorEvent } from './event/InnerEditorEvent'\nimport { EditorGroupEvent } from './event/EditorGroupEvent'\nimport { SimulateElement } from './display/SimulateElement'\nimport { TransformTool } from './tool/TransformTool'\n\n@useModule(TransformTool, ['editBox', 'editTool', 'emitEvent'])\nexport class Editor extends Group implements IEditor {\n\n    public config: IEditorConfig\n\n    @mergeConfigAttr()\n    readonly mergeConfig: IEditorConfig\n    readonly mergedConfig: IEditorConfig\n\n    @targetAttr(onTarget)\n    public target?: IUI | IUI[]\n\n    @targetAttr(onHover)\n    public hoverTarget?: IUI\n\n    public dimTarget?: IGroup | IGroup[] // 需要淡化的容器\n\n    // 列表\n\n    public leafList: ILeafList = new LeafList() // from target\n    public get list(): IUI[] { return this.leafList.list as IUI[] }\n    public get dragHoverExclude(): IUI[] { return [this.editBox.rect] }\n    public openedGroupList: ILeafList = new LeafList()\n\n    // 状态\n\n    public get editing(): boolean { return !!this.list.length }\n    public innerEditing: boolean\n    public get groupOpening(): boolean { return !!this.openedGroupList.length }\n    public resizeDirection?: Direction9\n\n    public get multiple(): boolean { return this.list.length > 1 }\n    public get single(): boolean { return this.list.length === 1 }\n\n    public get dragPoint(): IEditPoint { return this.editBox.dragPoint }\n\n    public get dragging(): boolean { return this.editBox.dragging }\n    public get gesturing(): boolean { return this.editBox.gesturing } // 手势操作元素中\n\n    public get moving(): boolean { return this.editBox.moving }\n    public get resizing(): boolean { return this.editBox.resizing }\n    public get rotating(): boolean { return this.editBox.rotating }\n    public get skewing(): boolean { return this.editBox.skewing }\n\n    // 组件\n\n    public get element() { return this.multiple ? this.simulateTarget : this.list[0] as ISimulateElement }\n    public simulateTarget: ISimulateElement = new SimulateElement(this)\n\n    public editBox: IEditBox = new EditBox(this)\n    public get buttons() { return this.editBox.buttons }\n\n    public editTool?: IEditTool\n\n    public innerEditor?: IInnerEditor\n    public editToolList: IObject = {}\n\n    public selector: EditSelect = new EditSelect(this)\n    public editMask: EditMask = new EditMask(this)\n\n    public hasDimOthers?: boolean\n\n    public get targetLeafer() { const first = this.list[0]; return first && first.leafer }\n    public targetChanged: boolean\n    public targetEventIds: IEventListenerId[] = []\n\n\n    constructor(userConfig?: IEditorConfig, data?: IGroupInputData) {\n        super(data)\n        let mergedConfig: IEditorConfig = DataHelper.clone(config)\n        if (userConfig) mergedConfig = DataHelper.default(userConfig, mergedConfig)\n        this.mergedConfig = this.config = mergedConfig\n\n        this.addMany(this.editMask, this.selector, this.editBox)\n        if (!Plugin.has('resize')) this.config.editSize = 'scale'\n    }\n\n    // select \n\n    public select(target: IUI | IUI[]): void {\n        this.target = target\n    }\n\n    public cancel(): void {\n        this.target = null\n    }\n\n    // item\n\n    public hasItem(item: IUI): boolean {\n        return this.leafList.has(item)\n    }\n\n    public getItem(index?: number): IUI {\n        return this.list[index || 0]\n    }\n\n    public addItem(item: IUI): void {\n        if (!this.hasItem(item) && !item.locked) this.leafList.add(item), this.target = this.leafList.list as IUI[]\n    }\n\n    public removeItem(item: IUI): void {\n        if (this.hasItem(item)) this.leafList.remove(item), this.target = this.leafList.list as IUI[]\n    }\n\n    public shiftItem(item: IUI): void {\n        this.hasItem(item) ? this.removeItem(item) : this.addItem(item)\n    }\n\n    // 淡化 / 突出\n\n    public setDimOthers(value: boolean | number, attrName: 'bright' | 'dim' = 'dim', list?: IUI[]): void {\n        if (!list) {\n            const { dimTarget, targetLeafer } = this\n            list = dimTarget ? (isArray(dimTarget) ? dimTarget : [dimTarget]) : [targetLeafer]\n        }\n        if (list[0] && list[0][attrName] !== (value || false)) list.forEach(item => DataHelper.stintSet(item, attrName, value))\n    }\n\n    public setBright(value: boolean): void {\n        this.setDimOthers(value, 'bright', this.list)\n    }\n\n    public cancelDimOthers(): void {\n        this.setDimOthers(false)\n        this.setBright(false)\n        this.hasDimOthers = undefined\n    }\n\n    // update\n\n    public update(): void {\n        if (this.editing) {\n            if (!this.element.parent) return this.cancel()\n            if (this.innerEditing) this.innerEditor.update()\n            this.editTool.update()\n            this.selector.update()\n        }\n    }\n\n    public updateEditBox(): void {\n        if (this.multiple) simulate(this)\n        this.update()\n    }\n\n\n    // editTool\n\n    public getEditTool(name: string): IEditTool {\n        return this.editToolList[name] = this.editToolList[name] || EditToolCreator.get(name, this)\n    }\n\n    public updateEditTool(): void {\n        this.unloadEditTool()\n\n        if (this.editing) {\n            const target = this.element\n            let name = target.editOuter || 'EditTool'\n\n            const { beforeEditOuter } = this.mergeConfig\n            if (beforeEditOuter) {\n                const check = beforeEditOuter({ target, name })\n                if (isString(check)) name = check\n                else if (check === false) return\n            }\n\n            if (EditToolCreator.list[name]) {\n                const tool = this.editTool = this.getEditTool(name)\n                this.editBox.load()\n                tool.load()\n                this.update()\n            }\n        }\n    }\n\n    public unloadEditTool(): void {\n        let tool = this.editTool\n        if (tool) {\n            this.editBox.unload()\n            tool.unload()\n            this.editTool = null\n        }\n    }\n\n\n    // get\n\n    public getEditSize(_ui: IUI): IEditSize {\n        return this.mergeConfig.editSize\n    }\n\n\n    // TransformTool will rewrite -----\n\n    // operate \n\n    public onMove(_e: DragEvent | MoveEvent): void { }\n\n    public onScale(_e: DragEvent | ZoomEvent): void { }\n\n    public onRotate(_e: DragEvent | RotateEvent): void { }\n\n    public onSkew(_e: DragEvent): void { }\n\n\n    // transform\n\n    public move(_x: number | IPointData, _y = 0): void { }\n\n    public scaleWithDrag(_data: IEditorScaleEvent): void { }\n\n    override scaleOf(_origin: IPointData | IAlign, scaleX: number, _scaleY = scaleX, _resize?: boolean): void { }\n\n    override flip(_axis: IAxis): void { }\n\n    override rotateOf(_origin: IPointData | IAlign, _rotation: number): void { }\n\n    override skewOf(_origin: IPointData | IAlign, _skewX: number, _skewY = 0, _resize?: boolean): void { }\n\n    public checkTransform(_type: 'moveable' | 'resizeable' | 'rotateable' | 'skewable'): boolean { return undefined }\n\n    protected getWorldOrigin(_origin: IPointData | IAlign): IPointData { return undefined }\n\n    protected getChangedTransform(_func: IFunction): IMatrix { return undefined }\n\n    // --------\n\n\n    // group\n\n    public group(userGroup?: IGroup | IGroupInputData): IGroup {\n        if (this.multiple) {\n            this.emitGroupEvent(EditorGroupEvent.BEFORE_GROUP)\n            this.target = EditorHelper.group(this.list, this.element, userGroup)\n            this.emitGroupEvent(EditorGroupEvent.GROUP, this.target as IGroup)\n        }\n        return this.target as IGroup\n    }\n\n    public ungroup(): IUI[] {\n        const { list } = this\n        if (list.length) {\n            list.forEach(item => item.isBranch && this.emitGroupEvent(EditorGroupEvent.BEFORE_UNGROUP, item as IGroup))\n            this.target = EditorHelper.ungroup(list)\n            list.forEach(item => item.isBranch && this.emitGroupEvent(EditorGroupEvent.UNGROUP, item as IGroup))\n        }\n        return this.list\n    }\n\n    public openGroup(group: IGroup): void {\n        this.emitGroupEvent(EditorGroupEvent.BEFORE_OPEN, group)\n        this.openedGroupList.add(group)\n        group.hitChildren = true\n        this.emitGroupEvent(EditorGroupEvent.OPEN, group)\n    }\n\n    public closeGroup(group: IGroup): void {\n        this.emitGroupEvent(EditorGroupEvent.BEFORE_CLOSE, group)\n        this.openedGroupList.remove(group)\n        group.hitChildren = false\n        this.emitGroupEvent(EditorGroupEvent.CLOSE, group)\n    }\n\n    public checkOpenedGroups(): void {\n        const opened = this.openedGroupList\n        if (opened.length) {\n            let { list } = opened\n            if (this.editing) list = [], opened.forEach(item => this.list.every(leaf => !LeafHelper.hasParent(leaf, item)) && list.push(item))\n            list.forEach(item => this.closeGroup(item as IGroup))\n        }\n        if (this.editing && !this.selector.dragging) this.checkDeepSelect()\n    }\n\n    public checkDeepSelect(): void {\n        let parent: IGroup, { list } = this\n        for (let i = 0; i < list.length; i++) {\n            parent = list[i].parent\n            while (parent && !parent.hitChildren) {\n                this.openGroup(parent)\n                parent = parent.parent\n            }\n        }\n    }\n\n    public emitGroupEvent(type: string, group?: IGroup): void {\n        const event = new EditorGroupEvent(type, { editTarget: group })\n        this.emitEvent(event)\n        if (group) group.emitEvent(event)\n    }\n\n    // inner\n\n    public getInnerEditor(name: string): IInnerEditor {\n        return this.editToolList[name] = this.editToolList[name] || EditToolCreator.get(name, this)\n    }\n\n    public openInnerEditor(target?: IUI, nameOrSelect?: string | boolean, select?: boolean): void {\n        let name: string\n        if (isString(nameOrSelect)) name = nameOrSelect\n        else if (!select) select = nameOrSelect\n\n        if (target && select) this.target = target\n\n        if (this.single) {\n            if (!target) target = this.element\n            if (!name) name = target.editInner\n\n            const { beforeEditInner } = this.mergeConfig\n            if (beforeEditInner) {\n                const check = beforeEditInner({ target, name })\n                if (isString(check)) name = check\n                else if (check === false) return\n            }\n\n            if (EditToolCreator.list[name]) {\n                this.editTool.unload()\n                this.innerEditing = true\n                this.innerEditor = this.getInnerEditor(name)\n                this.innerEditor.editTarget = target\n\n                this.emitInnerEvent(InnerEditorEvent.BEFORE_OPEN)\n                this.innerEditor.load()\n                this.emitInnerEvent(InnerEditorEvent.OPEN)\n            }\n        }\n    }\n\n    public closeInnerEditor(onlyInnerEditor?: boolean): void {\n        if (this.innerEditing) {\n            this.innerEditing = false\n\n            this.emitInnerEvent(InnerEditorEvent.BEFORE_CLOSE)\n            this.innerEditor.unload()\n            this.emitInnerEvent(InnerEditorEvent.CLOSE)\n\n            if (!onlyInnerEditor) this.updateEditTool()\n            this.innerEditor = null\n        }\n    }\n\n    public emitInnerEvent(type: string): void {\n        const { innerEditor } = this, { editTarget } = innerEditor\n        const event = new InnerEditorEvent(type, { editTarget, innerEditor })\n        this.emitEvent(event)\n        editTarget.emitEvent(event)\n    }\n\n    // lock\n\n    public lock(): void {\n        this.list.forEach(leaf => leaf.locked = true)\n        this.update()\n    }\n\n    public unlock(): void {\n        this.list.forEach(leaf => leaf.locked = false)\n        this.update()\n    }\n\n    // level\n\n    public toTop(): void {\n        if (this.list.length) {\n            EditorHelper.toTop(this.list)\n            this.leafList.update()\n        }\n    }\n\n    public toBottom(): void {\n        if (this.list.length) {\n            EditorHelper.toBottom(this.list)\n            this.leafList.update()\n        }\n    }\n\n    protected onAppRenderStart(app: IApp): void {\n        if (this.targetChanged = app.children.some(leafer => leafer !== this.leafer && leafer.renderer.changed)) this.editBox.forceRender()\n    }\n\n    protected onRenderStart(): void {\n        if (this.targetChanged) this.update()\n    }\n\n    protected onChildScroll(): void {\n        if (this.multiple) this.updateEditBox()\n    }\n\n    // event \n\n    public listenTargetEvents(): void {\n        if (!this.targetEventIds.length) {\n            const { app, leafer, targetLeafer, editMask } = this\n            this.targetEventIds = [\n                leafer.on_(RenderEvent.START, this.onRenderStart, this),\n                targetLeafer && targetLeafer.on_(PropertyEvent.SCROLL, this.onChildScroll, this),\n                app.on_(RenderEvent.CHILD_START, this.onAppRenderStart, this),\n                app.on_(LeaferEvent.UPDATE_MODE, (data: { mode: ILeaferMode }) => { if (data.mode && data.mode !== 'normal') this.cancel() })\n            ]\n            if (editMask.visible) editMask.forceRender()\n        }\n    }\n\n    public removeTargetEvents(): void {\n        const { targetEventIds, editMask } = this\n        if (targetEventIds.length) {\n            this.off_(targetEventIds)\n            if (editMask.visible) editMask.forceRender()\n        }\n    }\n\n    public destroy(): void {\n        if (!this.destroyed) {\n            this.target = this.hoverTarget = null\n\n            Object.values(this.editToolList).forEach(item => item.destroy())\n            this.simulateTarget.destroy()\n\n            this.editToolList = {}\n            this.simulateTarget = this.editTool = this.innerEditor = null\n\n            super.destroy()\n        }\n    }\n\n}","import { LeafList } from '@leafer-ui/draw'\n\nimport { IEditor, IUI } from '@leafer-in/interface'\n\nimport { simulate } from './simulate'\nimport { EditorEvent } from '../event/EditorEvent'\n\n\nexport function onTarget(editor: IEditor, oldValue: IUI | IUI[]): void {\n    const { target } = editor\n    if (target) {\n        editor.leafList = target instanceof LeafList ? target : new LeafList(target)\n        if (editor.multiple) simulate(editor) // 更新模拟元素\n    } else {\n        editor.simulateTarget.remove()\n        editor.leafList.reset()\n    }\n\n    editor.closeInnerEditor(true)\n    editor.unloadEditTool()\n\n    const data = { editor, value: target, oldValue }\n    editor.emitEvent(new EditorEvent(EditorEvent.SELECT, data))\n    editor.checkOpenedGroups()\n\n    if (editor.editing) {\n        editor.waitLeafer(() => {\n            editor.updateEditTool()\n            editor.listenTargetEvents()\n        })\n    } else {\n        editor.updateEditTool()\n        editor.removeTargetEvents()\n    }\n\n    editor.emitEvent(new EditorEvent(EditorEvent.AFTER_SELECT, data))\n}\n\n\nexport function onHover(editor: IEditor, oldValue: IUI): void {\n    editor.emitEvent(new EditorEvent(EditorEvent.HOVER, { editor, value: editor.hoverTarget, oldValue }))\n}","import { IGroup, IEventListenerId, IUI, IObject, IEditorConfig } from '@leafer-ui/interface'\nimport { IInnerEditor, IEditor, IEditBox, IInnerEditorMode } from '@leafer-in/interface'\n\nimport { Group } from '@leafer-ui/draw'\nimport { EditToolCreator } from './EditToolCreator'\n\nexport class InnerEditor implements IInnerEditor {\n\n    static registerInnerEditor() {\n        EditToolCreator.register(this)\n    }\n\n\n    public get tag() { return 'InnerEditor' }\n\n    public get mode(): IInnerEditorMode { return 'focus' } // 专注模式\n\n    public editTarget: IUI\n\n    public config: IObject\n\n    public editConfig?: IEditorConfig\n\n    public editor: IEditor\n\n    protected _editBox: IEditBox\n    public get editBox(): IEditBox { return this._editBox || this.editor.editBox } // 编辑框，默认为editor.editBox\n    public set editBox(value: IEditBox) { this._editBox = value }\n\n    public view: IGroup\n\n    public eventIds: IEventListenerId[] = []\n\n\n    constructor(editor: IEditor) {\n        this.editor = editor\n        this.create()\n    }\n\n\n    public onCreate(): void { }\n    public create(): void {\n        this.view = new Group()\n        this.onCreate()\n    }\n\n\n    // 状态\n\n    public onLoad(): void { }\n    public load(): void {\n        const { editor } = this\n        if (editor) {\n            if (editor.app && this.mode === 'focus') editor.selector.hittable = editor.app.tree.hitChildren = false\n            this.onLoad()\n        }\n    }\n\n    public onUpdate(): void { }\n    public update(): void { this.onUpdate() }\n\n    public onUnload(): void { }\n    public unload(): void {\n        const { editor } = this\n        if (editor) {\n            if (editor.app && this.mode === 'focus') editor.selector.hittable = editor.app.tree.hitChildren = true\n            this.onUnload()\n        }\n    }\n\n    public onDestroy(): void { }\n    public destroy(): void {\n        this.onDestroy()\n        if (this.editor) {\n            if (this.view) this.view.destroy()\n            if (this.eventIds) this.editor.off_(this.eventIds)\n            this.editor = this.view = this.eventIds = null\n        }\n    }\n\n}","import { IEditorScaleEvent, IEditorRotateEvent, IEditTool, IEditorSkewEvent, IEditorMoveEvent } from '@leafer-in/interface'\n\nimport { registerEditTool, EditToolCreator } from './EditToolCreator'\nimport { InnerEditor } from './InnerEditor'\n\n\n@registerEditTool()\nexport class EditTool extends InnerEditor implements IEditTool {\n\n    static registerEditTool(name?: string) {\n        EditToolCreator.register(this, name)\n    }\n\n\n    public get tag() { return 'EditTool' }\n\n\n    // 操作\n\n    public onMove(e: IEditorMoveEvent): void {\n        const { moveX, moveY, editor } = e\n        const { app, list } = editor\n        app.lockLayout()\n        list.forEach(target => { target.moveWorld(moveX, moveY) })\n        app.unlockLayout()\n    }\n\n    public onScale(e: IEditorScaleEvent): void {\n        const { scaleX, scaleY, transform, worldOrigin, editor, editBoxType } = e\n        const { app, list } = editor\n        app.lockLayout()\n        list.forEach(target => {\n            const resize = editor.getEditSize(target) !== 'scale'\n            if (transform) target.transformWorld(transform, resize, false, editBoxType)\n            else target.scaleOfWorld(worldOrigin, scaleX, scaleY, resize, false, editBoxType)\n        })\n        app.unlockLayout()\n    }\n\n    public onRotate(e: IEditorRotateEvent): void {\n        const { rotation, transform, worldOrigin, editor, editBoxType } = e\n        const { app, list } = editor\n        app.lockLayout()\n        list.forEach(target => {\n            const resize = editor.getEditSize(target) !== 'scale'\n            if (transform) target.transformWorld(transform, resize, false, editBoxType)\n            else target.rotateOfWorld(worldOrigin, rotation)\n        })\n        app.unlockLayout()\n    }\n\n    public onSkew(e: IEditorSkewEvent): void {\n        const { skewX, skewY, transform, worldOrigin, editor, editBoxType } = e\n        const { app, list } = editor\n        app.lockLayout()\n        list.forEach(target => {\n            const resize = editor.getEditSize(target) !== 'scale'\n            if (transform) target.transformWorld(transform, resize, false, editBoxType)\n            else target.skewOfWorld(worldOrigin, skewX, skewY, resize)\n        })\n        app.unlockLayout()\n    }\n\n    // 状态\n\n    public load(): void {\n        this.editBox.view.visible = true\n        this.onLoad()\n    }\n\n    public update(): void {\n        this.editBox.update()\n        this.onUpdate()\n    }\n\n    public unload(): void {\n        this.editBox.view.visible = false\n        this.onUnload()\n    }\n\n}","import { IEditorScaleEvent, ILine, IEditorSkewEvent, IPointData, IAround, IPathCommandData, IFromToData, IUI, IDragEvent } from '@leafer-in/interface'\n\nimport { getPointData, Direction9, PointHelper } from '@leafer-ui/draw'\n\nimport { EditTool } from './EditTool'\nimport { registerEditTool } from './EditToolCreator'\n\n\nconst { left, right } = Direction9\nconst { move, copy, toNumberPoints } = PointHelper\n\n@registerEditTool()\nexport class LineEditTool extends EditTool {\n\n    public get tag() { return 'LineEditTool' }\n\n    public scaleOfEvent = true\n\n    onScaleWithDrag(e: IEditorScaleEvent): void {\n        const { drag, direction, lockRatio, around } = e\n        const line = e.target as ILine\n        const isDragFrom = direction === left\n\n        if (line.pathInputed) {\n\n            const { path } = line.__\n            const { from, to } = this.getFromToByPath(path)\n\n            this.dragPoint(from, to, isDragFrom, around, this.getInnerMove(line, drag, lockRatio))\n\n            path[1] = from.x, path[2] = from.y\n            path[4] = to.x, path[5] = to.y\n            line.path = path\n\n        } else if (line.points) {\n\n            const { points } = line\n            const { from, to } = this.getFromToByPoints(points)\n\n            this.dragPoint(from, to, isDragFrom, around, this.getInnerMove(line, drag, lockRatio))\n\n            points[0] = from.x, points[1] = from.y\n            points[2] = to.x, points[3] = to.y\n            line.points = points\n\n        } else {\n\n            const from = getPointData()\n            const { toPoint } = line\n            line.rotation = 0\n\n            this.dragPoint(from, toPoint, isDragFrom, around, this.getInnerMove(line, drag, lockRatio))\n\n            line.getLocalPointByInner(from, null, null, true)\n            line.getLocalPointByInner(toPoint, null, null, true)\n            line.x = from.x\n            line.y = from.y\n\n            line.getInnerPointByLocal(toPoint, null, null, true)\n            line.toPoint = toPoint\n\n        }\n\n    }\n\n    getInnerMove(ui: IUI, event: IDragEvent, lockRatio: boolean | 'corner'): IPointData {\n        const movePoint = event.getInnerMove(ui)\n        if (lockRatio) Math.abs(movePoint.x) > Math.abs(movePoint.y) ? movePoint.y = 0 : movePoint.x = 0\n        return movePoint\n    }\n\n    getFromToByPath(path: IPathCommandData): IFromToData {\n        return {\n            from: { x: path[1], y: path[2] },\n            to: { x: path[4], y: path[5] }\n        }\n    }\n\n    getFromToByPoints(originPoints: number[] | IPointData[]): IFromToData {\n        const points = toNumberPoints(originPoints)\n        return {\n            from: { x: points[0], y: points[1] },\n            to: { x: points[2], y: points[3] }\n        }\n\n    }\n\n    dragPoint(fromPoint: IPointData, toPoint: IPointData, isDragFrom: boolean, around: IAround, movePoint: IPointData): void {\n        const { x, y } = movePoint\n        if (isDragFrom) {\n            move(fromPoint, x, y)\n            if (around) move(toPoint, -x, -y)\n        } else {\n            if (around) move(fromPoint, -x, -y)\n            move(toPoint, x, y)\n        }\n    }\n\n    onSkew(_e: IEditorSkewEvent): void {\n\n    }\n\n    onUpdate() {\n        const { editBox } = this, { rotatePoints, resizeLines, resizePoints, rect } = editBox\n        const line = editBox.target as ILine\n\n        let fromTo: IFromToData, leftOrRight: boolean\n        if (line.pathInputed) fromTo = this.getFromToByPath(line.__.path)\n        else if (line.points) fromTo = this.getFromToByPoints(line.__.points)\n\n        if (fromTo) {\n            const { from, to } = fromTo\n            line.innerToWorld(from, from, false, editBox)\n            line.innerToWorld(to, to, false, editBox)\n            rect.pen.clearPath().moveTo(from.x, from.y).lineTo(to.x, to.y)\n            copy(resizePoints[7] as IPointData, from)\n            copy(rotatePoints[7] as IPointData, from)\n            copy(resizePoints[3] as IPointData, to)\n            copy(rotatePoints[3] as IPointData, to)\n        }\n\n        for (let i = 0; i < 8; i++) {\n            if (i < 4) resizeLines[i].visible = false\n            leftOrRight = i === left || i === right\n            resizePoints[i].visible = leftOrRight\n            rotatePoints[i].visible = fromTo ? false : leftOrRight\n        }\n    }\n\n}","export { Editor } from './Editor'\n\nexport { EditBox } from './display/EditBox'\nexport { EditPoint } from './display/EditPoint'\nexport { EditSelect } from './display/EditSelect'\nexport { SelectArea } from './display/SelectArea'\nexport { Stroker } from './display/Stroker'\n\n\nexport { EditorEvent } from './event/EditorEvent'\nexport { EditorMoveEvent } from './event/EditorMoveEvent'\nexport { EditorScaleEvent } from './event/EditorScaleEvent'\nexport { EditorRotateEvent } from './event/EditorRotateEvent'\nexport { EditorSkewEvent } from './event/EditorSkewEvent'\nexport { EditorGroupEvent } from './event/EditorGroupEvent'\nexport { InnerEditorEvent } from './event/InnerEditorEvent'\n\nexport { EditToolCreator, registerEditTool, registerInnerEditor } from './tool/EditToolCreator'\nexport { InnerEditor } from './tool/InnerEditor'\nexport { EditTool } from './tool/EditTool'\nexport { LineEditTool } from './tool/LineEditTool'\nexport { TransformTool } from './tool/TransformTool'\n\n\nexport { EditorHelper } from './helper/EditorHelper'\nexport { EditDataHelper } from './helper/EditDataHelper'\nexport { EditSelectHelper } from './helper/EditSelectHelper'\n\n\nimport { IEditor, IEditorConfig, IEditToolFunction, IEditorConfigFunction, IApp, ILine } from '@leafer-in/interface'\nimport { Creator, UI, Group, Text, Box, dataType, Plugin } from '@leafer-ui/draw'\n\nimport '@leafer-in/resize'\n\nimport { Editor } from './Editor'\nimport { EditToolCreator } from './tool/EditToolCreator'\n\n\nPlugin.add('editor', 'resize')\n\n\nCreator.editor = function (options?: IEditorConfig, app?: IApp): IEditor {\n    const editor = new Editor(options)\n    if (app) app.sky.add(app.editor = editor)\n    return editor\n}\n\nBox.addAttr('textBox', false, dataType)\n\nUI.addAttr('editConfig', undefined, dataType)\nUI.addAttr('editOuter', (ui: UI) => {\n    ui.updateLayout()  // fix: Line 需要更新布局才能精准确定\n    const name = (ui.tag === 'Line' || ui.pathInputed ? '' : ((ui as ILine).points ? 'Points' : ui.tag)) + 'EditTool'\n    return ui.__.__isLinePath ? 'LineEditTool' : (EditToolCreator.list[name] ? name : 'EditTool')\n}, dataType)\n\nUI.addAttr('editInner', 'PathEditor', dataType)\nGroup.addAttr('editInner', '', dataType)  // 必须设为空\nText.addAttr('editInner', 'TextEditor', dataType)\n\nUI.setEditConfig = function (config: IEditorConfig | IEditorConfigFunction): void { this.changeAttr('editConfig', config) }\nUI.setEditOuter = function (toolName: string | IEditToolFunction): void { this.changeAttr('editOuter', toolName) }\nUI.setEditInner = function (editorName: string | IEditToolFunction): void { this.changeAttr('editInner', editorName) }"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","toList","value","isArray","SuppressedError","EditorEvent","Event","list","this","oldList","oldValue","constructor","type","data","super","assign","targetAttr","fn","privateKey","defineKey","get","set","old","t","config","isSelect","beforeSelect","check","isObject","hasDimOthers","cancelDimOthers","locked","splice","single","element","syncEventer","__world","ignorePixelSnap","BEFORE_SELECT","BEFORE_HOVER","hasEvent","emitEvent","editor","SELECT","AFTER_SELECT","HOVER","abs","Math","copy","MatrixHelper","setListWithFn","BoundsHelper","worldBounds","LeafBoundsHelper","matrix","getMatrixData","bounds","getBoundsData","Stroker","UI","visible","hittable","strokeAlign","setTarget","style","update","__draw","canvas","options","leaf","__","stroke","strokeWidth","fill","worldTransform","worldRenderBounds","width","height","hit","aScaleX","scaleX","aScaleY","scaleY","half","setWorld","beginPath","strokePathType","boxBounds","__layout","rect","x","y","strokeBounds","__drawPath","__useArrow","__pathForRender","__drawRenderPath","__drawPathByBox","max","shadow","getRenderScaleData","scaleFixed","save","setWorldShadow","blur","ColorConvert","string","color","isString","Paint","strokes","fills","restore","destroy","stroker","prototype","surfaceType","SelectArea","Group","strokeArea","Rect","fillArea","addMany","setStyle","userStyle","reset","opacity","setBounds","EditSelectHelper","findOne","path","find","editable","findByBounds","branch","eachFind","children","child","len","isBranch","hitChildren","hitSelf","push","isFrame","includes","EditSelect","dragging","originList","running","app","mergeConfig","selector","mode","isMoveMode","interaction","moveMode","hoverStroker","targetStroker","Bounds","selectArea","__eventIds","__listenEvents","onHover","hoverTarget","editConfig","hover","hoverStyle","hoverPathType","onSelect","selectedPathType","selectedStyle","mergedConfig","onPointerMove","e","canHover","findUI","hasItem","onBeforeDown","multiTouch","select","mobile","waitSelect","checkAndSelect","onTap","selectKeep","needRemoveItem","removeItem","allowSelect","isMultipleSelect","addItem","needUpdate","allow","isHoldMultipleSelectKey","onDragStart","allowDrag","area","getInnerPoint","leafList","clone","onDrag","onDragEnd","total","getInnerTotal","dragBounds","unsign","LeafList","selectList","forEach","item","has","some","index","onAutoMove","getLocalMove","leafer","boxSelect","multipleSelect","draggable","editing","middle","findDeepOne","exclude","editBox","findPath","continuousSelect","multipleSelectKey","isHoldKeys","shiftKey","waitLeafer","proxy","on_","PointerEvent","MOVE","BEFORE_DOWN","TAP","DragEvent","START","DRAG","END","MoveEvent","ZoomEvent","ZOOM","__removeListenEvents","off_","topLeft","top","topRight","right","bottomRight","bottom","bottomLeft","left","Direction9","toPoint","AroundHelper","within","sign","MathHelper","EditDataHelper","getScaleData","startBounds","direction","totalMoveOrScale","lockRatio","around","flipable","scaleMode","boundsType","align","lockScale","origin","widthRange","heightRange","innerBounds","getBounds","originChangedScaleX","originChangedScaleY","signX","signY","changedScaleX","changedScaleY","isNumber","sqrt","topScale","rightScale","bottomScale","leftScale","useScaleX","useScaleY","checkOrigin","scaleData","DragBoundsHelper","limitScaleOf","nowWidth","nowHeight","minWidth","minHeight","min","isFinite","getRotateData","current","last","rotation","PointHelper","getRotation","getWorldPointByBox","getSkewData","move","skewX","skewY","getAround","altKey","getRotateDirection","totalDirection","round","getFlipDirection","flipedX","flipedY","cacheCursors","updatePointCursor","enterPoint","point","skewing","resizing","flippedX","flippedY","canUse","name","updateMoveCursor","pointType","moveCursor","resizeCursor","rotateCursor","skewCursor","moveable","resizeable","rotateable","skewable","cursor","showResize","isHoldRotateKey","showSkew","formatRotation","url","toDataURL","undefined","svg","encodeURIComponent","replace","toString","EditPoint","Box","useFastShadow","fourDirection","EditBox","_target","transformTool","_transformTool","tool","flipped","flippedOne","canGesture","canDragLimitAnimate","moving","dragLimitAnimate","view","hitFill","hitStroke","hitRadius","circle","buttons","resizePoints","rotatePoints","resizeLines","dragStartData","create","rotatePoint","resizeLine","resizePoint","arounds","listenPointEvents","add","load","pointsStyle","getPointsStyle","middlePointsStyle","getMiddlePointsStyle","resizeLinesStyle","getResizeLinesStyle","resizeP","getPointStyle","rectThrough","isNull","bottomList","DataHelper","stintSet","getLayoutBounds","editBoxType","updateBounds","unload","editMask","middlePoint","hideOnSmall","mask","dimOthers","bright","spread","hideRotatePoints","hideResizeLines","isUndefined","setDimOthers","setBright","worldOpacity","smallSize","showPoints","rotateP","resizeL","directionData","layoutCircle","layoutButtons","circleDirection","circleMargin","buttonsMargin","buttonsDirection","indexOf","setButtonPosition","buttonsFixed","useMiddlePoint","useX","margin","pointFill","pointSize","pointRadius","defaultStyle","cornerRadius","offsetX","offsetY","dragPoint","onCopy","replaceDownTarget","rotating","onTransformStart","onMove","onRotate","onScale","onSkew","onTransformEnd","hideOnMove","gesturing","ResizeEvent","resizingKeys","keys","totalOffset","getPointData","moveType","stop","rotateKey","metaKey","ctrlKey","onKey","onArrow","code","keyEvent","arrowStep","arrowFastStep","step","onDoubleTap","openInner","preventEditInner","onLongPress","editInner","textBox","Text","openInnerEditor","openGroup","ENTER","LEAVE","events","DOUBLE_TAP","LONG_PRESS","KeyEvent","HOLD","UP","DOWN","BEFORE_MOVE","BEFORE_ZOOM","RotateEvent","BEFORE_ROTATE","bigBounds","EditMask","__updateWorldBounds","__local","fillWorld","saveBlendMode","shape","__render","parent","__renderShape","restoreBlendMode","filterStyle","editSize","rotateGap","simulate","simulateTarget","zoomLayer","safeChange","order","a","b","reverseOrder","EditorHelper","group","userGroup","sort","addAt","matrx","Matrix","divideParent","scrollWorldTransform","setTransform","lockLayout","dropTo","unlockLayout","ungroup","ungroupList","isBranchLeaf","remove","toTop","toBottom","debug","Debug","registerEditTool","EditToolCreator","register","registerInnerEditor","EditTool","tag","repeat","InnerEditorEvent","BEFORE_OPEN","OPEN","BEFORE_CLOSE","CLOSE","EditorGroupEvent","BEFORE_GROUP","GROUP","BEFORE_UNGROUP","UNGROUP","updateMatrix","LeafHelper","checkMap","SimulateElement","__tag","checkChange","canChange","skipJSON","on","PropertyEvent","CHANGE","event","attrName","newValue","addValue","oldMatrix","rotationChange","changedTransform","divide","rotateOf","scaleOf","skewOf","changeFn","EditorMoveEvent","EditorScaleEvent","BEFORE_SCALE","SCALE","EditorRotateEvent","ROTATE","EditorSkewEvent","BEFORE_SKEW","SKEW","TransformTool","isMoveEnd","axisDrag","checkLimitMove","totalX","totalY","getWorldPointByLocal","getValidMove","animateMove","totalMove","getBoxPoint","totalScale","targetX","targetY","editTool","onScaleWithDrag","drag","scaleWithDrag","rotateAround","diagonalRotateKey","getPoint","isDiagonalRotate","float","getGapRotation","getInnerMove","checkTransform","beforeMove","world","moveX","moveY","doMove","beforeScale","worldOrigin","getWorldPoint","_resize","getWorldOrigin","transform","getChangedTransform","doScale","flip","axis","getFlipTransform","beforeRotate","doRotate","beforeSkew","doSkew","getInnerOrigin","func","capture","Editor","dragHoverExclude","groupOpening","openedGroupList","multiple","targetLeafer","first","userConfig","editToolList","targetEventIds","default","Plugin","cancel","getItem","shiftItem","dimTarget","innerEditing","innerEditor","updateEditBox","getEditTool","updateEditTool","unloadEditTool","editOuter","beforeEditOuter","getEditSize","_ui","_e","_x","_y","_data","_origin","_scaleY","_axis","_rotation","_skewX","_skewY","_type","_func","emitGroupEvent","closeGroup","checkOpenedGroups","opened","every","hasParent","checkDeepSelect","editTarget","getInnerEditor","nameOrSelect","beforeEditInner","emitInnerEvent","closeInnerEditor","onlyInnerEditor","lock","unlock","onAppRenderStart","targetChanged","renderer","changed","forceRender","onRenderStart","onChildScroll","listenTargetEvents","RenderEvent","SCROLL","CHILD_START","LeaferEvent","UPDATE_MODE","removeTargetEvents","destroyed","values","pointer","useModule","InnerEditor","_editBox","eventIds","onCreate","onLoad","tree","onUpdate","onUnload","onDestroy","moveWorld","resize","transformWorld","scaleOfWorld","rotateOfWorld","skewOfWorld","toNumberPoints","LineEditTool","scaleOfEvent","line","isDragFrom","pathInputed","from","to","getFromToByPath","points","getFromToByPoints","getLocalPointByInner","getInnerPointByLocal","ui","movePoint","originPoints","fromPoint","fromTo","leftOrRight","innerToWorld","pen","clearPath","moveTo","lineTo","Creator","sky","addAttr","dataType","updateLayout","__isLinePath","setEditConfig","changeAttr","setEditOuter","toolName","setEditInner","editorName"],"mappings":"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","x_google_ignoreList":[0]}