{"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) { // 元素的hover样式，不能覆盖到总配置里\n                        editConfig = { ...editConfig }\n                        delete editConfig.hover\n                        delete editConfig.hoverStyle\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'\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\n                    if (this.strokePathType === 'path') {\n                        leaf.__drawPath(canvas)\n                    } else {\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 } = config\n            this.hoverStroker.setTarget(hover ? hoverTarget : null, { stroke, strokeWidth, ...(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 { IBoundsData, IPointData, IAround, IAlign, IUI, ILayoutBoundsData } 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): IEditorScaleEvent {\n        let align: IAlign, origin = {} as IPointData, scaleX: number = 1, scaleY: number = 1, lockScale: number\n\n        const { boxBounds, widthRange, heightRange, dragBounds, worldBoxBounds } = target\n        const { width, height } = startBounds\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 * boxBounds.width / width\n        const changedScaleY = scaleMode ? originChangedScaleY : signY * boxBounds.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 / boxBounds.width / worldTransform.scaleX\n            if (scaleY < 0) scaleY = 1 / boxBounds.height / worldTransform.scaleY\n        }\n\n        // 检查限制\n\n        toPoint(around || align, boxBounds, origin, true)\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 = boxBounds.width * target.scaleX\n            scaleX = within(nowWidth * scaleX, widthRange) / nowWidth\n        }\n\n        if (useScaleY && heightRange) {\n            const nowHeight = boxBounds.height * target.scaleY\n            scaleY = within(nowHeight * scaleY, heightRange) / nowHeight\n        }\n\n        // 防止小于1px\n        if (useScaleX && abs(scaleX * worldBoxBounds.width) < 1) scaleX = sign(scaleX) / worldBoxBounds.width\n        if (useScaleY && abs(scaleY * worldBoxBounds.height) < 1) scaleY = sign(scaleY) / worldBoxBounds.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): 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.boxBounds, origin, true)\n\n        return { origin, rotation: PointHelper.getRotation(last, target.getWorldPointByBox(origin), current) }\n    },\n\n    getSkewData(bounds: IBoundsData, direction: Direction9, move: IPointData, around: IAround): 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 { width, height } = bounds\n\n        last.x = last.x * width\n        last.y = last.y * height\n\n        toPoint(around || align, bounds, origin, true)\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    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 } = this\n        const { x, y, scaleX, scaleY, rotation, skewX, skewY, width, height } = this.target.getLayoutBounds('box', 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, mergeConfig, 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 } = mergeConfig\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 && !!(mergeConfig.circle || mergeConfig.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        if (this.moving || this.gesturing) this.editor.opacity = this.mergedConfig.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('box', '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    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): void {\n        const { tag } = EditTool.prototype as IEditTool\n        list[tag] && debug.repeat(tag)\n        list[tag] = 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 } = 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')\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 } = 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'))\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 } = mergeConfig\n\n        const { origin, skewX, skewY } = EditDataHelper.getSkewData(target.boxBounds, (e.current as IEditPoint).direction, e.getInnerMove(target), EditDataHelper.getAround(around, e.altKey))\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 } = 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 }\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 } = 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 }\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 } = 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 }\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() {\n        EditToolCreator.register(this)\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 } = 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)\n            else target.scaleOfWorld(worldOrigin, scaleX, scaleY, resize)\n        })\n        app.unlockLayout()\n    }\n\n    public onRotate(e: IEditorRotateEvent): void {\n        const { rotation, transform, worldOrigin, editor } = 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)\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 } = 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)\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 } 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'\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) => { ui.updateLayout(); return ui.__.__isLinePath ? 'LineEditTool' : 'EditTool' }, dataType) // fix: Line 需要更新布局才能精准确定\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","__useArrow","__drawPath","__pathForRender","__drawRenderPath","__drawPathByBox","max","shadow","getRenderScaleData","scaleFixed","save","setWorldShadow","x","y","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","__layout","boxBounds","EditSelect","dragging","originList","running","app","mergeConfig","selector","mode","isMoveMode","interaction","moveMode","hoverStroker","targetStroker","Bounds","selectArea","__eventIds","__listenEvents","onHover","hoverTarget","editConfig","hover","hoverStyle","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","rect","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","align","lockScale","origin","widthRange","heightRange","worldBoxBounds","originChangedScaleX","originChangedScaleY","signX","signY","changedScaleX","changedScaleY","isNumber","sqrt","topScale","rightScale","bottomScale","leftScale","useScaleX","useScaleY","scaleData","DragBoundsHelper","limitScaleOf","nowWidth","nowHeight","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","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","gesturing","hideOnMove","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","getBounds","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]}