@leafer-ui/core
Version:
1 lines • 121 kB
Source Map (JSON)
{"version":3,"file":"core.min.cjs","sources":["../../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../../src/ui/packages/app/src/App.ts","../../../../../../../src/ui/packages/event/src/Keyboard.ts","../../../../../../../src/ui/packages/event/src/PointerButton.ts","../../../../../../../src/ui/packages/event/src/UIEvent.ts","../../../../../../../src/ui/packages/event/src/PointerEvent.ts","../../../../../../../src/ui/packages/event/src/DragEvent.ts","../../../../../../../src/ui/packages/event/src/DropEvent.ts","../../../../../../../src/ui/packages/event/src/MoveEvent.ts","../../../../../../../src/ui/packages/event/src/RotateEvent.ts","../../../../../../../src/ui/packages/event/src/SwipeEvent.ts","../../../../../../../src/ui/packages/event/src/ZoomEvent.ts","../../../../../../../src/ui/packages/event/src/KeyEvent.ts","../../../../../../../src/ui/packages/interaction/interaction/src/InteractionHelper.ts","../../../../../../../src/ui/packages/interaction/interaction/src/Dragger.ts","../../../../../../../src/ui/packages/interaction/interaction/src/emit.ts","../../../../../../../src/ui/packages/interaction/interaction/src/config.ts","../../../../../../../src/ui/packages/interaction/interaction/src/Interaction.ts","../../../../../../../src/ui/packages/interaction/interaction/src/Cursor.ts","../../../../../../../src/ui/packages/hit/src/HitCanvasManager.ts","../../../../../../../src/ui/packages/hit/src/selector.ts","../../../../../../../src/ui/packages/hit/src/LeafHit.ts","../../../../../../../src/ui/packages/hit/src/UIHit.ts","../../../../../../../src/ui/packages/hit/src/RectHit.ts","../../../../../../../src/ui/packages/hit/src/TextHit.ts","../../../../../../../src/ui/packages/hit/src/pick.ts","../../../../../../../src/ui/packages/hit/src/canvas.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 { ILeaferConfig, IResizeEvent, ILeaferCanvas, IRenderOptions, ILeaferBase, IBoundsData } from '@leafer/interface'\nimport { Creator, DataHelper, LayoutEvent, RenderEvent, canvasSizeAttrs, registerUI, isUndefined } from '@leafer/core'\n\nimport { IApp, IAppConfig, IAppForEachFunction, IAppInputData, ILeafer } from '@leafer-ui/interface'\n\nimport { Leafer } from '@leafer-ui/draw'\n\n\n@registerUI()\nexport class App extends Leafer implements IApp {\n\n public get __tag() { return 'App' }\n\n public get isApp(): boolean { return true }\n\n declare public children: ILeafer[]\n\n public realCanvas: boolean\n\n public ground: ILeafer\n public tree: ILeafer\n public sky: ILeafer\n\n constructor(userConfig?: IAppConfig, data?: IAppInputData) {\n super(userConfig, data)\n }\n\n override init(userConfig?: IAppConfig, parentApp?: IApp): void {\n super.init(userConfig, parentApp)\n if (userConfig) {\n const { ground, tree, sky, editor } = userConfig\n if (ground) this.ground = this.addLeafer(ground)\n if (tree || editor) this.tree = this.addLeafer(tree || { type: userConfig.type || 'design' })\n if (sky || editor) this.sky = this.addLeafer(sky)\n if (editor) Creator.editor(editor, this)\n }\n }\n\n protected __setApp(): void {\n const { canvas } = this\n const { realCanvas, view } = this.config\n if (realCanvas || view === this.canvas.view || !canvas.parentView) this.realCanvas = true\n else canvas.unrealCanvas()\n\n this.leafer = this\n this.watcher.disable()\n this.layouter.disable()\n }\n\n override __updateLocalBounds(): void {\n this.forEach(leafer => leafer.updateLayout())\n super.__updateLocalBounds()\n }\n\n override start(): void {\n super.start()\n this.forEach(leafer => leafer.start())\n }\n\n override stop(): void {\n this.forEach(leafer => leafer.stop())\n super.stop()\n }\n\n override unlockLayout(): void {\n super.unlockLayout()\n this.forEach(leafer => leafer.unlockLayout())\n }\n\n override lockLayout(): void {\n super.lockLayout()\n this.forEach(leafer => leafer.lockLayout())\n }\n\n override forceRender(bounds?: IBoundsData, sync?: boolean): void {\n this.forEach(leafer => leafer.forceRender(bounds, sync))\n }\n\n public addLeafer(merge?: ILeaferConfig): Leafer {\n const leafer = new Leafer(merge)\n this.add(leafer)\n return leafer\n }\n\n override add(leafer: ILeafer, index?: number): void {\n if (!leafer.view) {\n if (this.realCanvas && !this.canvas.bounds) { // wait miniapp select canvas\n setTimeout(() => this.add(leafer, index), 10)\n return\n }\n leafer.init(this.__getChildConfig(leafer.userConfig), this)\n }\n\n super.add(leafer, index)\n if (!isUndefined(index)) leafer.canvas.childIndex = index\n this.__listenChildEvents(leafer)\n }\n\n public forEach(fn: IAppForEachFunction): void {\n this.children.forEach(fn)\n }\n\n protected __onCreated(): void {\n this.created = this.children.every(child => child.created)\n }\n\n protected __onReady(): void {\n if (this.children.every(child => child.ready)) super.__onReady()\n }\n\n protected __onViewReady(): void {\n if (this.children.every(child => child.viewReady)) super.__onViewReady()\n }\n\n protected __onChildRenderEnd(e: RenderEvent): void {\n this.renderer.addBlock(e.renderBounds)\n if (this.viewReady) this.renderer.update()\n }\n\n override __render(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (canvas.context) this.forEach(leafer => options.matrix ? leafer.__render(canvas, options) : canvas.copyWorld(leafer.canvas, options.bounds))\n }\n\n public __onResize(event: IResizeEvent): void {\n this.forEach(leafer => leafer.resize(event))\n super.__onResize(event)\n }\n\n public updateLayout(): void {\n this.forEach(leafer => leafer.updateLayout())\n }\n\n protected __getChildConfig(userConfig?: ILeaferConfig): ILeaferConfig {\n const config = { ...this.config }\n config.hittable = config.realCanvas = undefined\n if (userConfig) DataHelper.assign(config, userConfig)\n\n // reset\n if (this.autoLayout) DataHelper.copyAttrs(config, this, canvasSizeAttrs)\n config.view = this.realCanvas ? undefined : this.view\n config.fill = undefined\n return config\n }\n\n protected __listenChildEvents(leafer: ILeaferBase): void {\n leafer.once([\n [LayoutEvent.END, this.__onReady, this],\n [RenderEvent.START, this.__onCreated, this],\n [RenderEvent.END, this.__onViewReady, this]\n ])\n if (this.realCanvas) this.__eventIds.push(leafer.on_(RenderEvent.END, this.__onChildRenderEnd, this))\n }\n\n}","import { IBooleanMap, IShortcutKeyCodes, IShortcutKeys, IShortcutKeysCheck, IUIEvent } from '@leafer/interface'\n\n\nconst downKeyMap: IBooleanMap = {}\n\nexport const Keyboard = {\n\n isHoldSpaceKey(): boolean {\n return Keyboard.isHold('Space')\n },\n\n isHold(code: IShortcutKeyCodes): boolean {\n return downKeyMap[code]\n },\n\n // 是否按住快捷键,可扩展语义化快捷键组合 ctrl + F || shift + F\n isHoldKeys(shortcutKeys: IShortcutKeysCheck | IShortcutKeys, e?: IUIEvent): boolean {\n return e ? (shortcutKeys as IShortcutKeysCheck)(e) : undefined\n },\n\n setDownCode(code: string): void {\n if (!downKeyMap[code]) downKeyMap[code] = true\n },\n\n setUpCode(code: string): void {\n downKeyMap[code] = false\n }\n\n}","import { IUIEvent } from '@leafer/interface'\n\n\nexport const PointerButton = {\n\n LEFT: 1,\n\n RIGHT: 2,\n\n MIDDLE: 4,\n\n defaultLeft(event: IUIEvent): void { if (!event.buttons) event.buttons = 1 },\n\n left(event: IUIEvent): boolean { return event.buttons === 1 },\n\n right(event: IUIEvent): boolean { return event.buttons === 2 },\n\n middle(event: IUIEvent): boolean { return event.buttons === 4 }\n\n}","import { ILeaf, ILeafList, IPointData, IUIEvent, IShortcutKeys, IShortcutKeysCheck } from '@leafer/interface'\nimport { Event, EventCreator } from '@leafer/core'\n\nimport { Keyboard } from './Keyboard'\nimport { PointerButton as B } from './PointerButton'\n\n\nexport class UIEvent extends Event implements IUIEvent {\n\n readonly x: number\n readonly y: number\n\n readonly path: ILeafList\n readonly throughPath?: ILeafList\n\n readonly altKey: boolean\n readonly ctrlKey: boolean\n readonly shiftKey: boolean\n readonly metaKey: boolean\n public get spaceKey(): boolean { return Keyboard.isHoldSpaceKey() }\n\n public get left(): boolean { return B.left(this) }\n public get right(): boolean { return B.right(this) }\n public get middle(): boolean { return B.middle(this) }\n readonly buttons: number\n\n declare readonly target: ILeaf\n declare readonly current: ILeaf\n readonly bubbles: boolean = true\n\n constructor(params: IUIEvent) {\n super(params.type)\n Object.assign(this, params)\n }\n\n\n public isHoldKeys(shortcutKeys?: IShortcutKeysCheck | IShortcutKeys): boolean {\n return Keyboard.isHoldKeys(shortcutKeys, this)\n }\n\n public getBoxPoint(relative?: ILeaf): IPointData {\n return (relative || this.current).getBoxPoint(this)\n }\n\n public getInnerPoint(relative?: ILeaf): IPointData {\n return (relative || this.current).getInnerPoint(this)\n }\n\n public getLocalPoint(relative?: ILeaf): IPointData {\n return (relative || this.current).getLocalPoint(this)\n }\n\n public getPagePoint(): IPointData {\n return this.current.getPagePoint(this)\n }\n\n // 兼容代码,未来可移除\n public getInner(relative?: ILeaf): IPointData { return this.getInnerPoint(relative) }\n public getLocal(relative?: ILeaf): IPointData { return this.getLocalPoint(relative) }\n public getPage(): IPointData { return this.getPagePoint() }\n // ---\n\n static changeName(oldName: string, newName: string): void {\n EventCreator.changeName(oldName, newName)\n }\n\n}","import { IPointerEvent, PointerType } from '@leafer/interface'\nimport { registerUIEvent } from '@leafer/core'\n\nimport { UIEvent } from './UIEvent'\n\n\n@registerUIEvent()\nexport class PointerEvent extends UIEvent implements IPointerEvent {\n\n static POINTER = 'pointer'\n\n static BEFORE_DOWN = 'pointer.before_down'\n static BEFORE_MOVE = 'pointer.before_move'\n static BEFORE_UP = 'pointer.before_up'\n\n static DOWN = 'pointer.down'\n static MOVE = 'pointer.move'\n static UP = 'pointer.up'\n\n static OVER = 'pointer.over'\n static OUT = 'pointer.out'\n\n static ENTER = 'pointer.enter'\n static LEAVE = 'pointer.leave'\n\n static TAP = 'tap'\n static DOUBLE_TAP = 'double_tap'\n\n static CLICK = 'click'\n static DOUBLE_CLICK = 'double_click'\n\n static LONG_PRESS = 'long_press'\n static LONG_TAP = 'long_tap'\n\n static MENU = 'pointer.menu'\n static MENU_TAP = 'pointer.menu_tap'\n\n public readonly width: number\n public readonly height: number\n public readonly pointerType: PointerType\n public readonly multiTouch?: boolean\n public readonly pressure: number\n public readonly tangentialPressure?: number\n public readonly tiltX?: number\n public readonly tiltY?: number\n public readonly twist?: number\n\n}\n\nexport const MyPointerEvent = PointerEvent","import { IDragEvent, IPointData, ILeaf, ILeafList, IObject, IBoundsData } from '@leafer/interface'\nimport { registerUIEvent, LeafList, BoundsHelper, PointHelper } from '@leafer/core'\nimport { DragBoundsHelper } from '@leafer-ui/draw'\n\nimport { PointerEvent } from './PointerEvent'\n\n\nconst tempMove = {} as IPointData\n\n@registerUIEvent()\nexport class DragEvent extends PointerEvent implements IDragEvent {\n\n static BEFORE_DRAG = 'drag.before_drag'\n\n static START = 'drag.start'\n static DRAG = 'drag'\n static END = 'drag.end'\n\n static OVER = 'drag.over'\n static OUT = 'drag.out'\n\n static ENTER = 'drag.enter'\n static LEAVE = 'drag.leave'\n\n readonly moveX: number\n readonly moveY: number\n readonly totalX: number\n readonly totalY: number\n\n static list: ILeafList\n static data: IObject\n\n static setList(data: ILeaf | ILeaf[] | ILeafList): void {\n this.list = data instanceof LeafList ? data : new LeafList(data as ILeaf[])\n }\n\n static setData(data: IObject): void {\n this.data = data\n }\n\n static getValidMove(leaf: ILeaf, localStart: IPointData, worldTotal: IPointData, checkLimit = true): IPointData {\n const move = leaf.getLocalPoint(worldTotal, null, true)\n PointHelper.move(move, localStart.x - leaf.x, localStart.y - leaf.y)\n if (checkLimit) this.limitMove(leaf, move)\n DragBoundsHelper.axisMove(leaf, move)\n return move\n }\n\n static limitMove(leaf: ILeaf, move: IPointData): void {\n DragBoundsHelper.limitMove(leaf, move)\n }\n\n public getPageMove(total?: boolean): IPointData {\n this.assignMove(total)\n return this.current.getPagePoint(tempMove, null, true)\n }\n\n public getInnerMove(relative?: ILeaf, total?: boolean): IPointData {\n if (!relative) relative = this.current\n this.assignMove(total)\n return relative.getInnerPoint(tempMove, null, true)\n }\n\n public getLocalMove(relative?: ILeaf, total?: boolean): IPointData {\n if (!relative) relative = this.current\n this.assignMove(total)\n return relative.getLocalPoint(tempMove, null, true)\n }\n\n public getPageTotal(): IPointData {\n return this.getPageMove(true)\n }\n\n public getInnerTotal(relative?: ILeaf): IPointData {\n return this.getInnerMove(relative, true)\n }\n\n public getLocalTotal(relative?: ILeaf): IPointData {\n return this.getLocalMove(relative, true)\n }\n\n public getPageBounds(): IBoundsData {\n const total = this.getPageTotal(), start = this.getPagePoint(), bounds = {} as IBoundsData\n BoundsHelper.set(bounds, start.x - total.x, start.y - total.y, total.x, total.y)\n BoundsHelper.unsign(bounds)\n return bounds\n }\n\n protected assignMove(total: boolean): void {\n tempMove.x = total ? this.totalX : this.moveX\n tempMove.y = total ? this.totalY : this.moveY\n }\n\n}\n\nexport const MyDragEvent = DragEvent","import { IDropEvent, ILeaf, ILeafList, IObject } from '@leafer/interface'\nimport { registerUIEvent } from '@leafer/core'\n\nimport { PointerEvent } from './PointerEvent'\nimport { DragEvent } from './DragEvent'\n\n\n@registerUIEvent()\nexport class DropEvent extends PointerEvent implements IDropEvent {\n\n static DROP = 'drop'\n\n readonly list: ILeafList\n readonly data: IObject\n\n static setList(data: ILeaf | ILeaf[] | ILeafList): void {\n DragEvent.setList(data)\n }\n\n static setData(data: IObject): void {\n DragEvent.setData(data)\n }\n\n}","import { IMoveEvent } from '@leafer/interface'\nimport { registerUIEvent } from '@leafer/core'\n\nimport { DragEvent } from './DragEvent'\n\n@registerUIEvent()\nexport class MoveEvent extends DragEvent implements IMoveEvent {\n\n static BEFORE_MOVE = 'move.before_move'\n\n static START = 'move.start'\n static MOVE = 'move'\n static END = 'move.end'\n\n readonly moveType: 'drag' | 'move'\n}","import { IRotateEvent } from '@leafer/interface'\nimport { registerUIEvent } from '@leafer/core'\n\nimport { PointerEvent } from './PointerEvent'\n\n\n@registerUIEvent()\nexport class RotateEvent extends PointerEvent implements IRotateEvent {\n\n static BEFORE_ROTATE = 'rotate.before_rotate'\n\n static START = 'rotate.start'\n static ROTATE = 'rotate'\n static END = 'rotate.end'\n\n readonly rotation: number\n readonly totalRotation: number\n\n}","import { ISwipeEvent } from '@leafer/interface'\nimport { registerUIEvent } from '@leafer/core'\n\nimport { DragEvent } from './DragEvent'\n\n\n@registerUIEvent()\nexport class SwipeEvent extends DragEvent implements ISwipeEvent {\n\n static SWIPE = 'swipe'\n\n static LEFT = 'swipe.left'\n static RIGHT = 'swipe.right'\n static UP = 'swipe.up'\n static DOWN = 'swipe.down'\n\n readonly speed: number\n readonly direction: string\n\n}","import { IZoomEvent } from '@leafer/interface'\nimport { registerUIEvent } from '@leafer/core'\n\nimport { PointerEvent } from './PointerEvent'\n\n@registerUIEvent()\nexport class ZoomEvent extends PointerEvent implements IZoomEvent {\n\n static BEFORE_ZOOM = 'zoom.before_zoom'\n\n static START = 'zoom.start'\n static ZOOM = 'zoom'\n static END = 'zoom.end'\n\n readonly scale: number\n readonly totalScale: number\n\n}","import { IKeyCodes, IKeyEvent } from '@leafer/interface'\nimport { registerUIEvent } from '@leafer/core'\n\nimport { UIEvent } from './UIEvent'\n\n\n@registerUIEvent()\nexport class KeyEvent extends UIEvent implements IKeyEvent {\n\n static BEFORE_DOWN = 'key.before_down'\n static BEFORE_UP = 'key.before_up'\n\n static DOWN = 'key.down'\n static HOLD = 'key.hold'\n static UP = 'key.up'\n\n public readonly code: IKeyCodes\n public readonly key: string\n\n}","import { IPointerEvent, IDragEvent, ISwipeEvent, IUIEvent, IPointData, ILeafList, IDropEvent, IObject } from '@leafer/interface'\nimport { PointHelper, LeafList, isUndefined, LeafHelper } from '@leafer/core'\n\nimport { SwipeEvent, DragEvent } from '@leafer-ui/event'\n\n\nexport const InteractionHelper = {\n\n getDragEventData(startPoint: IPointData, lastPoint: IPointData, event: IPointerEvent): IDragEvent {\n return {\n ...event,\n x: event.x,\n y: event.y,\n moveX: event.x - lastPoint.x,\n moveY: event.y - lastPoint.y,\n totalX: event.x - startPoint.x,\n totalY: event.y - startPoint.y,\n } as IDragEvent\n },\n\n getDropEventData(event: IPointerEvent, list: ILeafList, data: IObject): IDropEvent {\n return {\n ...event,\n list,\n data\n }\n },\n\n getSwipeDirection(angle: number): string {\n if (angle < -45 && angle > -135) return SwipeEvent.UP\n else if (angle > 45 && angle < 135) return SwipeEvent.DOWN\n else if (angle <= 45 && angle >= -45) return SwipeEvent.RIGHT\n else return SwipeEvent.LEFT\n },\n\n getSwipeEventData(startPoint: IPointData, lastDragData: IDragEvent, event: IPointerEvent): ISwipeEvent {\n return {\n ...event,\n moveX: lastDragData.moveX,\n moveY: lastDragData.moveY,\n totalX: event.x - startPoint.x,\n totalY: event.y - startPoint.y,\n type: I.getSwipeDirection(PointHelper.getAngle(startPoint, event)),\n }\n },\n\n\n getBase(e: IObject): IUIEvent {\n const pointerUpButtons = e.button === 1 ? 4 : e.button // 0: left, 1: middle, 2: right\n return {\n altKey: e.altKey,\n ctrlKey: e.ctrlKey,\n shiftKey: e.shiftKey,\n metaKey: e.metaKey,\n buttons: isUndefined(e.buttons) ? 1 : (e.buttons === 0 ? pointerUpButtons : e.buttons), // touchEvent no button and buttons, set default\n origin: e\n } as IUIEvent\n },\n\n pathHasEventType(path: ILeafList, type: string): boolean {\n const { list } = path\n for (let i = 0, len = list.length; i < len; i++) {\n if (list[i].hasEvent(type)) return true\n }\n return false\n },\n\n filterPathByEventType(path: ILeafList, type: string): ILeafList {\n const find = new LeafList()\n const { list } = path\n for (let i = 0, len = list.length; i < len; i++) {\n if (list[i].hasEvent(type)) find.add(list[i])\n }\n return find\n },\n\n pathCanDrag(path: ILeafList): boolean {\n return path && path.list.some(item => LeafHelper.draggable(item) || (!item.isLeafer && item.hasEvent(DragEvent.DRAG)))\n },\n\n pathHasOutside(path: ILeafList): boolean { // 滚动条元素\n return path && path.list.some(item => item.isOutside)\n },\n}\n\nconst I = InteractionHelper","import { IPointerEvent, IDragEvent, ILeaf, ILeafList, ITimer, IFunction, IPointDataMap, IMoveEvent } from '@leafer/interface'\nimport { PointHelper, LeafList, LeafHelper, isNumber, isString } from '@leafer/core'\n\nimport { MoveEvent, DragEvent, DropEvent, PointerButton } from '@leafer-ui/event'\n\nimport { InteractionHelper } from './InteractionHelper'\nimport { InteractionBase } from './Interaction'\n\n\nconst emptyList = new LeafList()\nconst { getDragEventData, getDropEventData, getSwipeEventData } = InteractionHelper\n\nexport class Dragger {\n\n public interaction: InteractionBase\n\n public moving: boolean\n public dragging: boolean\n\n public dragData: IDragEvent\n public downData: IPointerEvent\n\n public draggableList: ILeafList\n public realDraggableList: ILeafList\n protected dragOverPath: ILeafList\n protected dragEnterPath: ILeafList\n\n public dragStartPoints: IPointDataMap\n public autoMoveTimer: ITimer\n\n public canAnimate: boolean\n public canDragOut: boolean\n public animateWait: IFunction\n\n constructor(interaction: InteractionBase) {\n this.interaction = interaction\n }\n\n public setDragData(data: IPointerEvent): void { // pointer down\n if (this.animateWait) this.dragEndReal()\n this.downData = this.interaction.downData\n this.dragData = getDragEventData(data, data, data)\n this.canAnimate = this.canDragOut = true\n }\n\n public getList(realDraggable?: boolean, hover?: boolean): ILeafList {\n const { proxy } = this.interaction.selector\n const hasProxyList = proxy && proxy.list.length, dragList = DragEvent.list || this.draggableList || emptyList\n return this.dragging && (hasProxyList ? (realDraggable ? emptyList : new LeafList(hover ? [...proxy.list, ...proxy.dragHoverExclude] : proxy.list)) : dragList) // realDraggable 需排除代理选择器,它有自身的拖拽逻辑\n }\n\n public checkDrag(data: IPointerEvent, canDrag: boolean): void {\n const { interaction } = this\n\n if (this.moving && data.buttons < 1) {\n this.canAnimate = false // 防止dragEnd动画\n interaction.pointerCancel() // 按住中键/右键拖出页面后的up事件接收不到\n return\n }\n\n if (!this.moving && canDrag) {\n if (this.moving = interaction.canMove(this.downData) || interaction.isHoldRightKey || interaction.isMobileDragEmpty) {\n (this.dragData as IMoveEvent).moveType = 'drag'\n interaction.emit(MoveEvent.START, this.dragData)\n }\n }\n\n if (!this.moving) this.dragStart(data, canDrag)\n\n this.drag(data)\n }\n\n public dragStart(data: IPointerEvent, canDrag: boolean): void {\n if (!this.dragging) {\n this.dragging = canDrag && PointerButton.left(data)\n if (this.dragging) {\n this.interaction.emit(DragEvent.START, this.dragData)\n this.getDraggableList(this.dragData.path)\n this.setDragStartPoints(this.realDraggableList = this.getList(true))\n }\n }\n }\n\n protected setDragStartPoints(list: ILeafList | ILeaf[]): void {\n this.dragStartPoints = {}\n list.forEach(leaf => this.dragStartPoints[leaf.innerId] = { x: leaf.x, y: leaf.y })\n }\n\n protected getDraggableList(path: ILeafList): void {\n let leaf: ILeaf\n for (let i = 0, len = path.length; i < len; i++) {\n leaf = path.list[i]\n if (LeafHelper.draggable(leaf)) {\n this.draggableList = new LeafList(leaf)\n break\n }\n }\n }\n\n public drag(data: IPointerEvent): void {\n const { interaction, dragData, downData } = this\n const { path, throughPath } = downData\n this.dragData = getDragEventData(downData, dragData, data)\n if (throughPath) this.dragData.throughPath = throughPath\n this.dragData.path = path\n\n if (this.moving) {\n (this.dragData as IMoveEvent).moveType = 'drag'\n interaction.emit(MoveEvent.BEFORE_MOVE, this.dragData)\n interaction.emit(MoveEvent.MOVE, this.dragData)\n } else if (this.dragging) {\n this.dragReal()\n interaction.emit(DragEvent.BEFORE_DRAG, this.dragData)\n interaction.emit(DragEvent.DRAG, this.dragData)\n }\n }\n\n protected dragReal(isDragEnd?: boolean): void {\n const { interaction } = this, { running } = interaction\n const list = this.realDraggableList\n if (list.length && running) {\n const { totalX, totalY } = this.dragData, { dragLimitAnimate } = interaction.p\n const checkLimitMove = !dragLimitAnimate || !!isDragEnd\n list.forEach(leaf => {\n if (leaf.draggable) {\n const axisDrag = isString(leaf.draggable)\n const move = DragEvent.getValidMove(leaf, this.dragStartPoints[leaf.innerId], { x: totalX, y: totalY }, checkLimitMove || axisDrag)\n if (dragLimitAnimate && !axisDrag && isDragEnd) LeafHelper.animateMove(leaf, move, isNumber(dragLimitAnimate) ? dragLimitAnimate : 0.3)\n else leaf.move(move)\n }\n })\n }\n }\n\n public dragOverOrOut(data: IPointerEvent): void {\n const { interaction } = this\n const { dragOverPath } = this\n const { path } = data\n this.dragOverPath = path\n\n if (dragOverPath) {\n if (path.indexAt(0) !== dragOverPath.indexAt(0)) {\n interaction.emit(DragEvent.OUT, data, dragOverPath)\n interaction.emit(DragEvent.OVER, data, path)\n }\n } else interaction.emit(DragEvent.OVER, data, path)\n }\n\n public dragEnterOrLeave(data: IPointerEvent): void {\n const { interaction } = this\n const { dragEnterPath } = this\n const { path } = data\n\n interaction.emit(DragEvent.LEAVE, data, dragEnterPath, path)\n interaction.emit(DragEvent.ENTER, data, path, dragEnterPath)\n this.dragEnterPath = path\n }\n\n public dragEnd(data: IPointerEvent, speed?: number): void {\n if (!this.dragging && !this.moving) return\n if (this.checkDragEndAnimate(data, speed)) return\n this.dragEndReal(data)\n }\n\n protected dragEndReal(data?: IPointerEvent): void {\n const { interaction, downData, dragData } = this\n if (!data) data = dragData\n const { path, throughPath } = downData\n const endDragData = getDragEventData(downData, data, data)\n if (throughPath) endDragData.throughPath = throughPath\n endDragData.path = path\n\n if (this.moving) {\n this.moving = false;\n (endDragData as IMoveEvent).moveType = 'drag'\n interaction.emit(MoveEvent.END, endDragData)\n }\n\n if (this.dragging) {\n const dropList = this.getList()\n\n this.dragging = false\n if (interaction.p.dragLimitAnimate) this.dragReal(true)\n interaction.emit(DragEvent.END, endDragData)\n\n this.swipe(data, downData, dragData, endDragData)\n this.drop(data, dropList, this.dragEnterPath)\n }\n\n this.autoMoveCancel()\n this.dragReset()\n this.animate(null, 'off')\n }\n\n\n protected swipe(data: IPointerEvent, downData: IPointerEvent, dragData: IDragEvent, endDragData: IDragEvent): void {\n const { interaction } = this\n if (PointHelper.getDistance(downData, data) > interaction.config.pointer.swipeDistance) {\n const swipeData = getSwipeEventData(downData, dragData, endDragData)\n this.interaction.emit(swipeData.type, swipeData)\n }\n }\n\n protected drop(data: IPointerEvent, dropList: ILeafList, dragEnterPath: ILeafList): void {\n const dropData = getDropEventData(data, dropList, DragEvent.data)\n dropData.path = dragEnterPath\n this.interaction.emit(DropEvent.DROP, dropData)\n this.interaction.emit(DragEvent.LEAVE, data, dragEnterPath)\n }\n\n protected dragReset(): void {\n DragEvent.list = DragEvent.data = this.draggableList = this.dragData = this.downData = this.dragOverPath = this.dragEnterPath = null\n }\n\n\n // @leafer-in/viewport will rewrite\n\n public checkDragEndAnimate(_data: IPointerEvent, _speed?: number): boolean | number { return false }\n\n public animate(_func?: IFunction, _off?: 'off'): void { } // dragEnd animation\n\n public checkDragOut(_data: IPointerEvent): void { }\n\n public autoMoveOnDragOut(_data: IPointerEvent): void { }\n\n public autoMoveCancel(): void { }\n\n // ---\n\n public destroy(): void {\n this.dragReset()\n }\n}","import { IUIEvent, ILeaf, ILeafList } from '@leafer/interface'\nimport { EventCreator, Debug } from '@leafer/core'\nimport { State } from '@leafer-ui/draw'\n\n\nconst debug = Debug.get('emit')\n\nexport function emit(type: string, data: IUIEvent, path?: ILeafList, excludePath?: ILeafList): void {\n if (!path