@leafer-in/editor 1.3.3 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editor.cjs +1 -0
- package/dist/editor.cjs.map +1 -0
- package/dist/editor.esm.js +1 -0
- package/dist/editor.esm.js.map +1 -0
- package/dist/editor.esm.min.js +1 -0
- package/dist/editor.esm.min.js.map +1 -0
- package/dist/editor.js +1 -0
- package/dist/editor.js.map +1 -0
- package/dist/editor.min.cjs +1 -0
- package/dist/editor.min.cjs.map +1 -0
- package/dist/editor.min.js +1 -0
- package/dist/editor.min.js.map +1 -0
- package/package.json +10 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.min.cjs","sources":["../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.31.0_tslib@2.8.1_typescript@5.7.3/node_modules/tslib/tslib.es6.js","../../../../../../src/in/packages/editor/src/event/EditorEvent.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/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/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 } from '@leafer-ui/draw'\n\nimport { IEditor, IEditorEvent } from '@leafer-in/interface'\n\n\nfunction toList(value: IUI | IUI[]): IUI[] {\n return value ? (value instanceof Array ? value : [value]) : []\n}\n\nexport class EditorEvent extends Event implements IEditorEvent {\n\n static SELECT = 'editor.select'\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 { IEditorMoveEvent } from '@leafer-in/interface'\n\nimport { EditorEvent } from './EditorEvent'\n\n\nexport class EditorMoveEvent extends EditorEvent implements IEditorMoveEvent {\n\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 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 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 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 { IFunction, ILeaf, IObject } from '@leafer-ui/interface'\nimport { defineKey } from '@leafer-ui/draw'\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: unknown) {\n const old = (this as IObject)[privateKey]\n if (old !== value) (this as IObject)[privateKey] = value, fn(this, old)\n }\n } as ThisType<ILeaf>)\n }\n}","import { IUI, ILeaferCanvas, IRenderOptions, IRectInputData } from '@leafer-ui/interface'\nimport { Paint, UI, MatrixHelper, getBoundsData, getMatrixData, BoundsHelper, LeafBoundsHelper } from '@leafer-ui/draw'\n\nimport { IStroker } from '@leafer-in/interface'\n\nimport { targetAttr } from '../decorator/data'\n\n\nconst { abs } = Math\nconst { copy, scale } = MatrixHelper\nconst { setListWithFn } = BoundsHelper\nconst { worldBounds } = LeafBoundsHelper\nconst matrix = getMatrixData()\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 constructor() {\n super()\n this.hittable = false\n this.strokeAlign = 'center'\n }\n\n public setTarget(target: IUI | IUI[], style: IRectInputData): void {\n this.set(style)\n this.target = target\n this.update()\n }\n\n public update(): void {\n const { list } = this\n if (list.length) {\n setListWithFn(bounds, list, worldBounds)\n this.set(bounds)\n } else {\n this.width = this.height = 1\n }\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 (!bounds || bounds.hit(worldRenderBounds, options.matrix)) {\n\n const aScaleX = abs(worldTransform.scaleX), aScaleY = abs(worldTransform.scaleY)\n\n if (aScaleX !== aScaleY) { // need no scale stroke, use rect path\n\n copy(matrix, worldTransform)\n scale(matrix, 1 / aScaleX, 1 / aScaleY)\n\n canvas.setWorld(matrix, options.matrix)\n canvas.beginPath()\n data.strokeWidth = strokeWidth\n\n const { x, y, width, height } = leaf.__layout.boxBounds\n canvas.rect(x * aScaleX, y * aScaleY, width * aScaleX, height * aScaleY)\n\n } else {\n\n canvas.setWorld(worldTransform, options.matrix)\n canvas.beginPath()\n\n if (leaf.__.__useArrow) leaf.__drawPath(canvas)\n else leaf.__.__pathForRender ? leaf.__drawRenderPath(canvas) : leaf.__drawPathByBox(canvas)\n\n data.strokeWidth = strokeWidth / abs(worldTransform.scaleX)\n\n }\n\n if (stroke) typeof stroke === 'string' ? Paint.stroke(stroke, this, canvas) : Paint.strokes(stroke, this, canvas)\n if (fill) typeof fill === 'string' ? Paint.fill(fill, this, canvas) : Paint.fills(fill, this, canvas)\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 ? (value instanceof Array ? 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 = 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 } = this; return this.hittable && editor.visible && editor.hittable && editor.mergeConfig.selector }\n public get isMoveMode(): boolean { return this.app && this.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 { stroke, strokeWidth, hover, hoverStyle } = editor.mergeConfig\n this.hoverStroker.setTarget(hover ? this.editor.hoverTarget : null, { stroke, strokeWidth, ...(hoverStyle || {}) })\n } else {\n this.hoverStroker.target = null\n }\n }\n\n protected onSelect(): void {\n if (this.running) {\n const { mergeConfig: config, list } = this.editor\n const { stroke, strokeWidth } = config\n this.targetStroker.setTarget(list, { stroke, strokeWidth: Math.max(1, strokeWidth / 2) })\n this.hoverStroker.target = null\n }\n }\n\n public update(): void {\n this.hoverStroker.update()\n this.targetStroker.update()\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 } = 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 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 } else if (this.allow(e.target)) {\n\n if (!e.shiftKey) 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 = false\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 if (this.running && (this.editor.mergeConfig.boxSelect) && !e.target.draggable) {\n return (!this.editor.editing && this.allow(e.target)) || (e.shiftKey && !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 return e.shiftKey || this.editor.mergeConfig.continuousSelect\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_(EditorEvent.HOVER, this.onHover, this),\n editor.on_(EditorEvent.SELECT, this.onSelect, this),\n\n app.on_(PointerEvent.MOVE, this.onPointerMove, this),\n app.on_(PointerEvent.BEFORE_DOWN, this.onBeforeDown, this),\n app.on_(PointerEvent.TAP, this.onTap, this),\n\n app.on_(DragEvent.START, this.onDragStart, this, true), // 采用捕获事件,需要比EditBox中的dragStart早触发\n app.on_(DragEvent.DRAG, this.onDrag, this),\n app.on_(DragEvent.END, this.onDragEnd, this),\n\n app.on_(MoveEvent.MOVE, this.onAutoMove, this),\n app.on_([ZoomEvent.ZOOM, MoveEvent.MOVE], () => { this.editor.hoverTarget = null }),\n ]\n\n })\n }\n\n protected __removeListenEvents(): void {\n if (this.__eventIds) {\n this.off_(this.__eventIds)\n this.__eventIds.length = 0\n }\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 } from '@leafer-ui/draw'\n\nimport { IEditorScaleEvent, IEditorSkewEvent, IEditorRotateEvent } from '@leafer-in/interface'\n\n\nconst { topLeft, top, topRight, right, bottomRight, bottom, bottomLeft, left } = Direction9\nconst { toPoint } = AroundHelper\nconst { within } = MathHelper\n\nexport const EditDataHelper = {\n\n getScaleData(element: IUI, startBounds: ILayoutBoundsData, direction: Direction9, totalMove: IPointData, lockRatio: boolean | 'corner', around: IAround, flipable: boolean, scaleMode: boolean): IEditorScaleEvent {\n let align: IAlign, origin = {} as IPointData, scaleX: number = 1, scaleY: number = 1\n\n const { boxBounds, widthRange, heightRange } = element\n const { width, height } = startBounds\n\n if (around) {\n totalMove.x *= 2\n totalMove.y *= 2\n }\n\n\n // 获取已经改变的比例\n const originChangedScaleX = element.scaleX / startBounds.scaleX\n const originChangedScaleY = element.scaleY / startBounds.scaleY\n const signX = originChangedScaleX < 0 ? -1 : 1\n const signY = originChangedScaleY < 0 ? -1 : 1\n\n const changedScaleX = scaleMode ? originChangedScaleX : signX * boxBounds.width / width\n const changedScaleY = scaleMode ? originChangedScaleY : signY * boxBounds.height / height\n\n totalMove.x *= scaleMode ? originChangedScaleX : signX\n totalMove.y *= scaleMode ? originChangedScaleY : signY\n\n\n // 防止变为0\n if (Math.abs(totalMove.x) === width) totalMove.x += 0.1\n if (Math.abs(totalMove.y) === height) totalMove.y += 0.1\n\n\n const topScale = (-totalMove.y + height) / height\n const rightScale = (totalMove.x + width) / width\n const bottomScale = (totalMove.y + height) / height\n const leftScale = (-totalMove.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 const unlockSide = lockRatio === 'corner' && direction % 2\n if (!unlockSide) {\n let scale: number\n switch (direction) {\n case top:\n case bottom:\n scale = scaleY\n break\n case left:\n case right:\n scale = scaleX\n break\n default:\n scale = Math.sqrt(Math.abs(scaleX * scaleY))\n\n }\n scaleX = scaleX < 0 ? -scale : scale\n scaleY = scaleY < 0 ? -scale : scale\n }\n }\n\n\n scaleX /= changedScaleX\n scaleY /= changedScaleY\n\n\n if (!flipable) {\n const { worldTransform } = element\n if (scaleX < 0) scaleX = 1 / boxBounds.width / worldTransform.scaleX\n if (scaleY < 0) scaleY = 1 / boxBounds.height / worldTransform.scaleY\n }\n\n\n if (widthRange) {\n const nowWidth = boxBounds.width * element.scaleX\n scaleX = within(nowWidth * scaleX, widthRange) / nowWidth\n }\n\n if (heightRange) {\n const nowHeight = boxBounds.height * element.scaleY\n scaleY = within(nowHeight * scaleY, heightRange) / nowHeight\n }\n\n\n toPoint(around || align, boxBounds, origin, true)\n\n return { origin, scaleX, scaleY, direction, lockRatio, around }\n },\n\n getRotateData(bounds: IBoundsData, 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, bounds, origin, true)\n\n return { origin, rotation: PointHelper.getRotation(last, 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 last = { x: 0.5, y: 0 }\n align = 'bottom'\n skewX = 1\n break\n case bottom:\n last = { x: 0.5, y: 1 }\n align = 'top'\n skewX = 1\n break\n case left:\n last = { x: 0, y: 0.5 }\n align = 'right'\n skewY = 1\n break\n case right:\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 { IEditor } from '@leafer-in/interface'\nimport { MathHelper } from '@leafer-ui/draw'\n\nimport { EditDataHelper } from '../helper/EditDataHelper'\n\n\nconst cacheCursors: IObject = {}\n\nexport function updateCursor(editor: IEditor, e: IUIEvent): void {\n const { editBox } = editor, point = editBox.enterPoint\n if (!point || !editor.editing || !editBox.visible) return\n if (point.name === 'circle') return // 独立旋转按钮\n if (point.pointType === 'button') { // 普通按钮\n if (!point.cursor) point.cursor = 'pointer'\n return\n }\n\n let { rotation } = editBox\n const { resizeCursor, rotateCursor, skewCursor, resizeable, rotateable, skewable } = editor.mergeConfig\n const { pointType } = point, { flippedX, flippedY } = editBox\n\n let showResize = pointType === 'resize'\n if (showResize && rotateable && (e.metaKey || e.ctrlKey || !resizeable)) showResize = false\n const showSkew = skewable && !showResize && point.name === 'resize-line'\n\n const cursor = showSkew ? skewCursor : (showResize ? resizeCursor : rotateCursor)\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(editor: IEditor): void {\n const { moveCursor, moveable } = editor.mergeConfig\n editor.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, IEditPointType } from '@leafer-in/interface'\n\n\nexport class EditPoint extends Box implements IEditPoint {\n public direction: Direction9\n public pointType: IEditPointType\n}","import { IRect, IEventListenerId, IBoundsData, IPointData, IKeyEvent, IGroup, IBox, IBoxInputData, IAlign, IUI, IEditorConfig } from '@leafer-ui/interface'\nimport { Group, Box, Text, AroundHelper, Direction9 } from '@leafer-ui/draw'\nimport { DragEvent, PointerEvent } from '@leafer-ui/core'\n\nimport { IEditBox, IEditor, IEditPoint, IEditPointType } from '@leafer-in/interface'\n\nimport { updateCursor, updateMoveCursor } from '../editor/cursor'\nimport { EditorEvent } from '../event/EditorEvent'\nimport { EditPoint } from './EditPoint'\nimport { EditDataHelper } from '../helper/EditDataHelper'\n\n\nconst fourDirection = ['top', 'right', 'bottom', 'left']\n\nexport class EditBox extends Group implements IEditBox {\n\n public editor: IEditor\n public dragging: boolean\n public moving: boolean\n\n public view: IGroup = new Group() // 放置默认编辑工具控制点\n\n public rect: IBox = new Box({ 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 })\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 // 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 enterPoint: IEditPoint\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\n view.addMany(...rotatePoints, rect, circle, buttons, ...resizeLines, ...resizePoints)\n this.add(view)\n }\n\n public load(): void {\n const { mergeConfig, element, single } = this.editor\n const { rect, circle, resizePoints } = this\n const { stroke, strokeWidth } = mergeConfig\n\n const pointsStyle = this.getPointsStyle()\n const middlePointsStyle = this.getMiddlePointsStyle()\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 if (!(i % 2)) resizeP.rotation = (i / 2) * 90\n }\n\n // rotate\n circle.set(this.getPointStyle(mergeConfig.circle || mergeConfig.rotatePoint || pointsStyle[0]))\n\n // rect\n rect.set({ stroke, strokeWidth, ...(mergeConfig.rect || {}) })\n rect.hittable = !single\n rect.syncEventer = single && this.editor // 单选下 rect 的事件不会冒泡,需要手动传递给editor\n\n // 编辑框作为底部虚拟元素, 在 onSelect 方法移除\n if (single) {\n element.syncEventer = rect\n this.app.interaction.bottomList = [{ target: rect, proxy: element }]\n }\n }\n\n public update(bounds: IBoundsData): void {\n this.visible = !this.editor.element.locked\n\n if (this.view.worldOpacity) {\n const { mergeConfig } = this.editor\n const { width, height } = bounds\n const { rect, circle, buttons, resizePoints, rotatePoints, resizeLines } = this\n const { middlePoint, resizeable, rotateable, hideOnSmall } = mergeConfig\n\n const smallSize = typeof hideOnSmall === 'number' ? hideOnSmall : 10\n const showPoints = !(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 resizeL = resizeLines[Math.floor(i / 2)]\n resizeP.set(point)\n rotateP.set(point)\n resizeL.set(point)\n\n // visible \n resizeP.visible = resizeL.visible = showPoints && !!(resizeable || rotateable)\n rotateP.visible = showPoints && rotateable && resizeable && !mergeConfig.rotatePoint\n\n if (i % 2) { // top, right, bottom, left\n\n resizeP.visible = rotateP.visible = showPoints && !!middlePoint\n\n if (((i + 1) / 2) % 2) { // top, bottom\n resizeL.width = width\n if (resizeP.width > width - 30) resizeP.visible = false\n } else {\n resizeL.height = height\n resizeP.rotation = 90\n if (resizeP.width > height - 30) 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(mergeConfig)\n\n // rect\n if (rect.path) rect.path = null // line可能会变成path优先模式\n rect.set({ ...bounds, visible: true })\n\n // buttons\n buttons.visible = showPoints && buttons.children.length > 0\n if (buttons.visible) this.layoutButtons(mergeConfig)\n }\n }\n\n protected layoutCircle(config: IEditorConfig): void {\n const { circleDirection, circleMargin, buttonsMargin, buttonsDirection, middlePoint } = config\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(config: IEditorConfig): void {\n const { buttons } = this\n const { buttonsDirection, buttonsFixed, buttonsMargin, middlePoint } = config\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 unload(): void {\n this.visible = false\n }\n\n\n public getPointStyle(userStyle?: IBoxInputData): IBoxInputData {\n const { stroke, strokeWidth, pointFill, pointSize, pointRadius } = this.editor.mergeConfig\n const defaultStyle = { fill: pointFill, stroke, strokeWidth, around: 'center', strokeAlign: 'center', width: pointSize, height: pointSize, cornerRadius: pointRadius, offsetX: 0, offsetY: 0 } as IBoxInputData\n return userStyle ? Object.assign(defaultStyle, userStyle) : defaultStyle\n }\n\n public getPointsStyle(): IBoxInputData[] {\n const { point } = this.editor.mergeConfig\n return point instanceof Array ? point : [point]\n }\n\n public getMiddlePointsStyle(): IBoxInputData[] {\n const { middlePoint } = this.editor.mergeConfig\n return middlePoint instanceof Array ? middlePoint : (middlePoint ? [middlePoint] : this.getPointsStyle())\n }\n\n protected onSelect(e: EditorEvent): void {\n if (e.oldList.length === 1) {\n e.oldList[0].syncEventer = null\n if (this.app) this.app.interaction.bottomList = null\n }\n }\n\n // drag\n\n protected onDragStart(e: DragEvent): void {\n this.dragging = true\n const { editor } = this\n if (e.current.name === 'rect') {\n this.moving = true\n editor.dragStartPoint = { x: editor.element.x, y: editor.element.y }\n editor.opacity = editor.mergeConfig.hideOnMove ? 0 : 1 // move\n } else if ((e.current as IEditPoint).pointType === 'resize') {\n editor.dragStartBounds = { ...editor.element.getLayoutBounds('box', 'local') }\n editor.resizeDirection = (e.current as IEditPoint).direction\n }\n }\n\n protected onDragEnd(e: DragEvent): void {\n this.dragging = false\n this.moving = false\n if (e.current.name === 'rect') this.editor.opacity = 1 // move\n this.editor.resizeDirection = undefined\n\n }\n\n protected onDrag(e: DragEvent): void {\n const { editor } = this\n const point = this.enterPoint = e.current as IEditPoint\n if (point.pointType === 'rotate' || e.metaKey || e.ctrlKey || !editor.mergeConfig.resizeable) {\n if (editor.mergeConfig.rotateable) editor.onRotate(e)\n } else if (point.pointType === 'resize') {\n editor.onScale(e)\n }\n updateCursor(editor, e)\n }\n\n public onArrow(e: IKeyEvent): void {\n if (this.editor.editing && this.editor.mergeConfig.keyEvent) {\n const move = { x: 0, y: 0 }\n const distance = e.shiftKey ? 10 : 1\n switch (e.code) {\n case 'ArrowDown':\n move.y = distance\n break\n case 'ArrowUp':\n move.y = -distance\n break\n case 'ArrowLeft':\n move.x = -distance\n break\n case 'ArrowRight':\n move.x = distance\n }\n this.editor.move(move)\n }\n }\n\n\n protected onDoubleTap(e: PointerEvent): void {\n if (this.editor.mergeConfig.openInner === 'double') this.openInner(e)\n }\n\n protected onLongPress(e: PointerEvent): void {\n if (this.editor.mergeConfig.openInner === 'long') this.openInner(e)\n }\n\n protected openInner(e: PointerEvent): void {\n const { editor } = this\n if (editor.single) {\n const { element } = editor\n if (element.locked) return\n if (element.isBranch && !element.editInner) {\n if ((element as IBox).textBox) {\n const { children } = element\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(element 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 const { editor } = this\n point.direction = direction\n point.pointType = type\n point.on_(DragEvent.START, this.onDragStart, this)\n point.on_(DragEvent.DRAG, this.onDrag, this)\n point.on_(DragEvent.END, this.onDragEnd, this)\n point.on_(PointerEvent.LEAVE, () => this.enterPoint = null)\n if (point.name !== 'circle') point.on_(PointerEvent.ENTER, (e) => { this.enterPoint = point, updateCursor(editor, e) })\n }\n\n protected __listenEvents(): void {\n const { rect, editor } = this\n this.__eventIds = [\n editor.on_(EditorEvent.SELECT, this.onSelect, this),\n\n rect.on_(DragEvent.START, this.onDragStart, this),\n rect.on_(DragEvent.DRAG, editor.onMove, editor),\n rect.on_(DragEvent.END, this.onDragEnd, this),\n\n rect.on_(PointerEvent.ENTER, () => updateMoveCursor(editor)),\n rect.on_(PointerEvent.DOUBLE_TAP, this.onDoubleTap, this),\n rect.on_(PointerEvent.LONG_PRESS, this.onLongPress, this)\n ]\n }\n\n protected __removeListenEvents(): void {\n this.off_(this.__eventIds)\n this.__eventIds.length = 0\n }\n\n public destroy(): void {\n this.editor = null\n this.__removeListenEvents()\n super.destroy()\n }\n\n}","import { ILeaferCanvas, IRenderOptions } from '@leafer-ui/interface'\nimport { UI } from '@leafer-ui/draw'\n\nimport { IEditor } from '@leafer-in/interface'\n\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 }\n\n public __draw(canvas: ILeaferCanvas, options: IRenderOptions): void {\n const { editor } = this\n const { mask } = editor.mergeConfig\n\n if (mask && editor.list.length) {\n const { rect } = editor.editBox\n const { width, height } = rect.__\n\n canvas.resetTransform()\n canvas.fillWorld(canvas.bounds, mask === true ? 'rgba(0,0,0,0.8)' : mask)\n canvas.setWorld(rect.__world, options.matrix)\n canvas.clearRect(0, 0, width, height)\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 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 hover: true,\n select: 'press',\n openInner: 'double',\n boxSelect: true,\n\n moveable: true,\n resizeable: true,\n flipable: true,\n rotateable: true,\n skewable: true\n}","import { IGroup, 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.zoomLayer as IGroup // follow zoomLayer zoom / move\n simulateTarget.safeChange(() => simulateTarget.reset(bounds.setListWithFn(list, (leaf: ILeaf) => leaf.getBounds('box', 'page')).get()))\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.worldTransform)\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 && !leaf.isBranchLeaf) {\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 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 static GROUP = 'editor.group'\n static BEFORE_UNGROUP = 'editor.before_ungroup'\n static UNGROUP = 'editor.ungroup'\n\n static OPEN = 'editor.open_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\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 { IGroupInputData, IUI, IEventListenerId, IPointData, ILeafList, IEditSize, IGroup, IObject, IAlign, IAxis, IFunction, ILayoutBoundsData, IMatrix } from '@leafer-ui/interface'\nimport { Group, DataHelper, MathHelper, LeafList, Matrix, RenderEvent, LeafHelper, Direction9 } from '@leafer-ui/draw'\nimport { DragEvent, RotateEvent, KeyEvent, ZoomEvent, MoveEvent, Plugin } from '@leafer-ui/core'\n\nimport { IEditBox, IEditPoint, IEditor, IEditorConfig, IEditTool, IEditorScaleEvent, IInnerEditor, ISimulateElement } 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 { 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 } from './decorator/data'\nimport { EditorHelper } from './helper/EditorHelper'\nimport { EditDataHelper } from './helper/EditDataHelper'\nimport { simulate } from './editor/simulate'\nimport { updateCursor } from './editor/cursor'\nimport { EditToolCreator } from './tool/EditToolCreator'\nimport { InnerEditorEvent } from './event/InnerEditorEvent'\nimport { EditorGroupEvent } from './event/EditorGroupEvent'\nimport { SimulateElement } from './display/SimulateElement'\n\n\nexport class Editor extends Group implements IEditor {\n\n public config = DataHelper.clone(config) as IEditorConfig\n\n public get mergeConfig(): IEditorConfig {\n const { element, config } = this\n return this.single && element.editConfig ? { ...config, ...element.editConfig } : config // 实时合并,后期可优化\n }\n\n @targetAttr(onHover)\n public hoverTarget?: IUI\n\n @targetAttr(onTarget)\n public target?: IUI | IUI[]\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 dragging(): boolean { return this.editBox.dragging }\n public get moving(): boolean { return this.editBox.moving }\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 dragStartPoint: IPointData\n public dragStartBounds: ILayoutBoundsData\n\n public targetEventIds: IEventListenerId[] = []\n\n\n constructor(userConfig?: IEditorConfig, data?: IGroupInputData) {\n super(data)\n if (userConfig) this.config = DataHelper.default(userConfig, this.config)\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 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 // 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 public updateEditTool(): void {\n const tool = this.editTool\n if (tool) {\n this.editBox.unload()\n tool.unload()\n this.editTool = null\n }\n\n if (this.editing) {\n const tag = this.single ? this.list[0].editOuter as string : 'EditTool'\n this.editTool = this.editToolList[tag] = this.editToolList[tag] || EditToolCreator.get(tag, this)\n this.editBox.load()\n this.editTool.load()\n }\n }\n\n\n // get\n\n public getEditSize(_ui: IUI): IEditSize {\n return this.mergeConfig.editSize\n }\n\n // operate\n\n public onMove(e: DragEvent | MoveEvent): void {\n\n if (e instanceof MoveEvent) {\n\n if (e.moveType !== 'drag') {\n const { moveable, resizeable } = this.mergeConfig\n const move = e.getLocalMove(this.element)\n if (moveable === 'move') e.stop(), this.move(move.x, move.y)\n else if (resizeable === 'zoom') e.stop()\n }\n\n } else {\n\n const total = { x: e.totalX, y: e.totalY }\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 this.move(DragEvent.getValidMove(this.element, this.dragStartPoint, total))\n\n }\n\n }\n\n public onScale(e: DragEvent | ZoomEvent): void {\n const { element } = this\n let { around, lockRatio, resizeable, flipable, editSize } = this.mergeConfig\n\n if (e instanceof ZoomEvent) {\n\n if (resizeable === 'zoom') e.stop(), this.scaleOf(element.getBoxPoint(e), e.scale, e.scale)\n\n } else {\n\n const { direction } = e.current as IEditPoint\n\n if (e.shiftKey || element.lockRatio) lockRatio = true\n\n const data = EditDataHelper.getScaleData(element, this.dragStartBounds, direction, e.getInnerTotal(element), lockRatio, EditDataHelper.getAround(around, e.altKey), flipable, this.multiple || editSize === 'scale')\n\n if (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 }\n\n }\n\n public onRotate(e: DragEvent | RotateEvent): void {\n const { skewable, rotateable, around, rotateGap } = this.mergeConfig\n const { direction, name } = e.current as IEditPoint\n if (skewable && name === 'resize-line') return this.onSkew(e as DragEvent)\n\n const { element } = this\n let origin: IPointData, rotation: number\n\n if (e instanceof RotateEvent) {\n\n if (rotateable === 'rotate') e.stop(), rotation = e.rotation, origin = element.getBoxPoint(e)\n else return\n\n } else {\n\n const last = { x: e.x - e.moveX, y: e.y - e.moveY }\n const data = EditDataHelper.getRotateData(element.boxBounds, direction, e.getBoxPoint(element), element.getBoxPoint(last), e.shiftKey ? null : (element.around || element.origin || around || 'center'))\n rotation = data.rotation\n origin = data.origin\n\n }\n\n rotation = MathHelper.getGapRotation(rotation, rotateGap, element.rotation)\n if (!rotation) return\n\n if (element.scaleX * element.scaleY < 0) rotation = -rotation // flippedOne\n\n this.rotateOf(origin, MathHelper.float(rotation, 2))\n }\n\n\n public onSkew(e: DragEvent): void {\n const { element } = this\n const { around } = this.mergeConfig\n\n const { origin, skewX, skewY } = EditDataHelper.getSkewData(element.boxBounds, (e.current as IEditPoint).direction, e.getInnerMove(element), 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\n const { element } = this\n const world = element.getWorldPointByLocal(typeof x === 'object' ? { ...x } : { x, y }, null, true)\n if (this.multiple) element.safeChange(() => element.move(x, y))\n const event = new EditorMoveEvent(EditorMoveEvent.MOVE, { target: element, editor: this, moveX: world.x, moveY: world.y })\n\n this.editTool.onMove(event)\n this.emitEvent(event)\n }\n\n public scaleWithDrag(data: IEditorScaleEvent): void {\n if (!this.checkTransform('resizeable')) return\n\n const { element } = this\n const event = new EditorScaleEvent(EditorScaleEvent.SCALE, { ...data, target: element, editor: this, worldOrigin: element.getWorldPoint(data.origin) })\n\n this.editTool.onScaleWithDrag(event)\n this.emitEvent(event)\n }\n\n\n override scaleOf(origin: IPointData | IAlign, scaleX: number, scaleY = scaleX, _resize?: boolean): void {\n if (!this.checkTransform('resizeable')) return\n\n const { element } = this\n const worldOrigin = this.getWorldOrigin(origin)\n const transform = this.multiple && this.getChangedTransform(() => element.safeChange(() => element.scaleOf(origin, scaleX, scaleY)))\n const event = new EditorScaleEvent(EditorScaleEvent.SCALE, { target: element, editor: this, worldOrigin, scaleX, scaleY, transform })\n\n this.editTool.onScale(event)\n this.emitEvent(event)\n }\n\n override flip(axis: IAxis): void {\n if (!this.checkTransform('resizeable')) return\n\n const { element } = this\n const worldOrigin = this.getWorldOrigin('center')\n const transform = this.multiple ? this.getChangedTransform(() => element.safeChange(() => element.flip(axis))) : new Matrix(LeafHelper.getFlipTransform(element, axis))\n const event = new EditorScaleEvent(EditorScaleEvent.SCALE, { target: element, editor: this, worldOrigin, scaleX: axis === 'x' ? -1 : 1, scaleY: axis === 'y' ? -1 : 1, transform })\n\n this.editTool.onScale(event)\n this.emitEvent(event)\n }\n\n override rotateOf(origin: IPointData | IAlign, rotation: number): void {\n if (!this.checkTransform('rotateable')) return\n\n const { element } = this\n const worldOrigin = this.getWorldOrigin(origin)\n const transform = this.multiple && this.getChangedTransform(() => element.safeChange(() => element.rotateOf(origin, rotation)))\n const event = new EditorRotateEvent(EditorRotateEvent.ROTATE, { target: element, editor: this, worldOrigin, rotation, transform })\n\n this.editTool.onRotate(event)\n this.emitEvent(event)\n }\n\n override skewOf(origin: IPointData | IAlign, skewX: number, skewY = 0, _resize?: boolean): void {\n if (!this.checkTransform('skewable')) return\n\n const { element } = this\n const worldOrigin = this.getWorldOrigin(origin)\n const transform = this.multiple && this.getChangedTransform(() => element.safeChange(() => element.skewOf(origin, skewX, skewY)))\n const event = new EditorSkewEvent(EditorSkewEvent.SKEW, { target: element, editor: this, worldOrigin, skewX, skewY, transform })\n\n this.editTool.onSkew(event)\n this.emitEvent(event)\n }\n\n public checkTransform(type: 'moveable' | 'resizeable' | 'rotateable' | 'skewable'): boolean { return this.element && !this.element.locked && this.mergeConfig[type] as boolean }\n\n protected getWorldOrigin(origin: IPointData | IAlign): IPointData {\n return this.element.getWorldPoint(LeafHelper.getInnerOrigin(this.element, origin))\n }\n\n protected getChangedTransform(func: IFunction): IMatrix {\n const { element } = this\n if (this.multiple && !element.canChange) return element.changedTransform\n\n const oldMatrix = new Matrix(element.worldTransform)\n func()\n return new Matrix(element.worldTransform).divide(oldMatrix) // world change transform\n }\n\n\n // group\n\n public group(userGroup?: IGroup | IGroupInputData): IGroup {\n if (this.multiple) {\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.openedGroupList.add(group)\n group.hitChildren = true\n this.emitGroupEvent(EditorGroupEvent.OPEN, group)\n }\n\n public closeGroup(group: IGroup): void {\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 group.emitEvent(event)\n }\n\n // inner\n\n public openInnerEditor(target?: IUI, select?: boolean): void {\n if (target && select) this.target = target\n if (this.single) {\n const editTarget = target || this.element\n const tag = editTarget.editInner\n if (tag && EditToolCreator.list[tag]) {\n this.editTool.unload()\n this.innerEditing = true\n this.innerEditor = this.editToolList[tag] || EditToolCreator.get(tag, this)\n this.innerEditor.editTarget = editTarget\n\n this.emitInnerEvent(InnerEditorEvent.BEFORE_OPEN)\n this.innerEditor.load()\n this.emitInnerEvent(InnerEditorEvent.OPEN)\n }\n }\n }\n\n public closeInnerEditor(): 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 this.editTool.load()\n this.innerEditor = null\n }\n }\n\n public emitInnerEvent(type: string): void {\n const { innerEditor } = this\n const { 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 // event \n\n public listenTargetEvents(): void {\n if (!this.targetEventIds.length) {\n const { app, leafer } = this\n this.targetEventIds = [\n leafer.on_(RenderEvent.START, this.update, this),\n app.on_(RenderEvent.CHILD_START, this.forceRender, this),\n app.on_(MoveEvent.BEFORE_MOVE, this.onMove, this, true),\n app.on_(ZoomEvent.BEFORE_ZOOM, this.onScale, this, true),\n app.on_(RotateEvent.BEFORE_ROTATE, this.onRotate, this, true),\n app.on_([KeyEvent.HOLD, KeyEvent.UP], (e: KeyEvent) => { updateCursor(this, e) }),\n app.on_(KeyEvent.DOWN, this.editBox.onArrow, this.editBox)\n ]\n }\n }\n\n public removeTargetEvents(): void {\n const { targetEventIds } = this\n if (targetEventIds.length) {\n this.off_(targetEventIds)\n targetEventIds.length = 0\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 { updateMoveCursor } from './cursor'\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 instanceof Array ? target : target as IUI)\n if (editor.multiple) simulate(editor) // 更新模拟元素\n } else {\n editor.simulateTarget.remove()\n editor.leafList.reset()\n editor.closeInnerEditor()\n }\n\n editor.emitEvent(new EditorEvent(EditorEvent.SELECT, { editor, value: target, oldValue }))\n editor.checkOpenedGroups()\n\n if (editor.editing) {\n editor.waitLeafer(() => {\n updateMoveCursor(editor)\n editor.updateEditTool()\n editor.update()\n editor.listenTargetEvents()\n })\n } else {\n editor.updateEditTool()\n editor.removeTargetEvents()\n }\n}\n\n\nexport function onHover(editor: IEditor, oldValue: IUI): void {\n editor.emitEvent(new EditorEvent(EditorEvent.HOVER, { editor, value: editor.hoverTarget, oldValue }))\n\n}","import { IGroup, IEventListenerId, IUI, IObject } from '@leafer-ui/interface'\nimport { IInnerEditor, IEditor, IEditBox } 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 editTarget: IUI\n\n public config: IObject\n\n public editor: IEditor\n public get editBox(): IEditBox { return this.editor.editBox }\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) 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) 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 => {\n target.moveWorld(moveX, moveY)\n })\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) {\n target.transformWorld(transform, resize)\n } else {\n target.scaleOfWorld(worldOrigin, scaleX, scaleY, resize)\n }\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) {\n target.transformWorld(transform, resize)\n } else {\n target.rotateOfWorld(worldOrigin, rotation)\n }\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) {\n target.transformWorld(transform, resize)\n } else {\n target.skewOfWorld(worldOrigin, skewX, skewY, resize)\n }\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 const { editor, editBox } = this\n const { x, y, scaleX, scaleY, rotation, skewX, skewY, width, height } = editor.element.getLayoutBounds('box', editor, true)\n editBox.set({ x, y, scaleX, scaleY, rotation, skewX, skewY })\n editBox.update({ x: 0, y: 0, width, height })\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 = this.editor.element 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'\n\nexport { EditorHelper } from './helper/EditorHelper'\nexport { EditDataHelper } from './helper/EditDataHelper'\nexport { EditSelectHelper } from './helper/EditSelectHelper'\n\n\nimport { IEditor, IEditorConfig, IEditToolFunction, IEditorConfigFunction } from '@leafer-in/interface'\nimport { Creator, UI, Group, Text, Box, dataType, defineKey, 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): IEditor { return new Editor(options) }\n\n\ndataType(false)(Box.prototype, 'textBox')\n\n\ndefineKey(UI.prototype, 'editOuter', {\n get(): string { return this.__.__isLinePath ? 'LineEditTool' : 'EditTool' }\n})\n\ndefineKey(UI.prototype, 'editInner', {\n get(): string { return 'PathEditor' }\n})\n\ndefineKey(Group.prototype, 'editInner', { // 必须设为空\n get(): string { return '' }\n})\n\ndefineKey(Text.prototype, 'editInner', {\n get(): string { return 'TextEditor' }\n})\n\n\nUI.setEditConfig = function (config: IEditorConfig | IEditorConfigFunction): void {\n defineKey(this.prototype, 'editConfig', {\n get(): IEditorConfig { return typeof config === 'function' ? config(this) : config }\n })\n}\n\nUI.setEditOuter = function (toolName: string | IEditToolFunction): void {\n defineKey(this.prototype, 'editOuter', {\n get(): string { return typeof toolName === 'string' ? toolName : toolName(this) }\n })\n}\n\nUI.setEditInner = function (editorName: string | IEditToolFunction): void {\n defineKey(this.prototype, 'editInner', {\n get(): string { return typeof editorName === 'string' ? editorName : editorName(this) }\n })\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","toList","value","Array","SuppressedError","EditorEvent","Event","list","this","oldList","oldValue","constructor","type","data","super","assign","SELECT","HOVER","EditorMoveEvent","MOVE","EditorScaleEvent","SCALE","EditorRotateEvent","ROTATE","EditorSkewEvent","targetAttr","fn","privateKey","defineKey","get","set","old","SKEW","abs","Math","copy","scale","MatrixHelper","setListWithFn","BoundsHelper","worldBounds","LeafBoundsHelper","matrix","getMatrixData","bounds","getBoundsData","Stroker","UI","hittable","strokeAlign","setTarget","style","update","width","height","__draw","canvas","options","leaf","__","stroke","strokeWidth","fill","worldTransform","worldRenderBounds","hit","aScaleX","scaleX","aScaleY","scaleY","setWorld","beginPath","x","y","__layout","boxBounds","rect","__useArrow","__drawPath","__pathForRender","__drawRenderPath","__drawPathByBox","Paint","strokes","fills","destroy","stroker","prototype","undefined","SelectArea","Group","strokeArea","Rect","fillArea","visible","addMany","setStyle","userStyle","reset","opacity","setBounds","EditSelectHelper","findOne","path","find","editable","findByBounds","branch","eachFind","children","child","len","locked","__world","isBranch","hitChildren","hitSelf","push","isFrame","includes","EditSelect","dragging","originList","running","editor","mergeConfig","selector","isMoveMode","app","interaction","moveMode","hoverStroker","targetStroker","Bounds","selectArea","__eventIds","__listenEvents","onHover","hover","hoverStyle","hoverTarget","onSelect","config","max","onPointerMove","e","canHover","findUI","hasItem","onBeforeDown","multiTouch","select","mobile","waitSelect","checkAndSelect","onTap","needRemoveItem","removeItem","allowSelect","isMultipleSelect","addItem","allow","shiftKey","onDragStart","allowDrag","area","getInnerPoint","leafList","clone","onDrag","onDragEnd","total","getInnerTotal","dragBounds","unsign","LeafList","selectList","forEach","item","has","some","index","onAutoMove","getLocalMove","leafer","draggable","editing","middle","findDeepOne","exclude","editBox","findPath","continuousSelect","waitLeafer","proxy","on_","PointerEvent","BEFORE_DOWN","TAP","DragEvent","START","DRAG","END","MoveEvent","ZoomEvent","ZOOM","__removeListenEvents","off_","topLeft","top","topRight","right","bottomRight","bottom","bottomLeft","left","Direction9","toPoint","AroundHelper","within","MathHelper","EditDataHelper","getScaleData","element","startBounds","direction","totalMove","lockRatio","around","flipable","scaleMode","align","origin","widthRange","heightRange","originChangedScaleX","originChangedScaleY","signX","signY","changedScaleX","changedScaleY","topScale","rightScale","bottomScale","leftScale","sqrt","nowWidth","nowHeight","getRotateData","current","last","rotation","PointHelper","getRotation","getSkewData","move","skewX","skewY","getAround","altKey","getRotateDirection","totalDirection","round","getFlipDirection","flipedX","flipedY","cacheCursors","updateCursor","point","enterPoint","name","pointType","cursor","resizeCursor","rotateCursor","skewCursor","resizeable","rotateable","skewable","flippedX","flippedY","showResize","metaKey","ctrlKey","formatRotation","url","toDataURL","updateMoveCursor","moveCursor","moveable","svg","encodeURIComponent","replace","toString","EditPoint","Box","fourDirection","EditBox","flipped","flippedOne","view","hitFill","hitStroke","hitRadius","circle","buttons","resizePoints","rotatePoints","resizeLines","create","rotatePoint","resizeLine","resizePoint","arounds","listenPointEvents","add","load","single","pointsStyle","getPointsStyle","middlePointsStyle","getMiddlePointsStyle","resizeP","getPointStyle","syncEventer","bottomList","worldOpacity","middlePoint","hideOnSmall","smallSize","showPoints","rotateP","resizeL","directionData","floor","layoutCircle","layoutButtons","circleDirection","circleMargin","buttonsMargin","buttonsDirection","indexOf","setButtonPosition","buttonsFixed","useMiddlePoint","useX","sign","margin","unload","pointFill","pointSize","pointRadius","defaultStyle","cornerRadius","offsetX","offsetY","moving","dragStartPoint","hideOnMove","dragStartBounds","getLayoutBounds","resizeDirection","onRotate","onScale","onArrow","keyEvent","distance","code","onDoubleTap","openInner","onLongPress","editInner","textBox","Text","openInnerEditor","openGroup","LEAVE","ENTER","onMove","DOUBLE_TAP","LONG_PRESS","EditMask","mask","resetTransform","fillWorld","clearRect","filterStyle","editSize","rotateGap","boxSelect","simulate","simulateTarget","zoomLayer","safeChange","getBounds","order","a","b","parent","reverseOrder","EditorHelper","group","userGroup","sort","addAt","matrx","Matrix","divideParent","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","GROUP","BEFORE_UNGROUP","UNGROUP","updateMatrix","LeafHelper","checkMap","SimulateElement","__tag","checkChange","canChange","on","PropertyEvent","CHANGE","event","attrName","newValue","addValue","oldMatrix","rotationChange","changedTransform","divide","rotateOf","scaleOf","skewOf","changeFn","Editor","editConfig","dragHoverExclude","groupOpening","openedGroupList","multiple","userConfig","DataHelper","editToolList","editMask","targetEventIds","default","Plugin","cancel","shiftItem","innerEditing","innerEditor","editTool","updateEditBox","updateEditTool","tool","editOuter","getEditSize","_ui","moveType","stop","totalX","totalY","getValidMove","getBoxPoint","onScaleWithDrag","drag","scaleWithDrag","onSkew","RotateEvent","moveX","moveY","getGapRotation","float","getInnerMove","checkTransform","world","getWorldPointByLocal","emitEvent","worldOrigin","getWorldPoint","_resize","getWorldOrigin","transform","getChangedTransform","flip","axis","getFlipTransform","getInnerOrigin","func","emitGroupEvent","closeGroup","checkOpenedGroups","opened","every","hasParent","checkDeepSelect","editTarget","emitInnerEvent","closeInnerEditor","lock","unlock","listenTargetEvents","RenderEvent","CHILD_START","forceRender","BEFORE_MOVE","BEFORE_ZOOM","BEFORE_ROTATE","KeyEvent","HOLD","UP","DOWN","removeTargetEvents","destroyed","values","InnerEditor","onCreate","onLoad","tree","onUpdate","onUnload","onDestroy","eventIds","moveWorld","resize","transformWorld","scaleOfWorld","rotateOfWorld","skewOfWorld","toNumberPoints","LineEditTool","scaleOfEvent","line","isDragFrom","pathInputed","from","to","getFromToByPath","dragPoint","points","getFromToByPoints","getPointData","getLocalPointByInner","getInnerPointByLocal","ui","movePoint","originPoints","fromPoint","_e","fromTo","leftOrRight","innerToWorld","pen","clearPath","moveTo","lineTo","Creator","dataType","__isLinePath","setEditConfig","setEditOuter","toolName","setEditInner","editorName"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/editor.min.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
1
|
this.LeaferIN=this.LeaferIN||{},this.LeaferIN.editor=function(t,e,i){"use strict";function o(t,e,i,o){var s,n=arguments.length,r=n<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,i):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,i,o);else for(var a=t.length-1;a>=0;a--)(s=t[a])&&(r=(n<3?s(r):n>3?s(e,i,r):s(e,i))||r);return n>3&&r&&Object.defineProperty(e,i,r),r}function s(t){return t?t instanceof Array?t:[t]:[]}"function"==typeof SuppressedError&&SuppressedError;class n extends e.Event{get list(){return s(this.value)}get oldList(){return s(this.oldValue)}constructor(t,e){super(t),e&&Object.assign(this,e)}}n.SELECT="editor.select",n.HOVER="editor.hover";class r extends n{constructor(t,e){super(t,e)}}r.MOVE="editor.move";class a extends n{constructor(t,e){super(t,e)}}a.SCALE="editor.scale";class h extends n{constructor(t,e){super(t,e)}}h.ROTATE="editor.rotate";class l extends n{constructor(t,e){super(t,e)}}function d(t){return(i,o)=>{const s="_"+o;e.defineKey(i,o,{get(){return this[s]},set(e){const i=this[s];i!==e&&(this[s]=e,t(this,i))}})}}l.SKEW="editor.skew";const{abs:c}=Math,{copy:g,scale:u}=e.MatrixHelper,{setListWithFn:f}=e.BoundsHelper,{worldBounds:p}=e.LeafBoundsHelper,m=e.getMatrixData(),v=e.getBoundsData();class E extends e.UI{constructor(){super(),this.list=[],this.hittable=!1,this.strokeAlign="center"}setTarget(t,e){this.set(e),this.target=t,this.update()}update(){const{list:t}=this;t.length?(f(v,t,p),this.set(v)):this.width=this.height=1}__draw(t,i){const{list:o}=this;if(o.length){let s;const n=this.__,{stroke:r,strokeWidth:a,fill:h}=n,{bounds:l}=i;for(let d=0;d<o.length;d++){s=o[d];const{worldTransform:f,worldRenderBounds:p}=s;if(!l||l.hit(p,i.matrix)){const o=c(f.scaleX),l=c(f.scaleY);if(o!==l){g(m,f),u(m,1/o,1/l),t.setWorld(m,i.matrix),t.beginPath(),n.strokeWidth=a;const{x:e,y:r,width:h,height:d}=s.__layout.boxBounds;t.rect(e*o,r*l,h*o,d*l)}else t.setWorld(f,i.matrix),t.beginPath(),s.__.__useArrow?s.__drawPath(t):s.__.__pathForRender?s.__drawRenderPath(t):s.__drawPathByBox(t),n.strokeWidth=a/c(f.scaleX);r&&("string"==typeof r?e.Paint.stroke(r,this,t):e.Paint.strokes(r,this,t)),h&&("string"==typeof h?e.Paint.fill(h,this,t):e.Paint.fills(h,this,t))}}n.strokeWidth=a}}destroy(){this.target=null,super.destroy()}}o([d((function(t){const e=t.target;t.list=e?e instanceof Array?e:[e]:[]}))],E.prototype,"target",void 0);class y extends e.Group{constructor(t){super(t),this.strokeArea=new e.Rect({strokeAlign:"center"}),this.fillArea=new e.Rect,this.visible=this.hittable=!1,this.addMany(this.fillArea,this.strokeArea)}setStyle(t,e){const{visible:i,stroke:o,strokeWidth:s}=t;this.visible=i,this.strokeArea.reset(Object.assign({stroke:o,strokeWidth:s},e||{})),this.fillArea.reset({visible:!e,fill:o,opacity:.2})}setBounds(t){this.strokeArea.set(t),this.fillArea.set(t)}}const L={findOne:t=>t.list.find((t=>t.editable)),findByBounds(t,e){const i=[];return b([t],i,e),i}};function b(t,e,i){let o,s;for(let n=0,r=t.length;n<r;n++)if(o=t[n],s=o.__,s.hittable&&s.visible&&!s.locked&&i.hit(o.__world)){if(s.editable){if(o.isBranch&&!s.hitChildren){s.hitSelf&&e.push(o);continue}if(o.isFrame){if(i.includes(o.__layout.boxBounds,o.__world)){e.push(o);continue}}else i.hit(o.__layout.boxBounds,o.__world)&&s.hitSelf&&e.push(o)}o.isBranch&&b(o.children,e,i)}}const{findOne:w,findByBounds:k}=L;class x extends e.Group{get dragging(){return!!this.originList}get running(){const{editor:t}=this;return this.hittable&&t.visible&&t.hittable&&t.mergeConfig.selector}get isMoveMode(){return this.app&&this.app.interaction.moveMode}constructor(t){super(),this.hoverStroker=new E,this.targetStroker=new E,this.bounds=new e.Bounds,this.selectArea=new y,this.__eventIds=[],this.editor=t,this.addMany(this.targetStroker,this.hoverStroker,this.selectArea),this.__listenEvents()}onHover(){const{editor:t}=this;if(!this.running||this.dragging||t.dragging)this.hoverStroker.target=null;else{const{stroke:e,strokeWidth:i,hover:o,hoverStyle:s}=t.mergeConfig;this.hoverStroker.setTarget(o?this.editor.hoverTarget:null,Object.assign({stroke:e,strokeWidth:i},s||{}))}}onSelect(){if(this.running){const{mergeConfig:t,list:e}=this.editor,{stroke:i,strokeWidth:o}=t;this.targetStroker.setTarget(e,{stroke:i,strokeWidth:Math.max(1,o/2)}),this.hoverStroker.target=null}}update(){this.hoverStroker.update(),this.targetStroker.update()}onPointerMove(t){const{app:e,editor:i}=this;if(this.running&&!this.isMoveMode&&e.interaction.canHover&&!e.interaction.dragging){const e=this.findUI(t);i.hoverTarget=i.hasItem(e)?null:e}this.isMoveMode&&(i.hoverTarget=null)}onBeforeDown(t){if(t.multiTouch)return;const{select:e}=this.editor.mergeConfig;"press"===e&&(this.app.config.mobile?this.waitSelect=()=>this.checkAndSelect(t):this.checkAndSelect(t))}onTap(t){if(t.multiTouch)return;const{editor:e}=this,{select:i}=e.mergeConfig;"tap"===i?this.checkAndSelect(t):this.waitSelect&&this.waitSelect(),this.needRemoveItem?e.removeItem(this.needRemoveItem):this.isMoveMode&&(e.target=null)}checkAndSelect(t){if(this.needRemoveItem=null,this.allowSelect(t)){const{editor:e}=this,i=this.findUI(t);i?this.isMultipleSelect(t)?e.hasItem(i)?this.needRemoveItem=i:e.addItem(i):e.target=i:this.allow(t.target)&&(t.shiftKey||(e.target=null))}}onDragStart(t){if(!t.multiTouch&&(this.waitSelect&&this.waitSelect(),this.allowDrag(t))){const{editor:e}=this,{stroke:i,area:o}=e.mergeConfig,{x:s,y:n}=t.getInnerPoint(this);this.bounds.set(s,n),this.selectArea.setStyle({visible:!0,stroke:i,x:s,y:n},o),this.selectArea.setBounds(this.bounds.get()),this.originList=e.leafList.clone()}}onDrag(t){if(!t.multiTouch){if(this.editor.dragging)return this.onDragEnd(t);if(this.dragging){const{editor:i}=this,o=t.getInnerTotal(this),s=this.bounds.clone().unsign(),n=new e.LeafList(k(i.app,s));if(this.bounds.width=o.x,this.bounds.height=o.y,this.selectArea.setBounds(s.get()),n.length){const t=[];this.originList.forEach((e=>{n.has(e)||t.push(e)})),n.forEach((e=>{this.originList.has(e)||t.push(e)})),(t.length!==i.list.length||i.list.some(((e,i)=>e!==t[i])))&&(i.target=t)}else i.target=this.originList.list}}}onDragEnd(t){t.multiTouch||this.dragging&&(this.originList=null,this.selectArea.visible=!1)}onAutoMove(t){if(this.dragging){const{x:e,y:i}=t.getLocalMove(this);this.bounds.x+=e,this.bounds.y+=i}}allow(t){return t.leafer!==this.editor.leafer}allowDrag(t){return!(!this.running||!this.editor.mergeConfig.boxSelect||t.target.draggable)&&(!this.editor.editing&&this.allow(t.target)||t.shiftKey&&!w(t.path))}allowSelect(t){return this.running&&!this.isMoveMode&&!t.middle}findDeepOne(t){const i={exclude:new e.LeafList(this.editor.editBox.rect)};return w(t.target.leafer.interaction.findPath(t,i))}findUI(t){return this.isMultipleSelect(t)?this.findDeepOne(t):w(t.path)}isMultipleSelect(t){return t.shiftKey||this.editor.mergeConfig.continuousSelect}__listenEvents(){const{editor:t}=this;t.waitLeafer((()=>{const{app:e}=t;e.selector.proxy=t,this.__eventIds=[t.on_(n.HOVER,this.onHover,this),t.on_(n.SELECT,this.onSelect,this),e.on_(i.PointerEvent.MOVE,this.onPointerMove,this),e.on_(i.PointerEvent.BEFORE_DOWN,this.onBeforeDown,this),e.on_(i.PointerEvent.TAP,this.onTap,this),e.on_(i.DragEvent.START,this.onDragStart,this,!0),e.on_(i.DragEvent.DRAG,this.onDrag,this),e.on_(i.DragEvent.END,this.onDragEnd,this),e.on_(i.MoveEvent.MOVE,this.onAutoMove,this),e.on_([i.ZoomEvent.ZOOM,i.MoveEvent.MOVE],(()=>{this.editor.hoverTarget=null}))]}))}__removeListenEvents(){this.__eventIds&&(this.off_(this.__eventIds),this.__eventIds.length=0)}destroy(){this.editor=this.originList=this.needRemoveItem=null,this.__removeListenEvents(),super.destroy()}}const{topLeft:T,top:_,topRight:M,right:O,bottomRight:S,bottom:P,bottomLeft:H,left:B}=e.Direction9,{toPoint:C}=e.AroundHelper,{within:I}=e.MathHelper,V={getScaleData(t,e,i,o,s,n,r,a){let h,l={},d=1,c=1;const{boxBounds:g,widthRange:u,heightRange:f}=t,{width:p,height:m}=e;n&&(o.x*=2,o.y*=2);const v=t.scaleX/e.scaleX,E=t.scaleY/e.scaleY,y=v<0?-1:1,L=E<0?-1:1,b=a?v:y*g.width/p,w=a?E:L*g.height/m;o.x*=a?v:y,o.y*=a?E:L,Math.abs(o.x)===p&&(o.x+=.1),Math.abs(o.y)===m&&(o.y+=.1);const k=(-o.y+m)/m,x=(o.x+p)/p,V=(o.y+m)/m,D=(-o.x+p)/p;switch(i){case _:c=k,h="bottom";break;case O:d=x,h="left";break;case P:c=V,h="top";break;case B:d=D,h="right";break;case T:c=k,d=D,h="bottom-right";break;case M:c=k,d=x,h="bottom-left";break;case S:c=V,d=x,h="top-left";break;case H:c=V,d=D,h="top-right"}if(s){if(!("corner"===s&&i%2)){let t;switch(i){case _:case P:t=c;break;case B:case O:t=d;break;default:t=Math.sqrt(Math.abs(d*c))}d=d<0?-t:t,c=c<0?-t:t}}if(d/=b,c/=w,!r){const{worldTransform:e}=t;d<0&&(d=1/g.width/e.scaleX),c<0&&(c=1/g.height/e.scaleY)}if(u){const e=g.width*t.scaleX;d=I(e*d,u)/e}if(f){const e=g.height*t.scaleY;c=I(e*c,f)/e}return C(n||h,g,l,!0),{origin:l,scaleX:d,scaleY:c,direction:i,lockRatio:s,around:n}},getRotateData(t,i,o,s,n){let r,a={};switch(i){case T:r="bottom-right";break;case M:r="bottom-left";break;case S:r="top-left";break;case H:r="top-right";break;default:r="center"}return C(n||r,t,a,!0),{origin:a,rotation:e.PointHelper.getRotation(s,a,o)}},getSkewData(t,i,o,s){let n,r,a={},h=0,l=0;switch(i){case _:r={x:.5,y:0},n="bottom",h=1;break;case P:r={x:.5,y:1},n="top",h=1;break;case B:r={x:0,y:.5},n="right",l=1;break;case O:r={x:1,y:.5},n="left",l=1}const{width:d,height:c}=t;r.x=r.x*d,r.y=r.y*c,C(s||n,t,a,!0);const g=e.PointHelper.getRotation(r,a,{x:r.x+(h?o.x:0),y:r.y+(l?o.y:0)});return h?h=-g:l=g,{origin:a,skewX:h,skewY:l}},getAround:(t,e)=>e&&!t?"center":t,getRotateDirection:(t,e,i=8)=>((t=(t+Math.round(e/(360/i)))%i)<0&&(t+=i),t),getFlipDirection(t,e,i){if(e)switch(t){case B:t=O;break;case T:t=M;break;case H:t=S;break;case O:t=B;break;case M:t=T;break;case S:t=H}if(i)switch(t){case _:t=P;break;case T:t=H;break;case M:t=S;break;case P:t=_;break;case H:t=T;break;case S:t=M}return t}},D={};function R(t,i){const{editBox:o}=t,s=o.enterPoint;if(!s||!t.editing||!o.visible)return;if("circle"===s.name)return;if("button"===s.pointType)return void(s.cursor||(s.cursor="pointer"));let{rotation:n}=o;const{resizeCursor:r,rotateCursor:a,skewCursor:h,resizeable:l,rotateable:d,skewable:c}=t.mergeConfig,{pointType:g}=s,{flippedX:u,flippedY:f}=o;let p="resize"===g;p&&d&&(i.metaKey||i.ctrlKey||!l)&&(p=!1);const m=c&&!p&&"resize-line"===s.name?h:p?r:a;n+=45*(V.getFlipDirection(s.direction,u,f)+1),n=2*Math.round(e.MathHelper.formatRotation(n,!0)/2);const{url:v,x:E,y:y}=m,L=v+n;D[L]?s.cursor=D[L]:D[L]=s.cursor={url:Z(v,n),x:E,y:y}}function A(t){const{moveCursor:e,moveable:i}=t.mergeConfig;t.editBox.rect.cursor=i?e:void 0}function Z(t,e){return'"data:image/svg+xml,'+encodeURIComponent(t.replace("{{rotation}}",e.toString()))+'"'}class z extends e.Box{}const W=["top","right","bottom","left"];class G extends e.Group{get flipped(){return this.flippedX||this.flippedY}get flippedX(){return this.scaleX<0}get flippedY(){return this.scaleY<0}get flippedOne(){return this.scaleX*this.scaleY<0}constructor(t){super(),this.view=new e.Group,this.rect=new e.Box({name:"rect",hitFill:"all",hitStroke:"none",strokeAlign:"center",hitRadius:5}),this.circle=new z({name:"circle",strokeAlign:"center",around:"center",cursor:"crosshair",hitRadius:5}),this.buttons=new e.Group({around:"center",hitSelf:!1}),this.resizePoints=[],this.rotatePoints=[],this.resizeLines=[],this.__eventIds=[],this.editor=t,this.visible=!1,this.create(),this.__listenEvents()}create(){let t,e,i;const{view:o,resizePoints:s,rotatePoints:n,resizeLines:r,rect:a,circle:h,buttons:l}=this,d=["bottom-right","bottom","bottom-left","left","top-left","top","top-right","right"];for(let o=0;o<8;o++)t=new z({name:"rotate-point",around:d[o],width:15,height:15,hitFill:"all"}),n.push(t),this.listenPointEvents(t,"rotate",o),o%2&&(e=new z({name:"resize-line",around:"center",width:10,height:10,hitFill:"all"}),r.push(e),this.listenPointEvents(e,"resize",o)),i=new z({name:"resize-point",hitRadius:5}),s.push(i),this.listenPointEvents(i,"resize",o);this.listenPointEvents(h,"rotate",2),o.addMany(...n,a,h,l,...r,...s),this.add(o)}load(){const{mergeConfig:t,element:e,single:i}=this.editor,{rect:o,circle:s,resizePoints:n}=this,{stroke:r,strokeWidth:a}=t,h=this.getPointsStyle(),l=this.getMiddlePointsStyle();let d;for(let t=0;t<8;t++)d=n[t],d.set(this.getPointStyle(t%2?l[(t-1)/2%l.length]:h[t/2%h.length])),t%2||(d.rotation=t/2*90);s.set(this.getPointStyle(t.circle||t.rotatePoint||h[0])),o.set(Object.assign({stroke:r,strokeWidth:a},t.rect||{})),o.hittable=!i,o.syncEventer=i&&this.editor,i&&(e.syncEventer=o,this.app.interaction.bottomList=[{target:o,proxy:e}])}update(t){if(this.visible=!this.editor.element.locked,this.view.worldOpacity){const{mergeConfig:i}=this.editor,{width:o,height:s}=t,{rect:n,circle:r,buttons:a,resizePoints:h,rotatePoints:l,resizeLines:d}=this,{middlePoint:c,resizeable:g,rotateable:u,hideOnSmall:f}=i,p="number"==typeof f?f:10,m=!(f&&o<p&&s<p);let v,E,y,L={};for(let n=0;n<8;n++)e.AroundHelper.toPoint(e.AroundHelper.directionData[n],t,L),E=h[n],v=l[n],y=d[Math.floor(n/2)],E.set(L),v.set(L),y.set(L),E.visible=y.visible=m&&!(!g&&!u),v.visible=m&&u&&g&&!i.rotatePoint,n%2&&(E.visible=v.visible=m&&!!c,(n+1)/2%2?(y.width=o,E.width>o-30&&(E.visible=!1)):(y.height=s,E.rotation=90,E.width>s-30&&(E.visible=!1)));r.visible=m&&u&&!(!i.circle&&!i.rotatePoint),r.visible&&this.layoutCircle(i),n.path&&(n.path=null),n.set(Object.assign(Object.assign({},t),{visible:!0})),a.visible=m&&a.children.length>0,a.visible&&this.layoutButtons(i)}}layoutCircle(t){const{circleDirection:e,circleMargin:i,buttonsMargin:o,buttonsDirection:s,middlePoint:n}=t,r=W.indexOf(e||(this.buttons.children.length&&"bottom"===s?"top":"bottom"));this.setButtonPosition(this.circle,r,i||o,!!n)}layoutButtons(t){const{buttons:e}=this,{buttonsDirection:i,buttonsFixed:o,buttonsMargin:s,middlePoint:n}=t,{flippedX:r,flippedY:a}=this;let h=W.indexOf(i);(h%2&&r||(h+1)%2&&a)&&o&&(h=(h+2)%4);const l=o?V.getRotateDirection(h,this.flippedOne?this.rotation:-this.rotation,4):h;this.setButtonPosition(e,l,s,!!n),o&&(e.rotation=90*(l-h)),e.scaleX=r?-1:1,e.scaleY=a?-1:1}setButtonPosition(t,e,i,o){const s=this.resizePoints[2*e+1],n=e%2,r=e&&3!==e?1:-1,a=(i+(e%2?(o?s.width:0)+t.boxBounds.width:(o?s.height:0)+t.boxBounds.height)/2)*r;n?(t.x=s.x+a,t.y=s.y):(t.x=s.x,t.y=s.y+a)}unload(){this.visible=!1}getPointStyle(t){const{stroke:e,strokeWidth:i,pointFill:o,pointSize:s,pointRadius:n}=this.editor.mergeConfig,r={fill:o,stroke:e,strokeWidth:i,around:"center",strokeAlign:"center",width:s,height:s,cornerRadius:n,offsetX:0,offsetY:0};return t?Object.assign(r,t):r}getPointsStyle(){const{point:t}=this.editor.mergeConfig;return t instanceof Array?t:[t]}getMiddlePointsStyle(){const{middlePoint:t}=this.editor.mergeConfig;return t instanceof Array?t:t?[t]:this.getPointsStyle()}onSelect(t){1===t.oldList.length&&(t.oldList[0].syncEventer=null,this.app&&(this.app.interaction.bottomList=null))}onDragStart(t){this.dragging=!0;const{editor:e}=this;"rect"===t.current.name?(this.moving=!0,e.dragStartPoint={x:e.element.x,y:e.element.y},e.opacity=e.mergeConfig.hideOnMove?0:1):"resize"===t.current.pointType&&(e.dragStartBounds=Object.assign({},e.element.getLayoutBounds("box","local")),e.resizeDirection=t.current.direction)}onDragEnd(t){this.dragging=!1,this.moving=!1,"rect"===t.current.name&&(this.editor.opacity=1),this.editor.resizeDirection=void 0}onDrag(t){const{editor:e}=this,i=this.enterPoint=t.current;"rotate"===i.pointType||t.metaKey||t.ctrlKey||!e.mergeConfig.resizeable?e.mergeConfig.rotateable&&e.onRotate(t):"resize"===i.pointType&&e.onScale(t),R(e,t)}onArrow(t){if(this.editor.editing&&this.editor.mergeConfig.keyEvent){const e={x:0,y:0},i=t.shiftKey?10:1;switch(t.code){case"ArrowDown":e.y=i;break;case"ArrowUp":e.y=-i;break;case"ArrowLeft":e.x=-i;break;case"ArrowRight":e.x=i}this.editor.move(e)}}onDoubleTap(t){"double"===this.editor.mergeConfig.openInner&&this.openInner(t)}onLongPress(t){"long"===this.editor.mergeConfig.openInner&&this.openInner(t)}openInner(t){const{editor:i}=this;if(i.single){const{element:o}=i;if(o.locked)return;if(o.isBranch&&!o.editInner){if(o.textBox){const{children:t}=o,s=t.find((t=>t.editable&&t instanceof e.Text))||t.find((t=>t instanceof e.Text));if(s)return i.openInnerEditor(s)}i.openGroup(o),i.target=i.selector.findDeepOne(t)}else i.openInnerEditor()}}listenPointEvents(t,e,o){const{editor:s}=this;t.direction=o,t.pointType=e,t.on_(i.DragEvent.START,this.onDragStart,this),t.on_(i.DragEvent.DRAG,this.onDrag,this),t.on_(i.DragEvent.END,this.onDragEnd,this),t.on_(i.PointerEvent.LEAVE,(()=>this.enterPoint=null)),"circle"!==t.name&&t.on_(i.PointerEvent.ENTER,(e=>{this.enterPoint=t,R(s,e)}))}__listenEvents(){const{rect:t,editor:e}=this;this.__eventIds=[e.on_(n.SELECT,this.onSelect,this),t.on_(i.DragEvent.START,this.onDragStart,this),t.on_(i.DragEvent.DRAG,e.onMove,e),t.on_(i.DragEvent.END,this.onDragEnd,this),t.on_(i.PointerEvent.ENTER,(()=>A(e))),t.on_(i.PointerEvent.DOUBLE_TAP,this.onDoubleTap,this),t.on_(i.PointerEvent.LONG_PRESS,this.onLongPress,this)]}__removeListenEvents(){this.off_(this.__eventIds),this.__eventIds.length=0}destroy(){this.editor=null,this.__removeListenEvents(),super.destroy()}}class U extends e.UI{constructor(t){super(),this.editor=t,this.hittable=!1}__draw(t,e){const{editor:i}=this,{mask:o}=i.mergeConfig;if(o&&i.list.length){const{rect:s}=i.editBox,{width:n,height:r}=s.__;t.resetTransform(),t.fillWorld(t.bounds,!0===o?"rgba(0,0,0,0.8)":o),t.setWorld(s.__world,e.matrix),t.clearRect(0,0,n,r)}}destroy(){this.editor=null,super.destroy()}}const F='\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"/>',X={editSize:"size",keyEvent:!0,stroke:"#836DFF",strokeWidth:2,pointFill:"#FFFFFF",pointSize:10,pointRadius:16,rotateGap:45,buttonsDirection:"bottom",buttonsMargin:12,hideOnSmall:!0,moveCursor:"move",resizeCursor:{url:`\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${F}\n</filter>\n</defs>\n</svg>\n`,x:12,y:12},rotateCursor:{url:`\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${F}\n</filter>\n</defs>\n</svg>\n`,x:12,y:12},skewCursor:{url:`\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${F}\n</filter>\n</defs>\n</svg>\n`,x:12,y:12},selector:!0,hover:!0,select:"press",openInner:"double",boxSelect:!0,moveable:!0,resizeable:!0,flipable:!0,rotateable:!0,skewable:!0},Y=new e.Bounds;function K(t){const{simulateTarget:e,list:i}=t,{zoomLayer:o}=i[0].leafer.zoomLayer;e.safeChange((()=>e.reset(Y.setListWithFn(i,(t=>t.getBounds("box","page"))).get()))),o.add(e)}const N=(t,e)=>t.parent.children.indexOf(t)-e.parent.children.indexOf(e),j=(t,e)=>e.parent.children.indexOf(e)-t.parent.children.indexOf(t),$={group(t,i,o){t.sort(j);const{app:s,parent:n}=t[0];let r;r=o&&o.add?o:new e.Group(o),n.addAt(r,n.children.indexOf(t[0])),t.sort(N);const a=new e.Matrix(i.worldTransform);return a.divideParent(n.worldTransform),r.setTransform(a),r.editable=!0,r.hitChildren=!1,s.lockLayout(),t.forEach((t=>t.dropTo(r))),s.unlockLayout(),r},ungroup(t){const{app:e}=t[0],i=[];return e.lockLayout(),t.forEach((t=>{if(t.isBranch&&!t.isBranchLeaf){const{parent:e,children:o}=t;for(;o.length;)i.push(o[0]),o[0].dropTo(e,e.children.indexOf(t));t.remove()}else i.push(t)})),e.unlockLayout(),i},toTop(t){t.sort(N),t.forEach((t=>{t.parent&&t.parent.add(t)}))},toBottom(t){t.sort(j),t.forEach((t=>{t.parent&&t.parent.addAt(t,0)}))}},q=e.Debug.get("EditToolCreator");function J(){return t=>{tt.register(t)}}const Q=J,tt={list:{},register(t){const{tag:e}=t.prototype;et[e]&&q.repeat(e),et[e]=t},get:(t,e)=>new et[t](e)},{list:et}=tt;class it extends n{constructor(t,e){super(t,e)}}it.BEFORE_OPEN="innerEditor.before_open",it.OPEN="innerEditor.open",it.BEFORE_CLOSE="innerEditor.before_close",it.CLOSE="innerEditor.close";class ot extends n{constructor(t,e){super(t,e)}}ot.GROUP="editor.group",ot.BEFORE_UNGROUP="editor.before_ungroup",ot.UNGROUP="editor.ungroup",ot.OPEN="editor.open_group",ot.CLOSE="editor.close_group";const{updateMatrix:st}=e.LeafHelper,nt={x:1,y:1,scaleX:1,scaleY:1,rotation:1,skewX:1,skewY:1},rt="top-left";class at extends e.Rect{get __tag(){return"SimulateElement"}constructor(t){super(),this.checkChange=!0,this.canChange=!0,this.visible=this.hittable=!1,this.on(e.PropertyEvent.CHANGE,(i=>{if(this.checkChange&&nt[i.attrName]){const{attrName:o,newValue:s,oldValue:n}=i,r="s"===o[0]?(s||1)/(n||1):(s||0)-(n||0);this.canChange=!1;const a=this.__;a[o]=n,st(this.parent),st(this);const h=new e.Matrix(this.__world);switch(a[o]=s,this.__layout.rotationChange(),st(this),this.changedTransform=new e.Matrix(this.__world).divide(h),o){case"x":t.move(r,0);break;case"y":t.move(0,r);break;case"rotation":t.rotateOf(rt,r);break;case"scaleX":t.scaleOf(rt,r,1);break;case"scaleY":t.scaleOf(rt,1,r);break;case"skewX":t.skewOf(rt,r,0);break;case"skewY":t.skewOf(rt,0,r)}this.canChange=!0}}))}safeChange(t){this.canChange&&(this.checkChange=!1,t(),this.checkChange=!0)}}class ht extends e.Group{get mergeConfig(){const{element:t,config:e}=this;return this.single&&t.editConfig?Object.assign(Object.assign({},e),t.editConfig):e}get list(){return this.leafList.list}get dragHoverExclude(){return[this.editBox.rect]}get editing(){return!!this.list.length}get groupOpening(){return!!this.openedGroupList.length}get multiple(){return this.list.length>1}get single(){return 1===this.list.length}get dragging(){return this.editBox.dragging}get moving(){return this.editBox.moving}get element(){return this.multiple?this.simulateTarget:this.list[0]}get buttons(){return this.editBox.buttons}constructor(t,o){super(o),this.config=e.DataHelper.clone(X),this.leafList=new e.LeafList,this.openedGroupList=new e.LeafList,this.simulateTarget=new at(this),this.editBox=new G(this),this.editToolList={},this.selector=new x(this),this.editMask=new U(this),this.targetEventIds=[],t&&(this.config=e.DataHelper.default(t,this.config)),this.addMany(this.editMask,this.selector,this.editBox),i.Plugin.has("resize")||(this.config.editSize="scale")}select(t){this.target=t}cancel(){this.target=null}hasItem(t){return this.leafList.has(t)}addItem(t){this.hasItem(t)||t.locked||(this.leafList.add(t),this.target=this.leafList.list)}removeItem(t){this.hasItem(t)&&(this.leafList.remove(t),this.target=this.leafList.list)}shiftItem(t){this.hasItem(t)?this.removeItem(t):this.addItem(t)}update(){if(this.editing){if(!this.element.parent)return this.cancel();this.innerEditing&&this.innerEditor.update(),this.editTool.update(),this.selector.update()}}updateEditBox(){this.multiple&&K(this),this.update()}updateEditTool(){const t=this.editTool;if(t&&(this.editBox.unload(),t.unload(),this.editTool=null),this.editing){const t=this.single?this.list[0].editOuter:"EditTool";this.editTool=this.editToolList[t]=this.editToolList[t]||tt.get(t,this),this.editBox.load(),this.editTool.load()}}getEditSize(t){return this.mergeConfig.editSize}onMove(t){if(t instanceof i.MoveEvent){if("drag"!==t.moveType){const{moveable:e,resizeable:i}=this.mergeConfig,o=t.getLocalMove(this.element);"move"===e?(t.stop(),this.move(o.x,o.y)):"zoom"===i&&t.stop()}}else{const e={x:t.totalX,y:t.totalY};t.shiftKey&&(Math.abs(e.x)>Math.abs(e.y)?e.y=0:e.x=0),this.move(i.DragEvent.getValidMove(this.element,this.dragStartPoint,e))}}onScale(t){const{element:e}=this;let{around:o,lockRatio:s,resizeable:n,flipable:r,editSize:a}=this.mergeConfig;if(t instanceof i.ZoomEvent)"zoom"===n&&(t.stop(),this.scaleOf(e.getBoxPoint(t),t.scale,t.scale));else{const{direction:i}=t.current;(t.shiftKey||e.lockRatio)&&(s=!0);const n=V.getScaleData(e,this.dragStartBounds,i,t.getInnerTotal(e),s,V.getAround(o,t.altKey),r,this.multiple||"scale"===a);this.editTool.onScaleWithDrag?(n.drag=t,this.scaleWithDrag(n)):this.scaleOf(n.origin,n.scaleX,n.scaleY)}}onRotate(t){const{skewable:o,rotateable:s,around:n,rotateGap:r}=this.mergeConfig,{direction:a,name:h}=t.current;if(o&&"resize-line"===h)return this.onSkew(t);const{element:l}=this;let d,c;if(t instanceof i.RotateEvent){if("rotate"!==s)return;t.stop(),c=t.rotation,d=l.getBoxPoint(t)}else{const e={x:t.x-t.moveX,y:t.y-t.moveY},i=V.getRotateData(l.boxBounds,a,t.getBoxPoint(l),l.getBoxPoint(e),t.shiftKey?null:l.around||l.origin||n||"center");c=i.rotation,d=i.origin}c=e.MathHelper.getGapRotation(c,r,l.rotation),c&&(l.scaleX*l.scaleY<0&&(c=-c),this.rotateOf(d,e.MathHelper.float(c,2)))}onSkew(t){const{element:e}=this,{around:i}=this.mergeConfig,{origin:o,skewX:s,skewY:n}=V.getSkewData(e.boxBounds,t.current.direction,t.getInnerMove(e),V.getAround(i,t.altKey));(s||n)&&this.skewOf(o,s,n)}move(t,e=0){if(!this.checkTransform("moveable"))return;const{element:i}=this,o=i.getWorldPointByLocal("object"==typeof t?Object.assign({},t):{x:t,y:e},null,!0);this.multiple&&i.safeChange((()=>i.move(t,e)));const s=new r(r.MOVE,{target:i,editor:this,moveX:o.x,moveY:o.y});this.editTool.onMove(s),this.emitEvent(s)}scaleWithDrag(t){if(!this.checkTransform("resizeable"))return;const{element:e}=this,i=new a(a.SCALE,Object.assign(Object.assign({},t),{target:e,editor:this,worldOrigin:e.getWorldPoint(t.origin)}));this.editTool.onScaleWithDrag(i),this.emitEvent(i)}scaleOf(t,e,i=e,o){if(!this.checkTransform("resizeable"))return;const{element:s}=this,n=this.getWorldOrigin(t),r=this.multiple&&this.getChangedTransform((()=>s.safeChange((()=>s.scaleOf(t,e,i))))),h=new a(a.SCALE,{target:s,editor:this,worldOrigin:n,scaleX:e,scaleY:i,transform:r});this.editTool.onScale(h),this.emitEvent(h)}flip(t){if(!this.checkTransform("resizeable"))return;const{element:i}=this,o=this.getWorldOrigin("center"),s=this.multiple?this.getChangedTransform((()=>i.safeChange((()=>i.flip(t))))):new e.Matrix(e.LeafHelper.getFlipTransform(i,t)),n=new a(a.SCALE,{target:i,editor:this,worldOrigin:o,scaleX:"x"===t?-1:1,scaleY:"y"===t?-1:1,transform:s});this.editTool.onScale(n),this.emitEvent(n)}rotateOf(t,e){if(!this.checkTransform("rotateable"))return;const{element:i}=this,o=this.getWorldOrigin(t),s=this.multiple&&this.getChangedTransform((()=>i.safeChange((()=>i.rotateOf(t,e))))),n=new h(h.ROTATE,{target:i,editor:this,worldOrigin:o,rotation:e,transform:s});this.editTool.onRotate(n),this.emitEvent(n)}skewOf(t,e,i=0,o){if(!this.checkTransform("skewable"))return;const{element:s}=this,n=this.getWorldOrigin(t),r=this.multiple&&this.getChangedTransform((()=>s.safeChange((()=>s.skewOf(t,e,i))))),a=new l(l.SKEW,{target:s,editor:this,worldOrigin:n,skewX:e,skewY:i,transform:r});this.editTool.onSkew(a),this.emitEvent(a)}checkTransform(t){return this.element&&!this.element.locked&&this.mergeConfig[t]}getWorldOrigin(t){return this.element.getWorldPoint(e.LeafHelper.getInnerOrigin(this.element,t))}getChangedTransform(t){const{element:i}=this;if(this.multiple&&!i.canChange)return i.changedTransform;const o=new e.Matrix(i.worldTransform);return t(),new e.Matrix(i.worldTransform).divide(o)}group(t){return this.multiple&&(this.target=$.group(this.list,this.element,t),this.emitGroupEvent(ot.GROUP,this.target)),this.target}ungroup(){const{list:t}=this;return t.length&&(t.forEach((t=>t.isBranch&&this.emitGroupEvent(ot.BEFORE_UNGROUP,t))),this.target=$.ungroup(t),t.forEach((t=>t.isBranch&&this.emitGroupEvent(ot.UNGROUP,t)))),this.list}openGroup(t){this.openedGroupList.add(t),t.hitChildren=!0,this.emitGroupEvent(ot.OPEN,t)}closeGroup(t){this.openedGroupList.remove(t),t.hitChildren=!1,this.emitGroupEvent(ot.CLOSE,t)}checkOpenedGroups(){const t=this.openedGroupList;if(t.length){let{list:i}=t;this.editing&&(i=[],t.forEach((t=>this.list.every((i=>!e.LeafHelper.hasParent(i,t)))&&i.push(t)))),i.forEach((t=>this.closeGroup(t)))}this.editing&&!this.selector.dragging&&this.checkDeepSelect()}checkDeepSelect(){let t,{list:e}=this;for(let i=0;i<e.length;i++)for(t=e[i].parent;t&&!t.hitChildren;)this.openGroup(t),t=t.parent}emitGroupEvent(t,e){const i=new ot(t,{editTarget:e});this.emitEvent(i),e.emitEvent(i)}openInnerEditor(t,e){if(t&&e&&(this.target=t),this.single){const e=t||this.element,i=e.editInner;i&&tt.list[i]&&(this.editTool.unload(),this.innerEditing=!0,this.innerEditor=this.editToolList[i]||tt.get(i,this),this.innerEditor.editTarget=e,this.emitInnerEvent(it.BEFORE_OPEN),this.innerEditor.load(),this.emitInnerEvent(it.OPEN))}}closeInnerEditor(){this.innerEditing&&(this.innerEditing=!1,this.emitInnerEvent(it.BEFORE_CLOSE),this.innerEditor.unload(),this.emitInnerEvent(it.CLOSE),this.editTool.load(),this.innerEditor=null)}emitInnerEvent(t){const{innerEditor:e}=this,{editTarget:i}=e,o=new it(t,{editTarget:i,innerEditor:e});this.emitEvent(o),i.emitEvent(o)}lock(){this.list.forEach((t=>t.locked=!0)),this.update()}unlock(){this.list.forEach((t=>t.locked=!1)),this.update()}toTop(){this.list.length&&($.toTop(this.list),this.leafList.update())}toBottom(){this.list.length&&($.toBottom(this.list),this.leafList.update())}listenTargetEvents(){if(!this.targetEventIds.length){const{app:t,leafer:o}=this;this.targetEventIds=[o.on_(e.RenderEvent.START,this.update,this),t.on_(e.RenderEvent.CHILD_START,this.forceRender,this),t.on_(i.MoveEvent.BEFORE_MOVE,this.onMove,this,!0),t.on_(i.ZoomEvent.BEFORE_ZOOM,this.onScale,this,!0),t.on_(i.RotateEvent.BEFORE_ROTATE,this.onRotate,this,!0),t.on_([i.KeyEvent.HOLD,i.KeyEvent.UP],(t=>{R(this,t)})),t.on_(i.KeyEvent.DOWN,this.editBox.onArrow,this.editBox)]}}removeTargetEvents(){const{targetEventIds:t}=this;t.length&&(this.off_(t),t.length=0)}destroy(){this.destroyed||(this.target=this.hoverTarget=null,Object.values(this.editToolList).forEach((t=>t.destroy())),this.simulateTarget.destroy(),this.editToolList={},this.simulateTarget=this.editTool=this.innerEditor=null,super.destroy())}}o([d((function(t,e){t.emitEvent(new n(n.HOVER,{editor:t,value:t.hoverTarget,oldValue:e}))}))],ht.prototype,"hoverTarget",void 0),o([d((function(t,i){const{target:o}=t;o?(t.leafList=o instanceof e.LeafList?o:new e.LeafList(o),t.multiple&&K(t)):(t.simulateTarget.remove(),t.leafList.reset(),t.closeInnerEditor()),t.emitEvent(new n(n.SELECT,{editor:t,value:o,oldValue:i})),t.checkOpenedGroups(),t.editing?t.waitLeafer((()=>{A(t),t.updateEditTool(),t.update(),t.listenTargetEvents()})):(t.updateEditTool(),t.removeTargetEvents())}))],ht.prototype,"target",void 0);class lt{static registerInnerEditor(){tt.register(this)}get tag(){return"InnerEditor"}get editBox(){return this.editor.editBox}constructor(t){this.editor=t,this.create()}onCreate(){}create(){this.view=new e.Group,this.onCreate()}onLoad(){}load(){const{editor:t}=this;t&&(t.app&&(t.selector.hittable=t.app.tree.hitChildren=!1),this.onLoad())}onUpdate(){}update(){this.onUpdate()}onUnload(){}unload(){const{editor:t}=this;t&&(t.app&&(t.selector.hittable=t.app.tree.hitChildren=!0),this.onUnload())}onDestroy(){}destroy(){this.onDestroy(),this.editor&&(this.view&&this.view.destroy(),this.eventIds&&this.editor.off_(this.eventIds),this.editor=this.view=this.eventIds=null)}}t.EditTool=class extends lt{static registerEditTool(){tt.register(this)}get tag(){return"EditTool"}onMove(t){const{moveX:e,moveY:i,editor:o}=t,{app:s,list:n}=o;s.lockLayout(),n.forEach((t=>{t.moveWorld(e,i)})),s.unlockLayout()}onScale(t){const{scaleX:e,scaleY:i,transform:o,worldOrigin:s,editor:n}=t,{app:r,list:a}=n;r.lockLayout(),a.forEach((t=>{const r="scale"!==n.getEditSize(t);o?t.transformWorld(o,r):t.scaleOfWorld(s,e,i,r)})),r.unlockLayout()}onRotate(t){const{rotation:e,transform:i,worldOrigin:o,editor:s}=t,{app:n,list:r}=s;n.lockLayout(),r.forEach((t=>{const n="scale"!==s.getEditSize(t);i?t.transformWorld(i,n):t.rotateOfWorld(o,e)})),n.unlockLayout()}onSkew(t){const{skewX:e,skewY:i,transform:o,worldOrigin:s,editor:n}=t,{app:r,list:a}=n;r.lockLayout(),a.forEach((t=>{const r="scale"!==n.getEditSize(t);o?t.transformWorld(o,r):t.skewOfWorld(s,e,i,r)})),r.unlockLayout()}load(){this.editBox.view.visible=!0,this.onLoad()}update(){const{editor:t,editBox:e}=this,{x:i,y:o,scaleX:s,scaleY:n,rotation:r,skewX:a,skewY:h,width:l,height:d}=t.element.getLayoutBounds("box",t,!0);e.set({x:i,y:o,scaleX:s,scaleY:n,rotation:r,skewX:a,skewY:h}),e.update({x:0,y:0,width:l,height:d}),this.onUpdate()}unload(){this.editBox.view.visible=!1,this.onUnload()}},t.EditTool=o([J()],t.EditTool);const{left:dt,right:ct}=e.Direction9,{move:gt,copy:ut,toNumberPoints:ft}=e.PointHelper;return t.LineEditTool=class extends t.EditTool{constructor(){super(...arguments),this.scaleOfEvent=!0}get tag(){return"LineEditTool"}onScaleWithDrag(t){const{drag:i,direction:o,lockRatio:s,around:n}=t,r=t.target,a=o===dt;if(r.pathInputed){const{path:t}=r.__,{from:e,to:o}=this.getFromToByPath(t);this.dragPoint(e,o,a,n,this.getInnerMove(r,i,s)),t[1]=e.x,t[2]=e.y,t[4]=o.x,t[5]=o.y,r.path=t}else if(r.points){const{points:t}=r,{from:e,to:o}=this.getFromToByPoints(t);this.dragPoint(e,o,a,n,this.getInnerMove(r,i,s)),t[0]=e.x,t[1]=e.y,t[2]=o.x,t[3]=o.y,r.points=t}else{const t=e.getPointData(),{toPoint:o}=r;r.rotation=0,this.dragPoint(t,o,a,n,this.getInnerMove(r,i,s)),r.getLocalPointByInner(t,null,null,!0),r.getLocalPointByInner(o,null,null,!0),r.x=t.x,r.y=t.y,r.getInnerPointByLocal(o,null,null,!0),r.toPoint=o}}getInnerMove(t,e,i){const o=e.getInnerMove(t);return i&&(Math.abs(o.x)>Math.abs(o.y)?o.y=0:o.x=0),o}getFromToByPath(t){return{from:{x:t[1],y:t[2]},to:{x:t[4],y:t[5]}}}getFromToByPoints(t){const e=ft(t);return{from:{x:e[0],y:e[1]},to:{x:e[2],y:e[3]}}}dragPoint(t,e,i,o,s){const{x:n,y:r}=s;i?(gt(t,n,r),o&>(e,-n,-r)):(o&>(t,-n,-r),gt(e,n,r))}onSkew(t){}onUpdate(){const{editBox:t}=this,{rotatePoints:e,resizeLines:i,resizePoints:o,rect:s}=t,n=this.editor.element;let r,a;if(n.pathInputed?r=this.getFromToByPath(n.__.path):n.points&&(r=this.getFromToByPoints(n.__.points)),r){const{from:i,to:a}=r;n.innerToWorld(i,i,!1,t),n.innerToWorld(a,a,!1,t),s.pen.clearPath().moveTo(i.x,i.y).lineTo(a.x,a.y),ut(o[7],i),ut(e[7],i),ut(o[3],a),ut(e[3],a)}for(let t=0;t<8;t++)t<4&&(i[t].visible=!1),a=t===dt||t===ct,o[t].visible=a,e[t].visible=!r&&a}},t.LineEditTool=o([J()],t.LineEditTool),e.Plugin.add("editor","resize"),e.Creator.editor=function(t){return new ht(t)},e.dataType(!1)(e.Box.prototype,"textBox"),e.defineKey(e.UI.prototype,"editOuter",{get(){return this.__.__isLinePath?"LineEditTool":"EditTool"}}),e.defineKey(e.UI.prototype,"editInner",{get:()=>"PathEditor"}),e.defineKey(e.Group.prototype,"editInner",{get:()=>""}),e.defineKey(e.Text.prototype,"editInner",{get:()=>"TextEditor"}),e.UI.setEditConfig=function(t){e.defineKey(this.prototype,"editConfig",{get(){return"function"==typeof t?t(this):t}})},e.UI.setEditOuter=function(t){e.defineKey(this.prototype,"editOuter",{get(){return"string"==typeof t?t:t(this)}})},e.UI.setEditInner=function(t){e.defineKey(this.prototype,"editInner",{get(){return"string"==typeof t?t:t(this)}})},t.EditBox=G,t.EditDataHelper=V,t.EditPoint=z,t.EditSelect=x,t.EditSelectHelper=L,t.EditToolCreator=tt,t.Editor=ht,t.EditorEvent=n,t.EditorGroupEvent=ot,t.EditorHelper=$,t.EditorMoveEvent=r,t.EditorRotateEvent=h,t.EditorScaleEvent=a,t.EditorSkewEvent=l,t.InnerEditor=lt,t.InnerEditorEvent=it,t.SelectArea=y,t.Stroker=E,t.registerEditTool=J,t.registerInnerEditor=Q,t}({},LeaferUI,LeaferUI);
|
|
2
|
+
//# sourceMappingURL=editor.min.js.map
|