@galacean/effects-plugin-gui 2.10.0-alpha.5 → 2.10.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_wrap_native_super.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_function.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_assert_this_initialized.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/core/enums.ts","../src/core/theme.ts","../src/core/control.ts","../src/components/ui-canvas.ts","../src/layout/enums.ts","../src/scroll/enums.ts","../src/controls/enums.ts","../src/core/roots.ts","../src/components/gui-window-component.ts","../src/plugin/gui-plugin.ts","../src/layout/utils.ts","../src/components/ui-control.ts","../src/layout/box-container.ts","../src/layout/grid-container.ts","../src/layout/margin-container.ts","../src/layout/center-container.ts","../src/layout/aspect-ratio-container.ts","../src/layout/panel-container.ts","../src/layout/separator.ts","../src/scroll/range.ts","../src/scroll/scroll-bar.ts","../src/scroll/scroll-container.ts","../src/theme/default-theme.ts","../src/controls/label.ts","../src/controls/texture-rect.ts","../src/controls/nine-patch-rect.ts","../src/controls/color-rect.ts","../src/controls/panel.ts","../src/controls/base-button.ts","../src/controls/button.ts","../src/controls/checkbox.ts","../src/controls/check-button.ts","../src/controls/slider.ts","../src/controls/progress-bar.ts","../src/controls/text-input.ts","../src/controls/line-edit.ts","../src/controls/text-edit.ts","../src/controls/popup.ts","../src/controls/popup-menu.ts","../src/controls/menu-button.ts","../src/controls/color-picker.ts","../src/index.ts"],"sourcesContent":["function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","function _assert_this_initialized(self) {\n if (self === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\n return self;\n}\nexport { _assert_this_initialized as _ };\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\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);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\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;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\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]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\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; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","export enum MouseFilter {\n Stop,\n Pass,\n Ignore,\n}\n\nexport enum MouseBehaviorRecursive {\n Inherited,\n Disabled,\n Enabled,\n}\n\nexport enum FocusMode {\n None,\n Click,\n All,\n Accessibility,\n}\n\nexport enum FocusBehaviorRecursive {\n Inherited,\n Disabled,\n Enabled,\n}\n\nexport enum CursorShape {\n Arrow,\n Ibeam,\n PointingHand,\n Cross,\n Wait,\n Busy,\n Drag,\n CanDrop,\n Forbidden,\n Vsize,\n Hsize,\n Bdiagsize,\n Fdiagsize,\n Move,\n Vsplit,\n Hsplit,\n Help,\n}\n\n/** A preset cursor shape or a complete CSS cursor value. */\nexport type CursorStyle = CursorShape | string;\n","import { EventEmitter, math } from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n FontStyle,\n FontWeight,\n Graphics,\n Texture,\n} from '@galacean/effects';\nimport type {\n StyleBoxData,\n StyleBoxMarginsData,\n ThemeData,\n ThemeFontData,\n ThemeItemCollectionData,\n} from './data';\n\ntype Color = math.Color;\ntype Vector2 = math.Vector2;\nconst Color = math.Color;\nconst Vector2 = math.Vector2;\n\nexport enum ThemeItemType {\n Color = 'color',\n Constant = 'constant',\n Font = 'font',\n FontSize = 'fontSize',\n Icon = 'icon',\n StyleBox = 'styleBox',\n}\n\nexport interface ThemeFont {\n family: string,\n weight: FontWeight,\n style: FontStyle,\n}\n\nexport interface StyleBoxMargins {\n left: number,\n top: number,\n right: number,\n bottom: number,\n}\n\nexport interface StyleBoxRect {\n x: number,\n y: number,\n width: number,\n height: number,\n}\n\nexport enum PatchStretchMode {\n Stretch,\n Tile,\n TileFit,\n}\n\nexport type ThemeValue = Color | number | ThemeFont | Texture | StyleBox | null;\n\nexport interface ThemeItemDefinition<T extends ThemeValue = ThemeValue> {\n type: ThemeItemType,\n defaultValue: T,\n affectsLayout?: boolean,\n}\n\nexport type ThemeItemDefinitions = Record<string, ThemeItemDefinition>;\n\ntype StyleBoxEvent = { changed: [styleBox: StyleBox] };\ntype ThemeEvent = { changed: [theme: Theme, affectsLayout: boolean] };\ntype RegisteredThemeType = { baseType: string | null, definitions: ThemeItemDefinitions };\n\nconst ZERO_MARGINS: StyleBoxMargins = { left: 0, top: 0, right: 0, bottom: 0 };\n\nfunction cloneMargins (value: StyleBoxMargins): StyleBoxMargins {\n return { left: value.left, top: value.top, right: value.right, bottom: value.bottom };\n}\n\nfunction marginsFromData (data?: StyleBoxMarginsData): StyleBoxMargins {\n return {\n left: data?.left ?? 0,\n top: data?.top ?? 0,\n right: data?.right ?? 0,\n bottom: data?.bottom ?? 0,\n };\n}\n\nfunction finite (name: string, value: number): number {\n if (!Number.isFinite(value)) {\n throw new RangeError(`${name} must be finite.`);\n }\n\n return value;\n}\n\nfunction nonNegative (name: string, value: number): number {\n return Math.max(0, finite(name, value));\n}\n\nfunction cloneFont (value: ThemeFont): ThemeFont {\n return { family: value.family, weight: value.weight, style: value.style };\n}\n\nfunction fontFromData (value: ThemeFontData): ThemeFont {\n return { family: value.family, weight: value.weight ?? 'normal', style: value.style ?? 'normal' };\n}\n\nexport function cloneThemeValue<T extends ThemeValue> (value: T): T {\n if (value instanceof Color) {\n return value.clone() as T;\n }\n if (value && typeof value === 'object' && 'family' in value && 'weight' in value && 'style' in value) {\n return cloneFont(value) as T;\n }\n\n return value;\n}\n\n/** Drawable box resource used for rendering and content measurement. */\nexport abstract class StyleBox {\n private readonly eventEmitter = new EventEmitter<StyleBoxEvent>();\n private contentMargins = cloneMargins(ZERO_MARGINS);\n private readOnly = false;\n\n on (eventName: 'changed', listener: EventEmitterListener<StyleBoxEvent['changed']>): void {\n this.eventEmitter.on(eventName, listener);\n }\n\n off (eventName: 'changed', listener: EventEmitterListener<StyleBoxEvent['changed']>): void {\n this.eventEmitter.off(eventName, listener);\n }\n\n getContentMargins (): StyleBoxMargins { return cloneMargins(this.contentMargins); }\n\n get isReadOnly (): boolean { return this.readOnly; }\n\n /** @internal Makes a native fallback StyleBox immutable. */\n makeReadOnly (): this {\n this.readOnly = true;\n\n return this;\n }\n\n setContentMargins (left: number, top: number, right: number, bottom: number): void {\n this.assertMutable();\n const next = {\n left: nonNegative('StyleBox left content margin', left),\n top: nonNegative('StyleBox top content margin', top),\n right: nonNegative('StyleBox right content margin', right),\n bottom: nonNegative('StyleBox bottom content margin', bottom),\n };\n\n if (Object.keys(next).some(key => next[key as keyof StyleBoxMargins] !== this.contentMargins[key as keyof StyleBoxMargins])) {\n this.contentMargins = next;\n this.notifyChanged();\n }\n }\n\n getMinimumSize (): Vector2 {\n return new Vector2(\n this.contentMargins.left + this.contentMargins.right,\n this.contentMargins.top + this.contentMargins.bottom,\n );\n }\n\n abstract draw (graphics: Graphics, rect: StyleBoxRect): void;\n\n protected notifyChanged (): void { this.eventEmitter.emit('changed', this); }\n protected assertMutable (): void {\n if (this.readOnly) {throw new Error('Native fallback StyleBoxes are read-only.');}\n }\n}\n\nexport class StyleBoxEmpty extends StyleBox {\n static readonly shared = new StyleBoxEmpty().makeReadOnly();\n override draw (): void {}\n}\n\nexport class StyleBoxFlat extends StyleBox {\n private backgroundColor = Color.CLEAR.clone();\n private borderColor = Color.CLEAR.clone();\n private borderWidths = cloneMargins(ZERO_MARGINS);\n private cornerRadii = cloneMargins(ZERO_MARGINS);\n\n getBackgroundColor (): Color { return this.backgroundColor.clone(); }\n getBorderColor (): Color { return this.borderColor.clone(); }\n getBorderWidths (): StyleBoxMargins { return cloneMargins(this.borderWidths); }\n getCornerRadii (): StyleBoxMargins { return cloneMargins(this.cornerRadii); }\n\n setBackgroundColor (value: Color): void {\n this.assertMutable();\n if (!this.backgroundColor.equals(value)) {\n this.backgroundColor.copyFrom(value);\n this.notifyChanged();\n }\n }\n\n setBorderColor (value: Color): void {\n this.assertMutable();\n if (!this.borderColor.equals(value)) {\n this.borderColor.copyFrom(value);\n this.notifyChanged();\n }\n }\n\n setBorderWidths (left: number, top: number, right: number, bottom: number): void {\n this.assertMutable();\n const next = {\n left: nonNegative('StyleBoxFlat left border width', left),\n top: nonNegative('StyleBoxFlat top border width', top),\n right: nonNegative('StyleBoxFlat right border width', right),\n bottom: nonNegative('StyleBoxFlat bottom border width', bottom),\n };\n\n if (Object.keys(next).some(key => next[key as keyof StyleBoxMargins] !== this.borderWidths[key as keyof StyleBoxMargins])) {\n this.borderWidths = next;\n this.notifyChanged();\n }\n }\n\n setCornerRadii (topLeft: number, topRight: number, bottomRight: number, bottomLeft: number): void {\n this.assertMutable();\n const next = {\n left: nonNegative('StyleBoxFlat top-left corner radius', topLeft),\n top: nonNegative('StyleBoxFlat top-right corner radius', topRight),\n right: nonNegative('StyleBoxFlat bottom-right corner radius', bottomRight),\n bottom: nonNegative('StyleBoxFlat bottom-left corner radius', bottomLeft),\n };\n\n if (Object.keys(next).some(key => next[key as keyof StyleBoxMargins] !== this.cornerRadii[key as keyof StyleBoxMargins])) {\n this.cornerRadii = next;\n this.notifyChanged();\n }\n }\n\n override draw (graphics: Graphics, rect: StyleBoxRect): void {\n if (rect.width <= 0 || rect.height <= 0) {\n return;\n }\n if (this.hasRoundedCorners()) {\n this.drawRounded(graphics, rect);\n\n return;\n }\n graphics.fillRectangle(rect.x, rect.y, rect.width, rect.height, this.backgroundColor);\n const border = this.borderWidths;\n\n if (border.top > 0) {graphics.fillRectangle(rect.x, rect.y, rect.width, Math.min(border.top, rect.height), this.borderColor);}\n if (border.bottom > 0) {\n const height = Math.min(border.bottom, rect.height);\n\n graphics.fillRectangle(rect.x, rect.y + rect.height - height, rect.width, height, this.borderColor);\n }\n if (border.left > 0) {graphics.fillRectangle(rect.x, rect.y, Math.min(border.left, rect.width), rect.height, this.borderColor);}\n if (border.right > 0) {\n const width = Math.min(border.right, rect.width);\n\n graphics.fillRectangle(rect.x + rect.width - width, rect.y, width, rect.height, this.borderColor);\n }\n }\n\n private hasRoundedCorners (): boolean {\n const radii = this.cornerRadii;\n\n return radii.left > 0 || radii.top > 0 || radii.right > 0 || radii.bottom > 0;\n }\n\n private drawRounded (graphics: Graphics, rect: StyleBoxRect): void {\n const border = adaptBorderWidths(this.borderWidths, rect.width, rect.height);\n const radii = adaptCornerRadii(this.cornerRadii, border, rect.width, rect.height);\n const hasBorder = border.left > 0 || border.top > 0 || border.right > 0 || border.bottom > 0;\n\n if (!hasBorder) {\n drawRoundedFill(graphics, rect, radii, this.backgroundColor);\n\n return;\n }\n const inner = {\n x: rect.x + border.left,\n y: rect.y + border.top,\n width: Math.max(0, rect.width - border.left - border.right),\n height: Math.max(0, rect.height - border.top - border.bottom),\n };\n\n if (inner.width <= 0 || inner.height <= 0) {\n drawRoundedFill(graphics, rect, radii, this.borderColor);\n\n return;\n }\n const innerRadii = {\n left: Math.max(0, radii.left - Math.min(border.left, border.top)),\n top: Math.max(0, radii.top - Math.min(border.right, border.top)),\n right: Math.max(0, radii.right - Math.min(border.right, border.bottom)),\n bottom: Math.max(0, radii.bottom - Math.min(border.left, border.bottom)),\n };\n\n drawRoundedRing(graphics, rect, radii, inner, innerRadii, this.borderColor);\n drawRoundedFill(graphics, inner, innerRadii, this.backgroundColor);\n }\n}\n\nfunction adaptBorderWidths (border: StyleBoxMargins, width: number, height: number): StyleBoxMargins {\n const adapted = createInfiniteMargins();\n\n adaptMarginPair('top', 'bottom', adapted, border, height, height, height);\n adaptMarginPair('left', 'right', adapted, border, width, width, width);\n\n return adapted;\n}\n\nfunction adaptCornerRadii (\n radii: StyleBoxMargins,\n border: StyleBoxMargins,\n width: number,\n height: number,\n): StyleBoxMargins {\n const adapted = createInfiniteMargins();\n\n adaptMarginPair('top', 'right', adapted, radii, height, height - border.bottom, height - border.top);\n adaptMarginPair('left', 'bottom', adapted, radii, height, height - border.bottom, height - border.top);\n adaptMarginPair('left', 'top', adapted, radii, width, width - border.right, width - border.left);\n adaptMarginPair('bottom', 'right', adapted, radii, width, width - border.right, width - border.left);\n\n return adapted;\n}\n\nfunction adaptMarginPair (\n first: keyof StyleBoxMargins,\n second: keyof StyleBoxMargins,\n adapted: StyleBoxMargins,\n source: StyleBoxMargins,\n available: number,\n firstMaximum: number,\n secondMaximum: number,\n): void {\n const sum = source[first] + source[second];\n const factor = sum > 0 ? Math.min(1, available / sum) : 1;\n\n adapted[first] = Math.min(source[first] * factor, firstMaximum, adapted[first]);\n adapted[second] = Math.min(source[second] * factor, secondMaximum, adapted[second]);\n}\n\nfunction createInfiniteMargins (): StyleBoxMargins {\n return {\n left: Number.POSITIVE_INFINITY,\n top: Number.POSITIVE_INFINITY,\n right: Number.POSITIVE_INFINITY,\n bottom: Number.POSITIVE_INFINITY,\n };\n}\n\nfunction drawRoundedFill (\n graphics: Graphics,\n rect: StyleBoxRect,\n radii: StyleBoxMargins,\n color: Color,\n): void {\n const points = getRoundedPoints(rect, radii);\n const centerX = rect.x + rect.width * 0.5;\n const centerY = rect.y + rect.height * 0.5;\n\n for (let index = 0; index < points.length; index++) {\n const current = points[index];\n const next = points[(index + 1) % points.length];\n\n graphics.fillTriangle(centerX, centerY, current[0], current[1], next[0], next[1], color);\n }\n}\n\nfunction drawRoundedRing (\n graphics: Graphics,\n outerRect: StyleBoxRect,\n outerRadii: StyleBoxMargins,\n innerRect: StyleBoxRect,\n innerRadii: StyleBoxMargins,\n color: Color,\n): void {\n const outer = getRoundedPoints(outerRect, outerRadii);\n const inner = getRoundedPoints(innerRect, innerRadii);\n\n for (let index = 0; index < outer.length; index++) {\n const next = (index + 1) % outer.length;\n\n graphics.fillTriangle(\n outer[index][0], outer[index][1], outer[next][0], outer[next][1],\n inner[index][0], inner[index][1], color,\n );\n graphics.fillTriangle(\n outer[next][0], outer[next][1], inner[next][0], inner[next][1],\n inner[index][0], inner[index][1], color,\n );\n }\n}\n\nfunction getRoundedPoints (rect: StyleBoxRect, radii: StyleBoxMargins): Array<[number, number]> {\n const points: Array<[number, number]> = [];\n const segments = 5;\n const corners: Array<[number, number, number, number]> = [\n [rect.x + radii.left, rect.y + radii.left, radii.left, Math.PI],\n [rect.x + rect.width - radii.top, rect.y + radii.top, radii.top, Math.PI * 1.5],\n [rect.x + rect.width - radii.right, rect.y + rect.height - radii.right, radii.right, 0],\n [rect.x + radii.bottom, rect.y + rect.height - radii.bottom, radii.bottom, Math.PI * 0.5],\n ];\n\n for (const [cx, cy, radius, start] of corners) {\n for (let index = 0; index <= segments; index++) {\n const angle = start + index / segments * Math.PI * 0.5;\n\n points.push([cx + Math.cos(angle) * radius, cy + Math.sin(angle) * radius]);\n }\n }\n\n return points;\n}\n\nexport class StyleBoxTexture extends StyleBox {\n private _texture: Texture | null = null;\n private sourceRect: StyleBoxRect | null = null;\n private patchMargins = cloneMargins(ZERO_MARGINS);\n private tint = Color.WHITE.clone();\n private _horizontalAxisStretchMode = PatchStretchMode.Stretch;\n private _verticalAxisStretchMode = PatchStretchMode.Stretch;\n private _drawCenter = true;\n\n get texture (): Texture | null { return this._texture; }\n set texture (value: Texture | null) {\n this.assertMutable();\n if (this._texture !== value) {\n this._texture = value;\n this.notifyChanged();\n }\n }\n\n get horizontalAxisStretchMode (): PatchStretchMode { return this._horizontalAxisStretchMode; }\n set horizontalAxisStretchMode (value: PatchStretchMode) {\n this.assertMutable();\n if (this._horizontalAxisStretchMode !== value) {\n this._horizontalAxisStretchMode = value;\n this.notifyChanged();\n }\n }\n\n get verticalAxisStretchMode (): PatchStretchMode { return this._verticalAxisStretchMode; }\n set verticalAxisStretchMode (value: PatchStretchMode) {\n this.assertMutable();\n if (this._verticalAxisStretchMode !== value) {\n this._verticalAxisStretchMode = value;\n this.notifyChanged();\n }\n }\n\n get drawCenter (): boolean { return this._drawCenter; }\n set drawCenter (value: boolean) {\n this.assertMutable();\n if (this._drawCenter !== value) {\n this._drawCenter = value;\n this.notifyChanged();\n }\n }\n\n getSourceRect (): StyleBoxRect | null { return this.sourceRect ? { ...this.sourceRect } : null; }\n getPatchMargins (): StyleBoxMargins { return cloneMargins(this.patchMargins); }\n getTint (): Color { return this.tint.clone(); }\n\n setSourceRect (x: number, y: number, width: number, height: number): void {\n this.assertMutable();\n this.sourceRect = {\n x: finite('StyleBoxTexture source x', x),\n y: finite('StyleBoxTexture source y', y),\n width: nonNegative('StyleBoxTexture source width', width),\n height: nonNegative('StyleBoxTexture source height', height),\n };\n this.notifyChanged();\n }\n\n clearSourceRect (): void {\n this.assertMutable();\n if (this.sourceRect) {\n this.sourceRect = null;\n this.notifyChanged();\n }\n }\n\n setPatchMargins (left: number, top: number, right: number, bottom: number): void {\n this.assertMutable();\n this.patchMargins = {\n left: nonNegative('StyleBoxTexture left patch margin', left),\n top: nonNegative('StyleBoxTexture top patch margin', top),\n right: nonNegative('StyleBoxTexture right patch margin', right),\n bottom: nonNegative('StyleBoxTexture bottom patch margin', bottom),\n };\n this.notifyChanged();\n }\n\n setTint (value: Color): void {\n this.assertMutable();\n if (!this.tint.equals(value)) {\n this.tint.copyFrom(value);\n this.notifyChanged();\n }\n }\n\n override draw (graphics: Graphics, rect: StyleBoxRect): void {\n const texture = this.texture;\n\n if (!texture || rect.width <= 0 || rect.height <= 0) {return;}\n const source = this.sourceRect ?? { x: 0, y: 0, width: texture.width, height: texture.height };\n\n graphics.drawNinePatch(rect.x, rect.y, rect.width, rect.height, texture, {\n sourceX: source.x,\n sourceY: source.y,\n sourceWidth: source.width,\n sourceHeight: source.height,\n marginLeft: this.patchMargins.left,\n marginTop: this.patchMargins.top,\n marginRight: this.patchMargins.right,\n marginBottom: this.patchMargins.bottom,\n horizontalMode: this.horizontalAxisStretchMode,\n verticalMode: this.verticalAxisStretchMode,\n drawCenter: this.drawCenter,\n }, this.tint);\n }\n}\n\n/** Registry for stable control type inheritance and immutable native defaults. */\nexport class ThemeRegistry {\n private static readonly types = new Map<string, RegisteredThemeType>();\n\n static registerType (type: string, baseType: string | null, definitions: ThemeItemDefinitions = {}): void {\n if (!type) {throw new Error('Theme type names cannot be empty.');}\n if (baseType === type) {throw new Error(`Theme type ${type} cannot inherit itself.`);}\n if (baseType && !this.types.has(baseType)) {throw new Error(`Unknown base theme type: ${baseType}.`);}\n if (baseType && this.getTypeChain(baseType).includes(type)) {\n throw new Error(`Theme type inheritance cycle detected at ${type}.`);\n }\n const previous = this.types.get(type);\n\n if (previous && previous.baseType !== baseType) {\n throw new Error(`Theme type ${type} is already registered with base ${previous.baseType ?? '<none>'}.`);\n }\n const storedDefinitions: ThemeItemDefinitions = { ...(previous?.definitions ?? {}) };\n\n for (const name of Object.keys(definitions)) {\n if (storedDefinitions[name]) {\n throw new Error(`Theme item ${type}.${name} is already registered.`);\n }\n const definition = definitions[name];\n const defaultValue = cloneThemeValue(definition.defaultValue);\n\n if (defaultValue instanceof StyleBox) {defaultValue.makeReadOnly();}\n storedDefinitions[name] = { ...definition, defaultValue };\n }\n this.types.set(type, { baseType, definitions: storedDefinitions });\n }\n\n static hasType (type: string): boolean { return this.types.has(type); }\n\n static getTypeChain (type: string): string[] {\n const result: string[] = [];\n const visited = new Set<string>();\n let current: string | null = type;\n\n while (current && !visited.has(current)) {\n result.push(current);\n visited.add(current);\n current = this.types.get(current)?.baseType ?? null;\n }\n\n return result;\n }\n\n static getDefault (type: string, itemType: ThemeItemType, name: string): ThemeValue | undefined {\n const definition = this.types.get(type)?.definitions[name];\n\n return definition?.type === itemType ? cloneThemeValue(definition.defaultValue) : undefined;\n }\n\n static getItemDefinition (type: string, itemType: ThemeItemType, name: string): ThemeItemDefinition | undefined {\n for (const dependency of this.getTypeChain(type)) {\n const definition = this.types.get(dependency)?.definitions[name];\n\n if (definition?.type === itemType) {return definition;}\n }\n\n return undefined;\n }\n\n static affectsLayout (type: string, itemType: ThemeItemType, name: string): boolean {\n const definition = this.getItemDefinition(type, itemType, name);\n\n if (definition) {return definition.affectsLayout ?? false;}\n\n return itemType === ThemeItemType.Constant\n || itemType === ThemeItemType.Font\n || itemType === ThemeItemType.FontSize\n || itemType === ThemeItemType.StyleBox;\n }\n\n static getItemDefinitions (type: string, includeInherited = true): ThemeItemDefinitions {\n const result: ThemeItemDefinitions = {};\n const chain = includeInherited ? this.getTypeChain(type).reverse() : [type];\n\n for (const dependency of chain) {\n const definitions = this.types.get(dependency)?.definitions ?? {};\n\n for (const name of Object.keys(definitions)) {\n const definition = definitions[name];\n\n result[name] = { ...definition, defaultValue: cloneThemeValue(definition.defaultValue) };\n }\n }\n\n return result;\n }\n}\n\nexport class Theme {\n private readonly eventEmitter = new EventEmitter<ThemeEvent>();\n private readonly values = new Map<string, Map<ThemeItemType, Map<string, ThemeValue>>>();\n private readonly variations = new Map<string, string>();\n private readonly styleBoxReferences = new Map<StyleBox, number>();\n private batchDepth = 0;\n private changePending = false;\n private layoutChangePending = false;\n private readonly styleBoxChanged = () => this.notifyChanged(true);\n\n on (eventName: 'changed', listener: EventEmitterListener<ThemeEvent['changed']>): void {\n this.eventEmitter.on(eventName, listener);\n }\n\n off (eventName: 'changed', listener: EventEmitterListener<ThemeEvent['changed']>): void {\n this.eventEmitter.off(eventName, listener);\n }\n\n batch<T> (callback: () => T): T {\n this.batchDepth++;\n try {\n return callback();\n } finally {\n this.batchDepth--;\n if (this.batchDepth === 0 && this.changePending) {\n this.changePending = false;\n const affectsLayout = this.layoutChangePending;\n\n this.layoutChangePending = false;\n this.eventEmitter.emit('changed', this, affectsLayout);\n }\n }\n }\n\n setTypeVariation (variation: string, baseType: string): void {\n if (!variation || !baseType || variation === baseType) {throw new Error('Theme variations require distinct non-empty names.');}\n if (ThemeRegistry.hasType(variation)) {\n throw new Error(`Theme variation ${variation} conflicts with a registered control type.`);\n }\n if (!ThemeRegistry.hasType(baseType) && !this.variations.has(baseType)) {\n throw new Error(`Unknown theme variation base type: ${baseType}.`);\n }\n let current: string | undefined = baseType;\n\n while (current) {\n if (current === variation) {throw new Error(`Theme variation cycle detected at ${variation}.`);}\n current = this.variations.get(current);\n }\n if (this.variations.get(variation) !== baseType) {\n this.variations.set(variation, baseType);\n this.notifyChanged(true);\n }\n }\n\n clearTypeVariation (variation: string): void {\n for (const [dependent, base] of this.variations) {\n if (dependent !== variation && base === variation) {\n throw new Error(`Theme variation ${variation} is still used by ${dependent}.`);\n }\n }\n if (this.variations.delete(variation)) {this.notifyChanged(true);}\n }\n\n hasTypeVariation (variation: string): boolean { return this.variations.has(variation); }\n getTypeVariationBase (variation: string): string | undefined { return this.variations.get(variation); }\n\n getTypeDependencies (variation: string): string[] {\n const result: string[] = [];\n const visited = new Set<string>();\n let current = variation;\n\n while (!visited.has(current)) {\n result.push(current);\n visited.add(current);\n const base = this.variations.get(current);\n\n if (!base) {\n result.push(...ThemeRegistry.getTypeChain(current).slice(1));\n\n return result;\n }\n current = base;\n }\n\n throw new Error(`Theme variation cycle detected at ${variation}.`);\n }\n\n setColor (type: string, name: string, value: Color): void { this.setItem(type, ThemeItemType.Color, name, value); }\n getColor (type: string, name: string): Color | undefined { return this.getItem(type, ThemeItemType.Color, name) as Color | undefined; }\n hasColor (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.Color, name); }\n clearColor (type: string, name: string): void { this.clearItem(type, ThemeItemType.Color, name); }\n setConstant (type: string, name: string, value: number): void { this.setItem(type, ThemeItemType.Constant, name, finite(name, value)); }\n getConstant (type: string, name: string): number | undefined { return this.getItem(type, ThemeItemType.Constant, name) as number | undefined; }\n hasConstant (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.Constant, name); }\n clearConstant (type: string, name: string): void { this.clearItem(type, ThemeItemType.Constant, name); }\n setFont (type: string, name: string, value: ThemeFont): void { this.setItem(type, ThemeItemType.Font, name, value); }\n getFont (type: string, name: string): ThemeFont | undefined { return this.getItem(type, ThemeItemType.Font, name) as ThemeFont | undefined; }\n hasFont (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.Font, name); }\n clearFont (type: string, name: string): void { this.clearItem(type, ThemeItemType.Font, name); }\n setFontSize (type: string, name: string, value: number): void {\n if (!Number.isFinite(value) || value <= 0) {throw new RangeError(`${name} must be a positive finite font size.`);}\n this.setItem(type, ThemeItemType.FontSize, name, value);\n }\n getFontSize (type: string, name: string): number | undefined { return this.getItem(type, ThemeItemType.FontSize, name) as number | undefined; }\n hasFontSize (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.FontSize, name); }\n clearFontSize (type: string, name: string): void { this.clearItem(type, ThemeItemType.FontSize, name); }\n setIcon (type: string, name: string, value: Texture | null): void { this.setItem(type, ThemeItemType.Icon, name, value); }\n getIcon (type: string, name: string): Texture | null | undefined { return this.getItem(type, ThemeItemType.Icon, name) as Texture | null | undefined; }\n hasIcon (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.Icon, name); }\n clearIcon (type: string, name: string): void { this.clearItem(type, ThemeItemType.Icon, name); }\n setStyleBox (type: string, name: string, value: StyleBox): void { this.setItem(type, ThemeItemType.StyleBox, name, value); }\n getStyleBox (type: string, name: string): StyleBox | undefined { return this.getItem(type, ThemeItemType.StyleBox, name) as StyleBox | undefined; }\n hasStyleBox (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.StyleBox, name); }\n clearStyleBox (type: string, name: string): void { this.clearItem(type, ThemeItemType.StyleBox, name); }\n\n hasItem (type: string, itemType: ThemeItemType, name: string): boolean {\n return this.values.get(type)?.get(itemType)?.has(name) ?? false;\n }\n\n getItem (type: string, itemType: ThemeItemType, name: string): ThemeValue | undefined {\n const value = this.values.get(type)?.get(itemType)?.get(name);\n\n return value === undefined ? undefined : cloneThemeValue(value);\n }\n\n clearItem (type: string, itemType: ThemeItemType, name: string): void {\n const categories = this.values.get(type);\n const items = categories?.get(itemType);\n const previous = items?.get(name);\n\n if (!items?.delete(name)) {return;}\n if (items.size === 0) {categories?.delete(itemType);}\n if (categories?.size === 0) {this.values.delete(type);}\n if (previous instanceof StyleBox) {this.releaseStyleBox(previous);}\n this.notifyChanged(this.affectsLayout(type, itemType, name));\n }\n\n clear (): void {\n if (this.values.size === 0 && this.variations.size === 0) {return;}\n for (const styleBox of this.styleBoxReferences.keys()) {\n styleBox.off('changed', this.styleBoxChanged);\n }\n this.styleBoxReferences.clear();\n this.values.clear();\n this.variations.clear();\n this.notifyChanged(true);\n }\n\n static fromData (engine: Engine, data: ThemeData): Theme {\n const theme = new Theme();\n\n theme.batch(() => {\n const variations = data.variations ?? {};\n const remaining = new Map<string, string>();\n\n for (const variation of Object.keys(variations)) {remaining.set(variation, variations[variation]);}\n\n while (remaining.size > 0) {\n let progressed = false;\n\n for (const [variation, base] of remaining) {\n if (ThemeRegistry.hasType(base) || theme.hasTypeVariation(base)) {\n theme.setTypeVariation(variation, base);\n remaining.delete(variation);\n progressed = true;\n }\n }\n if (!progressed) {throw new Error('Theme data contains an unknown or cyclic variation.');}\n }\n for (const type of Object.keys(data.types)) {theme.setCollectionFromData(engine, type, data.types[type]);}\n });\n\n return theme;\n }\n\n private setCollectionFromData (engine: Engine, type: string, data: ThemeItemCollectionData): void {\n const colors = data.colors ?? {};\n const constants = data.constants ?? {};\n const fonts = data.fonts ?? {};\n const fontSizes = data.fontSizes ?? {};\n const icons = data.icons ?? {};\n const styleBoxes = data.styleBoxes ?? {};\n\n for (const name of Object.keys(colors)) {\n const value = colors[name];\n\n this.setColor(type, name, new Color(value.r, value.g, value.b, value.a));\n }\n for (const name of Object.keys(constants)) {this.setConstant(type, name, constants[name]);}\n for (const name of Object.keys(fonts)) {this.setFont(type, name, fontFromData(fonts[name]));}\n for (const name of Object.keys(fontSizes)) {this.setFontSize(type, name, fontSizes[name]);}\n for (const name of Object.keys(icons)) {\n const value = icons[name];\n\n this.setIcon(type, name, value ? engine.findObject<Texture>(value) : null);\n }\n for (const name of Object.keys(styleBoxes)) {this.setStyleBox(type, name, styleBoxFromData(engine, styleBoxes[name]));}\n }\n\n private setItem (type: string, itemType: ThemeItemType, name: string, value: ThemeValue): void {\n if (!type || !name) {throw new Error('Theme type and item names cannot be empty.');}\n let categories = this.values.get(type);\n\n if (!categories) {this.values.set(type, categories = new Map());}\n let items = categories.get(itemType);\n\n if (!items) {categories.set(itemType, items = new Map());}\n const previous = items.get(name);\n\n if (previous instanceof StyleBox) {this.releaseStyleBox(previous);}\n const stored = cloneThemeValue(value);\n\n items.set(name, stored);\n if (stored instanceof StyleBox) {this.retainStyleBox(stored);}\n this.notifyChanged(this.affectsLayout(type, itemType, name));\n }\n\n private retainStyleBox (styleBox: StyleBox): void {\n const count = this.styleBoxReferences.get(styleBox) ?? 0;\n\n if (count === 0) {styleBox.on('changed', this.styleBoxChanged);}\n this.styleBoxReferences.set(styleBox, count + 1);\n }\n\n private releaseStyleBox (styleBox: StyleBox): void {\n const count = this.styleBoxReferences.get(styleBox) ?? 0;\n\n if (count <= 1) {\n styleBox.off('changed', this.styleBoxChanged);\n this.styleBoxReferences.delete(styleBox);\n } else {this.styleBoxReferences.set(styleBox, count - 1);}\n }\n\n private notifyChanged (affectsLayout: boolean): void {\n if (this.batchDepth > 0) {\n this.changePending = true;\n this.layoutChangePending ||= affectsLayout;\n } else {this.eventEmitter.emit('changed', this, affectsLayout);}\n }\n\n private affectsLayout (type: string, itemType: ThemeItemType, name: string): boolean {\n for (const dependency of this.getTypeDependencies(type)) {\n const definition = ThemeRegistry.getItemDefinition(dependency, itemType, name);\n\n if (definition) {return definition.affectsLayout ?? false;}\n }\n\n return itemType === ThemeItemType.Constant\n || itemType === ThemeItemType.Font\n || itemType === ThemeItemType.FontSize\n || itemType === ThemeItemType.StyleBox;\n }\n}\n\nexport function styleBoxFromData (engine: Engine, data: StyleBoxData): StyleBox {\n let styleBox: StyleBox;\n\n if (data.type === 'flat') {\n const flat = new StyleBoxFlat();\n\n if (data.backgroundColor) {flat.setBackgroundColor(new Color(data.backgroundColor.r, data.backgroundColor.g, data.backgroundColor.b, data.backgroundColor.a));}\n if (data.borderColor) {flat.setBorderColor(new Color(data.borderColor.r, data.borderColor.g, data.borderColor.b, data.borderColor.a));}\n const border = marginsFromData(data.borderWidths);\n\n flat.setBorderWidths(border.left, border.top, border.right, border.bottom);\n const corners = marginsFromData(data.cornerRadii);\n\n flat.setCornerRadii(corners.left, corners.top, corners.right, corners.bottom);\n styleBox = flat;\n } else if (data.type === 'texture') {\n const texture = new StyleBoxTexture();\n\n texture.texture = data.texture ? engine.findObject<Texture>(data.texture) : null;\n if (data.sourceRect) {texture.setSourceRect(data.sourceRect.position[0], data.sourceRect.position[1], data.sourceRect.size[0], data.sourceRect.size[1]);}\n const patch = marginsFromData(data.patchMargins);\n\n texture.setPatchMargins(patch.left, patch.top, patch.right, patch.bottom);\n texture.horizontalAxisStretchMode = data.horizontalAxisStretchMode ?? PatchStretchMode.Stretch;\n texture.verticalAxisStretchMode = data.verticalAxisStretchMode ?? PatchStretchMode.Stretch;\n texture.drawCenter = data.drawCenter ?? true;\n if (data.tint) {texture.setTint(new Color(data.tint.r, data.tint.g, data.tint.b, data.tint.a));}\n styleBox = texture;\n } else {styleBox = new StyleBoxEmpty();}\n const content = marginsFromData(data.contentMargins);\n\n styleBox.setContentMargins(content.left, content.top, content.right, content.bottom);\n\n return styleBox;\n}\n\nexport const themeFallbacks = {\n color: Color.CLEAR.clone(),\n constant: 0,\n font: { family: 'sans-serif', weight: 'normal', style: 'normal' } as ThemeFont,\n fontSize: 14,\n icon: null as Texture | null,\n styleBox: StyleBoxEmpty.shared,\n};\n","import { math } from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n FontStyle,\n FontWeight,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n InputEventScreenDrag,\n InputEventScreenTouch,\n NinePatchDrawOptions,\n TextMeasurement,\n Texture,\n TextureRegion,\n VFXItem,\n} from '@galacean/effects';\nimport {\n effectsClass,\n EventEmitter,\n} from '@galacean/effects';\nimport type { UIControl } from '../components/ui-control';\nimport type { ControlData, ThemeItemCollectionData } from './data';\nimport type { CursorStyle } from './enums';\nimport {\n CursorShape,\n FocusBehaviorRecursive,\n FocusMode,\n MouseBehaviorRecursive,\n MouseFilter,\n} from './enums';\nimport {\n cloneThemeValue,\n StyleBox,\n styleBoxFromData,\n themeFallbacks,\n ThemeItemType,\n ThemeRegistry,\n} from './theme';\nimport type { Theme, ThemeFont, ThemeValue } from './theme';\n\ntype Color = math.Color;\ntype Matrix3 = math.Matrix3;\ntype Vector2 = math.Vector2;\nconst Color = math.Color;\nconst Matrix3 = math.Matrix3;\nconst Vector2 = math.Vector2;\n\nexport type Rect = {\n position: Vector2,\n size: Vector2,\n};\n\n/** Bit flags that describe how a Control uses space assigned by a Container. */\nexport enum SizeFlags {\n ShrinkBegin = 0,\n Fill = 1,\n Expand = 2,\n ShrinkCenter = 4,\n ShrinkEnd = 8,\n ExpandFill = Fill | Expand,\n}\n\n/** Direction in which a Control grows when a minimum size makes its requested rectangle larger. */\nexport enum GrowDirection {\n Begin,\n End,\n Both,\n}\n\nexport type LayoutPreset =\n | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'\n | 'centerLeft' | 'centerTop' | 'centerRight' | 'centerBottom'\n | 'center'\n | 'leftWide' | 'topWide' | 'rightWide' | 'bottomWide'\n | 'vcenterWide' | 'hcenterWide'\n | 'fullRect';\n\nexport type ControlEvent = {\n locationChanged: [control: Control],\n sizeChanged: [control: Control],\n parentChanged: [control: Control],\n minimumSizeChanged: [control: Control],\n desiredSizeChanged: [control: Control],\n maximumSizeChanged: [control: Control],\n sizeFlagsChanged: [control: Control],\n visibilityChanged: [control: Control],\n enabledChanged: [control: Control],\n themeChanged: [control: Control, affectsLayout: boolean],\n};\n\ntype ThemeCacheEntry = { found: boolean, value: ThemeValue };\n\nconst enum MeasurementChange {\n Minimum = 1,\n Desired = 2,\n Maximum = 4,\n All = Minimum | Desired | Maximum,\n}\n\nexport type RootControlEvent = ControlEvent & {\n guiFocusChanged: [control: Control | null],\n};\n\nfunction normalizeMeasuredMinimum (value: Vector2): Vector2 {\n if (!Number.isFinite(value.x) || !Number.isFinite(value.y)) {\n throw new RangeError('Control minimum and desired sizes must be finite.');\n }\n\n return new Vector2(Math.max(0, value.x), Math.max(0, value.y));\n}\n\nfunction normalizeMeasuredMaximum (value: Vector2): Vector2 {\n if (!Number.isFinite(value.x) || !Number.isFinite(value.y)) {\n throw new RangeError('Control maximum sizes must be finite.');\n }\n\n return new Vector2(value.x < 0 ? -1 : value.x, value.y < 0 ? -1 : value.y);\n}\n\nfunction combineMaximum (measured: number, custom: number): number {\n if (measured < 0) {\n return custom;\n }\n if (custom < 0) {\n return measured;\n }\n\n return Math.min(measured, custom);\n}\n\nfunction clampToMaximum (value: number, maximum: number): number {\n return maximum < 0 ? value : Math.min(value, maximum);\n}\n\nconst ANCHOR_PRESET_TABLE: Record<LayoutPreset, [number, number, number, number]> = {\n topLeft: [0, 0, 0, 0],\n topRight: [1, 0, 1, 0],\n bottomLeft: [0, 1, 0, 1],\n bottomRight: [1, 1, 1, 1],\n centerLeft: [0, 0.5, 0, 0.5],\n centerTop: [0.5, 0, 0.5, 0],\n centerRight: [1, 0.5, 1, 0.5],\n centerBottom: [0.5, 1, 0.5, 1],\n center: [0.5, 0.5, 0.5, 0.5],\n leftWide: [0, 0, 0, 1],\n topWide: [0, 0, 1, 0],\n rightWide: [1, 0, 1, 1],\n bottomWide: [0, 1, 1, 1],\n vcenterWide: [0.5, 0, 0.5, 1],\n hcenterWide: [0, 0.5, 1, 0.5],\n fullRect: [0, 0, 1, 1],\n};\n\n/**\n * A drawable GUI object. Controls form a tree independent from the VFXItem\n * scene tree. UIControl is the bridge between both trees.\n */\n@effectsClass('Control')\nexport class Control {\n static readonly themeType: string = 'Control';\n readonly engine: Engine;\n /** Scene-tree bridge that owns this GUI object, if any. */\n owner: UIControl | null = null;\n readonly children: Control[] = [];\n readonly position = new Vector2();\n readonly size = new Vector2(1, 1);\n readonly anchorMin = new Vector2();\n readonly anchorMax = new Vector2();\n readonly offsetMin = new Vector2();\n readonly offsetMax = new Vector2(1, 1);\n readonly pivot = new Vector2(0.5, 0.5);\n readonly scale = new Vector2(1, 1);\n readonly shear = new Vector2();\n mouseForcePassScrollEvents = true;\n clipContents = false;\n\n private _parent: Control | null = null;\n private _visible = true;\n private _enabled = true;\n private _mouseFilter = MouseFilter.Stop;\n private _mouseBehaviorRecursive = MouseBehaviorRecursive.Inherited;\n private _focusMode = FocusMode.None;\n private _focusBehaviorRecursive = FocusBehaviorRecursive.Inherited;\n private _defaultCursorShape: CursorStyle = CursorShape.Arrow;\n private _rotation = 0;\n private transformDirty = true;\n private readonly cachedTransform = new Matrix3();\n private readonly eventEmitter = new EventEmitter<ControlEvent>();\n private disposed = false;\n private readonly customMinimumSize = new Vector2();\n private readonly customMaximumSize = new Vector2(-1, -1);\n private minimumSizeCache: Vector2 | null = null;\n private desiredSizeCache: Vector2 | null = null;\n private maximumSizeCache: Vector2 | null = null;\n private pendingMeasurementChanges = 0;\n private _horizontalSizeFlags = SizeFlags.Fill;\n private _verticalSizeFlags = SizeFlags.Fill;\n private _stretchRatio = 1;\n private _horizontalGrowDirection = GrowDirection.End;\n private _verticalGrowDirection = GrowDirection.End;\n private _theme: Theme | null = null;\n private themeOwnerNode: Control | null = null;\n private _themeTypeVariation = '';\n private readonly themeOverrides = new Map<ThemeItemType, Map<string, ThemeValue>>();\n private readonly themeCache = new Map<string, ThemeCacheEntry>();\n private readonly overrideStyleBoxReferences = new Map<StyleBox, number>();\n private readonly attachedThemeChanged = (_theme: Theme, affectsLayout: boolean) => {\n this.propagateThemeChanged(affectsLayout);\n };\n private readonly overrideStyleBoxChanged = () => this.propagateThemeChanged(true, false);\n\n constructor (engine: Engine) {\n this.engine = engine;\n }\n\n get parent (): Control | null {\n return this._parent;\n }\n\n set parent (value: Control | null) {\n if (value === this._parent) {\n return;\n }\n const previousRoot = this.root;\n\n if (this._parent?.hasThemeOwnerNode()) {\n this.propagateThemeOwner(null, false, true);\n }\n this._parent?.removeChildInternal(this);\n this._parent = value;\n value?.addChildInternal(this);\n if (value?.hasThemeOwnerNode()) {\n this.propagateThemeOwner(value.getThemeOwnerNode(), false, true);\n }\n this.updateLayout();\n const nextRoot = this.root;\n\n if (nextRoot) {\n this.propagateThemeChanged(true);\n }\n if (previousRoot && previousRoot !== nextRoot) {\n previousRoot.controlRemoved(this);\n }\n if (nextRoot && previousRoot !== nextRoot) {\n this.queuePendingLayouts();\n this.queuePendingMeasurements(nextRoot);\n }\n if (previousRoot !== nextRoot) {\n this.notifyRootChanged(previousRoot, nextRoot);\n }\n nextRoot?.controlTreeChanged();\n this.eventEmitter.emit('parentChanged', this);\n }\n\n /** Scene item exposed through the optional UIControl bridge. */\n get item (): VFXItem | null {\n return this.owner?.item ?? null;\n }\n\n get indexInParent (): number {\n return this.parent?.getChildIndex(this) ?? -1;\n }\n\n set indexInParent (value: number) {\n this.parent?.changeChildIndex(this, value);\n }\n\n get visible (): boolean {\n return this._visible;\n }\n\n set visible (value: boolean) {\n if (this._visible !== value) {\n this._visible = value;\n this.root?.controlStateChanged(this);\n this.eventEmitter.emit('visibilityChanged', this);\n }\n }\n\n get visibleInHierarchy (): boolean {\n return this.visible && (this.parent?.visibleInHierarchy ?? true);\n }\n\n get enabled (): boolean {\n return this._enabled;\n }\n\n set enabled (value: boolean) {\n if (this._enabled !== value) {\n this._enabled = value;\n this.root?.controlStateChanged(this);\n this.eventEmitter.emit('enabledChanged', this);\n }\n }\n\n get enabledInHierarchy (): boolean {\n return this.enabled && (this.parent?.enabledInHierarchy ?? true);\n }\n\n get mouseFilter (): MouseFilter {\n return this._mouseFilter;\n }\n\n set mouseFilter (value: MouseFilter) {\n if (this._mouseFilter !== value) {\n this._mouseFilter = value;\n this.root?.controlStateChanged(this);\n }\n }\n\n get mouseBehaviorRecursive (): MouseBehaviorRecursive {\n return this._mouseBehaviorRecursive;\n }\n\n set mouseBehaviorRecursive (value: MouseBehaviorRecursive) {\n if (this._mouseBehaviorRecursive !== value) {\n this._mouseBehaviorRecursive = value;\n this.root?.controlStateChanged(this);\n }\n }\n\n get focusMode (): FocusMode {\n return this._focusMode;\n }\n\n set focusMode (value: FocusMode) {\n if (this._focusMode !== value) {\n this._focusMode = value;\n this.root?.controlStateChanged(this);\n }\n }\n\n get focusBehaviorRecursive (): FocusBehaviorRecursive {\n return this._focusBehaviorRecursive;\n }\n\n set focusBehaviorRecursive (value: FocusBehaviorRecursive) {\n if (this._focusBehaviorRecursive !== value) {\n this._focusBehaviorRecursive = value;\n this.root?.controlStateChanged(this);\n }\n }\n\n get defaultCursorShape (): CursorStyle {\n return this._defaultCursorShape;\n }\n\n set defaultCursorShape (value: CursorStyle) {\n if (this._defaultCursorShape === value) {\n return;\n }\n this._defaultCursorShape = value;\n this.root?.updateMouseCursorState();\n }\n\n get location (): Vector2 {\n return this.position;\n }\n\n set location (value: Vector2) {\n this.setPosition(value.x, value.y);\n }\n\n get rotation (): number {\n return this._rotation;\n }\n\n get x (): number {\n return this.position.x;\n }\n\n set x (value: number) {\n this.setPosition(value, this.position.y);\n }\n\n get y (): number {\n return this.position.y;\n }\n\n set y (value: number) {\n this.setPosition(this.position.x, value);\n }\n\n get width (): number {\n return this.size.x;\n }\n\n set width (value: number) {\n this.setSize(value, this.size.y);\n }\n\n get height (): number {\n return this.size.y;\n }\n\n set height (value: number) {\n this.setSize(this.size.x, value);\n }\n\n get horizontalSizeFlags (): SizeFlags {\n return this._horizontalSizeFlags;\n }\n\n set horizontalSizeFlags (value: SizeFlags) {\n this.setSizeFlags(value, this._verticalSizeFlags);\n }\n\n get verticalSizeFlags (): SizeFlags {\n return this._verticalSizeFlags;\n }\n\n set verticalSizeFlags (value: SizeFlags) {\n this.setSizeFlags(this._horizontalSizeFlags, value);\n }\n\n get stretchRatio (): number {\n return this._stretchRatio;\n }\n\n set stretchRatio (value: number) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError('Control stretchRatio must be a finite number greater than zero.');\n }\n if (this._stretchRatio !== value) {\n this._stretchRatio = value;\n this.eventEmitter.emit('sizeFlagsChanged', this);\n }\n }\n\n get horizontalGrowDirection (): GrowDirection {\n return this._horizontalGrowDirection;\n }\n\n set horizontalGrowDirection (value: GrowDirection) {\n this.assertGrowDirection(value);\n if (this._horizontalGrowDirection !== value) {\n this._horizontalGrowDirection = value;\n this.updateLayout();\n }\n }\n\n get verticalGrowDirection (): GrowDirection {\n return this._verticalGrowDirection;\n }\n\n set verticalGrowDirection (value: GrowDirection) {\n this.assertGrowDirection(value);\n if (this._verticalGrowDirection !== value) {\n this._verticalGrowDirection = value;\n this.updateLayout();\n }\n }\n\n get root (): RootControl | null {\n return this instanceof RootControl ? this : this.parent?.root ?? null;\n }\n\n get isDisposed (): boolean {\n return this.disposed;\n }\n\n /** Theme applied to this Control and inherited by its descendants. */\n get theme (): Theme | null {\n return this._theme;\n }\n\n set theme (value: Theme | null) {\n if (this._theme === value) {return;}\n this._theme?.off('changed', this.attachedThemeChanged);\n this._theme = value;\n if (value) {\n this.propagateThemeOwner(this, !!this.root, true);\n value.on('changed', this.attachedThemeChanged);\n } else {\n this.propagateThemeOwner(this.parent?.getThemeOwnerNode() ?? null, !!this.root, true);\n }\n }\n\n /** Returns the nearest Theme currently inherited by this Control. */\n getInheritedTheme (): Theme | null {\n return this.themeOwnerNode?.theme ?? null;\n }\n\n /** Returns the Control that owns the first Theme in this Control's inheritance chain. */\n getThemeOwnerNode (): Control | null {\n return this.themeOwnerNode;\n }\n\n /** Returns whether this Control is affected by a Theme in its Control ancestry. */\n hasThemeOwnerNode (): boolean {\n return this.themeOwnerNode !== null;\n }\n\n /** Optional named type variation resolved before this Control's native theme type. */\n get themeTypeVariation (): string {\n return this._themeTypeVariation;\n }\n\n set themeTypeVariation (value: string) {\n const normalized = value.trim();\n\n if (this._themeTypeVariation !== normalized) {\n this._themeTypeVariation = normalized;\n this.propagateThemeChanged(true, false);\n }\n }\n\n /** Stable theme type declared by the closest Control class that provides one. */\n getThemeType (): string {\n return (this.constructor as typeof Control).themeType;\n }\n\n getThemeColor (name: string, themeType?: string): Color {\n return cloneThemeValue(this.resolveThemeItem(ThemeItemType.Color, name, themeType).value as Color);\n }\n\n getThemeConstant (name: string, themeType?: string): number {\n return this.resolveThemeItem(ThemeItemType.Constant, name, themeType).value as number;\n }\n\n getThemeFont (name: string, themeType?: string): ThemeFont {\n return cloneThemeValue(this.resolveThemeItem(ThemeItemType.Font, name, themeType).value as ThemeFont);\n }\n\n getThemeFontSize (name: string, themeType?: string): number {\n return this.resolveThemeItem(ThemeItemType.FontSize, name, themeType).value as number;\n }\n\n getThemeIcon (name: string, themeType?: string): Texture | null {\n return this.resolveThemeItem(ThemeItemType.Icon, name, themeType).value as Texture | null;\n }\n\n getThemeStyleBox (name: string, themeType?: string): StyleBox {\n return this.resolveThemeItem(ThemeItemType.StyleBox, name, themeType).value as StyleBox;\n }\n\n hasThemeColor (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.Color, name, themeType).found;\n }\n\n hasThemeConstant (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.Constant, name, themeType).found;\n }\n\n hasThemeFont (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.Font, name, themeType).found;\n }\n\n hasThemeFontSize (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.FontSize, name, themeType).found;\n }\n\n hasThemeIcon (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.Icon, name, themeType).found;\n }\n\n hasThemeStyleBox (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.StyleBox, name, themeType).found;\n }\n\n setThemeColorOverride (name: string, value: Color): void {\n this.setThemeOverride(ThemeItemType.Color, name, value);\n }\n\n setThemeConstantOverride (name: string, value: number): void {\n if (!Number.isFinite(value)) {throw new RangeError(`${name} must be finite.`);}\n this.setThemeOverride(ThemeItemType.Constant, name, value);\n }\n\n setThemeFontOverride (name: string, value: ThemeFont): void {\n this.setThemeOverride(ThemeItemType.Font, name, value);\n }\n\n setThemeFontSizeOverride (name: string, value: number): void {\n if (!Number.isFinite(value) || value <= 0) {throw new RangeError(`${name} must be a positive finite font size.`);}\n this.setThemeOverride(ThemeItemType.FontSize, name, value);\n }\n\n setThemeIconOverride (name: string, value: Texture | null): void {\n this.setThemeOverride(ThemeItemType.Icon, name, value);\n }\n\n setThemeStyleBoxOverride (name: string, value: StyleBox): void {\n this.setThemeOverride(ThemeItemType.StyleBox, name, value);\n }\n\n removeThemeColorOverride (name: string): void { this.removeThemeOverride(ThemeItemType.Color, name); }\n removeThemeConstantOverride (name: string): void { this.removeThemeOverride(ThemeItemType.Constant, name); }\n removeThemeFontOverride (name: string): void { this.removeThemeOverride(ThemeItemType.Font, name); }\n removeThemeFontSizeOverride (name: string): void { this.removeThemeOverride(ThemeItemType.FontSize, name); }\n removeThemeIconOverride (name: string): void { this.removeThemeOverride(ThemeItemType.Icon, name); }\n removeThemeStyleBoxOverride (name: string): void { this.removeThemeOverride(ThemeItemType.StyleBox, name); }\n\n hasThemeColorOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.Color, name); }\n hasThemeConstantOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.Constant, name); }\n hasThemeFontOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.Font, name); }\n hasThemeFontSizeOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.FontSize, name); }\n hasThemeIconOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.Icon, name); }\n hasThemeStyleBoxOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.StyleBox, name); }\n\n clearThemeOverrides (): void {\n if (this.themeOverrides.size === 0) {return;}\n let affectsLayout = false;\n\n for (const [itemType, items] of this.themeOverrides) {\n for (const [name, value] of items) {\n if (value instanceof StyleBox) {this.releaseOverrideStyleBox(value);}\n affectsLayout ||= ThemeRegistry.affectsLayout(this.getThemeType(), itemType, name);\n }\n }\n this.themeOverrides.clear();\n this.propagateThemeChanged(affectsLayout, false);\n }\n\n hasFocus (visibleOnly = false): boolean {\n return this.root?.guiControlHasFocus(this, visibleOnly) ?? false;\n }\n\n drawStyleBox (styleBox: StyleBox, x: number, y: number, width: number, height: number): void {\n styleBox.draw(this.engine.graphics, { x, y, width, height });\n }\n\n on<E extends keyof ControlEvent> (\n eventName: E,\n listener: EventEmitterListener<ControlEvent[E]>,\n ): void {\n this.eventEmitter.on(eventName, listener);\n }\n\n off<E extends keyof ControlEvent> (\n eventName: E,\n listener: EventEmitterListener<ControlEvent[E]>,\n ): void {\n this.eventEmitter.off(eventName, listener);\n }\n\n addChild<T extends Control> (child: T): T {\n child.parent = this;\n\n return child;\n }\n\n removeChild (child: Control): void {\n if (child.parent === this) {\n child.parent = null;\n }\n }\n\n getChildIndex (child: Control): number {\n return this.children.indexOf(child);\n }\n\n /** @internal */\n changeChildIndex (child: Control, newIndex: number): void {\n const oldIndex = this.children.indexOf(child);\n\n if (oldIndex === newIndex || oldIndex === -1) {\n return;\n }\n this.children.splice(oldIndex, 1);\n if (newIndex < 0 || newIndex >= this.children.length) {\n this.children.push(child);\n } else {\n this.children.splice(newIndex, 0, child);\n }\n this.root?.controlTreeChanged();\n }\n\n /** @internal */\n addChildInternal (child: Control): void {\n if (!this.children.includes(child)) {\n this.children.push(child);\n }\n }\n\n /** @internal */\n removeChildInternal (child: Control): void {\n const index = this.children.indexOf(child);\n\n if (index !== -1) {\n this.children.splice(index, 1);\n }\n }\n\n setPosition (x: number, y: number, keepOffsets = false): void {\n if (this.position.x === x && this.position.y === y) {\n return;\n }\n const rect = { position: new Vector2(x, y), size: this.size.clone() };\n\n if (keepOffsets && this.parent) {\n this.computeAnchors(rect, this.getParentRect());\n } else {\n this.computeOffsets(rect, this.getParentRect());\n }\n this.updateLayout();\n }\n\n setSize (width: number, height: number): void {\n if (this.size.x === width && this.size.y === height) {\n return;\n }\n const rect = { position: this.position.clone(), size: new Vector2(width, height) };\n\n this.computeOffsets(rect, this.getParentRect());\n this.updateLayout();\n }\n\n /** Atomically replaces the local rectangle while preserving the current anchors. */\n setRect (rect: Rect): void {\n const nextRect = {\n position: rect.position.clone(),\n size: rect.size.clone(),\n };\n\n this.computeOffsets(nextRect, this.getParentRect());\n this.updateLayout();\n }\n\n setSizeFlags (horizontal: SizeFlags, vertical: SizeFlags): void {\n if (!Number.isInteger(horizontal) || horizontal < SizeFlags.ShrinkBegin\n || !Number.isInteger(vertical) || vertical < SizeFlags.ShrinkBegin) {\n throw new RangeError('Control size flags must be non-negative integers.');\n }\n if (this._horizontalSizeFlags !== horizontal || this._verticalSizeFlags !== vertical) {\n this._horizontalSizeFlags = horizontal;\n this._verticalSizeFlags = vertical;\n this.eventEmitter.emit('sizeFlagsChanged', this);\n }\n }\n\n /** Intrinsic minimum size supplied by a subclass. */\n getMinimumSize (): Vector2 {\n return new Vector2();\n }\n\n /** Intrinsic preferred size supplied by a subclass. */\n getDesiredSize (): Vector2 {\n return new Vector2();\n }\n\n /** Intrinsic maximum size supplied by a subclass. Negative components are unbounded. */\n getMaximumSize (): Vector2 {\n return new Vector2(-1, -1);\n }\n\n getCombinedMinimumSize (): Vector2 {\n const measured = this.getCachedMinimumSize();\n\n return new Vector2(\n Math.max(measured.x, this.customMinimumSize.x),\n Math.max(measured.y, this.customMinimumSize.y),\n );\n }\n\n getCombinedMaximumSize (): Vector2 {\n const measured = this.getCachedMaximumSize();\n\n return new Vector2(\n combineMaximum(measured.x, this.customMaximumSize.x),\n combineMaximum(measured.y, this.customMaximumSize.y),\n );\n }\n\n /** Minimum size after resolving a conflicting maximum; the maximum wins. */\n getBoundMinimumSize (): Vector2 {\n const minimum = this.getCombinedMinimumSize();\n const maximum = this.getCombinedMaximumSize();\n\n return new Vector2(\n clampToMaximum(minimum.x, maximum.x),\n clampToMaximum(minimum.y, maximum.y),\n );\n }\n\n /** Desired size clamped to the resolved minimum and maximum constraints. */\n getBoundDesiredSize (): Vector2 {\n const minimum = this.getBoundMinimumSize();\n const maximum = this.getCombinedMaximumSize();\n const desired = this.getCachedDesiredSize();\n\n return new Vector2(\n Math.max(minimum.x, clampToMaximum(desired.x, maximum.x)),\n Math.max(minimum.y, clampToMaximum(desired.y, maximum.y)),\n );\n }\n\n setCustomMinimumSize (width: number, height: number): void {\n const next = normalizeMeasuredMinimum(new Vector2(width, height));\n\n if (this.customMinimumSize.x !== next.x || this.customMinimumSize.y !== next.y) {\n this.customMinimumSize.copyFrom(next);\n this.updateMinimumSize();\n }\n }\n\n setCustomMaximumSize (width: number, height: number): void {\n const next = normalizeMeasuredMaximum(new Vector2(width, height));\n\n if (this.customMaximumSize.x !== next.x || this.customMaximumSize.y !== next.y) {\n this.customMaximumSize.copyFrom(next);\n this.updateMaximumSize();\n }\n }\n\n updateMinimumSize (): void {\n this.invalidateMeasurementChanges(MeasurementChange.Minimum);\n }\n\n updateDesiredSize (): void {\n this.invalidateMeasurementChanges(MeasurementChange.Desired);\n }\n\n updateMaximumSize (): void {\n this.invalidateMeasurementChanges(MeasurementChange.Maximum);\n }\n\n /** @internal */\n invokeMeasurementChanges (): void {\n if (this.disposed || this.pendingMeasurementChanges === 0) {return;}\n const changes = this.pendingMeasurementChanges;\n\n this.pendingMeasurementChanges = 0;\n if ((changes & (MeasurementChange.Minimum | MeasurementChange.Maximum)) !== 0) {\n this.updateLayout();\n }\n if ((changes & MeasurementChange.Minimum) !== 0) {\n this.eventEmitter.emit('minimumSizeChanged', this);\n }\n if ((changes & MeasurementChange.Desired) !== 0) {\n this.eventEmitter.emit('desiredSizeChanged', this);\n }\n if ((changes & MeasurementChange.Maximum) !== 0) {\n this.eventEmitter.emit('maximumSizeChanged', this);\n }\n }\n\n protected invalidateMeasurementChanges (changes: number): void {\n const root = this.root;\n let changed = false;\n\n if ((changes & MeasurementChange.Minimum) !== 0) {\n changed ||= this.minimumSizeCache !== null\n || (!!root && (this.pendingMeasurementChanges & MeasurementChange.Minimum) === 0);\n this.minimumSizeCache = null;\n }\n if ((changes & MeasurementChange.Desired) !== 0) {\n changed ||= this.desiredSizeCache !== null\n || (!!root && (this.pendingMeasurementChanges & MeasurementChange.Desired) === 0);\n this.desiredSizeCache = null;\n }\n if ((changes & MeasurementChange.Maximum) !== 0) {\n changed ||= this.maximumSizeCache !== null\n || (!!root && (this.pendingMeasurementChanges & MeasurementChange.Maximum) === 0);\n this.maximumSizeCache = null;\n }\n if (root) {\n this.scheduleMeasurementChanges(changes, root);\n } else {\n if ((changes & (MeasurementChange.Minimum | MeasurementChange.Maximum)) !== 0) {\n this.updateLayout();\n }\n if ((changes & MeasurementChange.Minimum) !== 0) {\n this.eventEmitter.emit('minimumSizeChanged', this);\n }\n if ((changes & MeasurementChange.Desired) !== 0) {\n this.eventEmitter.emit('desiredSizeChanged', this);\n }\n if ((changes & MeasurementChange.Maximum) !== 0) {\n this.eventEmitter.emit('maximumSizeChanged', this);\n }\n }\n if (changed && this.parent instanceof Container) {\n this.parent.invalidateMeasurementsFromChild();\n }\n }\n\n setScale (x: number, y: number): void {\n if (this.scale.x !== x || this.scale.y !== y) {\n this.scale.set(x, y);\n this.markTransformDirty();\n }\n }\n\n setRotation (degrees: number): void {\n if (this._rotation !== degrees) {\n this._rotation = degrees;\n this.markTransformDirty();\n }\n }\n\n setShear (x: number, y: number): void {\n if (this.shear.x !== x || this.shear.y !== y) {\n this.shear.set(x, y);\n this.markTransformDirty();\n }\n }\n\n setPivot (x: number, y: number): void {\n if (this.pivot.x !== x || this.pivot.y !== y) {\n this.pivot.set(x, y);\n this.markTransformDirty();\n }\n }\n\n setAnchorMin (x: number, y: number): void {\n if (this.anchorMin.x !== x || this.anchorMin.y !== y) {\n this.anchorMin.set(x, y);\n this.updateLayout();\n }\n }\n\n setAnchorMax (x: number, y: number): void {\n if (this.anchorMax.x !== x || this.anchorMax.y !== y) {\n this.anchorMax.set(x, y);\n this.updateLayout();\n }\n }\n\n setOffsetMin (x: number, y: number): void {\n if (this.offsetMin.x !== x || this.offsetMin.y !== y) {\n this.offsetMin.set(x, y);\n this.updateLayout();\n }\n }\n\n setOffsetMax (x: number, y: number): void {\n if (this.offsetMax.x !== x || this.offsetMax.y !== y) {\n this.offsetMax.set(x, y);\n this.updateLayout();\n }\n }\n\n getRect (): Rect {\n return {\n position: this.position.clone(),\n size: this.size.clone(),\n };\n }\n\n getTransform2D (): Matrix3 {\n if (this.transformDirty) {\n const radians = this._rotation * Math.PI / 180;\n const sin = Math.sin(radians);\n const cos = Math.cos(radians);\n const shearX = Math.tan(Math.max(-89, Math.min(89, this.shear.x)) * Math.PI / 180);\n const shearY = Math.tan(Math.max(-89, Math.min(89, this.shear.y)) * Math.PI / 180);\n const a = this.scale.x * (cos - sin * shearY);\n const b = this.scale.x * (sin + cos * shearY);\n const c = this.scale.y * (cos * shearX - sin);\n const d = this.scale.y * (sin * shearX + cos);\n const pivotX = this.pivot.x * this.size.x;\n const pivotY = this.pivot.y * this.size.y;\n const tx = this.position.x + pivotX - a * pivotX - c * pivotY;\n const ty = this.position.y + pivotY - b * pivotX - d * pivotY;\n\n this.cachedTransform.set(a, b, 0, c, d, 0, tx, ty, 1);\n this.transformDirty = false;\n }\n\n return this.cachedTransform;\n }\n\n setAnchorsPreset (preset: LayoutPreset, keepOffsets = true): void {\n const [minX, minY, maxX, maxY] = ANCHOR_PRESET_TABLE[preset];\n\n if (keepOffsets) {\n this.anchorMin.set(minX, minY);\n this.anchorMax.set(maxX, maxY);\n } else {\n const rect = this.getRect();\n\n this.anchorMin.set(minX, minY);\n this.anchorMax.set(maxX, maxY);\n this.computeOffsets(rect, this.getParentRect());\n }\n this.updateLayout();\n }\n\n setOffsetsPreset (preset: LayoutPreset, margin = 0): void {\n if (!this.parent) {\n return;\n }\n const parentSize = this.parent.size;\n const width = this.size.x;\n const height = this.size.y;\n const a = this.anchorMin;\n const b = this.anchorMax;\n let minX = 0, maxX = 0, minY = 0, maxY = 0;\n\n // Left edge.\n switch (preset) {\n case 'topLeft': case 'bottomLeft': case 'centerLeft':\n case 'topWide': case 'bottomWide': case 'leftWide': case 'hcenterWide': case 'fullRect':\n minX = margin - a.x * parentSize.x;\n\n break;\n case 'centerTop': case 'centerBottom': case 'center': case 'vcenterWide':\n minX = 0.5 * parentSize.x - width / 2 - a.x * parentSize.x;\n\n break;\n default:\n minX = parentSize.x - margin - width - a.x * parentSize.x;\n\n break;\n }\n switch (preset) {\n case 'topLeft': case 'bottomLeft': case 'centerLeft': case 'leftWide':\n maxX = margin + width - b.x * parentSize.x;\n\n break;\n case 'centerTop': case 'centerBottom': case 'center': case 'vcenterWide':\n maxX = 0.5 * parentSize.x + width / 2 - b.x * parentSize.x;\n\n break;\n default:\n maxX = parentSize.x - margin - b.x * parentSize.x;\n\n break;\n }\n // Top edge.\n switch (preset) {\n case 'topLeft': case 'topRight': case 'centerTop':\n case 'leftWide': case 'rightWide': case 'topWide': case 'vcenterWide': case 'fullRect':\n minY = margin - a.y * parentSize.y;\n\n break;\n case 'centerLeft': case 'centerRight': case 'center': case 'hcenterWide':\n minY = 0.5 * parentSize.y - height / 2 - a.y * parentSize.y;\n\n break;\n default:\n minY = parentSize.y - margin - height - a.y * parentSize.y;\n\n break;\n }\n // Bottom edge.\n switch (preset) {\n case 'topLeft': case 'topRight': case 'centerTop': case 'topWide':\n maxY = margin + height - b.y * parentSize.y;\n\n break;\n case 'centerLeft': case 'centerRight': case 'center': case 'hcenterWide':\n maxY = 0.5 * parentSize.y + height / 2 - b.y * parentSize.y;\n\n break;\n default:\n maxY = parentSize.y - margin - b.y * parentSize.y;\n\n break;\n }\n this.offsetMin.set(minX, minY);\n this.offsetMax.set(maxX, maxY);\n this.updateLayout();\n }\n\n setAnchorsAndOffsetsPreset (preset: LayoutPreset, margin = 0): void {\n this.setAnchorsPreset(preset, false);\n this.setOffsetsPreset(preset, margin);\n }\n\n getGlobalTransform2D (): Matrix3 {\n const local = this.getTransform2D();\n\n return this.parent\n ? new Matrix3().multiplyMatrices(this.parent.getGlobalTransform2D(), local)\n : local.clone();\n }\n\n hasPoint (point: Vector2): boolean {\n return point.x >= 0 && point.y >= 0 && point.x <= this.size.x && point.y <= this.size.y;\n }\n\n /** Whether input at a position in this Control's space may reach a direct child. */\n intersectsChildContent (child: Control, position: Vector2): boolean {\n return true;\n }\n\n getEffectiveMouseFilter (): MouseFilter {\n return this.enabledInHierarchy && this.isMouseRecursiveEnabled() ? this.mouseFilter : MouseFilter.Ignore;\n }\n\n getFocusModeWithOverride (): FocusMode {\n return this.enabledInHierarchy && this.isFocusRecursiveEnabled() ? this.focusMode : FocusMode.None;\n }\n\n getCursorShape (position: Vector2): CursorStyle {\n return this.defaultCursorShape;\n }\n\n focus (hideFocus = false): void {\n this.root?.grabControlFocus(this, hideFocus);\n }\n\n grabFocus (hideFocus = false): void {\n this.focus(hideFocus);\n }\n\n grabClickFocus (): void {\n this.root?.grabControlClickFocus(this);\n }\n\n releaseFocus (): void {\n this.root?.releaseControlFocus(this);\n }\n\n warpMouse (position: Vector2): void {\n const matrix = this.getGlobalTransform2D().elements;\n\n this.root?.warpControlMouse(new Vector2(\n matrix[0] * position.x + matrix[3] * position.y + matrix[6],\n matrix[1] * position.x + matrix[4] * position.y + matrix[7],\n ));\n }\n\n /** Converts a window-space position into this control's local coordinates. */\n makePositionLocal (position: Vector2): Vector2 {\n const transform = this.getGlobalTransform2D().clone();\n\n if (Math.abs(transform.determinant()) < 1e-12) {\n return new Vector2();\n }\n const elements = transform.invert().elements;\n\n return new Vector2(\n elements[0] * position.x + elements[3] * position.y + elements[6],\n elements[1] * position.x + elements[4] * position.y + elements[7],\n );\n }\n\n /** Gets the current mouse position transformed into this control's coordinates. */\n getLocalMousePosition (): Vector2 {\n const root = this.root;\n\n return root ? this.makePositionLocal(root.getMousePosition()) : new Vector2();\n }\n\n update (deltaTime: number): void {\n for (const child of this.children.slice()) {\n if (child.enabled && !child.isDisposed) {\n child.update(deltaTime);\n }\n }\n }\n\n draw (): void {\n // OVERRIDE\n }\n\n onDestroy (): void {}\n\n drawInternal (): void {\n if (!this.visibleInHierarchy || this.disposed) {\n return;\n }\n const graphics = this.engine.graphics;\n\n graphics.pushTransform(this.getTransform2D());\n this.draw();\n this.drawChildren();\n graphics.popTransform();\n }\n\n drawLine (x1: number, y1: number, x2: number, y2: number, color?: Color, thickness?: number): void {\n this.engine.graphics.drawLine(x1, y1, x2, y2, color, thickness);\n }\n\n drawPolyline (points: number[], color?: Color, thickness?: number): void {\n this.engine.graphics.drawLines(points, color, thickness);\n }\n\n drawBezier (\n x1: number, y1: number, x2: number, y2: number,\n x3: number, y3: number, x4: number, y4: number,\n color?: Color, thickness?: number,\n ): void {\n this.engine.graphics.drawBezier(x1, y1, x2, y2, x3, y3, x4, y4, color, thickness);\n }\n\n drawTriangle (\n x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n color?: Color, thickness?: number,\n ): void {\n this.engine.graphics.drawTriangle(x1, y1, x2, y2, x3, y3, color, thickness);\n }\n\n drawRect (x: number, y: number, width: number, height: number, color?: Color, thickness?: number): void {\n this.engine.graphics.drawRectangle(x, y, width, height, color, thickness);\n }\n\n drawCircle (cx: number, cy: number, radius: number, color?: Color, thickness?: number): void {\n this.engine.graphics.drawCircle(cx, cy, radius, color, thickness);\n }\n\n fillTriangle (\n x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, color?: Color,\n ): void {\n this.engine.graphics.fillTriangle(x1, y1, x2, y2, x3, y3, color);\n }\n\n fillRect (x: number, y: number, width: number, height: number, color?: Color): void {\n this.engine.graphics.fillRectangle(x, y, width, height, color);\n }\n\n fillCircle (cx: number, cy: number, radius: number, color?: Color): void {\n this.engine.graphics.fillCircle(cx, cy, radius, color);\n }\n\n drawTexture (\n x: number, y: number, width: number, height: number,\n texture: Texture, region?: TextureRegion, color?: Color,\n ): void {\n this.engine.graphics.drawTexture(x, y, width, height, texture, region, color);\n }\n\n drawNinePatch (\n x: number, y: number, width: number, height: number,\n texture: Texture, options: NinePatchDrawOptions, color?: Color,\n ): void {\n this.engine.graphics.drawNinePatch(x, y, width, height, texture, options, color);\n }\n\n drawText (\n x: number, y: number, text: string, fontSize: number, color?: Color,\n fontFamily?: string, fontWeight?: FontWeight, fontStyle?: FontStyle,\n ): void {\n this.engine.graphics.drawText(x, y, text, fontSize, color, fontFamily, fontWeight, fontStyle);\n }\n\n measureText (\n text: string, fontSize: number,\n fontFamily?: string, fontWeight?: FontWeight, fontStyle?: FontStyle,\n ): TextMeasurement {\n return this.engine.graphics.measureText(text, fontSize, fontFamily, fontWeight, fontStyle);\n }\n\n onMouseEnter (location: Vector2): void {}\n onMouseMove (event: InputEventMouseMotion): void {}\n onMouseLeave (): void {}\n onMouseWheel (event: InputEventMouseButton): void {}\n onMouseDown (event: InputEventMouseButton): void {}\n onMouseUp (event: InputEventMouseButton): void {}\n onTouchDown (event: InputEventScreenTouch): void {}\n onTouchMove (event: InputEventScreenDrag): void {}\n onTouchUp (event: InputEventScreenTouch): void {}\n onKeyDown (event: InputEventKey): void {}\n onKeyUp (event: InputEventKey): void {}\n onGotFocus (): void {}\n onLostFocus (): void {}\n onScrollBegin (): void {}\n onScrollEnd (): void {}\n /** @internal */\n onPopupOpened (): void {}\n /** @internal */\n onPopupClosed (): void {}\n\n /** @internal */\n invokeGetDragData (position: Vector2): unknown {\n return this.getDragData(position);\n }\n\n /** @internal */\n invokeCanDropData (position: Vector2, data: unknown): boolean {\n return this.canDropData(position, data);\n }\n\n /** @internal */\n invokeDropData (position: Vector2, data: unknown): void {\n this.dropData(position, data);\n }\n\n dispose (): void {\n if (this.disposed) {\n return;\n }\n for (const child of this.children.slice()) {\n child.dispose();\n }\n this._theme?.off('changed', this.attachedThemeChanged);\n this._theme = null;\n for (const styleBox of this.overrideStyleBoxReferences.keys()) {\n styleBox.off('changed', this.overrideStyleBoxChanged);\n }\n this.overrideStyleBoxReferences.clear();\n this.themeOverrides.clear();\n this.themeCache.clear();\n this.pendingMeasurementChanges = 0;\n this.disposed = true;\n this.onDestroy();\n this.parent = null;\n this.owner = null;\n }\n\n /** @internal */\n updateLayout (): void {\n const parentSize = this.parent?.size ?? new Vector2();\n const left = this.offsetMin.x + this.anchorMin.x * parentSize.x;\n const top = this.offsetMin.y + this.anchorMin.y * parentSize.y;\n const right = this.offsetMax.x + this.anchorMax.x * parentSize.x;\n const bottom = this.offsetMax.y + this.anchorMax.y * parentSize.y;\n\n const minimum = this.getBoundMinimumSize();\n const maximum = this.getCombinedMaximumSize();\n const horizontal = this.resolveBoundedAxis(left, right - left, minimum.x, maximum.x, this.horizontalGrowDirection);\n const vertical = this.resolveBoundedAxis(top, bottom - top, minimum.y, maximum.y, this.verticalGrowDirection);\n\n this.applyBounds(horizontal.position, vertical.position, horizontal.size, vertical.size);\n }\n\n protected drawChildren (): void {\n const graphics = this.engine.graphics;\n\n if (this.clipContents) {\n graphics.pushClipRect(0, 0, this.width, this.height);\n }\n for (const child of this.children) {\n child.drawInternal();\n }\n if (this.clipContents) {\n graphics.popClipRect();\n }\n }\n\n protected onThemeChanged (affectsLayout: boolean): void {\n if (affectsLayout) {\n this.updateMinimumSize();\n this.updateDesiredSize();\n if (this instanceof Container) {this.queueSort();}\n }\n }\n\n protected onRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {}\n protected getDragData (position: Vector2): unknown { return null; }\n protected canDropData (position: Vector2, data: unknown): boolean { return false; }\n protected dropData (position: Vector2, data: unknown): void {}\n\n private getThemeDependencies (theme: Theme, explicitType?: string): string[] {\n const nativeType = this.getThemeType();\n const requestedType = explicitType ?? (this.themeTypeVariation || nativeType);\n\n if (theme.hasTypeVariation(requestedType)) {return theme.getTypeDependencies(requestedType);}\n if (!explicitType && this.themeTypeVariation) {\n return [this.themeTypeVariation, ...ThemeRegistry.getTypeChain(nativeType)];\n }\n\n return ThemeRegistry.getTypeChain(requestedType);\n }\n\n private getFallbackThemeDependencies (explicitType?: string): string[] {\n const nativeType = this.getThemeType();\n const requestedType = explicitType ?? (this.themeTypeVariation || nativeType);\n\n for (let owner = this.themeOwnerNode; owner; owner = owner.parent?.themeOwnerNode ?? null) {\n if (owner.theme?.hasTypeVariation(requestedType)) {\n return owner.theme.getTypeDependencies(requestedType);\n }\n }\n if (!explicitType && this.themeTypeVariation) {\n return [this.themeTypeVariation, ...ThemeRegistry.getTypeChain(nativeType)];\n }\n\n return ThemeRegistry.getTypeChain(requestedType);\n }\n\n private resolveThemeItem (itemType: ThemeItemType, name: string, explicitType?: string): ThemeCacheEntry {\n const cacheKey = `${itemType}\\u0000${explicitType ?? ''}\\u0000${name}`;\n const cached = this.themeCache.get(cacheKey);\n\n if (cached) {return { found: cached.found, value: cloneThemeValue(cached.value) };}\n const nativeType = this.getThemeType();\n const queryMatchesCurrentType = !explicitType\n || explicitType === nativeType\n || (!!this.themeTypeVariation && explicitType === this.themeTypeVariation);\n const override = queryMatchesCurrentType ? this.themeOverrides.get(itemType)?.get(name) : undefined;\n let found = override !== undefined;\n let value = override;\n\n if (!found) {\n for (let owner = this.themeOwnerNode; owner && !found; owner = owner.parent?.themeOwnerNode ?? null) {\n const theme = owner.theme;\n\n if (!theme) {continue;}\n for (const dependency of this.getThemeDependencies(theme, explicitType)) {\n const candidate = theme.getItem(dependency, itemType, name);\n\n if (candidate !== undefined) {\n value = candidate;\n found = true;\n\n break;\n }\n }\n }\n }\n if (!found) {\n for (const dependency of this.getFallbackThemeDependencies(explicitType)) {\n const candidate = ThemeRegistry.getDefault(dependency, itemType, name);\n\n if (candidate !== undefined) {\n value = candidate;\n found = true;\n\n break;\n }\n }\n }\n if (!found) {value = this.getThemeFallback(itemType);}\n const entry = { found, value: cloneThemeValue(value as ThemeValue) };\n\n this.themeCache.set(cacheKey, entry);\n\n return { found: entry.found, value: cloneThemeValue(entry.value) };\n }\n\n private getThemeFallback (itemType: ThemeItemType): ThemeValue {\n switch (itemType) {\n case ThemeItemType.Color: return themeFallbacks.color;\n case ThemeItemType.Constant: return themeFallbacks.constant;\n case ThemeItemType.Font: return themeFallbacks.font;\n case ThemeItemType.FontSize: return themeFallbacks.fontSize;\n case ThemeItemType.Icon: return themeFallbacks.icon;\n case ThemeItemType.StyleBox: return themeFallbacks.styleBox;\n }\n }\n\n private setThemeOverride (itemType: ThemeItemType, name: string, value: ThemeValue): void {\n if (!name) {throw new Error('Theme override item names cannot be empty.');}\n let items = this.themeOverrides.get(itemType);\n\n if (!items) {this.themeOverrides.set(itemType, items = new Map());}\n const previous = items.get(name);\n\n if (previous instanceof StyleBox) {this.releaseOverrideStyleBox(previous);}\n const stored = cloneThemeValue(value);\n\n items.set(name, stored);\n if (stored instanceof StyleBox) {this.retainOverrideStyleBox(stored);}\n this.propagateThemeChanged(ThemeRegistry.affectsLayout(this.getThemeType(), itemType, name), false);\n }\n\n private removeThemeOverride (itemType: ThemeItemType, name: string): void {\n const items = this.themeOverrides.get(itemType);\n const previous = items?.get(name);\n\n if (!items?.delete(name)) {return;}\n if (items.size === 0) {this.themeOverrides.delete(itemType);}\n if (previous instanceof StyleBox) {this.releaseOverrideStyleBox(previous);}\n this.propagateThemeChanged(ThemeRegistry.affectsLayout(this.getThemeType(), itemType, name), false);\n }\n\n private hasThemeOverride (itemType: ThemeItemType, name: string): boolean {\n return this.themeOverrides.get(itemType)?.has(name) ?? false;\n }\n\n private retainOverrideStyleBox (styleBox: StyleBox): void {\n const count = this.overrideStyleBoxReferences.get(styleBox) ?? 0;\n\n if (count === 0) {styleBox.on('changed', this.overrideStyleBoxChanged);}\n this.overrideStyleBoxReferences.set(styleBox, count + 1);\n }\n\n private releaseOverrideStyleBox (styleBox: StyleBox): void {\n const count = this.overrideStyleBoxReferences.get(styleBox) ?? 0;\n\n if (count <= 1) {\n styleBox.off('changed', this.overrideStyleBoxChanged);\n this.overrideStyleBoxReferences.delete(styleBox);\n } else {this.overrideStyleBoxReferences.set(styleBox, count - 1);}\n }\n\n private propagateThemeChanged (affectsLayout: boolean, includeChildren = true): void {\n if (this.disposed) {return;}\n this.themeCache.clear();\n if (this.root) {\n this.onThemeChanged(affectsLayout);\n this.eventEmitter.emit('themeChanged', this, affectsLayout);\n }\n if (includeChildren) {\n for (const child of this.children) {child.propagateThemeChanged(affectsLayout);}\n }\n }\n\n private propagateThemeOwner (ownerNode: Control | null, notify: boolean, assign: boolean): void {\n let assignToControl = assign;\n\n if (this !== ownerNode && this.theme) {\n assignToControl = false;\n }\n if (assignToControl) {\n this.themeOwnerNode = ownerNode;\n }\n this.themeCache.clear();\n if (notify && this.root) {\n this.onThemeChanged(true);\n this.eventEmitter.emit('themeChanged', this, true);\n }\n for (const child of this.children) {\n child.propagateThemeOwner(ownerNode, notify, assignToControl);\n }\n }\n\n private scheduleMeasurementChanges (changes: MeasurementChange, root: RootControl): void {\n const pending = changes & ~this.pendingMeasurementChanges;\n\n if (pending === 0) {return;}\n this.pendingMeasurementChanges |= pending;\n root.queueMeasurementChange(this);\n }\n\n private applyBounds (x: number, y: number, width: number, height: number): void {\n const locationChanged = this.position.x !== x || this.position.y !== y;\n const sizeChanged = this.size.x !== width || this.size.y !== height;\n\n if (!locationChanged && !sizeChanged) {\n return;\n }\n this.position.set(x, y);\n this.size.set(width, height);\n this.markTransformDirty();\n if (locationChanged) {\n this.eventEmitter.emit('locationChanged', this);\n }\n if (sizeChanged) {\n this.eventEmitter.emit('sizeChanged', this);\n if (!(this instanceof Container)) {\n for (const child of this.children.slice()) {\n child.updateLayout();\n }\n }\n }\n }\n\n private markTransformDirty (): void {\n this.transformDirty = true;\n }\n\n private getCachedMinimumSize (): Vector2 {\n this.minimumSizeCache ??= normalizeMeasuredMinimum(this.getMinimumSize());\n\n return this.minimumSizeCache.clone();\n }\n\n private getCachedDesiredSize (): Vector2 {\n this.desiredSizeCache ??= normalizeMeasuredMinimum(this.getDesiredSize());\n\n return this.desiredSizeCache.clone();\n }\n\n private getCachedMaximumSize (): Vector2 {\n this.maximumSizeCache ??= normalizeMeasuredMaximum(this.getMaximumSize());\n\n return this.maximumSizeCache.clone();\n }\n\n private resolveBoundedAxis (\n position: number,\n requestedSize: number,\n minimumSize: number,\n maximumSize: number,\n growDirection: GrowDirection,\n ): { position: number, size: number } {\n const finiteSize = Number.isFinite(requestedSize) ? requestedSize : 0;\n const size = Math.max(minimumSize, clampToMaximum(finiteSize, maximumSize));\n const difference = size - finiteSize;\n let adjustedPosition = Number.isFinite(position) ? position : 0;\n\n if (growDirection === GrowDirection.Begin) {\n adjustedPosition -= difference;\n } else if (growDirection === GrowDirection.Both) {\n adjustedPosition -= difference / 2;\n }\n\n return { position: adjustedPosition, size };\n }\n\n private assertGrowDirection (value: GrowDirection): void {\n if (!Number.isInteger(value) || value < GrowDirection.Begin || value > GrowDirection.Both) {\n throw new RangeError('Invalid Control grow direction.');\n }\n }\n\n private queuePendingLayouts (): void {\n if (this instanceof Container) {\n this.queueSort();\n }\n for (const child of this.children) {\n child.queuePendingLayouts();\n }\n }\n\n private queuePendingMeasurements (root: RootControl): void {\n if (this.pendingMeasurementChanges !== 0) {\n root.queueMeasurementChange(this);\n }\n for (const child of this.children) {\n child.queuePendingMeasurements(root);\n }\n }\n\n private notifyRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {\n this.onRootChanged(previousRoot, nextRoot);\n for (const child of this.children) {\n child.notifyRootChanged(previousRoot, nextRoot);\n }\n }\n\n private getParentRect (): Rect {\n return {\n position: new Vector2(),\n size: this.parent?.size.clone() ?? new Vector2(),\n };\n }\n\n private computeOffsets (rect: Rect, parentRect: Rect): void {\n this.offsetMin.set(\n rect.position.x - parentRect.position.x - this.anchorMin.x * parentRect.size.x,\n rect.position.y - parentRect.position.y - this.anchorMin.y * parentRect.size.y,\n );\n this.offsetMax.set(\n rect.position.x + rect.size.x - parentRect.position.x - this.anchorMax.x * parentRect.size.x,\n rect.position.y + rect.size.y - parentRect.position.y - this.anchorMax.y * parentRect.size.y,\n );\n }\n\n private computeAnchors (rect: Rect, parentRect: Rect): void {\n if (parentRect.size.x !== 0) {\n this.anchorMin.x = (rect.position.x - parentRect.position.x - this.offsetMin.x) / parentRect.size.x;\n this.anchorMax.x = (rect.position.x + rect.size.x - parentRect.position.x - this.offsetMax.x) / parentRect.size.x;\n }\n if (parentRect.size.y !== 0) {\n this.anchorMin.y = (rect.position.y - parentRect.position.y - this.offsetMin.y) / parentRect.size.y;\n this.anchorMax.y = (rect.position.y + rect.size.y - parentRect.position.y - this.offsetMax.y) / parentRect.size.y;\n }\n }\n\n private isMouseRecursiveEnabled (): boolean {\n if (this.mouseBehaviorRecursive === MouseBehaviorRecursive.Inherited) {\n return this.parent?.isMouseRecursiveEnabled() ?? true;\n }\n\n return this.mouseBehaviorRecursive === MouseBehaviorRecursive.Enabled;\n }\n\n private isFocusRecursiveEnabled (): boolean {\n if (this.focusBehaviorRecursive === FocusBehaviorRecursive.Inherited) {\n return this.parent?.isFocusRecursiveEnabled() ?? true;\n }\n\n return this.focusBehaviorRecursive === FocusBehaviorRecursive.Enabled;\n }\n\n fromData (data: ControlData): void {\n if (data.anchorMin !== undefined) {\n this.setAnchorMin(...data.anchorMin);\n }\n if (data.anchorMax !== undefined) {\n this.setAnchorMax(...data.anchorMax);\n }\n if (data.offsetMin !== undefined) {\n this.setOffsetMin(...data.offsetMin);\n }\n if (data.offsetMax !== undefined) {\n this.setOffsetMax(...data.offsetMax);\n }\n if (data.pivot !== undefined) {\n this.setPivot(...data.pivot);\n }\n if (data.scale !== undefined) {\n this.setScale(...data.scale);\n }\n if (data.shear !== undefined) {\n this.setShear(...data.shear);\n }\n if (data.rotation !== undefined) {\n this.setRotation(data.rotation);\n }\n if (data.customMinimumSize !== undefined) {\n this.setCustomMinimumSize(...data.customMinimumSize);\n }\n if (data.customMaximumSize !== undefined) {\n this.setCustomMaximumSize(...data.customMaximumSize);\n }\n if (data.horizontalSizeFlags !== undefined || data.verticalSizeFlags !== undefined) {\n this.setSizeFlags(\n data.horizontalSizeFlags ?? this.horizontalSizeFlags,\n data.verticalSizeFlags ?? this.verticalSizeFlags,\n );\n }\n if (data.stretchRatio !== undefined) {\n this.stretchRatio = data.stretchRatio;\n }\n if (data.horizontalGrowDirection !== undefined) {\n this.horizontalGrowDirection = data.horizontalGrowDirection;\n }\n if (data.verticalGrowDirection !== undefined) {\n this.verticalGrowDirection = data.verticalGrowDirection;\n }\n if (data.mouseFilter !== undefined) {\n this.mouseFilter = data.mouseFilter;\n }\n if (data.mouseBehaviorRecursive !== undefined) {\n this.mouseBehaviorRecursive = data.mouseBehaviorRecursive;\n }\n if (data.mouseForcePassScrollEvents !== undefined) {\n this.mouseForcePassScrollEvents = data.mouseForcePassScrollEvents;\n }\n if (data.focusMode !== undefined) {\n this.focusMode = data.focusMode;\n }\n if (data.focusBehaviorRecursive !== undefined) {\n this.focusBehaviorRecursive = data.focusBehaviorRecursive;\n }\n if (data.defaultCursorShape !== undefined) {\n this.defaultCursorShape = data.defaultCursorShape;\n }\n if (data.clipContents !== undefined) {\n this.clipContents = data.clipContents;\n }\n if (data.themeTypeVariation !== undefined) {\n this.themeTypeVariation = data.themeTypeVariation;\n }\n if (data.themeOverrides !== undefined) {\n this.clearThemeOverrides();\n this.applyThemeOverridesFromData(data.themeOverrides);\n }\n }\n\n private applyThemeOverridesFromData (data: ThemeItemCollectionData): void {\n for (const name of Object.keys(data.colors ?? {})) {\n const value = data.colors![name];\n\n this.setThemeColorOverride(name, new Color(value.r, value.g, value.b, value.a));\n }\n for (const name of Object.keys(data.constants ?? {})) {\n this.setThemeConstantOverride(name, data.constants![name]);\n }\n for (const name of Object.keys(data.fonts ?? {})) {\n const value = data.fonts![name];\n\n this.setThemeFontOverride(name, {\n family: value.family,\n weight: value.weight ?? 'normal',\n style: value.style ?? 'normal',\n });\n }\n for (const name of Object.keys(data.fontSizes ?? {})) {\n this.setThemeFontSizeOverride(name, data.fontSizes![name]);\n }\n for (const name of Object.keys(data.icons ?? {})) {\n const value = data.icons![name];\n\n this.setThemeIconOverride(name, value ? this.engine.findObject<Texture>(value) : null);\n }\n for (const name of Object.keys(data.styleBoxes ?? {})) {\n this.setThemeStyleBoxOverride(name, styleBoxFromData(this.engine, data.styleBoxes![name]));\n }\n }\n}\n\n/**\n * A Control that automatically measures and arranges its child Controls.\n * Concrete layout algorithms live in GUI plugin packages.\n */\n@effectsClass('Container')\nexport class Container extends Control {\n static override readonly themeType: string = 'Container';\n private sortPending = false;\n private readonly childLayoutChanged = () => this.invalidateMeasurementsAndQueueSort();\n private readonly ownSizeChanged = () => this.queueSort();\n\n constructor (engine: Engine) {\n super(engine);\n this.on('sizeChanged', this.ownSizeChanged);\n }\n\n /** Defers and coalesces a layout pass until the GUI update phase. */\n queueSort (): void {\n const root = this.root;\n\n if (!root || this.sortPending) {\n return;\n }\n this.sortPending = true;\n root.queueLayout(this);\n }\n\n /** @internal */\n invokeSortChildren (): void {\n if (!this.sortPending || this.isDisposed) {\n return;\n }\n this.sortChildren();\n this.sortPending = false;\n }\n\n override changeChildIndex (child: Control, newIndex: number): void {\n const previousIndex = this.getChildIndex(child);\n\n super.changeChildIndex(child, newIndex);\n if (previousIndex !== this.getChildIndex(child)) {\n this.invalidateMeasurementsAndQueueSort();\n }\n }\n\n override addChildInternal (child: Control): void {\n const wasChild = this.children.includes(child);\n\n super.addChildInternal(child);\n if (!wasChild) {\n this.bindChild(child);\n this.invalidateMeasurementsAndQueueSort();\n }\n }\n\n override removeChildInternal (child: Control): void {\n const wasChild = this.children.includes(child);\n\n if (wasChild) {\n this.unbindChild(child);\n }\n super.removeChildInternal(child);\n if (wasChild) {\n this.invalidateMeasurementsAndQueueSort();\n }\n }\n\n override dispose (): void {\n this.off('sizeChanged', this.ownSizeChanged);\n for (const child of this.children.slice()) {\n this.unbindChild(child);\n }\n super.dispose();\n }\n\n /**\n * Applies size flags and strict container geometry to a child. Automatic\n * layout owns anchors, rotation, scale and shear; pivot is intentionally kept.\n */\n fitChildInRect (child: Control, rect: Rect): void {\n const minimum = child.getBoundMinimumSize();\n const desired = child.getBoundDesiredSize();\n const maximum = child.getCombinedMaximumSize();\n const horizontal = this.fitAxis(\n rect.position.x,\n rect.size.x,\n minimum.x,\n desired.x,\n maximum.x,\n child.horizontalSizeFlags,\n );\n const vertical = this.fitAxis(\n rect.position.y,\n rect.size.y,\n minimum.y,\n desired.y,\n maximum.y,\n child.verticalSizeFlags,\n );\n\n child.anchorMin.set(0, 0);\n child.anchorMax.set(0, 0);\n child.setRotation(0);\n child.setScale(1, 1);\n child.setShear(0, 0);\n child.setRect({\n position: new Vector2(horizontal.position, vertical.position),\n size: new Vector2(horizontal.size, vertical.size),\n });\n }\n\n /** Returns direct children that participate in layout. Disabled children still participate. */\n protected getLayoutChildren (): Control[] {\n return this.children.filter(child => child.visible && !child.isDisposed);\n }\n\n protected sortChildren (): void {}\n\n private bindChild (child: Control): void {\n child.on('sizeFlagsChanged', this.childLayoutChanged);\n child.on('visibilityChanged', this.childLayoutChanged);\n }\n\n private unbindChild (child: Control): void {\n child.off('sizeFlagsChanged', this.childLayoutChanged);\n child.off('visibilityChanged', this.childLayoutChanged);\n }\n\n private invalidateMeasurementsAndQueueSort (): void {\n this.invalidateMeasurementsFromChild();\n }\n\n /** @internal */\n invalidateMeasurementsFromChild (): void {\n this.invalidateMeasurementChanges(MeasurementChange.All);\n this.queueSort();\n }\n\n private fitAxis (\n position: number,\n available: number,\n minimum: number,\n desired: number,\n maximum: number,\n flags: SizeFlags,\n ): { position: number, size: number } {\n const wantsFill = (flags & SizeFlags.Fill) !== 0;\n let size = wantsFill ? available : Math.min(available, desired);\n\n size = Math.max(minimum, clampToMaximum(size, maximum));\n const remaining = available - size;\n let adjustedPosition = position;\n\n if ((flags & SizeFlags.ShrinkEnd) !== 0) {\n adjustedPosition += remaining;\n } else if ((flags & SizeFlags.ShrinkCenter) !== 0) {\n adjustedPosition += remaining / 2;\n }\n\n return { position: adjustedPosition, size };\n }\n}\n\n/** Base class for GUI tree roots and input dispatchers. */\nexport abstract class RootControl extends Control {\n protected readonly rootEventEmitter = new EventEmitter<RootControlEvent>();\n\n override on<E extends keyof RootControlEvent> (\n eventName: E,\n listener: EventEmitterListener<RootControlEvent[E]>,\n ): void {\n if (eventName === 'guiFocusChanged') {\n this.rootEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof RootControlEvent> (\n eventName: E,\n listener: EventEmitterListener<RootControlEvent[E]>,\n ): void {\n if (eventName === 'guiFocusChanged') {\n this.rootEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n abstract queueLayout (container: Container): void;\n abstract queueMeasurementChange (control: Control): void;\n abstract getMousePosition (): Vector2;\n abstract guiGetFocusOwner (): Control | null;\n abstract guiControlHasFocus (control: Control, visibleOnly?: boolean): boolean;\n abstract guiIsDragging (): boolean;\n abstract guiGetDragData (): unknown;\n abstract guiIsDragSuccessful (): boolean;\n abstract guiCancelDrag (): void;\n abstract cancelPointerInput (): void;\n abstract cancelPointerPress (control: Control, touchIndex: number): void;\n abstract grabControlFocus (control: Control, hideFocus?: boolean): void;\n abstract grabControlClickFocus (control: Control): void;\n abstract releaseControlFocus (control?: Control): void;\n abstract warpControlMouse (position: Vector2): void;\n abstract updateMouseCursorState (): void;\n abstract controlStateChanged (control: Control): void;\n abstract controlRemoved (control: Control): void;\n abstract controlTreeChanged (): void;\n abstract popupControl (control: Control, source: Control | null, position: Vector2): void;\n abstract closePopupControl (control: Control): void;\n}\n\nThemeRegistry.registerType(Control.themeType, null);\nThemeRegistry.registerType(Container.themeType, Control.themeType);\n","import { Component } from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { CanvasRootControl } from '../core/roots';\nimport { GUIWindowComponent } from './gui-window-component';\n\nexport enum CanvasRenderMode {\n ScreenSpace = 0,\n CameraSpace = 1,\n WorldSpace = 2,\n WorldSpaceFaceCamera = 3,\n}\n\n/** Canvas-layer boundary attached to a VFXItem. Input state remains owned by the window root. */\nexport class UICanvas extends Component {\n readonly rootControl: CanvasRootControl;\n renderMode = CanvasRenderMode.ScreenSpace;\n receivesEvents = true;\n private _order = 0;\n private registered = false;\n\n constructor (engine: Engine) {\n super(engine);\n this.rootControl = new CanvasRootControl(engine, this);\n }\n\n get order (): number {\n return this._order;\n }\n\n set order (value: number) {\n if (this._order !== value) {\n this._order = value;\n this.engine.root.getComponent(GUIWindowComponent).windowRoot.canvases.sortCanvases();\n }\n }\n\n get isVisible (): boolean {\n return this.renderMode === CanvasRenderMode.ScreenSpace && this.enabled &&\n !!this.item?.isActive;\n }\n\n override onEnable (): void {\n this.register();\n }\n\n override onDisable (): void {\n this.unregister();\n }\n\n override onDestroy (): void {\n this.destroyCanvas();\n }\n\n override dispose (): void {\n this.destroyCanvas();\n super.dispose();\n }\n\n private register (): void {\n if (!this.registered) {\n const guiWindow = this.engine.root.getComponent(GUIWindowComponent);\n\n this.rootControl.parent = guiWindow.windowRoot.canvases;\n this.registered = true;\n }\n }\n\n private unregister (): void {\n if (this.registered) {\n this.rootControl.parent = null;\n this.registered = false;\n }\n }\n\n private destroyCanvas (): void {\n this.unregister();\n if (!this.rootControl.isDisposed) {\n this.rootControl.dispose();\n }\n }\n\n}\n","export enum Orientation {\n Horizontal,\n Vertical,\n}\n\nexport enum LayoutAlignment {\n Begin,\n Center,\n End,\n}\n\nexport enum AspectRatioStretchMode {\n WidthControlsHeight,\n HeightControlsWidth,\n Fit,\n Cover,\n}\n","export enum ScrollMode {\n Disabled,\n Auto,\n ShowAlways,\n ShowNever,\n Reserve,\n MaximizeFirst,\n}\n","export enum HorizontalAlignment {\n Left,\n Center,\n Right,\n Fill,\n}\n\nexport enum VerticalAlignment {\n Top,\n Center,\n Bottom,\n Fill,\n}\n\nexport enum AutowrapMode {\n Off,\n Arbitrary,\n Word,\n WordSmart,\n}\n\nexport enum TextOverflow {\n Visible,\n Clip,\n Ellipsis,\n}\n\nexport enum TextureExpandMode {\n KeepSize,\n IgnoreSize,\n FitWidth,\n FitWidthProportional,\n FitHeight,\n FitHeightProportional,\n}\n\nexport enum TextureStretchMode {\n Scale,\n Tile,\n Keep,\n KeepCentered,\n KeepAspect,\n KeepAspectCentered,\n KeepAspectCovered,\n}\n\nexport enum AxisStretchMode {\n Stretch,\n Tile,\n TileFit,\n}\n\nexport enum Side {\n Left,\n Top,\n Right,\n Bottom,\n}\n\nexport enum ButtonDrawMode {\n Normal,\n Pressed,\n Hover,\n Disabled,\n HoverPressed,\n}\n\nexport enum ButtonActionMode {\n Press,\n Release,\n}\n\nexport enum ProgressFillMode {\n BeginToEnd,\n EndToBegin,\n TopToBottom,\n BottomToTop,\n}\n","import type { UICanvas } from '../components/ui-canvas';\nimport {\n InputEvent,\n InputEventKey,\n InputEventMouse,\n InputEventMouseButton,\n InputEventMouseMotion,\n InputEventScreenDrag,\n InputEventScreenTouch,\n MouseButton,\n MouseButtonMask,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n} from '@galacean/effects';\nimport {\n CursorShape,\n FocusMode,\n MouseBehaviorRecursive,\n MouseFilter,\n} from './enums';\nimport type { CursorStyle } from './enums';\nimport type { Container } from './control';\nimport { Control, RootControl } from './control';\nimport type { Theme } from './theme';\n\ntype Matrix3 = math.Matrix3;\ntype Vector2 = math.Vector2;\nconst Matrix3 = math.Matrix3;\nconst Vector2 = math.Vector2;\n\nconst cursorNames: Record<CursorShape, string> = {\n [CursorShape.Arrow]: 'default',\n [CursorShape.Ibeam]: 'text',\n [CursorShape.PointingHand]: 'pointer',\n [CursorShape.Cross]: 'crosshair',\n [CursorShape.Wait]: 'wait',\n [CursorShape.Busy]: 'progress',\n [CursorShape.Drag]: 'grab',\n [CursorShape.CanDrop]: 'copy',\n [CursorShape.Forbidden]: 'not-allowed',\n [CursorShape.Vsize]: 'ns-resize',\n [CursorShape.Hsize]: 'ew-resize',\n [CursorShape.Bdiagsize]: 'nesw-resize',\n [CursorShape.Fdiagsize]: 'nwse-resize',\n [CursorShape.Move]: 'move',\n [CursorShape.Vsplit]: 'row-resize',\n [CursorShape.Hsplit]: 'col-resize',\n [CursorShape.Help]: 'help',\n};\n\nfunction getButtonMask (button: MouseButton): number {\n switch (button) {\n case MouseButton.Left: return MouseButtonMask.Left;\n case MouseButton.Right: return MouseButtonMask.Right;\n case MouseButton.Middle: return MouseButtonMask.Middle;\n case MouseButton.Xbutton1: return MouseButtonMask.Xbutton1;\n case MouseButton.Xbutton2: return MouseButtonMask.Xbutton2;\n default: return MouseButtonMask.None;\n }\n}\n\nfunction isWheelButton (button: MouseButton): boolean {\n return button >= MouseButton.WheelUp && button <= MouseButton.WheelRight;\n}\n\ntype GUIState = {\n mouseFocus: Control | null,\n mouseClickGrabber: Control | null,\n mouseFocusMask: number,\n mouseOver: Control | null,\n mouseOverHierarchy: Control[],\n touchFocus: Map<number, Control>,\n keyFocus: Control | null,\n hideFocus: boolean,\n dragAccum: Vector2,\n dragAttempted: boolean,\n dragging: boolean,\n dragData: unknown,\n dragMouseOver: Control | null,\n dragSuccessful: boolean,\n lastMousePosition: Vector2,\n sendingMouseEnterExit: boolean,\n mouseOverUpdatePending: boolean,\n};\n\ntype PopupState = {\n control: Control,\n restoreFocus: Control | null,\n restoreFocusHidden: boolean,\n originalTheme: Theme | null,\n};\n\nclass PopupLayer extends Control {\n closeTop?: () => void;\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Stop;\n this.visible = false;\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left || event.buttonIndex === MouseButton.Right) {\n this.closeTop?.();\n event.accept();\n }\n }\n}\n\n/** CanvasLayer-like boundary for a single UICanvas GUI tree. */\nexport class CanvasRootControl extends Control {\n readonly canvas: UICanvas;\n\n constructor (engine: Engine, canvas: UICanvas) {\n super(engine);\n this.canvas = canvas;\n this.mouseFilter = MouseFilter.Ignore;\n this.setSize(engine.canvas.width, engine.canvas.height);\n }\n\n get inputDisabled (): boolean {\n return !this.canvas.receivesEvents || !this.canvas.enabled || !this.canvas.item?.isActive;\n }\n}\n\n/** Global ordered collection of UICanvas roots. */\nexport class CanvasContainer extends Control {\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Ignore;\n this.setSize(engine.canvas.width, engine.canvas.height);\n }\n\n sortCanvases (): void {\n this.children.sort((left, right) =>\n (left as CanvasRootControl).canvas.order - (right as CanvasRootControl).canvas.order);\n }\n\n override addChildInternal (child: Control): void {\n super.addChildInternal(child);\n child.setSize(this.width, this.height);\n this.sortCanvases();\n }\n\n protected override drawChildren (): void {\n this.sortCanvases();\n const graphics = this.engine.graphics;\n\n if (this.clipContents) {\n graphics.pushClipRect(0, 0, this.width, this.height);\n }\n for (const child of this.children) {\n const root = child as CanvasRootControl;\n\n if (root.canvas.isVisible) {\n root.drawInternal();\n }\n }\n if (this.clipContents) {\n graphics.popClipRect();\n }\n }\n\n}\n\n/** Engine window GUI root. Routes events across all UICanvas roots. */\nexport class WindowRootControl extends RootControl {\n readonly canvases: CanvasContainer;\n private readonly popupLayer: PopupLayer;\n private readonly popupStack: PopupState[] = [];\n dragThreshold = 10;\n private lastInput: InputEvent | null = null;\n private readonly dirtyContainers = new Set<Container>();\n private readonly dirtyMeasurements = new Set<Control>();\n private readonly gui: GUIState = {\n mouseFocus: null,\n mouseClickGrabber: null,\n mouseFocusMask: MouseButtonMask.None,\n mouseOver: null,\n mouseOverHierarchy: [],\n touchFocus: new Map(),\n keyFocus: null,\n hideFocus: false,\n dragAccum: new Vector2(),\n dragAttempted: false,\n dragging: false,\n dragData: null,\n dragMouseOver: null,\n dragSuccessful: false,\n lastMousePosition: new Vector2(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY),\n sendingMouseEnterExit: false,\n mouseOverUpdatePending: false,\n };\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Ignore;\n this.setSize(engine.canvas.width, engine.canvas.height);\n this.canvases = new CanvasContainer(engine);\n this.canvases.parent = this;\n this.popupLayer = new PopupLayer(engine);\n this.popupLayer.setAnchorMax(1, 1);\n this.popupLayer.setOffsetMax(0, 0);\n this.popupLayer.closeTop = () => {\n const top = this.popupStack[this.popupStack.length - 1];\n\n if (top) {this.closePopupControl(top.control);}\n };\n this.popupLayer.parent = this;\n }\n\n pushInput (event: InputEvent): void {\n this.lastInput = event;\n this.cleanupInternalState();\n this.processGUIInput(event);\n this.postGrabClickFocus();\n }\n\n isInputHandled (): boolean {\n return this.lastInput?.isAccepted() ?? false;\n }\n\n override getMousePosition (): Vector2 {\n return this.gui.lastMousePosition.clone();\n }\n\n override guiGetFocusOwner (): Control | null {\n return this.isFocusTargetUsable(this.gui.keyFocus) ? this.gui.keyFocus : null;\n }\n\n override guiControlHasFocus (control: Control, visibleOnly = false): boolean {\n return this.guiGetFocusOwner() === control && (!visibleOnly || !this.gui.hideFocus);\n }\n\n guiReleaseFocus (): void {\n this.releaseControlFocus();\n }\n\n override guiIsDragging (): boolean {\n return this.gui.dragging;\n }\n\n override guiGetDragData (): unknown {\n return this.gui.dragData;\n }\n\n override guiIsDragSuccessful (): boolean {\n return this.gui.dragSuccessful;\n }\n\n override guiCancelDrag (): void {\n this.endDragging(false);\n }\n\n override grabControlFocus (control: Control, hideFocus = false): void {\n if (!this.isFocusTargetUsable(control)) {\n return;\n }\n if (this.gui.keyFocus === control) {\n this.gui.hideFocus = hideFocus;\n\n return;\n }\n const previous = this.gui.keyFocus;\n\n this.gui.keyFocus = control;\n this.gui.hideFocus = hideFocus;\n if (previous && !previous.isDisposed) {\n previous.onLostFocus();\n }\n control.onGotFocus();\n this.notifyFocusOwnerChanged(control);\n }\n\n override grabControlClickFocus (control: Control): void {\n if (this.isControlValid(control)) {\n this.gui.mouseClickGrabber = control;\n queueMicrotask(() => this.postGrabClickFocus());\n }\n }\n\n override releaseControlFocus (control?: Control): void {\n const previous = this.gui.keyFocus;\n\n if (!previous || (control && previous !== control)) {\n return;\n }\n this.gui.keyFocus = null;\n this.gui.hideFocus = false;\n if (!previous.isDisposed) {\n previous.onLostFocus();\n }\n this.notifyFocusOwnerChanged(null);\n }\n\n override warpControlMouse (position: Vector2): void {\n this.gui.lastMousePosition.copyFrom(position);\n this.updateMouseOver(position);\n this.updateMouseCursorState();\n }\n\n override updateMouseCursorState (): void {\n const position = this.gui.lastMousePosition;\n const target = this.isControlUsable(this.gui.mouseFocus)\n ? this.gui.mouseFocus\n : this.isControlUsable(this.gui.mouseOver)\n ? this.gui.mouseOver\n : null;\n\n this.updateCursor(target, position);\n }\n\n override controlStateChanged (control: Control): void {\n if (!this.isControlUsable(control)) {\n this.dropControlState(control);\n }\n this.updateMouseOverHierarchy();\n }\n\n override controlRemoved (control: Control): void {\n this.dropControlState(control);\n this.cleanupInternalState();\n this.updateMouseOverHierarchy();\n }\n\n override controlTreeChanged (): void {\n this.updateMouseOverHierarchy();\n }\n\n override popupControl (control: Control, source: Control | null, position: Vector2): void {\n this.closePopupControl(control);\n const originalTheme = control.theme;\n const focusOwner = this.guiGetFocusOwner();\n const restoreFocus = source ?? focusOwner;\n const restoreFocusHidden = restoreFocus === focusOwner && !!restoreFocus && !restoreFocus.hasFocus(true);\n\n if (!originalTheme) {control.theme = source?.getInheritedTheme() ?? null;}\n const desired = control.getBoundDesiredSize();\n const width = Math.max(control.width, desired.x);\n const height = Math.max(control.height, desired.y);\n\n control.setSize(width, height);\n control.setPosition(\n Math.max(0, Math.min(position.x, this.width - width)),\n Math.max(0, Math.min(position.y, this.height - height)),\n );\n control.parent = this.popupLayer;\n control.visible = true;\n this.popupLayer.visible = true;\n this.popupStack.push({ control, restoreFocus, restoreFocusHidden, originalTheme });\n control.onPopupOpened();\n control.grabFocus();\n }\n\n override closePopupControl (control: Control): void {\n const index = this.popupStack.findIndex(state => state.control === control);\n\n if (index === -1) {return;}\n const removed = this.popupStack.splice(index);\n\n for (let removedIndex = removed.length - 1; removedIndex >= 0; removedIndex--) {\n const state = removed[removedIndex];\n\n state.control.visible = false;\n state.control.parent = null;\n state.control.theme = state.originalTheme;\n state.control.onPopupClosed();\n }\n this.popupLayer.visible = this.popupStack.length > 0;\n const { restoreFocus: restore, restoreFocusHidden } = removed[0];\n\n if (restore && !restore.isDisposed && restore.root === this) {restore.grabFocus(restoreFocusHidden);}\n }\n\n override queueLayout (container: Container): void {\n if (!container.isDisposed) {\n this.dirtyContainers.add(container);\n }\n }\n\n override queueMeasurementChange (control: Control): void {\n if (!control.isDisposed) {\n this.dirtyMeasurements.add(control);\n }\n }\n\n override cancelPointerInput (): void {\n this.dropMouseFocus();\n this.dropMouseOver();\n this.gui.touchFocus.clear();\n this.endDragging(false);\n this.releaseControlFocus();\n }\n\n onCanvasBlur (): void {\n const target = this.gui.mouseFocus;\n const mask = this.gui.mouseFocusMask;\n\n this.dropMouseFocus();\n if (!target || target.isDisposed) {\n return;\n }\n for (const button of [MouseButton.Left, MouseButton.Right, MouseButton.Middle]) {\n if ((mask & getButtonMask(button)) === 0) {\n continue;\n }\n const event = new InputEventMouseButton();\n const position = target.makePositionLocal(this.gui.lastMousePosition);\n\n event.device = InputEvent.deviceIdInternal;\n event.buttonIndex = button;\n event.pressed = false;\n event.position.copyFrom(position);\n event.globalPosition.copyFrom(position);\n this.callControlInput(target, event);\n }\n }\n\n override cancelPointerPress (control: Control, touchIndex: number): void {\n if (!this.isControlValid(control)) {\n return;\n }\n if (this.controlBelongsToSubtree(this.gui.mouseFocus, control)) {\n this.gui.mouseFocus = control;\n }\n if (this.controlBelongsToSubtree(this.gui.mouseClickGrabber, control)) {\n this.gui.mouseClickGrabber = null;\n }\n if (this.controlBelongsToSubtree(this.gui.touchFocus.get(touchIndex) ?? null, control)) {\n this.gui.touchFocus.set(touchIndex, control);\n }\n this.endDragging(false);\n }\n\n resize (width: number, height: number): void {\n this.setSize(width, height);\n this.canvases.setSize(width, height);\n for (const root of this.canvases.children as CanvasRootControl[]) {\n root.setSize(width, height);\n }\n this.popupLayer.setSize(width, height);\n }\n\n render (): void {\n this.flushLayout();\n if (this.canvases.children.length === 0) {\n return;\n }\n this.engine.graphics.begin();\n this.drawInternal();\n this.engine.graphics.end();\n }\n\n override update (deltaTime: number): void {\n if (this.gui.mouseOverUpdatePending) {\n this.gui.mouseOverUpdatePending = false;\n this.updateMouseOverHierarchy();\n }\n super.update(deltaTime);\n this.flushLayout();\n }\n\n override dispose (): void {\n this.cancelPointerInput();\n this.dirtyContainers.clear();\n this.dirtyMeasurements.clear();\n for (const state of this.popupStack.splice(0)) {\n state.control.parent = null;\n state.control.theme = state.originalTheme;\n state.control.onPopupClosed();\n }\n super.dispose();\n }\n\n private flushLayout (): void {\n let round = 0;\n\n while (this.dirtyMeasurements.size > 0 || this.dirtyContainers.size > 0) {\n if (round++ >= 32) {\n this.dirtyMeasurements.clear();\n this.dirtyContainers.clear();\n throw new Error('GUI layout did not converge after 32 rounds.');\n }\n if (this.dirtyMeasurements.size > 0) {\n const measurements = Array.from(this.dirtyMeasurements);\n\n this.dirtyMeasurements.clear();\n measurements.sort((left, right) => this.getControlDepth(right) - this.getControlDepth(left));\n for (const control of measurements) {\n if (control.root === this && !control.isDisposed) {\n control.invokeMeasurementChanges();\n }\n }\n continue;\n }\n const batch = Array.from(this.dirtyContainers);\n\n this.dirtyContainers.clear();\n batch.sort((left, right) => this.getControlDepth(left) - this.getControlDepth(right));\n for (const container of batch) {\n if (container.root === this && !container.isDisposed) {\n container.invokeSortChildren();\n }\n }\n }\n }\n\n private getControlDepth (control: Control): number {\n let depth = 0;\n let parent = control.parent;\n\n while (parent) {\n depth++;\n parent = parent.parent;\n }\n\n return depth;\n }\n\n private processGUIInput (event: InputEvent): void {\n if (event instanceof InputEventKey) {\n const target = this.guiGetFocusOwner();\n\n if (target) {\n this.callGUIInput(target, event);\n }\n } else if (event instanceof InputEventMouse) {\n this.gui.lastMousePosition.copyFrom(event.globalPosition);\n const target = this.updateMouseOver(event.globalPosition);\n\n if (event instanceof InputEventMouseButton) {\n this.processMouseButton(event, target);\n } else if (event instanceof InputEventMouseMotion) {\n this.processMouseMotion(event, target);\n }\n } else if (event instanceof InputEventScreenTouch) {\n this.processScreenTouch(event);\n } else if (event instanceof InputEventScreenDrag) {\n this.processScreenDrag(event);\n }\n }\n\n private processMouseButton (event: InputEventMouseButton, mouseOver: Control | null): void {\n if (isWheelButton(event.buttonIndex)) {\n if (mouseOver) {\n this.callGUIInput(mouseOver, event);\n }\n\n return;\n }\n const mask = getButtonMask(event.buttonIndex);\n\n if (event.isPressed()) {\n const target = this.gui.mouseFocusMask !== 0\n ? this.gui.mouseFocus\n : mouseOver;\n\n this.gui.mouseFocus = target;\n if (!target) {\n if (event.buttonIndex === MouseButton.Left && this.gui.keyFocus) {\n this.gui.hideFocus = true;\n }\n\n return;\n }\n this.gui.mouseFocusMask |= mask;\n if (event.buttonIndex === MouseButton.Left) {\n this.gui.dragAccum.setZero();\n this.gui.dragAttempted = false;\n this.findClickFocus(target);\n }\n this.callGUIInput(target, event);\n } else {\n if (event.buttonIndex === MouseButton.Left && this.gui.dragging) {\n this.finishDrop(event.globalPosition);\n }\n this.gui.mouseFocusMask &= ~mask;\n const target = this.gui.mouseFocus;\n\n if (this.gui.mouseFocusMask === 0) {\n this.gui.mouseFocus = null;\n }\n if (this.isControlUsable(target)) {\n this.callGUIInput(target, event);\n }\n }\n }\n\n private processMouseMotion (event: InputEventMouseMotion, mouseOver: Control | null): void {\n if (!this.gui.dragging && !this.gui.dragAttempted && this.gui.mouseFocus &&\n (this.gui.mouseFocusMask & MouseButtonMask.Left) !== 0) {\n this.gui.dragAccum.add(event.relative);\n if (this.gui.dragAccum.length() > this.dragThreshold) {\n const origin = event.globalPosition.clone().subtract(this.gui.dragAccum);\n\n this.beginDragging(this.gui.mouseFocus, origin);\n this.gui.dragAttempted = true;\n }\n }\n const target = this.isControlUsable(this.gui.mouseFocus)\n ? this.gui.mouseFocus\n : mouseOver;\n\n if (target) {\n this.callGUIInput(target, event);\n }\n if (this.gui.dragging) {\n this.gui.dragMouseOver = this.findDropTarget(mouseOver, event.globalPosition);\n }\n this.updateCursor(target, event.globalPosition);\n }\n\n private processScreenTouch (event: InputEventScreenTouch): void {\n let target: Control | null;\n\n if (event.isPressed()) {\n target = this.findInputControl(event.position);\n if (target) {\n this.gui.touchFocus.set(event.index, target);\n }\n } else {\n target = this.gui.touchFocus.get(event.index) ?? null;\n this.gui.touchFocus.delete(event.index);\n }\n if (this.isControlUsable(target)) {\n this.callGUIInput(target, event);\n }\n }\n\n private processScreenDrag (event: InputEventScreenDrag): void {\n const target = this.gui.touchFocus.get(event.index) ?? this.findInputControl(event.position);\n\n if (this.isControlUsable(target)) {\n this.callGUIInput(target, event);\n }\n }\n\n private callGUIInput (target: Control, event: InputEvent): void {\n let current: Control | null = target;\n const pointerEvent = event instanceof InputEventMouse || event instanceof InputEventScreenTouch ||\n event instanceof InputEventScreenDrag;\n\n while (current && current !== this && this.isControlUsable(current)) {\n const filter = current.getEffectiveMouseFilter();\n\n if (filter !== MouseFilter.Ignore) {\n const localEvent = event.xformedBy(this.getGlobalInverse(current));\n\n this.callControlInput(current, localEvent);\n if (localEvent.isAccepted()) {\n event.accept();\n }\n }\n const forcePassWheel = event instanceof InputEventMouseButton && isWheelButton(event.buttonIndex) &&\n current.mouseForcePassScrollEvents;\n const forcePassTouch = (event instanceof InputEventScreenTouch || event instanceof InputEventScreenDrag) &&\n current.mouseForcePassScrollEvents;\n\n if (event.isAccepted() || (filter === MouseFilter.Stop && pointerEvent && !forcePassWheel && !forcePassTouch)) {\n event.accept();\n\n return;\n }\n current = current.parent;\n }\n }\n\n private callControlInput (control: Control, event: InputEvent): void {\n if (event instanceof InputEventMouseButton) {\n if (isWheelButton(event.buttonIndex)) {\n control.onMouseWheel(event);\n } else if (event.isPressed()) {\n control.onMouseDown(event);\n } else {\n control.onMouseUp(event);\n }\n } else if (event instanceof InputEventMouseMotion) {\n control.onMouseMove(event);\n } else if (event instanceof InputEventScreenTouch) {\n if (event.isPressed()) {\n control.onTouchDown(event);\n } else {\n control.onTouchUp(event);\n }\n } else if (event instanceof InputEventScreenDrag) {\n control.onTouchMove(event);\n } else if (event instanceof InputEventKey) {\n if (event.isPressed()) {\n control.onKeyDown(event);\n } else if (event.isReleased()) {\n control.onKeyUp(event);\n }\n }\n }\n\n private findInputControl (position: Vector2): Control | null {\n if (this.popupLayer.visible) {\n return this.findControlAtPosition(this.popupLayer, position) ?? this.popupLayer;\n }\n this.canvases.sortCanvases();\n\n return this.findControlAtPosition(this.canvases, position, true);\n }\n\n private findControlAtPosition (\n container: Control,\n positionInParent: Vector2,\n skipSelf = false,\n parentEnabled = true,\n parentMouseEnabled = true,\n ): Control | null {\n if (!container.visible || container.isDisposed ||\n (container instanceof CanvasRootControl && (!container.canvas.isVisible || container.inputDisabled))) {\n return null;\n }\n const localPosition = this.toControlLocal(container, positionInParent);\n\n if (!localPosition) {\n return null;\n }\n const enabled = parentEnabled && container.enabled;\n const mouseEnabled = container.mouseBehaviorRecursive === MouseBehaviorRecursive.Inherited\n ? parentMouseEnabled\n : container.mouseBehaviorRecursive === MouseBehaviorRecursive.Enabled;\n\n if (container.clipContents && !container.hasPoint(localPosition)) {\n return null;\n }\n for (let index = container.children.length - 1; index >= 0; index--) {\n const child = container.children[index];\n\n if (!container.intersectsChildContent(child, localPosition)) {\n continue;\n }\n const found = this.findControlAtPosition(child, localPosition, false, enabled, mouseEnabled);\n\n if (found) {\n return found;\n }\n }\n if (!skipSelf && enabled && mouseEnabled && container.mouseFilter !== MouseFilter.Ignore &&\n container.hasPoint(localPosition)) {\n return container;\n }\n\n return null;\n }\n\n private toControlLocal (control: Control, positionInParent: Vector2): Vector2 | null {\n const elements = control.getTransform2D().elements;\n const determinant = elements[0] * elements[4] - elements[1] * elements[3];\n\n if (Math.abs(determinant) < 1e-12) {\n return null;\n }\n const x = positionInParent.x - elements[6];\n const y = positionInParent.y - elements[7];\n\n return new Vector2(\n (elements[4] * x - elements[3] * y) / determinant,\n (elements[0] * y - elements[1] * x) / determinant,\n );\n }\n\n private updateMouseOver (position: Vector2): Control | null {\n if (this.gui.sendingMouseEnterExit) {\n this.gui.mouseOverUpdatePending = true;\n\n return this.gui.mouseOver;\n }\n this.gui.mouseOverUpdatePending = false;\n const target = this.findInputControl(position);\n const next = this.buildHoverHierarchy(target);\n\n this.applyMouseOver(target, next, position);\n\n return this.isControlUsable(target) ? target : null;\n }\n\n private updateMouseOverHierarchy (): void {\n const current = this.gui.mouseOver;\n\n if (!current || this.gui.mouseOverHierarchy.length === 0) {\n return;\n }\n if (this.gui.sendingMouseEnterExit) {\n this.gui.mouseOverUpdatePending = true;\n\n return;\n }\n if (!this.isControlUsable(current)) {\n this.dropMouseOver();\n\n return;\n }\n const next = this.buildHoverHierarchy(current);\n const target = current.getEffectiveMouseFilter() === MouseFilter.Ignore ? null : current;\n\n this.applyMouseOver(target, next, this.gui.lastMousePosition);\n }\n\n private applyMouseOver (target: Control | null, next: Control[], position: Vector2): void {\n const previous = this.gui.mouseOverHierarchy;\n let common = 0;\n\n while (common < previous.length && common < next.length && previous[common] === next[common]) {\n common++;\n }\n this.gui.mouseOver = target;\n this.gui.mouseOverHierarchy = next;\n this.gui.sendingMouseEnterExit = true;\n for (let index = previous.length - 1; index >= common; index--) {\n if (!previous[index].isDisposed) {\n previous[index].onMouseLeave();\n }\n }\n for (let index = common; index < next.length; index++) {\n next[index].onMouseEnter(this.toLocal(next[index], position));\n }\n this.gui.sendingMouseEnterExit = false;\n }\n\n private buildHoverHierarchy (target: Control | null): Control[] {\n const hierarchy: Control[] = [];\n let current = target;\n\n while (current && current !== this) {\n const filter = current.getEffectiveMouseFilter();\n\n if (filter !== MouseFilter.Ignore) {\n hierarchy.push(current);\n }\n if (filter === MouseFilter.Stop) {\n break;\n }\n current = current.parent;\n }\n hierarchy.reverse();\n\n return hierarchy;\n }\n\n private findClickFocus (target: Control): void {\n let current: Control | null = target;\n\n while (current && current !== this) {\n const mode = current.getFocusModeWithOverride();\n\n if (mode === FocusMode.Click || mode === FocusMode.All) {\n this.grabControlFocus(current, true);\n\n return;\n }\n if (current.getEffectiveMouseFilter() === MouseFilter.Stop) {\n return;\n }\n current = current.parent;\n }\n }\n\n private beginDragging (source: Control, position: Vector2): void {\n let current: Control | null = source;\n\n while (current && current !== this) {\n const data = current.invokeGetDragData(this.toLocal(current, position));\n\n if (data !== null && data !== undefined) {\n this.gui.dragging = true;\n this.gui.dragData = data;\n this.gui.mouseFocus = null;\n this.gui.mouseFocusMask = MouseButtonMask.None;\n\n return;\n }\n if (current.getEffectiveMouseFilter() === MouseFilter.Stop) {\n return;\n }\n current = current.parent;\n }\n }\n\n private finishDrop (position: Vector2): void {\n const target = this.findDropTarget(this.findInputControl(position), position);\n\n if (target) {\n target.invokeDropData(this.toLocal(target, position), this.gui.dragData);\n }\n this.endDragging(!!target);\n }\n\n private findDropTarget (target: Control | null, position: Vector2): Control | null {\n let current = target;\n\n while (current && current !== this) {\n if (current.invokeCanDropData(this.toLocal(current, position), this.gui.dragData)) {\n return current;\n }\n if (current.getEffectiveMouseFilter() === MouseFilter.Stop) {\n return null;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private endDragging (successful: boolean): void {\n this.gui.dragSuccessful = successful;\n this.gui.dragging = false;\n this.gui.dragData = null;\n this.gui.dragMouseOver = null;\n }\n\n private updateCursor (target: Control | null, position: Vector2): void {\n let current = target;\n let cursor: CursorStyle = CursorShape.Arrow;\n\n while (current && current !== this) {\n const candidate = current.getCursorShape(this.toLocal(current, position));\n\n if (candidate !== CursorShape.Arrow) {\n cursor = candidate;\n\n break;\n }\n if (current.getEffectiveMouseFilter() === MouseFilter.Stop) {\n break;\n }\n current = current.parent;\n }\n this.engine.canvas.style.cursor = typeof cursor === 'string' ? cursor : cursorNames[cursor];\n }\n\n private postGrabClickFocus (): void {\n const target = this.gui.mouseClickGrabber;\n\n this.gui.mouseClickGrabber = null;\n if (this.isControlUsable(target)) {\n this.gui.mouseFocus = target;\n }\n }\n\n private cleanupInternalState (): void {\n if (!this.isControlUsable(this.gui.mouseFocus)) {\n this.dropMouseFocus();\n }\n if (this.gui.keyFocus && !this.isFocusTargetUsable(this.gui.keyFocus)) {\n this.releaseControlFocus(this.gui.keyFocus);\n }\n for (const [index, control] of this.gui.touchFocus) {\n if (!this.isControlUsable(control)) {\n this.gui.touchFocus.delete(index);\n }\n }\n }\n\n private dropMouseFocus (): void {\n this.gui.mouseFocus = null;\n this.gui.mouseFocusMask = MouseButtonMask.None;\n }\n\n private dropMouseOver (): void {\n if (this.gui.sendingMouseEnterExit) {\n this.gui.mouseOverUpdatePending = true;\n\n return;\n }\n for (let index = this.gui.mouseOverHierarchy.length - 1; index >= 0; index--) {\n const control = this.gui.mouseOverHierarchy[index];\n\n if (!control.isDisposed) {\n control.onMouseLeave();\n }\n }\n this.gui.mouseOver = null;\n this.gui.mouseOverHierarchy = [];\n }\n\n private dropControlState (control: Control): void {\n if (this.controlBelongsToSubtree(this.gui.mouseFocus, control)) {\n this.dropMouseFocus();\n }\n if (this.controlBelongsToSubtree(this.gui.mouseClickGrabber, control)) {\n this.gui.mouseClickGrabber = null;\n }\n if (this.controlBelongsToSubtree(this.gui.keyFocus, control)) {\n this.releaseControlFocus(this.gui.keyFocus ?? undefined);\n }\n if (this.controlBelongsToSubtree(this.gui.mouseOver, control)) {\n this.dropMouseOver();\n }\n if (this.controlBelongsToSubtree(this.gui.dragMouseOver, control)) {\n this.gui.dragMouseOver = null;\n }\n for (const [index, target] of this.gui.touchFocus) {\n if (this.controlBelongsToSubtree(target, control)) {\n this.gui.touchFocus.delete(index);\n }\n }\n }\n\n private getGlobalInverse (control: Control): Matrix3 {\n const transform = control.getGlobalTransform2D().clone();\n\n return Math.abs(transform.determinant()) < 1e-12 ? new Matrix3() : transform.invert();\n }\n\n private toLocal (control: Control, position: Vector2): Vector2 {\n const elements = this.getGlobalInverse(control).elements;\n\n return new Vector2(\n elements[0] * position.x + elements[3] * position.y + elements[6],\n elements[1] * position.x + elements[4] * position.y + elements[7],\n );\n }\n\n private controlBelongsToSubtree (control: Control | null, subtree: Control): boolean {\n let current = control;\n\n while (current) {\n if (current === subtree) {\n return true;\n }\n current = current.parent;\n }\n\n return false;\n }\n\n private isControlValid (control: Control | null): control is Control {\n return !!control && !control.isDisposed && control.root === this;\n }\n\n private isControlUsable (control: Control | null): control is Control {\n if (!this.isControlValid(control) || !control.visibleInHierarchy || !control.enabledInHierarchy) {\n return false;\n }\n const root = this.findCanvasRoot(control);\n\n return !root || !root.inputDisabled;\n }\n\n private findCanvasRoot (control: Control): CanvasRootControl | null {\n let current: Control | null = control;\n\n while (current && current !== this) {\n if (current instanceof CanvasRootControl) {\n return current;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private notifyFocusOwnerChanged (control: Control | null): void {\n this.rootEventEmitter.emit('guiFocusChanged', control);\n }\n\n private isFocusTargetUsable (control: Control | null): control is Control {\n return this.isControlUsable(control) && control.getFocusModeWithOverride() !== FocusMode.None;\n }\n}\n","import { Component } from '@galacean/effects';\nimport type { Engine, InputEvent } from '@galacean/effects';\nimport { WindowRootControl } from '../core/roots';\n\n/** Engine-level owner for the GUI window root and its runtime subscriptions. */\nexport class GUIWindowComponent extends Component {\n readonly windowRoot: WindowRootControl;\n private disposed = false;\n\n private readonly updateWindowRoot = (deltaTime: number): void => {\n this.windowRoot.update(deltaTime);\n };\n\n private readonly renderWindowRoot = (): void => {\n this.windowRoot.render();\n };\n\n private readonly resizeWindowRoot = (): void => {\n const rect = this.engine.canvas.getBoundingClientRect();\n const width = rect.width || this.engine.canvas.width;\n const height = rect.height || this.engine.canvas.height;\n\n this.windowRoot.resize(width, height);\n };\n\n private readonly pushInput = (event: InputEvent): void => {\n if (!event.isAccepted()) {\n this.windowRoot.pushInput(event);\n }\n };\n\n private readonly onCanvasBlur = (): void => {\n this.windowRoot.onCanvasBlur();\n };\n\n constructor (engine: Engine) {\n super(engine);\n this.windowRoot = new WindowRootControl(engine);\n engine.on('update', this.updateWindowRoot);\n engine.on('postrender', this.renderWindowRoot);\n engine.on('resize', this.resizeWindowRoot);\n engine.eventSystem.on('input', this.pushInput);\n engine.eventSystem.on('canvasBlur', this.onCanvasBlur);\n this.resizeWindowRoot();\n }\n\n override dispose (): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.engine.off('update', this.updateWindowRoot);\n this.engine.off('postrender', this.renderWindowRoot);\n this.engine.off('resize', this.resizeWindowRoot);\n this.engine.eventSystem.off('input', this.pushInput);\n this.engine.eventSystem.off('canvasBlur', this.onCanvasBlur);\n this.windowRoot.dispose();\n super.dispose();\n }\n}\n","import { Plugin } from '@galacean/effects';\nimport type { Composition, Engine } from '@galacean/effects';\nimport { GUIWindowComponent } from '../components/gui-window-component';\nimport { UICanvas } from '../components/ui-canvas';\n\nexport class GUIPlugin extends Plugin {\n override order = 0;\n override name = 'gui';\n\n override onEngineCreated (engine: Engine): void {\n engine.root.addComponent(GUIWindowComponent);\n }\n\n override onCompositionCreating (composition: Composition): void {\n composition.sceneRoot.addComponent(UICanvas);\n }\n}\n","const EPSILON = 1e-7;\n\nexport function assertFinite (name: string, value: number): void {\n if (!Number.isFinite(value)) {\n throw new RangeError(`${name} must be finite.`);\n }\n}\n\nexport function assertEnumValue (name: string, value: number, maximum: number): void {\n if (!Number.isInteger(value) || value < 0 || value > maximum) {\n throw new RangeError(`Invalid ${name}.`);\n }\n}\n\nexport function sum (values: number[]): number {\n return values.reduce((total, value) => total + value, 0);\n}\n\n/**\n * Grows slots by weight, removing capped slots and redistributing their\n * unused share. Fractional pixels are accumulated and the last slot absorbs\n * the remaining numerical error when the supplied space is integral.\n */\nexport function growSlots (\n sizes: number[],\n ceilings: number[],\n weights: number[],\n extra: number,\n integerPixels: boolean,\n): number {\n let remaining = Math.max(0, extra);\n let active = sizes.map((_, index) => index).filter(index =>\n weights[index] > 0 && (ceilings[index] < 0 || sizes[index] < ceilings[index] - EPSILON));\n\n while (remaining > EPSILON && active.length > 0) {\n const totalWeight = active.reduce((total, index) => total + weights[index], 0);\n let capped = false;\n\n for (const index of active) {\n const ceiling = ceilings[index];\n const share = remaining * weights[index] / totalWeight;\n\n if (ceiling >= 0 && sizes[index] + share > ceiling + EPSILON) {\n const growth = Math.max(0, ceiling - sizes[index]);\n\n sizes[index] = ceiling;\n remaining -= growth;\n active = active.filter(value => value !== index);\n capped = true;\n\n break;\n }\n }\n if (capped) {\n continue;\n }\n\n let assigned = 0;\n let pixelError = 0;\n\n for (let activeIndex = 0; activeIndex < active.length; activeIndex++) {\n const index = active[activeIndex];\n let growth = activeIndex === active.length - 1\n ? remaining - assigned\n : remaining * weights[index] / totalWeight;\n\n if (integerPixels && activeIndex !== active.length - 1) {\n const exactGrowth = growth + pixelError;\n\n growth = Math.floor(exactGrowth);\n pixelError = exactGrowth - growth;\n }\n sizes[index] += growth;\n assigned += growth;\n }\n remaining = 0;\n }\n\n return remaining;\n}\n\nexport function alignmentOffset (alignment: number, remaining: number): number {\n if (alignment === 1) {\n return remaining / 2;\n }\n if (alignment === 2) {\n return remaining;\n }\n\n return 0;\n}\n","import { Component, effectsClass, getClass } from '@galacean/effects';\nimport type { Constructor, Engine, Transform, spec } from '@galacean/effects';\nimport { Container } from '../core/control';\nimport type { Control } from '../core/control';\nimport type { UIControlData } from '../core/data';\nimport { UICanvas } from './ui-canvas';\n\n/**\n * Scene-tree bridge for a GUI Control. The VFXItem tree owns lifecycle and\n * serialization while the Control tree owns layout, drawing and input.\n */\n@effectsClass('UIControl')\nexport class UIControl extends Component {\n static fallbackParentGetDelegate?: (control: UIControl) => Control | null;\n\n private controlNode: Control | null = null;\n private linkedItemTransform: Transform | null = null;\n private linkedControl: Control | null = null;\n private syncingLocation = false;\n private readonly itemTransformChanged = () => this.syncItemLocationToControl();\n private readonly controlLocationChanged = () => this.syncControlLocationToItem();\n\n constructor (engine: Engine) {\n super(engine);\n }\n\n get control (): Control | null {\n return this.controlNode;\n }\n\n set control (value: Control | null) {\n if (value === this.controlNode) {\n return;\n }\n this.attachControl(value);\n }\n\n get hasControl (): boolean {\n return this.controlNode !== null;\n }\n\n override onAwake (): void {\n this.syncControl();\n }\n\n override onEnable (): void {\n if (this.controlNode) {\n this.controlNode.visible = this.item.isActive;\n this.controlNode.enabled = true;\n }\n }\n\n override onDisable (): void {\n if (this.controlNode) {\n this.controlNode.visible = this.item.isActive;\n this.controlNode.enabled = false;\n }\n }\n\n override onParentChanged (): void {\n this.syncControl();\n }\n\n override onOrderInParentChanged (): void {\n this.syncControlOrder();\n }\n\n override onDestroy (): void {\n this.disposeControl();\n }\n\n override dispose (): void {\n this.disposeControl();\n super.dispose();\n }\n\n /** Unlinks the GUI object without disposing or modifying it. */\n unlinkControl (): void {\n if (this.controlNode) {\n this.unbindLocationSync();\n this.controlNode = null;\n }\n }\n\n private attachControl (value: Control | null): void {\n if (value?.owner && value.owner !== this && value.owner.control === value) {\n throw new Error('A Control can only be owned by one UIControl.');\n }\n this.disposeControl();\n if (value) {\n this.controlNode = value;\n value.owner = this;\n this.syncControl();\n }\n }\n\n private disposeControl (): void {\n const control = this.controlNode;\n\n if (control) {\n this.unbindLocationSync();\n this.controlNode = null;\n control.dispose();\n }\n }\n\n private syncControl (): void {\n const control = this.controlNode;\n\n if (!control || !this.item) {\n return;\n }\n this.syncingLocation = true;\n control.visible = this.item.isActive;\n control.enabled = this.enabled;\n control.parent = this.resolveParent();\n this.syncControlOrder();\n this.copyItemLocationToControl();\n this.syncingLocation = false;\n this.bindLocationSync();\n }\n\n private syncControlOrder (): void {\n if (this.controlNode && this.item) {\n this.controlNode.indexInParent = this.item.orderInParent;\n }\n }\n\n private resolveParent (): Control | null {\n const parentItem = this.item.parent;\n\n if (!parentItem) {\n return UIControl.fallbackParentGetDelegate?.(this) ?? null;\n }\n const uiControl = parentItem.getComponent(UIControl);\n\n if (uiControl?.control) {\n return uiControl.control;\n }\n const canvas = parentItem.getComponent(UICanvas);\n\n return canvas?.rootControl ?? UIControl.fallbackParentGetDelegate?.(this) ?? null;\n }\n\n private bindLocationSync (): void {\n const itemTransform = this.item.transform;\n const control = this.controlNode;\n\n if (this.linkedItemTransform === itemTransform && this.linkedControl === control) {\n return;\n }\n this.unbindLocationSync();\n if (control) {\n this.linkedItemTransform = itemTransform;\n this.linkedControl = control;\n itemTransform.on('changed', this.itemTransformChanged);\n control.on('locationChanged', this.controlLocationChanged);\n }\n }\n\n private unbindLocationSync (): void {\n this.linkedItemTransform?.off('changed', this.itemTransformChanged);\n this.linkedControl?.off('locationChanged', this.controlLocationChanged);\n this.linkedItemTransform = null;\n this.linkedControl = null;\n }\n\n private syncItemLocationToControl (): void {\n if (this.syncingLocation || !this.controlNode) {\n return;\n }\n this.syncingLocation = true;\n this.copyItemLocationToControl();\n this.syncingLocation = false;\n }\n\n private syncControlLocationToItem (): void {\n const control = this.controlNode;\n\n if (!this.syncingLocation && control && this.item) {\n const source = control.location;\n const target = this.item.transform.position;\n\n if (source.x !== target.x || source.y !== target.y) {\n this.syncingLocation = true;\n this.item.transform.setPosition(source.x, source.y, target.z);\n this.syncingLocation = false;\n }\n }\n }\n\n private copyItemLocationToControl (): void {\n const control = this.controlNode;\n\n // Automatic layout owns the local X/Y rectangle. Keep the reverse sync so\n // layout results still update the scene item transform.\n if (control && !(control.parent instanceof Container)) {\n const source = this.item.transform.position;\n const target = control.location;\n\n if (source.x !== target.x || source.y !== target.y) {\n control.setPosition(source.x, source.y);\n }\n }\n }\n\n override fromData (data: spec.ComponentData): void {\n super.fromData(data);\n const serialized = (data as UIControlData).control;\n const Constructor = getClass(serialized.type) as Constructor<Control>;\n const control = new Constructor(this.engine);\n\n this.attachControl(control);\n this.syncingLocation = true;\n control.fromData(serialized.data);\n this.syncingLocation = false;\n this.syncControlLocationToItem();\n }\n}\n","import {\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { Container, SizeFlags } from '../core/control';\nimport type { Control } from '../core/control';\nimport type { BoxContainerData } from '../data';\nimport { LayoutAlignment, Orientation } from './enums';\nimport { alignmentOffset, assertEnumValue, growSlots, sum } from './utils';\n\n/** Places visible children in a single horizontal or vertical row. */\nexport class BoxContainer extends Container {\n static override readonly themeType: string = 'BoxContainer';\n private _orientation = Orientation.Horizontal;\n private _alignment = LayoutAlignment.Begin;\n private _reverse = false;\n\n get orientation (): Orientation {\n return this._orientation;\n }\n\n set orientation (value: Orientation) {\n assertEnumValue('BoxContainer orientation', value, Orientation.Vertical);\n if (this._orientation !== value) {\n this._orientation = value;\n this.invalidateMeasurement();\n }\n }\n\n get alignment (): LayoutAlignment {\n return this._alignment;\n }\n\n set alignment (value: LayoutAlignment) {\n assertEnumValue('BoxContainer alignment', value, LayoutAlignment.End);\n if (this._alignment !== value) {\n this._alignment = value;\n this.queueSort();\n }\n }\n\n get reverse (): boolean {\n return this._reverse;\n }\n\n set reverse (value: boolean) {\n if (this._reverse !== value) {\n this._reverse = value;\n this.queueSort();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n protected override sortChildren (): void {\n const children = this.getLayoutChildren();\n\n if (this.reverse) {\n children.reverse();\n }\n if (children.length === 0) {\n return;\n }\n\n const horizontal = this.orientation === Orientation.Horizontal;\n const availableMain = horizontal ? this.size.x : this.size.y;\n const availableCross = horizontal ? this.size.y : this.size.x;\n const separation = this.getThemeConstant('separation');\n const gapTotal = separation * (children.length - 1);\n const slotSpace = availableMain - gapTotal;\n const minimums = children.map(child => this.getMainSize(child.getBoundMinimumSize()));\n const desired = children.map(child => this.getMainSize(child.getBoundDesiredSize()));\n const maximums = children.map(child => this.getMainSize(child.getCombinedMaximumSize()));\n const sizes = minimums.slice();\n const integerPixels = Number.isInteger(slotSpace)\n && minimums.every(Number.isInteger)\n && desired.every(Number.isInteger)\n && maximums.every(value => value < 0 || Number.isInteger(value));\n let extra = Math.max(0, slotSpace - sum(sizes));\n\n extra = growSlots(\n sizes,\n desired,\n desired.map((value, index) => Math.max(0, value - sizes[index])),\n extra,\n integerPixels,\n );\n growSlots(\n sizes,\n maximums,\n children.map(child => this.isMainExpanded(child) ? child.stretchRatio : 0),\n extra,\n integerPixels,\n );\n\n const usedMain = sum(sizes) + gapTotal;\n let cursor = alignmentOffset(this.alignment, Math.max(0, availableMain - usedMain));\n\n for (let index = 0; index < children.length; index++) {\n const mainSize = sizes[index];\n const position = horizontal ? new math.Vector2(cursor, 0) : new math.Vector2(0, cursor);\n const size = horizontal\n ? new math.Vector2(mainSize, availableCross)\n : new math.Vector2(availableCross, mainSize);\n\n this.fitChildInRect(children[index], { position, size });\n cursor += mainSize + separation;\n }\n }\n\n private measureChildren (useDesired: boolean): math.Vector2 {\n const children = this.getLayoutChildren();\n let main = 0;\n let cross = 0;\n\n for (const child of children) {\n const childSize = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n main += this.getMainSize(childSize);\n cross = Math.max(cross, this.getCrossSize(childSize));\n }\n if (children.length > 1) {\n main += this.getThemeConstant('separation') * (children.length - 1);\n }\n\n return this.orientation === Orientation.Horizontal\n ? new math.Vector2(main, cross)\n : new math.Vector2(cross, main);\n }\n\n private getMainSize (size: math.Vector2): number {\n return this.orientation === Orientation.Horizontal ? size.x : size.y;\n }\n\n private getCrossSize (size: math.Vector2): number {\n return this.orientation === Orientation.Horizontal ? size.y : size.x;\n }\n\n private isMainExpanded (child: Control): boolean {\n const flags = this.orientation === Orientation.Horizontal\n ? child.horizontalSizeFlags\n : child.verticalSizeFlags;\n\n return (flags & SizeFlags.Expand) !== 0;\n }\n\n private invalidateMeasurement (): void {\n this.updateMinimumSize();\n this.updateDesiredSize();\n this.queueSort();\n }\n\n override fromData (data: BoxContainerData): void {\n super.fromData(data);\n if (data.alignment !== undefined) {\n this.alignment = data.alignment;\n }\n if (data.reverse !== undefined) {\n this.reverse = data.reverse;\n }\n }\n}\n\n@effectsClass('HBoxContainer')\nexport class HBoxContainer extends BoxContainer {\n static override readonly themeType: string = 'HBoxContainer';\n constructor (engine: Engine) {\n super(engine);\n this.orientation = Orientation.Horizontal;\n }\n}\n\n@effectsClass('VBoxContainer')\nexport class VBoxContainer extends BoxContainer {\n static override readonly themeType: string = 'VBoxContainer';\n constructor (engine: Engine) {\n super(engine);\n this.orientation = Orientation.Vertical;\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport { Container, SizeFlags } from '../core/control';\nimport type { Control } from '../core/control';\nimport type { GridContainerData } from '../data';\nimport { growSlots, sum } from './utils';\n\ntype TrackMetrics = {\n minimum: number[],\n desired: number[],\n maximum: number[],\n expanded: boolean[],\n};\n\n/** Places visible children in LTR row-major cells without spanning. */\n@effectsClass('GridContainer')\nexport class GridContainer extends Container {\n static override readonly themeType: string = 'GridContainer';\n private _columns = 1;\n\n get columns (): number {\n return this._columns;\n }\n\n set columns (value: number) {\n if (!Number.isInteger(value) || value < 1) {\n throw new RangeError('GridContainer columns must be an integer greater than zero.');\n }\n if (this._columns !== value) {\n this._columns = value;\n this.invalidateMeasurement();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureGrid(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureGrid(true);\n }\n\n protected override sortChildren (): void {\n const children = this.getLayoutChildren();\n\n if (children.length === 0) {\n return;\n }\n const columnCount = Math.min(this.columns, children.length);\n const rowCount = Math.ceil(children.length / this.columns);\n const columnMetrics = this.collectTrackMetrics(children, columnCount, true);\n const rowMetrics = this.collectTrackMetrics(children, rowCount, false);\n const horizontalSeparation = this.getThemeConstant('horizontalSeparation');\n const verticalSeparation = this.getThemeConstant('verticalSeparation');\n const columnSizes = this.allocateTracks(columnMetrics, this.size.x, horizontalSeparation);\n const rowSizes = this.allocateTracks(rowMetrics, this.size.y, verticalSeparation);\n const columnPositions = this.getTrackPositions(columnSizes, horizontalSeparation);\n const rowPositions = this.getTrackPositions(rowSizes, verticalSeparation);\n\n for (let index = 0; index < children.length; index++) {\n const column = index % this.columns;\n const row = Math.floor(index / this.columns);\n\n this.fitChildInRect(children[index], {\n position: new math.Vector2(columnPositions[column], rowPositions[row]),\n size: new math.Vector2(columnSizes[column], rowSizes[row]),\n });\n }\n }\n\n private measureGrid (useDesired: boolean): math.Vector2 {\n const children = this.getLayoutChildren();\n\n if (children.length === 0) {\n return new math.Vector2();\n }\n const columnCount = Math.min(this.columns, children.length);\n const rowCount = Math.ceil(children.length / this.columns);\n const columns = this.collectTrackMetrics(children, columnCount, true);\n const rows = this.collectTrackMetrics(children, rowCount, false);\n const columnSizes = useDesired ? columns.desired : columns.minimum;\n const rowSizes = useDesired ? rows.desired : rows.minimum;\n\n return new math.Vector2(\n sum(columnSizes) + this.getThemeConstant('horizontalSeparation') * Math.max(0, columnCount - 1),\n sum(rowSizes) + this.getThemeConstant('verticalSeparation') * Math.max(0, rowCount - 1),\n );\n }\n\n private collectTrackMetrics (children: Control[], count: number, horizontal: boolean): TrackMetrics {\n const minimum = new Array<number>(count).fill(0);\n const desired = new Array<number>(count).fill(0);\n const maximum = new Array<number>(count).fill(0);\n const unbounded = new Array<boolean>(count).fill(false);\n const expanded = new Array<boolean>(count).fill(false);\n\n for (let index = 0; index < children.length; index++) {\n const child = children[index];\n const track = horizontal ? index % this.columns : Math.floor(index / this.columns);\n const childMinimum = child.getBoundMinimumSize();\n const childDesired = child.getBoundDesiredSize();\n const childMaximum = child.getCombinedMaximumSize();\n const minimumValue = horizontal ? childMinimum.x : childMinimum.y;\n const desiredValue = horizontal ? childDesired.x : childDesired.y;\n const maximumValue = horizontal ? childMaximum.x : childMaximum.y;\n const flags = horizontal ? child.horizontalSizeFlags : child.verticalSizeFlags;\n\n minimum[track] = Math.max(minimum[track], minimumValue);\n desired[track] = Math.max(desired[track], desiredValue);\n if (maximumValue < 0) {\n unbounded[track] = true;\n } else {\n maximum[track] = Math.max(maximum[track], maximumValue);\n }\n expanded[track] ||= (flags & SizeFlags.Expand) !== 0;\n }\n for (let index = 0; index < count; index++) {\n maximum[index] = unbounded[index] ? -1 : Math.max(minimum[index], maximum[index]);\n }\n\n return { minimum, desired, maximum, expanded };\n }\n\n private allocateTracks (metrics: TrackMetrics, available: number, separation: number): number[] {\n const sizes = metrics.minimum.slice();\n const trackSpace = available - separation * Math.max(0, sizes.length - 1);\n const integerPixels = Number.isInteger(trackSpace)\n && metrics.minimum.every(Number.isInteger)\n && metrics.desired.every(Number.isInteger)\n && metrics.maximum.every(value => value < 0 || Number.isInteger(value));\n let extra = Math.max(0, trackSpace - sum(sizes));\n\n extra = growSlots(\n sizes,\n metrics.desired,\n metrics.desired.map((value, index) => Math.max(0, value - sizes[index])),\n extra,\n integerPixels,\n );\n growSlots(\n sizes,\n metrics.maximum,\n metrics.expanded.map(value => value ? 1 : 0),\n extra,\n integerPixels,\n );\n\n return sizes;\n }\n\n private getTrackPositions (sizes: number[], separation: number): number[] {\n const positions: number[] = [];\n let cursor = 0;\n\n for (const size of sizes) {\n positions.push(cursor);\n cursor += size + separation;\n }\n\n return positions;\n }\n\n private invalidateMeasurement (): void {\n this.updateMinimumSize();\n this.updateDesiredSize();\n this.queueSort();\n }\n\n override fromData (data: GridContainerData): void {\n super.fromData(data);\n if (data.columns !== undefined) {\n this.columns = data.columns;\n }\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport { Container } from '../core/control';\n\n/** Adds four independent margins around every visible child. */\n@effectsClass('MarginContainer')\nexport class MarginContainer extends Container {\n static override readonly themeType: string = 'MarginContainer';\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n protected override sortChildren (): void {\n const left = this.getThemeConstant('marginLeft');\n const top = this.getThemeConstant('marginTop');\n const right = this.getThemeConstant('marginRight');\n const bottom = this.getThemeConstant('marginBottom');\n const rect = {\n position: new math.Vector2(left, top),\n size: new math.Vector2(\n this.size.x - left - right,\n this.size.y - top - bottom,\n ),\n };\n\n for (const child of this.getLayoutChildren()) {\n this.fitChildInRect(child, rect);\n }\n }\n\n private measureChildren (useDesired: boolean): math.Vector2 {\n let width = 0;\n let height = 0;\n\n for (const child of this.getLayoutChildren()) {\n const size = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n width = Math.max(width, size.x);\n height = Math.max(height, size.y);\n }\n\n const left = this.getThemeConstant('marginLeft');\n const top = this.getThemeConstant('marginTop');\n const right = this.getThemeConstant('marginRight');\n const bottom = this.getThemeConstant('marginBottom');\n\n return new math.Vector2(\n width + left + right,\n height + top + bottom,\n );\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport { Container } from '../core/control';\nimport type { CenterContainerData } from '../data';\n\n/** Centers children at their bound minimum size. */\n@effectsClass('CenterContainer')\nexport class CenterContainer extends Container {\n static override readonly themeType: string = 'CenterContainer';\n private _useTopLeft = false;\n\n get useTopLeft (): boolean {\n return this._useTopLeft;\n }\n\n set useTopLeft (value: boolean) {\n if (this._useTopLeft !== value) {\n this._useTopLeft = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n this.queueSort();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n protected override sortChildren (): void {\n for (const child of this.getLayoutChildren()) {\n const childSize = child.getBoundMinimumSize();\n const position = this.useTopLeft\n ? new math.Vector2(Math.floor(-childSize.x / 2), Math.floor(-childSize.y / 2))\n : new math.Vector2(\n Math.floor((this.size.x - childSize.x) / 2),\n Math.floor((this.size.y - childSize.y) / 2),\n );\n\n this.fitChildInRect(child, { position, size: childSize });\n }\n }\n\n private measureChildren (useDesired: boolean): math.Vector2 {\n if (this.useTopLeft) {\n return new math.Vector2();\n }\n let width = 0;\n let height = 0;\n\n for (const child of this.getLayoutChildren()) {\n const size = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n width = Math.max(width, size.x);\n height = Math.max(height, size.y);\n }\n\n return new math.Vector2(width, height);\n }\n\n override fromData (data: CenterContainerData): void {\n super.fromData(data);\n if (data.useTopLeft !== undefined) {\n this.useTopLeft = data.useTopLeft;\n }\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport { Container } from '../core/control';\nimport type { AspectRatioContainerData } from '../data';\nimport { AspectRatioStretchMode, LayoutAlignment } from './enums';\nimport { assertEnumValue, assertFinite } from './utils';\n\n/** Fits every visible child into the same rectangle with a fixed width/height ratio. */\n@effectsClass('AspectRatioContainer')\nexport class AspectRatioContainer extends Container {\n static override readonly themeType: string = 'AspectRatioContainer';\n private _ratio = 1;\n private _stretchMode = AspectRatioStretchMode.Fit;\n private _horizontalAlignment = LayoutAlignment.Center;\n private _verticalAlignment = LayoutAlignment.Center;\n\n get ratio (): number {\n return this._ratio;\n }\n\n set ratio (value: number) {\n assertFinite('AspectRatioContainer ratio', value);\n if (value <= 0) {\n throw new RangeError('AspectRatioContainer ratio must be greater than zero.');\n }\n if (this._ratio !== value) {\n this._ratio = value;\n this.queueSort();\n }\n }\n\n get stretchMode (): AspectRatioStretchMode {\n return this._stretchMode;\n }\n\n set stretchMode (value: AspectRatioStretchMode) {\n assertEnumValue('AspectRatioContainer stretchMode', value, AspectRatioStretchMode.Cover);\n if (this._stretchMode !== value) {\n this._stretchMode = value;\n this.queueSort();\n }\n }\n\n get horizontalAlignment (): LayoutAlignment {\n return this._horizontalAlignment;\n }\n\n set horizontalAlignment (value: LayoutAlignment) {\n assertEnumValue('AspectRatioContainer horizontalAlignment', value, LayoutAlignment.End);\n if (this._horizontalAlignment !== value) {\n this._horizontalAlignment = value;\n this.queueSort();\n }\n }\n\n get verticalAlignment (): LayoutAlignment {\n return this._verticalAlignment;\n }\n\n set verticalAlignment (value: LayoutAlignment) {\n assertEnumValue('AspectRatioContainer verticalAlignment', value, LayoutAlignment.End);\n if (this._verticalAlignment !== value) {\n this._verticalAlignment = value;\n this.queueSort();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n protected override sortChildren (): void {\n for (const child of this.getLayoutChildren()) {\n const childMinimum = child.getBoundMinimumSize();\n const baseWidth = this.ratio;\n const baseHeight = 1;\n let scale: number;\n\n switch (this.stretchMode) {\n case AspectRatioStretchMode.WidthControlsHeight:\n scale = this.size.x / baseWidth;\n\n break;\n case AspectRatioStretchMode.HeightControlsWidth:\n scale = this.size.y / baseHeight;\n\n break;\n case AspectRatioStretchMode.Cover:\n scale = Math.max(this.size.x / baseWidth, this.size.y / baseHeight);\n\n break;\n default:\n scale = Math.min(this.size.x / baseWidth, this.size.y / baseHeight);\n\n break;\n }\n const childSize = new math.Vector2(\n Math.max(childMinimum.x, baseWidth * scale),\n Math.max(childMinimum.y, baseHeight * scale),\n );\n const position = new math.Vector2(\n this.getAlignedOffset(this.horizontalAlignment, this.size.x - childSize.x),\n this.getAlignedOffset(this.verticalAlignment, this.size.y - childSize.y),\n );\n\n this.fitChildInRect(child, { position, size: childSize });\n }\n }\n\n private measureChildren (useDesired: boolean): math.Vector2 {\n let width = 0;\n let height = 0;\n\n for (const child of this.getLayoutChildren()) {\n const size = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n width = Math.max(width, size.x);\n height = Math.max(height, size.y);\n }\n\n return new math.Vector2(width, height);\n }\n\n private getAlignedOffset (alignment: LayoutAlignment, remaining: number): number {\n if (alignment === LayoutAlignment.Center) {\n return remaining / 2;\n }\n if (alignment === LayoutAlignment.End) {\n return remaining;\n }\n\n return 0;\n }\n\n override fromData (data: AspectRatioContainerData): void {\n super.fromData(data);\n if (data.ratio !== undefined) {\n this.ratio = data.ratio;\n }\n if (data.stretchMode !== undefined) {\n this.stretchMode = data.stretchMode;\n }\n if (data.horizontalAlignment !== undefined) {\n this.horizontalAlignment = data.horizontalAlignment;\n }\n if (data.verticalAlignment !== undefined) {\n this.verticalAlignment = data.verticalAlignment;\n }\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport { Container } from '../core/control';\n\n@effectsClass('PanelContainer')\nexport class PanelContainer extends Container {\n static override readonly themeType: string = 'PanelContainer';\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n override draw (): void {\n this.drawStyleBox(this.getThemeStyleBox('panel'), 0, 0, this.width, this.height);\n }\n\n protected override sortChildren (): void {\n const margins = this.getThemeStyleBox('panel').getContentMargins();\n const rect = {\n position: new math.Vector2(margins.left, margins.top),\n size: new math.Vector2(\n Math.max(0, this.width - margins.left - margins.right),\n Math.max(0, this.height - margins.top - margins.bottom),\n ),\n };\n\n for (const child of this.getLayoutChildren()) {\n this.fitChildInRect(child, rect);\n }\n }\n\n private measureChildren (desired: boolean): math.Vector2 {\n let width = 0;\n let height = 0;\n\n for (const child of this.getLayoutChildren()) {\n const size = desired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n width = Math.max(width, size.x);\n height = Math.max(height, size.y);\n }\n const margins = this.getThemeStyleBox('panel').getContentMargins();\n\n return new math.Vector2(\n width + margins.left + margins.right,\n height + margins.top + margins.bottom,\n );\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\n\nabstract class Separator extends Control {\n constructor (engine: Engine, private readonly vertical: boolean) {\n super(engine);\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n override getMinimumSize (): math.Vector2 {\n const minimum = this.getThemeStyleBox('separator').getMinimumSize();\n const thickness = Math.max(0, this.getThemeConstant('separation'));\n\n return this.vertical\n ? new math.Vector2(Math.max(minimum.x, thickness), minimum.y)\n : new math.Vector2(minimum.x, Math.max(minimum.y, thickness));\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.getMinimumSize();\n }\n\n override draw (): void {\n const minimum = this.getMinimumSize();\n const width = this.vertical ? minimum.x : this.width;\n const height = this.vertical ? this.height : minimum.y;\n\n this.drawStyleBox(\n this.getThemeStyleBox('separator'),\n (this.width - width) * 0.5,\n (this.height - height) * 0.5,\n width,\n height,\n );\n }\n}\n\n@effectsClass('HSeparator')\nexport class HSeparator extends Separator {\n static override readonly themeType: string = 'HSeparator';\n\n constructor (engine: Engine) {\n super(engine, false);\n }\n}\n\n@effectsClass('VSeparator')\nexport class VSeparator extends Separator {\n static override readonly themeType: string = 'VSeparator';\n\n constructor (engine: Engine) {\n super(engine, true);\n }\n}\n","import { EventEmitter } from '@galacean/effects';\nimport type { Engine, EventEmitterListener } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport type { ControlEvent } from '../core/control';\nimport type { RangeData } from '../data';\n\nexport type RangeEvent = ControlEvent & {\n changed: [],\n valueChanged: [value: number],\n};\n\ntype SharedRange = {\n value: number,\n minValue: number,\n maxValue: number,\n step: number,\n page: number,\n exponentialRatio: boolean,\n allowGreater: boolean,\n allowLesser: boolean,\n owners: Set<Range>,\n};\n\n/** Numeric value model shared by scroll bars and future slider controls. */\nexport class Range extends Control {\n static override readonly themeType: string = 'Range';\n private shared: SharedRange;\n private _rounded = false;\n private suppressSignals = false;\n private readonly rangeEventEmitter = new EventEmitter<RangeEvent>();\n\n constructor (engine: Engine) {\n super(engine);\n this.shared = createSharedRange();\n this.shared.owners.add(this);\n }\n\n get minValue (): number {\n return this.shared.minValue;\n }\n\n set minValue (value: number) {\n this.setMinValue(value);\n }\n\n get maxValue (): number {\n return this.shared.maxValue;\n }\n\n set maxValue (value: number) {\n this.setMaxValue(value);\n }\n\n get step (): number {\n return this.shared.step;\n }\n\n set step (value: number) {\n this.setStep(value);\n }\n\n get page (): number {\n return this.shared.page;\n }\n\n set page (value: number) {\n this.setPage(value);\n }\n\n get value (): number {\n return this.shared.value;\n }\n\n set value (value: number) {\n this.setValue(value);\n }\n\n get ratio (): number {\n return this.getAsRatio();\n }\n\n set ratio (value: number) {\n this.setAsRatio(value);\n }\n\n get exponentialRatio (): boolean {\n return this.shared.exponentialRatio;\n }\n\n set exponentialRatio (value: boolean) {\n this.shared.exponentialRatio = value;\n }\n\n get rounded (): boolean {\n return this._rounded;\n }\n\n set rounded (value: boolean) {\n this._rounded = value;\n }\n\n get allowGreater (): boolean {\n return this.shared.allowGreater;\n }\n\n set allowGreater (value: boolean) {\n this.shared.allowGreater = value;\n }\n\n get allowLesser (): boolean {\n return this.shared.allowLesser;\n }\n\n set allowLesser (value: boolean) {\n this.shared.allowLesser = value;\n }\n\n override on<E extends keyof RangeEvent> (\n eventName: E,\n listener: EventEmitterListener<RangeEvent[E]>,\n ): void {\n if (eventName === 'changed' || eventName === 'valueChanged') {\n this.rangeEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof RangeEvent> (\n eventName: E,\n listener: EventEmitterListener<RangeEvent[E]>,\n ): void {\n if (eventName === 'changed' || eventName === 'valueChanged') {\n this.rangeEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n setValue (value: number): void {\n const previous = this.shared.value;\n\n this.shared.value = this.calculateValue(value);\n if (!valuesEqual(previous, this.shared.value)) {\n this.notifyValueChanged();\n }\n }\n\n setValueNoSignal (value: number): void {\n const previous = this.shared.value;\n\n this.shared.value = this.calculateValue(value);\n if (!valuesEqual(previous, this.shared.value)) {\n for (const owner of this.shared.owners) {\n owner.valueChanged(this.shared.value);\n }\n }\n }\n\n setMinValue (value: number): void {\n assertFinite('Range minValue', value);\n if (this.shared.minValue === value) {\n return;\n }\n this.shared.minValue = value;\n this.shared.maxValue = Math.max(this.shared.maxValue, value);\n this.shared.page = clamp(this.shared.page, 0, this.shared.maxValue - value);\n this.setValue(this.shared.value);\n this.notifyChanged();\n }\n\n setMaxValue (value: number): void {\n assertFinite('Range maxValue', value);\n const maximum = Math.max(value, this.shared.minValue);\n\n if (this.shared.maxValue === maximum) {\n return;\n }\n this.shared.maxValue = maximum;\n this.shared.page = clamp(this.shared.page, 0, maximum - this.shared.minValue);\n this.setValue(this.shared.value);\n this.notifyChanged();\n }\n\n setStep (value: number): void {\n assertFinite('Range step', value);\n if (this.shared.step === value) {\n return;\n }\n this.shared.step = value;\n this.notifyChanged();\n }\n\n setPage (value: number): void {\n assertFinite('Range page', value);\n const page = clamp(value, 0, this.shared.maxValue - this.shared.minValue);\n\n if (this.shared.page === page) {\n return;\n }\n this.shared.page = page;\n this.setValue(this.shared.value);\n this.notifyChanged();\n }\n\n setAsRatio (ratio: number): void {\n assertFinite('Range ratio', ratio);\n const normalized = clamp(ratio, 0, 1);\n let value: number;\n\n if (this.shared.exponentialRatio && this.shared.minValue >= 0 && this.shared.maxValue > 0) {\n const minimum = this.shared.minValue === 0 ? 0 : Math.log2(this.shared.minValue);\n const maximum = Math.log2(this.shared.maxValue);\n\n value = 2 ** (minimum + (maximum - minimum) * normalized);\n } else {\n const span = this.shared.maxValue - this.shared.minValue;\n\n value = this.shared.minValue + span * normalized;\n if (this.shared.step > 0) {\n value = this.shared.minValue + Math.round(span * normalized / this.shared.step) * this.shared.step;\n }\n }\n this.setValue(clamp(value, this.shared.minValue, this.shared.maxValue));\n }\n\n getAsRatio (): number {\n const span = this.shared.maxValue - this.shared.minValue;\n\n if (span === 0) {\n return 1;\n }\n const value = clamp(this.shared.value, this.shared.minValue, this.shared.maxValue);\n\n if (this.shared.exponentialRatio && this.shared.minValue >= 0 && this.shared.maxValue > 0) {\n if (value <= 0) {\n return 0;\n }\n const minimum = this.shared.minValue === 0 ? 0 : Math.log2(this.shared.minValue);\n const maximum = Math.log2(this.shared.maxValue);\n\n return clamp((Math.log2(value) - minimum) / (maximum - minimum), 0, 1);\n }\n\n return clamp((value - this.shared.minValue) / span, 0, 1);\n }\n\n share (range: Range): void {\n if (range === this) {\n return;\n }\n range.attachShared(this.shared);\n range.rangeEventEmitter.emit('changed');\n range.rangeEventEmitter.emit('valueChanged', range.value);\n }\n\n unshare (): void {\n const previous = this.shared;\n const shared = createSharedRange();\n\n shared.value = previous.value;\n shared.minValue = previous.minValue;\n shared.maxValue = previous.maxValue;\n shared.step = previous.step;\n shared.page = previous.page;\n shared.exponentialRatio = previous.exponentialRatio;\n shared.allowGreater = previous.allowGreater;\n shared.allowLesser = previous.allowLesser;\n this.attachShared(shared);\n }\n\n override dispose (): void {\n this.shared.owners.delete(this);\n super.dispose();\n }\n\n protected valueChanged (value: number): void {}\n\n private calculateValue (value: number): number {\n if (Number.isNaN(value)) {\n return value;\n }\n assertFinite('Range value', value);\n let calculated = value;\n\n if (this.shared.step > 0) {\n calculated = snapFrom(this.shared.minValue, calculated, this.shared.step);\n }\n if (this._rounded) {\n calculated = Math.round(calculated);\n }\n if (!this.shared.allowGreater) {\n calculated = Math.min(calculated, this.shared.maxValue - this.shared.page);\n }\n if (!this.shared.allowLesser) {\n calculated = Math.max(calculated, this.shared.minValue);\n }\n\n return calculated;\n }\n\n private attachShared (shared: SharedRange): void {\n if (this.shared === shared) {\n return;\n }\n this.shared.owners.delete(this);\n this.shared = shared;\n shared.owners.add(this);\n }\n\n private notifyValueChanged (): void {\n for (const owner of this.shared.owners) {\n owner.valueChanged(this.shared.value);\n if (!this.suppressSignals) {\n owner.rangeEventEmitter.emit('valueChanged', this.shared.value);\n }\n }\n }\n\n private notifyChanged (): void {\n for (const owner of this.shared.owners) {\n if (!this.suppressSignals) {\n owner.rangeEventEmitter.emit('changed');\n }\n }\n }\n\n override fromData (data: RangeData): void {\n this.suppressSignals = true;\n super.fromData(data);\n if (data.allowGreater !== undefined) {\n this.allowGreater = data.allowGreater;\n }\n if (data.allowLesser !== undefined) {\n this.allowLesser = data.allowLesser;\n }\n if (data.exponentialRatio !== undefined) {\n this.exponentialRatio = data.exponentialRatio;\n }\n if (data.rounded !== undefined) {\n this.rounded = data.rounded;\n }\n if (data.minValue !== undefined) {\n this.setMinValue(data.minValue);\n }\n if (data.maxValue !== undefined) {\n this.setMaxValue(data.maxValue);\n }\n if (data.step !== undefined) {\n this.setStep(data.step);\n }\n if (data.page !== undefined) {\n this.setPage(data.page);\n }\n if (data.value !== undefined) {\n this.setValueNoSignal(data.value);\n }\n this.suppressSignals = false;\n }\n}\n\nfunction createSharedRange (): SharedRange {\n return {\n value: 0,\n minValue: 0,\n maxValue: 100,\n step: 1,\n page: 0,\n exponentialRatio: false,\n allowGreater: false,\n allowLesser: false,\n owners: new Set(),\n };\n}\n\nfunction snapFrom (minimum: number, value: number, step: number): number {\n return Number((minimum + Math.round((value - minimum) / step) * step).toPrecision(15));\n}\n\nfunction valuesEqual (left: number, right: number): boolean {\n return left === right || (Number.isNaN(left) && Number.isNaN(right));\n}\n\nfunction clamp (value: number, minimum: number, maximum: number): number {\n return Math.min(maximum, Math.max(minimum, value));\n}\n\nfunction assertFinite (name: string, value: number): void {\n if (!Number.isFinite(value)) {\n throw new RangeError(`${name} must be finite.`);\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport { FocusMode } from '../core/enums';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n} from '@galacean/effects';\nimport { Orientation } from '../layout/enums';\nimport { Range } from './range';\nimport type { RangeEvent } from './range';\nimport type { ScrollBarData } from '../data';\n\nexport type ScrollBarEvent = RangeEvent & {\n scrolling: [],\n};\n\ntype Highlight = 'none' | 'decrement' | 'track' | 'increment';\n\ntype GrabberRect = {\n x: number,\n y: number,\n width: number,\n height: number,\n};\n\nconst PAGE_DIVISOR = 8;\n\n/** A horizontal or vertical range scroll bar. */\nexport class ScrollBar extends Range {\n static override readonly themeType: string = 'ScrollBar';\n static readonly pageDivisor = PAGE_DIVISOR;\n\n private readonly scrollBarEventEmitter = new EventEmitter<ScrollBarEvent>();\n private _orientation: Orientation;\n private _customStep = -1;\n private highlight: Highlight = 'none';\n private decrementActive = false;\n private incrementActive = false;\n private dragging = false;\n private dragPosition = 0;\n private dragRatio = 0;\n\n constructor (engine: Engine, orientation = Orientation.Vertical) {\n super(engine);\n\n this._orientation = orientation;\n this.step = 0;\n this.focusMode = FocusMode.Accessibility;\n }\n\n get orientation (): Orientation {\n return this._orientation;\n }\n\n set orientation (value: Orientation) {\n if (value !== Orientation.Horizontal && value !== Orientation.Vertical) {\n throw new RangeError('Invalid ScrollBar orientation.');\n }\n if (this._orientation !== value) {\n this._orientation = value;\n this.updateMinimumSize();\n }\n }\n\n get customStep (): number {\n return this._customStep;\n }\n\n set customStep (value: number) {\n if (!Number.isFinite(value)) {\n throw new RangeError('ScrollBar customStep must be finite.');\n }\n this._customStep = value;\n }\n\n override on<E extends keyof ScrollBarEvent> (\n eventName: E,\n listener: EventEmitterListener<ScrollBarEvent[E]>,\n ): void {\n if (eventName === 'scrolling') {\n this.scrollBarEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof ScrollBarEvent> (\n eventName: E,\n listener: EventEmitterListener<ScrollBarEvent[E]>,\n ): void {\n if (eventName === 'scrolling') {\n this.scrollBarEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n scroll (amount: number): void {\n this.scrollTo(this.value + amount);\n }\n\n scrollTo (position: number): void {\n const previous = this.value;\n\n this.setValue(position);\n if (previous !== this.value) {\n this.scrollBarEventEmitter.emit('scrolling');\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n const decrementSize = this.getButtonAxisSize(false);\n const incrementSize = this.getButtonAxisSize(true);\n const incrementCrossSize = this.getButtonCrossSize(true);\n const scrollMinimum = this.getThemeStyleBox('scroll').getMinimumSize();\n const grabberMinimum = this.getGrabberMinimumSize();\n\n return this.orientation === Orientation.Horizontal\n ? new math.Vector2(\n decrementSize + incrementSize + scrollMinimum.x + grabberMinimum,\n Math.max(incrementCrossSize, scrollMinimum.y) + this.getCrossStartPadding() + this.getCrossEndPadding(),\n )\n : new math.Vector2(\n Math.max(incrementCrossSize, scrollMinimum.x) + this.getCrossStartPadding() + this.getCrossEndPadding(),\n decrementSize + incrementSize + scrollMinimum.y + grabberMinimum,\n );\n }\n\n override draw (): void {\n const horizontal = this.orientation === Orientation.Horizontal;\n const axisSize = horizontal ? this.width : this.height;\n const decrementState = this.decrementActive\n ? 'Pressed'\n : this.highlight === 'decrement' ? 'Highlight' : '';\n const incrementState = this.incrementActive\n ? 'Pressed'\n : this.highlight === 'increment' ? 'Highlight' : '';\n const decrementSize = this.getButtonAxisSize(false, decrementState);\n const incrementSize = this.getButtonAxisSize(true, incrementState);\n const trackLength = Math.max(0, axisSize - decrementSize - incrementSize);\n const grabber = this.getGrabberRect();\n const grabberStyle = this.dragging\n ? 'grabberPressed'\n : this.highlight === 'track' ? 'grabberHighlight' : 'grabber';\n const scrollStyle = this.hasFocus(true) ? 'scrollFocus' : 'scroll';\n\n if (horizontal) {\n this.drawButtonIcon(false, decrementState, 0, 0);\n this.drawStyleBox(this.getThemeStyleBox(scrollStyle), decrementSize, 0, trackLength, this.height);\n this.drawButtonIcon(true, incrementState, axisSize - incrementSize, 0);\n } else {\n this.drawButtonIcon(false, decrementState, 0, 0);\n this.drawStyleBox(this.getThemeStyleBox(scrollStyle), 0, decrementSize, this.width, trackLength);\n this.drawButtonIcon(true, incrementState, 0, axisSize - incrementSize);\n }\n this.drawStyleBox(this.getThemeStyleBox(grabberStyle), grabber.x, grabber.y, grabber.width, grabber.height);\n }\n\n override onMouseEnter (location: math.Vector2): void {\n this.updateHighlight(this.getAxis(location));\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n const position = this.getAxis(event.position);\n\n if (this.dragging) {\n const area = this.getAreaSize();\n\n if (area > 0) {\n const previous = this.value;\n\n this.setAsRatio(this.dragRatio + (position - this.dragPosition) / area);\n if (previous !== this.value) {\n this.scrollBarEventEmitter.emit('scrolling');\n }\n }\n\n return;\n }\n this.updateHighlight(position);\n }\n\n override onMouseLeave (): void {\n if (!this.dragging) {\n this.highlight = 'none';\n }\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n const position = this.getAxis(event.position);\n const total = this.getAxisSize();\n const grabberOffset = this.getGrabberOffset();\n const grabberSize = this.getGrabberSize();\n const decrementSize = this.getButtonAxisSize(false);\n const incrementSize = this.getButtonAxisSize(true);\n const trackPosition = position - decrementSize - this.getTrackStartMargin();\n\n if (position < decrementSize) {\n this.decrementActive = true;\n this.scroll(-this.getIncrement());\n } else if (position > total - incrementSize) {\n this.incrementActive = true;\n this.scroll(this.getIncrement());\n } else if (trackPosition < grabberOffset) {\n this.scroll(-this.getPageIncrement());\n } else if (trackPosition < grabberOffset + grabberSize) {\n this.dragging = true;\n this.dragPosition = position;\n this.dragRatio = this.getAsRatio();\n } else {\n this.scroll(this.getPageIncrement());\n }\n event.accept();\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n this.decrementActive = false;\n this.incrementActive = false;\n this.dragging = false;\n this.updateHighlight(this.getAxis(event.position));\n }\n\n override onMouseWheel (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.WheelUp && event.buttonIndex !== MouseButton.WheelDown) {\n return;\n }\n const previous = this.value;\n const direction = event.buttonIndex === MouseButton.WheelUp ? -1 : 1;\n const wheelIncrement = this.page > 0\n ? this.page / PAGE_DIVISOR\n : (this.maxValue - this.minValue) / 16;\n const amount = Math.max(wheelIncrement * event.factor, Math.max(0, this.step));\n\n this.scroll(direction * amount);\n if (this.value !== previous) {\n event.accept();\n }\n }\n\n override onKeyDown (event: InputEventKey): void {\n let target: number | undefined;\n const increment = this.getIncrement();\n\n if ((this.orientation === Orientation.Horizontal && event.keycode === 'ArrowLeft') ||\n (this.orientation === Orientation.Vertical && event.keycode === 'ArrowUp')) {\n target = this.value - increment;\n } else if ((this.orientation === Orientation.Horizontal && event.keycode === 'ArrowRight') ||\n (this.orientation === Orientation.Vertical && event.keycode === 'ArrowDown')) {\n target = this.value + increment;\n } else if (event.keycode === 'Home') {\n target = this.minValue;\n } else if (event.keycode === 'End') {\n target = this.maxValue;\n }\n if (target !== undefined) {\n const previous = this.value;\n\n this.scrollTo(target);\n if (this.value !== previous) {\n event.accept();\n }\n }\n }\n\n override onScrollBegin (): void {\n this.decrementActive = false;\n this.incrementActive = false;\n this.dragging = false;\n }\n\n private getAxis (position: math.Vector2): number {\n return this.orientation === Orientation.Horizontal ? position.x : position.y;\n }\n\n private getAxisSize (): number {\n return this.orientation === Orientation.Horizontal ? this.width : this.height;\n }\n\n private getIncrement (): number {\n return this.customStep >= 0 ? this.customStep : this.step;\n }\n\n private getPageIncrement (): number {\n return this.page > 0 ? this.page : (this.maxValue - this.minValue) / 16;\n }\n\n private getTrackSize (): number {\n return Math.max(0, this.getAxisSize() - this.getButtonAxisSize(false) - this.getButtonAxisSize(true));\n }\n\n private getAreaSize (): number {\n const scrollMinimum = this.getThemeStyleBox('scroll').getMinimumSize();\n const scrollAxisMinimum = this.orientation === Orientation.Horizontal ? scrollMinimum.x : scrollMinimum.y;\n\n return Math.max(0, this.getTrackSize() - scrollAxisMinimum - this.getGrabberMinimumSize());\n }\n\n private getGrabberSize (): number {\n const range = this.maxValue - this.minValue;\n\n if (range <= 0) {\n return 0;\n }\n\n return Math.min(\n this.getTrackSize(),\n this.getGrabberMinimumSize() + Math.max(0, this.page) / range * this.getAreaSize(),\n );\n }\n\n private getGrabberMinimumSize (): number {\n const minimum = this.getThemeStyleBox('grabber').getMinimumSize();\n\n return this.orientation === Orientation.Horizontal ? minimum.x : minimum.y;\n }\n\n private getGrabberOffset (): number {\n return this.getAreaSize() * this.getAsRatio();\n }\n\n private getGrabberRect (): GrabberRect {\n const offset = this.getButtonAxisSize(false) + this.getTrackStartMargin() + this.getGrabberOffset();\n const size = this.getGrabberSize();\n const crossStart = this.getCrossStartPadding();\n const crossSize = Math.max(0, (this.orientation === Orientation.Horizontal ? this.height : this.width)\n - crossStart - this.getCrossEndPadding());\n\n return this.orientation === Orientation.Horizontal\n ? { x: offset, y: crossStart, width: size, height: crossSize }\n : { x: crossStart, y: offset, width: crossSize, height: size };\n }\n\n private getTrackStartMargin (): number {\n const margins = this.getThemeStyleBox('scroll').getContentMargins();\n\n return this.orientation === Orientation.Horizontal ? margins.left : margins.top;\n }\n\n private getCrossStartPadding (): number {\n return Math.max(0, this.getThemeConstant(\n this.orientation === Orientation.Horizontal ? 'paddingTop' : 'paddingLeft',\n ));\n }\n\n private getCrossEndPadding (): number {\n return Math.max(0, this.getThemeConstant(\n this.orientation === Orientation.Horizontal ? 'paddingBottom' : 'paddingRight',\n ));\n }\n\n private updateHighlight (position: number): void {\n const total = this.getAxisSize();\n const decrementSize = this.getButtonAxisSize(false);\n const incrementSize = this.getButtonAxisSize(true);\n\n if (position < 0 || position > total) {\n this.highlight = 'none';\n } else if (position < decrementSize) {\n this.highlight = 'decrement';\n } else if (position > total - incrementSize) {\n this.highlight = 'increment';\n } else {\n this.highlight = 'track';\n }\n }\n\n private drawButtonIcon (\n increment: boolean,\n state: '' | 'Highlight' | 'Pressed',\n x: number,\n y: number,\n ): void {\n const icon = this.getButtonIcon(increment, state);\n\n if (icon) {\n this.drawTexture(x, y, icon.width, icon.height, icon);\n }\n }\n\n private getButtonIcon (increment: boolean, state: '' | 'Highlight' | 'Pressed' = '') {\n const name = increment ? 'increment' : 'decrement';\n\n return this.getThemeIcon(`${name}${state}`) ?? this.getThemeIcon(name);\n }\n\n private getButtonAxisSize (increment: boolean, state: '' | 'Highlight' | 'Pressed' = ''): number {\n const icon = this.getButtonIcon(increment, state);\n\n return icon ? this.orientation === Orientation.Horizontal ? icon.width : icon.height : 0;\n }\n\n private getButtonCrossSize (increment: boolean): number {\n const icon = this.getButtonIcon(increment);\n\n return icon ? this.orientation === Orientation.Horizontal ? icon.height : icon.width : 0;\n }\n\n override fromData (data: ScrollBarData): void {\n super.fromData(data);\n if (data.customStep !== undefined) {\n this.customStep = data.customStep;\n }\n }\n}\n\n@effectsClass('HScrollBar')\nexport class HScrollBar extends ScrollBar {\n static override readonly themeType: string = 'HScrollBar';\n constructor (engine: Engine) {\n super(engine, Orientation.Horizontal);\n }\n}\n\n@effectsClass('VScrollBar')\nexport class VScrollBar extends ScrollBar {\n static override readonly themeType: string = 'VScrollBar';\n constructor (engine: Engine) {\n super(engine, Orientation.Vertical);\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventMouseButton,\n InputEventScreenDrag,\n InputEventScreenTouch,\n} from '@galacean/effects';\nimport { Container, SizeFlags } from '../core/control';\nimport type { Control, ControlEvent, RootControl } from '../core/control';\nimport { FocusMode } from '../core/enums';\nimport { ScrollMode } from './enums';\nimport { HScrollBar, ScrollBar, VScrollBar } from './scroll-bar';\nimport type { ScrollContainerData } from '../data';\n\nexport type ScrollContainerEvent = ControlEvent & {\n scrollStarted: [],\n scrollEnded: [],\n};\n\ntype ScrollLayout = {\n horizontalVisible: boolean,\n verticalVisible: boolean,\n horizontalReserved: boolean,\n verticalReserved: boolean,\n viewportWidth: number,\n viewportHeight: number,\n};\n\nconst INERTIA_DECELERATION = 1000;\n\n/** Clips and scrolls its content children using two internal Range scroll bars. */\n@effectsClass('ScrollContainer')\nexport class ScrollContainer extends Container {\n static override readonly themeType: string = 'ScrollContainer';\n private readonly scrollContainerEventEmitter = new EventEmitter<ScrollContainerEvent>();\n private readonly horizontalBar: HScrollBar;\n private readonly verticalBar: VScrollBar;\n private _horizontalScrollMode = ScrollMode.Auto;\n private _verticalScrollMode = ScrollMode.Auto;\n private _scrollHorizontalByDefault = false;\n private _deadzone = 0;\n private _followFocus = false;\n private focusRoot: RootControl | null = null;\n private touchIndex: number | null = null;\n private touchDecelerating = false;\n private beyondDeadzone = false;\n private readonly dragSpeed = new math.Vector2();\n private readonly dragAccum = new math.Vector2();\n private readonly dragFrom = new math.Vector2();\n private readonly lastDragAccum = new math.Vector2();\n private motionSampleTime = 0;\n private viewportWidth = 0;\n private viewportHeight = 0;\n\n private readonly scrollMoved = () => this.queueSort();\n private readonly controlStateChanged = () => {\n if (!this.visibleInHierarchy || !this.enabledInHierarchy) {\n this.cancelTouchDrag();\n }\n };\n private readonly focusOwnerChanged = (control: Control | null) => {\n if (this.followFocus && control && this.isContentDescendant(control)) {\n this.ensureControlVisible(control);\n }\n };\n\n constructor (engine: Engine) {\n super(engine);\n this.horizontalBar = new HScrollBar(engine);\n this.verticalBar = new VScrollBar(engine);\n this.horizontalBar.focusMode = FocusMode.None;\n this.verticalBar.focusMode = FocusMode.None;\n this.clipContents = true;\n this.addChild(this.horizontalBar);\n this.addChild(this.verticalBar);\n this.horizontalBar.on('valueChanged', this.scrollMoved);\n this.verticalBar.on('valueChanged', this.scrollMoved);\n this.on('visibilityChanged', this.controlStateChanged);\n this.on('enabledChanged', this.controlStateChanged);\n }\n\n get hScroll (): number {\n return this.horizontalBar.value;\n }\n\n set hScroll (value: number) {\n this.horizontalBar.setValue(value);\n this.cancelTouchDrag();\n }\n\n get vScroll (): number {\n return this.verticalBar.value;\n }\n\n set vScroll (value: number) {\n this.verticalBar.setValue(value);\n this.cancelTouchDrag();\n }\n\n get horizontalScrollMode (): ScrollMode {\n return this._horizontalScrollMode;\n }\n\n set horizontalScrollMode (value: ScrollMode) {\n assertScrollMode(value);\n if (this._horizontalScrollMode !== value) {\n this._horizontalScrollMode = value;\n this.invalidateScrollLayout();\n }\n }\n\n get verticalScrollMode (): ScrollMode {\n return this._verticalScrollMode;\n }\n\n set verticalScrollMode (value: ScrollMode) {\n assertScrollMode(value);\n if (this._verticalScrollMode !== value) {\n this._verticalScrollMode = value;\n this.invalidateScrollLayout();\n }\n }\n\n get horizontalCustomStep (): number {\n return this.horizontalBar.customStep;\n }\n\n set horizontalCustomStep (value: number) {\n this.horizontalBar.customStep = value;\n }\n\n get verticalCustomStep (): number {\n return this.verticalBar.customStep;\n }\n\n set verticalCustomStep (value: number) {\n this.verticalBar.customStep = value;\n }\n\n get scrollHorizontalByDefault (): boolean {\n return this._scrollHorizontalByDefault;\n }\n\n set scrollHorizontalByDefault (value: boolean) {\n this._scrollHorizontalByDefault = value;\n }\n\n get deadzone (): number {\n return this._deadzone;\n }\n\n set deadzone (value: number) {\n if (!Number.isFinite(value) || value < 0) {\n throw new RangeError('ScrollContainer deadzone must be a non-negative finite number.');\n }\n this._deadzone = value;\n }\n\n get followFocus (): boolean {\n return this._followFocus;\n }\n\n set followFocus (value: boolean) {\n this._followFocus = value;\n }\n\n override on<E extends keyof ScrollContainerEvent> (\n eventName: E,\n listener: EventEmitterListener<ScrollContainerEvent[E]>,\n ): void {\n if (eventName === 'scrollStarted' || eventName === 'scrollEnded') {\n this.scrollContainerEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof ScrollContainerEvent> (\n eventName: E,\n listener: EventEmitterListener<ScrollContainerEvent[E]>,\n ): void {\n if (eventName === 'scrollStarted' || eventName === 'scrollEnded') {\n this.scrollContainerEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n getHScrollBar (): HScrollBar {\n return this.horizontalBar;\n }\n\n getVScrollBar (): VScrollBar {\n return this.verticalBar;\n }\n\n override intersectsChildContent (child: Control, position: math.Vector2): boolean {\n if (child === this.horizontalBar || child === this.verticalBar) {\n return true;\n }\n const transform = this.getGlobalTransform2D().elements;\n const globalPosition = new math.Vector2(\n transform[0] * position.x + transform[3] * position.y + transform[6],\n transform[1] * position.x + transform[4] * position.y + transform[7],\n );\n\n if (this.verticalBar.visible && this.verticalBar.enabledInHierarchy &&\n this.verticalBar.hasPoint(this.verticalBar.makePositionLocal(globalPosition))) {\n return false;\n }\n if (this.horizontalBar.visible && this.horizontalBar.enabledInHierarchy &&\n this.horizontalBar.hasPoint(this.horizontalBar.makePositionLocal(globalPosition))) {\n return false;\n }\n\n return true;\n }\n\n ensureControlVisible (control: Control): void {\n if (!this.isContentDescendant(control)) {\n throw new Error('ScrollContainer can only reveal a descendant content control.');\n }\n const transform = control.getGlobalTransform2D().elements;\n const corners = [\n [0, 0],\n [control.width, 0],\n [0, control.height],\n [control.width, control.height],\n ];\n let left = Infinity;\n let top = Infinity;\n let right = -Infinity;\n let bottom = -Infinity;\n\n for (const corner of corners) {\n const global = new math.Vector2(\n transform[0] * corner[0] + transform[3] * corner[1] + transform[6],\n transform[1] * corner[0] + transform[4] * corner[1] + transform[7],\n );\n const local = this.makePositionLocal(global);\n\n left = Math.min(left, local.x);\n top = Math.min(top, local.y);\n right = Math.max(right, local.x);\n bottom = Math.max(bottom, local.y);\n }\n const horizontalDifference = Math.max(Math.min(left, 0), right - this.viewportWidth);\n const verticalDifference = Math.max(Math.min(top, 0), bottom - this.viewportHeight);\n\n this.horizontalBar.setValue(this.horizontalBar.value + horizontalDifference);\n this.verticalBar.setValue(this.verticalBar.value + verticalDifference);\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureContent(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureContent(true);\n }\n\n override onMouseWheel (event: InputEventMouseButton): void {\n const previousHorizontal = this.horizontalBar.value;\n const previousVertical = this.verticalBar.value;\n const horizontalEnabled = this.horizontalScrollMode !== ScrollMode.Disabled;\n const verticalEnabled = this.verticalScrollMode !== ScrollMode.Disabled;\n const swapAxes = this.scrollHorizontalByDefault !== event.shiftPressed;\n const verticalHidden = !this.verticalBar.visible && this.verticalScrollMode !== ScrollMode.ShowNever;\n const horizontalHidden = !this.horizontalBar.visible && this.horizontalScrollMode !== ScrollMode.ShowNever;\n const horizontalAmount = this.horizontalBar.page / ScrollBar.pageDivisor * event.factor;\n const verticalAmount = this.verticalBar.page / ScrollBar.pageDivisor * event.factor;\n\n if (event.buttonIndex === MouseButton.WheelUp) {\n if ((horizontalEnabled && swapAxes) || verticalHidden) {\n this.horizontalBar.scroll(-horizontalAmount);\n } else if (verticalEnabled) {\n this.verticalBar.scroll(-verticalAmount);\n }\n } else if (event.buttonIndex === MouseButton.WheelDown) {\n if ((horizontalEnabled && swapAxes) || verticalHidden) {\n this.horizontalBar.scroll(horizontalAmount);\n } else if (verticalEnabled) {\n this.verticalBar.scroll(verticalAmount);\n }\n } else if (event.buttonIndex === MouseButton.WheelLeft) {\n if ((verticalEnabled && swapAxes) || horizontalHidden) {\n this.verticalBar.scroll(-verticalAmount);\n } else if (horizontalEnabled) {\n this.horizontalBar.scroll(-horizontalAmount);\n }\n } else if (event.buttonIndex === MouseButton.WheelRight) {\n if ((verticalEnabled && swapAxes) || horizontalHidden) {\n this.verticalBar.scroll(verticalAmount);\n } else if (horizontalEnabled) {\n this.horizontalBar.scroll(horizontalAmount);\n }\n }\n if (previousHorizontal !== this.horizontalBar.value || previousVertical !== this.verticalBar.value) {\n event.accept();\n }\n }\n\n override onTouchDown (event: InputEventScreenTouch): void {\n if (this.touchIndex !== null) {\n this.cancelTouchDrag();\n }\n this.touchIndex = event.index;\n this.touchDecelerating = false;\n this.beyondDeadzone = false;\n this.dragSpeed.set(0, 0);\n this.dragAccum.set(0, 0);\n this.lastDragAccum.set(0, 0);\n this.dragFrom.set(this.horizontalBar.value, this.verticalBar.value);\n this.motionSampleTime = 0;\n }\n\n override onTouchMove (event: InputEventScreenDrag): void {\n if (this.touchIndex !== event.index || this.touchDecelerating) {\n return;\n }\n const previousHorizontal = this.horizontalBar.value;\n const previousVertical = this.verticalBar.value;\n\n this.dragAccum.x -= event.relative.x;\n this.dragAccum.y -= event.relative.y;\n const horizontalEnabled = this.horizontalScrollMode !== ScrollMode.Disabled;\n const verticalEnabled = this.verticalScrollMode !== ScrollMode.Disabled;\n const exceedsDeadzone = this.beyondDeadzone ||\n (horizontalEnabled && Math.abs(this.dragAccum.x) > this.deadzone) ||\n (verticalEnabled && Math.abs(this.dragAccum.y) > this.deadzone);\n\n if (exceedsDeadzone) {\n if (!this.beyondDeadzone) {\n this.beyondDeadzone = true;\n this.dragAccum.set(-event.relative.x, -event.relative.y);\n this.notifyContentScroll(true);\n this.scrollContainerEventEmitter.emit('scrollStarted');\n this.root?.cancelPointerPress(this, event.index);\n }\n if (horizontalEnabled) {\n this.horizontalBar.scrollTo(this.dragFrom.x + this.dragAccum.x);\n } else {\n this.dragAccum.x = 0;\n }\n if (verticalEnabled) {\n this.verticalBar.scrollTo(this.dragFrom.y + this.dragAccum.y);\n } else {\n this.dragAccum.y = 0;\n }\n }\n if (previousHorizontal !== this.horizontalBar.value || previousVertical !== this.verticalBar.value) {\n event.accept();\n }\n }\n\n override onTouchUp (event: InputEventScreenTouch): void {\n if (this.touchIndex !== event.index) {\n return;\n }\n if (event.canceled || (this.dragSpeed.x === 0 && this.dragSpeed.y === 0)) {\n this.cancelTouchDrag();\n } else {\n this.touchDecelerating = true;\n }\n }\n\n override update (deltaTime: number): void {\n const seconds = Math.max(0, deltaTime) / 1000;\n\n if (!this.visibleInHierarchy || !this.enabledInHierarchy) {\n this.cancelTouchDrag();\n } else if (this.touchIndex !== null) {\n if (this.touchDecelerating) {\n this.updateInertia(seconds);\n } else if (this.beyondDeadzone) {\n this.updateDragVelocity(seconds);\n }\n }\n super.update(deltaTime);\n }\n\n override dispose (): void {\n this.horizontalBar.off('valueChanged', this.scrollMoved);\n this.verticalBar.off('valueChanged', this.scrollMoved);\n this.off('visibilityChanged', this.controlStateChanged);\n this.off('enabledChanged', this.controlStateChanged);\n this.focusRoot?.off('guiFocusChanged', this.focusOwnerChanged);\n this.focusRoot = null;\n this.cancelTouchDrag();\n super.dispose();\n }\n\n protected override drawChildren (): void {\n const graphics = this.engine.graphics;\n\n if (this.clipContents) {\n graphics.pushClipRect(0, 0, this.viewportWidth, this.viewportHeight);\n }\n try {\n for (const child of this.children) {\n if (child !== this.horizontalBar && child !== this.verticalBar) {\n child.drawInternal();\n }\n }\n } finally {\n if (this.clipContents) {\n graphics.popClipRect();\n }\n }\n this.verticalBar.drawInternal();\n this.horizontalBar.drawInternal();\n }\n\n protected override getLayoutChildren (): Control[] {\n return super.getLayoutChildren().filter(child => child !== this.horizontalBar && child !== this.verticalBar);\n }\n\n protected override onRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {\n if (previousRoot === nextRoot) {\n return;\n }\n this.focusRoot?.off('guiFocusChanged', this.focusOwnerChanged);\n this.focusRoot = nextRoot;\n this.focusRoot?.on('guiFocusChanged', this.focusOwnerChanged);\n }\n\n protected override sortChildren (): void {\n const contentSize = this.getLargestContentSize(false);\n const layout = this.resolveLayout(contentSize);\n\n this.viewportWidth = layout.viewportWidth;\n this.viewportHeight = layout.viewportHeight;\n this.horizontalBar.visible = layout.horizontalVisible;\n this.verticalBar.visible = layout.verticalVisible;\n this.horizontalBar.setMaxValue(Math.max(contentSize.x, layout.viewportWidth));\n this.horizontalBar.setPage(layout.viewportWidth);\n this.verticalBar.setMaxValue(Math.max(contentSize.y, layout.viewportHeight));\n this.verticalBar.setPage(layout.viewportHeight);\n this.horizontalBar.setRect({\n position: new math.Vector2(0, this.height - this.horizontalBar.getBoundMinimumSize().y),\n size: new math.Vector2(layout.viewportWidth, this.horizontalBar.getBoundMinimumSize().y),\n });\n this.verticalBar.setRect({\n position: new math.Vector2(this.width - this.verticalBar.getBoundMinimumSize().x, 0),\n size: new math.Vector2(this.verticalBar.getBoundMinimumSize().x, layout.viewportHeight),\n });\n\n for (const child of this.getLayoutChildren()) {\n const minimum = child.getBoundMinimumSize();\n const maximum = child.getCombinedMaximumSize();\n let width = (child.horizontalSizeFlags & SizeFlags.Expand) !== 0\n ? Math.max(layout.viewportWidth, minimum.x)\n : minimum.x;\n let height = (child.verticalSizeFlags & SizeFlags.Expand) !== 0\n ? Math.max(layout.viewportHeight, minimum.y)\n : minimum.y;\n\n if (maximum.x >= 0) {\n width = Math.min(width, maximum.x);\n }\n if (maximum.y >= 0) {\n height = Math.min(height, maximum.y);\n }\n this.fitChildInRect(child, {\n position: new math.Vector2(\n Math.floor(-this.horizontalBar.value),\n Math.floor(-this.verticalBar.value),\n ),\n size: new math.Vector2(width, height),\n });\n }\n }\n\n private measureContent (useDesired: boolean): math.Vector2 {\n const content = this.getLargestContentSize(useDesired);\n const layout = this.resolveLayout(content);\n const maximum = this.getCombinedMaximumSize();\n const minimum = new math.Vector2();\n const horizontalConstrained = this.horizontalScrollMode === ScrollMode.Disabled ||\n this.horizontalScrollMode === ScrollMode.MaximizeFirst;\n const verticalConstrained = this.verticalScrollMode === ScrollMode.Disabled ||\n this.verticalScrollMode === ScrollMode.MaximizeFirst;\n\n if (this.horizontalScrollMode === ScrollMode.Disabled) {\n minimum.x = content.x;\n } else if (this.horizontalScrollMode === ScrollMode.MaximizeFirst) {\n minimum.x = maximum.x >= 0 ? Math.min(content.x, maximum.x) : content.x;\n }\n if (this.verticalScrollMode === ScrollMode.Disabled) {\n minimum.y = content.y;\n } else if (this.verticalScrollMode === ScrollMode.MaximizeFirst) {\n minimum.y = maximum.y >= 0 ? Math.min(content.y, maximum.y) : content.y;\n }\n if (horizontalConstrained && layout.verticalReserved) {\n minimum.x += this.verticalBar.getBoundMinimumSize().x;\n }\n if (verticalConstrained && layout.horizontalReserved) {\n minimum.y += this.horizontalBar.getBoundMinimumSize().y;\n }\n\n return minimum;\n }\n\n private getLargestContentSize (useDesired: boolean): math.Vector2 {\n const size = new math.Vector2();\n\n for (const child of this.getLayoutChildren()) {\n const childSize = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n size.x = Math.max(size.x, childSize.x);\n size.y = Math.max(size.y, childSize.y);\n }\n\n return size;\n }\n\n private resolveLayout (content: math.Vector2): ScrollLayout {\n const horizontalSize = this.horizontalBar.getBoundMinimumSize().y;\n const verticalSize = this.verticalBar.getBoundMinimumSize().x;\n let horizontalVisible = this.horizontalScrollMode === ScrollMode.ShowAlways;\n let verticalVisible = this.verticalScrollMode === ScrollMode.ShowAlways;\n let horizontalReserved = horizontalVisible || this.horizontalScrollMode === ScrollMode.Reserve;\n let verticalReserved = verticalVisible || this.verticalScrollMode === ScrollMode.Reserve;\n\n for (let index = 0; index < 4; index++) {\n const viewportWidth = Math.max(0, this.width - (verticalReserved ? verticalSize : 0));\n const viewportHeight = Math.max(0, this.height - (horizontalReserved ? horizontalSize : 0));\n\n horizontalVisible = shouldShowBar(this.horizontalScrollMode, content.x, viewportWidth);\n verticalVisible = shouldShowBar(this.verticalScrollMode, content.y, viewportHeight);\n const nextHorizontalReserved = horizontalVisible || this.horizontalScrollMode === ScrollMode.Reserve;\n const nextVerticalReserved = verticalVisible || this.verticalScrollMode === ScrollMode.Reserve;\n\n if (horizontalReserved === nextHorizontalReserved && verticalReserved === nextVerticalReserved) {\n break;\n }\n horizontalReserved = nextHorizontalReserved;\n verticalReserved = nextVerticalReserved;\n }\n\n return {\n horizontalVisible,\n verticalVisible,\n horizontalReserved,\n verticalReserved,\n viewportWidth: Math.max(0, this.width - (verticalReserved ? verticalSize : 0)),\n viewportHeight: Math.max(0, this.height - (horizontalReserved ? horizontalSize : 0)),\n };\n }\n\n private invalidateScrollLayout (): void {\n this.updateMinimumSize();\n this.updateDesiredSize();\n this.queueSort();\n }\n\n private isContentDescendant (control: Control): boolean {\n let current: Control | null = control;\n\n while (current && current.parent !== this) {\n current = current.parent;\n }\n\n return !!current && current !== this.horizontalBar && current !== this.verticalBar && current.parent === this;\n }\n\n private notifyContentScroll (begin: boolean): void {\n const notify = (control: Control) => {\n if (begin) {\n control.onScrollBegin();\n } else {\n control.onScrollEnd();\n }\n for (const child of control.children) {\n notify(child);\n }\n };\n\n for (const child of this.getLayoutChildren()) {\n notify(child);\n }\n }\n\n private updateDragVelocity (seconds: number): void {\n if (seconds <= 0) {\n return;\n }\n this.motionSampleTime += seconds;\n if (this.motionSampleTime >= 0.1 || (this.dragSpeed.x === 0 && this.dragSpeed.y === 0)) {\n this.dragSpeed.set(\n (this.dragAccum.x - this.lastDragAccum.x) / this.motionSampleTime,\n (this.dragAccum.y - this.lastDragAccum.y) / this.motionSampleTime,\n );\n this.lastDragAccum.copyFrom(this.dragAccum);\n this.motionSampleTime = 0;\n }\n }\n\n private updateInertia (seconds: number): void {\n if (seconds <= 0) {\n return;\n }\n const previousHorizontal = this.horizontalBar.value;\n const previousVertical = this.verticalBar.value;\n\n if (this.horizontalScrollMode !== ScrollMode.Disabled) {\n this.horizontalBar.scrollTo(previousHorizontal + this.dragSpeed.x * seconds);\n } else {\n this.dragSpeed.x = 0;\n }\n if (this.verticalScrollMode !== ScrollMode.Disabled) {\n this.verticalBar.scrollTo(previousVertical + this.dragSpeed.y * seconds);\n } else {\n this.dragSpeed.y = 0;\n }\n if (this.horizontalBar.value === previousHorizontal && this.dragSpeed.x !== 0) {\n this.dragSpeed.x = 0;\n } else {\n this.dragSpeed.x = decelerate(this.dragSpeed.x, INERTIA_DECELERATION * seconds);\n }\n if (this.verticalBar.value === previousVertical && this.dragSpeed.y !== 0) {\n this.dragSpeed.y = 0;\n } else {\n this.dragSpeed.y = decelerate(this.dragSpeed.y, INERTIA_DECELERATION * seconds);\n }\n if (this.dragSpeed.x === 0 && this.dragSpeed.y === 0) {\n this.cancelTouchDrag();\n }\n }\n\n private cancelTouchDrag (): void {\n const notifyEnd = this.beyondDeadzone;\n\n this.touchIndex = null;\n this.touchDecelerating = false;\n this.beyondDeadzone = false;\n this.dragSpeed.set(0, 0);\n this.dragAccum.set(0, 0);\n this.dragFrom.set(0, 0);\n this.lastDragAccum.set(0, 0);\n this.motionSampleTime = 0;\n if (notifyEnd) {\n this.notifyContentScroll(false);\n this.scrollContainerEventEmitter.emit('scrollEnded');\n }\n }\n\n override fromData (data: ScrollContainerData): void {\n super.fromData(data);\n if (data.horizontalScrollMode !== undefined) {\n this.horizontalScrollMode = data.horizontalScrollMode;\n }\n if (data.verticalScrollMode !== undefined) {\n this.verticalScrollMode = data.verticalScrollMode;\n }\n if (data.horizontalCustomStep !== undefined) {\n this.horizontalCustomStep = data.horizontalCustomStep;\n }\n if (data.verticalCustomStep !== undefined) {\n this.verticalCustomStep = data.verticalCustomStep;\n }\n if (data.scrollHorizontalByDefault !== undefined) {\n this.scrollHorizontalByDefault = data.scrollHorizontalByDefault;\n }\n if (data.deadzone !== undefined) {\n this.deadzone = data.deadzone;\n }\n if (data.followFocus !== undefined) {\n this.followFocus = data.followFocus;\n }\n if (data.hScroll !== undefined) {\n this.horizontalBar.setValueNoSignal(data.hScroll);\n }\n if (data.vScroll !== undefined) {\n this.verticalBar.setValueNoSignal(data.vScroll);\n }\n }\n}\n\nfunction shouldShowBar (mode: ScrollMode, contentSize: number, viewportSize: number): boolean {\n if (mode === ScrollMode.ShowAlways) {\n return true;\n }\n if (mode === ScrollMode.Auto || mode === ScrollMode.Reserve || mode === ScrollMode.MaximizeFirst) {\n return contentSize > viewportSize;\n }\n\n return false;\n}\n\nfunction decelerate (value: number, amount: number): number {\n if (Math.abs(value) <= amount) {\n return 0;\n }\n\n return value - Math.sign(value) * amount;\n}\n\nfunction assertScrollMode (value: ScrollMode): void {\n if (!Number.isInteger(value) || value < ScrollMode.Disabled || value > ScrollMode.MaximizeFirst) {\n throw new RangeError('Invalid ScrollContainer scroll mode.');\n }\n}\n","import {\n math,\n} from '@galacean/effects';\nimport {\n StyleBoxEmpty,\n StyleBoxFlat,\n ThemeItemType,\n ThemeRegistry,\n} from '../core/theme';\nimport type { StyleBox, ThemeItemDefinitions } from '../core/theme';\n\nconst palette = {\n text: new math.Color(0.92, 0.94, 0.98, 1),\n disabledText: new math.Color(0.55, 0.58, 0.64, 1),\n panel: new math.Color(0.10, 0.12, 0.16, 0.96),\n border: new math.Color(0.28, 0.32, 0.40, 1),\n normal: new math.Color(0.22, 0.25, 0.31, 1),\n hover: new math.Color(0.30, 0.34, 0.42, 1),\n pressed: new math.Color(0.16, 0.19, 0.25, 1),\n disabled: new math.Color(0.16, 0.18, 0.22, 0.75),\n accent: new math.Color(0.25, 0.58, 0.92, 1),\n accentHover: new math.Color(0.34, 0.67, 1, 1),\n track: new math.Color(0.12, 0.14, 0.18, 0.82),\n clear: new math.Color(0, 0, 0, 0),\n white: new math.Color(1, 1, 1, 1),\n};\n\nfunction flat (\n background: math.Color,\n border = palette.clear,\n borderWidth = 0,\n contentHorizontal = 0,\n contentVertical = 0,\n): StyleBoxFlat {\n const style = new StyleBoxFlat();\n\n style.setBackgroundColor(background);\n style.setBorderColor(border);\n style.setBorderWidths(borderWidth, borderWidth, borderWidth, borderWidth);\n style.setContentMargins(contentHorizontal, contentVertical, contentHorizontal, contentVertical);\n\n return style;\n}\n\nfunction empty (contentHorizontal = 0, contentVertical = 0): StyleBoxEmpty {\n const style = new StyleBoxEmpty();\n\n style.setContentMargins(contentHorizontal, contentVertical, contentHorizontal, contentVertical);\n\n return style;\n}\n\nfunction style (value: StyleBox): { type: ThemeItemType.StyleBox, defaultValue: StyleBox, affectsLayout: true } {\n return { type: ThemeItemType.StyleBox, defaultValue: value, affectsLayout: true };\n}\n\nfunction color (value: math.Color) {\n return { type: ThemeItemType.Color, defaultValue: value } as const;\n}\n\nfunction constant (value: number, affectsLayout = true) {\n return { type: ThemeItemType.Constant, defaultValue: value, affectsLayout } as const;\n}\n\nconst fontItems: ThemeItemDefinitions = {\n font: {\n type: ThemeItemType.Font,\n defaultValue: { family: 'sans-serif', weight: 'normal', style: 'normal' },\n affectsLayout: true,\n },\n fontSize: { type: ThemeItemType.FontSize, defaultValue: 14, affectsLayout: true },\n};\n\nThemeRegistry.registerType('Control', null, fontItems);\nThemeRegistry.registerType('Container', 'Control');\nThemeRegistry.registerType('Label', 'Control', {\n fontColor: color(palette.text),\n lineSpacing: constant(0),\n});\nThemeRegistry.registerType('BaseButton', 'Control');\nThemeRegistry.registerType('Button', 'BaseButton', {\n normal: style(flat(palette.normal, palette.border, 1, 8, 4)),\n hover: style(flat(palette.hover, palette.border, 1, 8, 4)),\n pressed: style(flat(palette.pressed, palette.border, 1, 8, 4)),\n hoverPressed: style(flat(palette.pressed, palette.accent, 1, 8, 4)),\n disabled: style(flat(palette.disabled, palette.border, 1, 8, 4)),\n focus: style(flat(palette.clear, palette.accentHover, 1)),\n fontColor: color(palette.text),\n fontFocusColor: color(palette.text),\n fontHoverColor: color(palette.text),\n fontPressedColor: color(palette.text),\n fontHoverPressedColor: color(palette.text),\n fontDisabledColor: color(palette.disabledText),\n iconTint: color(palette.white),\n iconFocusTint: color(palette.white),\n iconHoverTint: color(palette.white),\n iconPressedTint: color(palette.white),\n iconHoverPressedTint: color(palette.white),\n iconDisabledTint: color(palette.disabledText),\n icon: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n iconSeparation: constant(4),\n alignToLargestStyleBox: constant(0),\n});\nThemeRegistry.registerType('Checkbox', 'Button', {\n normal: style(empty(4, 4)),\n hover: style(empty(4, 4)),\n pressed: style(empty(4, 4)),\n hoverPressed: style(empty(4, 4)),\n disabled: style(empty(4, 4)),\n checked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n unchecked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n checkedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n uncheckedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n radioChecked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n radioUnchecked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n radioCheckedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n radioUncheckedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n checkedColor: color(palette.white),\n uncheckedColor: color(palette.white),\n checkedDisabledColor: color(palette.disabledText),\n markColor: color(palette.accent),\n markDisabledColor: color(palette.disabledText),\n markUncheckedColor: color(new math.Color(0.88, 0.88, 0.88, 0.2)),\n markUncheckedDisabledColor: color(new math.Color(0.5, 0.5, 0.5, 0.2)),\n markOutlineColor: color(palette.border),\n markSize: constant(16),\n markSeparation: constant(8),\n checkVOffset: constant(0),\n});\nThemeRegistry.registerType('CheckButton', 'Button', {\n normal: style(empty(6, 4)),\n hover: style(empty(6, 4)),\n pressed: style(empty(6, 4)),\n hoverPressed: style(empty(6, 4)),\n disabled: style(empty(6, 4)),\n checked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n unchecked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n checkedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n uncheckedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n buttonCheckedColor: color(palette.white),\n buttonUncheckedColor: color(palette.white),\n switchColor: color(palette.accent),\n switchDisabledColor: color(palette.disabledText),\n switchOffColor: color(palette.border),\n switchKnobColor: color(palette.text),\n switchWidth: constant(28),\n switchHeight: constant(14),\n switchSeparation: constant(6),\n checkVOffset: constant(0),\n});\nThemeRegistry.registerType('Panel', 'Control', {\n panel: style(flat(palette.panel, palette.border, 1)),\n});\nThemeRegistry.registerType('PanelContainer', 'Container', {\n panel: style(flat(palette.panel, palette.border, 1, 4, 4)),\n});\nThemeRegistry.registerType('Separator', 'Control', {\n separator: style(flat(palette.border)),\n separation: constant(1),\n});\nThemeRegistry.registerType('HSeparator', 'Separator');\nThemeRegistry.registerType('VSeparator', 'Separator');\nThemeRegistry.registerType('TextInput', 'Control', {\n normal: style(flat(palette.track, palette.border, 1, 6, 4)),\n readOnly: style(flat(palette.disabled, palette.border, 1, 6, 4)),\n focus: style(flat(palette.clear, palette.accentHover, 1)),\n fontColor: color(palette.text),\n fontReadOnlyColor: color(palette.disabledText),\n fontPlaceholderColor: color(palette.disabledText),\n selectionColor: color(new math.Color(palette.accent.r, palette.accent.g, palette.accent.b, 0.45)),\n caretColor: color(palette.text),\n caretWidth: constant(1, false),\n});\nThemeRegistry.registerType('LineEdit', 'TextInput');\nThemeRegistry.registerType('TextEdit', 'TextInput');\nThemeRegistry.registerType('Popup', 'PanelContainer', {\n panel: style(flat(palette.panel, palette.border, 1, 6, 6)),\n});\nThemeRegistry.registerType('PopupPanel', 'Popup');\nThemeRegistry.registerType('PopupMenu', 'Popup', {\n hover: style(flat(palette.hover)),\n separator: style(flat(palette.border)),\n fontColor: color(palette.text),\n fontDisabledColor: color(palette.disabledText),\n checkColor: color(palette.accent),\n itemHeight: constant(28),\n separatorHeight: constant(9),\n horizontalPadding: constant(8),\n iconWidth: constant(20),\n});\nThemeRegistry.registerType('MenuButton', 'Button');\nThemeRegistry.registerType('OptionButton', 'MenuButton', {\n arrow: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n arrowSize: constant(12),\n arrowMargin: constant(4),\n hSeparation: constant(4),\n modulateArrow: constant(1),\n});\nThemeRegistry.registerType('ColorPickerButton', 'Button', {\n swatchBorderColor: color(palette.border),\n});\nThemeRegistry.registerType('Range', 'Control');\nThemeRegistry.registerType('ProgressBar', 'Range', {\n background: style(flat(palette.track)),\n fill: style(flat(palette.accent)),\n fontColor: color(palette.text),\n});\nThemeRegistry.registerType('Slider', 'Range', {\n track: style(flat(palette.track)),\n fill: style(flat(palette.accent)),\n fillHighlight: style(flat(palette.accentHover)),\n grabber: style(flat(palette.normal, palette.border, 1)),\n grabberHighlight: style(flat(palette.accentHover, palette.border, 1)),\n grabberDisabled: style(flat(palette.disabled, palette.border, 1)),\n trackThickness: constant(4),\n grabberSize: constant(14),\n});\nThemeRegistry.registerType('HSlider', 'Slider');\nThemeRegistry.registerType('VSlider', 'Slider');\nThemeRegistry.registerType('ScrollBar', 'Range', {\n scroll: style(flat(palette.track)),\n scrollFocus: style(flat(palette.track, palette.accentHover, 1)),\n grabber: style(flat(palette.disabledText, palette.clear, 0, 4, 4)),\n grabberHighlight: style(flat(palette.accent, palette.clear, 0, 4, 4)),\n grabberPressed: style(flat(palette.accentHover, palette.clear, 0, 4, 4)),\n decrement: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n decrementHighlight: { type: ThemeItemType.Icon, defaultValue: null },\n decrementPressed: { type: ThemeItemType.Icon, defaultValue: null },\n increment: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n incrementHighlight: { type: ThemeItemType.Icon, defaultValue: null },\n incrementPressed: { type: ThemeItemType.Icon, defaultValue: null },\n paddingLeft: constant(0),\n paddingTop: constant(0),\n paddingRight: constant(0),\n paddingBottom: constant(0),\n});\nThemeRegistry.registerType('HScrollBar', 'ScrollBar', {\n scroll: style(flat(palette.track, palette.clear, 0, 0, 4)),\n});\nThemeRegistry.registerType('VScrollBar', 'ScrollBar', {\n scroll: style(flat(palette.track, palette.clear, 0, 4, 0)),\n});\nThemeRegistry.registerType('BoxContainer', 'Container', { separation: constant(0) });\nThemeRegistry.registerType('HBoxContainer', 'BoxContainer');\nThemeRegistry.registerType('VBoxContainer', 'BoxContainer');\nThemeRegistry.registerType('ColorPicker', 'VBoxContainer');\nThemeRegistry.registerType('GridContainer', 'Container', {\n horizontalSeparation: constant(0),\n verticalSeparation: constant(0),\n});\nThemeRegistry.registerType('MarginContainer', 'Container', {\n marginLeft: constant(0),\n marginTop: constant(0),\n marginRight: constant(0),\n marginBottom: constant(0),\n});\nThemeRegistry.registerType('CenterContainer', 'Container');\nThemeRegistry.registerType('AspectRatioContainer', 'Container');\nThemeRegistry.registerType('ScrollContainer', 'Container');\nThemeRegistry.registerType('ColorRect', 'Control');\nThemeRegistry.registerType('TextureRect', 'Control');\nThemeRegistry.registerType('NinePatchRect', 'Control');\n\n// Keep an explicit empty style available to themes that want to remove a layer.\nThemeRegistry.registerType('Control', null, {\n empty: style(StyleBoxEmpty.shared),\n});\n","import {\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine, TextMeasurement } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport type { LabelData } from '../data';\nimport { AutowrapMode, HorizontalAlignment, TextOverflow, VerticalAlignment } from './enums';\n\ntype TextLine = {\n text: string,\n measurement: TextMeasurement,\n};\n\ntype TextLayout = {\n lines: TextLine[],\n lineHeight: number,\n width: number,\n height: number,\n};\n\n@effectsClass('Label')\nexport class Label extends Control {\n static override readonly themeType: string = 'Label';\n private _text = '';\n private _horizontalAlignment = HorizontalAlignment.Left;\n private _verticalAlignment = VerticalAlignment.Top;\n private _autowrapMode = AutowrapMode.Off;\n private _textOverflow = TextOverflow.Visible;\n private layoutDirty = true;\n private layoutWidth = Number.NaN;\n private layout: TextLayout | null = null;\n\n constructor (engine: Engine, text = '') {\n super(engine);\n\n this._text = text;\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n get text (): string {\n return this._text;\n }\n\n set text (value: string) {\n if (this._text !== value) {\n this._text = value;\n this.invalidateTextLayout();\n }\n }\n\n get horizontalAlignment (): HorizontalAlignment {\n return this._horizontalAlignment;\n }\n\n set horizontalAlignment (value: HorizontalAlignment) {\n if (this._horizontalAlignment !== value) {\n this._horizontalAlignment = value;\n this.layoutDirty = true;\n }\n }\n\n get verticalAlignment (): VerticalAlignment {\n return this._verticalAlignment;\n }\n\n set verticalAlignment (value: VerticalAlignment) {\n if (this._verticalAlignment !== value) {\n this._verticalAlignment = value;\n this.layoutDirty = true;\n }\n }\n\n get autowrapMode (): AutowrapMode {\n return this._autowrapMode;\n }\n\n set autowrapMode (value: AutowrapMode) {\n if (this._autowrapMode !== value) {\n this._autowrapMode = value;\n this.invalidateTextLayout();\n }\n }\n\n get textOverflow (): TextOverflow {\n return this._textOverflow;\n }\n\n set textOverflow (value: TextOverflow) {\n if (this._textOverflow !== value) {\n this._textOverflow = value;\n this.layoutDirty = true;\n this.updateMinimumSize();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n const natural = this.createNaturalLayout();\n\n if (this.autowrapMode === AutowrapMode.Off) {\n return new math.Vector2(\n this.textOverflow === TextOverflow.Visible ? natural.width : 0,\n natural.height,\n );\n }\n\n const width = this.getMinimumLineWidth();\n const paragraphCount = Math.max(1, this._text.split('\\n').length);\n\n return new math.Vector2(\n width,\n natural.lineHeight * paragraphCount + this.getThemeConstant('lineSpacing') * Math.max(0, paragraphCount - 1),\n );\n }\n\n override getDesiredSize (): math.Vector2 {\n const layout = this.createNaturalLayout();\n\n return new math.Vector2(layout.width, layout.height);\n }\n\n override draw (): void {\n const layout = this.getTextLayout(this.width);\n const clipped = this.textOverflow !== TextOverflow.Visible;\n const gap = this.getVerticalGap(layout);\n let y = this.getTextStartY(layout, gap);\n\n if (clipped) {\n this.engine.graphics.pushClipRect(0, 0, this.width, this.height);\n }\n try {\n for (let i = 0; i < layout.lines.length; i++) {\n const source = layout.lines[i];\n const line = this.textOverflow === TextOverflow.Ellipsis\n ? this.ellipsize(source, this.width)\n : source;\n const fill = this.horizontalAlignment === HorizontalAlignment.Fill && i < layout.lines.length - 1;\n\n if (fill && countFillSpaces(line.text) > 0 && line.measurement.width < this.width) {\n this.drawFilledLine(line, y);\n } else {\n this.drawThemedText(this.getTextStartX(line.measurement.width), y, line.text);\n }\n y += layout.lineHeight + this.getThemeConstant('lineSpacing') + gap;\n }\n } finally {\n if (clipped) {\n this.engine.graphics.popClipRect();\n }\n }\n }\n\n private invalidateTextLayout (): void {\n this.layoutDirty = true;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n\n protected override onThemeChanged (affectsLayout: boolean): void {\n if (affectsLayout) {this.layoutDirty = true;}\n super.onThemeChanged(affectsLayout);\n }\n\n private measure (text: string): TextMeasurement {\n const font = this.getThemeFont('font');\n\n return this.measureText(text, this.getThemeFontSize('fontSize'), font.family, font.weight, font.style);\n }\n\n private getTextLayout (width: number): TextLayout {\n const constrainedWidth = this.autowrapMode === AutowrapMode.Off ? Number.POSITIVE_INFINITY : Math.max(0, width);\n\n if (this.layoutDirty || this.layoutWidth !== constrainedWidth || !this.layout) {\n this.layout = this.createLayout(constrainedWidth);\n this.layoutWidth = constrainedWidth;\n this.layoutDirty = false;\n }\n\n return this.layout;\n }\n\n private createNaturalLayout (): TextLayout {\n return this.createLayout(Number.POSITIVE_INFINITY);\n }\n\n private createLayout (width: number): TextLayout {\n const lines: TextLine[] = [];\n const paragraphs = this.text.split('\\n');\n const emptyMeasurement = this.measure('');\n\n for (const paragraph of paragraphs) {\n if (this.autowrapMode === AutowrapMode.Off || !Number.isFinite(width)) {\n lines.push({ text: paragraph, measurement: this.measure(paragraph) });\n } else {\n lines.push(...this.wrapParagraph(paragraph, width));\n }\n }\n if (lines.length === 0) {\n lines.push({ text: '', measurement: emptyMeasurement });\n }\n\n const lineHeight = lines[0]?.measurement.lineHeight ?? emptyMeasurement.lineHeight;\n const maximumWidth = lines.reduce((value, line) => Math.max(value, line.measurement.width), 0);\n const height = lineHeight * lines.length + this.getThemeConstant('lineSpacing') * Math.max(0, lines.length - 1);\n\n return { lines, lineHeight, width: maximumWidth, height };\n }\n\n private wrapParagraph (paragraph: string, width: number): TextLine[] {\n const characters = Array.from(paragraph);\n\n if (characters.length === 0) {\n return [{ text: '', measurement: this.measure('') }];\n }\n if (width <= 0) {\n return characters.map(text => ({ text, measurement: this.measure(text) }));\n }\n\n const measurement = this.measure(paragraph);\n const lines: TextLine[] = [];\n let start = 0;\n\n while (start < characters.length) {\n let cursorWidth = 0;\n let breakEnd = -1;\n let breakNext = -1;\n let index = start;\n\n for (; index < characters.length; index++) {\n const character = characters[index];\n const advance = measurement.advances[index] ?? 0;\n\n if (cursorWidth + advance > width && index > start) {\n break;\n }\n cursorWidth += advance;\n if (isBreakSpace(character)) {\n breakEnd = index;\n breakNext = index + 1;\n } else if (isCJKLike(character)) {\n breakEnd = index + 1;\n breakNext = index + 1;\n }\n if (cursorWidth > width) {\n index++;\n\n break;\n }\n }\n\n if (index >= characters.length) {\n const text = characters.slice(start).join('');\n\n lines.push({ text, measurement: this.measure(text) });\n\n break;\n }\n\n let end: number;\n let next: number;\n\n if (this.autowrapMode !== AutowrapMode.Arbitrary && breakEnd > start) {\n end = breakEnd;\n next = breakNext;\n } else if (this.autowrapMode === AutowrapMode.Word) {\n end = this.findWordEnd(characters, index);\n next = end;\n } else {\n end = Math.max(start + 1, index);\n next = end;\n }\n\n const text = characters.slice(start, end).join('').replace(/[\\t \\u00a0]+$/, '');\n\n lines.push({ text, measurement: this.measure(text) });\n start = skipBreakSpaces(characters, Math.max(next, start + 1));\n }\n\n return lines;\n }\n\n private findWordEnd (characters: string[], start: number): number {\n for (let i = Math.max(1, start); i < characters.length; i++) {\n if (isBreakSpace(characters[i]) || isCJKLike(characters[i])) {\n return isBreakSpace(characters[i]) ? i : i + 1;\n }\n }\n\n return characters.length;\n }\n\n private getMinimumLineWidth (): number {\n const paragraphs = this.text.split('\\n');\n let width = 0;\n\n if (this.autowrapMode === AutowrapMode.Arbitrary || this.autowrapMode === AutowrapMode.WordSmart) {\n for (const paragraph of paragraphs) {\n for (const character of Array.from(paragraph)) {\n width = Math.max(width, this.measure(character).width);\n }\n }\n\n return width;\n }\n\n for (const paragraph of paragraphs) {\n let segment = '';\n\n for (const character of Array.from(paragraph)) {\n if (isBreakSpace(character) || isCJKLike(character)) {\n width = Math.max(width, this.measure(segment).width, this.measure(character).width);\n segment = '';\n } else {\n segment += character;\n }\n }\n width = Math.max(width, this.measure(segment).width);\n }\n\n return width;\n }\n\n private getTextStartX (lineWidth: number): number {\n if (this.horizontalAlignment === HorizontalAlignment.Center) {\n return (this.width - lineWidth) * 0.5;\n }\n if (this.horizontalAlignment === HorizontalAlignment.Right) {\n return this.width - lineWidth;\n }\n\n return 0;\n }\n\n private getTextStartY (layout: TextLayout, gap: number): number {\n const height = layout.height + gap * Math.max(0, layout.lines.length - 1);\n\n if (this.verticalAlignment === VerticalAlignment.Center) {\n return (this.height - height) * 0.5;\n }\n if (this.verticalAlignment === VerticalAlignment.Bottom) {\n return this.height - height;\n }\n\n return 0;\n }\n\n private getVerticalGap (layout: TextLayout): number {\n if (this.verticalAlignment !== VerticalAlignment.Fill || layout.lines.length < 2) {\n return 0;\n }\n\n return Math.max(0, (this.height - layout.height) / (layout.lines.length - 1));\n }\n\n private ellipsize (line: TextLine, width: number): TextLine {\n if (line.measurement.width <= width) {\n return line;\n }\n\n const ellipsis = '…';\n const ellipsisMeasurement = this.measure(ellipsis);\n\n if (ellipsisMeasurement.width > width) {\n return { text: '', measurement: this.measure('') };\n }\n\n const characters = Array.from(line.text);\n let used = ellipsisMeasurement.width;\n let count = 0;\n\n for (; count < characters.length; count++) {\n const advance = line.measurement.advances[count] ?? 0;\n\n if (used + advance > width) {\n break;\n }\n used += advance;\n }\n\n const text = characters.slice(0, count).join('') + ellipsis;\n\n return { text, measurement: this.measure(text) };\n }\n\n private drawFilledLine (line: TextLine, y: number): void {\n const characters = Array.from(line.text);\n const spaces = countFillSpaces(line.text);\n const extra = spaces > 0 ? (this.width - line.measurement.width) / spaces : 0;\n let x = 0;\n\n for (let i = 0; i < characters.length; i++) {\n const character = characters[i];\n\n this.drawThemedText(x, y, character);\n x += line.measurement.advances[i] ?? 0;\n if (isBreakSpace(character)) {\n x += extra;\n }\n }\n }\n\n private drawThemedText (x: number, y: number, text: string): void {\n const font = this.getThemeFont('font');\n\n this.drawText(\n x,\n y,\n text,\n this.getThemeFontSize('fontSize'),\n this.getThemeColor('fontColor'),\n font.family,\n font.weight,\n font.style,\n );\n }\n\n override fromData (data: LabelData): void {\n super.fromData(data);\n if (data.text !== undefined) {\n this.text = data.text;\n }\n if (data.horizontalAlignment !== undefined) {\n this.horizontalAlignment = data.horizontalAlignment;\n }\n if (data.verticalAlignment !== undefined) {\n this.verticalAlignment = data.verticalAlignment;\n }\n if (data.autowrapMode !== undefined) {\n this.autowrapMode = data.autowrapMode;\n }\n if (data.textOverflow !== undefined) {\n this.textOverflow = data.textOverflow;\n }\n }\n}\n\nfunction isBreakSpace (character: string): boolean {\n return character === ' ' || character === '\\t' || character === '\\u00a0';\n}\n\nfunction isCJKLike (character: string): boolean {\n const codePoint = character.codePointAt(0) ?? 0;\n\n return (codePoint >= 0x3400 && codePoint <= 0x4dbf)\n || (codePoint >= 0x4e00 && codePoint <= 0x9fff)\n || (codePoint >= 0xf900 && codePoint <= 0xfaff)\n || (codePoint >= 0x20000 && codePoint <= 0x2fa1f)\n || (codePoint >= 0x3040 && codePoint <= 0x30ff)\n || (codePoint >= 0xac00 && codePoint <= 0xd7af);\n}\n\nfunction skipBreakSpaces (characters: string[], start: number): number {\n let index = start;\n\n while (index < characters.length && isBreakSpace(characters[index])) {\n index++;\n }\n\n return index;\n}\n\nfunction countFillSpaces (text: string): number {\n return Array.from(text).reduce((count, character) => count + (isBreakSpace(character) ? 1 : 0), 0);\n}\n","import {\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine, Texture, TextureRegion } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport type { TextureRectData } from '../data';\nimport { TextureExpandMode, TextureStretchMode } from './enums';\n\nconst FULL_REGION: TextureRegion = { u0: 0, v0: 0, u1: 1, v1: 1 };\n\n@effectsClass('TextureRect')\nexport class TextureRect extends Control {\n static override readonly themeType: string = 'TextureRect';\n private _texture: Texture | null = null;\n private _expandMode = TextureExpandMode.KeepSize;\n private _stretchMode = TextureStretchMode.Scale;\n\n flipH = false;\n flipV = false;\n tint = new math.Color(1, 1, 1, 1);\n\n constructor (engine: Engine, texture: Texture | null = null) {\n super(engine);\n this._texture = texture;\n this.mouseFilter = MouseFilter.Ignore;\n this.on('sizeChanged', () => this.controlSizeChanged());\n }\n\n get texture (): Texture | null {\n return this._texture;\n }\n\n set texture (value: Texture | null) {\n if (this._texture !== value) {\n this._texture = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n get expandMode (): TextureExpandMode {\n return this._expandMode;\n }\n\n set expandMode (value: TextureExpandMode) {\n if (this._expandMode !== value) {\n this._expandMode = value;\n this.updateMinimumSize();\n }\n }\n\n get stretchMode (): TextureStretchMode {\n return this._stretchMode;\n }\n\n set stretchMode (value: TextureStretchMode) {\n this._stretchMode = value;\n }\n\n override getMinimumSize (): math.Vector2 {\n const width = this.texture?.width ?? 0;\n const height = this.texture?.height ?? 0;\n\n switch (this.expandMode) {\n case TextureExpandMode.KeepSize:\n return new math.Vector2(width, height);\n case TextureExpandMode.IgnoreSize:\n return new math.Vector2();\n case TextureExpandMode.FitWidth:\n return new math.Vector2(height, 0);\n case TextureExpandMode.FitWidthProportional:\n return new math.Vector2(height > 0 ? this.height * width / height : 0, 0);\n case TextureExpandMode.FitHeight:\n return new math.Vector2(0, width);\n case TextureExpandMode.FitHeightProportional:\n return new math.Vector2(0, width > 0 ? this.width * height / width : 0);\n default:\n return new math.Vector2();\n }\n }\n\n override getDesiredSize (): math.Vector2 {\n return new math.Vector2(this.texture?.width ?? 0, this.texture?.height ?? 0);\n }\n\n override draw (): void {\n const texture = this.texture;\n\n if (!texture || texture.width <= 0 || texture.height <= 0 || this.width <= 0 || this.height <= 0) {\n return;\n }\n\n switch (this.stretchMode) {\n case TextureStretchMode.Scale:\n this.drawRegion(0, 0, this.width, this.height, FULL_REGION);\n\n break;\n case TextureStretchMode.Tile:\n this.drawTiled(texture.width, texture.height);\n\n break;\n case TextureStretchMode.Keep:\n this.drawRegion(0, 0, texture.width, texture.height, FULL_REGION);\n\n break;\n case TextureStretchMode.KeepCentered:\n this.drawRegion(\n (this.width - texture.width) * 0.5, (this.height - texture.height) * 0.5,\n texture.width, texture.height, FULL_REGION,\n );\n\n break;\n case TextureStretchMode.KeepAspect:\n this.drawAspect(false);\n\n break;\n case TextureStretchMode.KeepAspectCentered:\n this.drawAspect(true);\n\n break;\n case TextureStretchMode.KeepAspectCovered:\n this.drawCovered();\n\n break;\n }\n }\n\n private drawAspect (centered: boolean): void {\n const texture = this.texture;\n\n if (!texture) {\n return;\n }\n const scale = Math.min(this.width / texture.width, this.height / texture.height);\n const width = texture.width * scale;\n const height = texture.height * scale;\n const x = centered ? (this.width - width) * 0.5 : 0;\n const y = centered ? (this.height - height) * 0.5 : 0;\n\n this.drawRegion(x, y, width, height, FULL_REGION);\n }\n\n private drawCovered (): void {\n const texture = this.texture;\n\n if (!texture) {\n return;\n }\n const sourceRatio = texture.width / texture.height;\n const destinationRatio = this.width / this.height;\n let region = FULL_REGION;\n\n if (sourceRatio > destinationRatio) {\n const visible = destinationRatio / sourceRatio;\n const margin = (1 - visible) * 0.5;\n\n region = { u0: margin, v0: 0, u1: 1 - margin, v1: 1 };\n } else if (sourceRatio < destinationRatio) {\n const visible = sourceRatio / destinationRatio;\n const margin = (1 - visible) * 0.5;\n\n region = { u0: 0, v0: margin, u1: 1, v1: 1 - margin };\n }\n this.drawRegion(0, 0, this.width, this.height, region);\n }\n\n private drawTiled (tileWidth: number, tileHeight: number): void {\n for (let y = 0; y < this.height; y += tileHeight) {\n const height = Math.min(tileHeight, this.height - y);\n const verticalRatio = height / tileHeight;\n\n for (let x = 0; x < this.width; x += tileWidth) {\n const width = Math.min(tileWidth, this.width - x);\n const horizontalRatio = width / tileWidth;\n\n this.drawRegion(x, y, width, height, {\n u0: 0,\n v0: 1 - verticalRatio,\n u1: horizontalRatio,\n v1: 1,\n });\n }\n }\n }\n\n private drawRegion (x: number, y: number, width: number, height: number, region: TextureRegion): void {\n const texture = this.texture;\n\n if (!texture || width <= 0 || height <= 0) {\n return;\n }\n this.drawTexture(x, y, width, height, texture, {\n u0: this.flipH ? region.u1 : region.u0,\n v0: this.flipV ? region.v1 : region.v0,\n u1: this.flipH ? region.u0 : region.u1,\n v1: this.flipV ? region.v0 : region.v1,\n }, this.tint);\n }\n\n private controlSizeChanged (): void {\n if (this.expandMode === TextureExpandMode.FitWidthProportional\n || this.expandMode === TextureExpandMode.FitHeightProportional) {\n this.updateMinimumSize();\n }\n }\n\n override fromData (data: TextureRectData): void {\n super.fromData(data);\n if (data.texture !== undefined) {\n this.texture = data.texture ? this.engine.findObject<Texture>(data.texture) : null;\n }\n if (data.expandMode !== undefined) {\n this.expandMode = data.expandMode;\n }\n if (data.stretchMode !== undefined) {\n this.stretchMode = data.stretchMode;\n }\n if (data.flipH !== undefined) {\n this.flipH = data.flipH;\n }\n if (data.flipV !== undefined) {\n this.flipV = data.flipV;\n }\n if (data.tint !== undefined) {\n this.tint.copyFrom(data.tint);\n }\n }\n}\n","import {\n EventEmitter,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n Texture,\n} from '@galacean/effects';\nimport { Control } from '../core/control';\nimport type { ControlEvent, Rect } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport { AxisStretchMode, Side } from './enums';\nimport type { NinePatchRectData } from '../data';\n\nexport type NinePatchRectEvent = ControlEvent & {\n textureChanged: [texture: Texture | null],\n};\n\n@effectsClass('NinePatchRect')\nexport class NinePatchRect extends Control {\n static override readonly themeType: string = 'NinePatchRect';\n private readonly ninePatchEventEmitter = new EventEmitter<NinePatchRectEvent>();\n private readonly patchMargins = [0, 0, 0, 0];\n private _texture: Texture | null = null;\n private _regionRect: Rect;\n\n drawCenter = true;\n horizontalAxisStretchMode = AxisStretchMode.Stretch;\n verticalAxisStretchMode = AxisStretchMode.Stretch;\n tint = new math.Color(1, 1, 1, 1);\n\n constructor (engine: Engine, texture: Texture | null = null) {\n super(engine);\n this._texture = texture;\n this._regionRect = {\n position: new math.Vector2(),\n size: new math.Vector2(),\n };\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n get texture (): Texture | null {\n return this._texture;\n }\n\n set texture (value: Texture | null) {\n if (this._texture !== value) {\n this._texture = value;\n this.updateDesiredSize();\n this.ninePatchEventEmitter.emit('textureChanged', value);\n }\n }\n\n get regionRect (): Rect {\n return {\n position: this._regionRect.position.clone(),\n size: this._regionRect.size.clone(),\n };\n }\n\n set regionRect (value: Rect) {\n this.setRegionRect(value.position.x, value.position.y, value.size.x, value.size.y);\n }\n\n override on<E extends keyof NinePatchRectEvent> (\n eventName: E,\n listener: EventEmitterListener<NinePatchRectEvent[E]>,\n ): void {\n if (eventName === 'textureChanged') {\n this.ninePatchEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof NinePatchRectEvent> (\n eventName: E,\n listener: EventEmitterListener<NinePatchRectEvent[E]>,\n ): void {\n if (eventName === 'textureChanged') {\n this.ninePatchEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n setRegionRect (x: number, y: number, width: number, height: number): void {\n if (![x, y, width, height].every(Number.isFinite) || width < 0 || height < 0) {\n throw new RangeError('NinePatchRect region must be finite and non-negative.');\n }\n this._regionRect.position.set(x, y);\n this._regionRect.size.set(width, height);\n this.updateDesiredSize();\n }\n\n setPatchMargin (side: Side, value: number): void {\n if (!Number.isFinite(value) || value < 0) {\n throw new RangeError('NinePatchRect patch margin must be finite and non-negative.');\n }\n if (this.patchMargins[side] !== value) {\n this.patchMargins[side] = value;\n this.updateMinimumSize();\n }\n }\n\n getPatchMargin (side: Side): number {\n return this.patchMargins[side] ?? 0;\n }\n\n override getMinimumSize (): math.Vector2 {\n return new math.Vector2(\n this.getPatchMargin(Side.Left) + this.getPatchMargin(Side.Right),\n this.getPatchMargin(Side.Top) + this.getPatchMargin(Side.Bottom),\n );\n }\n\n override getDesiredSize (): math.Vector2 {\n const source = this.getSourceRect();\n\n return new math.Vector2(source.size.x, source.size.y);\n }\n\n override draw (): void {\n const texture = this.texture;\n\n if (!texture || this.width <= 0 || this.height <= 0) {\n return;\n }\n\n const source = this.getSourceRect();\n\n this.drawNinePatch(0, 0, this.width, this.height, texture, {\n sourceX: source.position.x,\n sourceY: source.position.y,\n sourceWidth: source.size.x,\n sourceHeight: source.size.y,\n marginLeft: this.getPatchMargin(Side.Left),\n marginTop: this.getPatchMargin(Side.Top),\n marginRight: this.getPatchMargin(Side.Right),\n marginBottom: this.getPatchMargin(Side.Bottom),\n horizontalMode: this.horizontalAxisStretchMode,\n verticalMode: this.verticalAxisStretchMode,\n drawCenter: this.drawCenter,\n }, this.tint);\n }\n\n private getSourceRect (): Rect {\n const texture = this.texture;\n\n if (!texture) {\n return { position: new math.Vector2(), size: new math.Vector2() };\n }\n if (this._regionRect.size.x > 0 && this._regionRect.size.y > 0) {\n return this.regionRect;\n }\n\n return {\n position: new math.Vector2(),\n size: new math.Vector2(texture.width, texture.height),\n };\n }\n\n override fromData (data: NinePatchRectData): void {\n super.fromData(data);\n if (data.texture !== undefined) {\n this.texture = data.texture ? this.engine.findObject<Texture>(data.texture) : null;\n }\n if (data.regionRect !== undefined) {\n this.setRegionRect(\n data.regionRect.position[0], data.regionRect.position[1],\n data.regionRect.size[0], data.regionRect.size[1],\n );\n }\n if (data.patchMarginLeft !== undefined) {\n this.setPatchMargin(Side.Left, data.patchMarginLeft);\n }\n if (data.patchMarginTop !== undefined) {\n this.setPatchMargin(Side.Top, data.patchMarginTop);\n }\n if (data.patchMarginRight !== undefined) {\n this.setPatchMargin(Side.Right, data.patchMarginRight);\n }\n if (data.patchMarginBottom !== undefined) {\n this.setPatchMargin(Side.Bottom, data.patchMarginBottom);\n }\n if (data.drawCenter !== undefined) {\n this.drawCenter = data.drawCenter;\n }\n if (data.horizontalAxisStretchMode !== undefined) {\n this.horizontalAxisStretchMode = data.horizontalAxisStretchMode;\n }\n if (data.verticalAxisStretchMode !== undefined) {\n this.verticalAxisStretchMode = data.verticalAxisStretchMode;\n }\n if (data.tint !== undefined) {\n this.tint.copyFrom(data.tint);\n }\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport type { ColorRectData } from '../data';\n\n@effectsClass('ColorRect')\nexport class ColorRect extends Control {\n static override readonly themeType: string = 'ColorRect';\n color = new math.Color(1, 1, 1, 1);\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n override draw (): void {\n this.fillRect(0, 0, this.width, this.height, this.color);\n }\n\n override fromData (data: ColorRectData): void {\n super.fromData(data);\n if (data.color !== undefined) {\n this.color.copyFrom(data.color);\n }\n }\n}\n","import { effectsClass } from '@galacean/effects';\nimport type { Engine, math } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\n\n@effectsClass('Panel')\nexport class Panel extends Control {\n static override readonly themeType: string = 'Panel';\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Stop;\n }\n\n override draw (): void {\n this.drawStyleBox(this.getThemeStyleBox('panel'), 0, 0, this.width, this.height);\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.getThemeStyleBox('panel').getMinimumSize();\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.getMinimumSize();\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n MouseButtonMask,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n InputEventScreenDrag,\n InputEventScreenTouch,\n} from '@galacean/effects';\nimport { Control } from '../core/control';\nimport type { ControlEvent, RootControl } from '../core/control';\nimport { FocusMode, MouseFilter } from '../core/enums';\nimport { ButtonActionMode, ButtonDrawMode } from './enums';\nimport type { BaseButtonData } from '../data';\n\nexport type BaseButtonEvent = ControlEvent & {\n buttonDown: [],\n buttonUp: [],\n pressed: [],\n toggled: [pressed: boolean],\n};\n\nexport type ButtonGroupEvent = {\n pressed: [button: BaseButton],\n};\n\nexport class ButtonGroup {\n /** @internal */\n static updateButton (\n button: BaseButton,\n previous: ButtonGroup | null,\n next: ButtonGroup | null,\n ): void {\n previous?.buttons.delete(button);\n if (next) {\n next.buttons.add(button);\n if (button.buttonPressed) {\n for (const peer of next.buttons) {\n if (peer !== button) {\n peer.setPressedFromGroup(false, false);\n }\n }\n }\n }\n }\n\n private readonly buttons = new Set<BaseButton>();\n private readonly eventEmitter = new EventEmitter<ButtonGroupEvent>();\n\n allowUnpress = false;\n\n on<E extends keyof ButtonGroupEvent> (\n eventName: E,\n listener: EventEmitterListener<ButtonGroupEvent[E]>,\n ): void {\n this.eventEmitter.on(eventName, listener);\n }\n\n off<E extends keyof ButtonGroupEvent> (\n eventName: E,\n listener: EventEmitterListener<ButtonGroupEvent[E]>,\n ): void {\n this.eventEmitter.off(eventName, listener);\n }\n\n getPressedButton (): BaseButton | null {\n for (const button of this.buttons) {\n if (button.buttonPressed) {\n return button;\n }\n }\n\n return null;\n }\n\n getButtons (): BaseButton[] {\n return Array.from(this.buttons);\n }\n\n select (button: BaseButton, signal: boolean, emitPressed = false): boolean {\n if (!this.buttons.has(button)) {\n return false;\n }\n if (button.buttonPressed && !this.allowUnpress) {\n if (emitPressed) {\n this.eventEmitter.emit('pressed', button);\n }\n\n return false;\n }\n\n const next = !button.buttonPressed;\n\n if (next) {\n for (const peer of this.buttons) {\n if (peer !== button) {\n peer.setPressedFromGroup(false, signal);\n }\n }\n }\n button.setPressedFromGroup(next, signal);\n if (emitPressed) {\n this.eventEmitter.emit('pressed', button);\n }\n\n return true;\n }\n}\n\nexport class BaseButton extends Control {\n static override readonly themeType: string = 'BaseButton';\n private readonly buttonEventEmitter = new EventEmitter<BaseButtonEvent>();\n private _disabled = false;\n private _toggleMode = false;\n private _buttonPressed = false;\n private _buttonMask = MouseButtonMask.Left;\n private _buttonGroup: ButtonGroup | null = null;\n private hovered = false;\n private pressing = false;\n private pressInside = false;\n private mousePressing = false;\n private keyboardPressing = false;\n private touchIndex = -1;\n private readonly controlStateChanged = () => {\n if (!this.visible || !this.enabled) {\n this.cancelPress();\n }\n };\n\n actionMode = ButtonActionMode.Release;\n keepPressedOutside = false;\n\n constructor (engine: Engine) {\n super(engine);\n this.focusMode = FocusMode.All;\n this.mouseFilter = MouseFilter.Stop;\n this.on('visibilityChanged', this.controlStateChanged);\n this.on('enabledChanged', this.controlStateChanged);\n }\n\n get disabled (): boolean {\n return this._disabled;\n }\n\n set disabled (value: boolean) {\n if (this._disabled !== value) {\n this._disabled = value;\n if (value) {\n this.cancelPress();\n }\n this.root?.controlStateChanged(this);\n }\n }\n\n get toggleMode (): boolean {\n return this._toggleMode;\n }\n\n set toggleMode (value: boolean) {\n this._toggleMode = value;\n }\n\n get buttonPressed (): boolean {\n return this._buttonPressed;\n }\n\n set buttonPressed (value: boolean) {\n this.setPressed(value, true);\n }\n\n get buttonMask (): MouseButtonMask {\n return this._buttonMask;\n }\n\n set buttonMask (value: MouseButtonMask) {\n this._buttonMask = value;\n }\n\n get buttonGroup (): ButtonGroup | null {\n return this._buttonGroup;\n }\n\n set buttonGroup (value: ButtonGroup | null) {\n if (this._buttonGroup !== value) {\n const previous = this._buttonGroup;\n\n this._buttonGroup = value;\n ButtonGroup.updateButton(this, previous, value);\n }\n }\n\n override on<E extends keyof BaseButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<BaseButtonEvent[E]>,\n ): void {\n if (eventName === 'buttonDown' || eventName === 'buttonUp'\n || eventName === 'pressed' || eventName === 'toggled') {\n this.buttonEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof BaseButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<BaseButtonEvent[E]>,\n ): void {\n if (eventName === 'buttonDown' || eventName === 'buttonUp'\n || eventName === 'pressed' || eventName === 'toggled') {\n this.buttonEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n setPressedNoSignal (value: boolean): void {\n this.setPressed(value, false);\n }\n\n isHovered (): boolean {\n return this.hovered;\n }\n\n isPressing (): boolean {\n return this.pressing && (this.pressInside || this.keepPressedOutside);\n }\n\n getDrawMode (): ButtonDrawMode {\n if (this.disabled || !this.enabledInHierarchy) {\n return ButtonDrawMode.Disabled;\n }\n if (!this.pressing && this.hovered) {\n return this.buttonPressed ? ButtonDrawMode.HoverPressed : ButtonDrawMode.Hover;\n }\n\n let pressed = this.buttonPressed;\n\n if (this.pressing) {\n pressed = this.pressInside || this.keepPressedOutside;\n if (this.buttonPressed) {\n pressed = !pressed;\n }\n }\n\n return pressed ? ButtonDrawMode.Pressed : ButtonDrawMode.Normal;\n }\n\n override getEffectiveMouseFilter (): MouseFilter {\n return this.disabled ? MouseFilter.Ignore : super.getEffectiveMouseFilter();\n }\n\n override getFocusModeWithOverride (): FocusMode {\n return this.disabled ? FocusMode.None : super.getFocusModeWithOverride();\n }\n\n override onMouseEnter (): void {\n this.hovered = true;\n if (this.mousePressing) {\n this.pressInside = true;\n }\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n this.hovered = this.hasPoint(event.position);\n if (this.mousePressing) {\n this.pressInside = this.hovered;\n }\n }\n\n override onMouseLeave (): void {\n this.hovered = false;\n if (this.mousePressing) {\n this.pressInside = false;\n }\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (this.disabled || !hasButton(this.buttonMask, event.buttonIndex)) {\n return;\n }\n this.mousePressing = true;\n this.beginPress(true);\n event.accept();\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.mousePressing || !hasButton(this.buttonMask, event.buttonIndex)) {\n return;\n }\n const activate = !event.canceled && (this.keepPressedOutside || this.hasPoint(event.position));\n\n this.mousePressing = false;\n this.finishPress(activate);\n event.accept();\n }\n\n override onTouchDown (event: InputEventScreenTouch): void {\n if (this.disabled || this.touchIndex !== -1) {\n return;\n }\n this.touchIndex = event.index;\n this.beginPress(true);\n event.accept();\n }\n\n override onTouchMove (event: InputEventScreenDrag): void {\n if (event.index === this.touchIndex) {\n this.pressInside = this.hasPoint(event.position);\n event.accept();\n }\n }\n\n override onTouchUp (event: InputEventScreenTouch): void {\n if (event.index !== this.touchIndex) {\n return;\n }\n const activate = !event.canceled && (this.keepPressedOutside || this.hasPoint(event.position));\n\n this.touchIndex = -1;\n this.finishPress(activate);\n event.accept();\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (this.disabled || event.echo || this.keyboardPressing || !isActivationKey(event.keycode)) {\n return;\n }\n this.keyboardPressing = true;\n this.beginPress(true);\n event.accept();\n }\n\n override onKeyUp (event: InputEventKey): void {\n if (!this.keyboardPressing || !isActivationKey(event.keycode)) {\n return;\n }\n this.keyboardPressing = false;\n this.finishPress(true);\n event.accept();\n }\n\n override onLostFocus (): void {\n this.cancelPress();\n }\n\n override onScrollBegin (): void {\n this.cancelPress();\n }\n\n override onDestroy (): void {\n this.off('visibilityChanged', this.controlStateChanged);\n this.off('enabledChanged', this.controlStateChanged);\n this.buttonGroup = null;\n this.cancelPress();\n }\n\n setPressedFromGroup (value: boolean, signal: boolean): void {\n this.setPressedDirect(value, signal);\n }\n\n protected override onRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {\n if (!nextRoot) {\n this.cancelPress();\n }\n }\n\n private setPressed (value: boolean, signal: boolean): void {\n if (this.buttonGroup && value) {\n if (!this.buttonPressed) {\n this.buttonGroup.select(this, signal);\n }\n\n return;\n }\n this.setPressedDirect(value, signal);\n }\n\n private setPressedDirect (value: boolean, signal: boolean): void {\n if (this._buttonPressed !== value) {\n this._buttonPressed = value;\n if (signal) {\n this.buttonEventEmitter.emit('toggled', value);\n }\n }\n }\n\n private beginPress (inside: boolean): void {\n if (this.pressing) {\n return;\n }\n this.pressing = true;\n this.pressInside = inside;\n this.buttonEventEmitter.emit('buttonDown');\n if (this.actionMode === ButtonActionMode.Press) {\n this.activate();\n }\n }\n\n private finishPress (activate: boolean): void {\n if (!this.pressing) {\n return;\n }\n this.pressing = false;\n this.pressInside = false;\n this.buttonEventEmitter.emit('buttonUp');\n if (activate && this.actionMode === ButtonActionMode.Release) {\n this.activate();\n }\n }\n\n private cancelPress (): void {\n const wasPressing = this.pressing;\n\n this.pressing = false;\n this.pressInside = false;\n this.mousePressing = false;\n this.keyboardPressing = false;\n this.touchIndex = -1;\n if (wasPressing) {\n this.buttonEventEmitter.emit('buttonUp');\n }\n }\n\n private activate (): void {\n if (this.toggleMode) {\n if (this.buttonGroup) {\n if (!this.buttonGroup.select(this, true, true) && !this.buttonPressed) {\n return;\n }\n } else {\n this.setPressedDirect(!this.buttonPressed, true);\n }\n }\n this.buttonEventEmitter.emit('pressed');\n }\n\n override fromData (data: BaseButtonData): void {\n super.fromData(data);\n if (data.disabled !== undefined) {\n this.disabled = data.disabled;\n }\n if (data.toggleMode !== undefined) {\n this.toggleMode = data.toggleMode;\n }\n if (data.buttonPressed !== undefined) {\n this.setPressedNoSignal(data.buttonPressed);\n }\n if (data.buttonMask !== undefined) {\n this.buttonMask = data.buttonMask;\n }\n if (data.actionMode !== undefined) {\n this.actionMode = data.actionMode;\n }\n if (data.keepPressedOutside !== undefined) {\n this.keepPressedOutside = data.keepPressedOutside;\n }\n }\n}\n\nfunction hasButton (mask: MouseButtonMask, button: MouseButton): boolean {\n switch (button) {\n case MouseButton.Left:\n return (mask & MouseButtonMask.Left) !== 0;\n case MouseButton.Right:\n return (mask & MouseButtonMask.Right) !== 0;\n case MouseButton.Middle:\n return (mask & MouseButtonMask.Middle) !== 0;\n case MouseButton.Xbutton1:\n return (mask & MouseButtonMask.Xbutton1) !== 0;\n case MouseButton.Xbutton2:\n return (mask & MouseButtonMask.Xbutton2) !== 0;\n default:\n return false;\n }\n}\n\nfunction isActivationKey (keycode: string): boolean {\n return keycode === 'Enter' || keycode === 'Space' || keycode === ' ';\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { Engine, Texture } from '@galacean/effects';\nimport type { ButtonData } from '../data';\nimport { BaseButton } from './base-button';\nimport { ButtonDrawMode, HorizontalAlignment, VerticalAlignment } from './enums';\n\nexport type ContentInsets = {\n left: number,\n top: number,\n right: number,\n bottom: number,\n};\n\n@effectsClass('Button')\nexport class Button extends BaseButton {\n static override readonly themeType: string = 'Button';\n private _text = '';\n private _icon: Texture | null | undefined;\n\n flat = false;\n clipText = false;\n expandIcon = false;\n textAlignment = HorizontalAlignment.Center;\n iconAlignment = HorizontalAlignment.Left;\n iconVerticalAlignment = VerticalAlignment.Center;\n\n constructor (engine: Engine, text = '') {\n super(engine);\n\n this._text = text;\n }\n\n get text (): string {\n return this._text;\n }\n\n set text (value: string) {\n if (this._text !== value) {\n this._text = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n get icon (): Texture | null {\n return this._icon === undefined ? this.getThemeIcon('icon') : this._icon;\n }\n\n set icon (value: Texture | null) {\n if (this._icon !== value) {\n this._icon = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureButton();\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureButton();\n }\n\n override draw (): void {\n const mode = this.getDrawMode();\n const styleBox = this.getThemeStyleBox(this.getStyleBoxName(mode));\n\n if (!this.flat) {\n this.drawStyleBox(styleBox, 0, 0, this.width, this.height);\n }\n if (this.hasFocus(true)) {\n this.drawStyleBox(this.getThemeStyleBox('focus'), 0, 0, this.width, this.height);\n }\n this.drawDecoration(mode);\n this.drawContent(mode, this.getContentInsets());\n }\n\n protected getContentInsets (): ContentInsets {\n return this.getBaseContentInsets();\n }\n\n protected getNormalContentInsets (): ContentInsets {\n return this.getThemeStyleBox('normal').getContentMargins();\n }\n\n protected drawDecoration (mode: ButtonDrawMode): void {}\n\n private measureButton (): math.Vector2 {\n const font = this.getThemeFont('font');\n const text = this.measureText(\n this.text, this.getThemeFontSize('fontSize'), font.family, font.weight, font.style,\n );\n const hasText = this.text.length > 0;\n const iconWidth = this.expandIcon ? 0 : this.icon?.width ?? 0;\n const iconHeight = this.expandIcon ? 0 : this.icon?.height ?? 0;\n const textWidth = this.clipText ? 0 : text.width;\n const textHeight = hasText ? text.lineHeight : 0;\n const separation = hasText && iconWidth > 0 && this.iconAlignment !== HorizontalAlignment.Center\n ? Math.max(0, this.getThemeConstant('iconSeparation'))\n : 0;\n const insets = this.getContentInsets();\n const contentWidth = this.iconAlignment === HorizontalAlignment.Center\n ? Math.max(iconWidth, textWidth)\n : iconWidth + separation + textWidth;\n const contentHeight = this.iconVerticalAlignment === VerticalAlignment.Center\n ? Math.max(iconHeight, textHeight)\n : iconHeight + textHeight;\n\n return new math.Vector2(\n insets.left + contentWidth + insets.right,\n insets.top + contentHeight + insets.bottom,\n );\n }\n\n private getStyleBoxName (mode: ButtonDrawMode): string {\n switch (mode) {\n case ButtonDrawMode.Disabled: return 'disabled';\n case ButtonDrawMode.HoverPressed: return 'hoverPressed';\n case ButtonDrawMode.Pressed: return 'pressed';\n case ButtonDrawMode.Hover: return 'hover';\n default: return 'normal';\n }\n }\n\n private drawContent (mode: ButtonDrawMode, insets: ContentInsets): void {\n const left = insets.left;\n const top = insets.top;\n const width = Math.max(0, this.width - insets.left - insets.right);\n const height = Math.max(0, this.height - insets.top - insets.bottom);\n const hasText = this.text.length > 0;\n const separation = this.icon && hasText && this.iconAlignment !== HorizontalAlignment.Center\n ? Math.max(0, this.getThemeConstant('iconSeparation'))\n : 0;\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const naturalText = this.measureText(this.text, fontSize, font.family, font.weight, font.style);\n const iconWidth = !this.clipText && hasText && this.iconAlignment !== HorizontalAlignment.Center\n ? Math.max(0, width - naturalText.width - separation)\n : width;\n const iconHeight = hasText && this.iconVerticalAlignment !== VerticalAlignment.Center\n ? Math.max(0, height - naturalText.lineHeight)\n : height;\n const iconSize = this.getIconSize(iconWidth, iconHeight);\n const reservedIconWidth = this.icon && this.iconAlignment !== HorizontalAlignment.Center\n ? iconSize.x + separation\n : 0;\n const textWidth = Math.max(0, width - reservedIconWidth);\n const sourceText = this.clipText ? this.ellipsizeText(this.text, textWidth) : this.text;\n const text = this.measureText(sourceText, fontSize, font.family, font.weight, font.style);\n let iconX = left;\n let textAreaX = left + reservedIconWidth;\n\n if (this.icon && this.iconAlignment === HorizontalAlignment.Right) {\n iconX = left + width - iconSize.x;\n textAreaX = left;\n } else if (this.icon && this.iconAlignment === HorizontalAlignment.Center) {\n iconX = left + (width - iconSize.x) * 0.5;\n textAreaX = left;\n }\n\n const textX = this.getAlignedX(textAreaX, textWidth, text.width, this.textAlignment);\n const textAreaY = this.icon && this.iconVerticalAlignment === VerticalAlignment.Top\n ? top + iconSize.y\n : top;\n const textHeight = Math.max(0, height - (this.icon && this.iconVerticalAlignment !== VerticalAlignment.Center\n ? iconSize.y\n : 0));\n const textY = textAreaY + (textHeight - text.lineHeight) * 0.5;\n\n if (this.clipText) {\n this.engine.graphics.pushClipRect(left, top, width, height);\n }\n try {\n if (this.icon) {\n const iconY = this.getAlignedY(top, height, iconSize.y, this.iconVerticalAlignment);\n\n this.drawTexture(iconX, iconY, iconSize.x, iconSize.y, this.icon, undefined, this.getIconTint(mode));\n }\n this.drawText(\n textX, textY, sourceText, fontSize,\n this.getFontColor(mode),\n font.family, font.weight, font.style,\n );\n } finally {\n if (this.clipText) {\n this.engine.graphics.popClipRect();\n }\n }\n }\n\n private getFontColor (mode: ButtonDrawMode): math.Color {\n switch (mode) {\n case ButtonDrawMode.Disabled: return this.getThemeColor('fontDisabledColor');\n case ButtonDrawMode.HoverPressed: return this.getThemeColor('fontHoverPressedColor');\n case ButtonDrawMode.Pressed: return this.getThemeColor('fontPressedColor');\n case ButtonDrawMode.Hover: return this.getThemeColor('fontHoverColor');\n default: return this.hasFocus(true)\n ? this.getThemeColor('fontFocusColor')\n : this.getThemeColor('fontColor');\n }\n }\n\n private getIconTint (mode: ButtonDrawMode): math.Color {\n switch (mode) {\n case ButtonDrawMode.Disabled: return this.getThemeColor('iconDisabledTint');\n case ButtonDrawMode.HoverPressed: return this.getThemeColor('iconHoverPressedTint');\n case ButtonDrawMode.Pressed: return this.getThemeColor('iconPressedTint');\n case ButtonDrawMode.Hover: return this.getThemeColor('iconHoverTint');\n default: return this.hasFocus(true)\n ? this.getThemeColor('iconFocusTint')\n : this.getThemeColor('iconTint');\n }\n }\n\n protected getBaseContentInsets (): ContentInsets {\n if (!this.getThemeConstant('alignToLargestStyleBox')) {\n return this.getThemeStyleBox(this.getStyleBoxName(this.getDrawMode())).getContentMargins();\n }\n const result: ContentInsets = { left: 0, top: 0, right: 0, bottom: 0 };\n\n for (const name of ['normal', 'hover', 'pressed', 'hoverPressed', 'disabled']) {\n const margin = this.getThemeStyleBox(name).getContentMargins();\n\n result.left = Math.max(result.left, margin.left);\n result.top = Math.max(result.top, margin.top);\n result.right = Math.max(result.right, margin.right);\n result.bottom = Math.max(result.bottom, margin.bottom);\n }\n\n return result;\n }\n\n private getIconSize (width: number, height: number): math.Vector2 {\n const icon = this.icon;\n\n if (!icon) {\n return new math.Vector2();\n }\n if (!this.expandIcon || icon.width <= 0 || icon.height <= 0) {\n return new math.Vector2(icon.width, icon.height);\n }\n const scale = Math.min(width / icon.width, height / icon.height);\n\n return new math.Vector2(icon.width * scale, icon.height * scale);\n }\n\n private getAlignedX (start: number, width: number, contentWidth: number, alignment: HorizontalAlignment): number {\n if (alignment === HorizontalAlignment.Center || alignment === HorizontalAlignment.Fill) {\n return start + (width - contentWidth) * 0.5;\n }\n if (alignment === HorizontalAlignment.Right) {\n return start + width - contentWidth;\n }\n\n return start;\n }\n\n private getAlignedY (start: number, height: number, contentHeight: number, alignment: VerticalAlignment): number {\n if (alignment === VerticalAlignment.Center || alignment === VerticalAlignment.Fill) {\n return start + (height - contentHeight) * 0.5;\n }\n if (alignment === VerticalAlignment.Bottom) {\n return start + height - contentHeight;\n }\n\n return start;\n }\n\n private ellipsizeText (text: string, width: number): string {\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const measurement = this.measureText(text, fontSize, font.family, font.weight, font.style);\n\n if (measurement.width <= width) {\n return text;\n }\n const ellipsis = '…';\n const ellipsisWidth = this.measureText(ellipsis, fontSize, font.family, font.weight, font.style).width;\n const characters = Array.from(text);\n let used = ellipsisWidth;\n let count = 0;\n\n if (ellipsisWidth > width) {\n return '';\n }\n while (count < characters.length && used + (measurement.advances[count] ?? 0) <= width) {\n used += measurement.advances[count] ?? 0;\n count++;\n }\n\n return characters.slice(0, count).join('') + ellipsis;\n }\n\n override fromData (data: ButtonData): void {\n super.fromData(data);\n if (data.text !== undefined) {\n this.text = data.text;\n }\n if (data.icon !== undefined) {\n this.icon = data.icon ? this.engine.findObject<Texture>(data.icon) : null;\n }\n if (data.flat !== undefined) {\n this.flat = data.flat;\n }\n if (data.clipText !== undefined) {\n this.clipText = data.clipText;\n }\n if (data.expandIcon !== undefined) {\n this.expandIcon = data.expandIcon;\n }\n if (data.textAlignment !== undefined) {\n this.textAlignment = data.textAlignment;\n }\n if (data.iconAlignment !== undefined) {\n this.iconAlignment = data.iconAlignment;\n }\n if (data.iconVerticalAlignment !== undefined) {\n this.iconVerticalAlignment = data.iconVerticalAlignment;\n }\n }\n}\n","import { effectsClass } from '@galacean/effects';\nimport type { Engine, math } from '@galacean/effects';\nimport { Button } from './button';\nimport type { ContentInsets } from './button';\nimport { HorizontalAlignment } from './enums';\n\nconst CHECK_ICON_GRID_SIZE = 16;\n\n@effectsClass('Checkbox')\nexport class Checkbox extends Button {\n static override readonly themeType: string = 'Checkbox';\n\n constructor (engine: Engine, text = '') {\n super(engine, text);\n this.toggleMode = true;\n this.textAlignment = HorizontalAlignment.Left;\n }\n\n protected override getContentInsets (): ContentInsets {\n const insets = super.getContentInsets();\n const separation = this.text ? Math.max(0, this.getThemeConstant('markSeparation')) : 0;\n\n return {\n ...insets,\n left: insets.left + this.getMarkSize().width + separation,\n };\n }\n\n protected override drawDecoration (): void {\n const markSize = this.getThemeConstant('markSize');\n const iconSize = this.getMarkSize();\n const x = this.getNormalContentInsets().left;\n const yOffset = this.getThemeConstant('checkVOffset');\n const y = Math.floor((this.height - iconSize.height) * 0.5) + yOffset;\n const radio = !!this.buttonGroup;\n const iconName = this.disabled || !this.enabledInHierarchy\n ? radio\n ? this.buttonPressed ? 'radioCheckedDisabled' : 'radioUncheckedDisabled'\n : this.buttonPressed ? 'checkedDisabled' : 'uncheckedDisabled'\n : radio\n ? this.buttonPressed ? 'radioChecked' : 'radioUnchecked'\n : this.buttonPressed ? 'checked' : 'unchecked';\n const icon = this.getThemeIcon(iconName);\n\n if (icon) {\n this.drawTexture(\n x, y, icon.width, icon.height, icon, undefined,\n this.getThemeColor(this.buttonPressed ? 'checkedColor' : 'uncheckedColor'),\n );\n\n return;\n }\n const fallbackY = Math.floor((this.height - markSize) * 0.5) + yOffset;\n const centerX = x + markSize * 0.5;\n const centerY = fallbackY + markSize * 0.5;\n const disabled = this.disabled || !this.enabledInHierarchy;\n const markColor = disabled\n ? this.getThemeColor('markDisabledColor')\n : this.getThemeColor('markColor');\n const uncheckedColor = disabled\n ? this.getThemeColor('markUncheckedDisabledColor')\n : this.getThemeColor('markUncheckedColor');\n const checkedColor = disabled\n ? this.getThemeColor('checkedDisabledColor')\n : this.getThemeColor('checkedColor');\n const scale = markSize / CHECK_ICON_GRID_SIZE;\n\n if (this.buttonGroup) {\n if (this.buttonPressed) {\n this.fillCircle(centerX, centerY, 7 * scale, markColor);\n this.fillCircle(centerX, centerY, 4 * scale, checkedColor);\n } else {\n this.fillCircle(centerX, centerY, 7 * scale, uncheckedColor);\n }\n } else {\n this.fillRoundedMark(x + scale, fallbackY + scale, 14 * scale, 2.33 * scale, this.buttonPressed\n ? markColor\n : uncheckedColor);\n if (this.buttonPressed) {\n this.fillCheckMark(x, fallbackY, scale, checkedColor);\n }\n }\n }\n\n private fillRoundedMark (x: number, y: number, size: number, radius: number, color: math.Color): void {\n const points: Array<[number, number]> = [];\n const segments = 4;\n const corners: Array<[number, number, number]> = [\n [x + radius, y + radius, Math.PI],\n [x + size - radius, y + radius, Math.PI * 1.5],\n [x + size - radius, y + size - radius, 0],\n [x + radius, y + size - radius, Math.PI * 0.5],\n ];\n\n for (const [centerX, centerY, start] of corners) {\n for (let index = 0; index <= segments; index++) {\n const angle = start + index / segments * Math.PI * 0.5;\n\n points.push([centerX + Math.cos(angle) * radius, centerY + Math.sin(angle) * radius]);\n }\n }\n const centerX = x + size * 0.5;\n const centerY = y + size * 0.5;\n\n for (let index = 0; index < points.length; index++) {\n const current = points[index];\n const next = points[(index + 1) % points.length];\n\n this.fillTriangle(centerX, centerY, current[0], current[1], next[0], next[1], color);\n }\n }\n\n private fillCheckMark (x: number, y: number, scale: number, color: math.Color): void {\n const point = (px: number, py: number): [number, number] => [x + px * scale, y + py * scale];\n const top = point(11.5, 3.734);\n const inner = point(5.89, 9.346);\n const leftInner = point(4.185, 7.665);\n const left = point(2.685, 9.164);\n const bottom = point(5.889, 12.344);\n const right = point(13, 5.235);\n\n this.fillTriangle(leftInner[0], leftInner[1], left[0], left[1], bottom[0], bottom[1], color);\n this.fillTriangle(leftInner[0], leftInner[1], bottom[0], bottom[1], inner[0], inner[1], color);\n this.fillTriangle(top[0], top[1], inner[0], inner[1], bottom[0], bottom[1], color);\n this.fillTriangle(top[0], top[1], bottom[0], bottom[1], right[0], right[1], color);\n }\n\n private getMarkSize (): { width: number, height: number } {\n let width = 0;\n let height = 0;\n\n for (const name of [\n 'checked', 'unchecked', 'checkedDisabled', 'uncheckedDisabled',\n 'radioChecked', 'radioUnchecked', 'radioCheckedDisabled', 'radioUncheckedDisabled',\n ]) {\n const icon = this.getThemeIcon(name);\n\n width = Math.max(width, icon?.width ?? 0);\n height = Math.max(height, icon?.height ?? 0);\n }\n if (width <= 0 && height <= 0) {\n const fallback = this.getThemeConstant('markSize');\n\n return { width: fallback, height: fallback };\n }\n\n return { width, height };\n }\n}\n","import { effectsClass } from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { Button } from './button';\nimport type { ContentInsets } from './button';\nimport { HorizontalAlignment } from './enums';\n\n@effectsClass('CheckButton')\nexport class CheckButton extends Button {\n static override readonly themeType: string = 'CheckButton';\n\n constructor (engine: Engine, text = '') {\n super(engine, text);\n this.toggleMode = true;\n this.textAlignment = HorizontalAlignment.Left;\n }\n\n protected override getContentInsets (): ContentInsets {\n const insets = super.getContentInsets();\n const separation = this.text ? Math.max(0, this.getThemeConstant('switchSeparation')) : 0;\n\n return {\n ...insets,\n right: insets.right + this.getSwitchSize().width + separation,\n };\n }\n\n protected override drawDecoration (): void {\n const switchWidth = this.getThemeConstant('switchWidth');\n const switchHeight = this.getThemeConstant('switchHeight');\n const switchSize = this.getSwitchSize();\n const x = this.width - this.getNormalContentInsets().right - switchSize.width;\n const yOffset = this.getThemeConstant('checkVOffset');\n const y = (this.height - switchSize.height) * 0.5 + yOffset;\n const radius = switchHeight * 0.5;\n const iconName = this.disabled || !this.enabledInHierarchy\n ? this.buttonPressed ? 'checkedDisabled' : 'uncheckedDisabled'\n : this.buttonPressed ? 'checked' : 'unchecked';\n const icon = this.getThemeIcon(iconName);\n\n if (icon) {\n this.drawTexture(\n x, y, icon.width, icon.height, icon, undefined,\n this.getThemeColor(this.buttonPressed ? 'buttonCheckedColor' : 'buttonUncheckedColor'),\n );\n\n return;\n }\n const fallbackX = this.width - this.getNormalContentInsets().right - switchWidth;\n const fallbackY = (this.height - switchHeight) * 0.5 + yOffset;\n const activeColor = this.disabled || !this.enabledInHierarchy\n ? this.getThemeColor('switchDisabledColor')\n : this.getThemeColor('switchColor');\n const trackColor = this.buttonPressed ? activeColor : this.getThemeColor('switchOffColor');\n const knobX = this.buttonPressed ? fallbackX + switchWidth - radius : fallbackX + radius;\n\n this.fillRect(fallbackX + radius, fallbackY, switchWidth - switchHeight, switchHeight, trackColor);\n this.fillCircle(fallbackX + radius, fallbackY + radius, radius, trackColor);\n this.fillCircle(fallbackX + switchWidth - radius, fallbackY + radius, radius, trackColor);\n this.fillCircle(knobX, fallbackY + radius, radius - 2, this.getThemeColor('switchKnobColor'));\n }\n\n private getSwitchSize (): { width: number, height: number } {\n let width = 0;\n let height = 0;\n\n const names = this.disabled || !this.enabledInHierarchy\n ? ['checkedDisabled', 'uncheckedDisabled']\n : ['checked', 'unchecked'];\n\n for (const name of names) {\n const icon = this.getThemeIcon(name);\n\n width = Math.max(width, icon?.width ?? 0);\n height = Math.max(height, icon?.height ?? 0);\n }\n if (width <= 0 && height <= 0) {\n return {\n width: this.getThemeConstant('switchWidth'),\n height: this.getThemeConstant('switchHeight'),\n };\n }\n\n return { width, height };\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n InputEventScreenDrag,\n InputEventScreenTouch,\n} from '@galacean/effects';\nimport type { RootControl } from '../core/control';\nimport { FocusMode, MouseFilter } from '../core/enums';\nimport { Orientation } from '../layout/enums';\nimport { Range } from '../scroll/range';\nimport type { RangeEvent } from '../scroll/range';\nimport type { SliderData } from '../data';\n\nexport type SliderEvent = RangeEvent & {\n dragStarted: [],\n dragEnded: [valueChanged: boolean],\n};\n\ntype GrabberRect = {\n x: number,\n y: number,\n width: number,\n height: number,\n};\n\nexport class Slider extends Range {\n static override readonly themeType: string = 'Slider';\n private readonly sliderEventEmitter = new EventEmitter<SliderEvent>();\n private _orientation: Orientation;\n private _editable = true;\n private dragging = false;\n private hovered = false;\n private dragPosition = 0;\n private dragRatio = 0;\n private dragInitialValue = 0;\n private touchIndex = -1;\n\n scrollable = true;\n\n constructor (engine: Engine, orientation = Orientation.Horizontal) {\n super(engine);\n\n this._orientation = orientation;\n this.focusMode = FocusMode.All;\n this.mouseFilter = MouseFilter.Stop;\n }\n\n get orientation (): Orientation {\n return this._orientation;\n }\n\n get editable (): boolean {\n return this._editable;\n }\n\n set editable (value: boolean) {\n if (this._editable !== value) {\n this._editable = value;\n if (!value) {\n this.endDrag();\n }\n }\n }\n\n set orientation (value: Orientation) {\n if (value !== Orientation.Horizontal && value !== Orientation.Vertical) {\n throw new RangeError('Invalid Slider orientation.');\n }\n if (this._orientation !== value) {\n this._orientation = value;\n this.updateMinimumSize();\n }\n }\n\n override on<E extends keyof SliderEvent> (\n eventName: E,\n listener: EventEmitterListener<SliderEvent[E]>,\n ): void {\n if (eventName === 'dragStarted' || eventName === 'dragEnded') {\n this.sliderEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof SliderEvent> (\n eventName: E,\n listener: EventEmitterListener<SliderEvent[E]>,\n ): void {\n if (eventName === 'dragStarted' || eventName === 'dragEnded') {\n this.sliderEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n const grabberSize = this.getThemeConstant('grabberSize');\n const thickness = Math.max(grabberSize, this.getThemeConstant('trackThickness'));\n\n return this.orientation === Orientation.Horizontal\n ? new math.Vector2(grabberSize, thickness)\n : new math.Vector2(thickness, grabberSize);\n }\n\n override draw (): void {\n const grabber = this.getGrabberRect();\n const highlighted = this.editable && (this.hovered || this.hasFocus(true));\n const grabberStyle = !this.editable\n ? 'grabberDisabled'\n : highlighted ? 'grabberHighlight' : 'grabber';\n const fillStyle = highlighted ? 'fillHighlight' : 'fill';\n const trackThickness = this.getThemeConstant('trackThickness');\n\n if (this.orientation === Orientation.Horizontal) {\n const centerY = (this.height - trackThickness) * 0.5;\n const fillWidth = grabber.x + grabber.width * 0.5;\n\n this.drawStyleBox(this.getThemeStyleBox('track'), 0, centerY, this.width, trackThickness);\n this.drawStyleBox(this.getThemeStyleBox(fillStyle), 0, centerY, fillWidth, trackThickness);\n } else {\n const centerX = (this.width - trackThickness) * 0.5;\n const fillY = grabber.y + grabber.height * 0.5;\n\n this.drawStyleBox(this.getThemeStyleBox('track'), centerX, 0, trackThickness, this.height);\n this.drawStyleBox(this.getThemeStyleBox(fillStyle), centerX, fillY, trackThickness, this.height - fillY);\n }\n this.drawStyleBox(this.getThemeStyleBox(grabberStyle), grabber.x, grabber.y, grabber.width, grabber.height);\n }\n\n override onMouseEnter (): void {\n this.hovered = true;\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n this.hovered = this.hasPoint(event.position);\n if (this.dragging) {\n this.updateDrag(this.getAxis(event.position));\n event.accept();\n }\n }\n\n override onMouseLeave (): void {\n this.hovered = false;\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (!this.editable || event.buttonIndex !== MouseButton.Left) {\n return;\n }\n this.beginDrag(this.getAxis(event.position), this.getGrabberRect(), event.position);\n event.accept();\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left && this.dragging) {\n this.endDrag();\n event.accept();\n }\n }\n\n override onTouchDown (event: InputEventScreenTouch): void {\n if (!this.editable || this.touchIndex !== -1) {\n return;\n }\n this.touchIndex = event.index;\n this.beginDrag(this.getAxis(event.position), this.getGrabberRect(), event.position);\n event.accept();\n }\n\n override onTouchMove (event: InputEventScreenDrag): void {\n if (this.dragging && event.index === this.touchIndex) {\n this.updateDrag(this.getAxis(event.position));\n event.accept();\n }\n }\n\n override onTouchUp (event: InputEventScreenTouch): void {\n if (event.index === this.touchIndex) {\n this.touchIndex = -1;\n this.endDrag();\n event.accept();\n }\n }\n\n override onMouseWheel (event: InputEventMouseButton): void {\n if (!this.editable || !this.scrollable) {\n return;\n }\n\n let direction = 0;\n\n if (event.buttonIndex === MouseButton.WheelUp || event.buttonIndex === MouseButton.WheelRight) {\n direction = 1;\n } else if (event.buttonIndex === MouseButton.WheelDown || event.buttonIndex === MouseButton.WheelLeft) {\n direction = -1;\n }\n if (direction !== 0) {\n const previous = this.value;\n\n this.value += direction * this.getIncrement() * event.factor;\n if (previous !== this.value) {\n event.accept();\n }\n }\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (!this.editable) {\n return;\n }\n const increment = this.getIncrement();\n let target: number | undefined;\n\n if ((this.orientation === Orientation.Horizontal && event.keycode === 'ArrowLeft')\n || (this.orientation === Orientation.Vertical && event.keycode === 'ArrowDown')) {\n target = this.value - increment;\n } else if ((this.orientation === Orientation.Horizontal && event.keycode === 'ArrowRight')\n || (this.orientation === Orientation.Vertical && event.keycode === 'ArrowUp')) {\n target = this.value + increment;\n } else if (event.keycode === 'Home') {\n target = this.minValue;\n } else if (event.keycode === 'End') {\n target = this.maxValue;\n }\n\n if (target !== undefined) {\n const previous = this.value;\n\n this.value = target;\n if (previous !== this.value) {\n event.accept();\n }\n }\n }\n\n override onScrollBegin (): void {\n this.endDrag();\n }\n\n protected override onRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {\n if (!nextRoot) {\n this.endDrag();\n }\n }\n\n private beginDrag (position: number, grabber: GrabberRect, point: math.Vector2): void {\n const insideGrabber = point.x >= grabber.x && point.x <= grabber.x + grabber.width\n && point.y >= grabber.y && point.y <= grabber.y + grabber.height;\n\n const initialValue = this.value;\n\n if (!insideGrabber) {\n this.setAsRatio(this.getRatioAt(position));\n }\n this.dragging = true;\n this.dragPosition = position;\n this.dragRatio = this.getAsRatio();\n this.dragInitialValue = initialValue;\n this.sliderEventEmitter.emit('dragStarted');\n }\n\n private updateDrag (position: number): void {\n const area = this.getUsableLength();\n\n if (area <= 0) {\n return;\n }\n const direction = this.orientation === Orientation.Horizontal ? 1 : -1;\n\n this.setAsRatio(this.dragRatio + direction * (position - this.dragPosition) / area);\n }\n\n private endDrag (): void {\n if (!this.dragging) {\n return;\n }\n const changed = this.value !== this.dragInitialValue;\n\n this.dragging = false;\n this.touchIndex = -1;\n this.sliderEventEmitter.emit('dragEnded', changed);\n }\n\n private getAxis (position: math.Vector2): number {\n return this.orientation === Orientation.Horizontal ? position.x : position.y;\n }\n\n private getAxisSize (): number {\n return this.orientation === Orientation.Horizontal ? this.width : this.height;\n }\n\n private getUsableLength (): number {\n return Math.max(0, this.getAxisSize() - this.getThemeConstant('grabberSize'));\n }\n\n private getRatioAt (position: number): number {\n const area = this.getUsableLength();\n const normalized = area > 0 ? (position - this.getThemeConstant('grabberSize') * 0.5) / area : 0;\n\n return this.orientation === Orientation.Horizontal ? normalized : 1 - normalized;\n }\n\n private getIncrement (): number {\n return this.step > 0 ? this.step : Math.max(0, this.maxValue - this.minValue) / 100;\n }\n\n private getGrabberRect (): GrabberRect {\n const grabberSize = this.getThemeConstant('grabberSize');\n const offset = this.getUsableLength() * this.getAsRatio();\n\n return this.orientation === Orientation.Horizontal\n ? { x: offset, y: (this.height - grabberSize) * 0.5, width: grabberSize, height: grabberSize }\n : { x: (this.width - grabberSize) * 0.5, y: this.getUsableLength() - offset, width: grabberSize, height: grabberSize };\n }\n\n override fromData (data: SliderData): void {\n super.fromData(data);\n if (data.editable !== undefined) {\n this.editable = data.editable;\n }\n if (data.scrollable !== undefined) {\n this.scrollable = data.scrollable;\n }\n }\n\n}\n\n@effectsClass('HSlider')\nexport class HSlider extends Slider {\n static override readonly themeType: string = 'HSlider';\n constructor (engine: Engine) {\n super(engine, Orientation.Horizontal);\n }\n}\n\n@effectsClass('VSlider')\nexport class VSlider extends Slider {\n static override readonly themeType: string = 'VSlider';\n constructor (engine: Engine) {\n super(engine, Orientation.Vertical);\n }\n}\n","import {\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { MouseFilter } from '../core/enums';\nimport { Range } from '../scroll/range';\nimport { ProgressFillMode } from './enums';\nimport type { ProgressBarData } from '../data';\n\n@effectsClass('ProgressBar')\nexport class ProgressBar extends Range {\n static override readonly themeType: string = 'ProgressBar';\n private _showPercentage = true;\n private _fillMode = ProgressFillMode.BeginToEnd;\n\n constructor (engine: Engine) {\n super(engine);\n\n this.step = 0.01;\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n get showPercentage (): boolean {\n return this._showPercentage;\n }\n\n set showPercentage (value: boolean) {\n if (this._showPercentage !== value) {\n this._showPercentage = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n get fillMode (): ProgressFillMode {\n return this._fillMode;\n }\n\n set fillMode (value: ProgressFillMode) {\n this._fillMode = value;\n }\n\n override getMinimumSize (): math.Vector2 {\n const background = this.getThemeStyleBox('background').getMinimumSize();\n const fill = this.getThemeStyleBox('fill').getMinimumSize();\n const styleMinimum = new math.Vector2(Math.max(background.x, fill.x), Math.max(background.y, fill.y));\n\n if (!this.showPercentage) {\n return new math.Vector2(Math.max(1, styleMinimum.x), Math.max(1, styleMinimum.y));\n }\n const font = this.getThemeFont('font');\n const text = this.measureText(\n '100%', this.getThemeFontSize('fontSize'), font.family, font.weight, font.style,\n );\n\n return new math.Vector2(styleMinimum.x, Math.max(background.y + text.lineHeight, styleMinimum.y));\n }\n\n override getDesiredSize (): math.Vector2 {\n const minimum = this.getMinimumSize();\n\n return new math.Vector2(Math.max(120, minimum.x), minimum.y);\n }\n\n override draw (): void {\n const ratio = this.getAsRatio();\n const fillStyle = this.getThemeStyleBox('fill');\n const fillMinimum = fillStyle.getMinimumSize();\n\n this.drawStyleBox(this.getThemeStyleBox('background'), 0, 0, this.width, this.height);\n switch (this.fillMode) {\n case ProgressFillMode.BeginToEnd: {\n const progress = Math.round(ratio * (this.width - fillMinimum.x));\n\n if (progress > 0) {\n this.drawStyleBox(fillStyle, 0, 0, progress + fillMinimum.x, this.height);\n }\n\n break;\n }\n case ProgressFillMode.EndToBegin: {\n const progress = Math.round(ratio * (this.width - fillMinimum.x));\n\n if (progress > 0) {\n const remaining = Math.round((1 - ratio) * (this.width - fillMinimum.x));\n\n this.drawStyleBox(fillStyle, remaining, 0, progress + fillMinimum.x, this.height);\n }\n\n break;\n }\n case ProgressFillMode.TopToBottom: {\n const progress = Math.round(ratio * (this.height - fillMinimum.y));\n\n if (progress > 0) {\n this.drawStyleBox(fillStyle, 0, 0, this.width, progress + fillMinimum.y);\n }\n\n break;\n }\n case ProgressFillMode.BottomToTop: {\n const progress = Math.round(ratio * (this.height - fillMinimum.y));\n\n if (progress > 0) {\n const remaining = Math.round((1 - ratio) * (this.height - fillMinimum.y));\n\n this.drawStyleBox(fillStyle, 0, remaining, this.width, progress + fillMinimum.y);\n }\n\n break;\n }\n }\n\n if (this.showPercentage) {\n const text = `${Math.round(ratio * 100)}%`;\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const measurement = this.measureText(text, fontSize, font.family, font.weight, font.style);\n\n this.drawText(\n (this.width - measurement.width) * 0.5,\n (this.height - measurement.lineHeight) * 0.5,\n text, fontSize, this.getThemeColor('fontColor'), font.family, font.weight, font.style,\n );\n }\n }\n\n override fromData (data: ProgressBarData): void {\n super.fromData(data);\n if (data.showPercentage !== undefined) {\n this.showPercentage = data.showPercentage;\n }\n if (data.fillMode !== undefined) {\n this.fillMode = data.fillMode;\n }\n }\n\n}\n","import {\n EventEmitter,\n MouseButton,\n MouseButtonMask,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n\n math } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport type { ControlEvent } from '../core/control';\nimport { CursorShape, FocusMode, MouseFilter } from '../core/enums';\n\ntype EditSnapshot = {\n text: string,\n selectionStart: number,\n selectionEnd: number,\n};\n\nexport type TextInputEvent = ControlEvent & {\n textChanged: [text: string],\n textSubmitted: [text: string],\n};\n\nexport abstract class TextInput extends Control {\n static override readonly themeType: string = 'TextInput';\n protected abstract readonly multiline: boolean;\n private readonly textEventEmitter = new EventEmitter<TextInputEvent>();\n private _text = '';\n private _placeholderText = '';\n private _editable = true;\n private _maxLength = 0;\n private selectionStart = 0;\n private selectionEnd = 0;\n private selectionAnchor = 0;\n private selecting = false;\n private selectingWords = false;\n private wordSelectionStart = 0;\n private wordSelectionEnd = 0;\n private textarea: HTMLTextAreaElement | null = null;\n private textareaFocusTimer: ReturnType<typeof setTimeout> | null = null;\n private composing = false;\n private readonly undoStack: EditSnapshot[] = [];\n private readonly redoStack: EditSnapshot[] = [];\n\n constructor (engine: Engine) {\n super(engine);\n this.focusMode = FocusMode.All;\n this.mouseFilter = MouseFilter.Stop;\n this.defaultCursorShape = CursorShape.Ibeam;\n }\n\n get text (): string { return this._text; }\n set text (value: string) { this.setText(value, false); }\n\n get placeholderText (): string { return this._placeholderText; }\n set placeholderText (value: string) {\n if (this._placeholderText !== value) {\n this._placeholderText = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n get editable (): boolean { return this._editable; }\n set editable (value: boolean) {\n if (this._editable !== value) {\n this._editable = value;\n if (this.textarea) {this.textarea.readOnly = !value;}\n this.updateMinimumSize();\n }\n }\n\n get maxLength (): number { return this._maxLength; }\n set maxLength (value: number) {\n this._maxLength = Math.max(0, Math.floor(value));\n if (this._maxLength > 0 && this._text.length > this._maxLength) {\n this.setText(this._text.slice(0, this._maxLength), false);\n }\n if (this.textarea) {\n if (this._maxLength > 0) {this.textarea.maxLength = this._maxLength;} else {this.textarea.removeAttribute('maxlength');}\n }\n }\n\n get caretColumn (): number { return this.selectionEnd; }\n set caretColumn (value: number) { this.setSelection(value, value); }\n\n get hasSelection (): boolean { return this.selectionStart !== this.selectionEnd; }\n\n override on<E extends keyof TextInputEvent> (\n eventName: E,\n listener: EventEmitterListener<TextInputEvent[E]>,\n ): void {\n if (eventName === 'textChanged' || eventName === 'textSubmitted') {\n this.textEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof TextInputEvent> (\n eventName: E,\n listener: EventEmitterListener<TextInputEvent[E]>,\n ): void {\n if (eventName === 'textChanged' || eventName === 'textSubmitted') {\n this.textEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n selectAll (): void { this.setSelection(0, this._text.length); }\n deselect (): void { this.setSelection(this.selectionEnd, this.selectionEnd); }\n getSelectedText (): string {\n const start = Math.min(this.selectionStart, this.selectionEnd);\n const end = Math.max(this.selectionStart, this.selectionEnd);\n\n return this._text.slice(start, end);\n }\n\n setSelection (start: number, end = start): void {\n this.selectionStart = Math.max(0, Math.min(this._text.length, Math.floor(start)));\n this.selectionEnd = Math.max(0, Math.min(this._text.length, Math.floor(end)));\n this.selectionAnchor = this.selectionStart;\n this.syncTextareaSelection();\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {return;}\n this.grabFocus(true);\n this.cancelTextareaFocus();\n const index = this.getCharacterIndex(event.position);\n\n if (event.doubleClick) {\n const [start, end] = this.getWordRange(index);\n\n this.wordSelectionStart = start;\n this.wordSelectionEnd = end;\n this.setSelection(start, end);\n this.selectingWords = true;\n this.selecting = true;\n } else if (event.shiftPressed) {\n this.moveCaret(index, true);\n this.selectingWords = false;\n this.selecting = true;\n } else {\n this.selectionAnchor = index;\n this.setSelection(index, index);\n this.selectingWords = false;\n this.selecting = true;\n }\n event.accept();\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n if (!this.selecting || (event.buttonMask & MouseButtonMask.Left) === 0) {return;}\n const index = this.getCharacterIndex(event.position);\n\n if (this.selectingWords) {\n const [start, end] = this.getWordRange(index);\n\n if (index < this.wordSelectionStart) {\n this.setSelection(this.wordSelectionEnd, start);\n } else {\n this.setSelection(this.wordSelectionStart, end);\n }\n } else {\n this.setSelection(this.selectionAnchor, index);\n }\n event.accept();\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left && this.selecting) {\n this.selecting = false;\n this.selectingWords = false;\n this.focusTextarea();\n event.accept();\n }\n }\n\n override onKeyDown (event: InputEventKey): void {\n const command = event.ctrlPressed || event.metaPressed;\n\n if (command && event.keycode.toLowerCase() === 'a') {\n this.selectAll();\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'c') {\n this.copySelection();\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'x' && this.editable) {\n this.copySelection();\n this.replaceSelection('');\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'v' && this.editable) {\n this.pasteClipboard();\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'z' && this.editable) {\n if (event.shiftPressed) {this.redo();} else {this.undo();}\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'y' && this.editable) {\n this.redo();\n event.accept();\n\n return;\n }\n if (event.keycode === 'ArrowLeft' || event.keycode === 'ArrowRight') {\n const direction = event.keycode === 'ArrowLeft' ? -1 : 1;\n const next = direction < 0\n ? getPreviousCharacterIndex(this._text, this.selectionEnd)\n : getNextCharacterIndex(this._text, this.selectionEnd);\n\n this.moveCaret(next, event.shiftPressed);\n event.accept();\n\n return;\n }\n if (event.keycode === 'Home' || event.keycode === 'End') {\n const next = event.keycode === 'Home' ? this.getLineStart(this.selectionEnd) : this.getLineEnd(this.selectionEnd);\n\n this.moveCaret(next, event.shiftPressed);\n event.accept();\n\n return;\n }\n if (!this.editable) {return;}\n if (event.keycode === 'Backspace') {\n this.erase(-1);\n event.accept();\n\n return;\n }\n if (event.keycode === 'Delete') {\n this.erase(1);\n event.accept();\n\n return;\n }\n if (event.keycode === 'Enter') {\n if (this.multiline) {this.replaceSelection('\\n');} else {this.submit();}\n event.accept();\n\n return;\n }\n if (!command && !event.altPressed && event.unicode >= 32) {\n this.replaceSelection(String.fromCodePoint(event.unicode));\n event.accept();\n }\n }\n\n override onGotFocus (): void {\n this.activateTextarea();\n }\n\n override onLostFocus (): void {\n this.selecting = false;\n this.selectingWords = false;\n this.removeTextarea();\n }\n\n override onDestroy (): void {\n this.removeTextarea();\n }\n\n protected getDisplayText (): string {\n return this._text;\n }\n\n protected getSelectionRange (): [number, number] {\n return [Math.min(this.selectionStart, this.selectionEnd), Math.max(this.selectionStart, this.selectionEnd)];\n }\n\n protected moveCaret (index: number, extendSelection: boolean): void {\n const next = Math.max(0, Math.min(this._text.length, Math.floor(index)));\n\n if (extendSelection) {\n this.selectionStart = this.selectionAnchor;\n this.selectionEnd = next;\n this.syncTextareaSelection();\n } else {\n this.setSelection(next, next);\n }\n }\n\n protected getTextFont () {\n return this.getThemeFont('font');\n }\n\n protected getTextFontSize (): number {\n return this.getThemeFontSize('fontSize');\n }\n\n protected getTextColor (): math.Color {\n if (!this.editable) {return this.getThemeColor('fontReadOnlyColor');}\n if (this._text.length === 0) {return this.getThemeColor('fontPlaceholderColor');}\n\n return this.getThemeColor('fontColor');\n }\n\n protected getTextStyleBox () {\n return this.getThemeStyleBox(this.editable ? 'normal' : 'readOnly');\n }\n\n protected drawTextBackground (): void {\n this.drawStyleBox(this.getTextStyleBox(), 0, 0, this.width, this.height);\n if (this.hasFocus(true)) {\n this.drawStyleBox(this.getThemeStyleBox('focus'), 0, 0, this.width, this.height);\n }\n }\n\n protected drawSelection (x: number, y: number, width: number, height: number): void {\n if (width > 0) {this.fillRect(x, y, width, height, this.getThemeColor('selectionColor'));}\n }\n\n protected drawCaret (x: number, y: number, height: number): void {\n if (this.hasFocus() && !this.hasSelection) {\n this.fillRect(x, y, Math.max(1, this.getThemeConstant('caretWidth')), height, this.getThemeColor('caretColor'));\n }\n }\n\n protected abstract getCharacterIndex (position: math.Vector2): number;\n protected onTextValueChanged (): void {}\n\n private setText (value: string, signal: boolean): void {\n const limited = this._maxLength > 0 ? value.slice(0, this._maxLength) : value;\n\n if (this._text === limited) {return;}\n this._text = limited;\n this.selectionStart = Math.min(this.selectionStart, limited.length);\n this.selectionEnd = Math.min(this.selectionEnd, limited.length);\n this.onTextValueChanged();\n if (this.textarea && this.textarea.value !== limited) {this.textarea.value = limited;}\n this.updateMinimumSize();\n this.updateDesiredSize();\n if (signal) {this.textEventEmitter.emit('textChanged', limited);}\n }\n\n private replaceSelection (value: string): void {\n if (!this.editable) {return;}\n const [start, end] = this.getSelectionRange();\n\n this.pushUndo();\n const allowed = this._maxLength > 0\n ? value.slice(0, Math.max(0, this._maxLength - (this._text.length - (end - start))))\n : value;\n const next = `${this._text.slice(0, start)}${allowed}${this._text.slice(end)}`;\n const caret = start + allowed.length;\n\n this.setText(next, true);\n this.setSelection(caret, caret);\n this.redoStack.length = 0;\n }\n\n private erase (direction: number): void {\n if (this.hasSelection) {\n this.replaceSelection('');\n\n return;\n }\n const caret = this.selectionEnd;\n const start = direction < 0 ? getPreviousCharacterIndex(this._text, caret) : caret;\n const end = direction < 0 ? caret : getNextCharacterIndex(this._text, caret);\n\n if (start === end) {return;}\n this.setSelection(start, end);\n this.replaceSelection('');\n }\n\n private getLineStart (index: number): number {\n return this.multiline ? this._text.lastIndexOf('\\n', Math.max(0, index - 1)) + 1 : 0;\n }\n\n private getLineEnd (index: number): number {\n if (!this.multiline) {return this._text.length;}\n const end = this._text.indexOf('\\n', index);\n\n return end === -1 ? this._text.length : end;\n }\n\n private submit (): void {\n this.textEventEmitter.emit('textSubmitted', this._text);\n this.releaseFocus();\n }\n\n private pushUndo (): void {\n const snapshot = this.snapshot();\n const previous = this.undoStack[this.undoStack.length - 1];\n\n if (!previous || previous.text !== snapshot.text || previous.selectionStart !== snapshot.selectionStart\n || previous.selectionEnd !== snapshot.selectionEnd) {\n this.undoStack.push(snapshot);\n if (this.undoStack.length > 100) {this.undoStack.shift();}\n }\n }\n\n private undo (): void {\n const snapshot = this.undoStack.pop();\n\n if (!snapshot) {return;}\n this.redoStack.push(this.snapshot());\n this.restore(snapshot);\n }\n\n private redo (): void {\n const snapshot = this.redoStack.pop();\n\n if (!snapshot) {return;}\n this.undoStack.push(this.snapshot());\n this.restore(snapshot);\n }\n\n private snapshot (): EditSnapshot {\n return { text: this._text, selectionStart: this.selectionStart, selectionEnd: this.selectionEnd };\n }\n\n private restore (snapshot: EditSnapshot): void {\n this.setText(snapshot.text, true);\n this.setSelection(snapshot.selectionStart, snapshot.selectionEnd);\n }\n\n private copySelection (): void {\n const value = this.getSelectedText();\n\n if (value && typeof navigator !== 'undefined' && navigator.clipboard) {\n void navigator.clipboard.writeText(value);\n }\n }\n\n private pasteClipboard (): void {\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n void navigator.clipboard.readText().then(value => this.replaceSelection(value));\n }\n }\n\n private getWordRange (index: number): [number, number] {\n if (this._text.length === 0) {return [0, 0];}\n const position = Math.max(0, Math.min(this._text.length - 1, index));\n\n for (const match of this._text.matchAll(/[\\p{L}\\p{N}_]+|\\s+|[^\\p{L}\\p{N}_\\s]+/gu)) {\n const start = match.index;\n const end = start + match[0].length;\n\n if (position >= start && position < end) {return [start, end];}\n }\n\n return [position, position + 1];\n }\n\n private activateTextarea (): void {\n if (typeof document === 'undefined' || this.textarea) {return;}\n const textarea = document.createElement('textarea');\n\n textarea.value = this._text;\n textarea.readOnly = !this.editable;\n if (this._maxLength > 0) {textarea.maxLength = this._maxLength;}\n textarea.wrap = this.multiline ? 'soft' : 'off';\n textarea.setAttribute('aria-hidden', 'true');\n textarea.style.cssText = 'position:fixed;left:-10000px;top:0;width:1px;height:1px;opacity:0;pointer-events:none;';\n textarea.addEventListener('beforeinput', this.onBeforeInput);\n textarea.addEventListener('input', this.onTextareaInput);\n textarea.addEventListener('select', this.onTextareaSelect);\n textarea.addEventListener('compositionstart', this.onCompositionStart);\n textarea.addEventListener('compositionend', this.onCompositionEnd);\n textarea.addEventListener('keydown', this.onTextareaKeyDown);\n textarea.addEventListener('blur', this.onTextareaBlur);\n document.body.appendChild(textarea);\n this.textarea = textarea;\n this.syncTextareaSelection();\n this.scheduleTextareaFocus();\n }\n\n private removeTextarea (): void {\n this.cancelTextareaFocus();\n const textarea = this.textarea;\n\n if (!textarea) {return;}\n this.textarea = null;\n textarea.removeEventListener('beforeinput', this.onBeforeInput);\n textarea.removeEventListener('input', this.onTextareaInput);\n textarea.removeEventListener('select', this.onTextareaSelect);\n textarea.removeEventListener('compositionstart', this.onCompositionStart);\n textarea.removeEventListener('compositionend', this.onCompositionEnd);\n textarea.removeEventListener('keydown', this.onTextareaKeyDown);\n textarea.removeEventListener('blur', this.onTextareaBlur);\n textarea.remove();\n this.composing = false;\n }\n\n private syncTextareaSelection (): void {\n if (!this.textarea) {return;}\n const start = Math.min(this.selectionStart, this.selectionEnd);\n const end = Math.max(this.selectionStart, this.selectionEnd);\n\n this.textarea.setSelectionRange(start, end, this.selectionEnd < this.selectionStart ? 'backward' : 'forward');\n }\n\n private scheduleTextareaFocus (): void {\n this.cancelTextareaFocus();\n this.textareaFocusTimer = setTimeout(() => {\n this.textareaFocusTimer = null;\n this.focusTextarea();\n });\n }\n\n private cancelTextareaFocus (): void {\n if (this.textareaFocusTimer !== null) {\n clearTimeout(this.textareaFocusTimer);\n this.textareaFocusTimer = null;\n }\n }\n\n private focusTextarea (): void {\n if (this.textarea && this.hasFocus() && document.activeElement !== this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private readonly onBeforeInput = (): void => {\n this.pushUndo();\n };\n\n private readonly onTextareaInput = (): void => {\n if (!this.textarea) {return;}\n this.setText(this.textarea.value, true);\n this.selectionStart = this.textarea.selectionStart;\n this.selectionEnd = this.textarea.selectionEnd;\n if (!this.composing) {this.redoStack.length = 0;}\n };\n\n private readonly onTextareaSelect = (): void => {\n if (!this.textarea) {return;}\n if (this.textarea.selectionDirection === 'backward') {\n this.selectionStart = this.textarea.selectionEnd;\n this.selectionEnd = this.textarea.selectionStart;\n } else {\n this.selectionStart = this.textarea.selectionStart;\n this.selectionEnd = this.textarea.selectionEnd;\n }\n this.selectionAnchor = this.selectionStart;\n };\n\n private readonly onCompositionStart = (): void => { this.composing = true; };\n private readonly onCompositionEnd = (): void => { this.composing = false; };\n\n private readonly onTextareaKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'Enter' && !this.multiline && !event.isComposing) {\n event.preventDefault();\n this.submit();\n }\n };\n\n private readonly onTextareaBlur = (): void => {\n if (this.textarea && this.hasFocus()) {this.releaseFocus();}\n };\n}\n\nfunction getPreviousCharacterIndex (value: string, index: number): number {\n const previous = Math.max(0, index - 1);\n\n if (previous > 0 && isLowSurrogate(value.charCodeAt(previous)) && isHighSurrogate(value.charCodeAt(previous - 1))) {\n return previous - 1;\n }\n\n return previous;\n}\n\nfunction getNextCharacterIndex (value: string, index: number): number {\n if (index >= value.length) {return value.length;}\n\n return Math.min(\n value.length,\n index + (isHighSurrogate(value.charCodeAt(index)) && isLowSurrogate(value.charCodeAt(index + 1)) ? 2 : 1),\n );\n}\n\nfunction isHighSurrogate (value: number): boolean {\n return value >= 0xd800 && value <= 0xdbff;\n}\n\nfunction isLowSurrogate (value: number): boolean {\n return value >= 0xdc00 && value <= 0xdfff;\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport type { LineEditData } from '../data';\nimport { HorizontalAlignment } from './enums';\nimport { TextInput } from './text-input';\n\n@effectsClass('LineEdit')\nexport class LineEdit extends TextInput {\n static override readonly themeType: string = 'LineEdit';\n protected readonly multiline = false;\n alignment = HorizontalAlignment.Left;\n private scrollOffset = 0;\n private _secret = false;\n private _secretCharacter = '•';\n\n constructor (engine: Engine, text = '') {\n super(engine);\n this.text = text;\n }\n\n get secret (): boolean { return this._secret; }\n set secret (value: boolean) {\n if (this._secret !== value) {\n this._secret = value;\n this.updateDesiredSize();\n }\n }\n\n get secretCharacter (): string { return this._secretCharacter; }\n set secretCharacter (value: string) {\n const character = Array.from(value)[0] ?? '';\n\n if (this._secretCharacter !== character) {\n this._secretCharacter = character;\n this.updateDesiredSize();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n const style = this.getTextStyleBox();\n const margins = style.getContentMargins();\n const font = this.getTextFont();\n const measurement = this.measureText('M', this.getTextFontSize(), font.family, font.weight, font.style);\n\n return new math.Vector2(margins.left + margins.right + 24, margins.top + margins.bottom + measurement.lineHeight);\n }\n\n override getDesiredSize (): math.Vector2 {\n const style = this.getTextStyleBox();\n const margins = style.getContentMargins();\n const font = this.getTextFont();\n const display = this.getVisibleText() || this.placeholderText;\n const measurement = this.measureText(display, this.getTextFontSize(), font.family, font.weight, font.style);\n\n return new math.Vector2(\n margins.left + margins.right + measurement.width,\n margins.top + margins.bottom + measurement.lineHeight,\n );\n }\n\n override draw (): void {\n this.drawTextBackground();\n const style = this.getTextStyleBox();\n const margins = style.getContentMargins();\n const contentWidth = Math.max(0, this.width - margins.left - margins.right);\n const display = this.getVisibleText();\n const shown = display || this.placeholderText;\n const font = this.getTextFont();\n const fontSize = this.getTextFontSize();\n const full = this.measureText(shown, fontSize, font.family, font.weight, font.style);\n const textY = margins.top + Math.max(0, (this.height - margins.top - margins.bottom - full.lineHeight) * 0.5);\n\n this.updateScrollOffset(contentWidth);\n const textX = this.getAlignedTextX(full.width, contentWidth, margins.left) - this.scrollOffset;\n\n this.engine.graphics.pushClipRect(margins.left, margins.top, contentWidth, Math.max(0, this.height - margins.top - margins.bottom));\n if (display) {\n const [selectionStart, selectionEnd] = this.getSelectionRange();\n const prefix = this.measurePrefix(selectionStart);\n const selected = this.measurePrefix(selectionEnd) - prefix;\n\n this.drawSelection(textX + prefix, textY, selected, full.lineHeight);\n }\n this.drawText(textX, textY, shown, fontSize, this.getTextColor(), font.family, font.weight, font.style);\n if (display) {\n this.drawCaret(textX + this.measurePrefix(this.caretColumn), textY, full.lineHeight);\n } else {\n this.drawCaret(textX, textY, full.lineHeight);\n }\n this.engine.graphics.popClipRect();\n }\n\n protected override getDisplayText (): string {\n return this.getVisibleText();\n }\n\n protected override getCharacterIndex (position: math.Vector2): number {\n const style = this.getTextStyleBox();\n const margins = style.getContentMargins();\n const contentWidth = Math.max(0, this.width - margins.left - margins.right);\n const fullWidth = this.measurePrefix(this.text.length);\n const origin = this.getAlignedTextX(fullWidth, contentWidth, margins.left) - this.scrollOffset;\n const x = position.x - origin;\n\n if (x <= 0) {return 0;}\n const boundaries = getCharacterBoundaries(this.text);\n\n for (let index = 1; index < boundaries.length; index++) {\n const previous = this.measurePrefix(boundaries[index - 1]);\n const next = this.measurePrefix(boundaries[index]);\n\n if (x < (previous + next) * 0.5) {return boundaries[index - 1];}\n }\n\n return this.text.length;\n }\n\n private getVisibleText (): string {\n return this.secret\n ? (this.secretCharacter || '•').repeat(Array.from(this.text).length)\n : this.text;\n }\n\n private measurePrefix (column: number): number {\n const font = this.getTextFont();\n const prefix = this.text.slice(0, column);\n const visiblePrefix = this.secret\n ? (this.secretCharacter || '•').repeat(Array.from(prefix).length)\n : prefix;\n\n return this.measureText(\n visiblePrefix, this.getTextFontSize(), font.family, font.weight, font.style,\n ).width;\n }\n\n private updateScrollOffset (width: number): void {\n if (!this.hasFocus()) {\n this.scrollOffset = 0;\n\n return;\n }\n const caret = this.measurePrefix(this.caretColumn);\n\n if (caret - this.scrollOffset > width) {this.scrollOffset = caret - width;}\n if (caret < this.scrollOffset) {this.scrollOffset = caret;}\n }\n\n private getAlignedTextX (textWidth: number, contentWidth: number, left: number): number {\n if (this.alignment === HorizontalAlignment.Center) {return left + (contentWidth - textWidth) * 0.5;}\n if (this.alignment === HorizontalAlignment.Right) {return left + contentWidth - textWidth;}\n\n return left;\n }\n\n override fromData (data: LineEditData): void {\n super.fromData(data);\n if (data.text !== undefined) {this.text = data.text;}\n if (data.placeholderText !== undefined) {this.placeholderText = data.placeholderText;}\n if (data.editable !== undefined) {this.editable = data.editable;}\n if (data.maxLength !== undefined) {this.maxLength = data.maxLength;}\n if (data.secret !== undefined) {this.secret = data.secret;}\n if (data.secretCharacter !== undefined) {this.secretCharacter = data.secretCharacter;}\n if (data.alignment !== undefined) {this.alignment = data.alignment;}\n }\n}\n\nfunction getCharacterBoundaries (value: string): number[] {\n const boundaries = [0];\n let offset = 0;\n\n for (const character of value) {\n offset += character.length;\n boundaries.push(offset);\n }\n\n return boundaries;\n}\n","import {\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine, InputEventKey, InputEventMouseButton } from '@galacean/effects';\nimport type { TextEditData } from '../data';\nimport { TextInput } from './text-input';\n\n@effectsClass('TextEdit')\nexport class TextEdit extends TextInput {\n static override readonly themeType: string = 'TextEdit';\n protected readonly multiline = true;\n private scrollLine = 0;\n\n constructor (engine: Engine, text = '') {\n super(engine);\n this.text = text;\n }\n\n override getMinimumSize (): math.Vector2 {\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const line = this.measureText('M', this.getTextFontSize(), font.family, font.weight, font.style);\n\n return new math.Vector2(margins.left + margins.right + 48, margins.top + margins.bottom + line.lineHeight * 2);\n }\n\n override getDesiredSize (): math.Vector2 {\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const fontSize = this.getTextFontSize();\n const lines = (this.text || this.placeholderText).split('\\n');\n let width = 0;\n let lineHeight = this.measureText('M', fontSize, font.family, font.weight, font.style).lineHeight;\n\n for (const line of lines) {\n const measurement = this.measureText(line, fontSize, font.family, font.weight, font.style);\n\n width = Math.max(width, measurement.width);\n lineHeight = Math.max(lineHeight, measurement.lineHeight);\n }\n\n return new math.Vector2(\n margins.left + margins.right + width,\n margins.top + margins.bottom + lineHeight * Math.max(2, lines.length),\n );\n }\n\n override draw (): void {\n this.drawTextBackground();\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const fontSize = this.getTextFontSize();\n const source = this.text || this.placeholderText;\n const lines = source.split('\\n');\n\n this.scrollLine = Math.max(0, Math.min(lines.length - 1, this.scrollLine));\n const lineHeight = this.measureText('M', fontSize, font.family, font.weight, font.style).lineHeight;\n const [selectionStart, selectionEnd] = this.getSelectionRange();\n let textIndex = lines.slice(0, this.scrollLine).reduce((total, line) => total + line.length + 1, 0);\n\n this.engine.graphics.pushClipRect(\n margins.left, margins.top,\n Math.max(0, this.width - margins.left - margins.right),\n Math.max(0, this.height - margins.top - margins.bottom),\n );\n for (let lineIndex = this.scrollLine; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex];\n const y = margins.top + (lineIndex - this.scrollLine) * lineHeight;\n\n if (y >= this.height - margins.bottom) {break;}\n if (this.text) {\n const lineStart = textIndex;\n const lineEnd = lineStart + line.length;\n const selectedStart = Math.max(lineStart, selectionStart);\n const selectedEnd = Math.min(lineEnd, selectionEnd);\n\n if (selectedStart < selectedEnd) {\n const prefix = this.measureLine(line.slice(0, selectedStart - lineStart));\n const selected = this.measureLine(line.slice(selectedStart - lineStart, selectedEnd - lineStart));\n\n this.drawSelection(margins.left + prefix, y, selected, lineHeight);\n }\n }\n this.drawText(margins.left, y, line, fontSize, this.getTextColor(), font.family, font.weight, font.style);\n if (this.text && this.caretColumn >= textIndex && this.caretColumn <= textIndex + line.length) {\n this.drawCaret(margins.left + this.measureLine(line.slice(0, this.caretColumn - textIndex)), y, lineHeight);\n }\n textIndex += line.length + 1;\n }\n this.engine.graphics.popClipRect();\n }\n\n override onMouseWheel (event: InputEventMouseButton): void {\n const lines = this.text.split('\\n').length;\n\n if (event.buttonIndex === MouseButton.WheelUp) {\n this.scrollLine = Math.max(0, this.scrollLine - Math.max(1, Math.round(event.factor)));\n event.accept();\n } else if (event.buttonIndex === MouseButton.WheelDown) {\n this.scrollLine = Math.min(Math.max(0, lines - 1), this.scrollLine + Math.max(1, Math.round(event.factor)));\n event.accept();\n }\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (event.keycode === 'ArrowUp' || event.keycode === 'ArrowDown') {\n const next = this.getVerticalCaretIndex(event.keycode === 'ArrowUp' ? -1 : 1);\n\n this.moveCaret(next, event.shiftPressed);\n this.ensureCaretLineVisible();\n event.accept();\n\n return;\n }\n super.onKeyDown(event);\n }\n\n protected override getCharacterIndex (position: math.Vector2): number {\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const lineHeight = this.measureText(\n 'M', this.getTextFontSize(), font.family, font.weight, font.style,\n ).lineHeight;\n const lines = this.text.split('\\n');\n const lineIndex = Math.max(0, Math.min(lines.length - 1, Math.floor((position.y - margins.top) / lineHeight) + this.scrollLine));\n const line = lines[lineIndex];\n let index = lines.slice(0, lineIndex).reduce((total, value) => total + value.length + 1, 0);\n const x = position.x - margins.left;\n\n for (let column = 1; column <= line.length; column++) {\n const previous = this.measureLine(line.slice(0, column - 1));\n const next = this.measureLine(line.slice(0, column));\n\n if (x < (previous + next) * 0.5) {return index + column - 1;}\n }\n index += line.length;\n\n return index;\n }\n\n private measureLine (value: string): number {\n const font = this.getTextFont();\n\n return this.measureText(value, this.getTextFontSize(), font.family, font.weight, font.style).width;\n }\n\n private getVerticalCaretIndex (direction: number): number {\n const lines = this.text.split('\\n');\n const caret = this.caretColumn;\n let lineStart = 0;\n let lineIndex = 0;\n\n for (; lineIndex < lines.length - 1; lineIndex++) {\n const lineEnd = lineStart + lines[lineIndex].length;\n\n if (caret <= lineEnd) {break;}\n lineStart = lineEnd + 1;\n }\n const column = caret - lineStart;\n const targetLine = Math.max(0, Math.min(lines.length - 1, lineIndex + direction));\n let targetStart = 0;\n\n for (let index = 0; index < targetLine; index++) {targetStart += lines[index].length + 1;}\n\n return targetStart + Math.min(column, lines[targetLine].length);\n }\n\n private ensureCaretLineVisible (): void {\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const lineHeight = this.measureText(\n 'M', this.getTextFontSize(), font.family, font.weight, font.style,\n ).lineHeight;\n const visibleLines = Math.max(1, Math.floor((this.height - margins.top - margins.bottom) / lineHeight));\n const caretLine = this.text.slice(0, this.caretColumn).split('\\n').length - 1;\n\n if (caretLine < this.scrollLine) {this.scrollLine = caretLine;} else if (caretLine >= this.scrollLine + visibleLines) {this.scrollLine = caretLine - visibleLines + 1;}\n }\n\n protected override onTextValueChanged (): void {\n const lineCount = this.text.split('\\n').length;\n const caretLine = this.text.slice(0, this.caretColumn).split('\\n').length - 1;\n\n this.scrollLine = Math.max(0, Math.min(lineCount - 1, this.scrollLine));\n if (caretLine < this.scrollLine) {this.scrollLine = caretLine;}\n }\n\n override fromData (data: TextEditData): void {\n super.fromData(data);\n if (data.text !== undefined) {this.text = data.text;}\n if (data.placeholderText !== undefined) {this.placeholderText = data.placeholderText;}\n if (data.editable !== undefined) {this.editable = data.editable;}\n if (data.maxLength !== undefined) {this.maxLength = data.maxLength;}\n }\n}\n","import { EventEmitter, effectsClass } from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n math } from '@galacean/effects';\nimport { FocusMode } from '../core/enums';\nimport type { Control } from '../core/control';\nimport { PanelContainer } from '../layout/panel-container';\n\nexport type PopupEvent = {\n popupOpened: [],\n popupClosed: [],\n};\n\nexport abstract class Popup extends PanelContainer {\n static override readonly themeType: string = 'Popup';\n private readonly popupEventEmitter = new EventEmitter<PopupEvent>();\n\n constructor (engine: Engine) {\n super(engine);\n this.visible = false;\n this.focusMode = FocusMode.All;\n }\n\n onPopup<E extends keyof PopupEvent> (\n eventName: E,\n listener: EventEmitterListener<PopupEvent[E]>,\n ): void {\n this.popupEventEmitter.on(eventName, listener);\n }\n\n offPopup<E extends keyof PopupEvent> (\n eventName: E,\n listener: EventEmitterListener<PopupEvent[E]>,\n ): void {\n this.popupEventEmitter.off(eventName, listener);\n }\n\n popup (position: math.Vector2, source: Control | null = null): void {\n const root = source?.root ?? this.root;\n\n root?.popupControl(this, source, position);\n }\n\n hidePopup (): void {\n this.root?.closePopupControl(this);\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (event.keycode === 'Escape') {\n this.hidePopup();\n event.accept();\n }\n }\n\n override onPopupOpened (): void {\n this.popupEventEmitter.emit('popupOpened');\n }\n\n override onPopupClosed (): void {\n this.popupEventEmitter.emit('popupClosed');\n }\n\n override onDestroy (): void {\n this.root?.closePopupControl(this);\n }\n}\n\n@effectsClass('PopupPanel')\nexport class PopupPanel extends Popup {\n static override readonly themeType: string = 'PopupPanel';\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n Texture,\n} from '@galacean/effects';\nimport type { PopupMenuData } from '../data';\nimport type { ControlEvent } from '../core/control';\nimport { Popup } from './popup';\n\nexport type PopupMenuItemId = number | string;\n\nexport type PopupMenuItem = {\n id: PopupMenuItemId,\n text: string,\n icon?: Texture | null,\n disabled?: boolean,\n separator?: boolean,\n checked?: boolean,\n};\n\nexport type PopupMenuEvent = ControlEvent & {\n idPressed: [id: PopupMenuItemId],\n};\n\n@effectsClass('PopupMenu')\nexport class PopupMenu extends Popup {\n static override readonly themeType: string = 'PopupMenu';\n private readonly menuEventEmitter = new EventEmitter<PopupMenuEvent>();\n private readonly items: PopupMenuItem[] = [];\n private hoveredIndex = -1;\n\n override on<E extends keyof PopupMenuEvent> (\n eventName: E,\n listener: EventEmitterListener<PopupMenuEvent[E]>,\n ): void {\n if (eventName === 'idPressed') {\n this.menuEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName as never, listener as never);\n }\n }\n\n override off<E extends keyof PopupMenuEvent> (\n eventName: E,\n listener: EventEmitterListener<PopupMenuEvent[E]>,\n ): void {\n if (eventName === 'idPressed') {\n this.menuEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName as never, listener as never);\n }\n }\n\n addItem (text: string, id: PopupMenuItemId = this.items.length, icon: Texture | null = null): void {\n this.items.push({ id, text, icon });\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n\n addSeparator (text = ''): void {\n this.items.push({ id: `separator-${this.items.length}`, text, separator: true, disabled: true });\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n\n clear (): void {\n this.items.length = 0;\n this.hoveredIndex = -1;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n\n getItemCount (): number { return this.items.length; }\n getItem (index: number): PopupMenuItem | undefined {\n const item = this.items[index];\n\n return item ? { ...item } : undefined;\n }\n\n setItemDisabled (index: number, disabled: boolean): void {\n if (this.items[index]) {this.items[index].disabled = disabled;}\n }\n\n setItemChecked (index: number, checked: boolean): void {\n if (this.items[index]) {this.items[index].checked = checked;}\n }\n\n override getMinimumSize (): math.Vector2 {\n const panel = this.getThemeStyleBox('panel').getContentMargins();\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const itemHeight = this.getThemeConstant('itemHeight');\n let width = this.getThemeConstant('horizontalPadding') * 2;\n let height = 0;\n\n for (const item of this.items) {\n if (item.separator) {\n height += this.getThemeConstant('separatorHeight');\n } else {\n width = Math.max(width, this.measureText(item.text, fontSize, font.family, font.weight, font.style).width\n + this.getThemeConstant('horizontalPadding') * 2 + this.getThemeConstant('iconWidth'));\n height += itemHeight;\n }\n }\n\n return new math.Vector2(width + panel.left + panel.right, height + panel.top + panel.bottom);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.getMinimumSize();\n }\n\n override draw (): void {\n super.draw();\n const panel = this.getThemeStyleBox('panel').getContentMargins();\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const itemHeight = this.getThemeConstant('itemHeight');\n const padding = this.getThemeConstant('horizontalPadding');\n const iconWidth = this.getThemeConstant('iconWidth');\n let y = panel.top;\n\n for (let index = 0; index < this.items.length; index++) {\n const item = this.items[index];\n\n if (item.separator) {\n const height = this.getThemeConstant('separatorHeight');\n\n this.drawStyleBox(\n this.getThemeStyleBox('separator'), panel.left + padding, y + height * 0.5,\n Math.max(0, this.width - panel.left - panel.right - padding * 2), 1,\n );\n y += height;\n continue;\n }\n if (index === this.hoveredIndex && !item.disabled) {\n this.drawStyleBox(\n this.getThemeStyleBox('hover'), panel.left, y,\n Math.max(0, this.width - panel.left - panel.right), itemHeight,\n );\n }\n if (item.checked) {\n this.drawText(panel.left + padding, y + 2, '✓', fontSize, this.getThemeColor('checkColor'),\n font.family, font.weight, font.style);\n }\n if (item.icon) {\n const iconSize = Math.min(itemHeight - 4, iconWidth);\n\n this.drawTexture(panel.left + padding, y + (itemHeight - iconSize) * 0.5, iconSize, iconSize, item.icon);\n }\n const measurement = this.measureText(item.text, fontSize, font.family, font.weight, font.style);\n\n this.drawText(\n panel.left + padding + iconWidth,\n y + (itemHeight - measurement.lineHeight) * 0.5,\n item.text,\n fontSize,\n this.getThemeColor(item.disabled ? 'fontDisabledColor' : 'fontColor'),\n font.family,\n font.weight,\n font.style,\n );\n y += itemHeight;\n }\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n this.hoveredIndex = this.getIndexAt(event.position.y);\n }\n\n override onMouseLeave (): void {\n this.hoveredIndex = -1;\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {return;}\n const index = this.getIndexAt(event.position.y);\n\n if (this.activateIndex(index)) {event.accept();}\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (event.keycode === 'ArrowDown' || event.keycode === 'ArrowUp') {\n this.hoveredIndex = this.findEnabledIndex(this.hoveredIndex, event.keycode === 'ArrowDown' ? 1 : -1);\n event.accept();\n\n return;\n }\n if (event.keycode === 'Enter' || event.keycode === 'Space' || event.keycode === ' ') {\n if (this.activateIndex(this.hoveredIndex)) {event.accept();}\n\n return;\n }\n super.onKeyDown(event);\n }\n\n override onPopupOpened (): void {\n this.hoveredIndex = this.findEnabledIndex(-1, 1);\n super.onPopupOpened();\n }\n\n private getIndexAt (positionY: number): number {\n const panel = this.getThemeStyleBox('panel').getContentMargins();\n const itemHeight = this.getThemeConstant('itemHeight');\n let y = panel.top;\n\n for (let index = 0; index < this.items.length; index++) {\n const height = this.items[index].separator ? this.getThemeConstant('separatorHeight') : itemHeight;\n\n if (positionY >= y && positionY < y + height) {return index;}\n y += height;\n }\n\n return -1;\n }\n\n private activateIndex (index: number): boolean {\n const item = this.items[index];\n\n if (!item || item.disabled || item.separator) {return false;}\n this.menuEventEmitter.emit('idPressed', item.id);\n this.hidePopup();\n\n return true;\n }\n\n private findEnabledIndex (origin: number, direction: number): number {\n if (this.items.length === 0) {return -1;}\n let index = origin < 0 && direction < 0 ? this.items.length : origin;\n\n for (let count = 0; count < this.items.length; count++) {\n index = (index + direction + this.items.length) % this.items.length;\n const item = this.items[index];\n\n if (!item.disabled && !item.separator) {return index;}\n }\n\n return -1;\n }\n\n override fromData (data: PopupMenuData): void {\n super.fromData(data);\n if (data.items !== undefined) {\n this.clear();\n for (const item of data.items) {\n if (item.separator) {\n this.addSeparator(item.text);\n } else {\n this.addItem(item.text, item.id);\n const index = this.items.length - 1;\n\n this.setItemDisabled(index, item.disabled ?? false);\n this.setItemChecked(index, item.checked ?? false);\n }\n }\n }\n }\n}\n","import { EventEmitter, effectsClass, math } from '@galacean/effects';\nimport type { Engine, EventEmitterListener } from '@galacean/effects';\nimport { FocusMode } from '../core/enums';\nimport type { MenuButtonData, OptionButtonData } from '../data';\nimport { Button } from './button';\nimport type { ContentInsets } from './button';\nimport { ButtonDrawMode, HorizontalAlignment } from './enums';\nimport type { PopupMenuEvent, PopupMenuItemId } from './popup-menu';\nimport { PopupMenu } from './popup-menu';\n\nconst OPTION_ARROW_GRID_SIZE = 12;\n\n@effectsClass('MenuButton')\nexport class MenuButton extends Button {\n static override readonly themeType: string = 'MenuButton';\n readonly popupMenu: PopupMenu;\n private readonly openMenu = () => this.showPopup();\n\n constructor (engine: Engine, text = '') {\n super(engine, text);\n this.focusMode = FocusMode.Accessibility;\n this.popupMenu = new PopupMenu(engine);\n this.on('pressed', this.openMenu);\n }\n\n showPopup (): void {\n const transform = this.getGlobalTransform2D().elements;\n\n this.popupMenu.setSize(Math.max(this.width, this.popupMenu.getBoundDesiredSize().x), this.popupMenu.getBoundDesiredSize().y);\n this.popupMenu.popup(new math.Vector2(transform[6], transform[7] + this.height), this);\n }\n\n override onDestroy (): void {\n this.off('pressed', this.openMenu);\n this.popupMenu.dispose();\n super.onDestroy();\n }\n\n override fromData (data: MenuButtonData): void {\n super.fromData(data);\n if (data.items !== undefined) {this.popupMenu.fromData({ items: data.items });}\n }\n}\n\nexport type OptionButtonEvent = {\n itemSelected: [id: PopupMenuItemId],\n};\n\n@effectsClass('OptionButton')\nexport class OptionButton extends MenuButton {\n static override readonly themeType: string = 'OptionButton';\n private readonly optionEventEmitter = new EventEmitter<OptionButtonEvent>();\n private _selected = -1;\n private readonly menuSelected = (id: PopupMenuItemId) => this.selectId(id, true);\n\n constructor (engine: Engine) {\n super(engine);\n this.focusMode = FocusMode.All;\n this.textAlignment = HorizontalAlignment.Left;\n this.popupMenu.on('idPressed', this.menuSelected as EventEmitterListener<PopupMenuEvent['idPressed']>);\n }\n\n protected override getContentInsets (): ContentInsets {\n const insets = super.getContentInsets();\n const arrow = this.getThemeIcon('arrow');\n const arrowWidth = arrow?.width ?? this.getThemeConstant('arrowSize');\n\n return {\n ...insets,\n right: insets.right + arrowWidth + Math.max(0, this.getThemeConstant('hSeparation')),\n };\n }\n\n protected override drawDecoration (mode: ButtonDrawMode): void {\n const arrow = this.getThemeIcon('arrow');\n const size = arrow?.width ?? this.getThemeConstant('arrowSize');\n const height = arrow?.height ?? size;\n const margin = this.getThemeConstant('arrowMargin');\n const x = Math.max(0, this.width - margin - size);\n const y = Math.floor(Math.abs(this.height - height) * 0.5);\n const color = this.getArrowColor(mode);\n\n if (arrow) {\n this.drawTexture(x, y, size, height, arrow, undefined, color);\n\n return;\n }\n const scale = size / OPTION_ARROW_GRID_SIZE;\n const startX = x + 2 * scale;\n const startY = y + 4 * scale;\n const middleX = x + 6 * scale;\n const middleY = y + 8 * scale;\n const endX = x + 10 * scale;\n const thickness = 2 * scale;\n const radius = thickness * 0.5;\n\n this.drawLine(startX, startY, middleX, middleY, color, thickness);\n this.drawLine(middleX, middleY, endX, startY, color, thickness);\n this.fillCircle(startX, startY, radius, color);\n this.fillCircle(middleX, middleY, radius, color);\n this.fillCircle(endX, startY, radius, color);\n }\n\n private getArrowColor (mode: ButtonDrawMode): math.Color {\n if (this.getThemeConstant('modulateArrow') === 0) {\n return this.getThemeColor('iconTint');\n }\n switch (mode) {\n case ButtonDrawMode.Pressed: return this.getThemeColor('fontPressedColor');\n case ButtonDrawMode.Hover: return this.getThemeColor('fontHoverColor');\n case ButtonDrawMode.HoverPressed: return this.getThemeColor('fontHoverPressedColor');\n case ButtonDrawMode.Disabled: return this.getThemeColor('fontDisabledColor');\n default: return this.hasFocus(true)\n ? this.getThemeColor('fontFocusColor')\n : this.getThemeColor('fontColor');\n }\n }\n\n get selected (): number { return this._selected; }\n set selected (value: number) { this.select(value, false); }\n\n onOption<E extends keyof OptionButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<OptionButtonEvent[E]>,\n ): void {\n this.optionEventEmitter.on(eventName, listener);\n }\n\n offOption<E extends keyof OptionButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<OptionButtonEvent[E]>,\n ): void {\n this.optionEventEmitter.off(eventName, listener);\n }\n\n addItem (text: string, id: PopupMenuItemId = this.popupMenu.getItemCount()): void {\n this.popupMenu.addItem(text, id);\n if (this._selected === -1) {this.select(0, false);}\n }\n\n clear (): void {\n this.popupMenu.clear();\n this._selected = -1;\n this.text = '';\n }\n\n select (index: number, signal = true): void {\n const item = this.popupMenu.getItem(index);\n\n if (!item || item.disabled || item.separator) {return;}\n this._selected = index;\n this.text = item.text;\n if (signal) {this.optionEventEmitter.emit('itemSelected', item.id);}\n }\n\n selectId (id: PopupMenuItemId, signal = true): void {\n for (let index = 0; index < this.popupMenu.getItemCount(); index++) {\n if (this.popupMenu.getItem(index)?.id === id) {\n this.select(index, signal);\n\n return;\n }\n }\n }\n\n override onDestroy (): void {\n this.popupMenu.off('idPressed', this.menuSelected as EventEmitterListener<PopupMenuEvent['idPressed']>);\n super.onDestroy();\n }\n\n override fromData (data: OptionButtonData): void {\n super.fromData(data);\n if (data.selected !== undefined) {this.select(data.selected, false);}\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventMouseButton,\n InputEventMouseMotion,\n} from '@galacean/effects';\nimport type { ColorPickerButtonData, ColorPickerData } from '../data';\nimport { Control, SizeFlags } from '../core/control';\nimport type { ControlEvent } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport { GridContainer } from '../layout/grid-container';\nimport { VBoxContainer } from '../layout/box-container';\nimport { HSlider } from './slider';\nimport { Label } from './label';\nimport { LineEdit } from './line-edit';\nimport { PopupPanel } from './popup';\nimport { Button } from './button';\nimport type { ContentInsets } from './button';\nimport type { ButtonDrawMode } from './enums';\nimport type { BaseButtonEvent } from './base-button';\n\ntype HSV = { h: number, s: number, v: number };\n\nexport type ColorPickerEvent = ControlEvent & {\n colorChanged: [color: math.Color],\n};\n\nexport type ColorPickerButtonEvent = BaseButtonEvent & {\n colorChanged: [color: math.Color],\n};\n\nclass ColorPlane extends Control {\n hue = 0;\n saturation = 1;\n value = 1;\n changed?: (saturation: number, value: number) => void;\n private dragging = false;\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Stop;\n this.setCustomMinimumSize(180, 120);\n }\n\n override draw (): void {\n const columns = 20;\n const rows = 12;\n\n for (let row = 0; row < rows; row++) {\n for (let column = 0; column < columns; column++) {\n const saturation = column / (columns - 1);\n const value = 1 - row / (rows - 1);\n\n this.fillRect(\n column * this.width / columns,\n row * this.height / rows,\n this.width / columns + 1,\n this.height / rows + 1,\n hsvToColor(this.hue, saturation, value, 1),\n );\n }\n }\n const x = this.saturation * this.width;\n const y = (1 - this.value) * this.height;\n\n this.drawCircle(x, y, 5, new math.Color(0, 0, 0, 1), 3);\n this.drawCircle(x, y, 4, new math.Color(1, 1, 1, 1), 1);\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left) {\n this.dragging = true;\n this.updateValue(event.position);\n event.accept();\n }\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n if (this.dragging) {\n this.updateValue(event.position);\n event.accept();\n }\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left && this.dragging) {\n this.dragging = false;\n this.updateValue(event.position);\n event.accept();\n }\n }\n\n private updateValue (position: math.Vector2): void {\n this.saturation = clamp01(position.x / Math.max(1, this.width));\n this.value = 1 - clamp01(position.y / Math.max(1, this.height));\n this.changed?.(this.saturation, this.value);\n }\n}\n\nclass HueBar extends Control {\n value = 0;\n changed?: (value: number) => void;\n private dragging = false;\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Stop;\n this.setCustomMinimumSize(180, 18);\n }\n\n override draw (): void {\n const count = 24;\n\n for (let index = 0; index < count; index++) {\n this.fillRect(\n index * this.width / count, 0, this.width / count + 1, this.height,\n hsvToColor(index / (count - 1), 1, 1, 1),\n );\n }\n this.drawLine(this.value * this.width, 0, this.value * this.width, this.height,\n new math.Color(1, 1, 1, 1), 2);\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left) {\n this.dragging = true;\n this.updateValue(event.position.x);\n event.accept();\n }\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n if (this.dragging) {\n this.updateValue(event.position.x);\n event.accept();\n }\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left && this.dragging) {\n this.dragging = false;\n this.updateValue(event.position.x);\n event.accept();\n }\n }\n\n private updateValue (position: number): void {\n this.value = clamp01(position / Math.max(1, this.width));\n this.changed?.(this.value);\n }\n}\n\n@effectsClass('ColorPicker')\nexport class ColorPicker extends VBoxContainer {\n static override readonly themeType: string = 'ColorPicker';\n private readonly colorEventEmitter = new EventEmitter<ColorPickerEvent>();\n private readonly plane: ColorPlane;\n private readonly hueBar: HueBar;\n private readonly alphaSlider: HSlider;\n private readonly channelFields: LineEdit[] = [];\n private readonly hexField: LineEdit;\n private readonly currentColor = new math.Color(1, 1, 1, 1);\n private syncing = false;\n private _editAlpha = true;\n\n constructor (engine: Engine) {\n super(engine);\n this.setThemeConstantOverride('separation', 6);\n this.plane = new ColorPlane(engine);\n this.plane.setSizeFlags(SizeFlags.ExpandFill, SizeFlags.ExpandFill);\n this.plane.parent = this;\n this.hueBar = new HueBar(engine);\n this.hueBar.setSizeFlags(SizeFlags.ExpandFill, SizeFlags.Fill);\n this.hueBar.parent = this;\n this.alphaSlider = new HSlider(engine);\n this.alphaSlider.minValue = 0;\n this.alphaSlider.maxValue = 1;\n this.alphaSlider.step = 0.01;\n this.alphaSlider.setCustomMinimumSize(180, 18);\n this.alphaSlider.parent = this;\n const channels = new GridContainer(engine);\n\n channels.columns = 4;\n channels.setThemeConstantOverride('horizontalSeparation', 4);\n channels.setThemeConstantOverride('verticalSeparation', 4);\n channels.parent = this;\n for (const name of ['R', 'G', 'B', 'A']) {\n const index = this.channelFields.length;\n const row = new VBoxContainer(engine);\n const label = new Label(engine, name);\n const field = new LineEdit(engine);\n\n row.setThemeConstantOverride('separation', 2);\n label.parent = row;\n field.parent = row;\n row.parent = channels;\n field.on('textSubmitted', value => this.submitChannel(index, value));\n this.channelFields.push(field);\n }\n this.hexField = new LineEdit(engine);\n this.hexField.placeholderText = '#RRGGBBAA';\n this.hexField.parent = this;\n this.hexField.on('textSubmitted', value => this.submitHex(value));\n this.plane.changed = (saturation, value) => {\n const hsv = colorToHsv(this.currentColor);\n\n this.setColor(hsvToColor(hsv.h, saturation, value, this.currentColor.a), true);\n };\n this.hueBar.changed = hue => {\n const hsv = colorToHsv(this.currentColor);\n\n this.setColor(hsvToColor(hue, hsv.s, hsv.v, this.currentColor.a), true);\n };\n this.alphaSlider.on('valueChanged', value => {\n if (!this.syncing) {\n this.setColor(new math.Color(this.currentColor.r, this.currentColor.g, this.currentColor.b, value), true);\n }\n });\n this.syncEditors();\n }\n\n get color (): math.Color { return this.currentColor.clone(); }\n set color (value: math.Color) { this.setColor(value, false); }\n get editAlpha (): boolean { return this._editAlpha; }\n set editAlpha (value: boolean) {\n if (this._editAlpha !== value) {\n this._editAlpha = value;\n this.syncEditors();\n }\n }\n\n override on<E extends keyof ColorPickerEvent> (\n eventName: E,\n listener: EventEmitterListener<ColorPickerEvent[E]>,\n ): void {\n if (eventName === 'colorChanged') {\n this.colorEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof ColorPickerEvent> (\n eventName: E,\n listener: EventEmitterListener<ColorPickerEvent[E]>,\n ): void {\n if (eventName === 'colorChanged') {\n this.colorEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n setColor (value: math.Color, signal = false): void {\n if (this.currentColor.equals(value)) {return;}\n this.currentColor.copyFrom(value);\n this.syncEditors();\n if (signal) {this.colorEventEmitter.emit('colorChanged', this.currentColor.clone());}\n }\n\n private syncEditors (): void {\n this.syncing = true;\n const hsv = colorToHsv(this.currentColor);\n\n this.plane.hue = hsv.h;\n this.plane.saturation = hsv.s;\n this.plane.value = hsv.v;\n this.hueBar.value = hsv.h;\n this.alphaSlider.setValueNoSignal(this.currentColor.a);\n const values = [this.currentColor.r, this.currentColor.g, this.currentColor.b, this.currentColor.a];\n\n for (let index = 0; index < this.channelFields.length; index++) {\n this.channelFields[index].text = String(Math.round(values[index] * 255));\n this.channelFields[index].editable = index < 3 || this._editAlpha;\n }\n this.hexField.text = colorToHex(this.currentColor, this._editAlpha);\n this.alphaSlider.visible = this._editAlpha;\n this.syncing = false;\n }\n\n private submitChannel (index: number, value: string): void {\n const number = Number(value);\n\n if (!Number.isFinite(number)) {return;}\n const channels = [this.currentColor.r, this.currentColor.g, this.currentColor.b, this.currentColor.a];\n\n channels[index] = clamp01(number / 255);\n this.setColor(new math.Color(channels[0], channels[1], channels[2], channels[3]), true);\n }\n\n private submitHex (value: string): void {\n const parsed = colorFromHex(value, 1);\n\n if (parsed) {\n if (!this._editAlpha) {parsed.a = this.currentColor.a;}\n this.setColor(parsed, true);\n }\n }\n\n override fromData (data: ColorPickerData): void {\n super.fromData(data);\n if (data.color !== undefined) {\n this.currentColor.copyFrom(data.color);\n this.syncEditors();\n }\n if (data.editAlpha !== undefined) {\n this.editAlpha = data.editAlpha;\n this.syncEditors();\n }\n }\n}\n\n@effectsClass('ColorPickerButton')\nexport class ColorPickerButton extends Button {\n static override readonly themeType: string = 'ColorPickerButton';\n readonly picker: ColorPicker;\n readonly popupPanel: PopupPanel;\n private readonly colorEventEmitter = new EventEmitter<ColorPickerButtonEvent>();\n private readonly openPicker = () => this.showPicker();\n\n constructor (engine: Engine) {\n super(engine);\n this.popupPanel = new PopupPanel(engine);\n this.picker = new ColorPicker(engine);\n this.picker.setCustomMinimumSize(250, 330);\n this.picker.parent = this.popupPanel;\n this.picker.on('colorChanged', color => this.colorEventEmitter.emit('colorChanged', color));\n this.on('pressed', this.openPicker);\n }\n\n get color (): math.Color { return this.picker.color; }\n set color (value: math.Color) { this.picker.color = value; }\n get editAlpha (): boolean { return this.picker.editAlpha; }\n set editAlpha (value: boolean) {\n this.picker.editAlpha = value;\n }\n\n override on<E extends keyof ColorPickerButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<ColorPickerButtonEvent[E]>,\n ): void {\n if (eventName === 'colorChanged') {\n this.colorEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof ColorPickerButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<ColorPickerButtonEvent[E]>,\n ): void {\n if (eventName === 'colorChanged') {\n this.colorEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n showPicker (): void {\n const transform = this.getGlobalTransform2D().elements;\n\n this.popupPanel.setSize(270, 350);\n this.popupPanel.popup(new math.Vector2(transform[6], transform[7] + this.height), this);\n }\n\n protected override getContentInsets (): ContentInsets {\n const base = super.getContentInsets();\n\n return { ...base, left: base.left + Math.max(18, this.height - base.top - base.bottom) + 6 };\n }\n\n protected override drawDecoration (_mode: ButtonDrawMode): void {\n const margins = this.getNormalContentInsets();\n const size = Math.max(12, this.height - margins.top - margins.bottom);\n\n this.fillRect(margins.left, (this.height - size) * 0.5, size, size, this.picker.color);\n this.drawRect(margins.left + 0.5, (this.height - size) * 0.5 + 0.5, size - 1, size - 1,\n this.getThemeColor('swatchBorderColor'), 1);\n }\n\n override onDestroy (): void {\n this.off('pressed', this.openPicker);\n this.popupPanel.dispose();\n super.onDestroy();\n }\n\n override fromData (data: ColorPickerButtonData): void {\n super.fromData(data);\n if (data.color !== undefined) {this.picker.fromData({ color: data.color });}\n if (data.editAlpha !== undefined) {this.editAlpha = data.editAlpha;}\n }\n}\n\nfunction clamp01 (value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction colorToHsv (color: math.Color): HSV {\n const max = Math.max(color.r, color.g, color.b);\n const min = Math.min(color.r, color.g, color.b);\n const delta = max - min;\n let hue = 0;\n\n if (delta > 0) {\n if (max === color.r) {hue = ((color.g - color.b) / delta) % 6;} else if (max === color.g) {hue = (color.b - color.r) / delta + 2;} else {hue = (color.r - color.g) / delta + 4;}\n hue /= 6;\n if (hue < 0) {hue += 1;}\n }\n\n return { h: hue, s: max === 0 ? 0 : delta / max, v: max };\n}\n\nfunction hsvToColor (hue: number, saturation: number, value: number, alpha: number): math.Color {\n const section = Math.floor(hue * 6);\n const fraction = hue * 6 - section;\n const p = value * (1 - saturation);\n const q = value * (1 - fraction * saturation);\n const t = value * (1 - (1 - fraction) * saturation);\n\n switch (section % 6) {\n case 0: return new math.Color(value, t, p, alpha);\n case 1: return new math.Color(q, value, p, alpha);\n case 2: return new math.Color(p, value, t, alpha);\n case 3: return new math.Color(p, q, value, alpha);\n case 4: return new math.Color(t, p, value, alpha);\n default: return new math.Color(value, p, q, alpha);\n }\n}\n\nfunction colorToHex (color: math.Color, alpha: boolean): string {\n const values = [color.r, color.g, color.b, color.a].map(value => {\n return Math.round(clamp01(value) * 255).toString(16).padStart(2, '0').toUpperCase();\n });\n\n return `#${values.slice(0, alpha ? 4 : 3).join('')}`;\n}\n\nfunction colorFromHex (value: string, fallbackAlpha: number): math.Color | null {\n const source = value.trim().replace('#', '');\n\n if (!/^[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(source)) {return null;}\n const number = Number.parseInt(source, 16);\n const hasAlpha = source.length === 8;\n\n return new math.Color(\n ((number >> (hasAlpha ? 24 : 16)) & 0xff) / 255,\n ((number >> (hasAlpha ? 16 : 8)) & 0xff) / 255,\n ((number >> (hasAlpha ? 8 : 0)) & 0xff) / 255,\n hasAlpha ? (number & 0xff) / 255 : fallbackAlpha,\n );\n}\n","import { registerPlugin } from '@galacean/effects';\nimport { GUIPlugin } from './plugin';\n\nexport * from './core';\nexport * from './components';\nexport * from './data';\nexport * from './layout/enums';\nexport * from './layout/box-container';\nexport * from './layout/grid-container';\nexport * from './layout/margin-container';\nexport * from './layout/center-container';\nexport * from './layout/aspect-ratio-container';\nexport * from './layout/panel-container';\nexport * from './layout/separator';\nexport * from './scroll/enums';\nexport * from './scroll/range';\nexport * from './scroll/scroll-bar';\nexport * from './scroll/scroll-container';\nexport * from './theme';\nexport * from './controls';\nexport * from './plugin';\n\nregisterPlugin('gui', GUIPlugin);\n\n/** GUI plugin package version. Importing this package registers the GUI runtime and native fallback theme. */\nexport const version = __VERSION__;\n"],"names":["_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","value","writable","configurable","_is_native_reflect_construct","result","Boolean","valueOf","call","Reflect","construct","_","_construct","Parent","args","Class","a","push","apply","instance","Function","bind","arguments","_get_prototype_of","getPrototypeOf","_wrap_native_super","_cache","Map","undefined","toString","indexOf","has","get","set","Wrapper","enumerable","_assert_this_initialized","self","ReferenceError","_defineProperties","target","props","i","length","descriptor","defineProperty","key","_create_class","Constructor","protoProps","staticProps","_instanceof","left","right","Symbol","hasInstance","_array_like_to_array","arr","len","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","next","isArray","_unsupported_iterable_to_array","minLen","n","slice","name","from","test","done","__decorate","decorators","desc","d","c","r","getOwnPropertyDescriptor","decorate","_extends","assign","source","hasOwnProperty","MouseFilter","MouseBehaviorRecursive","FocusMode","FocusBehaviorRecursive","CursorShape","SuppressedError","ThemeItemType","PatchStretchMode","SizeFlags","GrowDirection","CanvasRenderMode","Orientation","LayoutAlignment","AspectRatioStretchMode","ScrollMode","HorizontalAlignment","VerticalAlignment","AutowrapMode","TextOverflow","TextureExpandMode","TextureStretchMode","AxisStretchMode","Side","ButtonDrawMode","ButtonActionMode","ProgressFillMode","_obj","Color","math","Vector2","ZERO_MARGINS","top","bottom","cloneMargins","marginsFromData","data","finite","Number","isFinite","RangeError","nonNegative","Math","max","cloneThemeValue","clone","family","weight","style","StyleBox","eventEmitter","EventEmitter","contentMargins","readOnly","on","eventName","listener","off","getContentMargins","makeReadOnly","setContentMargins","assertMutable","keys","some","_this","notifyChanged","getMinimumSize","_proto","emit","Error","isReadOnly","StyleBoxEmpty","draw","shared","StyleBoxFlat","backgroundColor","CLEAR","borderColor","borderWidths","cornerRadii","getBackgroundColor","getBorderColor","getBorderWidths","getCornerRadii","setBackgroundColor","equals","copyFrom","setBorderColor","setBorderWidths","setCornerRadii","topLeft","topRight","bottomRight","bottomLeft","graphics","rect","width","height","hasRoundedCorners","drawRounded","fillRectangle","x","y","border","min","radii","adapted","adaptMarginPair","createInfiniteMargins","drawRoundedFill","inner","innerRadii","drawRoundedRing","outerRect","outerRadii","innerRect","color","outer","getRoundedPoints","index","fillTriangle","first","second","available","firstMaximum","secondMaximum","sum","factor","POSITIVE_INFINITY","points","centerX","centerY","current","_step","corners","PI","_iterator","cx","cy","radius","start","angle","cos","sin","StyleBoxTexture","_texture","sourceRect","patchMargins","tint","WHITE","_horizontalAxisStretchMode","_verticalAxisStretchMode","_drawCenter","getSourceRect","getPatchMargins","getTint","setSourceRect","clearSourceRect","setPatchMargins","setTint","_this_sourceRect","texture","drawNinePatch","sourceX","sourceY","sourceWidth","sourceHeight","marginLeft","marginTop","marginRight","marginBottom","horizontalMode","horizontalAxisStretchMode","verticalMode","verticalAxisStretchMode","drawCenter","ThemeRegistry","registerType","type","baseType","definitions","types","getTypeChain","includes","previous","storedDefinitions","definition","defaultValue","hasType","_this_types_get","_this_types_get_baseType","visited","Set","add","getDefault","itemType","getItemDefinition","dependency","affectsLayout","getItemDefinitions","includeInherited","chain","reverse","_this_types_get_definitions","_step1","_iterator1","Theme","values","variations","styleBoxReferences","batchDepth","changePending","layoutChangePending","styleBoxChanged","batch","callback","setTypeVariation","variation","clearTypeVariation","dependent","base","delete","hasTypeVariation","getTypeVariationBase","getTypeDependencies","setColor","setItem","getColor","getItem","hasColor","hasItem","clearColor","clearItem","setConstant","getConstant","hasConstant","clearConstant","setFont","getFont","hasFont","clearFont","setFontSize","getFontSize","hasFontSize","clearFontSize","setIcon","getIcon","hasIcon","clearIcon","setStyleBox","getStyleBox","hasStyleBox","clearStyleBox","_this_values_get_get","_this_values_get","_this_values_get_get_has","categories","items","size","releaseStyleBox","clear","styleBox","setCollectionFromData","engine","colors","constants","fonts","fontSizes","icons","styleBoxes","g","b","_step2","_iterator2","fontFromData","_step3","_iterator3","_step4","_iterator4","findObject","_step5","_iterator5","styleBoxFromData","stored","retainStyleBox","_this_styleBoxReferences_get","count","fromData","theme","remaining","progressed","flat","position","patch","content","themeFallbacks","constant","font","fontSize","icon","Matrix3","normalizeMeasuredMinimum","normalizeMeasuredMaximum","combineMaximum","measured","custom","clampToMaximum","maximum","ANCHOR_PRESET_TABLE","centerLeft","centerTop","centerRight","centerBottom","center","leftWide","topWide","rightWide","bottomWide","vcenterWide","hcenterWide","fullRect","Control","owner","children","anchorMin","anchorMax","offsetMin","offsetMax","pivot","scale","shear","mouseForcePassScrollEvents","clipContents","_parent","_visible","_enabled","_mouseFilter","Stop","_mouseBehaviorRecursive","Inherited","_focusMode","None","_focusBehaviorRecursive","_defaultCursorShape","Arrow","_rotation","transformDirty","cachedTransform","disposed","customMinimumSize","customMaximumSize","minimumSizeCache","desiredSizeCache","maximumSizeCache","pendingMeasurementChanges","_horizontalSizeFlags","_verticalSizeFlags","_stretchRatio","_horizontalGrowDirection","_verticalGrowDirection","_theme","themeOwnerNode","_themeTypeVariation","themeOverrides","themeCache","overrideStyleBoxReferences","attachedThemeChanged","propagateThemeChanged","overrideStyleBoxChanged","getInheritedTheme","_this_themeOwnerNode","_this_themeOwnerNode_theme","getThemeOwnerNode","hasThemeOwnerNode","getThemeType","themeType","getThemeColor","resolveThemeItem","getThemeConstant","Constant","getThemeFont","Font","getThemeFontSize","FontSize","getThemeIcon","Icon","getThemeStyleBox","hasThemeColor","found","hasThemeConstant","hasThemeFont","hasThemeFontSize","hasThemeIcon","hasThemeStyleBox","setThemeColorOverride","setThemeOverride","setThemeConstantOverride","setThemeFontOverride","setThemeFontSizeOverride","setThemeIconOverride","setThemeStyleBoxOverride","removeThemeColorOverride","removeThemeOverride","removeThemeConstantOverride","removeThemeFontOverride","removeThemeFontSizeOverride","removeThemeIconOverride","removeThemeStyleBoxOverride","hasThemeColorOverride","hasThemeOverride","hasThemeConstantOverride","hasThemeFontOverride","hasThemeFontSizeOverride","hasThemeIconOverride","hasThemeStyleBoxOverride","clearThemeOverrides","releaseOverrideStyleBox","hasFocus","visibleOnly","_this_root","_this_root_guiControlHasFocus","root","guiControlHasFocus","drawStyleBox","addChild","child","parent","removeChild","getChildIndex","changeChildIndex","newIndex","oldIndex","splice","controlTreeChanged","addChildInternal","removeChildInternal","setPosition","keepOffsets","computeAnchors","getParentRect","computeOffsets","updateLayout","setSize","setRect","nextRect","setSizeFlags","horizontal","vertical","isInteger","getDesiredSize","getMaximumSize","getCombinedMinimumSize","getCachedMinimumSize","getCombinedMaximumSize","getCachedMaximumSize","getBoundMinimumSize","minimum","getBoundDesiredSize","desired","getCachedDesiredSize","setCustomMinimumSize","updateMinimumSize","setCustomMaximumSize","updateMaximumSize","invalidateMeasurementChanges","updateDesiredSize","invokeMeasurementChanges","changes","MeasurementChange","changed","scheduleMeasurementChanges","Container","invalidateMeasurementsFromChild","setScale","markTransformDirty","setRotation","degrees","setShear","setPivot","setAnchorMin","setAnchorMax","setOffsetMin","setOffsetMax","getRect","getTransform2D","radians","shearX","tan","shearY","pivotX","pivotY","tx","ty","setAnchorsPreset","preset","minX","minY","maxX","maxY","setOffsetsPreset","margin","parentSize","setAnchorsAndOffsetsPreset","getGlobalTransform2D","local","multiplyMatrices","hasPoint","point","intersectsChildContent","getEffectiveMouseFilter","enabledInHierarchy","isMouseRecursiveEnabled","mouseFilter","Ignore","getFocusModeWithOverride","isFocusRecursiveEnabled","focusMode","getCursorShape","defaultCursorShape","focus","hideFocus","grabControlFocus","grabFocus","grabClickFocus","grabControlClickFocus","releaseFocus","releaseControlFocus","warpMouse","matrix","elements","warpControlMouse","makePositionLocal","transform","abs","determinant","invert","getLocalMousePosition","getMousePosition","update","deltaTime","enabled","isDisposed","onDestroy","drawInternal","visibleInHierarchy","pushTransform","drawChildren","popTransform","drawLine","x1","y1","x2","y2","thickness","drawPolyline","drawLines","drawBezier","x3","y3","x4","y4","drawTriangle","drawRect","drawRectangle","drawCircle","fillRect","fillCircle","drawTexture","region","options","drawText","text","fontFamily","fontWeight","fontStyle","measureText","onMouseEnter","location","onMouseMove","event","onMouseLeave","onMouseWheel","onMouseDown","onMouseUp","onTouchDown","onTouchMove","onTouchUp","onKeyDown","onKeyUp","onGotFocus","onLostFocus","onScrollBegin","onScrollEnd","onPopupOpened","onPopupClosed","invokeGetDragData","getDragData","invokeCanDropData","canDropData","invokeDropData","dropData","dispose","_this__theme","_this_parent","_this_parent_size","resolveBoundedAxis","horizontalGrowDirection","verticalGrowDirection","applyBounds","pushClipRect","popClipRect","onThemeChanged","queueSort","onRootChanged","previousRoot","nextRoot","getThemeDependencies","explicitType","nativeType","requestedType","themeTypeVariation","concat","getFallbackThemeDependencies","cacheKey","cached","override","queryMatchesCurrentType","_this_themeOverrides_get","candidate","getThemeFallback","entry","retainOverrideStyleBox","_this_themeOverrides_get_has","_this_overrideStyleBoxReferences_get","includeChildren","propagateThemeOwner","ownerNode","notify","assignToControl","pending","queueMeasurementChange","locationChanged","sizeChanged","requestedSize","minimumSize","maximumSize","growDirection","finiteSize","difference","adjustedPosition","assertGrowDirection","queuePendingLayouts","queuePendingMeasurements","notifyRootChanged","_this_parent_size_clone","parentRect","mouseBehaviorRecursive","_this_parent_isMouseRecursiveEnabled","Enabled","focusBehaviorRecursive","_this_parent_isFocusRecursiveEnabled","rotation","horizontalSizeFlags","verticalSizeFlags","stretchRatio","applyThemeOverridesFromData","_this__parent","_this__parent1","controlRemoved","item","_this_owner","_this_owner_item","indexInParent","_this_parent_getChildIndex","visible","controlStateChanged","_this_parent_visibleInHierarchy","_this_parent_enabledInHierarchy","updateMouseCursorState","_this_parent_root","RootControl","_this_parent_getThemeOwnerNode","normalized","trim","effectsClass","sortPending","childLayoutChanged","invalidateMeasurementsAndQueueSort","ownSizeChanged","queueLayout","invokeSortChildren","sortChildren","previousIndex","wasChild","bindChild","unbindChild","fitChildInRect","fitAxis","getLayoutChildren","filter","flags","wantsFill","rootEventEmitter","cursorNames","Ibeam","PointingHand","Cross","Wait","Busy","Drag","CanDrop","Forbidden","Vsize","Hsize","Bdiagsize","Fdiagsize","Move","Vsplit","Hsplit","Help","getButtonMask","button","MouseButton","Left","MouseButtonMask","Right","Middle","Xbutton1","Xbutton2","isWheelButton","WheelUp","WheelRight","PopupLayer","buttonIndex","closeTop","accept","CanvasRootControl","canvas","inputDisabled","_this_canvas_item","receivesEvents","isActive","CanvasContainer","sortCanvases","sort","order","isVisible","WindowRootControl","popupStack","dragThreshold","lastInput","dirtyContainers","dirtyMeasurements","gui","mouseFocus","mouseClickGrabber","mouseFocusMask","mouseOver","mouseOverHierarchy","touchFocus","keyFocus","dragAccum","dragAttempted","dragging","dragData","dragMouseOver","dragSuccessful","lastMousePosition","NEGATIVE_INFINITY","sendingMouseEnterExit","mouseOverUpdatePending","canvases","popupLayer","closePopupControl","control","pushInput","cleanupInternalState","processGUIInput","postGrabClickFocus","isInputHandled","_this_lastInput","_this_lastInput_isAccepted","isAccepted","guiGetFocusOwner","isFocusTargetUsable","guiReleaseFocus","guiIsDragging","guiGetDragData","guiIsDragSuccessful","guiCancelDrag","endDragging","notifyFocusOwnerChanged","isControlValid","queueMicrotask","updateMouseOver","isControlUsable","updateCursor","dropControlState","updateMouseOverHierarchy","popupControl","originalTheme","focusOwner","restoreFocus","restoreFocusHidden","findIndex","state","removed","removedIndex","restore","container","cancelPointerInput","dropMouseFocus","dropMouseOver","onCanvasBlur","mask","_i","_iter","InputEventMouseButton","device","InputEvent","deviceIdInternal","pressed","globalPosition","callControlInput","cancelPointerPress","touchIndex","_this_gui_touchFocus_get","controlBelongsToSubtree","resize","render","flushLayout","begin","end","round","measurements","getControlDepth","depth","InputEventKey","callGUIInput","InputEventMouse","processMouseButton","InputEventMouseMotion","processMouseMotion","InputEventScreenTouch","processScreenTouch","InputEventScreenDrag","processScreenDrag","isPressed","setZero","findClickFocus","finishDrop","relative","origin","subtract","beginDragging","findDropTarget","findInputControl","pointerEvent","localEvent","xformedBy","getGlobalInverse","forcePassWheel","forcePassTouch","isReleased","_this_findControlAtPosition","findControlAtPosition","positionInParent","skipSelf","parentEnabled","parentMouseEnabled","localPosition","toControlLocal","mouseEnabled","buildHoverHierarchy","applyMouseOver","common","toLocal","hierarchy","mode","Click","All","successful","cursor","_this_gui_keyFocus","subtree","findCanvasRoot","GUIWindowComponent","Component","updateWindowRoot","windowRoot","renderWindowRoot","resizeWindowRoot","getBoundingClientRect","eventSystem","UICanvas","renderMode","_order","registered","rootControl","onEnable","register","onDisable","unregister","destroyCanvas","guiWindow","getComponent","_this_item","GUIPlugin","Plugin","onEngineCreated","addComponent","onCompositionCreating","composition","sceneRoot","assertEnumValue","reduce","total","growSlots","sizes","ceilings","weights","extra","integerPixels","active","map","_loop","totalWeight","capped","ceiling","share","growth","assigned","pixelError","activeIndex","exactGrowth","floor","UIControl","controlNode","linkedItemTransform","linkedControl","syncingLocation","itemTransformChanged","syncItemLocationToControl","controlLocationChanged","syncControlLocationToItem","onAwake","syncControl","onParentChanged","onOrderInParentChanged","syncControlOrder","disposeControl","unlinkControl","unbindLocationSync","attachControl","resolveParent","copyItemLocationToControl","bindLocationSync","orderInParent","parentItem","fallbackParentGetDelegate","uiControl","itemTransform","_this_linkedItemTransform","_this_linkedControl","z","serialized","getClass","hasControl","BoxContainer","_orientation","Horizontal","_alignment","Begin","_reverse","measureChildren","alignment","orientation","availableMain","availableCross","separation","gapTotal","slotSpace","minimums","getMainSize","maximums","every","isMainExpanded","usedMain","mainSize","useDesired","main","cross","childSize","getCrossSize","Expand","invalidateMeasurement","Vertical","End","HBoxContainer","VBoxContainer","GridContainer","_columns","measureGrid","columnCount","columns","rowCount","ceil","columnMetrics","collectTrackMetrics","rowMetrics","horizontalSeparation","verticalSeparation","columnSizes","allocateTracks","rowSizes","columnPositions","getTrackPositions","rowPositions","column","row","rows","fill","unbounded","expanded","track","childMinimum","childDesired","childMaximum","minimumValue","desiredValue","maximumValue","metrics","trackSpace","positions","MarginContainer","CenterContainer","_useTopLeft","useTopLeft","AspectRatioContainer","_ratio","_stretchMode","Fit","_horizontalAlignment","Center","_verticalAlignment","baseWidth","ratio","stretchMode","WidthControlsHeight","HeightControlsWidth","Cover","baseHeight","getAlignedOffset","horizontalAlignment","verticalAlignment","assertFinite","PanelContainer","margins","Separator","HSeparator","VSeparator","Range","_rounded","suppressSignals","rangeEventEmitter","createSharedRange","owners","setValue","calculateValue","valuesEqual","notifyValueChanged","setValueNoSignal","valueChanged","setMinValue","minValue","maxValue","page","clamp","setMaxValue","setStep","step","setPage","setAsRatio","exponentialRatio","log2","pow","span","getAsRatio","range","attachShared","unshare","allowGreater","allowLesser","isNaN","calculated","toPrecision","rounded","ScrollBar","scrollBarEventEmitter","_customStep","highlight","decrementActive","incrementActive","dragPosition","dragRatio","Accessibility","scroll","amount","scrollTo","decrementSize","getButtonAxisSize","incrementSize","incrementCrossSize","getButtonCrossSize","scrollMinimum","grabberMinimum","getGrabberMinimumSize","getCrossStartPadding","getCrossEndPadding","axisSize","decrementState","incrementState","trackLength","grabber","getGrabberRect","grabberStyle","scrollStyle","drawButtonIcon","updateHighlight","getAxis","area","getAreaSize","getAxisSize","grabberOffset","getGrabberOffset","grabberSize","getGrabberSize","trackPosition","getTrackStartMargin","getIncrement","getPageIncrement","WheelDown","direction","wheelIncrement","increment","keycode","customStep","getTrackSize","scrollAxisMinimum","offset","crossStart","crossSize","getButtonIcon","_this_getThemeIcon","shouldShowBar","contentSize","viewportSize","ShowAlways","Auto","Reserve","MaximizeFirst","decelerate","sign","assertScrollMode","Disabled","pageDivisor","PAGE_DIVISOR","HScrollBar","VScrollBar","ScrollContainer","scrollContainerEventEmitter","_horizontalScrollMode","_verticalScrollMode","_scrollHorizontalByDefault","_deadzone","_followFocus","focusRoot","touchDecelerating","beyondDeadzone","dragSpeed","dragFrom","lastDragAccum","motionSampleTime","viewportWidth","viewportHeight","scrollMoved","cancelTouchDrag","focusOwnerChanged","followFocus","isContentDescendant","ensureControlVisible","horizontalBar","verticalBar","getHScrollBar","getVScrollBar","Infinity","corner","global","horizontalDifference","verticalDifference","measureContent","previousHorizontal","previousVertical","horizontalEnabled","horizontalScrollMode","verticalEnabled","verticalScrollMode","swapAxes","scrollHorizontalByDefault","shiftPressed","verticalHidden","ShowNever","horizontalHidden","horizontalAmount","verticalAmount","WheelLeft","deadzone","notifyContentScroll","canceled","seconds","updateInertia","updateDragVelocity","_this_focusRoot","_this_focusRoot1","getLargestContentSize","layout","resolveLayout","horizontalVisible","verticalVisible","horizontalConstrained","verticalConstrained","verticalReserved","horizontalReserved","horizontalSize","verticalSize","nextHorizontalReserved","nextVerticalReserved","invalidateScrollLayout","INERTIA_DECELERATION","notifyEnd","horizontalCustomStep","verticalCustomStep","hScroll","vScroll","palette","disabledText","panel","normal","hover","disabled","accent","accentHover","white","background","borderWidth","contentHorizontal","contentVertical","empty","fontItems","isBreakSpace","character","isCJKLike","codePoint","codePointAt","countFillSpaces","fontColor","lineSpacing","hoverPressed","fontFocusColor","fontHoverColor","fontPressedColor","fontHoverPressedColor","fontDisabledColor","iconTint","iconFocusTint","iconHoverTint","iconPressedTint","iconHoverPressedTint","iconDisabledTint","iconSeparation","alignToLargestStyleBox","checked","unchecked","checkedDisabled","uncheckedDisabled","radioChecked","radioUnchecked","radioCheckedDisabled","radioUncheckedDisabled","checkedColor","uncheckedColor","checkedDisabledColor","markColor","markDisabledColor","markUncheckedColor","markUncheckedDisabledColor","markOutlineColor","markSize","markSeparation","checkVOffset","buttonCheckedColor","buttonUncheckedColor","switchColor","switchDisabledColor","switchOffColor","switchKnobColor","switchWidth","switchHeight","switchSeparation","separator","fontReadOnlyColor","fontPlaceholderColor","selectionColor","caretColor","caretWidth","checkColor","itemHeight","separatorHeight","horizontalPadding","iconWidth","arrow","arrowSize","arrowMargin","hSeparation","modulateArrow","swatchBorderColor","fillHighlight","grabberHighlight","grabberDisabled","trackThickness","scrollFocus","grabberPressed","decrement","decrementHighlight","decrementPressed","incrementHighlight","incrementPressed","paddingLeft","paddingTop","paddingRight","paddingBottom","Label","_text","Top","_autowrapMode","Off","_textOverflow","Visible","layoutDirty","layoutWidth","NaN","natural","createNaturalLayout","autowrapMode","textOverflow","getMinimumLineWidth","paragraphCount","split","lineHeight","getTextLayout","clipped","gap","getVerticalGap","getTextStartY","lines","line","Ellipsis","ellipsize","Fill","measurement","drawFilledLine","drawThemedText","getTextStartX","invalidateTextLayout","measure","constrainedWidth","createLayout","paragraphs","emptyMeasurement","paragraph","wrapParagraph","maximumWidth","characters","cursorWidth","breakEnd","breakNext","advance","advances","join","Arbitrary","Word","findWordEnd","replace","skipBreakSpaces","WordSmart","segment","lineWidth","Bottom","ellipsisMeasurement","used","spaces","FULL_REGION","u0","v0","u1","v1","TextureRect","_expandMode","KeepSize","Scale","flipH","flipV","controlSizeChanged","_this_texture","_this_texture1","_this_texture_width","_this_texture_height","expandMode","IgnoreSize","FitWidth","FitWidthProportional","FitHeight","FitHeightProportional","drawRegion","Tile","drawTiled","Keep","KeepCentered","KeepAspect","drawAspect","KeepAspectCentered","KeepAspectCovered","drawCovered","centered","sourceRatio","destinationRatio","tileWidth","tileHeight","verticalRatio","horizontalRatio","NinePatchRect","ninePatchEventEmitter","Stretch","_regionRect","setRegionRect","setPatchMargin","side","getPatchMargin","_this_patchMargins_side","regionRect","patchMarginLeft","patchMarginTop","patchMarginRight","patchMarginBottom","ColorRect","Panel","ButtonGroup","buttons","allowUnpress","getPressedButton","buttonPressed","getButtons","select","signal","emitPressed","peer","setPressedFromGroup","updateButton","BaseButton","buttonEventEmitter","_disabled","_toggleMode","_buttonPressed","_buttonMask","_buttonGroup","hovered","pressing","pressInside","mousePressing","keyboardPressing","cancelPress","actionMode","Release","keepPressedOutside","setPressedNoSignal","setPressed","isHovered","isPressing","getDrawMode","HoverPressed","Hover","Pressed","Normal","hasButton","buttonMask","beginPress","activate","finishPress","echo","isActivationKey","buttonGroup","setPressedDirect","inside","Press","wasPressing","toggleMode","Button","clipText","expandIcon","textAlignment","iconAlignment","iconVerticalAlignment","measureButton","getStyleBoxName","drawDecoration","drawContent","getContentInsets","getBaseContentInsets","getNormalContentInsets","_this_icon","_this_icon1","_this_icon_width","_this_icon_height","hasText","iconHeight","textWidth","textHeight","insets","contentWidth","contentHeight","naturalText","iconSize","getIconSize","reservedIconWidth","sourceText","ellipsizeText","iconX","textAreaX","textX","getAlignedX","textY","textAreaY","iconY","getAlignedY","getIconTint","getFontColor","ellipsisWidth","_icon","Checkbox","getMarkSize","yOffset","radio","iconName","fallbackY","fillRoundedMark","fillCheckMark","px","py","leftInner","fallback","CheckButton","getSwitchSize","switchSize","fallbackX","activeColor","trackColor","knobX","names","Slider","sliderEventEmitter","_editable","dragInitialValue","scrollable","highlighted","editable","fillStyle","fillWidth","fillY","updateDrag","beginDrag","endDrag","insideGrabber","initialValue","getRatioAt","getUsableLength","HSlider","VSlider","ProgressBar","_showPercentage","_fillMode","BeginToEnd","styleMinimum","showPercentage","fillMinimum","fillMode","progress","EndToBegin","TopToBottom","BottomToTop","TextInput","textEventEmitter","_placeholderText","_maxLength","selectionStart","selectionEnd","selectionAnchor","selecting","selectingWords","wordSelectionStart","wordSelectionEnd","textarea","textareaFocusTimer","composing","undoStack","redoStack","onBeforeInput","pushUndo","onTextareaInput","setText","onTextareaSelect","selectionDirection","onCompositionStart","onCompositionEnd","onTextareaKeyDown","multiline","isComposing","preventDefault","submit","onTextareaBlur","selectAll","setSelection","deselect","getSelectedText","syncTextareaSelection","cancelTextareaFocus","getCharacterIndex","doubleClick","_this_getWordRange","getWordRange","moveCaret","focusTextarea","command","ctrlPressed","metaPressed","toLowerCase","copySelection","replaceSelection","pasteClipboard","redo","undo","getPreviousCharacterIndex","getNextCharacterIndex","getLineStart","getLineEnd","erase","altPressed","unicode","String","fromCodePoint","activateTextarea","removeTextarea","getDisplayText","getSelectionRange","extendSelection","getTextFont","getTextFontSize","getTextColor","getTextStyleBox","drawTextBackground","drawSelection","drawCaret","hasSelection","onTextValueChanged","limited","_this_getSelectionRange","allowed","caret","lastIndexOf","snapshot","shift","pop","navigator","clipboard","writeText","readText","then","matchAll","RegExp","match","document","createElement","maxLength","wrap","setAttribute","cssText","addEventListener","body","appendChild","scheduleTextareaFocus","removeEventListener","remove","setSelectionRange","setTimeout","clearTimeout","activeElement","preventScroll","placeholderText","removeAttribute","caretColumn","isLowSurrogate","charCodeAt","isHighSurrogate","LineEdit","scrollOffset","_secret","_secretCharacter","display","getVisibleText","shown","full","updateScrollOffset","getAlignedTextX","prefix","measurePrefix","selected","fullWidth","boundaries","getCharacterBoundaries","secret","secretCharacter","repeat","visiblePrefix","TextEdit","scrollLine","textIndex","lineIndex","lineStart","lineEnd","selectedStart","selectedEnd","measureLine","getVerticalCaretIndex","ensureCaretLineVisible","targetLine","targetStart","visibleLines","caretLine","lineCount","Popup","popupEventEmitter","onPopup","offPopup","popup","hidePopup","PopupPanel","PopupMenu","menuEventEmitter","hoveredIndex","addItem","id","addSeparator","getItemCount","setItemDisabled","setItemChecked","padding","getIndexAt","activateIndex","findEnabledIndex","positionY","MenuButton","openMenu","showPopup","popupMenu","OptionButton","optionEventEmitter","_selected","menuSelected","selectId","arrowWidth","getArrowColor","startX","startY","middleX","middleY","endX","onOption","offOption","_this_popupMenu_getItem","ColorPlane","hue","saturation","hsvToColor","updateValue","clamp01","HueBar","colorToHsv","delta","h","s","v","alpha","section","fraction","q","t","ColorPicker","VBoxContainer1","colorEventEmitter","channelFields","currentColor","syncing","_editAlpha","plane","ExpandFill","hueBar","alphaSlider","channels","label","field","submitChannel","hexField","submitHex","hsv","syncEditors","padStart","toUpperCase","number","parsed","colorFromHex","fallbackAlpha","parseInt","hasAlpha","editAlpha","ColorPickerButton","openPicker","showPicker","popupPanel","picker","_mode","registerPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_wrap_native_super.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_function.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_assert_this_initialized.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/core/enums.ts","../src/core/theme.ts","../src/core/control.ts","../src/components/ui-canvas.ts","../src/layout/enums.ts","../src/scroll/enums.ts","../src/controls/enums.ts","../src/core/roots.ts","../src/components/gui-window-component.ts","../src/plugin/gui-plugin.ts","../src/layout/utils.ts","../src/components/ui-control.ts","../src/layout/box-container.ts","../src/layout/grid-container.ts","../src/layout/margin-container.ts","../src/layout/center-container.ts","../src/layout/aspect-ratio-container.ts","../src/layout/panel-container.ts","../src/layout/separator.ts","../src/scroll/range.ts","../src/scroll/scroll-bar.ts","../src/scroll/scroll-container.ts","../src/theme/default-theme.ts","../src/controls/label.ts","../src/controls/texture-rect.ts","../src/controls/nine-patch-rect.ts","../src/controls/color-rect.ts","../src/controls/panel.ts","../src/controls/base-button.ts","../src/controls/button.ts","../src/controls/checkbox.ts","../src/controls/check-button.ts","../src/controls/slider.ts","../src/controls/progress-bar.ts","../src/controls/text-input.ts","../src/controls/line-edit.ts","../src/controls/text-edit.ts","../src/controls/popup.ts","../src/controls/popup-menu.ts","../src/controls/menu-button.ts","../src/controls/color-picker.ts","../src/index.ts"],"sourcesContent":["function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","function _assert_this_initialized(self) {\n if (self === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\n return self;\n}\nexport { _assert_this_initialized as _ };\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\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);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\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;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\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]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\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; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","export enum MouseFilter {\n Stop,\n Pass,\n Ignore,\n}\n\nexport enum MouseBehaviorRecursive {\n Inherited,\n Disabled,\n Enabled,\n}\n\nexport enum FocusMode {\n None,\n Click,\n All,\n Accessibility,\n}\n\nexport enum FocusBehaviorRecursive {\n Inherited,\n Disabled,\n Enabled,\n}\n\nexport enum CursorShape {\n Arrow,\n Ibeam,\n PointingHand,\n Cross,\n Wait,\n Busy,\n Drag,\n CanDrop,\n Forbidden,\n Vsize,\n Hsize,\n Bdiagsize,\n Fdiagsize,\n Move,\n Vsplit,\n Hsplit,\n Help,\n}\n\n/** A preset cursor shape or a complete CSS cursor value. */\nexport type CursorStyle = CursorShape | string;\n","import { EventEmitter, math } from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n FontStyle,\n FontWeight,\n Graphics,\n Texture,\n spec,\n} from '@galacean/effects';\n\ntype Color = math.Color;\ntype Vector2 = math.Vector2;\nconst Color = math.Color;\nconst Vector2 = math.Vector2;\n\nexport enum ThemeItemType {\n Color = 'color',\n Constant = 'constant',\n Font = 'font',\n FontSize = 'fontSize',\n Icon = 'icon',\n StyleBox = 'styleBox',\n}\n\nexport interface ThemeFont {\n family: string,\n weight: FontWeight,\n style: FontStyle,\n}\n\nexport interface StyleBoxMargins {\n left: number,\n top: number,\n right: number,\n bottom: number,\n}\n\nexport interface StyleBoxRect {\n x: number,\n y: number,\n width: number,\n height: number,\n}\n\nexport enum PatchStretchMode {\n Stretch,\n Tile,\n TileFit,\n}\n\nexport type ThemeValue = Color | number | ThemeFont | Texture | StyleBox | null;\n\nexport interface ThemeItemDefinition<T extends ThemeValue = ThemeValue> {\n type: ThemeItemType,\n defaultValue: T,\n affectsLayout?: boolean,\n}\n\nexport type ThemeItemDefinitions = Record<string, ThemeItemDefinition>;\n\ntype StyleBoxEvent = { changed: [styleBox: StyleBox] };\ntype ThemeEvent = { changed: [theme: Theme, affectsLayout: boolean] };\ntype RegisteredThemeType = { baseType: string | null, definitions: ThemeItemDefinitions };\n\nconst ZERO_MARGINS: StyleBoxMargins = { left: 0, top: 0, right: 0, bottom: 0 };\n\nfunction cloneMargins (value: StyleBoxMargins): StyleBoxMargins {\n return { left: value.left, top: value.top, right: value.right, bottom: value.bottom };\n}\n\nfunction marginsFromData (data?: spec.StyleBoxMarginsData): StyleBoxMargins {\n return {\n left: data?.left ?? 0,\n top: data?.top ?? 0,\n right: data?.right ?? 0,\n bottom: data?.bottom ?? 0,\n };\n}\n\nfunction finite (name: string, value: number): number {\n if (!Number.isFinite(value)) {\n throw new RangeError(`${name} must be finite.`);\n }\n\n return value;\n}\n\nfunction nonNegative (name: string, value: number): number {\n return Math.max(0, finite(name, value));\n}\n\nfunction cloneFont (value: ThemeFont): ThemeFont {\n return { family: value.family, weight: value.weight, style: value.style };\n}\n\nfunction fontFromData (value: spec.ThemeFontData): ThemeFont {\n return { family: value.family, weight: value.weight ?? 'normal', style: value.style ?? 'normal' };\n}\n\nexport function cloneThemeValue<T extends ThemeValue> (value: T): T {\n if (value instanceof Color) {\n return value.clone() as T;\n }\n if (value && typeof value === 'object' && 'family' in value && 'weight' in value && 'style' in value) {\n return cloneFont(value) as T;\n }\n\n return value;\n}\n\n/** Drawable box resource used for rendering and content measurement. */\nexport abstract class StyleBox {\n private readonly eventEmitter = new EventEmitter<StyleBoxEvent>();\n private contentMargins = cloneMargins(ZERO_MARGINS);\n private readOnly = false;\n\n on (eventName: 'changed', listener: EventEmitterListener<StyleBoxEvent['changed']>): void {\n this.eventEmitter.on(eventName, listener);\n }\n\n off (eventName: 'changed', listener: EventEmitterListener<StyleBoxEvent['changed']>): void {\n this.eventEmitter.off(eventName, listener);\n }\n\n getContentMargins (): StyleBoxMargins { return cloneMargins(this.contentMargins); }\n\n get isReadOnly (): boolean { return this.readOnly; }\n\n /** @internal Makes a native fallback StyleBox immutable. */\n makeReadOnly (): this {\n this.readOnly = true;\n\n return this;\n }\n\n setContentMargins (left: number, top: number, right: number, bottom: number): void {\n this.assertMutable();\n const next = {\n left: nonNegative('StyleBox left content margin', left),\n top: nonNegative('StyleBox top content margin', top),\n right: nonNegative('StyleBox right content margin', right),\n bottom: nonNegative('StyleBox bottom content margin', bottom),\n };\n\n if (Object.keys(next).some(key => next[key as keyof StyleBoxMargins] !== this.contentMargins[key as keyof StyleBoxMargins])) {\n this.contentMargins = next;\n this.notifyChanged();\n }\n }\n\n getMinimumSize (): Vector2 {\n return new Vector2(\n this.contentMargins.left + this.contentMargins.right,\n this.contentMargins.top + this.contentMargins.bottom,\n );\n }\n\n abstract draw (graphics: Graphics, rect: StyleBoxRect): void;\n\n protected notifyChanged (): void { this.eventEmitter.emit('changed', this); }\n protected assertMutable (): void {\n if (this.readOnly) {throw new Error('Native fallback StyleBoxes are read-only.');}\n }\n}\n\nexport class StyleBoxEmpty extends StyleBox {\n static readonly shared = new StyleBoxEmpty().makeReadOnly();\n override draw (): void {}\n}\n\nexport class StyleBoxFlat extends StyleBox {\n private backgroundColor = Color.CLEAR.clone();\n private borderColor = Color.CLEAR.clone();\n private borderWidths = cloneMargins(ZERO_MARGINS);\n private cornerRadii = cloneMargins(ZERO_MARGINS);\n\n getBackgroundColor (): Color { return this.backgroundColor.clone(); }\n getBorderColor (): Color { return this.borderColor.clone(); }\n getBorderWidths (): StyleBoxMargins { return cloneMargins(this.borderWidths); }\n getCornerRadii (): StyleBoxMargins { return cloneMargins(this.cornerRadii); }\n\n setBackgroundColor (value: Color): void {\n this.assertMutable();\n if (!this.backgroundColor.equals(value)) {\n this.backgroundColor.copyFrom(value);\n this.notifyChanged();\n }\n }\n\n setBorderColor (value: Color): void {\n this.assertMutable();\n if (!this.borderColor.equals(value)) {\n this.borderColor.copyFrom(value);\n this.notifyChanged();\n }\n }\n\n setBorderWidths (left: number, top: number, right: number, bottom: number): void {\n this.assertMutable();\n const next = {\n left: nonNegative('StyleBoxFlat left border width', left),\n top: nonNegative('StyleBoxFlat top border width', top),\n right: nonNegative('StyleBoxFlat right border width', right),\n bottom: nonNegative('StyleBoxFlat bottom border width', bottom),\n };\n\n if (Object.keys(next).some(key => next[key as keyof StyleBoxMargins] !== this.borderWidths[key as keyof StyleBoxMargins])) {\n this.borderWidths = next;\n this.notifyChanged();\n }\n }\n\n setCornerRadii (topLeft: number, topRight: number, bottomRight: number, bottomLeft: number): void {\n this.assertMutable();\n const next = {\n left: nonNegative('StyleBoxFlat top-left corner radius', topLeft),\n top: nonNegative('StyleBoxFlat top-right corner radius', topRight),\n right: nonNegative('StyleBoxFlat bottom-right corner radius', bottomRight),\n bottom: nonNegative('StyleBoxFlat bottom-left corner radius', bottomLeft),\n };\n\n if (Object.keys(next).some(key => next[key as keyof StyleBoxMargins] !== this.cornerRadii[key as keyof StyleBoxMargins])) {\n this.cornerRadii = next;\n this.notifyChanged();\n }\n }\n\n override draw (graphics: Graphics, rect: StyleBoxRect): void {\n if (rect.width <= 0 || rect.height <= 0) {\n return;\n }\n if (this.hasRoundedCorners()) {\n this.drawRounded(graphics, rect);\n\n return;\n }\n graphics.fillRectangle(rect.x, rect.y, rect.width, rect.height, this.backgroundColor);\n const border = this.borderWidths;\n\n if (border.top > 0) {graphics.fillRectangle(rect.x, rect.y, rect.width, Math.min(border.top, rect.height), this.borderColor);}\n if (border.bottom > 0) {\n const height = Math.min(border.bottom, rect.height);\n\n graphics.fillRectangle(rect.x, rect.y + rect.height - height, rect.width, height, this.borderColor);\n }\n if (border.left > 0) {graphics.fillRectangle(rect.x, rect.y, Math.min(border.left, rect.width), rect.height, this.borderColor);}\n if (border.right > 0) {\n const width = Math.min(border.right, rect.width);\n\n graphics.fillRectangle(rect.x + rect.width - width, rect.y, width, rect.height, this.borderColor);\n }\n }\n\n private hasRoundedCorners (): boolean {\n const radii = this.cornerRadii;\n\n return radii.left > 0 || radii.top > 0 || radii.right > 0 || radii.bottom > 0;\n }\n\n private drawRounded (graphics: Graphics, rect: StyleBoxRect): void {\n const border = adaptBorderWidths(this.borderWidths, rect.width, rect.height);\n const radii = adaptCornerRadii(this.cornerRadii, border, rect.width, rect.height);\n const hasBorder = border.left > 0 || border.top > 0 || border.right > 0 || border.bottom > 0;\n\n if (!hasBorder) {\n drawRoundedFill(graphics, rect, radii, this.backgroundColor);\n\n return;\n }\n const inner = {\n x: rect.x + border.left,\n y: rect.y + border.top,\n width: Math.max(0, rect.width - border.left - border.right),\n height: Math.max(0, rect.height - border.top - border.bottom),\n };\n\n if (inner.width <= 0 || inner.height <= 0) {\n drawRoundedFill(graphics, rect, radii, this.borderColor);\n\n return;\n }\n const innerRadii = {\n left: Math.max(0, radii.left - Math.min(border.left, border.top)),\n top: Math.max(0, radii.top - Math.min(border.right, border.top)),\n right: Math.max(0, radii.right - Math.min(border.right, border.bottom)),\n bottom: Math.max(0, radii.bottom - Math.min(border.left, border.bottom)),\n };\n\n drawRoundedRing(graphics, rect, radii, inner, innerRadii, this.borderColor);\n drawRoundedFill(graphics, inner, innerRadii, this.backgroundColor);\n }\n}\n\nfunction adaptBorderWidths (border: StyleBoxMargins, width: number, height: number): StyleBoxMargins {\n const adapted = createInfiniteMargins();\n\n adaptMarginPair('top', 'bottom', adapted, border, height, height, height);\n adaptMarginPair('left', 'right', adapted, border, width, width, width);\n\n return adapted;\n}\n\nfunction adaptCornerRadii (\n radii: StyleBoxMargins,\n border: StyleBoxMargins,\n width: number,\n height: number,\n): StyleBoxMargins {\n const adapted = createInfiniteMargins();\n\n adaptMarginPair('top', 'right', adapted, radii, height, height - border.bottom, height - border.top);\n adaptMarginPair('left', 'bottom', adapted, radii, height, height - border.bottom, height - border.top);\n adaptMarginPair('left', 'top', adapted, radii, width, width - border.right, width - border.left);\n adaptMarginPair('bottom', 'right', adapted, radii, width, width - border.right, width - border.left);\n\n return adapted;\n}\n\nfunction adaptMarginPair (\n first: keyof StyleBoxMargins,\n second: keyof StyleBoxMargins,\n adapted: StyleBoxMargins,\n source: StyleBoxMargins,\n available: number,\n firstMaximum: number,\n secondMaximum: number,\n): void {\n const sum = source[first] + source[second];\n const factor = sum > 0 ? Math.min(1, available / sum) : 1;\n\n adapted[first] = Math.min(source[first] * factor, firstMaximum, adapted[first]);\n adapted[second] = Math.min(source[second] * factor, secondMaximum, adapted[second]);\n}\n\nfunction createInfiniteMargins (): StyleBoxMargins {\n return {\n left: Number.POSITIVE_INFINITY,\n top: Number.POSITIVE_INFINITY,\n right: Number.POSITIVE_INFINITY,\n bottom: Number.POSITIVE_INFINITY,\n };\n}\n\nfunction drawRoundedFill (\n graphics: Graphics,\n rect: StyleBoxRect,\n radii: StyleBoxMargins,\n color: Color,\n): void {\n const points = getRoundedPoints(rect, radii);\n const centerX = rect.x + rect.width * 0.5;\n const centerY = rect.y + rect.height * 0.5;\n\n for (let index = 0; index < points.length; index++) {\n const current = points[index];\n const next = points[(index + 1) % points.length];\n\n graphics.fillTriangle(centerX, centerY, current[0], current[1], next[0], next[1], color);\n }\n}\n\nfunction drawRoundedRing (\n graphics: Graphics,\n outerRect: StyleBoxRect,\n outerRadii: StyleBoxMargins,\n innerRect: StyleBoxRect,\n innerRadii: StyleBoxMargins,\n color: Color,\n): void {\n const outer = getRoundedPoints(outerRect, outerRadii);\n const inner = getRoundedPoints(innerRect, innerRadii);\n\n for (let index = 0; index < outer.length; index++) {\n const next = (index + 1) % outer.length;\n\n graphics.fillTriangle(\n outer[index][0], outer[index][1], outer[next][0], outer[next][1],\n inner[index][0], inner[index][1], color,\n );\n graphics.fillTriangle(\n outer[next][0], outer[next][1], inner[next][0], inner[next][1],\n inner[index][0], inner[index][1], color,\n );\n }\n}\n\nfunction getRoundedPoints (rect: StyleBoxRect, radii: StyleBoxMargins): Array<[number, number]> {\n const points: Array<[number, number]> = [];\n const segments = 5;\n const corners: Array<[number, number, number, number]> = [\n [rect.x + radii.left, rect.y + radii.left, radii.left, Math.PI],\n [rect.x + rect.width - radii.top, rect.y + radii.top, radii.top, Math.PI * 1.5],\n [rect.x + rect.width - radii.right, rect.y + rect.height - radii.right, radii.right, 0],\n [rect.x + radii.bottom, rect.y + rect.height - radii.bottom, radii.bottom, Math.PI * 0.5],\n ];\n\n for (const [cx, cy, radius, start] of corners) {\n for (let index = 0; index <= segments; index++) {\n const angle = start + index / segments * Math.PI * 0.5;\n\n points.push([cx + Math.cos(angle) * radius, cy + Math.sin(angle) * radius]);\n }\n }\n\n return points;\n}\n\nexport class StyleBoxTexture extends StyleBox {\n private _texture: Texture | null = null;\n private sourceRect: StyleBoxRect | null = null;\n private patchMargins = cloneMargins(ZERO_MARGINS);\n private tint = Color.WHITE.clone();\n private _horizontalAxisStretchMode = PatchStretchMode.Stretch;\n private _verticalAxisStretchMode = PatchStretchMode.Stretch;\n private _drawCenter = true;\n\n get texture (): Texture | null { return this._texture; }\n set texture (value: Texture | null) {\n this.assertMutable();\n if (this._texture !== value) {\n this._texture = value;\n this.notifyChanged();\n }\n }\n\n get horizontalAxisStretchMode (): PatchStretchMode { return this._horizontalAxisStretchMode; }\n set horizontalAxisStretchMode (value: PatchStretchMode) {\n this.assertMutable();\n if (this._horizontalAxisStretchMode !== value) {\n this._horizontalAxisStretchMode = value;\n this.notifyChanged();\n }\n }\n\n get verticalAxisStretchMode (): PatchStretchMode { return this._verticalAxisStretchMode; }\n set verticalAxisStretchMode (value: PatchStretchMode) {\n this.assertMutable();\n if (this._verticalAxisStretchMode !== value) {\n this._verticalAxisStretchMode = value;\n this.notifyChanged();\n }\n }\n\n get drawCenter (): boolean { return this._drawCenter; }\n set drawCenter (value: boolean) {\n this.assertMutable();\n if (this._drawCenter !== value) {\n this._drawCenter = value;\n this.notifyChanged();\n }\n }\n\n getSourceRect (): StyleBoxRect | null { return this.sourceRect ? { ...this.sourceRect } : null; }\n getPatchMargins (): StyleBoxMargins { return cloneMargins(this.patchMargins); }\n getTint (): Color { return this.tint.clone(); }\n\n setSourceRect (x: number, y: number, width: number, height: number): void {\n this.assertMutable();\n this.sourceRect = {\n x: finite('StyleBoxTexture source x', x),\n y: finite('StyleBoxTexture source y', y),\n width: nonNegative('StyleBoxTexture source width', width),\n height: nonNegative('StyleBoxTexture source height', height),\n };\n this.notifyChanged();\n }\n\n clearSourceRect (): void {\n this.assertMutable();\n if (this.sourceRect) {\n this.sourceRect = null;\n this.notifyChanged();\n }\n }\n\n setPatchMargins (left: number, top: number, right: number, bottom: number): void {\n this.assertMutable();\n this.patchMargins = {\n left: nonNegative('StyleBoxTexture left patch margin', left),\n top: nonNegative('StyleBoxTexture top patch margin', top),\n right: nonNegative('StyleBoxTexture right patch margin', right),\n bottom: nonNegative('StyleBoxTexture bottom patch margin', bottom),\n };\n this.notifyChanged();\n }\n\n setTint (value: Color): void {\n this.assertMutable();\n if (!this.tint.equals(value)) {\n this.tint.copyFrom(value);\n this.notifyChanged();\n }\n }\n\n override draw (graphics: Graphics, rect: StyleBoxRect): void {\n const texture = this.texture;\n\n if (!texture || rect.width <= 0 || rect.height <= 0) {return;}\n const source = this.sourceRect ?? { x: 0, y: 0, width: texture.width, height: texture.height };\n\n graphics.drawNinePatch(rect.x, rect.y, rect.width, rect.height, texture, {\n sourceX: source.x,\n sourceY: source.y,\n sourceWidth: source.width,\n sourceHeight: source.height,\n marginLeft: this.patchMargins.left,\n marginTop: this.patchMargins.top,\n marginRight: this.patchMargins.right,\n marginBottom: this.patchMargins.bottom,\n horizontalMode: this.horizontalAxisStretchMode,\n verticalMode: this.verticalAxisStretchMode,\n drawCenter: this.drawCenter,\n }, this.tint);\n }\n}\n\n/** Registry for stable control type inheritance and immutable native defaults. */\nexport class ThemeRegistry {\n private static readonly types = new Map<string, RegisteredThemeType>();\n\n static registerType (type: string, baseType: string | null, definitions: ThemeItemDefinitions = {}): void {\n if (!type) {throw new Error('Theme type names cannot be empty.');}\n if (baseType === type) {throw new Error(`Theme type ${type} cannot inherit itself.`);}\n if (baseType && !this.types.has(baseType)) {throw new Error(`Unknown base theme type: ${baseType}.`);}\n if (baseType && this.getTypeChain(baseType).includes(type)) {\n throw new Error(`Theme type inheritance cycle detected at ${type}.`);\n }\n const previous = this.types.get(type);\n\n if (previous && previous.baseType !== baseType) {\n throw new Error(`Theme type ${type} is already registered with base ${previous.baseType ?? '<none>'}.`);\n }\n const storedDefinitions: ThemeItemDefinitions = { ...(previous?.definitions ?? {}) };\n\n for (const name of Object.keys(definitions)) {\n if (storedDefinitions[name]) {\n throw new Error(`Theme item ${type}.${name} is already registered.`);\n }\n const definition = definitions[name];\n const defaultValue = cloneThemeValue(definition.defaultValue);\n\n if (defaultValue instanceof StyleBox) {defaultValue.makeReadOnly();}\n storedDefinitions[name] = { ...definition, defaultValue };\n }\n this.types.set(type, { baseType, definitions: storedDefinitions });\n }\n\n static hasType (type: string): boolean { return this.types.has(type); }\n\n static getTypeChain (type: string): string[] {\n const result: string[] = [];\n const visited = new Set<string>();\n let current: string | null = type;\n\n while (current && !visited.has(current)) {\n result.push(current);\n visited.add(current);\n current = this.types.get(current)?.baseType ?? null;\n }\n\n return result;\n }\n\n static getDefault (type: string, itemType: ThemeItemType, name: string): ThemeValue | undefined {\n const definition = this.types.get(type)?.definitions[name];\n\n return definition?.type === itemType ? cloneThemeValue(definition.defaultValue) : undefined;\n }\n\n static getItemDefinition (type: string, itemType: ThemeItemType, name: string): ThemeItemDefinition | undefined {\n for (const dependency of this.getTypeChain(type)) {\n const definition = this.types.get(dependency)?.definitions[name];\n\n if (definition?.type === itemType) {return definition;}\n }\n\n return undefined;\n }\n\n static affectsLayout (type: string, itemType: ThemeItemType, name: string): boolean {\n const definition = this.getItemDefinition(type, itemType, name);\n\n if (definition) {return definition.affectsLayout ?? false;}\n\n return itemType === ThemeItemType.Constant\n || itemType === ThemeItemType.Font\n || itemType === ThemeItemType.FontSize\n || itemType === ThemeItemType.StyleBox;\n }\n\n static getItemDefinitions (type: string, includeInherited = true): ThemeItemDefinitions {\n const result: ThemeItemDefinitions = {};\n const chain = includeInherited ? this.getTypeChain(type).reverse() : [type];\n\n for (const dependency of chain) {\n const definitions = this.types.get(dependency)?.definitions ?? {};\n\n for (const name of Object.keys(definitions)) {\n const definition = definitions[name];\n\n result[name] = { ...definition, defaultValue: cloneThemeValue(definition.defaultValue) };\n }\n }\n\n return result;\n }\n}\n\nexport class Theme {\n private readonly eventEmitter = new EventEmitter<ThemeEvent>();\n private readonly values = new Map<string, Map<ThemeItemType, Map<string, ThemeValue>>>();\n private readonly variations = new Map<string, string>();\n private readonly styleBoxReferences = new Map<StyleBox, number>();\n private batchDepth = 0;\n private changePending = false;\n private layoutChangePending = false;\n private readonly styleBoxChanged = () => this.notifyChanged(true);\n\n on (eventName: 'changed', listener: EventEmitterListener<ThemeEvent['changed']>): void {\n this.eventEmitter.on(eventName, listener);\n }\n\n off (eventName: 'changed', listener: EventEmitterListener<ThemeEvent['changed']>): void {\n this.eventEmitter.off(eventName, listener);\n }\n\n batch<T> (callback: () => T): T {\n this.batchDepth++;\n try {\n return callback();\n } finally {\n this.batchDepth--;\n if (this.batchDepth === 0 && this.changePending) {\n this.changePending = false;\n const affectsLayout = this.layoutChangePending;\n\n this.layoutChangePending = false;\n this.eventEmitter.emit('changed', this, affectsLayout);\n }\n }\n }\n\n setTypeVariation (variation: string, baseType: string): void {\n if (!variation || !baseType || variation === baseType) {throw new Error('Theme variations require distinct non-empty names.');}\n if (ThemeRegistry.hasType(variation)) {\n throw new Error(`Theme variation ${variation} conflicts with a registered control type.`);\n }\n if (!ThemeRegistry.hasType(baseType) && !this.variations.has(baseType)) {\n throw new Error(`Unknown theme variation base type: ${baseType}.`);\n }\n let current: string | undefined = baseType;\n\n while (current) {\n if (current === variation) {throw new Error(`Theme variation cycle detected at ${variation}.`);}\n current = this.variations.get(current);\n }\n if (this.variations.get(variation) !== baseType) {\n this.variations.set(variation, baseType);\n this.notifyChanged(true);\n }\n }\n\n clearTypeVariation (variation: string): void {\n for (const [dependent, base] of this.variations) {\n if (dependent !== variation && base === variation) {\n throw new Error(`Theme variation ${variation} is still used by ${dependent}.`);\n }\n }\n if (this.variations.delete(variation)) {this.notifyChanged(true);}\n }\n\n hasTypeVariation (variation: string): boolean { return this.variations.has(variation); }\n getTypeVariationBase (variation: string): string | undefined { return this.variations.get(variation); }\n\n getTypeDependencies (variation: string): string[] {\n const result: string[] = [];\n const visited = new Set<string>();\n let current = variation;\n\n while (!visited.has(current)) {\n result.push(current);\n visited.add(current);\n const base = this.variations.get(current);\n\n if (!base) {\n result.push(...ThemeRegistry.getTypeChain(current).slice(1));\n\n return result;\n }\n current = base;\n }\n\n throw new Error(`Theme variation cycle detected at ${variation}.`);\n }\n\n setColor (type: string, name: string, value: Color): void { this.setItem(type, ThemeItemType.Color, name, value); }\n getColor (type: string, name: string): Color | undefined { return this.getItem(type, ThemeItemType.Color, name) as Color | undefined; }\n hasColor (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.Color, name); }\n clearColor (type: string, name: string): void { this.clearItem(type, ThemeItemType.Color, name); }\n setConstant (type: string, name: string, value: number): void { this.setItem(type, ThemeItemType.Constant, name, finite(name, value)); }\n getConstant (type: string, name: string): number | undefined { return this.getItem(type, ThemeItemType.Constant, name) as number | undefined; }\n hasConstant (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.Constant, name); }\n clearConstant (type: string, name: string): void { this.clearItem(type, ThemeItemType.Constant, name); }\n setFont (type: string, name: string, value: ThemeFont): void { this.setItem(type, ThemeItemType.Font, name, value); }\n getFont (type: string, name: string): ThemeFont | undefined { return this.getItem(type, ThemeItemType.Font, name) as ThemeFont | undefined; }\n hasFont (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.Font, name); }\n clearFont (type: string, name: string): void { this.clearItem(type, ThemeItemType.Font, name); }\n setFontSize (type: string, name: string, value: number): void {\n if (!Number.isFinite(value) || value <= 0) {throw new RangeError(`${name} must be a positive finite font size.`);}\n this.setItem(type, ThemeItemType.FontSize, name, value);\n }\n getFontSize (type: string, name: string): number | undefined { return this.getItem(type, ThemeItemType.FontSize, name) as number | undefined; }\n hasFontSize (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.FontSize, name); }\n clearFontSize (type: string, name: string): void { this.clearItem(type, ThemeItemType.FontSize, name); }\n setIcon (type: string, name: string, value: Texture | null): void { this.setItem(type, ThemeItemType.Icon, name, value); }\n getIcon (type: string, name: string): Texture | null | undefined { return this.getItem(type, ThemeItemType.Icon, name) as Texture | null | undefined; }\n hasIcon (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.Icon, name); }\n clearIcon (type: string, name: string): void { this.clearItem(type, ThemeItemType.Icon, name); }\n setStyleBox (type: string, name: string, value: StyleBox): void { this.setItem(type, ThemeItemType.StyleBox, name, value); }\n getStyleBox (type: string, name: string): StyleBox | undefined { return this.getItem(type, ThemeItemType.StyleBox, name) as StyleBox | undefined; }\n hasStyleBox (type: string, name: string): boolean { return this.hasItem(type, ThemeItemType.StyleBox, name); }\n clearStyleBox (type: string, name: string): void { this.clearItem(type, ThemeItemType.StyleBox, name); }\n\n hasItem (type: string, itemType: ThemeItemType, name: string): boolean {\n return this.values.get(type)?.get(itemType)?.has(name) ?? false;\n }\n\n getItem (type: string, itemType: ThemeItemType, name: string): ThemeValue | undefined {\n const value = this.values.get(type)?.get(itemType)?.get(name);\n\n return value === undefined ? undefined : cloneThemeValue(value);\n }\n\n clearItem (type: string, itemType: ThemeItemType, name: string): void {\n const categories = this.values.get(type);\n const items = categories?.get(itemType);\n const previous = items?.get(name);\n\n if (!items?.delete(name)) {return;}\n if (items.size === 0) {categories?.delete(itemType);}\n if (categories?.size === 0) {this.values.delete(type);}\n if (previous instanceof StyleBox) {this.releaseStyleBox(previous);}\n this.notifyChanged(this.affectsLayout(type, itemType, name));\n }\n\n clear (): void {\n if (this.values.size === 0 && this.variations.size === 0) {return;}\n for (const styleBox of this.styleBoxReferences.keys()) {\n styleBox.off('changed', this.styleBoxChanged);\n }\n this.styleBoxReferences.clear();\n this.values.clear();\n this.variations.clear();\n this.notifyChanged(true);\n }\n\n static fromData (engine: Engine, data: spec.ThemeData): Theme {\n const theme = new Theme();\n\n theme.batch(() => {\n const variations = data.variations ?? {};\n const remaining = new Map<string, string>();\n\n for (const variation of Object.keys(variations)) {remaining.set(variation, variations[variation]);}\n\n while (remaining.size > 0) {\n let progressed = false;\n\n for (const [variation, base] of remaining) {\n if (ThemeRegistry.hasType(base) || theme.hasTypeVariation(base)) {\n theme.setTypeVariation(variation, base);\n remaining.delete(variation);\n progressed = true;\n }\n }\n if (!progressed) {throw new Error('Theme data contains an unknown or cyclic variation.');}\n }\n for (const type of Object.keys(data.types)) {theme.setCollectionFromData(engine, type, data.types[type]);}\n });\n\n return theme;\n }\n\n private setCollectionFromData (engine: Engine, type: string, data: spec.ThemeItemCollectionData): void {\n const colors = data.colors ?? {};\n const constants = data.constants ?? {};\n const fonts = data.fonts ?? {};\n const fontSizes = data.fontSizes ?? {};\n const icons = data.icons ?? {};\n const styleBoxes = data.styleBoxes ?? {};\n\n for (const name of Object.keys(colors)) {\n const value = colors[name];\n\n this.setColor(type, name, new Color(value.r, value.g, value.b, value.a));\n }\n for (const name of Object.keys(constants)) {this.setConstant(type, name, constants[name]);}\n for (const name of Object.keys(fonts)) {this.setFont(type, name, fontFromData(fonts[name]));}\n for (const name of Object.keys(fontSizes)) {this.setFontSize(type, name, fontSizes[name]);}\n for (const name of Object.keys(icons)) {\n const value = icons[name];\n\n this.setIcon(type, name, value ? engine.findObject<Texture>(value) : null);\n }\n for (const name of Object.keys(styleBoxes)) {this.setStyleBox(type, name, styleBoxFromData(engine, styleBoxes[name]));}\n }\n\n private setItem (type: string, itemType: ThemeItemType, name: string, value: ThemeValue): void {\n if (!type || !name) {throw new Error('Theme type and item names cannot be empty.');}\n let categories = this.values.get(type);\n\n if (!categories) {this.values.set(type, categories = new Map());}\n let items = categories.get(itemType);\n\n if (!items) {categories.set(itemType, items = new Map());}\n const previous = items.get(name);\n\n if (previous instanceof StyleBox) {this.releaseStyleBox(previous);}\n const stored = cloneThemeValue(value);\n\n items.set(name, stored);\n if (stored instanceof StyleBox) {this.retainStyleBox(stored);}\n this.notifyChanged(this.affectsLayout(type, itemType, name));\n }\n\n private retainStyleBox (styleBox: StyleBox): void {\n const count = this.styleBoxReferences.get(styleBox) ?? 0;\n\n if (count === 0) {styleBox.on('changed', this.styleBoxChanged);}\n this.styleBoxReferences.set(styleBox, count + 1);\n }\n\n private releaseStyleBox (styleBox: StyleBox): void {\n const count = this.styleBoxReferences.get(styleBox) ?? 0;\n\n if (count <= 1) {\n styleBox.off('changed', this.styleBoxChanged);\n this.styleBoxReferences.delete(styleBox);\n } else {this.styleBoxReferences.set(styleBox, count - 1);}\n }\n\n private notifyChanged (affectsLayout: boolean): void {\n if (this.batchDepth > 0) {\n this.changePending = true;\n this.layoutChangePending ||= affectsLayout;\n } else {this.eventEmitter.emit('changed', this, affectsLayout);}\n }\n\n private affectsLayout (type: string, itemType: ThemeItemType, name: string): boolean {\n for (const dependency of this.getTypeDependencies(type)) {\n const definition = ThemeRegistry.getItemDefinition(dependency, itemType, name);\n\n if (definition) {return definition.affectsLayout ?? false;}\n }\n\n return itemType === ThemeItemType.Constant\n || itemType === ThemeItemType.Font\n || itemType === ThemeItemType.FontSize\n || itemType === ThemeItemType.StyleBox;\n }\n}\n\nexport function styleBoxFromData (engine: Engine, data: spec.StyleBoxData): StyleBox {\n let styleBox: StyleBox;\n\n if (data.type === 'flat') {\n const flat = new StyleBoxFlat();\n\n if (data.backgroundColor) {flat.setBackgroundColor(new Color(data.backgroundColor.r, data.backgroundColor.g, data.backgroundColor.b, data.backgroundColor.a));}\n if (data.borderColor) {flat.setBorderColor(new Color(data.borderColor.r, data.borderColor.g, data.borderColor.b, data.borderColor.a));}\n const border = marginsFromData(data.borderWidths);\n\n flat.setBorderWidths(border.left, border.top, border.right, border.bottom);\n const corners = marginsFromData(data.cornerRadii);\n\n flat.setCornerRadii(corners.left, corners.top, corners.right, corners.bottom);\n styleBox = flat;\n } else if (data.type === 'texture') {\n const texture = new StyleBoxTexture();\n\n texture.texture = data.texture ? engine.findObject<Texture>(data.texture) : null;\n if (data.sourceRect) {texture.setSourceRect(data.sourceRect.position[0], data.sourceRect.position[1], data.sourceRect.size[0], data.sourceRect.size[1]);}\n const patch = marginsFromData(data.patchMargins);\n\n texture.setPatchMargins(patch.left, patch.top, patch.right, patch.bottom);\n texture.horizontalAxisStretchMode = data.horizontalAxisStretchMode ?? PatchStretchMode.Stretch;\n texture.verticalAxisStretchMode = data.verticalAxisStretchMode ?? PatchStretchMode.Stretch;\n texture.drawCenter = data.drawCenter ?? true;\n if (data.tint) {texture.setTint(new Color(data.tint.r, data.tint.g, data.tint.b, data.tint.a));}\n styleBox = texture;\n } else {styleBox = new StyleBoxEmpty();}\n const content = marginsFromData(data.contentMargins);\n\n styleBox.setContentMargins(content.left, content.top, content.right, content.bottom);\n\n return styleBox;\n}\n\nexport const themeFallbacks = {\n color: Color.CLEAR.clone(),\n constant: 0,\n font: { family: 'sans-serif', weight: 'normal', style: 'normal' } as ThemeFont,\n fontSize: 14,\n icon: null as Texture | null,\n styleBox: StyleBoxEmpty.shared,\n};\n","import { math } from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n FontStyle,\n FontWeight,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n InputEventScreenDrag,\n InputEventScreenTouch,\n NinePatchDrawOptions,\n TextMeasurement,\n Texture,\n TextureRegion,\n VFXItem,\n spec,\n} from '@galacean/effects';\nimport {\n effectsClass,\n EventEmitter,\n} from '@galacean/effects';\nimport type { UIControl } from '../components/ui-control';\nimport type { CursorStyle } from './enums';\nimport {\n CursorShape,\n FocusBehaviorRecursive,\n FocusMode,\n MouseBehaviorRecursive,\n MouseFilter,\n} from './enums';\nimport {\n cloneThemeValue,\n StyleBox,\n styleBoxFromData,\n themeFallbacks,\n ThemeItemType,\n ThemeRegistry,\n} from './theme';\nimport type { Theme, ThemeFont, ThemeValue } from './theme';\n\ntype Color = math.Color;\ntype Matrix3 = math.Matrix3;\ntype Vector2 = math.Vector2;\nconst Color = math.Color;\nconst Matrix3 = math.Matrix3;\nconst Vector2 = math.Vector2;\n\nexport type Rect = {\n position: Vector2,\n size: Vector2,\n};\n\n/** Bit flags that describe how a Control uses space assigned by a Container. */\nexport enum SizeFlags {\n ShrinkBegin = 0,\n Fill = 1,\n Expand = 2,\n ShrinkCenter = 4,\n ShrinkEnd = 8,\n ExpandFill = Fill | Expand,\n}\n\n/** Direction in which a Control grows when a minimum size makes its requested rectangle larger. */\nexport enum GrowDirection {\n Begin,\n End,\n Both,\n}\n\nexport type LayoutPreset =\n | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'\n | 'centerLeft' | 'centerTop' | 'centerRight' | 'centerBottom'\n | 'center'\n | 'leftWide' | 'topWide' | 'rightWide' | 'bottomWide'\n | 'vcenterWide' | 'hcenterWide'\n | 'fullRect';\n\nexport type ControlEvent = {\n locationChanged: [control: Control],\n sizeChanged: [control: Control],\n parentChanged: [control: Control],\n minimumSizeChanged: [control: Control],\n desiredSizeChanged: [control: Control],\n maximumSizeChanged: [control: Control],\n sizeFlagsChanged: [control: Control],\n visibilityChanged: [control: Control],\n enabledChanged: [control: Control],\n themeChanged: [control: Control, affectsLayout: boolean],\n};\n\ntype ThemeCacheEntry = { found: boolean, value: ThemeValue };\n\nconst enum MeasurementChange {\n Minimum = 1,\n Desired = 2,\n Maximum = 4,\n All = Minimum | Desired | Maximum,\n}\n\nexport type RootControlEvent = ControlEvent & {\n guiFocusChanged: [control: Control | null],\n};\n\nfunction normalizeMeasuredMinimum (value: Vector2): Vector2 {\n if (!Number.isFinite(value.x) || !Number.isFinite(value.y)) {\n throw new RangeError('Control minimum and desired sizes must be finite.');\n }\n\n return new Vector2(Math.max(0, value.x), Math.max(0, value.y));\n}\n\nfunction normalizeMeasuredMaximum (value: Vector2): Vector2 {\n if (!Number.isFinite(value.x) || !Number.isFinite(value.y)) {\n throw new RangeError('Control maximum sizes must be finite.');\n }\n\n return new Vector2(value.x < 0 ? -1 : value.x, value.y < 0 ? -1 : value.y);\n}\n\nfunction combineMaximum (measured: number, custom: number): number {\n if (measured < 0) {\n return custom;\n }\n if (custom < 0) {\n return measured;\n }\n\n return Math.min(measured, custom);\n}\n\nfunction clampToMaximum (value: number, maximum: number): number {\n return maximum < 0 ? value : Math.min(value, maximum);\n}\n\nconst ANCHOR_PRESET_TABLE: Record<LayoutPreset, [number, number, number, number]> = {\n topLeft: [0, 0, 0, 0],\n topRight: [1, 0, 1, 0],\n bottomLeft: [0, 1, 0, 1],\n bottomRight: [1, 1, 1, 1],\n centerLeft: [0, 0.5, 0, 0.5],\n centerTop: [0.5, 0, 0.5, 0],\n centerRight: [1, 0.5, 1, 0.5],\n centerBottom: [0.5, 1, 0.5, 1],\n center: [0.5, 0.5, 0.5, 0.5],\n leftWide: [0, 0, 0, 1],\n topWide: [0, 0, 1, 0],\n rightWide: [1, 0, 1, 1],\n bottomWide: [0, 1, 1, 1],\n vcenterWide: [0.5, 0, 0.5, 1],\n hcenterWide: [0, 0.5, 1, 0.5],\n fullRect: [0, 0, 1, 1],\n};\n\n/**\n * A drawable GUI object. Controls form a tree independent from the VFXItem\n * scene tree. UIControl is the bridge between both trees.\n */\n@effectsClass('Control')\nexport class Control {\n static readonly themeType: string = 'Control';\n readonly engine: Engine;\n /** Scene-tree bridge that owns this GUI object, if any. */\n owner: UIControl | null = null;\n readonly children: Control[] = [];\n readonly position = new Vector2();\n readonly size = new Vector2(1, 1);\n readonly anchorMin = new Vector2();\n readonly anchorMax = new Vector2();\n readonly offsetMin = new Vector2();\n readonly offsetMax = new Vector2(1, 1);\n readonly pivot = new Vector2(0.5, 0.5);\n readonly scale = new Vector2(1, 1);\n readonly shear = new Vector2();\n mouseForcePassScrollEvents = true;\n clipContents = false;\n\n private _parent: Control | null = null;\n private _visible = true;\n private _enabled = true;\n private _mouseFilter = MouseFilter.Stop;\n private _mouseBehaviorRecursive = MouseBehaviorRecursive.Inherited;\n private _focusMode = FocusMode.None;\n private _focusBehaviorRecursive = FocusBehaviorRecursive.Inherited;\n private _defaultCursorShape: CursorStyle = CursorShape.Arrow;\n private _rotation = 0;\n private transformDirty = true;\n private readonly cachedTransform = new Matrix3();\n private readonly eventEmitter = new EventEmitter<ControlEvent>();\n private disposed = false;\n private readonly customMinimumSize = new Vector2();\n private readonly customMaximumSize = new Vector2(-1, -1);\n private minimumSizeCache: Vector2 | null = null;\n private desiredSizeCache: Vector2 | null = null;\n private maximumSizeCache: Vector2 | null = null;\n private pendingMeasurementChanges = 0;\n private _horizontalSizeFlags = SizeFlags.Fill;\n private _verticalSizeFlags = SizeFlags.Fill;\n private _stretchRatio = 1;\n private _horizontalGrowDirection = GrowDirection.End;\n private _verticalGrowDirection = GrowDirection.End;\n private _theme: Theme | null = null;\n private themeOwnerNode: Control | null = null;\n private _themeTypeVariation = '';\n private readonly themeOverrides = new Map<ThemeItemType, Map<string, ThemeValue>>();\n private readonly themeCache = new Map<string, ThemeCacheEntry>();\n private readonly overrideStyleBoxReferences = new Map<StyleBox, number>();\n private readonly attachedThemeChanged = (_theme: Theme, affectsLayout: boolean) => {\n this.propagateThemeChanged(affectsLayout);\n };\n private readonly overrideStyleBoxChanged = () => this.propagateThemeChanged(true, false);\n\n constructor (engine: Engine) {\n this.engine = engine;\n }\n\n get parent (): Control | null {\n return this._parent;\n }\n\n set parent (value: Control | null) {\n if (value === this._parent) {\n return;\n }\n const previousRoot = this.root;\n\n if (this._parent?.hasThemeOwnerNode()) {\n this.propagateThemeOwner(null, false, true);\n }\n this._parent?.removeChildInternal(this);\n this._parent = value;\n value?.addChildInternal(this);\n if (value?.hasThemeOwnerNode()) {\n this.propagateThemeOwner(value.getThemeOwnerNode(), false, true);\n }\n this.updateLayout();\n const nextRoot = this.root;\n\n if (nextRoot) {\n this.propagateThemeChanged(true);\n }\n if (previousRoot && previousRoot !== nextRoot) {\n previousRoot.controlRemoved(this);\n }\n if (nextRoot && previousRoot !== nextRoot) {\n this.queuePendingLayouts();\n this.queuePendingMeasurements(nextRoot);\n }\n if (previousRoot !== nextRoot) {\n this.notifyRootChanged(previousRoot, nextRoot);\n }\n nextRoot?.controlTreeChanged();\n this.eventEmitter.emit('parentChanged', this);\n }\n\n /** Scene item exposed through the optional UIControl bridge. */\n get item (): VFXItem | null {\n return this.owner?.item ?? null;\n }\n\n get indexInParent (): number {\n return this.parent?.getChildIndex(this) ?? -1;\n }\n\n set indexInParent (value: number) {\n this.parent?.changeChildIndex(this, value);\n }\n\n get visible (): boolean {\n return this._visible;\n }\n\n set visible (value: boolean) {\n if (this._visible !== value) {\n this._visible = value;\n this.root?.controlStateChanged(this);\n this.eventEmitter.emit('visibilityChanged', this);\n }\n }\n\n get visibleInHierarchy (): boolean {\n return this.visible && (this.parent?.visibleInHierarchy ?? true);\n }\n\n get enabled (): boolean {\n return this._enabled;\n }\n\n set enabled (value: boolean) {\n if (this._enabled !== value) {\n this._enabled = value;\n this.root?.controlStateChanged(this);\n this.eventEmitter.emit('enabledChanged', this);\n }\n }\n\n get enabledInHierarchy (): boolean {\n return this.enabled && (this.parent?.enabledInHierarchy ?? true);\n }\n\n get mouseFilter (): MouseFilter {\n return this._mouseFilter;\n }\n\n set mouseFilter (value: MouseFilter) {\n if (this._mouseFilter !== value) {\n this._mouseFilter = value;\n this.root?.controlStateChanged(this);\n }\n }\n\n get mouseBehaviorRecursive (): MouseBehaviorRecursive {\n return this._mouseBehaviorRecursive;\n }\n\n set mouseBehaviorRecursive (value: MouseBehaviorRecursive) {\n if (this._mouseBehaviorRecursive !== value) {\n this._mouseBehaviorRecursive = value;\n this.root?.controlStateChanged(this);\n }\n }\n\n get focusMode (): FocusMode {\n return this._focusMode;\n }\n\n set focusMode (value: FocusMode) {\n if (this._focusMode !== value) {\n this._focusMode = value;\n this.root?.controlStateChanged(this);\n }\n }\n\n get focusBehaviorRecursive (): FocusBehaviorRecursive {\n return this._focusBehaviorRecursive;\n }\n\n set focusBehaviorRecursive (value: FocusBehaviorRecursive) {\n if (this._focusBehaviorRecursive !== value) {\n this._focusBehaviorRecursive = value;\n this.root?.controlStateChanged(this);\n }\n }\n\n get defaultCursorShape (): CursorStyle {\n return this._defaultCursorShape;\n }\n\n set defaultCursorShape (value: CursorStyle) {\n if (this._defaultCursorShape === value) {\n return;\n }\n this._defaultCursorShape = value;\n this.root?.updateMouseCursorState();\n }\n\n get location (): Vector2 {\n return this.position;\n }\n\n set location (value: Vector2) {\n this.setPosition(value.x, value.y);\n }\n\n get rotation (): number {\n return this._rotation;\n }\n\n get x (): number {\n return this.position.x;\n }\n\n set x (value: number) {\n this.setPosition(value, this.position.y);\n }\n\n get y (): number {\n return this.position.y;\n }\n\n set y (value: number) {\n this.setPosition(this.position.x, value);\n }\n\n get width (): number {\n return this.size.x;\n }\n\n set width (value: number) {\n this.setSize(value, this.size.y);\n }\n\n get height (): number {\n return this.size.y;\n }\n\n set height (value: number) {\n this.setSize(this.size.x, value);\n }\n\n get horizontalSizeFlags (): SizeFlags {\n return this._horizontalSizeFlags;\n }\n\n set horizontalSizeFlags (value: SizeFlags) {\n this.setSizeFlags(value, this._verticalSizeFlags);\n }\n\n get verticalSizeFlags (): SizeFlags {\n return this._verticalSizeFlags;\n }\n\n set verticalSizeFlags (value: SizeFlags) {\n this.setSizeFlags(this._horizontalSizeFlags, value);\n }\n\n get stretchRatio (): number {\n return this._stretchRatio;\n }\n\n set stretchRatio (value: number) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError('Control stretchRatio must be a finite number greater than zero.');\n }\n if (this._stretchRatio !== value) {\n this._stretchRatio = value;\n this.eventEmitter.emit('sizeFlagsChanged', this);\n }\n }\n\n get horizontalGrowDirection (): GrowDirection {\n return this._horizontalGrowDirection;\n }\n\n set horizontalGrowDirection (value: GrowDirection) {\n this.assertGrowDirection(value);\n if (this._horizontalGrowDirection !== value) {\n this._horizontalGrowDirection = value;\n this.updateLayout();\n }\n }\n\n get verticalGrowDirection (): GrowDirection {\n return this._verticalGrowDirection;\n }\n\n set verticalGrowDirection (value: GrowDirection) {\n this.assertGrowDirection(value);\n if (this._verticalGrowDirection !== value) {\n this._verticalGrowDirection = value;\n this.updateLayout();\n }\n }\n\n get root (): RootControl | null {\n return this instanceof RootControl ? this : this.parent?.root ?? null;\n }\n\n get isDisposed (): boolean {\n return this.disposed;\n }\n\n /** Theme applied to this Control and inherited by its descendants. */\n get theme (): Theme | null {\n return this._theme;\n }\n\n set theme (value: Theme | null) {\n if (this._theme === value) {return;}\n this._theme?.off('changed', this.attachedThemeChanged);\n this._theme = value;\n if (value) {\n this.propagateThemeOwner(this, !!this.root, true);\n value.on('changed', this.attachedThemeChanged);\n } else {\n this.propagateThemeOwner(this.parent?.getThemeOwnerNode() ?? null, !!this.root, true);\n }\n }\n\n /** Returns the nearest Theme currently inherited by this Control. */\n getInheritedTheme (): Theme | null {\n return this.themeOwnerNode?.theme ?? null;\n }\n\n /** Returns the Control that owns the first Theme in this Control's inheritance chain. */\n getThemeOwnerNode (): Control | null {\n return this.themeOwnerNode;\n }\n\n /** Returns whether this Control is affected by a Theme in its Control ancestry. */\n hasThemeOwnerNode (): boolean {\n return this.themeOwnerNode !== null;\n }\n\n /** Optional named type variation resolved before this Control's native theme type. */\n get themeTypeVariation (): string {\n return this._themeTypeVariation;\n }\n\n set themeTypeVariation (value: string) {\n const normalized = value.trim();\n\n if (this._themeTypeVariation !== normalized) {\n this._themeTypeVariation = normalized;\n this.propagateThemeChanged(true, false);\n }\n }\n\n /** Stable theme type declared by the closest Control class that provides one. */\n getThemeType (): string {\n return (this.constructor as typeof Control).themeType;\n }\n\n getThemeColor (name: string, themeType?: string): Color {\n return cloneThemeValue(this.resolveThemeItem(ThemeItemType.Color, name, themeType).value as Color);\n }\n\n getThemeConstant (name: string, themeType?: string): number {\n return this.resolveThemeItem(ThemeItemType.Constant, name, themeType).value as number;\n }\n\n getThemeFont (name: string, themeType?: string): ThemeFont {\n return cloneThemeValue(this.resolveThemeItem(ThemeItemType.Font, name, themeType).value as ThemeFont);\n }\n\n getThemeFontSize (name: string, themeType?: string): number {\n return this.resolveThemeItem(ThemeItemType.FontSize, name, themeType).value as number;\n }\n\n getThemeIcon (name: string, themeType?: string): Texture | null {\n return this.resolveThemeItem(ThemeItemType.Icon, name, themeType).value as Texture | null;\n }\n\n getThemeStyleBox (name: string, themeType?: string): StyleBox {\n return this.resolveThemeItem(ThemeItemType.StyleBox, name, themeType).value as StyleBox;\n }\n\n hasThemeColor (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.Color, name, themeType).found;\n }\n\n hasThemeConstant (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.Constant, name, themeType).found;\n }\n\n hasThemeFont (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.Font, name, themeType).found;\n }\n\n hasThemeFontSize (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.FontSize, name, themeType).found;\n }\n\n hasThemeIcon (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.Icon, name, themeType).found;\n }\n\n hasThemeStyleBox (name: string, themeType?: string): boolean {\n return this.resolveThemeItem(ThemeItemType.StyleBox, name, themeType).found;\n }\n\n setThemeColorOverride (name: string, value: Color): void {\n this.setThemeOverride(ThemeItemType.Color, name, value);\n }\n\n setThemeConstantOverride (name: string, value: number): void {\n if (!Number.isFinite(value)) {throw new RangeError(`${name} must be finite.`);}\n this.setThemeOverride(ThemeItemType.Constant, name, value);\n }\n\n setThemeFontOverride (name: string, value: ThemeFont): void {\n this.setThemeOverride(ThemeItemType.Font, name, value);\n }\n\n setThemeFontSizeOverride (name: string, value: number): void {\n if (!Number.isFinite(value) || value <= 0) {throw new RangeError(`${name} must be a positive finite font size.`);}\n this.setThemeOverride(ThemeItemType.FontSize, name, value);\n }\n\n setThemeIconOverride (name: string, value: Texture | null): void {\n this.setThemeOverride(ThemeItemType.Icon, name, value);\n }\n\n setThemeStyleBoxOverride (name: string, value: StyleBox): void {\n this.setThemeOverride(ThemeItemType.StyleBox, name, value);\n }\n\n removeThemeColorOverride (name: string): void { this.removeThemeOverride(ThemeItemType.Color, name); }\n removeThemeConstantOverride (name: string): void { this.removeThemeOverride(ThemeItemType.Constant, name); }\n removeThemeFontOverride (name: string): void { this.removeThemeOverride(ThemeItemType.Font, name); }\n removeThemeFontSizeOverride (name: string): void { this.removeThemeOverride(ThemeItemType.FontSize, name); }\n removeThemeIconOverride (name: string): void { this.removeThemeOverride(ThemeItemType.Icon, name); }\n removeThemeStyleBoxOverride (name: string): void { this.removeThemeOverride(ThemeItemType.StyleBox, name); }\n\n hasThemeColorOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.Color, name); }\n hasThemeConstantOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.Constant, name); }\n hasThemeFontOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.Font, name); }\n hasThemeFontSizeOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.FontSize, name); }\n hasThemeIconOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.Icon, name); }\n hasThemeStyleBoxOverride (name: string): boolean { return this.hasThemeOverride(ThemeItemType.StyleBox, name); }\n\n clearThemeOverrides (): void {\n if (this.themeOverrides.size === 0) {return;}\n let affectsLayout = false;\n\n for (const [itemType, items] of this.themeOverrides) {\n for (const [name, value] of items) {\n if (value instanceof StyleBox) {this.releaseOverrideStyleBox(value);}\n affectsLayout ||= ThemeRegistry.affectsLayout(this.getThemeType(), itemType, name);\n }\n }\n this.themeOverrides.clear();\n this.propagateThemeChanged(affectsLayout, false);\n }\n\n hasFocus (visibleOnly = false): boolean {\n return this.root?.guiControlHasFocus(this, visibleOnly) ?? false;\n }\n\n drawStyleBox (styleBox: StyleBox, x: number, y: number, width: number, height: number): void {\n styleBox.draw(this.engine.graphics, { x, y, width, height });\n }\n\n on<E extends keyof ControlEvent> (\n eventName: E,\n listener: EventEmitterListener<ControlEvent[E]>,\n ): void {\n this.eventEmitter.on(eventName, listener);\n }\n\n off<E extends keyof ControlEvent> (\n eventName: E,\n listener: EventEmitterListener<ControlEvent[E]>,\n ): void {\n this.eventEmitter.off(eventName, listener);\n }\n\n addChild<T extends Control> (child: T): T {\n child.parent = this;\n\n return child;\n }\n\n removeChild (child: Control): void {\n if (child.parent === this) {\n child.parent = null;\n }\n }\n\n getChildIndex (child: Control): number {\n return this.children.indexOf(child);\n }\n\n /** @internal */\n changeChildIndex (child: Control, newIndex: number): void {\n const oldIndex = this.children.indexOf(child);\n\n if (oldIndex === newIndex || oldIndex === -1) {\n return;\n }\n this.children.splice(oldIndex, 1);\n if (newIndex < 0 || newIndex >= this.children.length) {\n this.children.push(child);\n } else {\n this.children.splice(newIndex, 0, child);\n }\n this.root?.controlTreeChanged();\n }\n\n /** @internal */\n addChildInternal (child: Control): void {\n if (!this.children.includes(child)) {\n this.children.push(child);\n }\n }\n\n /** @internal */\n removeChildInternal (child: Control): void {\n const index = this.children.indexOf(child);\n\n if (index !== -1) {\n this.children.splice(index, 1);\n }\n }\n\n setPosition (x: number, y: number, keepOffsets = false): void {\n if (this.position.x === x && this.position.y === y) {\n return;\n }\n const rect = { position: new Vector2(x, y), size: this.size.clone() };\n\n if (keepOffsets && this.parent) {\n this.computeAnchors(rect, this.getParentRect());\n } else {\n this.computeOffsets(rect, this.getParentRect());\n }\n this.updateLayout();\n }\n\n setSize (width: number, height: number): void {\n if (this.size.x === width && this.size.y === height) {\n return;\n }\n const rect = { position: this.position.clone(), size: new Vector2(width, height) };\n\n this.computeOffsets(rect, this.getParentRect());\n this.updateLayout();\n }\n\n /** Atomically replaces the local rectangle while preserving the current anchors. */\n setRect (rect: Rect): void {\n const nextRect = {\n position: rect.position.clone(),\n size: rect.size.clone(),\n };\n\n this.computeOffsets(nextRect, this.getParentRect());\n this.updateLayout();\n }\n\n setSizeFlags (horizontal: SizeFlags, vertical: SizeFlags): void {\n if (!Number.isInteger(horizontal) || horizontal < SizeFlags.ShrinkBegin\n || !Number.isInteger(vertical) || vertical < SizeFlags.ShrinkBegin) {\n throw new RangeError('Control size flags must be non-negative integers.');\n }\n if (this._horizontalSizeFlags !== horizontal || this._verticalSizeFlags !== vertical) {\n this._horizontalSizeFlags = horizontal;\n this._verticalSizeFlags = vertical;\n this.eventEmitter.emit('sizeFlagsChanged', this);\n }\n }\n\n /** Intrinsic minimum size supplied by a subclass. */\n getMinimumSize (): Vector2 {\n return new Vector2();\n }\n\n /** Intrinsic preferred size supplied by a subclass. */\n getDesiredSize (): Vector2 {\n return new Vector2();\n }\n\n /** Intrinsic maximum size supplied by a subclass. Negative components are unbounded. */\n getMaximumSize (): Vector2 {\n return new Vector2(-1, -1);\n }\n\n getCombinedMinimumSize (): Vector2 {\n const measured = this.getCachedMinimumSize();\n\n return new Vector2(\n Math.max(measured.x, this.customMinimumSize.x),\n Math.max(measured.y, this.customMinimumSize.y),\n );\n }\n\n getCombinedMaximumSize (): Vector2 {\n const measured = this.getCachedMaximumSize();\n\n return new Vector2(\n combineMaximum(measured.x, this.customMaximumSize.x),\n combineMaximum(measured.y, this.customMaximumSize.y),\n );\n }\n\n /** Minimum size after resolving a conflicting maximum; the maximum wins. */\n getBoundMinimumSize (): Vector2 {\n const minimum = this.getCombinedMinimumSize();\n const maximum = this.getCombinedMaximumSize();\n\n return new Vector2(\n clampToMaximum(minimum.x, maximum.x),\n clampToMaximum(minimum.y, maximum.y),\n );\n }\n\n /** Desired size clamped to the resolved minimum and maximum constraints. */\n getBoundDesiredSize (): Vector2 {\n const minimum = this.getBoundMinimumSize();\n const maximum = this.getCombinedMaximumSize();\n const desired = this.getCachedDesiredSize();\n\n return new Vector2(\n Math.max(minimum.x, clampToMaximum(desired.x, maximum.x)),\n Math.max(minimum.y, clampToMaximum(desired.y, maximum.y)),\n );\n }\n\n setCustomMinimumSize (width: number, height: number): void {\n const next = normalizeMeasuredMinimum(new Vector2(width, height));\n\n if (this.customMinimumSize.x !== next.x || this.customMinimumSize.y !== next.y) {\n this.customMinimumSize.copyFrom(next);\n this.updateMinimumSize();\n }\n }\n\n setCustomMaximumSize (width: number, height: number): void {\n const next = normalizeMeasuredMaximum(new Vector2(width, height));\n\n if (this.customMaximumSize.x !== next.x || this.customMaximumSize.y !== next.y) {\n this.customMaximumSize.copyFrom(next);\n this.updateMaximumSize();\n }\n }\n\n updateMinimumSize (): void {\n this.invalidateMeasurementChanges(MeasurementChange.Minimum);\n }\n\n updateDesiredSize (): void {\n this.invalidateMeasurementChanges(MeasurementChange.Desired);\n }\n\n updateMaximumSize (): void {\n this.invalidateMeasurementChanges(MeasurementChange.Maximum);\n }\n\n /** @internal */\n invokeMeasurementChanges (): void {\n if (this.disposed || this.pendingMeasurementChanges === 0) {return;}\n const changes = this.pendingMeasurementChanges;\n\n this.pendingMeasurementChanges = 0;\n if ((changes & (MeasurementChange.Minimum | MeasurementChange.Maximum)) !== 0) {\n this.updateLayout();\n }\n if ((changes & MeasurementChange.Minimum) !== 0) {\n this.eventEmitter.emit('minimumSizeChanged', this);\n }\n if ((changes & MeasurementChange.Desired) !== 0) {\n this.eventEmitter.emit('desiredSizeChanged', this);\n }\n if ((changes & MeasurementChange.Maximum) !== 0) {\n this.eventEmitter.emit('maximumSizeChanged', this);\n }\n }\n\n protected invalidateMeasurementChanges (changes: number): void {\n const root = this.root;\n let changed = false;\n\n if ((changes & MeasurementChange.Minimum) !== 0) {\n changed ||= this.minimumSizeCache !== null\n || (!!root && (this.pendingMeasurementChanges & MeasurementChange.Minimum) === 0);\n this.minimumSizeCache = null;\n }\n if ((changes & MeasurementChange.Desired) !== 0) {\n changed ||= this.desiredSizeCache !== null\n || (!!root && (this.pendingMeasurementChanges & MeasurementChange.Desired) === 0);\n this.desiredSizeCache = null;\n }\n if ((changes & MeasurementChange.Maximum) !== 0) {\n changed ||= this.maximumSizeCache !== null\n || (!!root && (this.pendingMeasurementChanges & MeasurementChange.Maximum) === 0);\n this.maximumSizeCache = null;\n }\n if (root) {\n this.scheduleMeasurementChanges(changes, root);\n } else {\n if ((changes & (MeasurementChange.Minimum | MeasurementChange.Maximum)) !== 0) {\n this.updateLayout();\n }\n if ((changes & MeasurementChange.Minimum) !== 0) {\n this.eventEmitter.emit('minimumSizeChanged', this);\n }\n if ((changes & MeasurementChange.Desired) !== 0) {\n this.eventEmitter.emit('desiredSizeChanged', this);\n }\n if ((changes & MeasurementChange.Maximum) !== 0) {\n this.eventEmitter.emit('maximumSizeChanged', this);\n }\n }\n if (changed && this.parent instanceof Container) {\n this.parent.invalidateMeasurementsFromChild();\n }\n }\n\n setScale (x: number, y: number): void {\n if (this.scale.x !== x || this.scale.y !== y) {\n this.scale.set(x, y);\n this.markTransformDirty();\n }\n }\n\n setRotation (degrees: number): void {\n if (this._rotation !== degrees) {\n this._rotation = degrees;\n this.markTransformDirty();\n }\n }\n\n setShear (x: number, y: number): void {\n if (this.shear.x !== x || this.shear.y !== y) {\n this.shear.set(x, y);\n this.markTransformDirty();\n }\n }\n\n setPivot (x: number, y: number): void {\n if (this.pivot.x !== x || this.pivot.y !== y) {\n this.pivot.set(x, y);\n this.markTransformDirty();\n }\n }\n\n setAnchorMin (x: number, y: number): void {\n if (this.anchorMin.x !== x || this.anchorMin.y !== y) {\n this.anchorMin.set(x, y);\n this.updateLayout();\n }\n }\n\n setAnchorMax (x: number, y: number): void {\n if (this.anchorMax.x !== x || this.anchorMax.y !== y) {\n this.anchorMax.set(x, y);\n this.updateLayout();\n }\n }\n\n setOffsetMin (x: number, y: number): void {\n if (this.offsetMin.x !== x || this.offsetMin.y !== y) {\n this.offsetMin.set(x, y);\n this.updateLayout();\n }\n }\n\n setOffsetMax (x: number, y: number): void {\n if (this.offsetMax.x !== x || this.offsetMax.y !== y) {\n this.offsetMax.set(x, y);\n this.updateLayout();\n }\n }\n\n getRect (): Rect {\n return {\n position: this.position.clone(),\n size: this.size.clone(),\n };\n }\n\n getTransform2D (): Matrix3 {\n if (this.transformDirty) {\n const radians = this._rotation * Math.PI / 180;\n const sin = Math.sin(radians);\n const cos = Math.cos(radians);\n const shearX = Math.tan(Math.max(-89, Math.min(89, this.shear.x)) * Math.PI / 180);\n const shearY = Math.tan(Math.max(-89, Math.min(89, this.shear.y)) * Math.PI / 180);\n const a = this.scale.x * (cos - sin * shearY);\n const b = this.scale.x * (sin + cos * shearY);\n const c = this.scale.y * (cos * shearX - sin);\n const d = this.scale.y * (sin * shearX + cos);\n const pivotX = this.pivot.x * this.size.x;\n const pivotY = this.pivot.y * this.size.y;\n const tx = this.position.x + pivotX - a * pivotX - c * pivotY;\n const ty = this.position.y + pivotY - b * pivotX - d * pivotY;\n\n this.cachedTransform.set(a, b, 0, c, d, 0, tx, ty, 1);\n this.transformDirty = false;\n }\n\n return this.cachedTransform;\n }\n\n setAnchorsPreset (preset: LayoutPreset, keepOffsets = true): void {\n const [minX, minY, maxX, maxY] = ANCHOR_PRESET_TABLE[preset];\n\n if (keepOffsets) {\n this.anchorMin.set(minX, minY);\n this.anchorMax.set(maxX, maxY);\n } else {\n const rect = this.getRect();\n\n this.anchorMin.set(minX, minY);\n this.anchorMax.set(maxX, maxY);\n this.computeOffsets(rect, this.getParentRect());\n }\n this.updateLayout();\n }\n\n setOffsetsPreset (preset: LayoutPreset, margin = 0): void {\n if (!this.parent) {\n return;\n }\n const parentSize = this.parent.size;\n const width = this.size.x;\n const height = this.size.y;\n const a = this.anchorMin;\n const b = this.anchorMax;\n let minX = 0, maxX = 0, minY = 0, maxY = 0;\n\n // Left edge.\n switch (preset) {\n case 'topLeft': case 'bottomLeft': case 'centerLeft':\n case 'topWide': case 'bottomWide': case 'leftWide': case 'hcenterWide': case 'fullRect':\n minX = margin - a.x * parentSize.x;\n\n break;\n case 'centerTop': case 'centerBottom': case 'center': case 'vcenterWide':\n minX = 0.5 * parentSize.x - width / 2 - a.x * parentSize.x;\n\n break;\n default:\n minX = parentSize.x - margin - width - a.x * parentSize.x;\n\n break;\n }\n switch (preset) {\n case 'topLeft': case 'bottomLeft': case 'centerLeft': case 'leftWide':\n maxX = margin + width - b.x * parentSize.x;\n\n break;\n case 'centerTop': case 'centerBottom': case 'center': case 'vcenterWide':\n maxX = 0.5 * parentSize.x + width / 2 - b.x * parentSize.x;\n\n break;\n default:\n maxX = parentSize.x - margin - b.x * parentSize.x;\n\n break;\n }\n // Top edge.\n switch (preset) {\n case 'topLeft': case 'topRight': case 'centerTop':\n case 'leftWide': case 'rightWide': case 'topWide': case 'vcenterWide': case 'fullRect':\n minY = margin - a.y * parentSize.y;\n\n break;\n case 'centerLeft': case 'centerRight': case 'center': case 'hcenterWide':\n minY = 0.5 * parentSize.y - height / 2 - a.y * parentSize.y;\n\n break;\n default:\n minY = parentSize.y - margin - height - a.y * parentSize.y;\n\n break;\n }\n // Bottom edge.\n switch (preset) {\n case 'topLeft': case 'topRight': case 'centerTop': case 'topWide':\n maxY = margin + height - b.y * parentSize.y;\n\n break;\n case 'centerLeft': case 'centerRight': case 'center': case 'hcenterWide':\n maxY = 0.5 * parentSize.y + height / 2 - b.y * parentSize.y;\n\n break;\n default:\n maxY = parentSize.y - margin - b.y * parentSize.y;\n\n break;\n }\n this.offsetMin.set(minX, minY);\n this.offsetMax.set(maxX, maxY);\n this.updateLayout();\n }\n\n setAnchorsAndOffsetsPreset (preset: LayoutPreset, margin = 0): void {\n this.setAnchorsPreset(preset, false);\n this.setOffsetsPreset(preset, margin);\n }\n\n getGlobalTransform2D (): Matrix3 {\n const local = this.getTransform2D();\n\n return this.parent\n ? new Matrix3().multiplyMatrices(this.parent.getGlobalTransform2D(), local)\n : local.clone();\n }\n\n hasPoint (point: Vector2): boolean {\n return point.x >= 0 && point.y >= 0 && point.x <= this.size.x && point.y <= this.size.y;\n }\n\n /** Whether input at a position in this Control's space may reach a direct child. */\n intersectsChildContent (child: Control, position: Vector2): boolean {\n return true;\n }\n\n getEffectiveMouseFilter (): MouseFilter {\n return this.enabledInHierarchy && this.isMouseRecursiveEnabled() ? this.mouseFilter : MouseFilter.Ignore;\n }\n\n getFocusModeWithOverride (): FocusMode {\n return this.enabledInHierarchy && this.isFocusRecursiveEnabled() ? this.focusMode : FocusMode.None;\n }\n\n getCursorShape (position: Vector2): CursorStyle {\n return this.defaultCursorShape;\n }\n\n focus (hideFocus = false): void {\n this.root?.grabControlFocus(this, hideFocus);\n }\n\n grabFocus (hideFocus = false): void {\n this.focus(hideFocus);\n }\n\n grabClickFocus (): void {\n this.root?.grabControlClickFocus(this);\n }\n\n releaseFocus (): void {\n this.root?.releaseControlFocus(this);\n }\n\n warpMouse (position: Vector2): void {\n const matrix = this.getGlobalTransform2D().elements;\n\n this.root?.warpControlMouse(new Vector2(\n matrix[0] * position.x + matrix[3] * position.y + matrix[6],\n matrix[1] * position.x + matrix[4] * position.y + matrix[7],\n ));\n }\n\n /** Converts a window-space position into this control's local coordinates. */\n makePositionLocal (position: Vector2): Vector2 {\n const transform = this.getGlobalTransform2D().clone();\n\n if (Math.abs(transform.determinant()) < 1e-12) {\n return new Vector2();\n }\n const elements = transform.invert().elements;\n\n return new Vector2(\n elements[0] * position.x + elements[3] * position.y + elements[6],\n elements[1] * position.x + elements[4] * position.y + elements[7],\n );\n }\n\n /** Gets the current mouse position transformed into this control's coordinates. */\n getLocalMousePosition (): Vector2 {\n const root = this.root;\n\n return root ? this.makePositionLocal(root.getMousePosition()) : new Vector2();\n }\n\n update (deltaTime: number): void {\n for (const child of this.children.slice()) {\n if (child.enabled && !child.isDisposed) {\n child.update(deltaTime);\n }\n }\n }\n\n draw (): void {\n // OVERRIDE\n }\n\n onDestroy (): void {}\n\n drawInternal (): void {\n if (!this.visibleInHierarchy || this.disposed) {\n return;\n }\n const graphics = this.engine.graphics;\n\n graphics.pushTransform(this.getTransform2D());\n this.draw();\n this.drawChildren();\n graphics.popTransform();\n }\n\n drawLine (x1: number, y1: number, x2: number, y2: number, color?: Color, thickness?: number): void {\n this.engine.graphics.drawLine(x1, y1, x2, y2, color, thickness);\n }\n\n drawPolyline (points: number[], color?: Color, thickness?: number): void {\n this.engine.graphics.drawLines(points, color, thickness);\n }\n\n drawBezier (\n x1: number, y1: number, x2: number, y2: number,\n x3: number, y3: number, x4: number, y4: number,\n color?: Color, thickness?: number,\n ): void {\n this.engine.graphics.drawBezier(x1, y1, x2, y2, x3, y3, x4, y4, color, thickness);\n }\n\n drawTriangle (\n x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n color?: Color, thickness?: number,\n ): void {\n this.engine.graphics.drawTriangle(x1, y1, x2, y2, x3, y3, color, thickness);\n }\n\n drawRect (x: number, y: number, width: number, height: number, color?: Color, thickness?: number): void {\n this.engine.graphics.drawRectangle(x, y, width, height, color, thickness);\n }\n\n drawCircle (cx: number, cy: number, radius: number, color?: Color, thickness?: number): void {\n this.engine.graphics.drawCircle(cx, cy, radius, color, thickness);\n }\n\n fillTriangle (\n x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, color?: Color,\n ): void {\n this.engine.graphics.fillTriangle(x1, y1, x2, y2, x3, y3, color);\n }\n\n fillRect (x: number, y: number, width: number, height: number, color?: Color): void {\n this.engine.graphics.fillRectangle(x, y, width, height, color);\n }\n\n fillCircle (cx: number, cy: number, radius: number, color?: Color): void {\n this.engine.graphics.fillCircle(cx, cy, radius, color);\n }\n\n drawTexture (\n x: number, y: number, width: number, height: number,\n texture: Texture, region?: TextureRegion, color?: Color,\n ): void {\n this.engine.graphics.drawTexture(x, y, width, height, texture, region, color);\n }\n\n drawNinePatch (\n x: number, y: number, width: number, height: number,\n texture: Texture, options: NinePatchDrawOptions, color?: Color,\n ): void {\n this.engine.graphics.drawNinePatch(x, y, width, height, texture, options, color);\n }\n\n drawText (\n x: number, y: number, text: string, fontSize: number, color?: Color,\n fontFamily?: string, fontWeight?: FontWeight, fontStyle?: FontStyle,\n ): void {\n this.engine.graphics.drawText(x, y, text, fontSize, color, fontFamily, fontWeight, fontStyle);\n }\n\n measureText (\n text: string, fontSize: number,\n fontFamily?: string, fontWeight?: FontWeight, fontStyle?: FontStyle,\n ): TextMeasurement {\n return this.engine.graphics.measureText(text, fontSize, fontFamily, fontWeight, fontStyle);\n }\n\n onMouseEnter (location: Vector2): void {}\n onMouseMove (event: InputEventMouseMotion): void {}\n onMouseLeave (): void {}\n onMouseWheel (event: InputEventMouseButton): void {}\n onMouseDown (event: InputEventMouseButton): void {}\n onMouseUp (event: InputEventMouseButton): void {}\n onTouchDown (event: InputEventScreenTouch): void {}\n onTouchMove (event: InputEventScreenDrag): void {}\n onTouchUp (event: InputEventScreenTouch): void {}\n onKeyDown (event: InputEventKey): void {}\n onKeyUp (event: InputEventKey): void {}\n onGotFocus (): void {}\n onLostFocus (): void {}\n onScrollBegin (): void {}\n onScrollEnd (): void {}\n /** @internal */\n onPopupOpened (): void {}\n /** @internal */\n onPopupClosed (): void {}\n\n /** @internal */\n invokeGetDragData (position: Vector2): unknown {\n return this.getDragData(position);\n }\n\n /** @internal */\n invokeCanDropData (position: Vector2, data: unknown): boolean {\n return this.canDropData(position, data);\n }\n\n /** @internal */\n invokeDropData (position: Vector2, data: unknown): void {\n this.dropData(position, data);\n }\n\n dispose (): void {\n if (this.disposed) {\n return;\n }\n for (const child of this.children.slice()) {\n child.dispose();\n }\n this._theme?.off('changed', this.attachedThemeChanged);\n this._theme = null;\n for (const styleBox of this.overrideStyleBoxReferences.keys()) {\n styleBox.off('changed', this.overrideStyleBoxChanged);\n }\n this.overrideStyleBoxReferences.clear();\n this.themeOverrides.clear();\n this.themeCache.clear();\n this.pendingMeasurementChanges = 0;\n this.disposed = true;\n this.onDestroy();\n this.parent = null;\n this.owner = null;\n }\n\n /** @internal */\n updateLayout (): void {\n const parentSize = this.parent?.size ?? new Vector2();\n const left = this.offsetMin.x + this.anchorMin.x * parentSize.x;\n const top = this.offsetMin.y + this.anchorMin.y * parentSize.y;\n const right = this.offsetMax.x + this.anchorMax.x * parentSize.x;\n const bottom = this.offsetMax.y + this.anchorMax.y * parentSize.y;\n\n const minimum = this.getBoundMinimumSize();\n const maximum = this.getCombinedMaximumSize();\n const horizontal = this.resolveBoundedAxis(left, right - left, minimum.x, maximum.x, this.horizontalGrowDirection);\n const vertical = this.resolveBoundedAxis(top, bottom - top, minimum.y, maximum.y, this.verticalGrowDirection);\n\n this.applyBounds(horizontal.position, vertical.position, horizontal.size, vertical.size);\n }\n\n protected drawChildren (): void {\n const graphics = this.engine.graphics;\n\n if (this.clipContents) {\n graphics.pushClipRect(0, 0, this.width, this.height);\n }\n for (const child of this.children) {\n child.drawInternal();\n }\n if (this.clipContents) {\n graphics.popClipRect();\n }\n }\n\n protected onThemeChanged (affectsLayout: boolean): void {\n if (affectsLayout) {\n this.updateMinimumSize();\n this.updateDesiredSize();\n if (this instanceof Container) {this.queueSort();}\n }\n }\n\n protected onRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {}\n protected getDragData (position: Vector2): unknown { return null; }\n protected canDropData (position: Vector2, data: unknown): boolean { return false; }\n protected dropData (position: Vector2, data: unknown): void {}\n\n private getThemeDependencies (theme: Theme, explicitType?: string): string[] {\n const nativeType = this.getThemeType();\n const requestedType = explicitType ?? (this.themeTypeVariation || nativeType);\n\n if (theme.hasTypeVariation(requestedType)) {return theme.getTypeDependencies(requestedType);}\n if (!explicitType && this.themeTypeVariation) {\n return [this.themeTypeVariation, ...ThemeRegistry.getTypeChain(nativeType)];\n }\n\n return ThemeRegistry.getTypeChain(requestedType);\n }\n\n private getFallbackThemeDependencies (explicitType?: string): string[] {\n const nativeType = this.getThemeType();\n const requestedType = explicitType ?? (this.themeTypeVariation || nativeType);\n\n for (let owner = this.themeOwnerNode; owner; owner = owner.parent?.themeOwnerNode ?? null) {\n if (owner.theme?.hasTypeVariation(requestedType)) {\n return owner.theme.getTypeDependencies(requestedType);\n }\n }\n if (!explicitType && this.themeTypeVariation) {\n return [this.themeTypeVariation, ...ThemeRegistry.getTypeChain(nativeType)];\n }\n\n return ThemeRegistry.getTypeChain(requestedType);\n }\n\n private resolveThemeItem (itemType: ThemeItemType, name: string, explicitType?: string): ThemeCacheEntry {\n const cacheKey = `${itemType}\\u0000${explicitType ?? ''}\\u0000${name}`;\n const cached = this.themeCache.get(cacheKey);\n\n if (cached) {return { found: cached.found, value: cloneThemeValue(cached.value) };}\n const nativeType = this.getThemeType();\n const queryMatchesCurrentType = !explicitType\n || explicitType === nativeType\n || (!!this.themeTypeVariation && explicitType === this.themeTypeVariation);\n const override = queryMatchesCurrentType ? this.themeOverrides.get(itemType)?.get(name) : undefined;\n let found = override !== undefined;\n let value = override;\n\n if (!found) {\n for (let owner = this.themeOwnerNode; owner && !found; owner = owner.parent?.themeOwnerNode ?? null) {\n const theme = owner.theme;\n\n if (!theme) {continue;}\n for (const dependency of this.getThemeDependencies(theme, explicitType)) {\n const candidate = theme.getItem(dependency, itemType, name);\n\n if (candidate !== undefined) {\n value = candidate;\n found = true;\n\n break;\n }\n }\n }\n }\n if (!found) {\n for (const dependency of this.getFallbackThemeDependencies(explicitType)) {\n const candidate = ThemeRegistry.getDefault(dependency, itemType, name);\n\n if (candidate !== undefined) {\n value = candidate;\n found = true;\n\n break;\n }\n }\n }\n if (!found) {value = this.getThemeFallback(itemType);}\n const entry = { found, value: cloneThemeValue(value as ThemeValue) };\n\n this.themeCache.set(cacheKey, entry);\n\n return { found: entry.found, value: cloneThemeValue(entry.value) };\n }\n\n private getThemeFallback (itemType: ThemeItemType): ThemeValue {\n switch (itemType) {\n case ThemeItemType.Color: return themeFallbacks.color;\n case ThemeItemType.Constant: return themeFallbacks.constant;\n case ThemeItemType.Font: return themeFallbacks.font;\n case ThemeItemType.FontSize: return themeFallbacks.fontSize;\n case ThemeItemType.Icon: return themeFallbacks.icon;\n case ThemeItemType.StyleBox: return themeFallbacks.styleBox;\n }\n }\n\n private setThemeOverride (itemType: ThemeItemType, name: string, value: ThemeValue): void {\n if (!name) {throw new Error('Theme override item names cannot be empty.');}\n let items = this.themeOverrides.get(itemType);\n\n if (!items) {this.themeOverrides.set(itemType, items = new Map());}\n const previous = items.get(name);\n\n if (previous instanceof StyleBox) {this.releaseOverrideStyleBox(previous);}\n const stored = cloneThemeValue(value);\n\n items.set(name, stored);\n if (stored instanceof StyleBox) {this.retainOverrideStyleBox(stored);}\n this.propagateThemeChanged(ThemeRegistry.affectsLayout(this.getThemeType(), itemType, name), false);\n }\n\n private removeThemeOverride (itemType: ThemeItemType, name: string): void {\n const items = this.themeOverrides.get(itemType);\n const previous = items?.get(name);\n\n if (!items?.delete(name)) {return;}\n if (items.size === 0) {this.themeOverrides.delete(itemType);}\n if (previous instanceof StyleBox) {this.releaseOverrideStyleBox(previous);}\n this.propagateThemeChanged(ThemeRegistry.affectsLayout(this.getThemeType(), itemType, name), false);\n }\n\n private hasThemeOverride (itemType: ThemeItemType, name: string): boolean {\n return this.themeOverrides.get(itemType)?.has(name) ?? false;\n }\n\n private retainOverrideStyleBox (styleBox: StyleBox): void {\n const count = this.overrideStyleBoxReferences.get(styleBox) ?? 0;\n\n if (count === 0) {styleBox.on('changed', this.overrideStyleBoxChanged);}\n this.overrideStyleBoxReferences.set(styleBox, count + 1);\n }\n\n private releaseOverrideStyleBox (styleBox: StyleBox): void {\n const count = this.overrideStyleBoxReferences.get(styleBox) ?? 0;\n\n if (count <= 1) {\n styleBox.off('changed', this.overrideStyleBoxChanged);\n this.overrideStyleBoxReferences.delete(styleBox);\n } else {this.overrideStyleBoxReferences.set(styleBox, count - 1);}\n }\n\n private propagateThemeChanged (affectsLayout: boolean, includeChildren = true): void {\n if (this.disposed) {return;}\n this.themeCache.clear();\n if (this.root) {\n this.onThemeChanged(affectsLayout);\n this.eventEmitter.emit('themeChanged', this, affectsLayout);\n }\n if (includeChildren) {\n for (const child of this.children) {child.propagateThemeChanged(affectsLayout);}\n }\n }\n\n private propagateThemeOwner (ownerNode: Control | null, notify: boolean, assign: boolean): void {\n let assignToControl = assign;\n\n if (this !== ownerNode && this.theme) {\n assignToControl = false;\n }\n if (assignToControl) {\n this.themeOwnerNode = ownerNode;\n }\n this.themeCache.clear();\n if (notify && this.root) {\n this.onThemeChanged(true);\n this.eventEmitter.emit('themeChanged', this, true);\n }\n for (const child of this.children) {\n child.propagateThemeOwner(ownerNode, notify, assignToControl);\n }\n }\n\n private scheduleMeasurementChanges (changes: MeasurementChange, root: RootControl): void {\n const pending = changes & ~this.pendingMeasurementChanges;\n\n if (pending === 0) {return;}\n this.pendingMeasurementChanges |= pending;\n root.queueMeasurementChange(this);\n }\n\n private applyBounds (x: number, y: number, width: number, height: number): void {\n const locationChanged = this.position.x !== x || this.position.y !== y;\n const sizeChanged = this.size.x !== width || this.size.y !== height;\n\n if (!locationChanged && !sizeChanged) {\n return;\n }\n this.position.set(x, y);\n this.size.set(width, height);\n this.markTransformDirty();\n if (locationChanged) {\n this.eventEmitter.emit('locationChanged', this);\n }\n if (sizeChanged) {\n this.eventEmitter.emit('sizeChanged', this);\n if (!(this instanceof Container)) {\n for (const child of this.children.slice()) {\n child.updateLayout();\n }\n }\n }\n }\n\n private markTransformDirty (): void {\n this.transformDirty = true;\n }\n\n private getCachedMinimumSize (): Vector2 {\n this.minimumSizeCache ??= normalizeMeasuredMinimum(this.getMinimumSize());\n\n return this.minimumSizeCache.clone();\n }\n\n private getCachedDesiredSize (): Vector2 {\n this.desiredSizeCache ??= normalizeMeasuredMinimum(this.getDesiredSize());\n\n return this.desiredSizeCache.clone();\n }\n\n private getCachedMaximumSize (): Vector2 {\n this.maximumSizeCache ??= normalizeMeasuredMaximum(this.getMaximumSize());\n\n return this.maximumSizeCache.clone();\n }\n\n private resolveBoundedAxis (\n position: number,\n requestedSize: number,\n minimumSize: number,\n maximumSize: number,\n growDirection: GrowDirection,\n ): { position: number, size: number } {\n const finiteSize = Number.isFinite(requestedSize) ? requestedSize : 0;\n const size = Math.max(minimumSize, clampToMaximum(finiteSize, maximumSize));\n const difference = size - finiteSize;\n let adjustedPosition = Number.isFinite(position) ? position : 0;\n\n if (growDirection === GrowDirection.Begin) {\n adjustedPosition -= difference;\n } else if (growDirection === GrowDirection.Both) {\n adjustedPosition -= difference / 2;\n }\n\n return { position: adjustedPosition, size };\n }\n\n private assertGrowDirection (value: GrowDirection): void {\n if (!Number.isInteger(value) || value < GrowDirection.Begin || value > GrowDirection.Both) {\n throw new RangeError('Invalid Control grow direction.');\n }\n }\n\n private queuePendingLayouts (): void {\n if (this instanceof Container) {\n this.queueSort();\n }\n for (const child of this.children) {\n child.queuePendingLayouts();\n }\n }\n\n private queuePendingMeasurements (root: RootControl): void {\n if (this.pendingMeasurementChanges !== 0) {\n root.queueMeasurementChange(this);\n }\n for (const child of this.children) {\n child.queuePendingMeasurements(root);\n }\n }\n\n private notifyRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {\n this.onRootChanged(previousRoot, nextRoot);\n for (const child of this.children) {\n child.notifyRootChanged(previousRoot, nextRoot);\n }\n }\n\n private getParentRect (): Rect {\n return {\n position: new Vector2(),\n size: this.parent?.size.clone() ?? new Vector2(),\n };\n }\n\n private computeOffsets (rect: Rect, parentRect: Rect): void {\n this.offsetMin.set(\n rect.position.x - parentRect.position.x - this.anchorMin.x * parentRect.size.x,\n rect.position.y - parentRect.position.y - this.anchorMin.y * parentRect.size.y,\n );\n this.offsetMax.set(\n rect.position.x + rect.size.x - parentRect.position.x - this.anchorMax.x * parentRect.size.x,\n rect.position.y + rect.size.y - parentRect.position.y - this.anchorMax.y * parentRect.size.y,\n );\n }\n\n private computeAnchors (rect: Rect, parentRect: Rect): void {\n if (parentRect.size.x !== 0) {\n this.anchorMin.x = (rect.position.x - parentRect.position.x - this.offsetMin.x) / parentRect.size.x;\n this.anchorMax.x = (rect.position.x + rect.size.x - parentRect.position.x - this.offsetMax.x) / parentRect.size.x;\n }\n if (parentRect.size.y !== 0) {\n this.anchorMin.y = (rect.position.y - parentRect.position.y - this.offsetMin.y) / parentRect.size.y;\n this.anchorMax.y = (rect.position.y + rect.size.y - parentRect.position.y - this.offsetMax.y) / parentRect.size.y;\n }\n }\n\n private isMouseRecursiveEnabled (): boolean {\n if (this.mouseBehaviorRecursive === MouseBehaviorRecursive.Inherited) {\n return this.parent?.isMouseRecursiveEnabled() ?? true;\n }\n\n return this.mouseBehaviorRecursive === MouseBehaviorRecursive.Enabled;\n }\n\n private isFocusRecursiveEnabled (): boolean {\n if (this.focusBehaviorRecursive === FocusBehaviorRecursive.Inherited) {\n return this.parent?.isFocusRecursiveEnabled() ?? true;\n }\n\n return this.focusBehaviorRecursive === FocusBehaviorRecursive.Enabled;\n }\n\n fromData (data: spec.ControlData): void {\n if (data.anchorMin !== undefined) {\n this.setAnchorMin(...data.anchorMin);\n }\n if (data.anchorMax !== undefined) {\n this.setAnchorMax(...data.anchorMax);\n }\n if (data.offsetMin !== undefined) {\n this.setOffsetMin(...data.offsetMin);\n }\n if (data.offsetMax !== undefined) {\n this.setOffsetMax(...data.offsetMax);\n }\n if (data.pivot !== undefined) {\n this.setPivot(...data.pivot);\n }\n if (data.scale !== undefined) {\n this.setScale(...data.scale);\n }\n if (data.shear !== undefined) {\n this.setShear(...data.shear);\n }\n if (data.rotation !== undefined) {\n this.setRotation(data.rotation);\n }\n if (data.customMinimumSize !== undefined) {\n this.setCustomMinimumSize(...data.customMinimumSize);\n }\n if (data.customMaximumSize !== undefined) {\n this.setCustomMaximumSize(...data.customMaximumSize);\n }\n if (data.horizontalSizeFlags !== undefined || data.verticalSizeFlags !== undefined) {\n this.setSizeFlags(\n data.horizontalSizeFlags ?? this.horizontalSizeFlags,\n data.verticalSizeFlags ?? this.verticalSizeFlags,\n );\n }\n if (data.stretchRatio !== undefined) {\n this.stretchRatio = data.stretchRatio;\n }\n if (data.horizontalGrowDirection !== undefined) {\n this.horizontalGrowDirection = data.horizontalGrowDirection;\n }\n if (data.verticalGrowDirection !== undefined) {\n this.verticalGrowDirection = data.verticalGrowDirection;\n }\n if (data.mouseFilter !== undefined) {\n this.mouseFilter = data.mouseFilter;\n }\n if (data.mouseBehaviorRecursive !== undefined) {\n this.mouseBehaviorRecursive = data.mouseBehaviorRecursive;\n }\n if (data.mouseForcePassScrollEvents !== undefined) {\n this.mouseForcePassScrollEvents = data.mouseForcePassScrollEvents;\n }\n if (data.focusMode !== undefined) {\n this.focusMode = data.focusMode;\n }\n if (data.focusBehaviorRecursive !== undefined) {\n this.focusBehaviorRecursive = data.focusBehaviorRecursive;\n }\n if (data.defaultCursorShape !== undefined) {\n this.defaultCursorShape = data.defaultCursorShape;\n }\n if (data.clipContents !== undefined) {\n this.clipContents = data.clipContents;\n }\n if (data.themeTypeVariation !== undefined) {\n this.themeTypeVariation = data.themeTypeVariation;\n }\n if (data.themeOverrides !== undefined) {\n this.clearThemeOverrides();\n this.applyThemeOverridesFromData(data.themeOverrides);\n }\n }\n\n private applyThemeOverridesFromData (data: spec.ThemeItemCollectionData): void {\n for (const name of Object.keys(data.colors ?? {})) {\n const value = data.colors![name];\n\n this.setThemeColorOverride(name, new Color(value.r, value.g, value.b, value.a));\n }\n for (const name of Object.keys(data.constants ?? {})) {\n this.setThemeConstantOverride(name, data.constants![name]);\n }\n for (const name of Object.keys(data.fonts ?? {})) {\n const value = data.fonts![name];\n\n this.setThemeFontOverride(name, {\n family: value.family,\n weight: value.weight ?? 'normal',\n style: value.style ?? 'normal',\n });\n }\n for (const name of Object.keys(data.fontSizes ?? {})) {\n this.setThemeFontSizeOverride(name, data.fontSizes![name]);\n }\n for (const name of Object.keys(data.icons ?? {})) {\n const value = data.icons![name];\n\n this.setThemeIconOverride(name, value ? this.engine.findObject<Texture>(value) : null);\n }\n for (const name of Object.keys(data.styleBoxes ?? {})) {\n this.setThemeStyleBoxOverride(name, styleBoxFromData(this.engine, data.styleBoxes![name]));\n }\n }\n}\n\n/**\n * A Control that automatically measures and arranges its child Controls.\n * Concrete layout algorithms live in GUI plugin packages.\n */\n@effectsClass('Container')\nexport class Container extends Control {\n static override readonly themeType: string = 'Container';\n private sortPending = false;\n private readonly childLayoutChanged = () => this.invalidateMeasurementsAndQueueSort();\n private readonly ownSizeChanged = () => this.queueSort();\n\n constructor (engine: Engine) {\n super(engine);\n this.on('sizeChanged', this.ownSizeChanged);\n }\n\n /** Defers and coalesces a layout pass until the GUI update phase. */\n queueSort (): void {\n const root = this.root;\n\n if (!root || this.sortPending) {\n return;\n }\n this.sortPending = true;\n root.queueLayout(this);\n }\n\n /** @internal */\n invokeSortChildren (): void {\n if (!this.sortPending || this.isDisposed) {\n return;\n }\n this.sortChildren();\n this.sortPending = false;\n }\n\n override changeChildIndex (child: Control, newIndex: number): void {\n const previousIndex = this.getChildIndex(child);\n\n super.changeChildIndex(child, newIndex);\n if (previousIndex !== this.getChildIndex(child)) {\n this.invalidateMeasurementsAndQueueSort();\n }\n }\n\n override addChildInternal (child: Control): void {\n const wasChild = this.children.includes(child);\n\n super.addChildInternal(child);\n if (!wasChild) {\n this.bindChild(child);\n this.invalidateMeasurementsAndQueueSort();\n }\n }\n\n override removeChildInternal (child: Control): void {\n const wasChild = this.children.includes(child);\n\n if (wasChild) {\n this.unbindChild(child);\n }\n super.removeChildInternal(child);\n if (wasChild) {\n this.invalidateMeasurementsAndQueueSort();\n }\n }\n\n override dispose (): void {\n this.off('sizeChanged', this.ownSizeChanged);\n for (const child of this.children.slice()) {\n this.unbindChild(child);\n }\n super.dispose();\n }\n\n /**\n * Applies size flags and strict container geometry to a child. Automatic\n * layout owns anchors, rotation, scale and shear; pivot is intentionally kept.\n */\n fitChildInRect (child: Control, rect: Rect): void {\n const minimum = child.getBoundMinimumSize();\n const desired = child.getBoundDesiredSize();\n const maximum = child.getCombinedMaximumSize();\n const horizontal = this.fitAxis(\n rect.position.x,\n rect.size.x,\n minimum.x,\n desired.x,\n maximum.x,\n child.horizontalSizeFlags,\n );\n const vertical = this.fitAxis(\n rect.position.y,\n rect.size.y,\n minimum.y,\n desired.y,\n maximum.y,\n child.verticalSizeFlags,\n );\n\n child.anchorMin.set(0, 0);\n child.anchorMax.set(0, 0);\n child.setRotation(0);\n child.setScale(1, 1);\n child.setShear(0, 0);\n child.setRect({\n position: new Vector2(horizontal.position, vertical.position),\n size: new Vector2(horizontal.size, vertical.size),\n });\n }\n\n /** Returns direct children that participate in layout. Disabled children still participate. */\n protected getLayoutChildren (): Control[] {\n return this.children.filter(child => child.visible && !child.isDisposed);\n }\n\n protected sortChildren (): void {}\n\n private bindChild (child: Control): void {\n child.on('sizeFlagsChanged', this.childLayoutChanged);\n child.on('visibilityChanged', this.childLayoutChanged);\n }\n\n private unbindChild (child: Control): void {\n child.off('sizeFlagsChanged', this.childLayoutChanged);\n child.off('visibilityChanged', this.childLayoutChanged);\n }\n\n private invalidateMeasurementsAndQueueSort (): void {\n this.invalidateMeasurementsFromChild();\n }\n\n /** @internal */\n invalidateMeasurementsFromChild (): void {\n this.invalidateMeasurementChanges(MeasurementChange.All);\n this.queueSort();\n }\n\n private fitAxis (\n position: number,\n available: number,\n minimum: number,\n desired: number,\n maximum: number,\n flags: SizeFlags,\n ): { position: number, size: number } {\n const wantsFill = (flags & SizeFlags.Fill) !== 0;\n let size = wantsFill ? available : Math.min(available, desired);\n\n size = Math.max(minimum, clampToMaximum(size, maximum));\n const remaining = available - size;\n let adjustedPosition = position;\n\n if ((flags & SizeFlags.ShrinkEnd) !== 0) {\n adjustedPosition += remaining;\n } else if ((flags & SizeFlags.ShrinkCenter) !== 0) {\n adjustedPosition += remaining / 2;\n }\n\n return { position: adjustedPosition, size };\n }\n}\n\n/** Base class for GUI tree roots and input dispatchers. */\nexport abstract class RootControl extends Control {\n protected readonly rootEventEmitter = new EventEmitter<RootControlEvent>();\n\n override on<E extends keyof RootControlEvent> (\n eventName: E,\n listener: EventEmitterListener<RootControlEvent[E]>,\n ): void {\n if (eventName === 'guiFocusChanged') {\n this.rootEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof RootControlEvent> (\n eventName: E,\n listener: EventEmitterListener<RootControlEvent[E]>,\n ): void {\n if (eventName === 'guiFocusChanged') {\n this.rootEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n abstract queueLayout (container: Container): void;\n abstract queueMeasurementChange (control: Control): void;\n abstract getMousePosition (): Vector2;\n abstract guiGetFocusOwner (): Control | null;\n abstract guiControlHasFocus (control: Control, visibleOnly?: boolean): boolean;\n abstract guiIsDragging (): boolean;\n abstract guiGetDragData (): unknown;\n abstract guiIsDragSuccessful (): boolean;\n abstract guiCancelDrag (): void;\n abstract cancelPointerInput (): void;\n abstract cancelPointerPress (control: Control, touchIndex: number): void;\n abstract grabControlFocus (control: Control, hideFocus?: boolean): void;\n abstract grabControlClickFocus (control: Control): void;\n abstract releaseControlFocus (control?: Control): void;\n abstract warpControlMouse (position: Vector2): void;\n abstract updateMouseCursorState (): void;\n abstract controlStateChanged (control: Control): void;\n abstract controlRemoved (control: Control): void;\n abstract controlTreeChanged (): void;\n abstract popupControl (control: Control, source: Control | null, position: Vector2): void;\n abstract closePopupControl (control: Control): void;\n}\n\nThemeRegistry.registerType(Control.themeType, null);\nThemeRegistry.registerType(Container.themeType, Control.themeType);\n","import { Component } from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { CanvasRootControl } from '../core/roots';\nimport { GUIWindowComponent } from './gui-window-component';\n\nexport enum CanvasRenderMode {\n ScreenSpace = 0,\n CameraSpace = 1,\n WorldSpace = 2,\n WorldSpaceFaceCamera = 3,\n}\n\n/** Canvas-layer boundary attached to a VFXItem. Input state remains owned by the window root. */\nexport class UICanvas extends Component {\n readonly rootControl: CanvasRootControl;\n renderMode = CanvasRenderMode.ScreenSpace;\n receivesEvents = true;\n private _order = 0;\n private registered = false;\n\n constructor (engine: Engine) {\n super(engine);\n this.rootControl = new CanvasRootControl(engine, this);\n }\n\n get order (): number {\n return this._order;\n }\n\n set order (value: number) {\n if (this._order !== value) {\n this._order = value;\n this.engine.root.getComponent(GUIWindowComponent).windowRoot.canvases.sortCanvases();\n }\n }\n\n get isVisible (): boolean {\n return this.renderMode === CanvasRenderMode.ScreenSpace && this.enabled &&\n !!this.item?.isActive;\n }\n\n override onEnable (): void {\n this.register();\n }\n\n override onDisable (): void {\n this.unregister();\n }\n\n override onDestroy (): void {\n this.destroyCanvas();\n }\n\n override dispose (): void {\n this.destroyCanvas();\n super.dispose();\n }\n\n private register (): void {\n if (!this.registered) {\n const guiWindow = this.engine.root.getComponent(GUIWindowComponent);\n\n this.rootControl.parent = guiWindow.windowRoot.canvases;\n this.registered = true;\n }\n }\n\n private unregister (): void {\n if (this.registered) {\n this.rootControl.parent = null;\n this.registered = false;\n }\n }\n\n private destroyCanvas (): void {\n this.unregister();\n if (!this.rootControl.isDisposed) {\n this.rootControl.dispose();\n }\n }\n\n}\n","export enum Orientation {\n Horizontal,\n Vertical,\n}\n\nexport enum LayoutAlignment {\n Begin,\n Center,\n End,\n}\n\nexport enum AspectRatioStretchMode {\n WidthControlsHeight,\n HeightControlsWidth,\n Fit,\n Cover,\n}\n","export enum ScrollMode {\n Disabled,\n Auto,\n ShowAlways,\n ShowNever,\n Reserve,\n MaximizeFirst,\n}\n","export enum HorizontalAlignment {\n Left,\n Center,\n Right,\n Fill,\n}\n\nexport enum VerticalAlignment {\n Top,\n Center,\n Bottom,\n Fill,\n}\n\nexport enum AutowrapMode {\n Off,\n Arbitrary,\n Word,\n WordSmart,\n}\n\nexport enum TextOverflow {\n Visible,\n Clip,\n Ellipsis,\n}\n\nexport enum TextureExpandMode {\n KeepSize,\n IgnoreSize,\n FitWidth,\n FitWidthProportional,\n FitHeight,\n FitHeightProportional,\n}\n\nexport enum TextureStretchMode {\n Scale,\n Tile,\n Keep,\n KeepCentered,\n KeepAspect,\n KeepAspectCentered,\n KeepAspectCovered,\n}\n\nexport enum AxisStretchMode {\n Stretch,\n Tile,\n TileFit,\n}\n\nexport enum Side {\n Left,\n Top,\n Right,\n Bottom,\n}\n\nexport enum ButtonDrawMode {\n Normal,\n Pressed,\n Hover,\n Disabled,\n HoverPressed,\n}\n\nexport enum ButtonActionMode {\n Press,\n Release,\n}\n\nexport enum ProgressFillMode {\n BeginToEnd,\n EndToBegin,\n TopToBottom,\n BottomToTop,\n}\n","import type { UICanvas } from '../components/ui-canvas';\nimport {\n InputEvent,\n InputEventKey,\n InputEventMouse,\n InputEventMouseButton,\n InputEventMouseMotion,\n InputEventScreenDrag,\n InputEventScreenTouch,\n MouseButton,\n MouseButtonMask,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n} from '@galacean/effects';\nimport {\n CursorShape,\n FocusMode,\n MouseBehaviorRecursive,\n MouseFilter,\n} from './enums';\nimport type { CursorStyle } from './enums';\nimport type { Container } from './control';\nimport { Control, RootControl } from './control';\nimport type { Theme } from './theme';\n\ntype Matrix3 = math.Matrix3;\ntype Vector2 = math.Vector2;\nconst Matrix3 = math.Matrix3;\nconst Vector2 = math.Vector2;\n\nconst cursorNames: Record<CursorShape, string> = {\n [CursorShape.Arrow]: 'default',\n [CursorShape.Ibeam]: 'text',\n [CursorShape.PointingHand]: 'pointer',\n [CursorShape.Cross]: 'crosshair',\n [CursorShape.Wait]: 'wait',\n [CursorShape.Busy]: 'progress',\n [CursorShape.Drag]: 'grab',\n [CursorShape.CanDrop]: 'copy',\n [CursorShape.Forbidden]: 'not-allowed',\n [CursorShape.Vsize]: 'ns-resize',\n [CursorShape.Hsize]: 'ew-resize',\n [CursorShape.Bdiagsize]: 'nesw-resize',\n [CursorShape.Fdiagsize]: 'nwse-resize',\n [CursorShape.Move]: 'move',\n [CursorShape.Vsplit]: 'row-resize',\n [CursorShape.Hsplit]: 'col-resize',\n [CursorShape.Help]: 'help',\n};\n\nfunction getButtonMask (button: MouseButton): number {\n switch (button) {\n case MouseButton.Left: return MouseButtonMask.Left;\n case MouseButton.Right: return MouseButtonMask.Right;\n case MouseButton.Middle: return MouseButtonMask.Middle;\n case MouseButton.Xbutton1: return MouseButtonMask.Xbutton1;\n case MouseButton.Xbutton2: return MouseButtonMask.Xbutton2;\n default: return MouseButtonMask.None;\n }\n}\n\nfunction isWheelButton (button: MouseButton): boolean {\n return button >= MouseButton.WheelUp && button <= MouseButton.WheelRight;\n}\n\ntype GUIState = {\n mouseFocus: Control | null,\n mouseClickGrabber: Control | null,\n mouseFocusMask: number,\n mouseOver: Control | null,\n mouseOverHierarchy: Control[],\n touchFocus: Map<number, Control>,\n keyFocus: Control | null,\n hideFocus: boolean,\n dragAccum: Vector2,\n dragAttempted: boolean,\n dragging: boolean,\n dragData: unknown,\n dragMouseOver: Control | null,\n dragSuccessful: boolean,\n lastMousePosition: Vector2,\n sendingMouseEnterExit: boolean,\n mouseOverUpdatePending: boolean,\n};\n\ntype PopupState = {\n control: Control,\n restoreFocus: Control | null,\n restoreFocusHidden: boolean,\n originalTheme: Theme | null,\n};\n\nclass PopupLayer extends Control {\n closeTop?: () => void;\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Stop;\n this.visible = false;\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left || event.buttonIndex === MouseButton.Right) {\n this.closeTop?.();\n event.accept();\n }\n }\n}\n\n/** CanvasLayer-like boundary for a single UICanvas GUI tree. */\nexport class CanvasRootControl extends Control {\n readonly canvas: UICanvas;\n\n constructor (engine: Engine, canvas: UICanvas) {\n super(engine);\n this.canvas = canvas;\n this.mouseFilter = MouseFilter.Ignore;\n this.setSize(engine.canvas.width, engine.canvas.height);\n }\n\n get inputDisabled (): boolean {\n return !this.canvas.receivesEvents || !this.canvas.enabled || !this.canvas.item?.isActive;\n }\n}\n\n/** Global ordered collection of UICanvas roots. */\nexport class CanvasContainer extends Control {\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Ignore;\n this.setSize(engine.canvas.width, engine.canvas.height);\n }\n\n sortCanvases (): void {\n this.children.sort((left, right) =>\n (left as CanvasRootControl).canvas.order - (right as CanvasRootControl).canvas.order);\n }\n\n override addChildInternal (child: Control): void {\n super.addChildInternal(child);\n child.setSize(this.width, this.height);\n this.sortCanvases();\n }\n\n protected override drawChildren (): void {\n this.sortCanvases();\n const graphics = this.engine.graphics;\n\n if (this.clipContents) {\n graphics.pushClipRect(0, 0, this.width, this.height);\n }\n for (const child of this.children) {\n const root = child as CanvasRootControl;\n\n if (root.canvas.isVisible) {\n root.drawInternal();\n }\n }\n if (this.clipContents) {\n graphics.popClipRect();\n }\n }\n\n}\n\n/** Engine window GUI root. Routes events across all UICanvas roots. */\nexport class WindowRootControl extends RootControl {\n readonly canvases: CanvasContainer;\n private readonly popupLayer: PopupLayer;\n private readonly popupStack: PopupState[] = [];\n dragThreshold = 10;\n private lastInput: InputEvent | null = null;\n private readonly dirtyContainers = new Set<Container>();\n private readonly dirtyMeasurements = new Set<Control>();\n private readonly gui: GUIState = {\n mouseFocus: null,\n mouseClickGrabber: null,\n mouseFocusMask: MouseButtonMask.None,\n mouseOver: null,\n mouseOverHierarchy: [],\n touchFocus: new Map(),\n keyFocus: null,\n hideFocus: false,\n dragAccum: new Vector2(),\n dragAttempted: false,\n dragging: false,\n dragData: null,\n dragMouseOver: null,\n dragSuccessful: false,\n lastMousePosition: new Vector2(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY),\n sendingMouseEnterExit: false,\n mouseOverUpdatePending: false,\n };\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Ignore;\n this.setSize(engine.canvas.width, engine.canvas.height);\n this.canvases = new CanvasContainer(engine);\n this.canvases.parent = this;\n this.popupLayer = new PopupLayer(engine);\n this.popupLayer.setAnchorMax(1, 1);\n this.popupLayer.setOffsetMax(0, 0);\n this.popupLayer.closeTop = () => {\n const top = this.popupStack[this.popupStack.length - 1];\n\n if (top) {this.closePopupControl(top.control);}\n };\n this.popupLayer.parent = this;\n }\n\n pushInput (event: InputEvent): void {\n this.lastInput = event;\n this.cleanupInternalState();\n this.processGUIInput(event);\n this.postGrabClickFocus();\n }\n\n isInputHandled (): boolean {\n return this.lastInput?.isAccepted() ?? false;\n }\n\n override getMousePosition (): Vector2 {\n return this.gui.lastMousePosition.clone();\n }\n\n override guiGetFocusOwner (): Control | null {\n return this.isFocusTargetUsable(this.gui.keyFocus) ? this.gui.keyFocus : null;\n }\n\n override guiControlHasFocus (control: Control, visibleOnly = false): boolean {\n return this.guiGetFocusOwner() === control && (!visibleOnly || !this.gui.hideFocus);\n }\n\n guiReleaseFocus (): void {\n this.releaseControlFocus();\n }\n\n override guiIsDragging (): boolean {\n return this.gui.dragging;\n }\n\n override guiGetDragData (): unknown {\n return this.gui.dragData;\n }\n\n override guiIsDragSuccessful (): boolean {\n return this.gui.dragSuccessful;\n }\n\n override guiCancelDrag (): void {\n this.endDragging(false);\n }\n\n override grabControlFocus (control: Control, hideFocus = false): void {\n if (!this.isFocusTargetUsable(control)) {\n return;\n }\n if (this.gui.keyFocus === control) {\n this.gui.hideFocus = hideFocus;\n\n return;\n }\n const previous = this.gui.keyFocus;\n\n this.gui.keyFocus = control;\n this.gui.hideFocus = hideFocus;\n if (previous && !previous.isDisposed) {\n previous.onLostFocus();\n }\n control.onGotFocus();\n this.notifyFocusOwnerChanged(control);\n }\n\n override grabControlClickFocus (control: Control): void {\n if (this.isControlValid(control)) {\n this.gui.mouseClickGrabber = control;\n queueMicrotask(() => this.postGrabClickFocus());\n }\n }\n\n override releaseControlFocus (control?: Control): void {\n const previous = this.gui.keyFocus;\n\n if (!previous || (control && previous !== control)) {\n return;\n }\n this.gui.keyFocus = null;\n this.gui.hideFocus = false;\n if (!previous.isDisposed) {\n previous.onLostFocus();\n }\n this.notifyFocusOwnerChanged(null);\n }\n\n override warpControlMouse (position: Vector2): void {\n this.gui.lastMousePosition.copyFrom(position);\n this.updateMouseOver(position);\n this.updateMouseCursorState();\n }\n\n override updateMouseCursorState (): void {\n const position = this.gui.lastMousePosition;\n const target = this.isControlUsable(this.gui.mouseFocus)\n ? this.gui.mouseFocus\n : this.isControlUsable(this.gui.mouseOver)\n ? this.gui.mouseOver\n : null;\n\n this.updateCursor(target, position);\n }\n\n override controlStateChanged (control: Control): void {\n if (!this.isControlUsable(control)) {\n this.dropControlState(control);\n }\n this.updateMouseOverHierarchy();\n }\n\n override controlRemoved (control: Control): void {\n this.dropControlState(control);\n this.cleanupInternalState();\n this.updateMouseOverHierarchy();\n }\n\n override controlTreeChanged (): void {\n this.updateMouseOverHierarchy();\n }\n\n override popupControl (control: Control, source: Control | null, position: Vector2): void {\n this.closePopupControl(control);\n const originalTheme = control.theme;\n const focusOwner = this.guiGetFocusOwner();\n const restoreFocus = source ?? focusOwner;\n const restoreFocusHidden = restoreFocus === focusOwner && !!restoreFocus && !restoreFocus.hasFocus(true);\n\n if (!originalTheme) {control.theme = source?.getInheritedTheme() ?? null;}\n const desired = control.getBoundDesiredSize();\n const width = Math.max(control.width, desired.x);\n const height = Math.max(control.height, desired.y);\n\n control.setSize(width, height);\n control.setPosition(\n Math.max(0, Math.min(position.x, this.width - width)),\n Math.max(0, Math.min(position.y, this.height - height)),\n );\n control.parent = this.popupLayer;\n control.visible = true;\n this.popupLayer.visible = true;\n this.popupStack.push({ control, restoreFocus, restoreFocusHidden, originalTheme });\n control.onPopupOpened();\n control.grabFocus();\n }\n\n override closePopupControl (control: Control): void {\n const index = this.popupStack.findIndex(state => state.control === control);\n\n if (index === -1) {return;}\n const removed = this.popupStack.splice(index);\n\n for (let removedIndex = removed.length - 1; removedIndex >= 0; removedIndex--) {\n const state = removed[removedIndex];\n\n state.control.visible = false;\n state.control.parent = null;\n state.control.theme = state.originalTheme;\n state.control.onPopupClosed();\n }\n this.popupLayer.visible = this.popupStack.length > 0;\n const { restoreFocus: restore, restoreFocusHidden } = removed[0];\n\n if (restore && !restore.isDisposed && restore.root === this) {restore.grabFocus(restoreFocusHidden);}\n }\n\n override queueLayout (container: Container): void {\n if (!container.isDisposed) {\n this.dirtyContainers.add(container);\n }\n }\n\n override queueMeasurementChange (control: Control): void {\n if (!control.isDisposed) {\n this.dirtyMeasurements.add(control);\n }\n }\n\n override cancelPointerInput (): void {\n this.dropMouseFocus();\n this.dropMouseOver();\n this.gui.touchFocus.clear();\n this.endDragging(false);\n this.releaseControlFocus();\n }\n\n onCanvasBlur (): void {\n const target = this.gui.mouseFocus;\n const mask = this.gui.mouseFocusMask;\n\n this.dropMouseFocus();\n if (!target || target.isDisposed) {\n return;\n }\n for (const button of [MouseButton.Left, MouseButton.Right, MouseButton.Middle]) {\n if ((mask & getButtonMask(button)) === 0) {\n continue;\n }\n const event = new InputEventMouseButton();\n const position = target.makePositionLocal(this.gui.lastMousePosition);\n\n event.device = InputEvent.deviceIdInternal;\n event.buttonIndex = button;\n event.pressed = false;\n event.position.copyFrom(position);\n event.globalPosition.copyFrom(position);\n this.callControlInput(target, event);\n }\n }\n\n override cancelPointerPress (control: Control, touchIndex: number): void {\n if (!this.isControlValid(control)) {\n return;\n }\n if (this.controlBelongsToSubtree(this.gui.mouseFocus, control)) {\n this.gui.mouseFocus = control;\n }\n if (this.controlBelongsToSubtree(this.gui.mouseClickGrabber, control)) {\n this.gui.mouseClickGrabber = null;\n }\n if (this.controlBelongsToSubtree(this.gui.touchFocus.get(touchIndex) ?? null, control)) {\n this.gui.touchFocus.set(touchIndex, control);\n }\n this.endDragging(false);\n }\n\n resize (width: number, height: number): void {\n this.setSize(width, height);\n this.canvases.setSize(width, height);\n for (const root of this.canvases.children as CanvasRootControl[]) {\n root.setSize(width, height);\n }\n this.popupLayer.setSize(width, height);\n }\n\n render (): void {\n this.flushLayout();\n if (this.canvases.children.length === 0) {\n return;\n }\n this.engine.graphics.begin();\n this.drawInternal();\n this.engine.graphics.end();\n }\n\n override update (deltaTime: number): void {\n if (this.gui.mouseOverUpdatePending) {\n this.gui.mouseOverUpdatePending = false;\n this.updateMouseOverHierarchy();\n }\n super.update(deltaTime);\n this.flushLayout();\n }\n\n override dispose (): void {\n this.cancelPointerInput();\n this.dirtyContainers.clear();\n this.dirtyMeasurements.clear();\n for (const state of this.popupStack.splice(0)) {\n state.control.parent = null;\n state.control.theme = state.originalTheme;\n state.control.onPopupClosed();\n }\n super.dispose();\n }\n\n private flushLayout (): void {\n let round = 0;\n\n while (this.dirtyMeasurements.size > 0 || this.dirtyContainers.size > 0) {\n if (round++ >= 32) {\n this.dirtyMeasurements.clear();\n this.dirtyContainers.clear();\n throw new Error('GUI layout did not converge after 32 rounds.');\n }\n if (this.dirtyMeasurements.size > 0) {\n const measurements = Array.from(this.dirtyMeasurements);\n\n this.dirtyMeasurements.clear();\n measurements.sort((left, right) => this.getControlDepth(right) - this.getControlDepth(left));\n for (const control of measurements) {\n if (control.root === this && !control.isDisposed) {\n control.invokeMeasurementChanges();\n }\n }\n continue;\n }\n const batch = Array.from(this.dirtyContainers);\n\n this.dirtyContainers.clear();\n batch.sort((left, right) => this.getControlDepth(left) - this.getControlDepth(right));\n for (const container of batch) {\n if (container.root === this && !container.isDisposed) {\n container.invokeSortChildren();\n }\n }\n }\n }\n\n private getControlDepth (control: Control): number {\n let depth = 0;\n let parent = control.parent;\n\n while (parent) {\n depth++;\n parent = parent.parent;\n }\n\n return depth;\n }\n\n private processGUIInput (event: InputEvent): void {\n if (event instanceof InputEventKey) {\n const target = this.guiGetFocusOwner();\n\n if (target) {\n this.callGUIInput(target, event);\n }\n } else if (event instanceof InputEventMouse) {\n this.gui.lastMousePosition.copyFrom(event.globalPosition);\n const target = this.updateMouseOver(event.globalPosition);\n\n if (event instanceof InputEventMouseButton) {\n this.processMouseButton(event, target);\n } else if (event instanceof InputEventMouseMotion) {\n this.processMouseMotion(event, target);\n }\n } else if (event instanceof InputEventScreenTouch) {\n this.processScreenTouch(event);\n } else if (event instanceof InputEventScreenDrag) {\n this.processScreenDrag(event);\n }\n }\n\n private processMouseButton (event: InputEventMouseButton, mouseOver: Control | null): void {\n if (isWheelButton(event.buttonIndex)) {\n if (mouseOver) {\n this.callGUIInput(mouseOver, event);\n }\n\n return;\n }\n const mask = getButtonMask(event.buttonIndex);\n\n if (event.isPressed()) {\n const target = this.gui.mouseFocusMask !== 0\n ? this.gui.mouseFocus\n : mouseOver;\n\n this.gui.mouseFocus = target;\n if (!target) {\n if (event.buttonIndex === MouseButton.Left && this.gui.keyFocus) {\n this.gui.hideFocus = true;\n }\n\n return;\n }\n this.gui.mouseFocusMask |= mask;\n if (event.buttonIndex === MouseButton.Left) {\n this.gui.dragAccum.setZero();\n this.gui.dragAttempted = false;\n this.findClickFocus(target);\n }\n this.callGUIInput(target, event);\n } else {\n if (event.buttonIndex === MouseButton.Left && this.gui.dragging) {\n this.finishDrop(event.globalPosition);\n }\n this.gui.mouseFocusMask &= ~mask;\n const target = this.gui.mouseFocus;\n\n if (this.gui.mouseFocusMask === 0) {\n this.gui.mouseFocus = null;\n }\n if (this.isControlUsable(target)) {\n this.callGUIInput(target, event);\n }\n }\n }\n\n private processMouseMotion (event: InputEventMouseMotion, mouseOver: Control | null): void {\n if (!this.gui.dragging && !this.gui.dragAttempted && this.gui.mouseFocus &&\n (this.gui.mouseFocusMask & MouseButtonMask.Left) !== 0) {\n this.gui.dragAccum.add(event.relative);\n if (this.gui.dragAccum.length() > this.dragThreshold) {\n const origin = event.globalPosition.clone().subtract(this.gui.dragAccum);\n\n this.beginDragging(this.gui.mouseFocus, origin);\n this.gui.dragAttempted = true;\n }\n }\n const target = this.isControlUsable(this.gui.mouseFocus)\n ? this.gui.mouseFocus\n : mouseOver;\n\n if (target) {\n this.callGUIInput(target, event);\n }\n if (this.gui.dragging) {\n this.gui.dragMouseOver = this.findDropTarget(mouseOver, event.globalPosition);\n }\n this.updateCursor(target, event.globalPosition);\n }\n\n private processScreenTouch (event: InputEventScreenTouch): void {\n let target: Control | null;\n\n if (event.isPressed()) {\n target = this.findInputControl(event.position);\n if (target) {\n this.gui.touchFocus.set(event.index, target);\n }\n } else {\n target = this.gui.touchFocus.get(event.index) ?? null;\n this.gui.touchFocus.delete(event.index);\n }\n if (this.isControlUsable(target)) {\n this.callGUIInput(target, event);\n }\n }\n\n private processScreenDrag (event: InputEventScreenDrag): void {\n const target = this.gui.touchFocus.get(event.index) ?? this.findInputControl(event.position);\n\n if (this.isControlUsable(target)) {\n this.callGUIInput(target, event);\n }\n }\n\n private callGUIInput (target: Control, event: InputEvent): void {\n let current: Control | null = target;\n const pointerEvent = event instanceof InputEventMouse || event instanceof InputEventScreenTouch ||\n event instanceof InputEventScreenDrag;\n\n while (current && current !== this && this.isControlUsable(current)) {\n const filter = current.getEffectiveMouseFilter();\n\n if (filter !== MouseFilter.Ignore) {\n const localEvent = event.xformedBy(this.getGlobalInverse(current));\n\n this.callControlInput(current, localEvent);\n if (localEvent.isAccepted()) {\n event.accept();\n }\n }\n const forcePassWheel = event instanceof InputEventMouseButton && isWheelButton(event.buttonIndex) &&\n current.mouseForcePassScrollEvents;\n const forcePassTouch = (event instanceof InputEventScreenTouch || event instanceof InputEventScreenDrag) &&\n current.mouseForcePassScrollEvents;\n\n if (event.isAccepted() || (filter === MouseFilter.Stop && pointerEvent && !forcePassWheel && !forcePassTouch)) {\n event.accept();\n\n return;\n }\n current = current.parent;\n }\n }\n\n private callControlInput (control: Control, event: InputEvent): void {\n if (event instanceof InputEventMouseButton) {\n if (isWheelButton(event.buttonIndex)) {\n control.onMouseWheel(event);\n } else if (event.isPressed()) {\n control.onMouseDown(event);\n } else {\n control.onMouseUp(event);\n }\n } else if (event instanceof InputEventMouseMotion) {\n control.onMouseMove(event);\n } else if (event instanceof InputEventScreenTouch) {\n if (event.isPressed()) {\n control.onTouchDown(event);\n } else {\n control.onTouchUp(event);\n }\n } else if (event instanceof InputEventScreenDrag) {\n control.onTouchMove(event);\n } else if (event instanceof InputEventKey) {\n if (event.isPressed()) {\n control.onKeyDown(event);\n } else if (event.isReleased()) {\n control.onKeyUp(event);\n }\n }\n }\n\n private findInputControl (position: Vector2): Control | null {\n if (this.popupLayer.visible) {\n return this.findControlAtPosition(this.popupLayer, position) ?? this.popupLayer;\n }\n this.canvases.sortCanvases();\n\n return this.findControlAtPosition(this.canvases, position, true);\n }\n\n private findControlAtPosition (\n container: Control,\n positionInParent: Vector2,\n skipSelf = false,\n parentEnabled = true,\n parentMouseEnabled = true,\n ): Control | null {\n if (!container.visible || container.isDisposed ||\n (container instanceof CanvasRootControl && (!container.canvas.isVisible || container.inputDisabled))) {\n return null;\n }\n const localPosition = this.toControlLocal(container, positionInParent);\n\n if (!localPosition) {\n return null;\n }\n const enabled = parentEnabled && container.enabled;\n const mouseEnabled = container.mouseBehaviorRecursive === MouseBehaviorRecursive.Inherited\n ? parentMouseEnabled\n : container.mouseBehaviorRecursive === MouseBehaviorRecursive.Enabled;\n\n if (container.clipContents && !container.hasPoint(localPosition)) {\n return null;\n }\n for (let index = container.children.length - 1; index >= 0; index--) {\n const child = container.children[index];\n\n if (!container.intersectsChildContent(child, localPosition)) {\n continue;\n }\n const found = this.findControlAtPosition(child, localPosition, false, enabled, mouseEnabled);\n\n if (found) {\n return found;\n }\n }\n if (!skipSelf && enabled && mouseEnabled && container.mouseFilter !== MouseFilter.Ignore &&\n container.hasPoint(localPosition)) {\n return container;\n }\n\n return null;\n }\n\n private toControlLocal (control: Control, positionInParent: Vector2): Vector2 | null {\n const elements = control.getTransform2D().elements;\n const determinant = elements[0] * elements[4] - elements[1] * elements[3];\n\n if (Math.abs(determinant) < 1e-12) {\n return null;\n }\n const x = positionInParent.x - elements[6];\n const y = positionInParent.y - elements[7];\n\n return new Vector2(\n (elements[4] * x - elements[3] * y) / determinant,\n (elements[0] * y - elements[1] * x) / determinant,\n );\n }\n\n private updateMouseOver (position: Vector2): Control | null {\n if (this.gui.sendingMouseEnterExit) {\n this.gui.mouseOverUpdatePending = true;\n\n return this.gui.mouseOver;\n }\n this.gui.mouseOverUpdatePending = false;\n const target = this.findInputControl(position);\n const next = this.buildHoverHierarchy(target);\n\n this.applyMouseOver(target, next, position);\n\n return this.isControlUsable(target) ? target : null;\n }\n\n private updateMouseOverHierarchy (): void {\n const current = this.gui.mouseOver;\n\n if (!current || this.gui.mouseOverHierarchy.length === 0) {\n return;\n }\n if (this.gui.sendingMouseEnterExit) {\n this.gui.mouseOverUpdatePending = true;\n\n return;\n }\n if (!this.isControlUsable(current)) {\n this.dropMouseOver();\n\n return;\n }\n const next = this.buildHoverHierarchy(current);\n const target = current.getEffectiveMouseFilter() === MouseFilter.Ignore ? null : current;\n\n this.applyMouseOver(target, next, this.gui.lastMousePosition);\n }\n\n private applyMouseOver (target: Control | null, next: Control[], position: Vector2): void {\n const previous = this.gui.mouseOverHierarchy;\n let common = 0;\n\n while (common < previous.length && common < next.length && previous[common] === next[common]) {\n common++;\n }\n this.gui.mouseOver = target;\n this.gui.mouseOverHierarchy = next;\n this.gui.sendingMouseEnterExit = true;\n for (let index = previous.length - 1; index >= common; index--) {\n if (!previous[index].isDisposed) {\n previous[index].onMouseLeave();\n }\n }\n for (let index = common; index < next.length; index++) {\n next[index].onMouseEnter(this.toLocal(next[index], position));\n }\n this.gui.sendingMouseEnterExit = false;\n }\n\n private buildHoverHierarchy (target: Control | null): Control[] {\n const hierarchy: Control[] = [];\n let current = target;\n\n while (current && current !== this) {\n const filter = current.getEffectiveMouseFilter();\n\n if (filter !== MouseFilter.Ignore) {\n hierarchy.push(current);\n }\n if (filter === MouseFilter.Stop) {\n break;\n }\n current = current.parent;\n }\n hierarchy.reverse();\n\n return hierarchy;\n }\n\n private findClickFocus (target: Control): void {\n let current: Control | null = target;\n\n while (current && current !== this) {\n const mode = current.getFocusModeWithOverride();\n\n if (mode === FocusMode.Click || mode === FocusMode.All) {\n this.grabControlFocus(current, true);\n\n return;\n }\n if (current.getEffectiveMouseFilter() === MouseFilter.Stop) {\n return;\n }\n current = current.parent;\n }\n }\n\n private beginDragging (source: Control, position: Vector2): void {\n let current: Control | null = source;\n\n while (current && current !== this) {\n const data = current.invokeGetDragData(this.toLocal(current, position));\n\n if (data !== null && data !== undefined) {\n this.gui.dragging = true;\n this.gui.dragData = data;\n this.gui.mouseFocus = null;\n this.gui.mouseFocusMask = MouseButtonMask.None;\n\n return;\n }\n if (current.getEffectiveMouseFilter() === MouseFilter.Stop) {\n return;\n }\n current = current.parent;\n }\n }\n\n private finishDrop (position: Vector2): void {\n const target = this.findDropTarget(this.findInputControl(position), position);\n\n if (target) {\n target.invokeDropData(this.toLocal(target, position), this.gui.dragData);\n }\n this.endDragging(!!target);\n }\n\n private findDropTarget (target: Control | null, position: Vector2): Control | null {\n let current = target;\n\n while (current && current !== this) {\n if (current.invokeCanDropData(this.toLocal(current, position), this.gui.dragData)) {\n return current;\n }\n if (current.getEffectiveMouseFilter() === MouseFilter.Stop) {\n return null;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private endDragging (successful: boolean): void {\n this.gui.dragSuccessful = successful;\n this.gui.dragging = false;\n this.gui.dragData = null;\n this.gui.dragMouseOver = null;\n }\n\n private updateCursor (target: Control | null, position: Vector2): void {\n let current = target;\n let cursor: CursorStyle = CursorShape.Arrow;\n\n while (current && current !== this) {\n const candidate = current.getCursorShape(this.toLocal(current, position));\n\n if (candidate !== CursorShape.Arrow) {\n cursor = candidate;\n\n break;\n }\n if (current.getEffectiveMouseFilter() === MouseFilter.Stop) {\n break;\n }\n current = current.parent;\n }\n this.engine.canvas.style.cursor = typeof cursor === 'string' ? cursor : cursorNames[cursor];\n }\n\n private postGrabClickFocus (): void {\n const target = this.gui.mouseClickGrabber;\n\n this.gui.mouseClickGrabber = null;\n if (this.isControlUsable(target)) {\n this.gui.mouseFocus = target;\n }\n }\n\n private cleanupInternalState (): void {\n if (!this.isControlUsable(this.gui.mouseFocus)) {\n this.dropMouseFocus();\n }\n if (this.gui.keyFocus && !this.isFocusTargetUsable(this.gui.keyFocus)) {\n this.releaseControlFocus(this.gui.keyFocus);\n }\n for (const [index, control] of this.gui.touchFocus) {\n if (!this.isControlUsable(control)) {\n this.gui.touchFocus.delete(index);\n }\n }\n }\n\n private dropMouseFocus (): void {\n this.gui.mouseFocus = null;\n this.gui.mouseFocusMask = MouseButtonMask.None;\n }\n\n private dropMouseOver (): void {\n if (this.gui.sendingMouseEnterExit) {\n this.gui.mouseOverUpdatePending = true;\n\n return;\n }\n for (let index = this.gui.mouseOverHierarchy.length - 1; index >= 0; index--) {\n const control = this.gui.mouseOverHierarchy[index];\n\n if (!control.isDisposed) {\n control.onMouseLeave();\n }\n }\n this.gui.mouseOver = null;\n this.gui.mouseOverHierarchy = [];\n }\n\n private dropControlState (control: Control): void {\n if (this.controlBelongsToSubtree(this.gui.mouseFocus, control)) {\n this.dropMouseFocus();\n }\n if (this.controlBelongsToSubtree(this.gui.mouseClickGrabber, control)) {\n this.gui.mouseClickGrabber = null;\n }\n if (this.controlBelongsToSubtree(this.gui.keyFocus, control)) {\n this.releaseControlFocus(this.gui.keyFocus ?? undefined);\n }\n if (this.controlBelongsToSubtree(this.gui.mouseOver, control)) {\n this.dropMouseOver();\n }\n if (this.controlBelongsToSubtree(this.gui.dragMouseOver, control)) {\n this.gui.dragMouseOver = null;\n }\n for (const [index, target] of this.gui.touchFocus) {\n if (this.controlBelongsToSubtree(target, control)) {\n this.gui.touchFocus.delete(index);\n }\n }\n }\n\n private getGlobalInverse (control: Control): Matrix3 {\n const transform = control.getGlobalTransform2D().clone();\n\n return Math.abs(transform.determinant()) < 1e-12 ? new Matrix3() : transform.invert();\n }\n\n private toLocal (control: Control, position: Vector2): Vector2 {\n const elements = this.getGlobalInverse(control).elements;\n\n return new Vector2(\n elements[0] * position.x + elements[3] * position.y + elements[6],\n elements[1] * position.x + elements[4] * position.y + elements[7],\n );\n }\n\n private controlBelongsToSubtree (control: Control | null, subtree: Control): boolean {\n let current = control;\n\n while (current) {\n if (current === subtree) {\n return true;\n }\n current = current.parent;\n }\n\n return false;\n }\n\n private isControlValid (control: Control | null): control is Control {\n return !!control && !control.isDisposed && control.root === this;\n }\n\n private isControlUsable (control: Control | null): control is Control {\n if (!this.isControlValid(control) || !control.visibleInHierarchy || !control.enabledInHierarchy) {\n return false;\n }\n const root = this.findCanvasRoot(control);\n\n return !root || !root.inputDisabled;\n }\n\n private findCanvasRoot (control: Control): CanvasRootControl | null {\n let current: Control | null = control;\n\n while (current && current !== this) {\n if (current instanceof CanvasRootControl) {\n return current;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private notifyFocusOwnerChanged (control: Control | null): void {\n this.rootEventEmitter.emit('guiFocusChanged', control);\n }\n\n private isFocusTargetUsable (control: Control | null): control is Control {\n return this.isControlUsable(control) && control.getFocusModeWithOverride() !== FocusMode.None;\n }\n}\n","import { Component } from '@galacean/effects';\nimport type { Engine, InputEvent } from '@galacean/effects';\nimport { WindowRootControl } from '../core/roots';\n\n/** Engine-level owner for the GUI window root and its runtime subscriptions. */\nexport class GUIWindowComponent extends Component {\n readonly windowRoot: WindowRootControl;\n private disposed = false;\n\n private readonly updateWindowRoot = (deltaTime: number): void => {\n this.windowRoot.update(deltaTime);\n };\n\n private readonly renderWindowRoot = (): void => {\n this.windowRoot.render();\n };\n\n private readonly resizeWindowRoot = (): void => {\n const rect = this.engine.canvas.getBoundingClientRect();\n const width = rect.width || this.engine.canvas.width;\n const height = rect.height || this.engine.canvas.height;\n\n this.windowRoot.resize(width, height);\n };\n\n private readonly pushInput = (event: InputEvent): void => {\n if (!event.isAccepted()) {\n this.windowRoot.pushInput(event);\n }\n };\n\n private readonly onCanvasBlur = (): void => {\n this.windowRoot.onCanvasBlur();\n };\n\n constructor (engine: Engine) {\n super(engine);\n this.windowRoot = new WindowRootControl(engine);\n engine.on('update', this.updateWindowRoot);\n engine.on('postrender', this.renderWindowRoot);\n engine.on('resize', this.resizeWindowRoot);\n engine.eventSystem.on('input', this.pushInput);\n engine.eventSystem.on('canvasBlur', this.onCanvasBlur);\n this.resizeWindowRoot();\n }\n\n override dispose (): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.engine.off('update', this.updateWindowRoot);\n this.engine.off('postrender', this.renderWindowRoot);\n this.engine.off('resize', this.resizeWindowRoot);\n this.engine.eventSystem.off('input', this.pushInput);\n this.engine.eventSystem.off('canvasBlur', this.onCanvasBlur);\n this.windowRoot.dispose();\n super.dispose();\n }\n}\n","import { Plugin } from '@galacean/effects';\nimport type { Composition, Engine } from '@galacean/effects';\nimport { GUIWindowComponent } from '../components/gui-window-component';\nimport { UICanvas } from '../components/ui-canvas';\n\nexport class GUIPlugin extends Plugin {\n override order = 0;\n override name = 'gui';\n\n override onEngineCreated (engine: Engine): void {\n engine.root.addComponent(GUIWindowComponent);\n }\n\n override onCompositionCreating (composition: Composition): void {\n composition.sceneRoot.addComponent(UICanvas);\n }\n}\n","const EPSILON = 1e-7;\n\nexport function assertFinite (name: string, value: number): void {\n if (!Number.isFinite(value)) {\n throw new RangeError(`${name} must be finite.`);\n }\n}\n\nexport function assertEnumValue (name: string, value: number, maximum: number): void {\n if (!Number.isInteger(value) || value < 0 || value > maximum) {\n throw new RangeError(`Invalid ${name}.`);\n }\n}\n\nexport function sum (values: number[]): number {\n return values.reduce((total, value) => total + value, 0);\n}\n\n/**\n * Grows slots by weight, removing capped slots and redistributing their\n * unused share. Fractional pixels are accumulated and the last slot absorbs\n * the remaining numerical error when the supplied space is integral.\n */\nexport function growSlots (\n sizes: number[],\n ceilings: number[],\n weights: number[],\n extra: number,\n integerPixels: boolean,\n): number {\n let remaining = Math.max(0, extra);\n let active = sizes.map((_, index) => index).filter(index =>\n weights[index] > 0 && (ceilings[index] < 0 || sizes[index] < ceilings[index] - EPSILON));\n\n while (remaining > EPSILON && active.length > 0) {\n const totalWeight = active.reduce((total, index) => total + weights[index], 0);\n let capped = false;\n\n for (const index of active) {\n const ceiling = ceilings[index];\n const share = remaining * weights[index] / totalWeight;\n\n if (ceiling >= 0 && sizes[index] + share > ceiling + EPSILON) {\n const growth = Math.max(0, ceiling - sizes[index]);\n\n sizes[index] = ceiling;\n remaining -= growth;\n active = active.filter(value => value !== index);\n capped = true;\n\n break;\n }\n }\n if (capped) {\n continue;\n }\n\n let assigned = 0;\n let pixelError = 0;\n\n for (let activeIndex = 0; activeIndex < active.length; activeIndex++) {\n const index = active[activeIndex];\n let growth = activeIndex === active.length - 1\n ? remaining - assigned\n : remaining * weights[index] / totalWeight;\n\n if (integerPixels && activeIndex !== active.length - 1) {\n const exactGrowth = growth + pixelError;\n\n growth = Math.floor(exactGrowth);\n pixelError = exactGrowth - growth;\n }\n sizes[index] += growth;\n assigned += growth;\n }\n remaining = 0;\n }\n\n return remaining;\n}\n\nexport function alignmentOffset (alignment: number, remaining: number): number {\n if (alignment === 1) {\n return remaining / 2;\n }\n if (alignment === 2) {\n return remaining;\n }\n\n return 0;\n}\n","import { Component, effectsClass, getClass } from '@galacean/effects';\nimport type { Constructor, Engine, Transform, spec } from '@galacean/effects';\nimport { Container } from '../core/control';\nimport type { Control } from '../core/control';\nimport { UICanvas } from './ui-canvas';\n\n/**\n * Scene-tree bridge for a GUI Control. The VFXItem tree owns lifecycle and\n * serialization while the Control tree owns layout, drawing and input.\n */\n@effectsClass('UIControl')\nexport class UIControl extends Component {\n static fallbackParentGetDelegate?: (control: UIControl) => Control | null;\n\n private controlNode: Control | null = null;\n private linkedItemTransform: Transform | null = null;\n private linkedControl: Control | null = null;\n private syncingLocation = false;\n private readonly itemTransformChanged = () => this.syncItemLocationToControl();\n private readonly controlLocationChanged = () => this.syncControlLocationToItem();\n\n constructor (engine: Engine) {\n super(engine);\n }\n\n get control (): Control | null {\n return this.controlNode;\n }\n\n set control (value: Control | null) {\n if (value === this.controlNode) {\n return;\n }\n this.attachControl(value);\n }\n\n get hasControl (): boolean {\n return this.controlNode !== null;\n }\n\n override onAwake (): void {\n this.syncControl();\n }\n\n override onEnable (): void {\n if (this.controlNode) {\n this.controlNode.visible = this.item.isActive;\n this.controlNode.enabled = true;\n }\n }\n\n override onDisable (): void {\n if (this.controlNode) {\n this.controlNode.visible = this.item.isActive;\n this.controlNode.enabled = false;\n }\n }\n\n override onParentChanged (): void {\n this.syncControl();\n }\n\n override onOrderInParentChanged (): void {\n this.syncControlOrder();\n }\n\n override onDestroy (): void {\n this.disposeControl();\n }\n\n override dispose (): void {\n this.disposeControl();\n super.dispose();\n }\n\n /** Unlinks the GUI object without disposing or modifying it. */\n unlinkControl (): void {\n if (this.controlNode) {\n this.unbindLocationSync();\n this.controlNode = null;\n }\n }\n\n private attachControl (value: Control | null): void {\n if (value?.owner && value.owner !== this && value.owner.control === value) {\n throw new Error('A Control can only be owned by one UIControl.');\n }\n this.disposeControl();\n if (value) {\n this.controlNode = value;\n value.owner = this;\n this.syncControl();\n }\n }\n\n private disposeControl (): void {\n const control = this.controlNode;\n\n if (control) {\n this.unbindLocationSync();\n this.controlNode = null;\n control.dispose();\n }\n }\n\n private syncControl (): void {\n const control = this.controlNode;\n\n if (!control || !this.item) {\n return;\n }\n this.syncingLocation = true;\n control.visible = this.item.isActive;\n control.enabled = this.enabled;\n control.parent = this.resolveParent();\n this.syncControlOrder();\n this.copyItemLocationToControl();\n this.syncingLocation = false;\n this.bindLocationSync();\n }\n\n private syncControlOrder (): void {\n if (this.controlNode && this.item) {\n this.controlNode.indexInParent = this.item.orderInParent;\n }\n }\n\n private resolveParent (): Control | null {\n const parentItem = this.item.parent;\n\n if (!parentItem) {\n return UIControl.fallbackParentGetDelegate?.(this) ?? null;\n }\n const uiControl = parentItem.getComponent(UIControl);\n\n if (uiControl?.control) {\n return uiControl.control;\n }\n const canvas = parentItem.getComponent(UICanvas);\n\n return canvas?.rootControl ?? UIControl.fallbackParentGetDelegate?.(this) ?? null;\n }\n\n private bindLocationSync (): void {\n const itemTransform = this.item.transform;\n const control = this.controlNode;\n\n if (this.linkedItemTransform === itemTransform && this.linkedControl === control) {\n return;\n }\n this.unbindLocationSync();\n if (control) {\n this.linkedItemTransform = itemTransform;\n this.linkedControl = control;\n itemTransform.on('changed', this.itemTransformChanged);\n control.on('locationChanged', this.controlLocationChanged);\n }\n }\n\n private unbindLocationSync (): void {\n this.linkedItemTransform?.off('changed', this.itemTransformChanged);\n this.linkedControl?.off('locationChanged', this.controlLocationChanged);\n this.linkedItemTransform = null;\n this.linkedControl = null;\n }\n\n private syncItemLocationToControl (): void {\n if (this.syncingLocation || !this.controlNode) {\n return;\n }\n this.syncingLocation = true;\n this.copyItemLocationToControl();\n this.syncingLocation = false;\n }\n\n private syncControlLocationToItem (): void {\n const control = this.controlNode;\n\n if (!this.syncingLocation && control && this.item) {\n const source = control.location;\n const target = this.item.transform.position;\n\n if (source.x !== target.x || source.y !== target.y) {\n this.syncingLocation = true;\n this.item.transform.setPosition(source.x, source.y, target.z);\n this.syncingLocation = false;\n }\n }\n }\n\n private copyItemLocationToControl (): void {\n const control = this.controlNode;\n\n // Automatic layout owns the local X/Y rectangle. Keep the reverse sync so\n // layout results still update the scene item transform.\n if (control && !(control.parent instanceof Container)) {\n const source = this.item.transform.position;\n const target = control.location;\n\n if (source.x !== target.x || source.y !== target.y) {\n control.setPosition(source.x, source.y);\n }\n }\n }\n\n override fromData (data: spec.ComponentData): void {\n super.fromData(data);\n const uiControlData = data as spec.UIControlData;\n const Constructor = getClass(uiControlData.control) as Constructor<Control>;\n const control = new Constructor(this.engine);\n\n this.attachControl(control);\n this.syncingLocation = true;\n control.fromData(uiControlData.data);\n this.syncingLocation = false;\n this.syncControlLocationToItem();\n }\n}\n","import {\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine, spec } from '@galacean/effects';\nimport { Container, SizeFlags } from '../core/control';\nimport type { Control } from '../core/control';\nimport { LayoutAlignment, Orientation } from './enums';\nimport { alignmentOffset, assertEnumValue, growSlots, sum } from './utils';\n\n/** Places visible children in a single horizontal or vertical row. */\nexport class BoxContainer extends Container {\n static override readonly themeType: string = 'BoxContainer';\n private _orientation = Orientation.Horizontal;\n private _alignment = LayoutAlignment.Begin;\n private _reverse = false;\n\n get orientation (): Orientation {\n return this._orientation;\n }\n\n set orientation (value: Orientation) {\n assertEnumValue('BoxContainer orientation', value, Orientation.Vertical);\n if (this._orientation !== value) {\n this._orientation = value;\n this.invalidateMeasurement();\n }\n }\n\n get alignment (): LayoutAlignment {\n return this._alignment;\n }\n\n set alignment (value: LayoutAlignment) {\n assertEnumValue('BoxContainer alignment', value, LayoutAlignment.End);\n if (this._alignment !== value) {\n this._alignment = value;\n this.queueSort();\n }\n }\n\n get reverse (): boolean {\n return this._reverse;\n }\n\n set reverse (value: boolean) {\n if (this._reverse !== value) {\n this._reverse = value;\n this.queueSort();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n protected override sortChildren (): void {\n const children = this.getLayoutChildren();\n\n if (this.reverse) {\n children.reverse();\n }\n if (children.length === 0) {\n return;\n }\n\n const horizontal = this.orientation === Orientation.Horizontal;\n const availableMain = horizontal ? this.size.x : this.size.y;\n const availableCross = horizontal ? this.size.y : this.size.x;\n const separation = this.getThemeConstant('separation');\n const gapTotal = separation * (children.length - 1);\n const slotSpace = availableMain - gapTotal;\n const minimums = children.map(child => this.getMainSize(child.getBoundMinimumSize()));\n const desired = children.map(child => this.getMainSize(child.getBoundDesiredSize()));\n const maximums = children.map(child => this.getMainSize(child.getCombinedMaximumSize()));\n const sizes = minimums.slice();\n const integerPixels = Number.isInteger(slotSpace)\n && minimums.every(Number.isInteger)\n && desired.every(Number.isInteger)\n && maximums.every(value => value < 0 || Number.isInteger(value));\n let extra = Math.max(0, slotSpace - sum(sizes));\n\n extra = growSlots(\n sizes,\n desired,\n desired.map((value, index) => Math.max(0, value - sizes[index])),\n extra,\n integerPixels,\n );\n growSlots(\n sizes,\n maximums,\n children.map(child => this.isMainExpanded(child) ? child.stretchRatio : 0),\n extra,\n integerPixels,\n );\n\n const usedMain = sum(sizes) + gapTotal;\n let cursor = alignmentOffset(this.alignment, Math.max(0, availableMain - usedMain));\n\n for (let index = 0; index < children.length; index++) {\n const mainSize = sizes[index];\n const position = horizontal ? new math.Vector2(cursor, 0) : new math.Vector2(0, cursor);\n const size = horizontal\n ? new math.Vector2(mainSize, availableCross)\n : new math.Vector2(availableCross, mainSize);\n\n this.fitChildInRect(children[index], { position, size });\n cursor += mainSize + separation;\n }\n }\n\n private measureChildren (useDesired: boolean): math.Vector2 {\n const children = this.getLayoutChildren();\n let main = 0;\n let cross = 0;\n\n for (const child of children) {\n const childSize = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n main += this.getMainSize(childSize);\n cross = Math.max(cross, this.getCrossSize(childSize));\n }\n if (children.length > 1) {\n main += this.getThemeConstant('separation') * (children.length - 1);\n }\n\n return this.orientation === Orientation.Horizontal\n ? new math.Vector2(main, cross)\n : new math.Vector2(cross, main);\n }\n\n private getMainSize (size: math.Vector2): number {\n return this.orientation === Orientation.Horizontal ? size.x : size.y;\n }\n\n private getCrossSize (size: math.Vector2): number {\n return this.orientation === Orientation.Horizontal ? size.y : size.x;\n }\n\n private isMainExpanded (child: Control): boolean {\n const flags = this.orientation === Orientation.Horizontal\n ? child.horizontalSizeFlags\n : child.verticalSizeFlags;\n\n return (flags & SizeFlags.Expand) !== 0;\n }\n\n private invalidateMeasurement (): void {\n this.updateMinimumSize();\n this.updateDesiredSize();\n this.queueSort();\n }\n\n override fromData (data: spec.BoxContainerData): void {\n super.fromData(data);\n if (data.alignment !== undefined) {\n this.alignment = data.alignment;\n }\n if (data.reverse !== undefined) {\n this.reverse = data.reverse;\n }\n }\n}\n\n@effectsClass('HBoxContainer')\nexport class HBoxContainer extends BoxContainer {\n static override readonly themeType: string = 'HBoxContainer';\n constructor (engine: Engine) {\n super(engine);\n this.orientation = Orientation.Horizontal;\n }\n}\n\n@effectsClass('VBoxContainer')\nexport class VBoxContainer extends BoxContainer {\n static override readonly themeType: string = 'VBoxContainer';\n constructor (engine: Engine) {\n super(engine);\n this.orientation = Orientation.Vertical;\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { spec } from '@galacean/effects';\nimport { Container, SizeFlags } from '../core/control';\nimport type { Control } from '../core/control';\nimport { growSlots, sum } from './utils';\n\ntype TrackMetrics = {\n minimum: number[],\n desired: number[],\n maximum: number[],\n expanded: boolean[],\n};\n\n/** Places visible children in LTR row-major cells without spanning. */\n@effectsClass('GridContainer')\nexport class GridContainer extends Container {\n static override readonly themeType: string = 'GridContainer';\n private _columns = 1;\n\n get columns (): number {\n return this._columns;\n }\n\n set columns (value: number) {\n if (!Number.isInteger(value) || value < 1) {\n throw new RangeError('GridContainer columns must be an integer greater than zero.');\n }\n if (this._columns !== value) {\n this._columns = value;\n this.invalidateMeasurement();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureGrid(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureGrid(true);\n }\n\n protected override sortChildren (): void {\n const children = this.getLayoutChildren();\n\n if (children.length === 0) {\n return;\n }\n const columnCount = Math.min(this.columns, children.length);\n const rowCount = Math.ceil(children.length / this.columns);\n const columnMetrics = this.collectTrackMetrics(children, columnCount, true);\n const rowMetrics = this.collectTrackMetrics(children, rowCount, false);\n const horizontalSeparation = this.getThemeConstant('horizontalSeparation');\n const verticalSeparation = this.getThemeConstant('verticalSeparation');\n const columnSizes = this.allocateTracks(columnMetrics, this.size.x, horizontalSeparation);\n const rowSizes = this.allocateTracks(rowMetrics, this.size.y, verticalSeparation);\n const columnPositions = this.getTrackPositions(columnSizes, horizontalSeparation);\n const rowPositions = this.getTrackPositions(rowSizes, verticalSeparation);\n\n for (let index = 0; index < children.length; index++) {\n const column = index % this.columns;\n const row = Math.floor(index / this.columns);\n\n this.fitChildInRect(children[index], {\n position: new math.Vector2(columnPositions[column], rowPositions[row]),\n size: new math.Vector2(columnSizes[column], rowSizes[row]),\n });\n }\n }\n\n private measureGrid (useDesired: boolean): math.Vector2 {\n const children = this.getLayoutChildren();\n\n if (children.length === 0) {\n return new math.Vector2();\n }\n const columnCount = Math.min(this.columns, children.length);\n const rowCount = Math.ceil(children.length / this.columns);\n const columns = this.collectTrackMetrics(children, columnCount, true);\n const rows = this.collectTrackMetrics(children, rowCount, false);\n const columnSizes = useDesired ? columns.desired : columns.minimum;\n const rowSizes = useDesired ? rows.desired : rows.minimum;\n\n return new math.Vector2(\n sum(columnSizes) + this.getThemeConstant('horizontalSeparation') * Math.max(0, columnCount - 1),\n sum(rowSizes) + this.getThemeConstant('verticalSeparation') * Math.max(0, rowCount - 1),\n );\n }\n\n private collectTrackMetrics (children: Control[], count: number, horizontal: boolean): TrackMetrics {\n const minimum = new Array<number>(count).fill(0);\n const desired = new Array<number>(count).fill(0);\n const maximum = new Array<number>(count).fill(0);\n const unbounded = new Array<boolean>(count).fill(false);\n const expanded = new Array<boolean>(count).fill(false);\n\n for (let index = 0; index < children.length; index++) {\n const child = children[index];\n const track = horizontal ? index % this.columns : Math.floor(index / this.columns);\n const childMinimum = child.getBoundMinimumSize();\n const childDesired = child.getBoundDesiredSize();\n const childMaximum = child.getCombinedMaximumSize();\n const minimumValue = horizontal ? childMinimum.x : childMinimum.y;\n const desiredValue = horizontal ? childDesired.x : childDesired.y;\n const maximumValue = horizontal ? childMaximum.x : childMaximum.y;\n const flags = horizontal ? child.horizontalSizeFlags : child.verticalSizeFlags;\n\n minimum[track] = Math.max(minimum[track], minimumValue);\n desired[track] = Math.max(desired[track], desiredValue);\n if (maximumValue < 0) {\n unbounded[track] = true;\n } else {\n maximum[track] = Math.max(maximum[track], maximumValue);\n }\n expanded[track] ||= (flags & SizeFlags.Expand) !== 0;\n }\n for (let index = 0; index < count; index++) {\n maximum[index] = unbounded[index] ? -1 : Math.max(minimum[index], maximum[index]);\n }\n\n return { minimum, desired, maximum, expanded };\n }\n\n private allocateTracks (metrics: TrackMetrics, available: number, separation: number): number[] {\n const sizes = metrics.minimum.slice();\n const trackSpace = available - separation * Math.max(0, sizes.length - 1);\n const integerPixels = Number.isInteger(trackSpace)\n && metrics.minimum.every(Number.isInteger)\n && metrics.desired.every(Number.isInteger)\n && metrics.maximum.every(value => value < 0 || Number.isInteger(value));\n let extra = Math.max(0, trackSpace - sum(sizes));\n\n extra = growSlots(\n sizes,\n metrics.desired,\n metrics.desired.map((value, index) => Math.max(0, value - sizes[index])),\n extra,\n integerPixels,\n );\n growSlots(\n sizes,\n metrics.maximum,\n metrics.expanded.map(value => value ? 1 : 0),\n extra,\n integerPixels,\n );\n\n return sizes;\n }\n\n private getTrackPositions (sizes: number[], separation: number): number[] {\n const positions: number[] = [];\n let cursor = 0;\n\n for (const size of sizes) {\n positions.push(cursor);\n cursor += size + separation;\n }\n\n return positions;\n }\n\n private invalidateMeasurement (): void {\n this.updateMinimumSize();\n this.updateDesiredSize();\n this.queueSort();\n }\n\n override fromData (data: spec.GridContainerData): void {\n super.fromData(data);\n if (data.columns !== undefined) {\n this.columns = data.columns;\n }\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport { Container } from '../core/control';\n\n/** Adds four independent margins around every visible child. */\n@effectsClass('MarginContainer')\nexport class MarginContainer extends Container {\n static override readonly themeType: string = 'MarginContainer';\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n protected override sortChildren (): void {\n const left = this.getThemeConstant('marginLeft');\n const top = this.getThemeConstant('marginTop');\n const right = this.getThemeConstant('marginRight');\n const bottom = this.getThemeConstant('marginBottom');\n const rect = {\n position: new math.Vector2(left, top),\n size: new math.Vector2(\n this.size.x - left - right,\n this.size.y - top - bottom,\n ),\n };\n\n for (const child of this.getLayoutChildren()) {\n this.fitChildInRect(child, rect);\n }\n }\n\n private measureChildren (useDesired: boolean): math.Vector2 {\n let width = 0;\n let height = 0;\n\n for (const child of this.getLayoutChildren()) {\n const size = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n width = Math.max(width, size.x);\n height = Math.max(height, size.y);\n }\n\n const left = this.getThemeConstant('marginLeft');\n const top = this.getThemeConstant('marginTop');\n const right = this.getThemeConstant('marginRight');\n const bottom = this.getThemeConstant('marginBottom');\n\n return new math.Vector2(\n width + left + right,\n height + top + bottom,\n );\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { spec } from '@galacean/effects';\nimport { Container } from '../core/control';\n\n/** Centers children at their bound minimum size. */\n@effectsClass('CenterContainer')\nexport class CenterContainer extends Container {\n static override readonly themeType: string = 'CenterContainer';\n private _useTopLeft = false;\n\n get useTopLeft (): boolean {\n return this._useTopLeft;\n }\n\n set useTopLeft (value: boolean) {\n if (this._useTopLeft !== value) {\n this._useTopLeft = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n this.queueSort();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n protected override sortChildren (): void {\n for (const child of this.getLayoutChildren()) {\n const childSize = child.getBoundMinimumSize();\n const position = this.useTopLeft\n ? new math.Vector2(Math.floor(-childSize.x / 2), Math.floor(-childSize.y / 2))\n : new math.Vector2(\n Math.floor((this.size.x - childSize.x) / 2),\n Math.floor((this.size.y - childSize.y) / 2),\n );\n\n this.fitChildInRect(child, { position, size: childSize });\n }\n }\n\n private measureChildren (useDesired: boolean): math.Vector2 {\n if (this.useTopLeft) {\n return new math.Vector2();\n }\n let width = 0;\n let height = 0;\n\n for (const child of this.getLayoutChildren()) {\n const size = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n width = Math.max(width, size.x);\n height = Math.max(height, size.y);\n }\n\n return new math.Vector2(width, height);\n }\n\n override fromData (data: spec.CenterContainerData): void {\n super.fromData(data);\n if (data.useTopLeft !== undefined) {\n this.useTopLeft = data.useTopLeft;\n }\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { spec } from '@galacean/effects';\nimport { Container } from '../core/control';\nimport { AspectRatioStretchMode, LayoutAlignment } from './enums';\nimport { assertEnumValue, assertFinite } from './utils';\n\n/** Fits every visible child into the same rectangle with a fixed width/height ratio. */\n@effectsClass('AspectRatioContainer')\nexport class AspectRatioContainer extends Container {\n static override readonly themeType: string = 'AspectRatioContainer';\n private _ratio = 1;\n private _stretchMode = AspectRatioStretchMode.Fit;\n private _horizontalAlignment = LayoutAlignment.Center;\n private _verticalAlignment = LayoutAlignment.Center;\n\n get ratio (): number {\n return this._ratio;\n }\n\n set ratio (value: number) {\n assertFinite('AspectRatioContainer ratio', value);\n if (value <= 0) {\n throw new RangeError('AspectRatioContainer ratio must be greater than zero.');\n }\n if (this._ratio !== value) {\n this._ratio = value;\n this.queueSort();\n }\n }\n\n get stretchMode (): AspectRatioStretchMode {\n return this._stretchMode;\n }\n\n set stretchMode (value: AspectRatioStretchMode) {\n assertEnumValue('AspectRatioContainer stretchMode', value, AspectRatioStretchMode.Cover);\n if (this._stretchMode !== value) {\n this._stretchMode = value;\n this.queueSort();\n }\n }\n\n get horizontalAlignment (): LayoutAlignment {\n return this._horizontalAlignment;\n }\n\n set horizontalAlignment (value: LayoutAlignment) {\n assertEnumValue('AspectRatioContainer horizontalAlignment', value, LayoutAlignment.End);\n if (this._horizontalAlignment !== value) {\n this._horizontalAlignment = value;\n this.queueSort();\n }\n }\n\n get verticalAlignment (): LayoutAlignment {\n return this._verticalAlignment;\n }\n\n set verticalAlignment (value: LayoutAlignment) {\n assertEnumValue('AspectRatioContainer verticalAlignment', value, LayoutAlignment.End);\n if (this._verticalAlignment !== value) {\n this._verticalAlignment = value;\n this.queueSort();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n protected override sortChildren (): void {\n for (const child of this.getLayoutChildren()) {\n const childMinimum = child.getBoundMinimumSize();\n const baseWidth = this.ratio;\n const baseHeight = 1;\n let scale: number;\n\n switch (this.stretchMode) {\n case AspectRatioStretchMode.WidthControlsHeight:\n scale = this.size.x / baseWidth;\n\n break;\n case AspectRatioStretchMode.HeightControlsWidth:\n scale = this.size.y / baseHeight;\n\n break;\n case AspectRatioStretchMode.Cover:\n scale = Math.max(this.size.x / baseWidth, this.size.y / baseHeight);\n\n break;\n default:\n scale = Math.min(this.size.x / baseWidth, this.size.y / baseHeight);\n\n break;\n }\n const childSize = new math.Vector2(\n Math.max(childMinimum.x, baseWidth * scale),\n Math.max(childMinimum.y, baseHeight * scale),\n );\n const position = new math.Vector2(\n this.getAlignedOffset(this.horizontalAlignment, this.size.x - childSize.x),\n this.getAlignedOffset(this.verticalAlignment, this.size.y - childSize.y),\n );\n\n this.fitChildInRect(child, { position, size: childSize });\n }\n }\n\n private measureChildren (useDesired: boolean): math.Vector2 {\n let width = 0;\n let height = 0;\n\n for (const child of this.getLayoutChildren()) {\n const size = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n width = Math.max(width, size.x);\n height = Math.max(height, size.y);\n }\n\n return new math.Vector2(width, height);\n }\n\n private getAlignedOffset (alignment: LayoutAlignment, remaining: number): number {\n if (alignment === LayoutAlignment.Center) {\n return remaining / 2;\n }\n if (alignment === LayoutAlignment.End) {\n return remaining;\n }\n\n return 0;\n }\n\n override fromData (data: spec.AspectRatioContainerData): void {\n super.fromData(data);\n if (data.ratio !== undefined) {\n this.ratio = data.ratio;\n }\n if (data.stretchMode !== undefined) {\n this.stretchMode = data.stretchMode;\n }\n if (data.horizontalAlignment !== undefined) {\n this.horizontalAlignment = data.horizontalAlignment;\n }\n if (data.verticalAlignment !== undefined) {\n this.verticalAlignment = data.verticalAlignment;\n }\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport { Container } from '../core/control';\n\n@effectsClass('PanelContainer')\nexport class PanelContainer extends Container {\n static override readonly themeType: string = 'PanelContainer';\n\n override getMinimumSize (): math.Vector2 {\n return this.measureChildren(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureChildren(true);\n }\n\n override draw (): void {\n this.drawStyleBox(this.getThemeStyleBox('panel'), 0, 0, this.width, this.height);\n }\n\n protected override sortChildren (): void {\n const margins = this.getThemeStyleBox('panel').getContentMargins();\n const rect = {\n position: new math.Vector2(margins.left, margins.top),\n size: new math.Vector2(\n Math.max(0, this.width - margins.left - margins.right),\n Math.max(0, this.height - margins.top - margins.bottom),\n ),\n };\n\n for (const child of this.getLayoutChildren()) {\n this.fitChildInRect(child, rect);\n }\n }\n\n private measureChildren (desired: boolean): math.Vector2 {\n let width = 0;\n let height = 0;\n\n for (const child of this.getLayoutChildren()) {\n const size = desired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n width = Math.max(width, size.x);\n height = Math.max(height, size.y);\n }\n const margins = this.getThemeStyleBox('panel').getContentMargins();\n\n return new math.Vector2(\n width + margins.left + margins.right,\n height + margins.top + margins.bottom,\n );\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\n\nabstract class Separator extends Control {\n constructor (engine: Engine, private readonly vertical: boolean) {\n super(engine);\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n override getMinimumSize (): math.Vector2 {\n const minimum = this.getThemeStyleBox('separator').getMinimumSize();\n const thickness = Math.max(0, this.getThemeConstant('separation'));\n\n return this.vertical\n ? new math.Vector2(Math.max(minimum.x, thickness), minimum.y)\n : new math.Vector2(minimum.x, Math.max(minimum.y, thickness));\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.getMinimumSize();\n }\n\n override draw (): void {\n const minimum = this.getMinimumSize();\n const width = this.vertical ? minimum.x : this.width;\n const height = this.vertical ? this.height : minimum.y;\n\n this.drawStyleBox(\n this.getThemeStyleBox('separator'),\n (this.width - width) * 0.5,\n (this.height - height) * 0.5,\n width,\n height,\n );\n }\n}\n\n@effectsClass('HSeparator')\nexport class HSeparator extends Separator {\n static override readonly themeType: string = 'HSeparator';\n\n constructor (engine: Engine) {\n super(engine, false);\n }\n}\n\n@effectsClass('VSeparator')\nexport class VSeparator extends Separator {\n static override readonly themeType: string = 'VSeparator';\n\n constructor (engine: Engine) {\n super(engine, true);\n }\n}\n","import { EventEmitter } from '@galacean/effects';\nimport type { Engine, EventEmitterListener, spec } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport type { ControlEvent } from '../core/control';\n\nexport type RangeEvent = ControlEvent & {\n changed: [],\n valueChanged: [value: number],\n};\n\ntype SharedRange = {\n value: number,\n minValue: number,\n maxValue: number,\n step: number,\n page: number,\n exponentialRatio: boolean,\n allowGreater: boolean,\n allowLesser: boolean,\n owners: Set<Range>,\n};\n\n/** Numeric value model shared by scroll bars and future slider controls. */\nexport class Range extends Control {\n static override readonly themeType: string = 'Range';\n private shared: SharedRange;\n private _rounded = false;\n private suppressSignals = false;\n private readonly rangeEventEmitter = new EventEmitter<RangeEvent>();\n\n constructor (engine: Engine) {\n super(engine);\n this.shared = createSharedRange();\n this.shared.owners.add(this);\n }\n\n get minValue (): number {\n return this.shared.minValue;\n }\n\n set minValue (value: number) {\n this.setMinValue(value);\n }\n\n get maxValue (): number {\n return this.shared.maxValue;\n }\n\n set maxValue (value: number) {\n this.setMaxValue(value);\n }\n\n get step (): number {\n return this.shared.step;\n }\n\n set step (value: number) {\n this.setStep(value);\n }\n\n get page (): number {\n return this.shared.page;\n }\n\n set page (value: number) {\n this.setPage(value);\n }\n\n get value (): number {\n return this.shared.value;\n }\n\n set value (value: number) {\n this.setValue(value);\n }\n\n get ratio (): number {\n return this.getAsRatio();\n }\n\n set ratio (value: number) {\n this.setAsRatio(value);\n }\n\n get exponentialRatio (): boolean {\n return this.shared.exponentialRatio;\n }\n\n set exponentialRatio (value: boolean) {\n this.shared.exponentialRatio = value;\n }\n\n get rounded (): boolean {\n return this._rounded;\n }\n\n set rounded (value: boolean) {\n this._rounded = value;\n }\n\n get allowGreater (): boolean {\n return this.shared.allowGreater;\n }\n\n set allowGreater (value: boolean) {\n this.shared.allowGreater = value;\n }\n\n get allowLesser (): boolean {\n return this.shared.allowLesser;\n }\n\n set allowLesser (value: boolean) {\n this.shared.allowLesser = value;\n }\n\n override on<E extends keyof RangeEvent> (\n eventName: E,\n listener: EventEmitterListener<RangeEvent[E]>,\n ): void {\n if (eventName === 'changed' || eventName === 'valueChanged') {\n this.rangeEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof RangeEvent> (\n eventName: E,\n listener: EventEmitterListener<RangeEvent[E]>,\n ): void {\n if (eventName === 'changed' || eventName === 'valueChanged') {\n this.rangeEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n setValue (value: number): void {\n const previous = this.shared.value;\n\n this.shared.value = this.calculateValue(value);\n if (!valuesEqual(previous, this.shared.value)) {\n this.notifyValueChanged();\n }\n }\n\n setValueNoSignal (value: number): void {\n const previous = this.shared.value;\n\n this.shared.value = this.calculateValue(value);\n if (!valuesEqual(previous, this.shared.value)) {\n for (const owner of this.shared.owners) {\n owner.valueChanged(this.shared.value);\n }\n }\n }\n\n setMinValue (value: number): void {\n assertFinite('Range minValue', value);\n if (this.shared.minValue === value) {\n return;\n }\n this.shared.minValue = value;\n this.shared.maxValue = Math.max(this.shared.maxValue, value);\n this.shared.page = clamp(this.shared.page, 0, this.shared.maxValue - value);\n this.setValue(this.shared.value);\n this.notifyChanged();\n }\n\n setMaxValue (value: number): void {\n assertFinite('Range maxValue', value);\n const maximum = Math.max(value, this.shared.minValue);\n\n if (this.shared.maxValue === maximum) {\n return;\n }\n this.shared.maxValue = maximum;\n this.shared.page = clamp(this.shared.page, 0, maximum - this.shared.minValue);\n this.setValue(this.shared.value);\n this.notifyChanged();\n }\n\n setStep (value: number): void {\n assertFinite('Range step', value);\n if (this.shared.step === value) {\n return;\n }\n this.shared.step = value;\n this.notifyChanged();\n }\n\n setPage (value: number): void {\n assertFinite('Range page', value);\n const page = clamp(value, 0, this.shared.maxValue - this.shared.minValue);\n\n if (this.shared.page === page) {\n return;\n }\n this.shared.page = page;\n this.setValue(this.shared.value);\n this.notifyChanged();\n }\n\n setAsRatio (ratio: number): void {\n assertFinite('Range ratio', ratio);\n const normalized = clamp(ratio, 0, 1);\n let value: number;\n\n if (this.shared.exponentialRatio && this.shared.minValue >= 0 && this.shared.maxValue > 0) {\n const minimum = this.shared.minValue === 0 ? 0 : Math.log2(this.shared.minValue);\n const maximum = Math.log2(this.shared.maxValue);\n\n value = 2 ** (minimum + (maximum - minimum) * normalized);\n } else {\n const span = this.shared.maxValue - this.shared.minValue;\n\n value = this.shared.minValue + span * normalized;\n if (this.shared.step > 0) {\n value = this.shared.minValue + Math.round(span * normalized / this.shared.step) * this.shared.step;\n }\n }\n this.setValue(clamp(value, this.shared.minValue, this.shared.maxValue));\n }\n\n getAsRatio (): number {\n const span = this.shared.maxValue - this.shared.minValue;\n\n if (span === 0) {\n return 1;\n }\n const value = clamp(this.shared.value, this.shared.minValue, this.shared.maxValue);\n\n if (this.shared.exponentialRatio && this.shared.minValue >= 0 && this.shared.maxValue > 0) {\n if (value <= 0) {\n return 0;\n }\n const minimum = this.shared.minValue === 0 ? 0 : Math.log2(this.shared.minValue);\n const maximum = Math.log2(this.shared.maxValue);\n\n return clamp((Math.log2(value) - minimum) / (maximum - minimum), 0, 1);\n }\n\n return clamp((value - this.shared.minValue) / span, 0, 1);\n }\n\n share (range: Range): void {\n if (range === this) {\n return;\n }\n range.attachShared(this.shared);\n range.rangeEventEmitter.emit('changed');\n range.rangeEventEmitter.emit('valueChanged', range.value);\n }\n\n unshare (): void {\n const previous = this.shared;\n const shared = createSharedRange();\n\n shared.value = previous.value;\n shared.minValue = previous.minValue;\n shared.maxValue = previous.maxValue;\n shared.step = previous.step;\n shared.page = previous.page;\n shared.exponentialRatio = previous.exponentialRatio;\n shared.allowGreater = previous.allowGreater;\n shared.allowLesser = previous.allowLesser;\n this.attachShared(shared);\n }\n\n override dispose (): void {\n this.shared.owners.delete(this);\n super.dispose();\n }\n\n protected valueChanged (value: number): void {}\n\n private calculateValue (value: number): number {\n if (Number.isNaN(value)) {\n return value;\n }\n assertFinite('Range value', value);\n let calculated = value;\n\n if (this.shared.step > 0) {\n calculated = snapFrom(this.shared.minValue, calculated, this.shared.step);\n }\n if (this._rounded) {\n calculated = Math.round(calculated);\n }\n if (!this.shared.allowGreater) {\n calculated = Math.min(calculated, this.shared.maxValue - this.shared.page);\n }\n if (!this.shared.allowLesser) {\n calculated = Math.max(calculated, this.shared.minValue);\n }\n\n return calculated;\n }\n\n private attachShared (shared: SharedRange): void {\n if (this.shared === shared) {\n return;\n }\n this.shared.owners.delete(this);\n this.shared = shared;\n shared.owners.add(this);\n }\n\n private notifyValueChanged (): void {\n for (const owner of this.shared.owners) {\n owner.valueChanged(this.shared.value);\n if (!this.suppressSignals) {\n owner.rangeEventEmitter.emit('valueChanged', this.shared.value);\n }\n }\n }\n\n private notifyChanged (): void {\n for (const owner of this.shared.owners) {\n if (!this.suppressSignals) {\n owner.rangeEventEmitter.emit('changed');\n }\n }\n }\n\n override fromData (data: spec.RangeData): void {\n this.suppressSignals = true;\n super.fromData(data);\n if (data.allowGreater !== undefined) {\n this.allowGreater = data.allowGreater;\n }\n if (data.allowLesser !== undefined) {\n this.allowLesser = data.allowLesser;\n }\n if (data.exponentialRatio !== undefined) {\n this.exponentialRatio = data.exponentialRatio;\n }\n if (data.rounded !== undefined) {\n this.rounded = data.rounded;\n }\n if (data.minValue !== undefined) {\n this.setMinValue(data.minValue);\n }\n if (data.maxValue !== undefined) {\n this.setMaxValue(data.maxValue);\n }\n if (data.step !== undefined) {\n this.setStep(data.step);\n }\n if (data.page !== undefined) {\n this.setPage(data.page);\n }\n if (data.value !== undefined) {\n this.setValueNoSignal(data.value);\n }\n this.suppressSignals = false;\n }\n}\n\nfunction createSharedRange (): SharedRange {\n return {\n value: 0,\n minValue: 0,\n maxValue: 100,\n step: 1,\n page: 0,\n exponentialRatio: false,\n allowGreater: false,\n allowLesser: false,\n owners: new Set(),\n };\n}\n\nfunction snapFrom (minimum: number, value: number, step: number): number {\n return Number((minimum + Math.round((value - minimum) / step) * step).toPrecision(15));\n}\n\nfunction valuesEqual (left: number, right: number): boolean {\n return left === right || (Number.isNaN(left) && Number.isNaN(right));\n}\n\nfunction clamp (value: number, minimum: number, maximum: number): number {\n return Math.min(maximum, Math.max(minimum, value));\n}\n\nfunction assertFinite (name: string, value: number): void {\n if (!Number.isFinite(value)) {\n throw new RangeError(`${name} must be finite.`);\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport { FocusMode } from '../core/enums';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n spec,\n} from '@galacean/effects';\nimport { Orientation } from '../layout/enums';\nimport { Range } from './range';\nimport type { RangeEvent } from './range';\n\nexport type ScrollBarEvent = RangeEvent & {\n scrolling: [],\n};\n\ntype Highlight = 'none' | 'decrement' | 'track' | 'increment';\n\ntype GrabberRect = {\n x: number,\n y: number,\n width: number,\n height: number,\n};\n\nconst PAGE_DIVISOR = 8;\n\n/** A horizontal or vertical range scroll bar. */\nexport class ScrollBar extends Range {\n static override readonly themeType: string = 'ScrollBar';\n static readonly pageDivisor = PAGE_DIVISOR;\n\n private readonly scrollBarEventEmitter = new EventEmitter<ScrollBarEvent>();\n private _orientation: Orientation;\n private _customStep = -1;\n private highlight: Highlight = 'none';\n private decrementActive = false;\n private incrementActive = false;\n private dragging = false;\n private dragPosition = 0;\n private dragRatio = 0;\n\n constructor (engine: Engine, orientation = Orientation.Vertical) {\n super(engine);\n\n this._orientation = orientation;\n this.step = 0;\n this.focusMode = FocusMode.Accessibility;\n }\n\n get orientation (): Orientation {\n return this._orientation;\n }\n\n set orientation (value: Orientation) {\n if (value !== Orientation.Horizontal && value !== Orientation.Vertical) {\n throw new RangeError('Invalid ScrollBar orientation.');\n }\n if (this._orientation !== value) {\n this._orientation = value;\n this.updateMinimumSize();\n }\n }\n\n get customStep (): number {\n return this._customStep;\n }\n\n set customStep (value: number) {\n if (!Number.isFinite(value)) {\n throw new RangeError('ScrollBar customStep must be finite.');\n }\n this._customStep = value;\n }\n\n override on<E extends keyof ScrollBarEvent> (\n eventName: E,\n listener: EventEmitterListener<ScrollBarEvent[E]>,\n ): void {\n if (eventName === 'scrolling') {\n this.scrollBarEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof ScrollBarEvent> (\n eventName: E,\n listener: EventEmitterListener<ScrollBarEvent[E]>,\n ): void {\n if (eventName === 'scrolling') {\n this.scrollBarEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n scroll (amount: number): void {\n this.scrollTo(this.value + amount);\n }\n\n scrollTo (position: number): void {\n const previous = this.value;\n\n this.setValue(position);\n if (previous !== this.value) {\n this.scrollBarEventEmitter.emit('scrolling');\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n const decrementSize = this.getButtonAxisSize(false);\n const incrementSize = this.getButtonAxisSize(true);\n const incrementCrossSize = this.getButtonCrossSize(true);\n const scrollMinimum = this.getThemeStyleBox('scroll').getMinimumSize();\n const grabberMinimum = this.getGrabberMinimumSize();\n\n return this.orientation === Orientation.Horizontal\n ? new math.Vector2(\n decrementSize + incrementSize + scrollMinimum.x + grabberMinimum,\n Math.max(incrementCrossSize, scrollMinimum.y) + this.getCrossStartPadding() + this.getCrossEndPadding(),\n )\n : new math.Vector2(\n Math.max(incrementCrossSize, scrollMinimum.x) + this.getCrossStartPadding() + this.getCrossEndPadding(),\n decrementSize + incrementSize + scrollMinimum.y + grabberMinimum,\n );\n }\n\n override draw (): void {\n const horizontal = this.orientation === Orientation.Horizontal;\n const axisSize = horizontal ? this.width : this.height;\n const decrementState = this.decrementActive\n ? 'Pressed'\n : this.highlight === 'decrement' ? 'Highlight' : '';\n const incrementState = this.incrementActive\n ? 'Pressed'\n : this.highlight === 'increment' ? 'Highlight' : '';\n const decrementSize = this.getButtonAxisSize(false, decrementState);\n const incrementSize = this.getButtonAxisSize(true, incrementState);\n const trackLength = Math.max(0, axisSize - decrementSize - incrementSize);\n const grabber = this.getGrabberRect();\n const grabberStyle = this.dragging\n ? 'grabberPressed'\n : this.highlight === 'track' ? 'grabberHighlight' : 'grabber';\n const scrollStyle = this.hasFocus(true) ? 'scrollFocus' : 'scroll';\n\n if (horizontal) {\n this.drawButtonIcon(false, decrementState, 0, 0);\n this.drawStyleBox(this.getThemeStyleBox(scrollStyle), decrementSize, 0, trackLength, this.height);\n this.drawButtonIcon(true, incrementState, axisSize - incrementSize, 0);\n } else {\n this.drawButtonIcon(false, decrementState, 0, 0);\n this.drawStyleBox(this.getThemeStyleBox(scrollStyle), 0, decrementSize, this.width, trackLength);\n this.drawButtonIcon(true, incrementState, 0, axisSize - incrementSize);\n }\n this.drawStyleBox(this.getThemeStyleBox(grabberStyle), grabber.x, grabber.y, grabber.width, grabber.height);\n }\n\n override onMouseEnter (location: math.Vector2): void {\n this.updateHighlight(this.getAxis(location));\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n const position = this.getAxis(event.position);\n\n if (this.dragging) {\n const area = this.getAreaSize();\n\n if (area > 0) {\n const previous = this.value;\n\n this.setAsRatio(this.dragRatio + (position - this.dragPosition) / area);\n if (previous !== this.value) {\n this.scrollBarEventEmitter.emit('scrolling');\n }\n }\n\n return;\n }\n this.updateHighlight(position);\n }\n\n override onMouseLeave (): void {\n if (!this.dragging) {\n this.highlight = 'none';\n }\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n const position = this.getAxis(event.position);\n const total = this.getAxisSize();\n const grabberOffset = this.getGrabberOffset();\n const grabberSize = this.getGrabberSize();\n const decrementSize = this.getButtonAxisSize(false);\n const incrementSize = this.getButtonAxisSize(true);\n const trackPosition = position - decrementSize - this.getTrackStartMargin();\n\n if (position < decrementSize) {\n this.decrementActive = true;\n this.scroll(-this.getIncrement());\n } else if (position > total - incrementSize) {\n this.incrementActive = true;\n this.scroll(this.getIncrement());\n } else if (trackPosition < grabberOffset) {\n this.scroll(-this.getPageIncrement());\n } else if (trackPosition < grabberOffset + grabberSize) {\n this.dragging = true;\n this.dragPosition = position;\n this.dragRatio = this.getAsRatio();\n } else {\n this.scroll(this.getPageIncrement());\n }\n event.accept();\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n this.decrementActive = false;\n this.incrementActive = false;\n this.dragging = false;\n this.updateHighlight(this.getAxis(event.position));\n }\n\n override onMouseWheel (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.WheelUp && event.buttonIndex !== MouseButton.WheelDown) {\n return;\n }\n const previous = this.value;\n const direction = event.buttonIndex === MouseButton.WheelUp ? -1 : 1;\n const wheelIncrement = this.page > 0\n ? this.page / PAGE_DIVISOR\n : (this.maxValue - this.minValue) / 16;\n const amount = Math.max(wheelIncrement * event.factor, Math.max(0, this.step));\n\n this.scroll(direction * amount);\n if (this.value !== previous) {\n event.accept();\n }\n }\n\n override onKeyDown (event: InputEventKey): void {\n let target: number | undefined;\n const increment = this.getIncrement();\n\n if ((this.orientation === Orientation.Horizontal && event.keycode === 'ArrowLeft') ||\n (this.orientation === Orientation.Vertical && event.keycode === 'ArrowUp')) {\n target = this.value - increment;\n } else if ((this.orientation === Orientation.Horizontal && event.keycode === 'ArrowRight') ||\n (this.orientation === Orientation.Vertical && event.keycode === 'ArrowDown')) {\n target = this.value + increment;\n } else if (event.keycode === 'Home') {\n target = this.minValue;\n } else if (event.keycode === 'End') {\n target = this.maxValue;\n }\n if (target !== undefined) {\n const previous = this.value;\n\n this.scrollTo(target);\n if (this.value !== previous) {\n event.accept();\n }\n }\n }\n\n override onScrollBegin (): void {\n this.decrementActive = false;\n this.incrementActive = false;\n this.dragging = false;\n }\n\n private getAxis (position: math.Vector2): number {\n return this.orientation === Orientation.Horizontal ? position.x : position.y;\n }\n\n private getAxisSize (): number {\n return this.orientation === Orientation.Horizontal ? this.width : this.height;\n }\n\n private getIncrement (): number {\n return this.customStep >= 0 ? this.customStep : this.step;\n }\n\n private getPageIncrement (): number {\n return this.page > 0 ? this.page : (this.maxValue - this.minValue) / 16;\n }\n\n private getTrackSize (): number {\n return Math.max(0, this.getAxisSize() - this.getButtonAxisSize(false) - this.getButtonAxisSize(true));\n }\n\n private getAreaSize (): number {\n const scrollMinimum = this.getThemeStyleBox('scroll').getMinimumSize();\n const scrollAxisMinimum = this.orientation === Orientation.Horizontal ? scrollMinimum.x : scrollMinimum.y;\n\n return Math.max(0, this.getTrackSize() - scrollAxisMinimum - this.getGrabberMinimumSize());\n }\n\n private getGrabberSize (): number {\n const range = this.maxValue - this.minValue;\n\n if (range <= 0) {\n return 0;\n }\n\n return Math.min(\n this.getTrackSize(),\n this.getGrabberMinimumSize() + Math.max(0, this.page) / range * this.getAreaSize(),\n );\n }\n\n private getGrabberMinimumSize (): number {\n const minimum = this.getThemeStyleBox('grabber').getMinimumSize();\n\n return this.orientation === Orientation.Horizontal ? minimum.x : minimum.y;\n }\n\n private getGrabberOffset (): number {\n return this.getAreaSize() * this.getAsRatio();\n }\n\n private getGrabberRect (): GrabberRect {\n const offset = this.getButtonAxisSize(false) + this.getTrackStartMargin() + this.getGrabberOffset();\n const size = this.getGrabberSize();\n const crossStart = this.getCrossStartPadding();\n const crossSize = Math.max(0, (this.orientation === Orientation.Horizontal ? this.height : this.width)\n - crossStart - this.getCrossEndPadding());\n\n return this.orientation === Orientation.Horizontal\n ? { x: offset, y: crossStart, width: size, height: crossSize }\n : { x: crossStart, y: offset, width: crossSize, height: size };\n }\n\n private getTrackStartMargin (): number {\n const margins = this.getThemeStyleBox('scroll').getContentMargins();\n\n return this.orientation === Orientation.Horizontal ? margins.left : margins.top;\n }\n\n private getCrossStartPadding (): number {\n return Math.max(0, this.getThemeConstant(\n this.orientation === Orientation.Horizontal ? 'paddingTop' : 'paddingLeft',\n ));\n }\n\n private getCrossEndPadding (): number {\n return Math.max(0, this.getThemeConstant(\n this.orientation === Orientation.Horizontal ? 'paddingBottom' : 'paddingRight',\n ));\n }\n\n private updateHighlight (position: number): void {\n const total = this.getAxisSize();\n const decrementSize = this.getButtonAxisSize(false);\n const incrementSize = this.getButtonAxisSize(true);\n\n if (position < 0 || position > total) {\n this.highlight = 'none';\n } else if (position < decrementSize) {\n this.highlight = 'decrement';\n } else if (position > total - incrementSize) {\n this.highlight = 'increment';\n } else {\n this.highlight = 'track';\n }\n }\n\n private drawButtonIcon (\n increment: boolean,\n state: '' | 'Highlight' | 'Pressed',\n x: number,\n y: number,\n ): void {\n const icon = this.getButtonIcon(increment, state);\n\n if (icon) {\n this.drawTexture(x, y, icon.width, icon.height, icon);\n }\n }\n\n private getButtonIcon (increment: boolean, state: '' | 'Highlight' | 'Pressed' = '') {\n const name = increment ? 'increment' : 'decrement';\n\n return this.getThemeIcon(`${name}${state}`) ?? this.getThemeIcon(name);\n }\n\n private getButtonAxisSize (increment: boolean, state: '' | 'Highlight' | 'Pressed' = ''): number {\n const icon = this.getButtonIcon(increment, state);\n\n return icon ? this.orientation === Orientation.Horizontal ? icon.width : icon.height : 0;\n }\n\n private getButtonCrossSize (increment: boolean): number {\n const icon = this.getButtonIcon(increment);\n\n return icon ? this.orientation === Orientation.Horizontal ? icon.height : icon.width : 0;\n }\n\n override fromData (data: spec.ScrollBarData): void {\n super.fromData(data);\n if (data.customStep !== undefined) {\n this.customStep = data.customStep;\n }\n }\n}\n\n@effectsClass('HScrollBar')\nexport class HScrollBar extends ScrollBar {\n static override readonly themeType: string = 'HScrollBar';\n constructor (engine: Engine) {\n super(engine, Orientation.Horizontal);\n }\n}\n\n@effectsClass('VScrollBar')\nexport class VScrollBar extends ScrollBar {\n static override readonly themeType: string = 'VScrollBar';\n constructor (engine: Engine) {\n super(engine, Orientation.Vertical);\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventMouseButton,\n InputEventScreenDrag,\n InputEventScreenTouch,\n spec,\n} from '@galacean/effects';\nimport { Container, SizeFlags } from '../core/control';\nimport type { Control, ControlEvent, RootControl } from '../core/control';\nimport { FocusMode } from '../core/enums';\nimport { ScrollMode } from './enums';\nimport { HScrollBar, ScrollBar, VScrollBar } from './scroll-bar';\n\nexport type ScrollContainerEvent = ControlEvent & {\n scrollStarted: [],\n scrollEnded: [],\n};\n\ntype ScrollLayout = {\n horizontalVisible: boolean,\n verticalVisible: boolean,\n horizontalReserved: boolean,\n verticalReserved: boolean,\n viewportWidth: number,\n viewportHeight: number,\n};\n\nconst INERTIA_DECELERATION = 1000;\n\n/** Clips and scrolls its content children using two internal Range scroll bars. */\n@effectsClass('ScrollContainer')\nexport class ScrollContainer extends Container {\n static override readonly themeType: string = 'ScrollContainer';\n private readonly scrollContainerEventEmitter = new EventEmitter<ScrollContainerEvent>();\n private readonly horizontalBar: HScrollBar;\n private readonly verticalBar: VScrollBar;\n private _horizontalScrollMode = ScrollMode.Auto;\n private _verticalScrollMode = ScrollMode.Auto;\n private _scrollHorizontalByDefault = false;\n private _deadzone = 0;\n private _followFocus = false;\n private focusRoot: RootControl | null = null;\n private touchIndex: number | null = null;\n private touchDecelerating = false;\n private beyondDeadzone = false;\n private readonly dragSpeed = new math.Vector2();\n private readonly dragAccum = new math.Vector2();\n private readonly dragFrom = new math.Vector2();\n private readonly lastDragAccum = new math.Vector2();\n private motionSampleTime = 0;\n private viewportWidth = 0;\n private viewportHeight = 0;\n\n private readonly scrollMoved = () => this.queueSort();\n private readonly controlStateChanged = () => {\n if (!this.visibleInHierarchy || !this.enabledInHierarchy) {\n this.cancelTouchDrag();\n }\n };\n private readonly focusOwnerChanged = (control: Control | null) => {\n if (this.followFocus && control && this.isContentDescendant(control)) {\n this.ensureControlVisible(control);\n }\n };\n\n constructor (engine: Engine) {\n super(engine);\n this.horizontalBar = new HScrollBar(engine);\n this.verticalBar = new VScrollBar(engine);\n this.horizontalBar.focusMode = FocusMode.None;\n this.verticalBar.focusMode = FocusMode.None;\n this.clipContents = true;\n this.addChild(this.horizontalBar);\n this.addChild(this.verticalBar);\n this.horizontalBar.on('valueChanged', this.scrollMoved);\n this.verticalBar.on('valueChanged', this.scrollMoved);\n this.on('visibilityChanged', this.controlStateChanged);\n this.on('enabledChanged', this.controlStateChanged);\n }\n\n get hScroll (): number {\n return this.horizontalBar.value;\n }\n\n set hScroll (value: number) {\n this.horizontalBar.setValue(value);\n this.cancelTouchDrag();\n }\n\n get vScroll (): number {\n return this.verticalBar.value;\n }\n\n set vScroll (value: number) {\n this.verticalBar.setValue(value);\n this.cancelTouchDrag();\n }\n\n get horizontalScrollMode (): ScrollMode {\n return this._horizontalScrollMode;\n }\n\n set horizontalScrollMode (value: ScrollMode) {\n assertScrollMode(value);\n if (this._horizontalScrollMode !== value) {\n this._horizontalScrollMode = value;\n this.invalidateScrollLayout();\n }\n }\n\n get verticalScrollMode (): ScrollMode {\n return this._verticalScrollMode;\n }\n\n set verticalScrollMode (value: ScrollMode) {\n assertScrollMode(value);\n if (this._verticalScrollMode !== value) {\n this._verticalScrollMode = value;\n this.invalidateScrollLayout();\n }\n }\n\n get horizontalCustomStep (): number {\n return this.horizontalBar.customStep;\n }\n\n set horizontalCustomStep (value: number) {\n this.horizontalBar.customStep = value;\n }\n\n get verticalCustomStep (): number {\n return this.verticalBar.customStep;\n }\n\n set verticalCustomStep (value: number) {\n this.verticalBar.customStep = value;\n }\n\n get scrollHorizontalByDefault (): boolean {\n return this._scrollHorizontalByDefault;\n }\n\n set scrollHorizontalByDefault (value: boolean) {\n this._scrollHorizontalByDefault = value;\n }\n\n get deadzone (): number {\n return this._deadzone;\n }\n\n set deadzone (value: number) {\n if (!Number.isFinite(value) || value < 0) {\n throw new RangeError('ScrollContainer deadzone must be a non-negative finite number.');\n }\n this._deadzone = value;\n }\n\n get followFocus (): boolean {\n return this._followFocus;\n }\n\n set followFocus (value: boolean) {\n this._followFocus = value;\n }\n\n override on<E extends keyof ScrollContainerEvent> (\n eventName: E,\n listener: EventEmitterListener<ScrollContainerEvent[E]>,\n ): void {\n if (eventName === 'scrollStarted' || eventName === 'scrollEnded') {\n this.scrollContainerEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof ScrollContainerEvent> (\n eventName: E,\n listener: EventEmitterListener<ScrollContainerEvent[E]>,\n ): void {\n if (eventName === 'scrollStarted' || eventName === 'scrollEnded') {\n this.scrollContainerEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n getHScrollBar (): HScrollBar {\n return this.horizontalBar;\n }\n\n getVScrollBar (): VScrollBar {\n return this.verticalBar;\n }\n\n override intersectsChildContent (child: Control, position: math.Vector2): boolean {\n if (child === this.horizontalBar || child === this.verticalBar) {\n return true;\n }\n const transform = this.getGlobalTransform2D().elements;\n const globalPosition = new math.Vector2(\n transform[0] * position.x + transform[3] * position.y + transform[6],\n transform[1] * position.x + transform[4] * position.y + transform[7],\n );\n\n if (this.verticalBar.visible && this.verticalBar.enabledInHierarchy &&\n this.verticalBar.hasPoint(this.verticalBar.makePositionLocal(globalPosition))) {\n return false;\n }\n if (this.horizontalBar.visible && this.horizontalBar.enabledInHierarchy &&\n this.horizontalBar.hasPoint(this.horizontalBar.makePositionLocal(globalPosition))) {\n return false;\n }\n\n return true;\n }\n\n ensureControlVisible (control: Control): void {\n if (!this.isContentDescendant(control)) {\n throw new Error('ScrollContainer can only reveal a descendant content control.');\n }\n const transform = control.getGlobalTransform2D().elements;\n const corners = [\n [0, 0],\n [control.width, 0],\n [0, control.height],\n [control.width, control.height],\n ];\n let left = Infinity;\n let top = Infinity;\n let right = -Infinity;\n let bottom = -Infinity;\n\n for (const corner of corners) {\n const global = new math.Vector2(\n transform[0] * corner[0] + transform[3] * corner[1] + transform[6],\n transform[1] * corner[0] + transform[4] * corner[1] + transform[7],\n );\n const local = this.makePositionLocal(global);\n\n left = Math.min(left, local.x);\n top = Math.min(top, local.y);\n right = Math.max(right, local.x);\n bottom = Math.max(bottom, local.y);\n }\n const horizontalDifference = Math.max(Math.min(left, 0), right - this.viewportWidth);\n const verticalDifference = Math.max(Math.min(top, 0), bottom - this.viewportHeight);\n\n this.horizontalBar.setValue(this.horizontalBar.value + horizontalDifference);\n this.verticalBar.setValue(this.verticalBar.value + verticalDifference);\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureContent(false);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureContent(true);\n }\n\n override onMouseWheel (event: InputEventMouseButton): void {\n const previousHorizontal = this.horizontalBar.value;\n const previousVertical = this.verticalBar.value;\n const horizontalEnabled = this.horizontalScrollMode !== ScrollMode.Disabled;\n const verticalEnabled = this.verticalScrollMode !== ScrollMode.Disabled;\n const swapAxes = this.scrollHorizontalByDefault !== event.shiftPressed;\n const verticalHidden = !this.verticalBar.visible && this.verticalScrollMode !== ScrollMode.ShowNever;\n const horizontalHidden = !this.horizontalBar.visible && this.horizontalScrollMode !== ScrollMode.ShowNever;\n const horizontalAmount = this.horizontalBar.page / ScrollBar.pageDivisor * event.factor;\n const verticalAmount = this.verticalBar.page / ScrollBar.pageDivisor * event.factor;\n\n if (event.buttonIndex === MouseButton.WheelUp) {\n if ((horizontalEnabled && swapAxes) || verticalHidden) {\n this.horizontalBar.scroll(-horizontalAmount);\n } else if (verticalEnabled) {\n this.verticalBar.scroll(-verticalAmount);\n }\n } else if (event.buttonIndex === MouseButton.WheelDown) {\n if ((horizontalEnabled && swapAxes) || verticalHidden) {\n this.horizontalBar.scroll(horizontalAmount);\n } else if (verticalEnabled) {\n this.verticalBar.scroll(verticalAmount);\n }\n } else if (event.buttonIndex === MouseButton.WheelLeft) {\n if ((verticalEnabled && swapAxes) || horizontalHidden) {\n this.verticalBar.scroll(-verticalAmount);\n } else if (horizontalEnabled) {\n this.horizontalBar.scroll(-horizontalAmount);\n }\n } else if (event.buttonIndex === MouseButton.WheelRight) {\n if ((verticalEnabled && swapAxes) || horizontalHidden) {\n this.verticalBar.scroll(verticalAmount);\n } else if (horizontalEnabled) {\n this.horizontalBar.scroll(horizontalAmount);\n }\n }\n if (previousHorizontal !== this.horizontalBar.value || previousVertical !== this.verticalBar.value) {\n event.accept();\n }\n }\n\n override onTouchDown (event: InputEventScreenTouch): void {\n if (this.touchIndex !== null) {\n this.cancelTouchDrag();\n }\n this.touchIndex = event.index;\n this.touchDecelerating = false;\n this.beyondDeadzone = false;\n this.dragSpeed.set(0, 0);\n this.dragAccum.set(0, 0);\n this.lastDragAccum.set(0, 0);\n this.dragFrom.set(this.horizontalBar.value, this.verticalBar.value);\n this.motionSampleTime = 0;\n }\n\n override onTouchMove (event: InputEventScreenDrag): void {\n if (this.touchIndex !== event.index || this.touchDecelerating) {\n return;\n }\n const previousHorizontal = this.horizontalBar.value;\n const previousVertical = this.verticalBar.value;\n\n this.dragAccum.x -= event.relative.x;\n this.dragAccum.y -= event.relative.y;\n const horizontalEnabled = this.horizontalScrollMode !== ScrollMode.Disabled;\n const verticalEnabled = this.verticalScrollMode !== ScrollMode.Disabled;\n const exceedsDeadzone = this.beyondDeadzone ||\n (horizontalEnabled && Math.abs(this.dragAccum.x) > this.deadzone) ||\n (verticalEnabled && Math.abs(this.dragAccum.y) > this.deadzone);\n\n if (exceedsDeadzone) {\n if (!this.beyondDeadzone) {\n this.beyondDeadzone = true;\n this.dragAccum.set(-event.relative.x, -event.relative.y);\n this.notifyContentScroll(true);\n this.scrollContainerEventEmitter.emit('scrollStarted');\n this.root?.cancelPointerPress(this, event.index);\n }\n if (horizontalEnabled) {\n this.horizontalBar.scrollTo(this.dragFrom.x + this.dragAccum.x);\n } else {\n this.dragAccum.x = 0;\n }\n if (verticalEnabled) {\n this.verticalBar.scrollTo(this.dragFrom.y + this.dragAccum.y);\n } else {\n this.dragAccum.y = 0;\n }\n }\n if (previousHorizontal !== this.horizontalBar.value || previousVertical !== this.verticalBar.value) {\n event.accept();\n }\n }\n\n override onTouchUp (event: InputEventScreenTouch): void {\n if (this.touchIndex !== event.index) {\n return;\n }\n if (event.canceled || (this.dragSpeed.x === 0 && this.dragSpeed.y === 0)) {\n this.cancelTouchDrag();\n } else {\n this.touchDecelerating = true;\n }\n }\n\n override update (deltaTime: number): void {\n const seconds = Math.max(0, deltaTime) / 1000;\n\n if (!this.visibleInHierarchy || !this.enabledInHierarchy) {\n this.cancelTouchDrag();\n } else if (this.touchIndex !== null) {\n if (this.touchDecelerating) {\n this.updateInertia(seconds);\n } else if (this.beyondDeadzone) {\n this.updateDragVelocity(seconds);\n }\n }\n super.update(deltaTime);\n }\n\n override dispose (): void {\n this.horizontalBar.off('valueChanged', this.scrollMoved);\n this.verticalBar.off('valueChanged', this.scrollMoved);\n this.off('visibilityChanged', this.controlStateChanged);\n this.off('enabledChanged', this.controlStateChanged);\n this.focusRoot?.off('guiFocusChanged', this.focusOwnerChanged);\n this.focusRoot = null;\n this.cancelTouchDrag();\n super.dispose();\n }\n\n protected override drawChildren (): void {\n const graphics = this.engine.graphics;\n\n if (this.clipContents) {\n graphics.pushClipRect(0, 0, this.viewportWidth, this.viewportHeight);\n }\n try {\n for (const child of this.children) {\n if (child !== this.horizontalBar && child !== this.verticalBar) {\n child.drawInternal();\n }\n }\n } finally {\n if (this.clipContents) {\n graphics.popClipRect();\n }\n }\n this.verticalBar.drawInternal();\n this.horizontalBar.drawInternal();\n }\n\n protected override getLayoutChildren (): Control[] {\n return super.getLayoutChildren().filter(child => child !== this.horizontalBar && child !== this.verticalBar);\n }\n\n protected override onRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {\n if (previousRoot === nextRoot) {\n return;\n }\n this.focusRoot?.off('guiFocusChanged', this.focusOwnerChanged);\n this.focusRoot = nextRoot;\n this.focusRoot?.on('guiFocusChanged', this.focusOwnerChanged);\n }\n\n protected override sortChildren (): void {\n const contentSize = this.getLargestContentSize(false);\n const layout = this.resolveLayout(contentSize);\n\n this.viewportWidth = layout.viewportWidth;\n this.viewportHeight = layout.viewportHeight;\n this.horizontalBar.visible = layout.horizontalVisible;\n this.verticalBar.visible = layout.verticalVisible;\n this.horizontalBar.setMaxValue(Math.max(contentSize.x, layout.viewportWidth));\n this.horizontalBar.setPage(layout.viewportWidth);\n this.verticalBar.setMaxValue(Math.max(contentSize.y, layout.viewportHeight));\n this.verticalBar.setPage(layout.viewportHeight);\n this.horizontalBar.setRect({\n position: new math.Vector2(0, this.height - this.horizontalBar.getBoundMinimumSize().y),\n size: new math.Vector2(layout.viewportWidth, this.horizontalBar.getBoundMinimumSize().y),\n });\n this.verticalBar.setRect({\n position: new math.Vector2(this.width - this.verticalBar.getBoundMinimumSize().x, 0),\n size: new math.Vector2(this.verticalBar.getBoundMinimumSize().x, layout.viewportHeight),\n });\n\n for (const child of this.getLayoutChildren()) {\n const minimum = child.getBoundMinimumSize();\n const maximum = child.getCombinedMaximumSize();\n let width = (child.horizontalSizeFlags & SizeFlags.Expand) !== 0\n ? Math.max(layout.viewportWidth, minimum.x)\n : minimum.x;\n let height = (child.verticalSizeFlags & SizeFlags.Expand) !== 0\n ? Math.max(layout.viewportHeight, minimum.y)\n : minimum.y;\n\n if (maximum.x >= 0) {\n width = Math.min(width, maximum.x);\n }\n if (maximum.y >= 0) {\n height = Math.min(height, maximum.y);\n }\n this.fitChildInRect(child, {\n position: new math.Vector2(\n Math.floor(-this.horizontalBar.value),\n Math.floor(-this.verticalBar.value),\n ),\n size: new math.Vector2(width, height),\n });\n }\n }\n\n private measureContent (useDesired: boolean): math.Vector2 {\n const content = this.getLargestContentSize(useDesired);\n const layout = this.resolveLayout(content);\n const maximum = this.getCombinedMaximumSize();\n const minimum = new math.Vector2();\n const horizontalConstrained = this.horizontalScrollMode === ScrollMode.Disabled ||\n this.horizontalScrollMode === ScrollMode.MaximizeFirst;\n const verticalConstrained = this.verticalScrollMode === ScrollMode.Disabled ||\n this.verticalScrollMode === ScrollMode.MaximizeFirst;\n\n if (this.horizontalScrollMode === ScrollMode.Disabled) {\n minimum.x = content.x;\n } else if (this.horizontalScrollMode === ScrollMode.MaximizeFirst) {\n minimum.x = maximum.x >= 0 ? Math.min(content.x, maximum.x) : content.x;\n }\n if (this.verticalScrollMode === ScrollMode.Disabled) {\n minimum.y = content.y;\n } else if (this.verticalScrollMode === ScrollMode.MaximizeFirst) {\n minimum.y = maximum.y >= 0 ? Math.min(content.y, maximum.y) : content.y;\n }\n if (horizontalConstrained && layout.verticalReserved) {\n minimum.x += this.verticalBar.getBoundMinimumSize().x;\n }\n if (verticalConstrained && layout.horizontalReserved) {\n minimum.y += this.horizontalBar.getBoundMinimumSize().y;\n }\n\n return minimum;\n }\n\n private getLargestContentSize (useDesired: boolean): math.Vector2 {\n const size = new math.Vector2();\n\n for (const child of this.getLayoutChildren()) {\n const childSize = useDesired ? child.getBoundDesiredSize() : child.getBoundMinimumSize();\n\n size.x = Math.max(size.x, childSize.x);\n size.y = Math.max(size.y, childSize.y);\n }\n\n return size;\n }\n\n private resolveLayout (content: math.Vector2): ScrollLayout {\n const horizontalSize = this.horizontalBar.getBoundMinimumSize().y;\n const verticalSize = this.verticalBar.getBoundMinimumSize().x;\n let horizontalVisible = this.horizontalScrollMode === ScrollMode.ShowAlways;\n let verticalVisible = this.verticalScrollMode === ScrollMode.ShowAlways;\n let horizontalReserved = horizontalVisible || this.horizontalScrollMode === ScrollMode.Reserve;\n let verticalReserved = verticalVisible || this.verticalScrollMode === ScrollMode.Reserve;\n\n for (let index = 0; index < 4; index++) {\n const viewportWidth = Math.max(0, this.width - (verticalReserved ? verticalSize : 0));\n const viewportHeight = Math.max(0, this.height - (horizontalReserved ? horizontalSize : 0));\n\n horizontalVisible = shouldShowBar(this.horizontalScrollMode, content.x, viewportWidth);\n verticalVisible = shouldShowBar(this.verticalScrollMode, content.y, viewportHeight);\n const nextHorizontalReserved = horizontalVisible || this.horizontalScrollMode === ScrollMode.Reserve;\n const nextVerticalReserved = verticalVisible || this.verticalScrollMode === ScrollMode.Reserve;\n\n if (horizontalReserved === nextHorizontalReserved && verticalReserved === nextVerticalReserved) {\n break;\n }\n horizontalReserved = nextHorizontalReserved;\n verticalReserved = nextVerticalReserved;\n }\n\n return {\n horizontalVisible,\n verticalVisible,\n horizontalReserved,\n verticalReserved,\n viewportWidth: Math.max(0, this.width - (verticalReserved ? verticalSize : 0)),\n viewportHeight: Math.max(0, this.height - (horizontalReserved ? horizontalSize : 0)),\n };\n }\n\n private invalidateScrollLayout (): void {\n this.updateMinimumSize();\n this.updateDesiredSize();\n this.queueSort();\n }\n\n private isContentDescendant (control: Control): boolean {\n let current: Control | null = control;\n\n while (current && current.parent !== this) {\n current = current.parent;\n }\n\n return !!current && current !== this.horizontalBar && current !== this.verticalBar && current.parent === this;\n }\n\n private notifyContentScroll (begin: boolean): void {\n const notify = (control: Control) => {\n if (begin) {\n control.onScrollBegin();\n } else {\n control.onScrollEnd();\n }\n for (const child of control.children) {\n notify(child);\n }\n };\n\n for (const child of this.getLayoutChildren()) {\n notify(child);\n }\n }\n\n private updateDragVelocity (seconds: number): void {\n if (seconds <= 0) {\n return;\n }\n this.motionSampleTime += seconds;\n if (this.motionSampleTime >= 0.1 || (this.dragSpeed.x === 0 && this.dragSpeed.y === 0)) {\n this.dragSpeed.set(\n (this.dragAccum.x - this.lastDragAccum.x) / this.motionSampleTime,\n (this.dragAccum.y - this.lastDragAccum.y) / this.motionSampleTime,\n );\n this.lastDragAccum.copyFrom(this.dragAccum);\n this.motionSampleTime = 0;\n }\n }\n\n private updateInertia (seconds: number): void {\n if (seconds <= 0) {\n return;\n }\n const previousHorizontal = this.horizontalBar.value;\n const previousVertical = this.verticalBar.value;\n\n if (this.horizontalScrollMode !== ScrollMode.Disabled) {\n this.horizontalBar.scrollTo(previousHorizontal + this.dragSpeed.x * seconds);\n } else {\n this.dragSpeed.x = 0;\n }\n if (this.verticalScrollMode !== ScrollMode.Disabled) {\n this.verticalBar.scrollTo(previousVertical + this.dragSpeed.y * seconds);\n } else {\n this.dragSpeed.y = 0;\n }\n if (this.horizontalBar.value === previousHorizontal && this.dragSpeed.x !== 0) {\n this.dragSpeed.x = 0;\n } else {\n this.dragSpeed.x = decelerate(this.dragSpeed.x, INERTIA_DECELERATION * seconds);\n }\n if (this.verticalBar.value === previousVertical && this.dragSpeed.y !== 0) {\n this.dragSpeed.y = 0;\n } else {\n this.dragSpeed.y = decelerate(this.dragSpeed.y, INERTIA_DECELERATION * seconds);\n }\n if (this.dragSpeed.x === 0 && this.dragSpeed.y === 0) {\n this.cancelTouchDrag();\n }\n }\n\n private cancelTouchDrag (): void {\n const notifyEnd = this.beyondDeadzone;\n\n this.touchIndex = null;\n this.touchDecelerating = false;\n this.beyondDeadzone = false;\n this.dragSpeed.set(0, 0);\n this.dragAccum.set(0, 0);\n this.dragFrom.set(0, 0);\n this.lastDragAccum.set(0, 0);\n this.motionSampleTime = 0;\n if (notifyEnd) {\n this.notifyContentScroll(false);\n this.scrollContainerEventEmitter.emit('scrollEnded');\n }\n }\n\n override fromData (data: spec.ScrollContainerData): void {\n super.fromData(data);\n if (data.horizontalScrollMode !== undefined) {\n this.horizontalScrollMode = data.horizontalScrollMode;\n }\n if (data.verticalScrollMode !== undefined) {\n this.verticalScrollMode = data.verticalScrollMode;\n }\n if (data.horizontalCustomStep !== undefined) {\n this.horizontalCustomStep = data.horizontalCustomStep;\n }\n if (data.verticalCustomStep !== undefined) {\n this.verticalCustomStep = data.verticalCustomStep;\n }\n if (data.scrollHorizontalByDefault !== undefined) {\n this.scrollHorizontalByDefault = data.scrollHorizontalByDefault;\n }\n if (data.deadzone !== undefined) {\n this.deadzone = data.deadzone;\n }\n if (data.followFocus !== undefined) {\n this.followFocus = data.followFocus;\n }\n if (data.hScroll !== undefined) {\n this.horizontalBar.setValueNoSignal(data.hScroll);\n }\n if (data.vScroll !== undefined) {\n this.verticalBar.setValueNoSignal(data.vScroll);\n }\n }\n}\n\nfunction shouldShowBar (mode: ScrollMode, contentSize: number, viewportSize: number): boolean {\n if (mode === ScrollMode.ShowAlways) {\n return true;\n }\n if (mode === ScrollMode.Auto || mode === ScrollMode.Reserve || mode === ScrollMode.MaximizeFirst) {\n return contentSize > viewportSize;\n }\n\n return false;\n}\n\nfunction decelerate (value: number, amount: number): number {\n if (Math.abs(value) <= amount) {\n return 0;\n }\n\n return value - Math.sign(value) * amount;\n}\n\nfunction assertScrollMode (value: ScrollMode): void {\n if (!Number.isInteger(value) || value < ScrollMode.Disabled || value > ScrollMode.MaximizeFirst) {\n throw new RangeError('Invalid ScrollContainer scroll mode.');\n }\n}\n","import {\n math,\n} from '@galacean/effects';\nimport {\n StyleBoxEmpty,\n StyleBoxFlat,\n ThemeItemType,\n ThemeRegistry,\n} from '../core/theme';\nimport type { StyleBox, ThemeItemDefinitions } from '../core/theme';\n\nconst palette = {\n text: new math.Color(0.92, 0.94, 0.98, 1),\n disabledText: new math.Color(0.55, 0.58, 0.64, 1),\n panel: new math.Color(0.10, 0.12, 0.16, 0.96),\n border: new math.Color(0.28, 0.32, 0.40, 1),\n normal: new math.Color(0.22, 0.25, 0.31, 1),\n hover: new math.Color(0.30, 0.34, 0.42, 1),\n pressed: new math.Color(0.16, 0.19, 0.25, 1),\n disabled: new math.Color(0.16, 0.18, 0.22, 0.75),\n accent: new math.Color(0.25, 0.58, 0.92, 1),\n accentHover: new math.Color(0.34, 0.67, 1, 1),\n track: new math.Color(0.12, 0.14, 0.18, 0.82),\n clear: new math.Color(0, 0, 0, 0),\n white: new math.Color(1, 1, 1, 1),\n};\n\nfunction flat (\n background: math.Color,\n border = palette.clear,\n borderWidth = 0,\n contentHorizontal = 0,\n contentVertical = 0,\n): StyleBoxFlat {\n const style = new StyleBoxFlat();\n\n style.setBackgroundColor(background);\n style.setBorderColor(border);\n style.setBorderWidths(borderWidth, borderWidth, borderWidth, borderWidth);\n style.setContentMargins(contentHorizontal, contentVertical, contentHorizontal, contentVertical);\n\n return style;\n}\n\nfunction empty (contentHorizontal = 0, contentVertical = 0): StyleBoxEmpty {\n const style = new StyleBoxEmpty();\n\n style.setContentMargins(contentHorizontal, contentVertical, contentHorizontal, contentVertical);\n\n return style;\n}\n\nfunction style (value: StyleBox): { type: ThemeItemType.StyleBox, defaultValue: StyleBox, affectsLayout: true } {\n return { type: ThemeItemType.StyleBox, defaultValue: value, affectsLayout: true };\n}\n\nfunction color (value: math.Color) {\n return { type: ThemeItemType.Color, defaultValue: value } as const;\n}\n\nfunction constant (value: number, affectsLayout = true) {\n return { type: ThemeItemType.Constant, defaultValue: value, affectsLayout } as const;\n}\n\nconst fontItems: ThemeItemDefinitions = {\n font: {\n type: ThemeItemType.Font,\n defaultValue: { family: 'sans-serif', weight: 'normal', style: 'normal' },\n affectsLayout: true,\n },\n fontSize: { type: ThemeItemType.FontSize, defaultValue: 14, affectsLayout: true },\n};\n\nThemeRegistry.registerType('Control', null, fontItems);\nThemeRegistry.registerType('Container', 'Control');\nThemeRegistry.registerType('Label', 'Control', {\n fontColor: color(palette.text),\n lineSpacing: constant(0),\n});\nThemeRegistry.registerType('BaseButton', 'Control');\nThemeRegistry.registerType('Button', 'BaseButton', {\n normal: style(flat(palette.normal, palette.border, 1, 8, 4)),\n hover: style(flat(palette.hover, palette.border, 1, 8, 4)),\n pressed: style(flat(palette.pressed, palette.border, 1, 8, 4)),\n hoverPressed: style(flat(palette.pressed, palette.accent, 1, 8, 4)),\n disabled: style(flat(palette.disabled, palette.border, 1, 8, 4)),\n focus: style(flat(palette.clear, palette.accentHover, 1)),\n fontColor: color(palette.text),\n fontFocusColor: color(palette.text),\n fontHoverColor: color(palette.text),\n fontPressedColor: color(palette.text),\n fontHoverPressedColor: color(palette.text),\n fontDisabledColor: color(palette.disabledText),\n iconTint: color(palette.white),\n iconFocusTint: color(palette.white),\n iconHoverTint: color(palette.white),\n iconPressedTint: color(palette.white),\n iconHoverPressedTint: color(palette.white),\n iconDisabledTint: color(palette.disabledText),\n icon: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n iconSeparation: constant(4),\n alignToLargestStyleBox: constant(0),\n});\nThemeRegistry.registerType('Checkbox', 'Button', {\n normal: style(empty(4, 4)),\n hover: style(empty(4, 4)),\n pressed: style(empty(4, 4)),\n hoverPressed: style(empty(4, 4)),\n disabled: style(empty(4, 4)),\n checked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n unchecked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n checkedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n uncheckedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n radioChecked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n radioUnchecked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n radioCheckedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n radioUncheckedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n checkedColor: color(palette.white),\n uncheckedColor: color(palette.white),\n checkedDisabledColor: color(palette.disabledText),\n markColor: color(palette.accent),\n markDisabledColor: color(palette.disabledText),\n markUncheckedColor: color(new math.Color(0.88, 0.88, 0.88, 0.2)),\n markUncheckedDisabledColor: color(new math.Color(0.5, 0.5, 0.5, 0.2)),\n markOutlineColor: color(palette.border),\n markSize: constant(16),\n markSeparation: constant(8),\n checkVOffset: constant(0),\n});\nThemeRegistry.registerType('CheckButton', 'Button', {\n normal: style(empty(6, 4)),\n hover: style(empty(6, 4)),\n pressed: style(empty(6, 4)),\n hoverPressed: style(empty(6, 4)),\n disabled: style(empty(6, 4)),\n checked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n unchecked: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n checkedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n uncheckedDisabled: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n buttonCheckedColor: color(palette.white),\n buttonUncheckedColor: color(palette.white),\n switchColor: color(palette.accent),\n switchDisabledColor: color(palette.disabledText),\n switchOffColor: color(palette.border),\n switchKnobColor: color(palette.text),\n switchWidth: constant(28),\n switchHeight: constant(14),\n switchSeparation: constant(6),\n checkVOffset: constant(0),\n});\nThemeRegistry.registerType('Panel', 'Control', {\n panel: style(flat(palette.panel, palette.border, 1)),\n});\nThemeRegistry.registerType('PanelContainer', 'Container', {\n panel: style(flat(palette.panel, palette.border, 1, 4, 4)),\n});\nThemeRegistry.registerType('Separator', 'Control', {\n separator: style(flat(palette.border)),\n separation: constant(1),\n});\nThemeRegistry.registerType('HSeparator', 'Separator');\nThemeRegistry.registerType('VSeparator', 'Separator');\nThemeRegistry.registerType('TextInput', 'Control', {\n normal: style(flat(palette.track, palette.border, 1, 6, 4)),\n readOnly: style(flat(palette.disabled, palette.border, 1, 6, 4)),\n focus: style(flat(palette.clear, palette.accentHover, 1)),\n fontColor: color(palette.text),\n fontReadOnlyColor: color(palette.disabledText),\n fontPlaceholderColor: color(palette.disabledText),\n selectionColor: color(new math.Color(palette.accent.r, palette.accent.g, palette.accent.b, 0.45)),\n caretColor: color(palette.text),\n caretWidth: constant(1, false),\n});\nThemeRegistry.registerType('LineEdit', 'TextInput');\nThemeRegistry.registerType('TextEdit', 'TextInput');\nThemeRegistry.registerType('Popup', 'PanelContainer', {\n panel: style(flat(palette.panel, palette.border, 1, 6, 6)),\n});\nThemeRegistry.registerType('PopupPanel', 'Popup');\nThemeRegistry.registerType('PopupMenu', 'Popup', {\n hover: style(flat(palette.hover)),\n separator: style(flat(palette.border)),\n fontColor: color(palette.text),\n fontDisabledColor: color(palette.disabledText),\n checkColor: color(palette.accent),\n itemHeight: constant(28),\n separatorHeight: constant(9),\n horizontalPadding: constant(8),\n iconWidth: constant(20),\n});\nThemeRegistry.registerType('MenuButton', 'Button');\nThemeRegistry.registerType('OptionButton', 'MenuButton', {\n arrow: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n arrowSize: constant(12),\n arrowMargin: constant(4),\n hSeparation: constant(4),\n modulateArrow: constant(1),\n});\nThemeRegistry.registerType('ColorPickerButton', 'Button', {\n swatchBorderColor: color(palette.border),\n});\nThemeRegistry.registerType('Range', 'Control');\nThemeRegistry.registerType('ProgressBar', 'Range', {\n background: style(flat(palette.track)),\n fill: style(flat(palette.accent)),\n fontColor: color(palette.text),\n});\nThemeRegistry.registerType('Slider', 'Range', {\n track: style(flat(palette.track)),\n fill: style(flat(palette.accent)),\n fillHighlight: style(flat(palette.accentHover)),\n grabber: style(flat(palette.normal, palette.border, 1)),\n grabberHighlight: style(flat(palette.accentHover, palette.border, 1)),\n grabberDisabled: style(flat(palette.disabled, palette.border, 1)),\n trackThickness: constant(4),\n grabberSize: constant(14),\n});\nThemeRegistry.registerType('HSlider', 'Slider');\nThemeRegistry.registerType('VSlider', 'Slider');\nThemeRegistry.registerType('ScrollBar', 'Range', {\n scroll: style(flat(palette.track)),\n scrollFocus: style(flat(palette.track, palette.accentHover, 1)),\n grabber: style(flat(palette.disabledText, palette.clear, 0, 4, 4)),\n grabberHighlight: style(flat(palette.accent, palette.clear, 0, 4, 4)),\n grabberPressed: style(flat(palette.accentHover, palette.clear, 0, 4, 4)),\n decrement: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n decrementHighlight: { type: ThemeItemType.Icon, defaultValue: null },\n decrementPressed: { type: ThemeItemType.Icon, defaultValue: null },\n increment: { type: ThemeItemType.Icon, defaultValue: null, affectsLayout: true },\n incrementHighlight: { type: ThemeItemType.Icon, defaultValue: null },\n incrementPressed: { type: ThemeItemType.Icon, defaultValue: null },\n paddingLeft: constant(0),\n paddingTop: constant(0),\n paddingRight: constant(0),\n paddingBottom: constant(0),\n});\nThemeRegistry.registerType('HScrollBar', 'ScrollBar', {\n scroll: style(flat(palette.track, palette.clear, 0, 0, 4)),\n});\nThemeRegistry.registerType('VScrollBar', 'ScrollBar', {\n scroll: style(flat(palette.track, palette.clear, 0, 4, 0)),\n});\nThemeRegistry.registerType('BoxContainer', 'Container', { separation: constant(0) });\nThemeRegistry.registerType('HBoxContainer', 'BoxContainer');\nThemeRegistry.registerType('VBoxContainer', 'BoxContainer');\nThemeRegistry.registerType('ColorPicker', 'VBoxContainer');\nThemeRegistry.registerType('GridContainer', 'Container', {\n horizontalSeparation: constant(0),\n verticalSeparation: constant(0),\n});\nThemeRegistry.registerType('MarginContainer', 'Container', {\n marginLeft: constant(0),\n marginTop: constant(0),\n marginRight: constant(0),\n marginBottom: constant(0),\n});\nThemeRegistry.registerType('CenterContainer', 'Container');\nThemeRegistry.registerType('AspectRatioContainer', 'Container');\nThemeRegistry.registerType('ScrollContainer', 'Container');\nThemeRegistry.registerType('ColorRect', 'Control');\nThemeRegistry.registerType('TextureRect', 'Control');\nThemeRegistry.registerType('NinePatchRect', 'Control');\n\n// Keep an explicit empty style available to themes that want to remove a layer.\nThemeRegistry.registerType('Control', null, {\n empty: style(StyleBoxEmpty.shared),\n});\n","import {\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine, TextMeasurement, spec } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport { AutowrapMode, HorizontalAlignment, TextOverflow, VerticalAlignment } from './enums';\n\ntype TextLine = {\n text: string,\n measurement: TextMeasurement,\n};\n\ntype TextLayout = {\n lines: TextLine[],\n lineHeight: number,\n width: number,\n height: number,\n};\n\n@effectsClass('Label')\nexport class Label extends Control {\n static override readonly themeType: string = 'Label';\n private _text = '';\n private _horizontalAlignment = HorizontalAlignment.Left;\n private _verticalAlignment = VerticalAlignment.Top;\n private _autowrapMode = AutowrapMode.Off;\n private _textOverflow = TextOverflow.Visible;\n private layoutDirty = true;\n private layoutWidth = Number.NaN;\n private layout: TextLayout | null = null;\n\n constructor (engine: Engine, text = '') {\n super(engine);\n\n this._text = text;\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n get text (): string {\n return this._text;\n }\n\n set text (value: string) {\n if (this._text !== value) {\n this._text = value;\n this.invalidateTextLayout();\n }\n }\n\n get horizontalAlignment (): HorizontalAlignment {\n return this._horizontalAlignment;\n }\n\n set horizontalAlignment (value: HorizontalAlignment) {\n if (this._horizontalAlignment !== value) {\n this._horizontalAlignment = value;\n this.layoutDirty = true;\n }\n }\n\n get verticalAlignment (): VerticalAlignment {\n return this._verticalAlignment;\n }\n\n set verticalAlignment (value: VerticalAlignment) {\n if (this._verticalAlignment !== value) {\n this._verticalAlignment = value;\n this.layoutDirty = true;\n }\n }\n\n get autowrapMode (): AutowrapMode {\n return this._autowrapMode;\n }\n\n set autowrapMode (value: AutowrapMode) {\n if (this._autowrapMode !== value) {\n this._autowrapMode = value;\n this.invalidateTextLayout();\n }\n }\n\n get textOverflow (): TextOverflow {\n return this._textOverflow;\n }\n\n set textOverflow (value: TextOverflow) {\n if (this._textOverflow !== value) {\n this._textOverflow = value;\n this.layoutDirty = true;\n this.updateMinimumSize();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n const natural = this.createNaturalLayout();\n\n if (this.autowrapMode === AutowrapMode.Off) {\n return new math.Vector2(\n this.textOverflow === TextOverflow.Visible ? natural.width : 0,\n natural.height,\n );\n }\n\n const width = this.getMinimumLineWidth();\n const paragraphCount = Math.max(1, this._text.split('\\n').length);\n\n return new math.Vector2(\n width,\n natural.lineHeight * paragraphCount + this.getThemeConstant('lineSpacing') * Math.max(0, paragraphCount - 1),\n );\n }\n\n override getDesiredSize (): math.Vector2 {\n const layout = this.createNaturalLayout();\n\n return new math.Vector2(layout.width, layout.height);\n }\n\n override draw (): void {\n const layout = this.getTextLayout(this.width);\n const clipped = this.textOverflow !== TextOverflow.Visible;\n const gap = this.getVerticalGap(layout);\n let y = this.getTextStartY(layout, gap);\n\n if (clipped) {\n this.engine.graphics.pushClipRect(0, 0, this.width, this.height);\n }\n try {\n for (let i = 0; i < layout.lines.length; i++) {\n const source = layout.lines[i];\n const line = this.textOverflow === TextOverflow.Ellipsis\n ? this.ellipsize(source, this.width)\n : source;\n const fill = this.horizontalAlignment === HorizontalAlignment.Fill && i < layout.lines.length - 1;\n\n if (fill && countFillSpaces(line.text) > 0 && line.measurement.width < this.width) {\n this.drawFilledLine(line, y);\n } else {\n this.drawThemedText(this.getTextStartX(line.measurement.width), y, line.text);\n }\n y += layout.lineHeight + this.getThemeConstant('lineSpacing') + gap;\n }\n } finally {\n if (clipped) {\n this.engine.graphics.popClipRect();\n }\n }\n }\n\n private invalidateTextLayout (): void {\n this.layoutDirty = true;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n\n protected override onThemeChanged (affectsLayout: boolean): void {\n if (affectsLayout) {this.layoutDirty = true;}\n super.onThemeChanged(affectsLayout);\n }\n\n private measure (text: string): TextMeasurement {\n const font = this.getThemeFont('font');\n\n return this.measureText(text, this.getThemeFontSize('fontSize'), font.family, font.weight, font.style);\n }\n\n private getTextLayout (width: number): TextLayout {\n const constrainedWidth = this.autowrapMode === AutowrapMode.Off ? Number.POSITIVE_INFINITY : Math.max(0, width);\n\n if (this.layoutDirty || this.layoutWidth !== constrainedWidth || !this.layout) {\n this.layout = this.createLayout(constrainedWidth);\n this.layoutWidth = constrainedWidth;\n this.layoutDirty = false;\n }\n\n return this.layout;\n }\n\n private createNaturalLayout (): TextLayout {\n return this.createLayout(Number.POSITIVE_INFINITY);\n }\n\n private createLayout (width: number): TextLayout {\n const lines: TextLine[] = [];\n const paragraphs = this.text.split('\\n');\n const emptyMeasurement = this.measure('');\n\n for (const paragraph of paragraphs) {\n if (this.autowrapMode === AutowrapMode.Off || !Number.isFinite(width)) {\n lines.push({ text: paragraph, measurement: this.measure(paragraph) });\n } else {\n lines.push(...this.wrapParagraph(paragraph, width));\n }\n }\n if (lines.length === 0) {\n lines.push({ text: '', measurement: emptyMeasurement });\n }\n\n const lineHeight = lines[0]?.measurement.lineHeight ?? emptyMeasurement.lineHeight;\n const maximumWidth = lines.reduce((value, line) => Math.max(value, line.measurement.width), 0);\n const height = lineHeight * lines.length + this.getThemeConstant('lineSpacing') * Math.max(0, lines.length - 1);\n\n return { lines, lineHeight, width: maximumWidth, height };\n }\n\n private wrapParagraph (paragraph: string, width: number): TextLine[] {\n const characters = Array.from(paragraph);\n\n if (characters.length === 0) {\n return [{ text: '', measurement: this.measure('') }];\n }\n if (width <= 0) {\n return characters.map(text => ({ text, measurement: this.measure(text) }));\n }\n\n const measurement = this.measure(paragraph);\n const lines: TextLine[] = [];\n let start = 0;\n\n while (start < characters.length) {\n let cursorWidth = 0;\n let breakEnd = -1;\n let breakNext = -1;\n let index = start;\n\n for (; index < characters.length; index++) {\n const character = characters[index];\n const advance = measurement.advances[index] ?? 0;\n\n if (cursorWidth + advance > width && index > start) {\n break;\n }\n cursorWidth += advance;\n if (isBreakSpace(character)) {\n breakEnd = index;\n breakNext = index + 1;\n } else if (isCJKLike(character)) {\n breakEnd = index + 1;\n breakNext = index + 1;\n }\n if (cursorWidth > width) {\n index++;\n\n break;\n }\n }\n\n if (index >= characters.length) {\n const text = characters.slice(start).join('');\n\n lines.push({ text, measurement: this.measure(text) });\n\n break;\n }\n\n let end: number;\n let next: number;\n\n if (this.autowrapMode !== AutowrapMode.Arbitrary && breakEnd > start) {\n end = breakEnd;\n next = breakNext;\n } else if (this.autowrapMode === AutowrapMode.Word) {\n end = this.findWordEnd(characters, index);\n next = end;\n } else {\n end = Math.max(start + 1, index);\n next = end;\n }\n\n const text = characters.slice(start, end).join('').replace(/[\\t \\u00a0]+$/, '');\n\n lines.push({ text, measurement: this.measure(text) });\n start = skipBreakSpaces(characters, Math.max(next, start + 1));\n }\n\n return lines;\n }\n\n private findWordEnd (characters: string[], start: number): number {\n for (let i = Math.max(1, start); i < characters.length; i++) {\n if (isBreakSpace(characters[i]) || isCJKLike(characters[i])) {\n return isBreakSpace(characters[i]) ? i : i + 1;\n }\n }\n\n return characters.length;\n }\n\n private getMinimumLineWidth (): number {\n const paragraphs = this.text.split('\\n');\n let width = 0;\n\n if (this.autowrapMode === AutowrapMode.Arbitrary || this.autowrapMode === AutowrapMode.WordSmart) {\n for (const paragraph of paragraphs) {\n for (const character of Array.from(paragraph)) {\n width = Math.max(width, this.measure(character).width);\n }\n }\n\n return width;\n }\n\n for (const paragraph of paragraphs) {\n let segment = '';\n\n for (const character of Array.from(paragraph)) {\n if (isBreakSpace(character) || isCJKLike(character)) {\n width = Math.max(width, this.measure(segment).width, this.measure(character).width);\n segment = '';\n } else {\n segment += character;\n }\n }\n width = Math.max(width, this.measure(segment).width);\n }\n\n return width;\n }\n\n private getTextStartX (lineWidth: number): number {\n if (this.horizontalAlignment === HorizontalAlignment.Center) {\n return (this.width - lineWidth) * 0.5;\n }\n if (this.horizontalAlignment === HorizontalAlignment.Right) {\n return this.width - lineWidth;\n }\n\n return 0;\n }\n\n private getTextStartY (layout: TextLayout, gap: number): number {\n const height = layout.height + gap * Math.max(0, layout.lines.length - 1);\n\n if (this.verticalAlignment === VerticalAlignment.Center) {\n return (this.height - height) * 0.5;\n }\n if (this.verticalAlignment === VerticalAlignment.Bottom) {\n return this.height - height;\n }\n\n return 0;\n }\n\n private getVerticalGap (layout: TextLayout): number {\n if (this.verticalAlignment !== VerticalAlignment.Fill || layout.lines.length < 2) {\n return 0;\n }\n\n return Math.max(0, (this.height - layout.height) / (layout.lines.length - 1));\n }\n\n private ellipsize (line: TextLine, width: number): TextLine {\n if (line.measurement.width <= width) {\n return line;\n }\n\n const ellipsis = '…';\n const ellipsisMeasurement = this.measure(ellipsis);\n\n if (ellipsisMeasurement.width > width) {\n return { text: '', measurement: this.measure('') };\n }\n\n const characters = Array.from(line.text);\n let used = ellipsisMeasurement.width;\n let count = 0;\n\n for (; count < characters.length; count++) {\n const advance = line.measurement.advances[count] ?? 0;\n\n if (used + advance > width) {\n break;\n }\n used += advance;\n }\n\n const text = characters.slice(0, count).join('') + ellipsis;\n\n return { text, measurement: this.measure(text) };\n }\n\n private drawFilledLine (line: TextLine, y: number): void {\n const characters = Array.from(line.text);\n const spaces = countFillSpaces(line.text);\n const extra = spaces > 0 ? (this.width - line.measurement.width) / spaces : 0;\n let x = 0;\n\n for (let i = 0; i < characters.length; i++) {\n const character = characters[i];\n\n this.drawThemedText(x, y, character);\n x += line.measurement.advances[i] ?? 0;\n if (isBreakSpace(character)) {\n x += extra;\n }\n }\n }\n\n private drawThemedText (x: number, y: number, text: string): void {\n const font = this.getThemeFont('font');\n\n this.drawText(\n x,\n y,\n text,\n this.getThemeFontSize('fontSize'),\n this.getThemeColor('fontColor'),\n font.family,\n font.weight,\n font.style,\n );\n }\n\n override fromData (data: spec.LabelData): void {\n super.fromData(data);\n if (data.text !== undefined) {\n this.text = data.text;\n }\n if (data.horizontalAlignment !== undefined) {\n this.horizontalAlignment = data.horizontalAlignment;\n }\n if (data.verticalAlignment !== undefined) {\n this.verticalAlignment = data.verticalAlignment;\n }\n if (data.autowrapMode !== undefined) {\n this.autowrapMode = data.autowrapMode;\n }\n if (data.textOverflow !== undefined) {\n this.textOverflow = data.textOverflow;\n }\n }\n}\n\nfunction isBreakSpace (character: string): boolean {\n return character === ' ' || character === '\\t' || character === '\\u00a0';\n}\n\nfunction isCJKLike (character: string): boolean {\n const codePoint = character.codePointAt(0) ?? 0;\n\n return (codePoint >= 0x3400 && codePoint <= 0x4dbf)\n || (codePoint >= 0x4e00 && codePoint <= 0x9fff)\n || (codePoint >= 0xf900 && codePoint <= 0xfaff)\n || (codePoint >= 0x20000 && codePoint <= 0x2fa1f)\n || (codePoint >= 0x3040 && codePoint <= 0x30ff)\n || (codePoint >= 0xac00 && codePoint <= 0xd7af);\n}\n\nfunction skipBreakSpaces (characters: string[], start: number): number {\n let index = start;\n\n while (index < characters.length && isBreakSpace(characters[index])) {\n index++;\n }\n\n return index;\n}\n\nfunction countFillSpaces (text: string): number {\n return Array.from(text).reduce((count, character) => count + (isBreakSpace(character) ? 1 : 0), 0);\n}\n","import {\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine, Texture, TextureRegion, spec } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport { TextureExpandMode, TextureStretchMode } from './enums';\n\nconst FULL_REGION: TextureRegion = { u0: 0, v0: 0, u1: 1, v1: 1 };\n\n@effectsClass('TextureRect')\nexport class TextureRect extends Control {\n static override readonly themeType: string = 'TextureRect';\n private _texture: Texture | null = null;\n private _expandMode = TextureExpandMode.KeepSize;\n private _stretchMode = TextureStretchMode.Scale;\n\n flipH = false;\n flipV = false;\n tint = new math.Color(1, 1, 1, 1);\n\n constructor (engine: Engine, texture: Texture | null = null) {\n super(engine);\n this._texture = texture;\n this.mouseFilter = MouseFilter.Ignore;\n this.on('sizeChanged', () => this.controlSizeChanged());\n }\n\n get texture (): Texture | null {\n return this._texture;\n }\n\n set texture (value: Texture | null) {\n if (this._texture !== value) {\n this._texture = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n get expandMode (): TextureExpandMode {\n return this._expandMode;\n }\n\n set expandMode (value: TextureExpandMode) {\n if (this._expandMode !== value) {\n this._expandMode = value;\n this.updateMinimumSize();\n }\n }\n\n get stretchMode (): TextureStretchMode {\n return this._stretchMode;\n }\n\n set stretchMode (value: TextureStretchMode) {\n this._stretchMode = value;\n }\n\n override getMinimumSize (): math.Vector2 {\n const width = this.texture?.width ?? 0;\n const height = this.texture?.height ?? 0;\n\n switch (this.expandMode) {\n case TextureExpandMode.KeepSize:\n return new math.Vector2(width, height);\n case TextureExpandMode.IgnoreSize:\n return new math.Vector2();\n case TextureExpandMode.FitWidth:\n return new math.Vector2(height, 0);\n case TextureExpandMode.FitWidthProportional:\n return new math.Vector2(height > 0 ? this.height * width / height : 0, 0);\n case TextureExpandMode.FitHeight:\n return new math.Vector2(0, width);\n case TextureExpandMode.FitHeightProportional:\n return new math.Vector2(0, width > 0 ? this.width * height / width : 0);\n default:\n return new math.Vector2();\n }\n }\n\n override getDesiredSize (): math.Vector2 {\n return new math.Vector2(this.texture?.width ?? 0, this.texture?.height ?? 0);\n }\n\n override draw (): void {\n const texture = this.texture;\n\n if (!texture || texture.width <= 0 || texture.height <= 0 || this.width <= 0 || this.height <= 0) {\n return;\n }\n\n switch (this.stretchMode) {\n case TextureStretchMode.Scale:\n this.drawRegion(0, 0, this.width, this.height, FULL_REGION);\n\n break;\n case TextureStretchMode.Tile:\n this.drawTiled(texture.width, texture.height);\n\n break;\n case TextureStretchMode.Keep:\n this.drawRegion(0, 0, texture.width, texture.height, FULL_REGION);\n\n break;\n case TextureStretchMode.KeepCentered:\n this.drawRegion(\n (this.width - texture.width) * 0.5, (this.height - texture.height) * 0.5,\n texture.width, texture.height, FULL_REGION,\n );\n\n break;\n case TextureStretchMode.KeepAspect:\n this.drawAspect(false);\n\n break;\n case TextureStretchMode.KeepAspectCentered:\n this.drawAspect(true);\n\n break;\n case TextureStretchMode.KeepAspectCovered:\n this.drawCovered();\n\n break;\n }\n }\n\n private drawAspect (centered: boolean): void {\n const texture = this.texture;\n\n if (!texture) {\n return;\n }\n const scale = Math.min(this.width / texture.width, this.height / texture.height);\n const width = texture.width * scale;\n const height = texture.height * scale;\n const x = centered ? (this.width - width) * 0.5 : 0;\n const y = centered ? (this.height - height) * 0.5 : 0;\n\n this.drawRegion(x, y, width, height, FULL_REGION);\n }\n\n private drawCovered (): void {\n const texture = this.texture;\n\n if (!texture) {\n return;\n }\n const sourceRatio = texture.width / texture.height;\n const destinationRatio = this.width / this.height;\n let region = FULL_REGION;\n\n if (sourceRatio > destinationRatio) {\n const visible = destinationRatio / sourceRatio;\n const margin = (1 - visible) * 0.5;\n\n region = { u0: margin, v0: 0, u1: 1 - margin, v1: 1 };\n } else if (sourceRatio < destinationRatio) {\n const visible = sourceRatio / destinationRatio;\n const margin = (1 - visible) * 0.5;\n\n region = { u0: 0, v0: margin, u1: 1, v1: 1 - margin };\n }\n this.drawRegion(0, 0, this.width, this.height, region);\n }\n\n private drawTiled (tileWidth: number, tileHeight: number): void {\n for (let y = 0; y < this.height; y += tileHeight) {\n const height = Math.min(tileHeight, this.height - y);\n const verticalRatio = height / tileHeight;\n\n for (let x = 0; x < this.width; x += tileWidth) {\n const width = Math.min(tileWidth, this.width - x);\n const horizontalRatio = width / tileWidth;\n\n this.drawRegion(x, y, width, height, {\n u0: 0,\n v0: 1 - verticalRatio,\n u1: horizontalRatio,\n v1: 1,\n });\n }\n }\n }\n\n private drawRegion (x: number, y: number, width: number, height: number, region: TextureRegion): void {\n const texture = this.texture;\n\n if (!texture || width <= 0 || height <= 0) {\n return;\n }\n this.drawTexture(x, y, width, height, texture, {\n u0: this.flipH ? region.u1 : region.u0,\n v0: this.flipV ? region.v1 : region.v0,\n u1: this.flipH ? region.u0 : region.u1,\n v1: this.flipV ? region.v0 : region.v1,\n }, this.tint);\n }\n\n private controlSizeChanged (): void {\n if (this.expandMode === TextureExpandMode.FitWidthProportional\n || this.expandMode === TextureExpandMode.FitHeightProportional) {\n this.updateMinimumSize();\n }\n }\n\n override fromData (data: spec.TextureRectData): void {\n super.fromData(data);\n if (data.texture !== undefined) {\n this.texture = data.texture ? this.engine.findObject<Texture>(data.texture) : null;\n }\n if (data.expandMode !== undefined) {\n this.expandMode = data.expandMode;\n }\n if (data.stretchMode !== undefined) {\n this.stretchMode = data.stretchMode;\n }\n if (data.flipH !== undefined) {\n this.flipH = data.flipH;\n }\n if (data.flipV !== undefined) {\n this.flipV = data.flipV;\n }\n if (data.tint !== undefined) {\n this.tint.copyFrom(data.tint);\n }\n }\n}\n","import {\n EventEmitter,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n Texture,\n spec,\n} from '@galacean/effects';\nimport { Control } from '../core/control';\nimport type { ControlEvent, Rect } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport { AxisStretchMode, Side } from './enums';\n\nexport type NinePatchRectEvent = ControlEvent & {\n textureChanged: [texture: Texture | null],\n};\n\n@effectsClass('NinePatchRect')\nexport class NinePatchRect extends Control {\n static override readonly themeType: string = 'NinePatchRect';\n private readonly ninePatchEventEmitter = new EventEmitter<NinePatchRectEvent>();\n private readonly patchMargins = [0, 0, 0, 0];\n private _texture: Texture | null = null;\n private _regionRect: Rect;\n\n drawCenter = true;\n horizontalAxisStretchMode = AxisStretchMode.Stretch;\n verticalAxisStretchMode = AxisStretchMode.Stretch;\n tint = new math.Color(1, 1, 1, 1);\n\n constructor (engine: Engine, texture: Texture | null = null) {\n super(engine);\n this._texture = texture;\n this._regionRect = {\n position: new math.Vector2(),\n size: new math.Vector2(),\n };\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n get texture (): Texture | null {\n return this._texture;\n }\n\n set texture (value: Texture | null) {\n if (this._texture !== value) {\n this._texture = value;\n this.updateDesiredSize();\n this.ninePatchEventEmitter.emit('textureChanged', value);\n }\n }\n\n get regionRect (): Rect {\n return {\n position: this._regionRect.position.clone(),\n size: this._regionRect.size.clone(),\n };\n }\n\n set regionRect (value: Rect) {\n this.setRegionRect(value.position.x, value.position.y, value.size.x, value.size.y);\n }\n\n override on<E extends keyof NinePatchRectEvent> (\n eventName: E,\n listener: EventEmitterListener<NinePatchRectEvent[E]>,\n ): void {\n if (eventName === 'textureChanged') {\n this.ninePatchEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof NinePatchRectEvent> (\n eventName: E,\n listener: EventEmitterListener<NinePatchRectEvent[E]>,\n ): void {\n if (eventName === 'textureChanged') {\n this.ninePatchEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n setRegionRect (x: number, y: number, width: number, height: number): void {\n if (![x, y, width, height].every(Number.isFinite) || width < 0 || height < 0) {\n throw new RangeError('NinePatchRect region must be finite and non-negative.');\n }\n this._regionRect.position.set(x, y);\n this._regionRect.size.set(width, height);\n this.updateDesiredSize();\n }\n\n setPatchMargin (side: Side, value: number): void {\n if (!Number.isFinite(value) || value < 0) {\n throw new RangeError('NinePatchRect patch margin must be finite and non-negative.');\n }\n if (this.patchMargins[side] !== value) {\n this.patchMargins[side] = value;\n this.updateMinimumSize();\n }\n }\n\n getPatchMargin (side: Side): number {\n return this.patchMargins[side] ?? 0;\n }\n\n override getMinimumSize (): math.Vector2 {\n return new math.Vector2(\n this.getPatchMargin(Side.Left) + this.getPatchMargin(Side.Right),\n this.getPatchMargin(Side.Top) + this.getPatchMargin(Side.Bottom),\n );\n }\n\n override getDesiredSize (): math.Vector2 {\n const source = this.getSourceRect();\n\n return new math.Vector2(source.size.x, source.size.y);\n }\n\n override draw (): void {\n const texture = this.texture;\n\n if (!texture || this.width <= 0 || this.height <= 0) {\n return;\n }\n\n const source = this.getSourceRect();\n\n this.drawNinePatch(0, 0, this.width, this.height, texture, {\n sourceX: source.position.x,\n sourceY: source.position.y,\n sourceWidth: source.size.x,\n sourceHeight: source.size.y,\n marginLeft: this.getPatchMargin(Side.Left),\n marginTop: this.getPatchMargin(Side.Top),\n marginRight: this.getPatchMargin(Side.Right),\n marginBottom: this.getPatchMargin(Side.Bottom),\n horizontalMode: this.horizontalAxisStretchMode,\n verticalMode: this.verticalAxisStretchMode,\n drawCenter: this.drawCenter,\n }, this.tint);\n }\n\n private getSourceRect (): Rect {\n const texture = this.texture;\n\n if (!texture) {\n return { position: new math.Vector2(), size: new math.Vector2() };\n }\n if (this._regionRect.size.x > 0 && this._regionRect.size.y > 0) {\n return this.regionRect;\n }\n\n return {\n position: new math.Vector2(),\n size: new math.Vector2(texture.width, texture.height),\n };\n }\n\n override fromData (data: spec.NinePatchRectData): void {\n super.fromData(data);\n if (data.texture !== undefined) {\n this.texture = data.texture ? this.engine.findObject<Texture>(data.texture) : null;\n }\n if (data.regionRect !== undefined) {\n this.setRegionRect(\n data.regionRect.position[0], data.regionRect.position[1],\n data.regionRect.size[0], data.regionRect.size[1],\n );\n }\n if (data.patchMarginLeft !== undefined) {\n this.setPatchMargin(Side.Left, data.patchMarginLeft);\n }\n if (data.patchMarginTop !== undefined) {\n this.setPatchMargin(Side.Top, data.patchMarginTop);\n }\n if (data.patchMarginRight !== undefined) {\n this.setPatchMargin(Side.Right, data.patchMarginRight);\n }\n if (data.patchMarginBottom !== undefined) {\n this.setPatchMargin(Side.Bottom, data.patchMarginBottom);\n }\n if (data.drawCenter !== undefined) {\n this.drawCenter = data.drawCenter;\n }\n if (data.horizontalAxisStretchMode !== undefined) {\n this.horizontalAxisStretchMode = data.horizontalAxisStretchMode;\n }\n if (data.verticalAxisStretchMode !== undefined) {\n this.verticalAxisStretchMode = data.verticalAxisStretchMode;\n }\n if (data.tint !== undefined) {\n this.tint.copyFrom(data.tint);\n }\n }\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { Engine, spec } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\n\n@effectsClass('ColorRect')\nexport class ColorRect extends Control {\n static override readonly themeType: string = 'ColorRect';\n color = new math.Color(1, 1, 1, 1);\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n override draw (): void {\n this.fillRect(0, 0, this.width, this.height, this.color);\n }\n\n override fromData (data: spec.ColorRectData): void {\n super.fromData(data);\n if (data.color !== undefined) {\n this.color.copyFrom(data.color);\n }\n }\n}\n","import { effectsClass } from '@galacean/effects';\nimport type { Engine, math } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport { MouseFilter } from '../core/enums';\n\n@effectsClass('Panel')\nexport class Panel extends Control {\n static override readonly themeType: string = 'Panel';\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Stop;\n }\n\n override draw (): void {\n this.drawStyleBox(this.getThemeStyleBox('panel'), 0, 0, this.width, this.height);\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.getThemeStyleBox('panel').getMinimumSize();\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.getMinimumSize();\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n MouseButtonMask,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n InputEventScreenDrag,\n InputEventScreenTouch,\n spec,\n} from '@galacean/effects';\nimport { Control } from '../core/control';\nimport type { ControlEvent, RootControl } from '../core/control';\nimport { FocusMode, MouseFilter } from '../core/enums';\nimport { ButtonActionMode, ButtonDrawMode } from './enums';\n\nexport type BaseButtonEvent = ControlEvent & {\n buttonDown: [],\n buttonUp: [],\n pressed: [],\n toggled: [pressed: boolean],\n};\n\nexport type ButtonGroupEvent = {\n pressed: [button: BaseButton],\n};\n\nexport class ButtonGroup {\n /** @internal */\n static updateButton (\n button: BaseButton,\n previous: ButtonGroup | null,\n next: ButtonGroup | null,\n ): void {\n previous?.buttons.delete(button);\n if (next) {\n next.buttons.add(button);\n if (button.buttonPressed) {\n for (const peer of next.buttons) {\n if (peer !== button) {\n peer.setPressedFromGroup(false, false);\n }\n }\n }\n }\n }\n\n private readonly buttons = new Set<BaseButton>();\n private readonly eventEmitter = new EventEmitter<ButtonGroupEvent>();\n\n allowUnpress = false;\n\n on<E extends keyof ButtonGroupEvent> (\n eventName: E,\n listener: EventEmitterListener<ButtonGroupEvent[E]>,\n ): void {\n this.eventEmitter.on(eventName, listener);\n }\n\n off<E extends keyof ButtonGroupEvent> (\n eventName: E,\n listener: EventEmitterListener<ButtonGroupEvent[E]>,\n ): void {\n this.eventEmitter.off(eventName, listener);\n }\n\n getPressedButton (): BaseButton | null {\n for (const button of this.buttons) {\n if (button.buttonPressed) {\n return button;\n }\n }\n\n return null;\n }\n\n getButtons (): BaseButton[] {\n return Array.from(this.buttons);\n }\n\n select (button: BaseButton, signal: boolean, emitPressed = false): boolean {\n if (!this.buttons.has(button)) {\n return false;\n }\n if (button.buttonPressed && !this.allowUnpress) {\n if (emitPressed) {\n this.eventEmitter.emit('pressed', button);\n }\n\n return false;\n }\n\n const next = !button.buttonPressed;\n\n if (next) {\n for (const peer of this.buttons) {\n if (peer !== button) {\n peer.setPressedFromGroup(false, signal);\n }\n }\n }\n button.setPressedFromGroup(next, signal);\n if (emitPressed) {\n this.eventEmitter.emit('pressed', button);\n }\n\n return true;\n }\n}\n\nexport class BaseButton extends Control {\n static override readonly themeType: string = 'BaseButton';\n private readonly buttonEventEmitter = new EventEmitter<BaseButtonEvent>();\n private _disabled = false;\n private _toggleMode = false;\n private _buttonPressed = false;\n private _buttonMask = MouseButtonMask.Left;\n private _buttonGroup: ButtonGroup | null = null;\n private hovered = false;\n private pressing = false;\n private pressInside = false;\n private mousePressing = false;\n private keyboardPressing = false;\n private touchIndex = -1;\n private readonly controlStateChanged = () => {\n if (!this.visible || !this.enabled) {\n this.cancelPress();\n }\n };\n\n actionMode = ButtonActionMode.Release;\n keepPressedOutside = false;\n\n constructor (engine: Engine) {\n super(engine);\n this.focusMode = FocusMode.All;\n this.mouseFilter = MouseFilter.Stop;\n this.on('visibilityChanged', this.controlStateChanged);\n this.on('enabledChanged', this.controlStateChanged);\n }\n\n get disabled (): boolean {\n return this._disabled;\n }\n\n set disabled (value: boolean) {\n if (this._disabled !== value) {\n this._disabled = value;\n if (value) {\n this.cancelPress();\n }\n this.root?.controlStateChanged(this);\n }\n }\n\n get toggleMode (): boolean {\n return this._toggleMode;\n }\n\n set toggleMode (value: boolean) {\n this._toggleMode = value;\n }\n\n get buttonPressed (): boolean {\n return this._buttonPressed;\n }\n\n set buttonPressed (value: boolean) {\n this.setPressed(value, true);\n }\n\n get buttonMask (): MouseButtonMask {\n return this._buttonMask;\n }\n\n set buttonMask (value: MouseButtonMask) {\n this._buttonMask = value;\n }\n\n get buttonGroup (): ButtonGroup | null {\n return this._buttonGroup;\n }\n\n set buttonGroup (value: ButtonGroup | null) {\n if (this._buttonGroup !== value) {\n const previous = this._buttonGroup;\n\n this._buttonGroup = value;\n ButtonGroup.updateButton(this, previous, value);\n }\n }\n\n override on<E extends keyof BaseButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<BaseButtonEvent[E]>,\n ): void {\n if (eventName === 'buttonDown' || eventName === 'buttonUp'\n || eventName === 'pressed' || eventName === 'toggled') {\n this.buttonEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof BaseButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<BaseButtonEvent[E]>,\n ): void {\n if (eventName === 'buttonDown' || eventName === 'buttonUp'\n || eventName === 'pressed' || eventName === 'toggled') {\n this.buttonEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n setPressedNoSignal (value: boolean): void {\n this.setPressed(value, false);\n }\n\n isHovered (): boolean {\n return this.hovered;\n }\n\n isPressing (): boolean {\n return this.pressing && (this.pressInside || this.keepPressedOutside);\n }\n\n getDrawMode (): ButtonDrawMode {\n if (this.disabled || !this.enabledInHierarchy) {\n return ButtonDrawMode.Disabled;\n }\n if (!this.pressing && this.hovered) {\n return this.buttonPressed ? ButtonDrawMode.HoverPressed : ButtonDrawMode.Hover;\n }\n\n let pressed = this.buttonPressed;\n\n if (this.pressing) {\n pressed = this.pressInside || this.keepPressedOutside;\n if (this.buttonPressed) {\n pressed = !pressed;\n }\n }\n\n return pressed ? ButtonDrawMode.Pressed : ButtonDrawMode.Normal;\n }\n\n override getEffectiveMouseFilter (): MouseFilter {\n return this.disabled ? MouseFilter.Ignore : super.getEffectiveMouseFilter();\n }\n\n override getFocusModeWithOverride (): FocusMode {\n return this.disabled ? FocusMode.None : super.getFocusModeWithOverride();\n }\n\n override onMouseEnter (): void {\n this.hovered = true;\n if (this.mousePressing) {\n this.pressInside = true;\n }\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n this.hovered = this.hasPoint(event.position);\n if (this.mousePressing) {\n this.pressInside = this.hovered;\n }\n }\n\n override onMouseLeave (): void {\n this.hovered = false;\n if (this.mousePressing) {\n this.pressInside = false;\n }\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (this.disabled || !hasButton(this.buttonMask, event.buttonIndex)) {\n return;\n }\n this.mousePressing = true;\n this.beginPress(true);\n event.accept();\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.mousePressing || !hasButton(this.buttonMask, event.buttonIndex)) {\n return;\n }\n const activate = !event.canceled && (this.keepPressedOutside || this.hasPoint(event.position));\n\n this.mousePressing = false;\n this.finishPress(activate);\n event.accept();\n }\n\n override onTouchDown (event: InputEventScreenTouch): void {\n if (this.disabled || this.touchIndex !== -1) {\n return;\n }\n this.touchIndex = event.index;\n this.beginPress(true);\n event.accept();\n }\n\n override onTouchMove (event: InputEventScreenDrag): void {\n if (event.index === this.touchIndex) {\n this.pressInside = this.hasPoint(event.position);\n event.accept();\n }\n }\n\n override onTouchUp (event: InputEventScreenTouch): void {\n if (event.index !== this.touchIndex) {\n return;\n }\n const activate = !event.canceled && (this.keepPressedOutside || this.hasPoint(event.position));\n\n this.touchIndex = -1;\n this.finishPress(activate);\n event.accept();\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (this.disabled || event.echo || this.keyboardPressing || !isActivationKey(event.keycode)) {\n return;\n }\n this.keyboardPressing = true;\n this.beginPress(true);\n event.accept();\n }\n\n override onKeyUp (event: InputEventKey): void {\n if (!this.keyboardPressing || !isActivationKey(event.keycode)) {\n return;\n }\n this.keyboardPressing = false;\n this.finishPress(true);\n event.accept();\n }\n\n override onLostFocus (): void {\n this.cancelPress();\n }\n\n override onScrollBegin (): void {\n this.cancelPress();\n }\n\n override onDestroy (): void {\n this.off('visibilityChanged', this.controlStateChanged);\n this.off('enabledChanged', this.controlStateChanged);\n this.buttonGroup = null;\n this.cancelPress();\n }\n\n setPressedFromGroup (value: boolean, signal: boolean): void {\n this.setPressedDirect(value, signal);\n }\n\n protected override onRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {\n if (!nextRoot) {\n this.cancelPress();\n }\n }\n\n private setPressed (value: boolean, signal: boolean): void {\n if (this.buttonGroup && value) {\n if (!this.buttonPressed) {\n this.buttonGroup.select(this, signal);\n }\n\n return;\n }\n this.setPressedDirect(value, signal);\n }\n\n private setPressedDirect (value: boolean, signal: boolean): void {\n if (this._buttonPressed !== value) {\n this._buttonPressed = value;\n if (signal) {\n this.buttonEventEmitter.emit('toggled', value);\n }\n }\n }\n\n private beginPress (inside: boolean): void {\n if (this.pressing) {\n return;\n }\n this.pressing = true;\n this.pressInside = inside;\n this.buttonEventEmitter.emit('buttonDown');\n if (this.actionMode === ButtonActionMode.Press) {\n this.activate();\n }\n }\n\n private finishPress (activate: boolean): void {\n if (!this.pressing) {\n return;\n }\n this.pressing = false;\n this.pressInside = false;\n this.buttonEventEmitter.emit('buttonUp');\n if (activate && this.actionMode === ButtonActionMode.Release) {\n this.activate();\n }\n }\n\n private cancelPress (): void {\n const wasPressing = this.pressing;\n\n this.pressing = false;\n this.pressInside = false;\n this.mousePressing = false;\n this.keyboardPressing = false;\n this.touchIndex = -1;\n if (wasPressing) {\n this.buttonEventEmitter.emit('buttonUp');\n }\n }\n\n private activate (): void {\n if (this.toggleMode) {\n if (this.buttonGroup) {\n if (!this.buttonGroup.select(this, true, true) && !this.buttonPressed) {\n return;\n }\n } else {\n this.setPressedDirect(!this.buttonPressed, true);\n }\n }\n this.buttonEventEmitter.emit('pressed');\n }\n\n override fromData (data: spec.BaseButtonData): void {\n super.fromData(data);\n if (data.disabled !== undefined) {\n this.disabled = data.disabled;\n }\n if (data.toggleMode !== undefined) {\n this.toggleMode = data.toggleMode;\n }\n if (data.buttonPressed !== undefined) {\n this.setPressedNoSignal(data.buttonPressed);\n }\n if (data.buttonMask !== undefined) {\n this.buttonMask = data.buttonMask;\n }\n if (data.actionMode !== undefined) {\n this.actionMode = data.actionMode;\n }\n if (data.keepPressedOutside !== undefined) {\n this.keepPressedOutside = data.keepPressedOutside;\n }\n }\n}\n\nfunction hasButton (mask: MouseButtonMask, button: MouseButton): boolean {\n switch (button) {\n case MouseButton.Left:\n return (mask & MouseButtonMask.Left) !== 0;\n case MouseButton.Right:\n return (mask & MouseButtonMask.Right) !== 0;\n case MouseButton.Middle:\n return (mask & MouseButtonMask.Middle) !== 0;\n case MouseButton.Xbutton1:\n return (mask & MouseButtonMask.Xbutton1) !== 0;\n case MouseButton.Xbutton2:\n return (mask & MouseButtonMask.Xbutton2) !== 0;\n default:\n return false;\n }\n}\n\nfunction isActivationKey (keycode: string): boolean {\n return keycode === 'Enter' || keycode === 'Space' || keycode === ' ';\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { Engine, Texture, spec } from '@galacean/effects';\nimport { BaseButton } from './base-button';\nimport { ButtonDrawMode, HorizontalAlignment, VerticalAlignment } from './enums';\n\nexport type ContentInsets = {\n left: number,\n top: number,\n right: number,\n bottom: number,\n};\n\n@effectsClass('Button')\nexport class Button extends BaseButton {\n static override readonly themeType: string = 'Button';\n private _text = '';\n private _icon: Texture | null | undefined;\n\n flat = false;\n clipText = false;\n expandIcon = false;\n textAlignment = HorizontalAlignment.Center;\n iconAlignment = HorizontalAlignment.Left;\n iconVerticalAlignment = VerticalAlignment.Center;\n\n constructor (engine: Engine, text = '') {\n super(engine);\n\n this._text = text;\n }\n\n get text (): string {\n return this._text;\n }\n\n set text (value: string) {\n if (this._text !== value) {\n this._text = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n get icon (): Texture | null {\n return this._icon === undefined ? this.getThemeIcon('icon') : this._icon;\n }\n\n set icon (value: Texture | null) {\n if (this._icon !== value) {\n this._icon = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n return this.measureButton();\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.measureButton();\n }\n\n override draw (): void {\n const mode = this.getDrawMode();\n const styleBox = this.getThemeStyleBox(this.getStyleBoxName(mode));\n\n if (!this.flat) {\n this.drawStyleBox(styleBox, 0, 0, this.width, this.height);\n }\n if (this.hasFocus(true)) {\n this.drawStyleBox(this.getThemeStyleBox('focus'), 0, 0, this.width, this.height);\n }\n this.drawDecoration(mode);\n this.drawContent(mode, this.getContentInsets());\n }\n\n protected getContentInsets (): ContentInsets {\n return this.getBaseContentInsets();\n }\n\n protected getNormalContentInsets (): ContentInsets {\n return this.getThemeStyleBox('normal').getContentMargins();\n }\n\n protected drawDecoration (mode: ButtonDrawMode): void {}\n\n private measureButton (): math.Vector2 {\n const font = this.getThemeFont('font');\n const text = this.measureText(\n this.text, this.getThemeFontSize('fontSize'), font.family, font.weight, font.style,\n );\n const hasText = this.text.length > 0;\n const iconWidth = this.expandIcon ? 0 : this.icon?.width ?? 0;\n const iconHeight = this.expandIcon ? 0 : this.icon?.height ?? 0;\n const textWidth = this.clipText ? 0 : text.width;\n const textHeight = hasText ? text.lineHeight : 0;\n const separation = hasText && iconWidth > 0 && this.iconAlignment !== HorizontalAlignment.Center\n ? Math.max(0, this.getThemeConstant('iconSeparation'))\n : 0;\n const insets = this.getContentInsets();\n const contentWidth = this.iconAlignment === HorizontalAlignment.Center\n ? Math.max(iconWidth, textWidth)\n : iconWidth + separation + textWidth;\n const contentHeight = this.iconVerticalAlignment === VerticalAlignment.Center\n ? Math.max(iconHeight, textHeight)\n : iconHeight + textHeight;\n\n return new math.Vector2(\n insets.left + contentWidth + insets.right,\n insets.top + contentHeight + insets.bottom,\n );\n }\n\n private getStyleBoxName (mode: ButtonDrawMode): string {\n switch (mode) {\n case ButtonDrawMode.Disabled: return 'disabled';\n case ButtonDrawMode.HoverPressed: return 'hoverPressed';\n case ButtonDrawMode.Pressed: return 'pressed';\n case ButtonDrawMode.Hover: return 'hover';\n default: return 'normal';\n }\n }\n\n private drawContent (mode: ButtonDrawMode, insets: ContentInsets): void {\n const left = insets.left;\n const top = insets.top;\n const width = Math.max(0, this.width - insets.left - insets.right);\n const height = Math.max(0, this.height - insets.top - insets.bottom);\n const hasText = this.text.length > 0;\n const separation = this.icon && hasText && this.iconAlignment !== HorizontalAlignment.Center\n ? Math.max(0, this.getThemeConstant('iconSeparation'))\n : 0;\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const naturalText = this.measureText(this.text, fontSize, font.family, font.weight, font.style);\n const iconWidth = !this.clipText && hasText && this.iconAlignment !== HorizontalAlignment.Center\n ? Math.max(0, width - naturalText.width - separation)\n : width;\n const iconHeight = hasText && this.iconVerticalAlignment !== VerticalAlignment.Center\n ? Math.max(0, height - naturalText.lineHeight)\n : height;\n const iconSize = this.getIconSize(iconWidth, iconHeight);\n const reservedIconWidth = this.icon && this.iconAlignment !== HorizontalAlignment.Center\n ? iconSize.x + separation\n : 0;\n const textWidth = Math.max(0, width - reservedIconWidth);\n const sourceText = this.clipText ? this.ellipsizeText(this.text, textWidth) : this.text;\n const text = this.measureText(sourceText, fontSize, font.family, font.weight, font.style);\n let iconX = left;\n let textAreaX = left + reservedIconWidth;\n\n if (this.icon && this.iconAlignment === HorizontalAlignment.Right) {\n iconX = left + width - iconSize.x;\n textAreaX = left;\n } else if (this.icon && this.iconAlignment === HorizontalAlignment.Center) {\n iconX = left + (width - iconSize.x) * 0.5;\n textAreaX = left;\n }\n\n const textX = this.getAlignedX(textAreaX, textWidth, text.width, this.textAlignment);\n const textAreaY = this.icon && this.iconVerticalAlignment === VerticalAlignment.Top\n ? top + iconSize.y\n : top;\n const textHeight = Math.max(0, height - (this.icon && this.iconVerticalAlignment !== VerticalAlignment.Center\n ? iconSize.y\n : 0));\n const textY = textAreaY + (textHeight - text.lineHeight) * 0.5;\n\n if (this.clipText) {\n this.engine.graphics.pushClipRect(left, top, width, height);\n }\n try {\n if (this.icon) {\n const iconY = this.getAlignedY(top, height, iconSize.y, this.iconVerticalAlignment);\n\n this.drawTexture(iconX, iconY, iconSize.x, iconSize.y, this.icon, undefined, this.getIconTint(mode));\n }\n this.drawText(\n textX, textY, sourceText, fontSize,\n this.getFontColor(mode),\n font.family, font.weight, font.style,\n );\n } finally {\n if (this.clipText) {\n this.engine.graphics.popClipRect();\n }\n }\n }\n\n private getFontColor (mode: ButtonDrawMode): math.Color {\n switch (mode) {\n case ButtonDrawMode.Disabled: return this.getThemeColor('fontDisabledColor');\n case ButtonDrawMode.HoverPressed: return this.getThemeColor('fontHoverPressedColor');\n case ButtonDrawMode.Pressed: return this.getThemeColor('fontPressedColor');\n case ButtonDrawMode.Hover: return this.getThemeColor('fontHoverColor');\n default: return this.hasFocus(true)\n ? this.getThemeColor('fontFocusColor')\n : this.getThemeColor('fontColor');\n }\n }\n\n private getIconTint (mode: ButtonDrawMode): math.Color {\n switch (mode) {\n case ButtonDrawMode.Disabled: return this.getThemeColor('iconDisabledTint');\n case ButtonDrawMode.HoverPressed: return this.getThemeColor('iconHoverPressedTint');\n case ButtonDrawMode.Pressed: return this.getThemeColor('iconPressedTint');\n case ButtonDrawMode.Hover: return this.getThemeColor('iconHoverTint');\n default: return this.hasFocus(true)\n ? this.getThemeColor('iconFocusTint')\n : this.getThemeColor('iconTint');\n }\n }\n\n protected getBaseContentInsets (): ContentInsets {\n if (!this.getThemeConstant('alignToLargestStyleBox')) {\n return this.getThemeStyleBox(this.getStyleBoxName(this.getDrawMode())).getContentMargins();\n }\n const result: ContentInsets = { left: 0, top: 0, right: 0, bottom: 0 };\n\n for (const name of ['normal', 'hover', 'pressed', 'hoverPressed', 'disabled']) {\n const margin = this.getThemeStyleBox(name).getContentMargins();\n\n result.left = Math.max(result.left, margin.left);\n result.top = Math.max(result.top, margin.top);\n result.right = Math.max(result.right, margin.right);\n result.bottom = Math.max(result.bottom, margin.bottom);\n }\n\n return result;\n }\n\n private getIconSize (width: number, height: number): math.Vector2 {\n const icon = this.icon;\n\n if (!icon) {\n return new math.Vector2();\n }\n if (!this.expandIcon || icon.width <= 0 || icon.height <= 0) {\n return new math.Vector2(icon.width, icon.height);\n }\n const scale = Math.min(width / icon.width, height / icon.height);\n\n return new math.Vector2(icon.width * scale, icon.height * scale);\n }\n\n private getAlignedX (start: number, width: number, contentWidth: number, alignment: HorizontalAlignment): number {\n if (alignment === HorizontalAlignment.Center || alignment === HorizontalAlignment.Fill) {\n return start + (width - contentWidth) * 0.5;\n }\n if (alignment === HorizontalAlignment.Right) {\n return start + width - contentWidth;\n }\n\n return start;\n }\n\n private getAlignedY (start: number, height: number, contentHeight: number, alignment: VerticalAlignment): number {\n if (alignment === VerticalAlignment.Center || alignment === VerticalAlignment.Fill) {\n return start + (height - contentHeight) * 0.5;\n }\n if (alignment === VerticalAlignment.Bottom) {\n return start + height - contentHeight;\n }\n\n return start;\n }\n\n private ellipsizeText (text: string, width: number): string {\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const measurement = this.measureText(text, fontSize, font.family, font.weight, font.style);\n\n if (measurement.width <= width) {\n return text;\n }\n const ellipsis = '…';\n const ellipsisWidth = this.measureText(ellipsis, fontSize, font.family, font.weight, font.style).width;\n const characters = Array.from(text);\n let used = ellipsisWidth;\n let count = 0;\n\n if (ellipsisWidth > width) {\n return '';\n }\n while (count < characters.length && used + (measurement.advances[count] ?? 0) <= width) {\n used += measurement.advances[count] ?? 0;\n count++;\n }\n\n return characters.slice(0, count).join('') + ellipsis;\n }\n\n override fromData (data: spec.ButtonData): void {\n super.fromData(data);\n if (data.text !== undefined) {\n this.text = data.text;\n }\n if (data.icon !== undefined) {\n this.icon = data.icon ? this.engine.findObject<Texture>(data.icon) : null;\n }\n if (data.flat !== undefined) {\n this.flat = data.flat;\n }\n if (data.clipText !== undefined) {\n this.clipText = data.clipText;\n }\n if (data.expandIcon !== undefined) {\n this.expandIcon = data.expandIcon;\n }\n if (data.textAlignment !== undefined) {\n this.textAlignment = data.textAlignment;\n }\n if (data.iconAlignment !== undefined) {\n this.iconAlignment = data.iconAlignment;\n }\n if (data.iconVerticalAlignment !== undefined) {\n this.iconVerticalAlignment = data.iconVerticalAlignment;\n }\n }\n}\n","import { effectsClass } from '@galacean/effects';\nimport type { Engine, math } from '@galacean/effects';\nimport { Button } from './button';\nimport type { ContentInsets } from './button';\nimport { HorizontalAlignment } from './enums';\n\nconst CHECK_ICON_GRID_SIZE = 16;\n\n@effectsClass('Checkbox')\nexport class Checkbox extends Button {\n static override readonly themeType: string = 'Checkbox';\n\n constructor (engine: Engine, text = '') {\n super(engine, text);\n this.toggleMode = true;\n this.textAlignment = HorizontalAlignment.Left;\n }\n\n protected override getContentInsets (): ContentInsets {\n const insets = super.getContentInsets();\n const separation = this.text ? Math.max(0, this.getThemeConstant('markSeparation')) : 0;\n\n return {\n ...insets,\n left: insets.left + this.getMarkSize().width + separation,\n };\n }\n\n protected override drawDecoration (): void {\n const markSize = this.getThemeConstant('markSize');\n const iconSize = this.getMarkSize();\n const x = this.getNormalContentInsets().left;\n const yOffset = this.getThemeConstant('checkVOffset');\n const y = Math.floor((this.height - iconSize.height) * 0.5) + yOffset;\n const radio = !!this.buttonGroup;\n const iconName = this.disabled || !this.enabledInHierarchy\n ? radio\n ? this.buttonPressed ? 'radioCheckedDisabled' : 'radioUncheckedDisabled'\n : this.buttonPressed ? 'checkedDisabled' : 'uncheckedDisabled'\n : radio\n ? this.buttonPressed ? 'radioChecked' : 'radioUnchecked'\n : this.buttonPressed ? 'checked' : 'unchecked';\n const icon = this.getThemeIcon(iconName);\n\n if (icon) {\n this.drawTexture(\n x, y, icon.width, icon.height, icon, undefined,\n this.getThemeColor(this.buttonPressed ? 'checkedColor' : 'uncheckedColor'),\n );\n\n return;\n }\n const fallbackY = Math.floor((this.height - markSize) * 0.5) + yOffset;\n const centerX = x + markSize * 0.5;\n const centerY = fallbackY + markSize * 0.5;\n const disabled = this.disabled || !this.enabledInHierarchy;\n const markColor = disabled\n ? this.getThemeColor('markDisabledColor')\n : this.getThemeColor('markColor');\n const uncheckedColor = disabled\n ? this.getThemeColor('markUncheckedDisabledColor')\n : this.getThemeColor('markUncheckedColor');\n const checkedColor = disabled\n ? this.getThemeColor('checkedDisabledColor')\n : this.getThemeColor('checkedColor');\n const scale = markSize / CHECK_ICON_GRID_SIZE;\n\n if (this.buttonGroup) {\n if (this.buttonPressed) {\n this.fillCircle(centerX, centerY, 7 * scale, markColor);\n this.fillCircle(centerX, centerY, 4 * scale, checkedColor);\n } else {\n this.fillCircle(centerX, centerY, 7 * scale, uncheckedColor);\n }\n } else {\n this.fillRoundedMark(x + scale, fallbackY + scale, 14 * scale, 2.33 * scale, this.buttonPressed\n ? markColor\n : uncheckedColor);\n if (this.buttonPressed) {\n this.fillCheckMark(x, fallbackY, scale, checkedColor);\n }\n }\n }\n\n private fillRoundedMark (x: number, y: number, size: number, radius: number, color: math.Color): void {\n const points: Array<[number, number]> = [];\n const segments = 4;\n const corners: Array<[number, number, number]> = [\n [x + radius, y + radius, Math.PI],\n [x + size - radius, y + radius, Math.PI * 1.5],\n [x + size - radius, y + size - radius, 0],\n [x + radius, y + size - radius, Math.PI * 0.5],\n ];\n\n for (const [centerX, centerY, start] of corners) {\n for (let index = 0; index <= segments; index++) {\n const angle = start + index / segments * Math.PI * 0.5;\n\n points.push([centerX + Math.cos(angle) * radius, centerY + Math.sin(angle) * radius]);\n }\n }\n const centerX = x + size * 0.5;\n const centerY = y + size * 0.5;\n\n for (let index = 0; index < points.length; index++) {\n const current = points[index];\n const next = points[(index + 1) % points.length];\n\n this.fillTriangle(centerX, centerY, current[0], current[1], next[0], next[1], color);\n }\n }\n\n private fillCheckMark (x: number, y: number, scale: number, color: math.Color): void {\n const point = (px: number, py: number): [number, number] => [x + px * scale, y + py * scale];\n const top = point(11.5, 3.734);\n const inner = point(5.89, 9.346);\n const leftInner = point(4.185, 7.665);\n const left = point(2.685, 9.164);\n const bottom = point(5.889, 12.344);\n const right = point(13, 5.235);\n\n this.fillTriangle(leftInner[0], leftInner[1], left[0], left[1], bottom[0], bottom[1], color);\n this.fillTriangle(leftInner[0], leftInner[1], bottom[0], bottom[1], inner[0], inner[1], color);\n this.fillTriangle(top[0], top[1], inner[0], inner[1], bottom[0], bottom[1], color);\n this.fillTriangle(top[0], top[1], bottom[0], bottom[1], right[0], right[1], color);\n }\n\n private getMarkSize (): { width: number, height: number } {\n let width = 0;\n let height = 0;\n\n for (const name of [\n 'checked', 'unchecked', 'checkedDisabled', 'uncheckedDisabled',\n 'radioChecked', 'radioUnchecked', 'radioCheckedDisabled', 'radioUncheckedDisabled',\n ]) {\n const icon = this.getThemeIcon(name);\n\n width = Math.max(width, icon?.width ?? 0);\n height = Math.max(height, icon?.height ?? 0);\n }\n if (width <= 0 && height <= 0) {\n const fallback = this.getThemeConstant('markSize');\n\n return { width: fallback, height: fallback };\n }\n\n return { width, height };\n }\n}\n","import { effectsClass } from '@galacean/effects';\nimport type { Engine } from '@galacean/effects';\nimport { Button } from './button';\nimport type { ContentInsets } from './button';\nimport { HorizontalAlignment } from './enums';\n\n@effectsClass('CheckButton')\nexport class CheckButton extends Button {\n static override readonly themeType: string = 'CheckButton';\n\n constructor (engine: Engine, text = '') {\n super(engine, text);\n this.toggleMode = true;\n this.textAlignment = HorizontalAlignment.Left;\n }\n\n protected override getContentInsets (): ContentInsets {\n const insets = super.getContentInsets();\n const separation = this.text ? Math.max(0, this.getThemeConstant('switchSeparation')) : 0;\n\n return {\n ...insets,\n right: insets.right + this.getSwitchSize().width + separation,\n };\n }\n\n protected override drawDecoration (): void {\n const switchWidth = this.getThemeConstant('switchWidth');\n const switchHeight = this.getThemeConstant('switchHeight');\n const switchSize = this.getSwitchSize();\n const x = this.width - this.getNormalContentInsets().right - switchSize.width;\n const yOffset = this.getThemeConstant('checkVOffset');\n const y = (this.height - switchSize.height) * 0.5 + yOffset;\n const radius = switchHeight * 0.5;\n const iconName = this.disabled || !this.enabledInHierarchy\n ? this.buttonPressed ? 'checkedDisabled' : 'uncheckedDisabled'\n : this.buttonPressed ? 'checked' : 'unchecked';\n const icon = this.getThemeIcon(iconName);\n\n if (icon) {\n this.drawTexture(\n x, y, icon.width, icon.height, icon, undefined,\n this.getThemeColor(this.buttonPressed ? 'buttonCheckedColor' : 'buttonUncheckedColor'),\n );\n\n return;\n }\n const fallbackX = this.width - this.getNormalContentInsets().right - switchWidth;\n const fallbackY = (this.height - switchHeight) * 0.5 + yOffset;\n const activeColor = this.disabled || !this.enabledInHierarchy\n ? this.getThemeColor('switchDisabledColor')\n : this.getThemeColor('switchColor');\n const trackColor = this.buttonPressed ? activeColor : this.getThemeColor('switchOffColor');\n const knobX = this.buttonPressed ? fallbackX + switchWidth - radius : fallbackX + radius;\n\n this.fillRect(fallbackX + radius, fallbackY, switchWidth - switchHeight, switchHeight, trackColor);\n this.fillCircle(fallbackX + radius, fallbackY + radius, radius, trackColor);\n this.fillCircle(fallbackX + switchWidth - radius, fallbackY + radius, radius, trackColor);\n this.fillCircle(knobX, fallbackY + radius, radius - 2, this.getThemeColor('switchKnobColor'));\n }\n\n private getSwitchSize (): { width: number, height: number } {\n let width = 0;\n let height = 0;\n\n const names = this.disabled || !this.enabledInHierarchy\n ? ['checkedDisabled', 'uncheckedDisabled']\n : ['checked', 'unchecked'];\n\n for (const name of names) {\n const icon = this.getThemeIcon(name);\n\n width = Math.max(width, icon?.width ?? 0);\n height = Math.max(height, icon?.height ?? 0);\n }\n if (width <= 0 && height <= 0) {\n return {\n width: this.getThemeConstant('switchWidth'),\n height: this.getThemeConstant('switchHeight'),\n };\n }\n\n return { width, height };\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n InputEventScreenDrag,\n InputEventScreenTouch,\n spec,\n} from '@galacean/effects';\nimport type { RootControl } from '../core/control';\nimport { FocusMode, MouseFilter } from '../core/enums';\nimport { Orientation } from '../layout/enums';\nimport { Range } from '../scroll/range';\nimport type { RangeEvent } from '../scroll/range';\n\nexport type SliderEvent = RangeEvent & {\n dragStarted: [],\n dragEnded: [valueChanged: boolean],\n};\n\ntype GrabberRect = {\n x: number,\n y: number,\n width: number,\n height: number,\n};\n\nexport class Slider extends Range {\n static override readonly themeType: string = 'Slider';\n private readonly sliderEventEmitter = new EventEmitter<SliderEvent>();\n private _orientation: Orientation;\n private _editable = true;\n private dragging = false;\n private hovered = false;\n private dragPosition = 0;\n private dragRatio = 0;\n private dragInitialValue = 0;\n private touchIndex = -1;\n\n scrollable = true;\n\n constructor (engine: Engine, orientation = Orientation.Horizontal) {\n super(engine);\n\n this._orientation = orientation;\n this.focusMode = FocusMode.All;\n this.mouseFilter = MouseFilter.Stop;\n }\n\n get orientation (): Orientation {\n return this._orientation;\n }\n\n get editable (): boolean {\n return this._editable;\n }\n\n set editable (value: boolean) {\n if (this._editable !== value) {\n this._editable = value;\n if (!value) {\n this.endDrag();\n }\n }\n }\n\n set orientation (value: Orientation) {\n if (value !== Orientation.Horizontal && value !== Orientation.Vertical) {\n throw new RangeError('Invalid Slider orientation.');\n }\n if (this._orientation !== value) {\n this._orientation = value;\n this.updateMinimumSize();\n }\n }\n\n override on<E extends keyof SliderEvent> (\n eventName: E,\n listener: EventEmitterListener<SliderEvent[E]>,\n ): void {\n if (eventName === 'dragStarted' || eventName === 'dragEnded') {\n this.sliderEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof SliderEvent> (\n eventName: E,\n listener: EventEmitterListener<SliderEvent[E]>,\n ): void {\n if (eventName === 'dragStarted' || eventName === 'dragEnded') {\n this.sliderEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n const grabberSize = this.getThemeConstant('grabberSize');\n const thickness = Math.max(grabberSize, this.getThemeConstant('trackThickness'));\n\n return this.orientation === Orientation.Horizontal\n ? new math.Vector2(grabberSize, thickness)\n : new math.Vector2(thickness, grabberSize);\n }\n\n override draw (): void {\n const grabber = this.getGrabberRect();\n const highlighted = this.editable && (this.hovered || this.hasFocus(true));\n const grabberStyle = !this.editable\n ? 'grabberDisabled'\n : highlighted ? 'grabberHighlight' : 'grabber';\n const fillStyle = highlighted ? 'fillHighlight' : 'fill';\n const trackThickness = this.getThemeConstant('trackThickness');\n\n if (this.orientation === Orientation.Horizontal) {\n const centerY = (this.height - trackThickness) * 0.5;\n const fillWidth = grabber.x + grabber.width * 0.5;\n\n this.drawStyleBox(this.getThemeStyleBox('track'), 0, centerY, this.width, trackThickness);\n this.drawStyleBox(this.getThemeStyleBox(fillStyle), 0, centerY, fillWidth, trackThickness);\n } else {\n const centerX = (this.width - trackThickness) * 0.5;\n const fillY = grabber.y + grabber.height * 0.5;\n\n this.drawStyleBox(this.getThemeStyleBox('track'), centerX, 0, trackThickness, this.height);\n this.drawStyleBox(this.getThemeStyleBox(fillStyle), centerX, fillY, trackThickness, this.height - fillY);\n }\n this.drawStyleBox(this.getThemeStyleBox(grabberStyle), grabber.x, grabber.y, grabber.width, grabber.height);\n }\n\n override onMouseEnter (): void {\n this.hovered = true;\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n this.hovered = this.hasPoint(event.position);\n if (this.dragging) {\n this.updateDrag(this.getAxis(event.position));\n event.accept();\n }\n }\n\n override onMouseLeave (): void {\n this.hovered = false;\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (!this.editable || event.buttonIndex !== MouseButton.Left) {\n return;\n }\n this.beginDrag(this.getAxis(event.position), this.getGrabberRect(), event.position);\n event.accept();\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left && this.dragging) {\n this.endDrag();\n event.accept();\n }\n }\n\n override onTouchDown (event: InputEventScreenTouch): void {\n if (!this.editable || this.touchIndex !== -1) {\n return;\n }\n this.touchIndex = event.index;\n this.beginDrag(this.getAxis(event.position), this.getGrabberRect(), event.position);\n event.accept();\n }\n\n override onTouchMove (event: InputEventScreenDrag): void {\n if (this.dragging && event.index === this.touchIndex) {\n this.updateDrag(this.getAxis(event.position));\n event.accept();\n }\n }\n\n override onTouchUp (event: InputEventScreenTouch): void {\n if (event.index === this.touchIndex) {\n this.touchIndex = -1;\n this.endDrag();\n event.accept();\n }\n }\n\n override onMouseWheel (event: InputEventMouseButton): void {\n if (!this.editable || !this.scrollable) {\n return;\n }\n\n let direction = 0;\n\n if (event.buttonIndex === MouseButton.WheelUp || event.buttonIndex === MouseButton.WheelRight) {\n direction = 1;\n } else if (event.buttonIndex === MouseButton.WheelDown || event.buttonIndex === MouseButton.WheelLeft) {\n direction = -1;\n }\n if (direction !== 0) {\n const previous = this.value;\n\n this.value += direction * this.getIncrement() * event.factor;\n if (previous !== this.value) {\n event.accept();\n }\n }\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (!this.editable) {\n return;\n }\n const increment = this.getIncrement();\n let target: number | undefined;\n\n if ((this.orientation === Orientation.Horizontal && event.keycode === 'ArrowLeft')\n || (this.orientation === Orientation.Vertical && event.keycode === 'ArrowDown')) {\n target = this.value - increment;\n } else if ((this.orientation === Orientation.Horizontal && event.keycode === 'ArrowRight')\n || (this.orientation === Orientation.Vertical && event.keycode === 'ArrowUp')) {\n target = this.value + increment;\n } else if (event.keycode === 'Home') {\n target = this.minValue;\n } else if (event.keycode === 'End') {\n target = this.maxValue;\n }\n\n if (target !== undefined) {\n const previous = this.value;\n\n this.value = target;\n if (previous !== this.value) {\n event.accept();\n }\n }\n }\n\n override onScrollBegin (): void {\n this.endDrag();\n }\n\n protected override onRootChanged (previousRoot: RootControl | null, nextRoot: RootControl | null): void {\n if (!nextRoot) {\n this.endDrag();\n }\n }\n\n private beginDrag (position: number, grabber: GrabberRect, point: math.Vector2): void {\n const insideGrabber = point.x >= grabber.x && point.x <= grabber.x + grabber.width\n && point.y >= grabber.y && point.y <= grabber.y + grabber.height;\n\n const initialValue = this.value;\n\n if (!insideGrabber) {\n this.setAsRatio(this.getRatioAt(position));\n }\n this.dragging = true;\n this.dragPosition = position;\n this.dragRatio = this.getAsRatio();\n this.dragInitialValue = initialValue;\n this.sliderEventEmitter.emit('dragStarted');\n }\n\n private updateDrag (position: number): void {\n const area = this.getUsableLength();\n\n if (area <= 0) {\n return;\n }\n const direction = this.orientation === Orientation.Horizontal ? 1 : -1;\n\n this.setAsRatio(this.dragRatio + direction * (position - this.dragPosition) / area);\n }\n\n private endDrag (): void {\n if (!this.dragging) {\n return;\n }\n const changed = this.value !== this.dragInitialValue;\n\n this.dragging = false;\n this.touchIndex = -1;\n this.sliderEventEmitter.emit('dragEnded', changed);\n }\n\n private getAxis (position: math.Vector2): number {\n return this.orientation === Orientation.Horizontal ? position.x : position.y;\n }\n\n private getAxisSize (): number {\n return this.orientation === Orientation.Horizontal ? this.width : this.height;\n }\n\n private getUsableLength (): number {\n return Math.max(0, this.getAxisSize() - this.getThemeConstant('grabberSize'));\n }\n\n private getRatioAt (position: number): number {\n const area = this.getUsableLength();\n const normalized = area > 0 ? (position - this.getThemeConstant('grabberSize') * 0.5) / area : 0;\n\n return this.orientation === Orientation.Horizontal ? normalized : 1 - normalized;\n }\n\n private getIncrement (): number {\n return this.step > 0 ? this.step : Math.max(0, this.maxValue - this.minValue) / 100;\n }\n\n private getGrabberRect (): GrabberRect {\n const grabberSize = this.getThemeConstant('grabberSize');\n const offset = this.getUsableLength() * this.getAsRatio();\n\n return this.orientation === Orientation.Horizontal\n ? { x: offset, y: (this.height - grabberSize) * 0.5, width: grabberSize, height: grabberSize }\n : { x: (this.width - grabberSize) * 0.5, y: this.getUsableLength() - offset, width: grabberSize, height: grabberSize };\n }\n\n override fromData (data: spec.SliderData): void {\n super.fromData(data);\n if (data.editable !== undefined) {\n this.editable = data.editable;\n }\n if (data.scrollable !== undefined) {\n this.scrollable = data.scrollable;\n }\n }\n\n}\n\n@effectsClass('HSlider')\nexport class HSlider extends Slider {\n static override readonly themeType: string = 'HSlider';\n constructor (engine: Engine) {\n super(engine, Orientation.Horizontal);\n }\n}\n\n@effectsClass('VSlider')\nexport class VSlider extends Slider {\n static override readonly themeType: string = 'VSlider';\n constructor (engine: Engine) {\n super(engine, Orientation.Vertical);\n }\n}\n","import {\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine, spec } from '@galacean/effects';\nimport { MouseFilter } from '../core/enums';\nimport { Range } from '../scroll/range';\nimport { ProgressFillMode } from './enums';\n\n@effectsClass('ProgressBar')\nexport class ProgressBar extends Range {\n static override readonly themeType: string = 'ProgressBar';\n private _showPercentage = true;\n private _fillMode = ProgressFillMode.BeginToEnd;\n\n constructor (engine: Engine) {\n super(engine);\n\n this.step = 0.01;\n this.mouseFilter = MouseFilter.Ignore;\n }\n\n get showPercentage (): boolean {\n return this._showPercentage;\n }\n\n set showPercentage (value: boolean) {\n if (this._showPercentage !== value) {\n this._showPercentage = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n get fillMode (): ProgressFillMode {\n return this._fillMode;\n }\n\n set fillMode (value: ProgressFillMode) {\n this._fillMode = value;\n }\n\n override getMinimumSize (): math.Vector2 {\n const background = this.getThemeStyleBox('background').getMinimumSize();\n const fill = this.getThemeStyleBox('fill').getMinimumSize();\n const styleMinimum = new math.Vector2(Math.max(background.x, fill.x), Math.max(background.y, fill.y));\n\n if (!this.showPercentage) {\n return new math.Vector2(Math.max(1, styleMinimum.x), Math.max(1, styleMinimum.y));\n }\n const font = this.getThemeFont('font');\n const text = this.measureText(\n '100%', this.getThemeFontSize('fontSize'), font.family, font.weight, font.style,\n );\n\n return new math.Vector2(styleMinimum.x, Math.max(background.y + text.lineHeight, styleMinimum.y));\n }\n\n override getDesiredSize (): math.Vector2 {\n const minimum = this.getMinimumSize();\n\n return new math.Vector2(Math.max(120, minimum.x), minimum.y);\n }\n\n override draw (): void {\n const ratio = this.getAsRatio();\n const fillStyle = this.getThemeStyleBox('fill');\n const fillMinimum = fillStyle.getMinimumSize();\n\n this.drawStyleBox(this.getThemeStyleBox('background'), 0, 0, this.width, this.height);\n switch (this.fillMode) {\n case ProgressFillMode.BeginToEnd: {\n const progress = Math.round(ratio * (this.width - fillMinimum.x));\n\n if (progress > 0) {\n this.drawStyleBox(fillStyle, 0, 0, progress + fillMinimum.x, this.height);\n }\n\n break;\n }\n case ProgressFillMode.EndToBegin: {\n const progress = Math.round(ratio * (this.width - fillMinimum.x));\n\n if (progress > 0) {\n const remaining = Math.round((1 - ratio) * (this.width - fillMinimum.x));\n\n this.drawStyleBox(fillStyle, remaining, 0, progress + fillMinimum.x, this.height);\n }\n\n break;\n }\n case ProgressFillMode.TopToBottom: {\n const progress = Math.round(ratio * (this.height - fillMinimum.y));\n\n if (progress > 0) {\n this.drawStyleBox(fillStyle, 0, 0, this.width, progress + fillMinimum.y);\n }\n\n break;\n }\n case ProgressFillMode.BottomToTop: {\n const progress = Math.round(ratio * (this.height - fillMinimum.y));\n\n if (progress > 0) {\n const remaining = Math.round((1 - ratio) * (this.height - fillMinimum.y));\n\n this.drawStyleBox(fillStyle, 0, remaining, this.width, progress + fillMinimum.y);\n }\n\n break;\n }\n }\n\n if (this.showPercentage) {\n const text = `${Math.round(ratio * 100)}%`;\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const measurement = this.measureText(text, fontSize, font.family, font.weight, font.style);\n\n this.drawText(\n (this.width - measurement.width) * 0.5,\n (this.height - measurement.lineHeight) * 0.5,\n text, fontSize, this.getThemeColor('fontColor'), font.family, font.weight, font.style,\n );\n }\n }\n\n override fromData (data: spec.ProgressBarData): void {\n super.fromData(data);\n if (data.showPercentage !== undefined) {\n this.showPercentage = data.showPercentage;\n }\n if (data.fillMode !== undefined) {\n this.fillMode = data.fillMode;\n }\n }\n\n}\n","import {\n EventEmitter,\n MouseButton,\n MouseButtonMask,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n\n math } from '@galacean/effects';\nimport { Control } from '../core/control';\nimport type { ControlEvent } from '../core/control';\nimport { CursorShape, FocusMode, MouseFilter } from '../core/enums';\n\ntype EditSnapshot = {\n text: string,\n selectionStart: number,\n selectionEnd: number,\n};\n\nexport type TextInputEvent = ControlEvent & {\n textChanged: [text: string],\n textSubmitted: [text: string],\n};\n\nexport abstract class TextInput extends Control {\n static override readonly themeType: string = 'TextInput';\n protected abstract readonly multiline: boolean;\n private readonly textEventEmitter = new EventEmitter<TextInputEvent>();\n private _text = '';\n private _placeholderText = '';\n private _editable = true;\n private _maxLength = 0;\n private selectionStart = 0;\n private selectionEnd = 0;\n private selectionAnchor = 0;\n private selecting = false;\n private selectingWords = false;\n private wordSelectionStart = 0;\n private wordSelectionEnd = 0;\n private textarea: HTMLTextAreaElement | null = null;\n private textareaFocusTimer: ReturnType<typeof setTimeout> | null = null;\n private composing = false;\n private readonly undoStack: EditSnapshot[] = [];\n private readonly redoStack: EditSnapshot[] = [];\n\n constructor (engine: Engine) {\n super(engine);\n this.focusMode = FocusMode.All;\n this.mouseFilter = MouseFilter.Stop;\n this.defaultCursorShape = CursorShape.Ibeam;\n }\n\n get text (): string { return this._text; }\n set text (value: string) { this.setText(value, false); }\n\n get placeholderText (): string { return this._placeholderText; }\n set placeholderText (value: string) {\n if (this._placeholderText !== value) {\n this._placeholderText = value;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n }\n\n get editable (): boolean { return this._editable; }\n set editable (value: boolean) {\n if (this._editable !== value) {\n this._editable = value;\n if (this.textarea) {this.textarea.readOnly = !value;}\n this.updateMinimumSize();\n }\n }\n\n get maxLength (): number { return this._maxLength; }\n set maxLength (value: number) {\n this._maxLength = Math.max(0, Math.floor(value));\n if (this._maxLength > 0 && this._text.length > this._maxLength) {\n this.setText(this._text.slice(0, this._maxLength), false);\n }\n if (this.textarea) {\n if (this._maxLength > 0) {this.textarea.maxLength = this._maxLength;} else {this.textarea.removeAttribute('maxlength');}\n }\n }\n\n get caretColumn (): number { return this.selectionEnd; }\n set caretColumn (value: number) { this.setSelection(value, value); }\n\n get hasSelection (): boolean { return this.selectionStart !== this.selectionEnd; }\n\n override on<E extends keyof TextInputEvent> (\n eventName: E,\n listener: EventEmitterListener<TextInputEvent[E]>,\n ): void {\n if (eventName === 'textChanged' || eventName === 'textSubmitted') {\n this.textEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof TextInputEvent> (\n eventName: E,\n listener: EventEmitterListener<TextInputEvent[E]>,\n ): void {\n if (eventName === 'textChanged' || eventName === 'textSubmitted') {\n this.textEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n selectAll (): void { this.setSelection(0, this._text.length); }\n deselect (): void { this.setSelection(this.selectionEnd, this.selectionEnd); }\n getSelectedText (): string {\n const start = Math.min(this.selectionStart, this.selectionEnd);\n const end = Math.max(this.selectionStart, this.selectionEnd);\n\n return this._text.slice(start, end);\n }\n\n setSelection (start: number, end = start): void {\n this.selectionStart = Math.max(0, Math.min(this._text.length, Math.floor(start)));\n this.selectionEnd = Math.max(0, Math.min(this._text.length, Math.floor(end)));\n this.selectionAnchor = this.selectionStart;\n this.syncTextareaSelection();\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {return;}\n this.grabFocus(true);\n this.cancelTextareaFocus();\n const index = this.getCharacterIndex(event.position);\n\n if (event.doubleClick) {\n const [start, end] = this.getWordRange(index);\n\n this.wordSelectionStart = start;\n this.wordSelectionEnd = end;\n this.setSelection(start, end);\n this.selectingWords = true;\n this.selecting = true;\n } else if (event.shiftPressed) {\n this.moveCaret(index, true);\n this.selectingWords = false;\n this.selecting = true;\n } else {\n this.selectionAnchor = index;\n this.setSelection(index, index);\n this.selectingWords = false;\n this.selecting = true;\n }\n event.accept();\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n if (!this.selecting || (event.buttonMask & MouseButtonMask.Left) === 0) {return;}\n const index = this.getCharacterIndex(event.position);\n\n if (this.selectingWords) {\n const [start, end] = this.getWordRange(index);\n\n if (index < this.wordSelectionStart) {\n this.setSelection(this.wordSelectionEnd, start);\n } else {\n this.setSelection(this.wordSelectionStart, end);\n }\n } else {\n this.setSelection(this.selectionAnchor, index);\n }\n event.accept();\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left && this.selecting) {\n this.selecting = false;\n this.selectingWords = false;\n this.focusTextarea();\n event.accept();\n }\n }\n\n override onKeyDown (event: InputEventKey): void {\n const command = event.ctrlPressed || event.metaPressed;\n\n if (command && event.keycode.toLowerCase() === 'a') {\n this.selectAll();\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'c') {\n this.copySelection();\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'x' && this.editable) {\n this.copySelection();\n this.replaceSelection('');\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'v' && this.editable) {\n this.pasteClipboard();\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'z' && this.editable) {\n if (event.shiftPressed) {this.redo();} else {this.undo();}\n event.accept();\n\n return;\n }\n if (command && event.keycode.toLowerCase() === 'y' && this.editable) {\n this.redo();\n event.accept();\n\n return;\n }\n if (event.keycode === 'ArrowLeft' || event.keycode === 'ArrowRight') {\n const direction = event.keycode === 'ArrowLeft' ? -1 : 1;\n const next = direction < 0\n ? getPreviousCharacterIndex(this._text, this.selectionEnd)\n : getNextCharacterIndex(this._text, this.selectionEnd);\n\n this.moveCaret(next, event.shiftPressed);\n event.accept();\n\n return;\n }\n if (event.keycode === 'Home' || event.keycode === 'End') {\n const next = event.keycode === 'Home' ? this.getLineStart(this.selectionEnd) : this.getLineEnd(this.selectionEnd);\n\n this.moveCaret(next, event.shiftPressed);\n event.accept();\n\n return;\n }\n if (!this.editable) {return;}\n if (event.keycode === 'Backspace') {\n this.erase(-1);\n event.accept();\n\n return;\n }\n if (event.keycode === 'Delete') {\n this.erase(1);\n event.accept();\n\n return;\n }\n if (event.keycode === 'Enter') {\n if (this.multiline) {this.replaceSelection('\\n');} else {this.submit();}\n event.accept();\n\n return;\n }\n if (!command && !event.altPressed && event.unicode >= 32) {\n this.replaceSelection(String.fromCodePoint(event.unicode));\n event.accept();\n }\n }\n\n override onGotFocus (): void {\n this.activateTextarea();\n }\n\n override onLostFocus (): void {\n this.selecting = false;\n this.selectingWords = false;\n this.removeTextarea();\n }\n\n override onDestroy (): void {\n this.removeTextarea();\n }\n\n protected getDisplayText (): string {\n return this._text;\n }\n\n protected getSelectionRange (): [number, number] {\n return [Math.min(this.selectionStart, this.selectionEnd), Math.max(this.selectionStart, this.selectionEnd)];\n }\n\n protected moveCaret (index: number, extendSelection: boolean): void {\n const next = Math.max(0, Math.min(this._text.length, Math.floor(index)));\n\n if (extendSelection) {\n this.selectionStart = this.selectionAnchor;\n this.selectionEnd = next;\n this.syncTextareaSelection();\n } else {\n this.setSelection(next, next);\n }\n }\n\n protected getTextFont () {\n return this.getThemeFont('font');\n }\n\n protected getTextFontSize (): number {\n return this.getThemeFontSize('fontSize');\n }\n\n protected getTextColor (): math.Color {\n if (!this.editable) {return this.getThemeColor('fontReadOnlyColor');}\n if (this._text.length === 0) {return this.getThemeColor('fontPlaceholderColor');}\n\n return this.getThemeColor('fontColor');\n }\n\n protected getTextStyleBox () {\n return this.getThemeStyleBox(this.editable ? 'normal' : 'readOnly');\n }\n\n protected drawTextBackground (): void {\n this.drawStyleBox(this.getTextStyleBox(), 0, 0, this.width, this.height);\n if (this.hasFocus(true)) {\n this.drawStyleBox(this.getThemeStyleBox('focus'), 0, 0, this.width, this.height);\n }\n }\n\n protected drawSelection (x: number, y: number, width: number, height: number): void {\n if (width > 0) {this.fillRect(x, y, width, height, this.getThemeColor('selectionColor'));}\n }\n\n protected drawCaret (x: number, y: number, height: number): void {\n if (this.hasFocus() && !this.hasSelection) {\n this.fillRect(x, y, Math.max(1, this.getThemeConstant('caretWidth')), height, this.getThemeColor('caretColor'));\n }\n }\n\n protected abstract getCharacterIndex (position: math.Vector2): number;\n protected onTextValueChanged (): void {}\n\n private setText (value: string, signal: boolean): void {\n const limited = this._maxLength > 0 ? value.slice(0, this._maxLength) : value;\n\n if (this._text === limited) {return;}\n this._text = limited;\n this.selectionStart = Math.min(this.selectionStart, limited.length);\n this.selectionEnd = Math.min(this.selectionEnd, limited.length);\n this.onTextValueChanged();\n if (this.textarea && this.textarea.value !== limited) {this.textarea.value = limited;}\n this.updateMinimumSize();\n this.updateDesiredSize();\n if (signal) {this.textEventEmitter.emit('textChanged', limited);}\n }\n\n private replaceSelection (value: string): void {\n if (!this.editable) {return;}\n const [start, end] = this.getSelectionRange();\n\n this.pushUndo();\n const allowed = this._maxLength > 0\n ? value.slice(0, Math.max(0, this._maxLength - (this._text.length - (end - start))))\n : value;\n const next = `${this._text.slice(0, start)}${allowed}${this._text.slice(end)}`;\n const caret = start + allowed.length;\n\n this.setText(next, true);\n this.setSelection(caret, caret);\n this.redoStack.length = 0;\n }\n\n private erase (direction: number): void {\n if (this.hasSelection) {\n this.replaceSelection('');\n\n return;\n }\n const caret = this.selectionEnd;\n const start = direction < 0 ? getPreviousCharacterIndex(this._text, caret) : caret;\n const end = direction < 0 ? caret : getNextCharacterIndex(this._text, caret);\n\n if (start === end) {return;}\n this.setSelection(start, end);\n this.replaceSelection('');\n }\n\n private getLineStart (index: number): number {\n return this.multiline ? this._text.lastIndexOf('\\n', Math.max(0, index - 1)) + 1 : 0;\n }\n\n private getLineEnd (index: number): number {\n if (!this.multiline) {return this._text.length;}\n const end = this._text.indexOf('\\n', index);\n\n return end === -1 ? this._text.length : end;\n }\n\n private submit (): void {\n this.textEventEmitter.emit('textSubmitted', this._text);\n this.releaseFocus();\n }\n\n private pushUndo (): void {\n const snapshot = this.snapshot();\n const previous = this.undoStack[this.undoStack.length - 1];\n\n if (!previous || previous.text !== snapshot.text || previous.selectionStart !== snapshot.selectionStart\n || previous.selectionEnd !== snapshot.selectionEnd) {\n this.undoStack.push(snapshot);\n if (this.undoStack.length > 100) {this.undoStack.shift();}\n }\n }\n\n private undo (): void {\n const snapshot = this.undoStack.pop();\n\n if (!snapshot) {return;}\n this.redoStack.push(this.snapshot());\n this.restore(snapshot);\n }\n\n private redo (): void {\n const snapshot = this.redoStack.pop();\n\n if (!snapshot) {return;}\n this.undoStack.push(this.snapshot());\n this.restore(snapshot);\n }\n\n private snapshot (): EditSnapshot {\n return { text: this._text, selectionStart: this.selectionStart, selectionEnd: this.selectionEnd };\n }\n\n private restore (snapshot: EditSnapshot): void {\n this.setText(snapshot.text, true);\n this.setSelection(snapshot.selectionStart, snapshot.selectionEnd);\n }\n\n private copySelection (): void {\n const value = this.getSelectedText();\n\n if (value && typeof navigator !== 'undefined' && navigator.clipboard) {\n void navigator.clipboard.writeText(value);\n }\n }\n\n private pasteClipboard (): void {\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n void navigator.clipboard.readText().then(value => this.replaceSelection(value));\n }\n }\n\n private getWordRange (index: number): [number, number] {\n if (this._text.length === 0) {return [0, 0];}\n const position = Math.max(0, Math.min(this._text.length - 1, index));\n\n for (const match of this._text.matchAll(/[\\p{L}\\p{N}_]+|\\s+|[^\\p{L}\\p{N}_\\s]+/gu)) {\n const start = match.index;\n const end = start + match[0].length;\n\n if (position >= start && position < end) {return [start, end];}\n }\n\n return [position, position + 1];\n }\n\n private activateTextarea (): void {\n if (typeof document === 'undefined' || this.textarea) {return;}\n const textarea = document.createElement('textarea');\n\n textarea.value = this._text;\n textarea.readOnly = !this.editable;\n if (this._maxLength > 0) {textarea.maxLength = this._maxLength;}\n textarea.wrap = this.multiline ? 'soft' : 'off';\n textarea.setAttribute('aria-hidden', 'true');\n textarea.style.cssText = 'position:fixed;left:-10000px;top:0;width:1px;height:1px;opacity:0;pointer-events:none;';\n textarea.addEventListener('beforeinput', this.onBeforeInput);\n textarea.addEventListener('input', this.onTextareaInput);\n textarea.addEventListener('select', this.onTextareaSelect);\n textarea.addEventListener('compositionstart', this.onCompositionStart);\n textarea.addEventListener('compositionend', this.onCompositionEnd);\n textarea.addEventListener('keydown', this.onTextareaKeyDown);\n textarea.addEventListener('blur', this.onTextareaBlur);\n document.body.appendChild(textarea);\n this.textarea = textarea;\n this.syncTextareaSelection();\n this.scheduleTextareaFocus();\n }\n\n private removeTextarea (): void {\n this.cancelTextareaFocus();\n const textarea = this.textarea;\n\n if (!textarea) {return;}\n this.textarea = null;\n textarea.removeEventListener('beforeinput', this.onBeforeInput);\n textarea.removeEventListener('input', this.onTextareaInput);\n textarea.removeEventListener('select', this.onTextareaSelect);\n textarea.removeEventListener('compositionstart', this.onCompositionStart);\n textarea.removeEventListener('compositionend', this.onCompositionEnd);\n textarea.removeEventListener('keydown', this.onTextareaKeyDown);\n textarea.removeEventListener('blur', this.onTextareaBlur);\n textarea.remove();\n this.composing = false;\n }\n\n private syncTextareaSelection (): void {\n if (!this.textarea) {return;}\n const start = Math.min(this.selectionStart, this.selectionEnd);\n const end = Math.max(this.selectionStart, this.selectionEnd);\n\n this.textarea.setSelectionRange(start, end, this.selectionEnd < this.selectionStart ? 'backward' : 'forward');\n }\n\n private scheduleTextareaFocus (): void {\n this.cancelTextareaFocus();\n this.textareaFocusTimer = setTimeout(() => {\n this.textareaFocusTimer = null;\n this.focusTextarea();\n });\n }\n\n private cancelTextareaFocus (): void {\n if (this.textareaFocusTimer !== null) {\n clearTimeout(this.textareaFocusTimer);\n this.textareaFocusTimer = null;\n }\n }\n\n private focusTextarea (): void {\n if (this.textarea && this.hasFocus() && document.activeElement !== this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private readonly onBeforeInput = (): void => {\n this.pushUndo();\n };\n\n private readonly onTextareaInput = (): void => {\n if (!this.textarea) {return;}\n this.setText(this.textarea.value, true);\n this.selectionStart = this.textarea.selectionStart;\n this.selectionEnd = this.textarea.selectionEnd;\n if (!this.composing) {this.redoStack.length = 0;}\n };\n\n private readonly onTextareaSelect = (): void => {\n if (!this.textarea) {return;}\n if (this.textarea.selectionDirection === 'backward') {\n this.selectionStart = this.textarea.selectionEnd;\n this.selectionEnd = this.textarea.selectionStart;\n } else {\n this.selectionStart = this.textarea.selectionStart;\n this.selectionEnd = this.textarea.selectionEnd;\n }\n this.selectionAnchor = this.selectionStart;\n };\n\n private readonly onCompositionStart = (): void => { this.composing = true; };\n private readonly onCompositionEnd = (): void => { this.composing = false; };\n\n private readonly onTextareaKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'Enter' && !this.multiline && !event.isComposing) {\n event.preventDefault();\n this.submit();\n }\n };\n\n private readonly onTextareaBlur = (): void => {\n if (this.textarea && this.hasFocus()) {this.releaseFocus();}\n };\n}\n\nfunction getPreviousCharacterIndex (value: string, index: number): number {\n const previous = Math.max(0, index - 1);\n\n if (previous > 0 && isLowSurrogate(value.charCodeAt(previous)) && isHighSurrogate(value.charCodeAt(previous - 1))) {\n return previous - 1;\n }\n\n return previous;\n}\n\nfunction getNextCharacterIndex (value: string, index: number): number {\n if (index >= value.length) {return value.length;}\n\n return Math.min(\n value.length,\n index + (isHighSurrogate(value.charCodeAt(index)) && isLowSurrogate(value.charCodeAt(index + 1)) ? 2 : 1),\n );\n}\n\nfunction isHighSurrogate (value: number): boolean {\n return value >= 0xd800 && value <= 0xdbff;\n}\n\nfunction isLowSurrogate (value: number): boolean {\n return value >= 0xdc00 && value <= 0xdfff;\n}\n","import { effectsClass, math } from '@galacean/effects';\nimport type { Engine, spec } from '@galacean/effects';\nimport { HorizontalAlignment } from './enums';\nimport { TextInput } from './text-input';\n\n@effectsClass('LineEdit')\nexport class LineEdit extends TextInput {\n static override readonly themeType: string = 'LineEdit';\n protected readonly multiline = false;\n alignment = HorizontalAlignment.Left;\n private scrollOffset = 0;\n private _secret = false;\n private _secretCharacter = '•';\n\n constructor (engine: Engine, text = '') {\n super(engine);\n this.text = text;\n }\n\n get secret (): boolean { return this._secret; }\n set secret (value: boolean) {\n if (this._secret !== value) {\n this._secret = value;\n this.updateDesiredSize();\n }\n }\n\n get secretCharacter (): string { return this._secretCharacter; }\n set secretCharacter (value: string) {\n const character = Array.from(value)[0] ?? '';\n\n if (this._secretCharacter !== character) {\n this._secretCharacter = character;\n this.updateDesiredSize();\n }\n }\n\n override getMinimumSize (): math.Vector2 {\n const style = this.getTextStyleBox();\n const margins = style.getContentMargins();\n const font = this.getTextFont();\n const measurement = this.measureText('M', this.getTextFontSize(), font.family, font.weight, font.style);\n\n return new math.Vector2(margins.left + margins.right + 24, margins.top + margins.bottom + measurement.lineHeight);\n }\n\n override getDesiredSize (): math.Vector2 {\n const style = this.getTextStyleBox();\n const margins = style.getContentMargins();\n const font = this.getTextFont();\n const display = this.getVisibleText() || this.placeholderText;\n const measurement = this.measureText(display, this.getTextFontSize(), font.family, font.weight, font.style);\n\n return new math.Vector2(\n margins.left + margins.right + measurement.width,\n margins.top + margins.bottom + measurement.lineHeight,\n );\n }\n\n override draw (): void {\n this.drawTextBackground();\n const style = this.getTextStyleBox();\n const margins = style.getContentMargins();\n const contentWidth = Math.max(0, this.width - margins.left - margins.right);\n const display = this.getVisibleText();\n const shown = display || this.placeholderText;\n const font = this.getTextFont();\n const fontSize = this.getTextFontSize();\n const full = this.measureText(shown, fontSize, font.family, font.weight, font.style);\n const textY = margins.top + Math.max(0, (this.height - margins.top - margins.bottom - full.lineHeight) * 0.5);\n\n this.updateScrollOffset(contentWidth);\n const textX = this.getAlignedTextX(full.width, contentWidth, margins.left) - this.scrollOffset;\n\n this.engine.graphics.pushClipRect(margins.left, margins.top, contentWidth, Math.max(0, this.height - margins.top - margins.bottom));\n if (display) {\n const [selectionStart, selectionEnd] = this.getSelectionRange();\n const prefix = this.measurePrefix(selectionStart);\n const selected = this.measurePrefix(selectionEnd) - prefix;\n\n this.drawSelection(textX + prefix, textY, selected, full.lineHeight);\n }\n this.drawText(textX, textY, shown, fontSize, this.getTextColor(), font.family, font.weight, font.style);\n if (display) {\n this.drawCaret(textX + this.measurePrefix(this.caretColumn), textY, full.lineHeight);\n } else {\n this.drawCaret(textX, textY, full.lineHeight);\n }\n this.engine.graphics.popClipRect();\n }\n\n protected override getDisplayText (): string {\n return this.getVisibleText();\n }\n\n protected override getCharacterIndex (position: math.Vector2): number {\n const style = this.getTextStyleBox();\n const margins = style.getContentMargins();\n const contentWidth = Math.max(0, this.width - margins.left - margins.right);\n const fullWidth = this.measurePrefix(this.text.length);\n const origin = this.getAlignedTextX(fullWidth, contentWidth, margins.left) - this.scrollOffset;\n const x = position.x - origin;\n\n if (x <= 0) {return 0;}\n const boundaries = getCharacterBoundaries(this.text);\n\n for (let index = 1; index < boundaries.length; index++) {\n const previous = this.measurePrefix(boundaries[index - 1]);\n const next = this.measurePrefix(boundaries[index]);\n\n if (x < (previous + next) * 0.5) {return boundaries[index - 1];}\n }\n\n return this.text.length;\n }\n\n private getVisibleText (): string {\n return this.secret\n ? (this.secretCharacter || '•').repeat(Array.from(this.text).length)\n : this.text;\n }\n\n private measurePrefix (column: number): number {\n const font = this.getTextFont();\n const prefix = this.text.slice(0, column);\n const visiblePrefix = this.secret\n ? (this.secretCharacter || '•').repeat(Array.from(prefix).length)\n : prefix;\n\n return this.measureText(\n visiblePrefix, this.getTextFontSize(), font.family, font.weight, font.style,\n ).width;\n }\n\n private updateScrollOffset (width: number): void {\n if (!this.hasFocus()) {\n this.scrollOffset = 0;\n\n return;\n }\n const caret = this.measurePrefix(this.caretColumn);\n\n if (caret - this.scrollOffset > width) {this.scrollOffset = caret - width;}\n if (caret < this.scrollOffset) {this.scrollOffset = caret;}\n }\n\n private getAlignedTextX (textWidth: number, contentWidth: number, left: number): number {\n if (this.alignment === HorizontalAlignment.Center) {return left + (contentWidth - textWidth) * 0.5;}\n if (this.alignment === HorizontalAlignment.Right) {return left + contentWidth - textWidth;}\n\n return left;\n }\n\n override fromData (data: spec.LineEditData): void {\n super.fromData(data);\n if (data.text !== undefined) {this.text = data.text;}\n if (data.placeholderText !== undefined) {this.placeholderText = data.placeholderText;}\n if (data.editable !== undefined) {this.editable = data.editable;}\n if (data.maxLength !== undefined) {this.maxLength = data.maxLength;}\n if (data.secret !== undefined) {this.secret = data.secret;}\n if (data.secretCharacter !== undefined) {this.secretCharacter = data.secretCharacter;}\n if (data.alignment !== undefined) {this.alignment = data.alignment;}\n }\n}\n\nfunction getCharacterBoundaries (value: string): number[] {\n const boundaries = [0];\n let offset = 0;\n\n for (const character of value) {\n offset += character.length;\n boundaries.push(offset);\n }\n\n return boundaries;\n}\n","import {\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type { Engine, InputEventKey, InputEventMouseButton, spec } from '@galacean/effects';\nimport { TextInput } from './text-input';\n\n@effectsClass('TextEdit')\nexport class TextEdit extends TextInput {\n static override readonly themeType: string = 'TextEdit';\n protected readonly multiline = true;\n private scrollLine = 0;\n\n constructor (engine: Engine, text = '') {\n super(engine);\n this.text = text;\n }\n\n override getMinimumSize (): math.Vector2 {\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const line = this.measureText('M', this.getTextFontSize(), font.family, font.weight, font.style);\n\n return new math.Vector2(margins.left + margins.right + 48, margins.top + margins.bottom + line.lineHeight * 2);\n }\n\n override getDesiredSize (): math.Vector2 {\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const fontSize = this.getTextFontSize();\n const lines = (this.text || this.placeholderText).split('\\n');\n let width = 0;\n let lineHeight = this.measureText('M', fontSize, font.family, font.weight, font.style).lineHeight;\n\n for (const line of lines) {\n const measurement = this.measureText(line, fontSize, font.family, font.weight, font.style);\n\n width = Math.max(width, measurement.width);\n lineHeight = Math.max(lineHeight, measurement.lineHeight);\n }\n\n return new math.Vector2(\n margins.left + margins.right + width,\n margins.top + margins.bottom + lineHeight * Math.max(2, lines.length),\n );\n }\n\n override draw (): void {\n this.drawTextBackground();\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const fontSize = this.getTextFontSize();\n const source = this.text || this.placeholderText;\n const lines = source.split('\\n');\n\n this.scrollLine = Math.max(0, Math.min(lines.length - 1, this.scrollLine));\n const lineHeight = this.measureText('M', fontSize, font.family, font.weight, font.style).lineHeight;\n const [selectionStart, selectionEnd] = this.getSelectionRange();\n let textIndex = lines.slice(0, this.scrollLine).reduce((total, line) => total + line.length + 1, 0);\n\n this.engine.graphics.pushClipRect(\n margins.left, margins.top,\n Math.max(0, this.width - margins.left - margins.right),\n Math.max(0, this.height - margins.top - margins.bottom),\n );\n for (let lineIndex = this.scrollLine; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex];\n const y = margins.top + (lineIndex - this.scrollLine) * lineHeight;\n\n if (y >= this.height - margins.bottom) {break;}\n if (this.text) {\n const lineStart = textIndex;\n const lineEnd = lineStart + line.length;\n const selectedStart = Math.max(lineStart, selectionStart);\n const selectedEnd = Math.min(lineEnd, selectionEnd);\n\n if (selectedStart < selectedEnd) {\n const prefix = this.measureLine(line.slice(0, selectedStart - lineStart));\n const selected = this.measureLine(line.slice(selectedStart - lineStart, selectedEnd - lineStart));\n\n this.drawSelection(margins.left + prefix, y, selected, lineHeight);\n }\n }\n this.drawText(margins.left, y, line, fontSize, this.getTextColor(), font.family, font.weight, font.style);\n if (this.text && this.caretColumn >= textIndex && this.caretColumn <= textIndex + line.length) {\n this.drawCaret(margins.left + this.measureLine(line.slice(0, this.caretColumn - textIndex)), y, lineHeight);\n }\n textIndex += line.length + 1;\n }\n this.engine.graphics.popClipRect();\n }\n\n override onMouseWheel (event: InputEventMouseButton): void {\n const lines = this.text.split('\\n').length;\n\n if (event.buttonIndex === MouseButton.WheelUp) {\n this.scrollLine = Math.max(0, this.scrollLine - Math.max(1, Math.round(event.factor)));\n event.accept();\n } else if (event.buttonIndex === MouseButton.WheelDown) {\n this.scrollLine = Math.min(Math.max(0, lines - 1), this.scrollLine + Math.max(1, Math.round(event.factor)));\n event.accept();\n }\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (event.keycode === 'ArrowUp' || event.keycode === 'ArrowDown') {\n const next = this.getVerticalCaretIndex(event.keycode === 'ArrowUp' ? -1 : 1);\n\n this.moveCaret(next, event.shiftPressed);\n this.ensureCaretLineVisible();\n event.accept();\n\n return;\n }\n super.onKeyDown(event);\n }\n\n protected override getCharacterIndex (position: math.Vector2): number {\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const lineHeight = this.measureText(\n 'M', this.getTextFontSize(), font.family, font.weight, font.style,\n ).lineHeight;\n const lines = this.text.split('\\n');\n const lineIndex = Math.max(0, Math.min(lines.length - 1, Math.floor((position.y - margins.top) / lineHeight) + this.scrollLine));\n const line = lines[lineIndex];\n let index = lines.slice(0, lineIndex).reduce((total, value) => total + value.length + 1, 0);\n const x = position.x - margins.left;\n\n for (let column = 1; column <= line.length; column++) {\n const previous = this.measureLine(line.slice(0, column - 1));\n const next = this.measureLine(line.slice(0, column));\n\n if (x < (previous + next) * 0.5) {return index + column - 1;}\n }\n index += line.length;\n\n return index;\n }\n\n private measureLine (value: string): number {\n const font = this.getTextFont();\n\n return this.measureText(value, this.getTextFontSize(), font.family, font.weight, font.style).width;\n }\n\n private getVerticalCaretIndex (direction: number): number {\n const lines = this.text.split('\\n');\n const caret = this.caretColumn;\n let lineStart = 0;\n let lineIndex = 0;\n\n for (; lineIndex < lines.length - 1; lineIndex++) {\n const lineEnd = lineStart + lines[lineIndex].length;\n\n if (caret <= lineEnd) {break;}\n lineStart = lineEnd + 1;\n }\n const column = caret - lineStart;\n const targetLine = Math.max(0, Math.min(lines.length - 1, lineIndex + direction));\n let targetStart = 0;\n\n for (let index = 0; index < targetLine; index++) {targetStart += lines[index].length + 1;}\n\n return targetStart + Math.min(column, lines[targetLine].length);\n }\n\n private ensureCaretLineVisible (): void {\n const margins = this.getTextStyleBox().getContentMargins();\n const font = this.getTextFont();\n const lineHeight = this.measureText(\n 'M', this.getTextFontSize(), font.family, font.weight, font.style,\n ).lineHeight;\n const visibleLines = Math.max(1, Math.floor((this.height - margins.top - margins.bottom) / lineHeight));\n const caretLine = this.text.slice(0, this.caretColumn).split('\\n').length - 1;\n\n if (caretLine < this.scrollLine) {this.scrollLine = caretLine;} else if (caretLine >= this.scrollLine + visibleLines) {this.scrollLine = caretLine - visibleLines + 1;}\n }\n\n protected override onTextValueChanged (): void {\n const lineCount = this.text.split('\\n').length;\n const caretLine = this.text.slice(0, this.caretColumn).split('\\n').length - 1;\n\n this.scrollLine = Math.max(0, Math.min(lineCount - 1, this.scrollLine));\n if (caretLine < this.scrollLine) {this.scrollLine = caretLine;}\n }\n\n override fromData (data: spec.TextEditData): void {\n super.fromData(data);\n if (data.text !== undefined) {this.text = data.text;}\n if (data.placeholderText !== undefined) {this.placeholderText = data.placeholderText;}\n if (data.editable !== undefined) {this.editable = data.editable;}\n if (data.maxLength !== undefined) {this.maxLength = data.maxLength;}\n }\n}\n","import { EventEmitter, effectsClass } from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventKey,\n math } from '@galacean/effects';\nimport { FocusMode } from '../core/enums';\nimport type { Control } from '../core/control';\nimport { PanelContainer } from '../layout/panel-container';\n\nexport type PopupEvent = {\n popupOpened: [],\n popupClosed: [],\n};\n\nexport abstract class Popup extends PanelContainer {\n static override readonly themeType: string = 'Popup';\n private readonly popupEventEmitter = new EventEmitter<PopupEvent>();\n\n constructor (engine: Engine) {\n super(engine);\n this.visible = false;\n this.focusMode = FocusMode.All;\n }\n\n onPopup<E extends keyof PopupEvent> (\n eventName: E,\n listener: EventEmitterListener<PopupEvent[E]>,\n ): void {\n this.popupEventEmitter.on(eventName, listener);\n }\n\n offPopup<E extends keyof PopupEvent> (\n eventName: E,\n listener: EventEmitterListener<PopupEvent[E]>,\n ): void {\n this.popupEventEmitter.off(eventName, listener);\n }\n\n popup (position: math.Vector2, source: Control | null = null): void {\n const root = source?.root ?? this.root;\n\n root?.popupControl(this, source, position);\n }\n\n hidePopup (): void {\n this.root?.closePopupControl(this);\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (event.keycode === 'Escape') {\n this.hidePopup();\n event.accept();\n }\n }\n\n override onPopupOpened (): void {\n this.popupEventEmitter.emit('popupOpened');\n }\n\n override onPopupClosed (): void {\n this.popupEventEmitter.emit('popupClosed');\n }\n\n override onDestroy (): void {\n this.root?.closePopupControl(this);\n }\n}\n\n@effectsClass('PopupPanel')\nexport class PopupPanel extends Popup {\n static override readonly themeType: string = 'PopupPanel';\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n EventEmitterListener,\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n Texture,\n spec,\n} from '@galacean/effects';\nimport type { ControlEvent } from '../core/control';\nimport { Popup } from './popup';\n\nexport type PopupMenuItemId = number | string;\n\nexport type PopupMenuItem = {\n id: PopupMenuItemId,\n text: string,\n icon?: Texture | null,\n disabled?: boolean,\n separator?: boolean,\n checked?: boolean,\n};\n\nexport type PopupMenuEvent = ControlEvent & {\n idPressed: [id: PopupMenuItemId],\n};\n\n@effectsClass('PopupMenu')\nexport class PopupMenu extends Popup {\n static override readonly themeType: string = 'PopupMenu';\n private readonly menuEventEmitter = new EventEmitter<PopupMenuEvent>();\n private readonly items: PopupMenuItem[] = [];\n private hoveredIndex = -1;\n\n override on<E extends keyof PopupMenuEvent> (\n eventName: E,\n listener: EventEmitterListener<PopupMenuEvent[E]>,\n ): void {\n if (eventName === 'idPressed') {\n this.menuEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName as never, listener as never);\n }\n }\n\n override off<E extends keyof PopupMenuEvent> (\n eventName: E,\n listener: EventEmitterListener<PopupMenuEvent[E]>,\n ): void {\n if (eventName === 'idPressed') {\n this.menuEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName as never, listener as never);\n }\n }\n\n addItem (text: string, id: PopupMenuItemId = this.items.length, icon: Texture | null = null): void {\n this.items.push({ id, text, icon });\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n\n addSeparator (text = ''): void {\n this.items.push({ id: `separator-${this.items.length}`, text, separator: true, disabled: true });\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n\n clear (): void {\n this.items.length = 0;\n this.hoveredIndex = -1;\n this.updateMinimumSize();\n this.updateDesiredSize();\n }\n\n getItemCount (): number { return this.items.length; }\n getItem (index: number): PopupMenuItem | undefined {\n const item = this.items[index];\n\n return item ? { ...item } : undefined;\n }\n\n setItemDisabled (index: number, disabled: boolean): void {\n if (this.items[index]) {this.items[index].disabled = disabled;}\n }\n\n setItemChecked (index: number, checked: boolean): void {\n if (this.items[index]) {this.items[index].checked = checked;}\n }\n\n override getMinimumSize (): math.Vector2 {\n const panel = this.getThemeStyleBox('panel').getContentMargins();\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const itemHeight = this.getThemeConstant('itemHeight');\n let width = this.getThemeConstant('horizontalPadding') * 2;\n let height = 0;\n\n for (const item of this.items) {\n if (item.separator) {\n height += this.getThemeConstant('separatorHeight');\n } else {\n width = Math.max(width, this.measureText(item.text, fontSize, font.family, font.weight, font.style).width\n + this.getThemeConstant('horizontalPadding') * 2 + this.getThemeConstant('iconWidth'));\n height += itemHeight;\n }\n }\n\n return new math.Vector2(width + panel.left + panel.right, height + panel.top + panel.bottom);\n }\n\n override getDesiredSize (): math.Vector2 {\n return this.getMinimumSize();\n }\n\n override draw (): void {\n super.draw();\n const panel = this.getThemeStyleBox('panel').getContentMargins();\n const font = this.getThemeFont('font');\n const fontSize = this.getThemeFontSize('fontSize');\n const itemHeight = this.getThemeConstant('itemHeight');\n const padding = this.getThemeConstant('horizontalPadding');\n const iconWidth = this.getThemeConstant('iconWidth');\n let y = panel.top;\n\n for (let index = 0; index < this.items.length; index++) {\n const item = this.items[index];\n\n if (item.separator) {\n const height = this.getThemeConstant('separatorHeight');\n\n this.drawStyleBox(\n this.getThemeStyleBox('separator'), panel.left + padding, y + height * 0.5,\n Math.max(0, this.width - panel.left - panel.right - padding * 2), 1,\n );\n y += height;\n continue;\n }\n if (index === this.hoveredIndex && !item.disabled) {\n this.drawStyleBox(\n this.getThemeStyleBox('hover'), panel.left, y,\n Math.max(0, this.width - panel.left - panel.right), itemHeight,\n );\n }\n if (item.checked) {\n this.drawText(panel.left + padding, y + 2, '✓', fontSize, this.getThemeColor('checkColor'),\n font.family, font.weight, font.style);\n }\n if (item.icon) {\n const iconSize = Math.min(itemHeight - 4, iconWidth);\n\n this.drawTexture(panel.left + padding, y + (itemHeight - iconSize) * 0.5, iconSize, iconSize, item.icon);\n }\n const measurement = this.measureText(item.text, fontSize, font.family, font.weight, font.style);\n\n this.drawText(\n panel.left + padding + iconWidth,\n y + (itemHeight - measurement.lineHeight) * 0.5,\n item.text,\n fontSize,\n this.getThemeColor(item.disabled ? 'fontDisabledColor' : 'fontColor'),\n font.family,\n font.weight,\n font.style,\n );\n y += itemHeight;\n }\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n this.hoveredIndex = this.getIndexAt(event.position.y);\n }\n\n override onMouseLeave (): void {\n this.hoveredIndex = -1;\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {return;}\n const index = this.getIndexAt(event.position.y);\n\n if (this.activateIndex(index)) {event.accept();}\n }\n\n override onKeyDown (event: InputEventKey): void {\n if (event.keycode === 'ArrowDown' || event.keycode === 'ArrowUp') {\n this.hoveredIndex = this.findEnabledIndex(this.hoveredIndex, event.keycode === 'ArrowDown' ? 1 : -1);\n event.accept();\n\n return;\n }\n if (event.keycode === 'Enter' || event.keycode === 'Space' || event.keycode === ' ') {\n if (this.activateIndex(this.hoveredIndex)) {event.accept();}\n\n return;\n }\n super.onKeyDown(event);\n }\n\n override onPopupOpened (): void {\n this.hoveredIndex = this.findEnabledIndex(-1, 1);\n super.onPopupOpened();\n }\n\n private getIndexAt (positionY: number): number {\n const panel = this.getThemeStyleBox('panel').getContentMargins();\n const itemHeight = this.getThemeConstant('itemHeight');\n let y = panel.top;\n\n for (let index = 0; index < this.items.length; index++) {\n const height = this.items[index].separator ? this.getThemeConstant('separatorHeight') : itemHeight;\n\n if (positionY >= y && positionY < y + height) {return index;}\n y += height;\n }\n\n return -1;\n }\n\n private activateIndex (index: number): boolean {\n const item = this.items[index];\n\n if (!item || item.disabled || item.separator) {return false;}\n this.menuEventEmitter.emit('idPressed', item.id);\n this.hidePopup();\n\n return true;\n }\n\n private findEnabledIndex (origin: number, direction: number): number {\n if (this.items.length === 0) {return -1;}\n let index = origin < 0 && direction < 0 ? this.items.length : origin;\n\n for (let count = 0; count < this.items.length; count++) {\n index = (index + direction + this.items.length) % this.items.length;\n const item = this.items[index];\n\n if (!item.disabled && !item.separator) {return index;}\n }\n\n return -1;\n }\n\n override fromData (data: spec.PopupMenuData): void {\n super.fromData(data);\n if (data.items !== undefined) {\n this.clear();\n for (const item of data.items) {\n if (item.separator) {\n this.addSeparator(item.text);\n } else {\n this.addItem(item.text, item.id);\n const index = this.items.length - 1;\n\n this.setItemDisabled(index, item.disabled ?? false);\n this.setItemChecked(index, item.checked ?? false);\n }\n }\n }\n }\n}\n","import { EventEmitter, effectsClass, math } from '@galacean/effects';\nimport type { Engine, EventEmitterListener, spec } from '@galacean/effects';\nimport { FocusMode } from '../core/enums';\nimport { Button } from './button';\nimport type { ContentInsets } from './button';\nimport { ButtonDrawMode, HorizontalAlignment } from './enums';\nimport type { PopupMenuEvent, PopupMenuItemId } from './popup-menu';\nimport { PopupMenu } from './popup-menu';\n\nconst OPTION_ARROW_GRID_SIZE = 12;\n\n@effectsClass('MenuButton')\nexport class MenuButton extends Button {\n static override readonly themeType: string = 'MenuButton';\n readonly popupMenu: PopupMenu;\n private readonly openMenu = () => this.showPopup();\n\n constructor (engine: Engine, text = '') {\n super(engine, text);\n this.focusMode = FocusMode.Accessibility;\n this.popupMenu = new PopupMenu(engine);\n this.on('pressed', this.openMenu);\n }\n\n showPopup (): void {\n const transform = this.getGlobalTransform2D().elements;\n\n this.popupMenu.setSize(Math.max(this.width, this.popupMenu.getBoundDesiredSize().x), this.popupMenu.getBoundDesiredSize().y);\n this.popupMenu.popup(new math.Vector2(transform[6], transform[7] + this.height), this);\n }\n\n override onDestroy (): void {\n this.off('pressed', this.openMenu);\n this.popupMenu.dispose();\n super.onDestroy();\n }\n\n override fromData (data: spec.MenuButtonData): void {\n super.fromData(data);\n if (data.items !== undefined) {this.popupMenu.fromData({ items: data.items });}\n }\n}\n\nexport type OptionButtonEvent = {\n itemSelected: [id: PopupMenuItemId],\n};\n\n@effectsClass('OptionButton')\nexport class OptionButton extends MenuButton {\n static override readonly themeType: string = 'OptionButton';\n private readonly optionEventEmitter = new EventEmitter<OptionButtonEvent>();\n private _selected = -1;\n private readonly menuSelected = (id: PopupMenuItemId) => this.selectId(id, true);\n\n constructor (engine: Engine) {\n super(engine);\n this.focusMode = FocusMode.All;\n this.textAlignment = HorizontalAlignment.Left;\n this.popupMenu.on('idPressed', this.menuSelected as EventEmitterListener<PopupMenuEvent['idPressed']>);\n }\n\n protected override getContentInsets (): ContentInsets {\n const insets = super.getContentInsets();\n const arrow = this.getThemeIcon('arrow');\n const arrowWidth = arrow?.width ?? this.getThemeConstant('arrowSize');\n\n return {\n ...insets,\n right: insets.right + arrowWidth + Math.max(0, this.getThemeConstant('hSeparation')),\n };\n }\n\n protected override drawDecoration (mode: ButtonDrawMode): void {\n const arrow = this.getThemeIcon('arrow');\n const size = arrow?.width ?? this.getThemeConstant('arrowSize');\n const height = arrow?.height ?? size;\n const margin = this.getThemeConstant('arrowMargin');\n const x = Math.max(0, this.width - margin - size);\n const y = Math.floor(Math.abs(this.height - height) * 0.5);\n const color = this.getArrowColor(mode);\n\n if (arrow) {\n this.drawTexture(x, y, size, height, arrow, undefined, color);\n\n return;\n }\n const scale = size / OPTION_ARROW_GRID_SIZE;\n const startX = x + 2 * scale;\n const startY = y + 4 * scale;\n const middleX = x + 6 * scale;\n const middleY = y + 8 * scale;\n const endX = x + 10 * scale;\n const thickness = 2 * scale;\n const radius = thickness * 0.5;\n\n this.drawLine(startX, startY, middleX, middleY, color, thickness);\n this.drawLine(middleX, middleY, endX, startY, color, thickness);\n this.fillCircle(startX, startY, radius, color);\n this.fillCircle(middleX, middleY, radius, color);\n this.fillCircle(endX, startY, radius, color);\n }\n\n private getArrowColor (mode: ButtonDrawMode): math.Color {\n if (this.getThemeConstant('modulateArrow') === 0) {\n return this.getThemeColor('iconTint');\n }\n switch (mode) {\n case ButtonDrawMode.Pressed: return this.getThemeColor('fontPressedColor');\n case ButtonDrawMode.Hover: return this.getThemeColor('fontHoverColor');\n case ButtonDrawMode.HoverPressed: return this.getThemeColor('fontHoverPressedColor');\n case ButtonDrawMode.Disabled: return this.getThemeColor('fontDisabledColor');\n default: return this.hasFocus(true)\n ? this.getThemeColor('fontFocusColor')\n : this.getThemeColor('fontColor');\n }\n }\n\n get selected (): number { return this._selected; }\n set selected (value: number) { this.select(value, false); }\n\n onOption<E extends keyof OptionButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<OptionButtonEvent[E]>,\n ): void {\n this.optionEventEmitter.on(eventName, listener);\n }\n\n offOption<E extends keyof OptionButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<OptionButtonEvent[E]>,\n ): void {\n this.optionEventEmitter.off(eventName, listener);\n }\n\n addItem (text: string, id: PopupMenuItemId = this.popupMenu.getItemCount()): void {\n this.popupMenu.addItem(text, id);\n if (this._selected === -1) {this.select(0, false);}\n }\n\n clear (): void {\n this.popupMenu.clear();\n this._selected = -1;\n this.text = '';\n }\n\n select (index: number, signal = true): void {\n const item = this.popupMenu.getItem(index);\n\n if (!item || item.disabled || item.separator) {return;}\n this._selected = index;\n this.text = item.text;\n if (signal) {this.optionEventEmitter.emit('itemSelected', item.id);}\n }\n\n selectId (id: PopupMenuItemId, signal = true): void {\n for (let index = 0; index < this.popupMenu.getItemCount(); index++) {\n if (this.popupMenu.getItem(index)?.id === id) {\n this.select(index, signal);\n\n return;\n }\n }\n }\n\n override onDestroy (): void {\n this.popupMenu.off('idPressed', this.menuSelected as EventEmitterListener<PopupMenuEvent['idPressed']>);\n super.onDestroy();\n }\n\n override fromData (data: spec.OptionButtonData): void {\n super.fromData(data);\n if (data.selected !== undefined) {this.select(data.selected, false);}\n }\n}\n","import {\n EventEmitter,\n MouseButton,\n effectsClass,\n math,\n} from '@galacean/effects';\nimport type {\n Engine,\n EventEmitterListener,\n InputEventMouseButton,\n InputEventMouseMotion,\n spec,\n} from '@galacean/effects';\nimport { Control, SizeFlags } from '../core/control';\nimport type { ControlEvent } from '../core/control';\nimport { MouseFilter } from '../core/enums';\nimport { GridContainer } from '../layout/grid-container';\nimport { VBoxContainer } from '../layout/box-container';\nimport { HSlider } from './slider';\nimport { Label } from './label';\nimport { LineEdit } from './line-edit';\nimport { PopupPanel } from './popup';\nimport { Button } from './button';\nimport type { ContentInsets } from './button';\nimport type { ButtonDrawMode } from './enums';\nimport type { BaseButtonEvent } from './base-button';\n\ntype HSV = { h: number, s: number, v: number };\n\nexport type ColorPickerEvent = ControlEvent & {\n colorChanged: [color: math.Color],\n};\n\nexport type ColorPickerButtonEvent = BaseButtonEvent & {\n colorChanged: [color: math.Color],\n};\n\nclass ColorPlane extends Control {\n hue = 0;\n saturation = 1;\n value = 1;\n changed?: (saturation: number, value: number) => void;\n private dragging = false;\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Stop;\n this.setCustomMinimumSize(180, 120);\n }\n\n override draw (): void {\n const columns = 20;\n const rows = 12;\n\n for (let row = 0; row < rows; row++) {\n for (let column = 0; column < columns; column++) {\n const saturation = column / (columns - 1);\n const value = 1 - row / (rows - 1);\n\n this.fillRect(\n column * this.width / columns,\n row * this.height / rows,\n this.width / columns + 1,\n this.height / rows + 1,\n hsvToColor(this.hue, saturation, value, 1),\n );\n }\n }\n const x = this.saturation * this.width;\n const y = (1 - this.value) * this.height;\n\n this.drawCircle(x, y, 5, new math.Color(0, 0, 0, 1), 3);\n this.drawCircle(x, y, 4, new math.Color(1, 1, 1, 1), 1);\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left) {\n this.dragging = true;\n this.updateValue(event.position);\n event.accept();\n }\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n if (this.dragging) {\n this.updateValue(event.position);\n event.accept();\n }\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left && this.dragging) {\n this.dragging = false;\n this.updateValue(event.position);\n event.accept();\n }\n }\n\n private updateValue (position: math.Vector2): void {\n this.saturation = clamp01(position.x / Math.max(1, this.width));\n this.value = 1 - clamp01(position.y / Math.max(1, this.height));\n this.changed?.(this.saturation, this.value);\n }\n}\n\nclass HueBar extends Control {\n value = 0;\n changed?: (value: number) => void;\n private dragging = false;\n\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Stop;\n this.setCustomMinimumSize(180, 18);\n }\n\n override draw (): void {\n const count = 24;\n\n for (let index = 0; index < count; index++) {\n this.fillRect(\n index * this.width / count, 0, this.width / count + 1, this.height,\n hsvToColor(index / (count - 1), 1, 1, 1),\n );\n }\n this.drawLine(this.value * this.width, 0, this.value * this.width, this.height,\n new math.Color(1, 1, 1, 1), 2);\n }\n\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left) {\n this.dragging = true;\n this.updateValue(event.position.x);\n event.accept();\n }\n }\n\n override onMouseMove (event: InputEventMouseMotion): void {\n if (this.dragging) {\n this.updateValue(event.position.x);\n event.accept();\n }\n }\n\n override onMouseUp (event: InputEventMouseButton): void {\n if (event.buttonIndex === MouseButton.Left && this.dragging) {\n this.dragging = false;\n this.updateValue(event.position.x);\n event.accept();\n }\n }\n\n private updateValue (position: number): void {\n this.value = clamp01(position / Math.max(1, this.width));\n this.changed?.(this.value);\n }\n}\n\n@effectsClass('ColorPicker')\nexport class ColorPicker extends VBoxContainer {\n static override readonly themeType: string = 'ColorPicker';\n private readonly colorEventEmitter = new EventEmitter<ColorPickerEvent>();\n private readonly plane: ColorPlane;\n private readonly hueBar: HueBar;\n private readonly alphaSlider: HSlider;\n private readonly channelFields: LineEdit[] = [];\n private readonly hexField: LineEdit;\n private readonly currentColor = new math.Color(1, 1, 1, 1);\n private syncing = false;\n private _editAlpha = true;\n\n constructor (engine: Engine) {\n super(engine);\n this.setThemeConstantOverride('separation', 6);\n this.plane = new ColorPlane(engine);\n this.plane.setSizeFlags(SizeFlags.ExpandFill, SizeFlags.ExpandFill);\n this.plane.parent = this;\n this.hueBar = new HueBar(engine);\n this.hueBar.setSizeFlags(SizeFlags.ExpandFill, SizeFlags.Fill);\n this.hueBar.parent = this;\n this.alphaSlider = new HSlider(engine);\n this.alphaSlider.minValue = 0;\n this.alphaSlider.maxValue = 1;\n this.alphaSlider.step = 0.01;\n this.alphaSlider.setCustomMinimumSize(180, 18);\n this.alphaSlider.parent = this;\n const channels = new GridContainer(engine);\n\n channels.columns = 4;\n channels.setThemeConstantOverride('horizontalSeparation', 4);\n channels.setThemeConstantOverride('verticalSeparation', 4);\n channels.parent = this;\n for (const name of ['R', 'G', 'B', 'A']) {\n const index = this.channelFields.length;\n const row = new VBoxContainer(engine);\n const label = new Label(engine, name);\n const field = new LineEdit(engine);\n\n row.setThemeConstantOverride('separation', 2);\n label.parent = row;\n field.parent = row;\n row.parent = channels;\n field.on('textSubmitted', value => this.submitChannel(index, value));\n this.channelFields.push(field);\n }\n this.hexField = new LineEdit(engine);\n this.hexField.placeholderText = '#RRGGBBAA';\n this.hexField.parent = this;\n this.hexField.on('textSubmitted', value => this.submitHex(value));\n this.plane.changed = (saturation, value) => {\n const hsv = colorToHsv(this.currentColor);\n\n this.setColor(hsvToColor(hsv.h, saturation, value, this.currentColor.a), true);\n };\n this.hueBar.changed = hue => {\n const hsv = colorToHsv(this.currentColor);\n\n this.setColor(hsvToColor(hue, hsv.s, hsv.v, this.currentColor.a), true);\n };\n this.alphaSlider.on('valueChanged', value => {\n if (!this.syncing) {\n this.setColor(new math.Color(this.currentColor.r, this.currentColor.g, this.currentColor.b, value), true);\n }\n });\n this.syncEditors();\n }\n\n get color (): math.Color { return this.currentColor.clone(); }\n set color (value: math.Color) { this.setColor(value, false); }\n get editAlpha (): boolean { return this._editAlpha; }\n set editAlpha (value: boolean) {\n if (this._editAlpha !== value) {\n this._editAlpha = value;\n this.syncEditors();\n }\n }\n\n override on<E extends keyof ColorPickerEvent> (\n eventName: E,\n listener: EventEmitterListener<ColorPickerEvent[E]>,\n ): void {\n if (eventName === 'colorChanged') {\n this.colorEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof ColorPickerEvent> (\n eventName: E,\n listener: EventEmitterListener<ColorPickerEvent[E]>,\n ): void {\n if (eventName === 'colorChanged') {\n this.colorEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n setColor (value: math.Color, signal = false): void {\n if (this.currentColor.equals(value)) {return;}\n this.currentColor.copyFrom(value);\n this.syncEditors();\n if (signal) {this.colorEventEmitter.emit('colorChanged', this.currentColor.clone());}\n }\n\n private syncEditors (): void {\n this.syncing = true;\n const hsv = colorToHsv(this.currentColor);\n\n this.plane.hue = hsv.h;\n this.plane.saturation = hsv.s;\n this.plane.value = hsv.v;\n this.hueBar.value = hsv.h;\n this.alphaSlider.setValueNoSignal(this.currentColor.a);\n const values = [this.currentColor.r, this.currentColor.g, this.currentColor.b, this.currentColor.a];\n\n for (let index = 0; index < this.channelFields.length; index++) {\n this.channelFields[index].text = String(Math.round(values[index] * 255));\n this.channelFields[index].editable = index < 3 || this._editAlpha;\n }\n this.hexField.text = colorToHex(this.currentColor, this._editAlpha);\n this.alphaSlider.visible = this._editAlpha;\n this.syncing = false;\n }\n\n private submitChannel (index: number, value: string): void {\n const number = Number(value);\n\n if (!Number.isFinite(number)) {return;}\n const channels = [this.currentColor.r, this.currentColor.g, this.currentColor.b, this.currentColor.a];\n\n channels[index] = clamp01(number / 255);\n this.setColor(new math.Color(channels[0], channels[1], channels[2], channels[3]), true);\n }\n\n private submitHex (value: string): void {\n const parsed = colorFromHex(value, 1);\n\n if (parsed) {\n if (!this._editAlpha) {parsed.a = this.currentColor.a;}\n this.setColor(parsed, true);\n }\n }\n\n override fromData (data: spec.ColorPickerData): void {\n super.fromData(data);\n if (data.color !== undefined) {\n this.currentColor.copyFrom(data.color);\n this.syncEditors();\n }\n if (data.editAlpha !== undefined) {\n this.editAlpha = data.editAlpha;\n this.syncEditors();\n }\n }\n}\n\n@effectsClass('ColorPickerButton')\nexport class ColorPickerButton extends Button {\n static override readonly themeType: string = 'ColorPickerButton';\n readonly picker: ColorPicker;\n readonly popupPanel: PopupPanel;\n private readonly colorEventEmitter = new EventEmitter<ColorPickerButtonEvent>();\n private readonly openPicker = () => this.showPicker();\n\n constructor (engine: Engine) {\n super(engine);\n this.popupPanel = new PopupPanel(engine);\n this.picker = new ColorPicker(engine);\n this.picker.setCustomMinimumSize(250, 330);\n this.picker.parent = this.popupPanel;\n this.picker.on('colorChanged', color => this.colorEventEmitter.emit('colorChanged', color));\n this.on('pressed', this.openPicker);\n }\n\n get color (): math.Color { return this.picker.color; }\n set color (value: math.Color) { this.picker.color = value; }\n get editAlpha (): boolean { return this.picker.editAlpha; }\n set editAlpha (value: boolean) {\n this.picker.editAlpha = value;\n }\n\n override on<E extends keyof ColorPickerButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<ColorPickerButtonEvent[E]>,\n ): void {\n if (eventName === 'colorChanged') {\n this.colorEventEmitter.on(eventName, listener);\n } else {\n super.on(eventName, listener as never);\n }\n }\n\n override off<E extends keyof ColorPickerButtonEvent> (\n eventName: E,\n listener: EventEmitterListener<ColorPickerButtonEvent[E]>,\n ): void {\n if (eventName === 'colorChanged') {\n this.colorEventEmitter.off(eventName, listener);\n } else {\n super.off(eventName, listener as never);\n }\n }\n\n showPicker (): void {\n const transform = this.getGlobalTransform2D().elements;\n\n this.popupPanel.setSize(270, 350);\n this.popupPanel.popup(new math.Vector2(transform[6], transform[7] + this.height), this);\n }\n\n protected override getContentInsets (): ContentInsets {\n const base = super.getContentInsets();\n\n return { ...base, left: base.left + Math.max(18, this.height - base.top - base.bottom) + 6 };\n }\n\n protected override drawDecoration (_mode: ButtonDrawMode): void {\n const margins = this.getNormalContentInsets();\n const size = Math.max(12, this.height - margins.top - margins.bottom);\n\n this.fillRect(margins.left, (this.height - size) * 0.5, size, size, this.picker.color);\n this.drawRect(margins.left + 0.5, (this.height - size) * 0.5 + 0.5, size - 1, size - 1,\n this.getThemeColor('swatchBorderColor'), 1);\n }\n\n override onDestroy (): void {\n this.off('pressed', this.openPicker);\n this.popupPanel.dispose();\n super.onDestroy();\n }\n\n override fromData (data: spec.ColorPickerButtonData): void {\n super.fromData(data);\n if (data.color !== undefined) {this.picker.fromData({ color: data.color });}\n if (data.editAlpha !== undefined) {this.editAlpha = data.editAlpha;}\n }\n}\n\nfunction clamp01 (value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction colorToHsv (color: math.Color): HSV {\n const max = Math.max(color.r, color.g, color.b);\n const min = Math.min(color.r, color.g, color.b);\n const delta = max - min;\n let hue = 0;\n\n if (delta > 0) {\n if (max === color.r) {hue = ((color.g - color.b) / delta) % 6;} else if (max === color.g) {hue = (color.b - color.r) / delta + 2;} else {hue = (color.r - color.g) / delta + 4;}\n hue /= 6;\n if (hue < 0) {hue += 1;}\n }\n\n return { h: hue, s: max === 0 ? 0 : delta / max, v: max };\n}\n\nfunction hsvToColor (hue: number, saturation: number, value: number, alpha: number): math.Color {\n const section = Math.floor(hue * 6);\n const fraction = hue * 6 - section;\n const p = value * (1 - saturation);\n const q = value * (1 - fraction * saturation);\n const t = value * (1 - (1 - fraction) * saturation);\n\n switch (section % 6) {\n case 0: return new math.Color(value, t, p, alpha);\n case 1: return new math.Color(q, value, p, alpha);\n case 2: return new math.Color(p, value, t, alpha);\n case 3: return new math.Color(p, q, value, alpha);\n case 4: return new math.Color(t, p, value, alpha);\n default: return new math.Color(value, p, q, alpha);\n }\n}\n\nfunction colorToHex (color: math.Color, alpha: boolean): string {\n const values = [color.r, color.g, color.b, color.a].map(value => {\n return Math.round(clamp01(value) * 255).toString(16).padStart(2, '0').toUpperCase();\n });\n\n return `#${values.slice(0, alpha ? 4 : 3).join('')}`;\n}\n\nfunction colorFromHex (value: string, fallbackAlpha: number): math.Color | null {\n const source = value.trim().replace('#', '');\n\n if (!/^[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(source)) {return null;}\n const number = Number.parseInt(source, 16);\n const hasAlpha = source.length === 8;\n\n return new math.Color(\n ((number >> (hasAlpha ? 24 : 16)) & 0xff) / 255,\n ((number >> (hasAlpha ? 16 : 8)) & 0xff) / 255,\n ((number >> (hasAlpha ? 8 : 0)) & 0xff) / 255,\n hasAlpha ? (number & 0xff) / 255 : fallbackAlpha,\n );\n}\n","import { registerPlugin } from '@galacean/effects';\nimport { GUIPlugin } from './plugin';\n\nexport * from './core';\nexport * from './components';\nexport * from './layout/enums';\nexport * from './layout/box-container';\nexport * from './layout/grid-container';\nexport * from './layout/margin-container';\nexport * from './layout/center-container';\nexport * from './layout/aspect-ratio-container';\nexport * from './layout/panel-container';\nexport * from './layout/separator';\nexport * from './scroll/enums';\nexport * from './scroll/range';\nexport * from './scroll/scroll-bar';\nexport * from './scroll/scroll-container';\nexport * from './theme';\nexport * from './controls';\nexport * from './plugin';\n\nregisterPlugin('gui', GUIPlugin);\n\n/** GUI plugin package version. Importing this package registers the GUI runtime and native fallback theme. */\nexport const version = __VERSION__;\n"],"names":["_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","value","writable","configurable","_is_native_reflect_construct","result","Boolean","valueOf","call","Reflect","construct","_","_construct","Parent","args","Class","a","push","apply","instance","Function","bind","arguments","_get_prototype_of","getPrototypeOf","_wrap_native_super","_cache","Map","undefined","toString","indexOf","has","get","set","Wrapper","enumerable","_assert_this_initialized","self","ReferenceError","_defineProperties","target","props","i","length","descriptor","defineProperty","key","_create_class","Constructor","protoProps","staticProps","_instanceof","left","right","Symbol","hasInstance","_array_like_to_array","arr","len","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","next","isArray","_unsupported_iterable_to_array","minLen","n","slice","name","from","test","done","__decorate","decorators","desc","d","c","r","getOwnPropertyDescriptor","decorate","_extends","assign","source","hasOwnProperty","MouseFilter","MouseBehaviorRecursive","FocusMode","FocusBehaviorRecursive","CursorShape","SuppressedError","ThemeItemType","PatchStretchMode","SizeFlags","GrowDirection","CanvasRenderMode","Orientation","LayoutAlignment","AspectRatioStretchMode","ScrollMode","HorizontalAlignment","VerticalAlignment","AutowrapMode","TextOverflow","TextureExpandMode","TextureStretchMode","AxisStretchMode","Side","ButtonDrawMode","ButtonActionMode","ProgressFillMode","_obj","Color","math","Vector2","ZERO_MARGINS","top","bottom","cloneMargins","marginsFromData","data","finite","Number","isFinite","RangeError","nonNegative","Math","max","cloneThemeValue","clone","family","weight","style","StyleBox","eventEmitter","EventEmitter","contentMargins","readOnly","on","eventName","listener","off","getContentMargins","makeReadOnly","setContentMargins","assertMutable","keys","some","_this","notifyChanged","getMinimumSize","_proto","emit","Error","isReadOnly","StyleBoxEmpty","draw","shared","StyleBoxFlat","backgroundColor","CLEAR","borderColor","borderWidths","cornerRadii","getBackgroundColor","getBorderColor","getBorderWidths","getCornerRadii","setBackgroundColor","equals","copyFrom","setBorderColor","setBorderWidths","setCornerRadii","topLeft","topRight","bottomRight","bottomLeft","graphics","rect","width","height","hasRoundedCorners","drawRounded","fillRectangle","x","y","border","min","radii","adapted","adaptMarginPair","createInfiniteMargins","drawRoundedFill","inner","innerRadii","drawRoundedRing","outerRect","outerRadii","innerRect","color","outer","getRoundedPoints","index","fillTriangle","first","second","available","firstMaximum","secondMaximum","sum","factor","POSITIVE_INFINITY","points","centerX","centerY","current","_step","corners","PI","_iterator","cx","cy","radius","start","angle","cos","sin","StyleBoxTexture","_texture","sourceRect","patchMargins","tint","WHITE","_horizontalAxisStretchMode","_verticalAxisStretchMode","_drawCenter","getSourceRect","getPatchMargins","getTint","setSourceRect","clearSourceRect","setPatchMargins","setTint","_this_sourceRect","texture","drawNinePatch","sourceX","sourceY","sourceWidth","sourceHeight","marginLeft","marginTop","marginRight","marginBottom","horizontalMode","horizontalAxisStretchMode","verticalMode","verticalAxisStretchMode","drawCenter","ThemeRegistry","registerType","type","baseType","definitions","types","getTypeChain","includes","previous","storedDefinitions","definition","defaultValue","hasType","_this_types_get","_this_types_get_baseType","visited","Set","add","getDefault","itemType","getItemDefinition","dependency","affectsLayout","getItemDefinitions","includeInherited","chain","reverse","_this_types_get_definitions","_step1","_iterator1","Theme","values","variations","styleBoxReferences","batchDepth","changePending","layoutChangePending","styleBoxChanged","batch","callback","setTypeVariation","variation","clearTypeVariation","dependent","base","delete","hasTypeVariation","getTypeVariationBase","getTypeDependencies","setColor","setItem","getColor","getItem","hasColor","hasItem","clearColor","clearItem","setConstant","getConstant","hasConstant","clearConstant","setFont","getFont","hasFont","clearFont","setFontSize","getFontSize","hasFontSize","clearFontSize","setIcon","getIcon","hasIcon","clearIcon","setStyleBox","getStyleBox","hasStyleBox","clearStyleBox","_this_values_get_get","_this_values_get","_this_values_get_get_has","categories","items","size","releaseStyleBox","clear","styleBox","setCollectionFromData","engine","colors","constants","fonts","fontSizes","icons","styleBoxes","g","b","_step2","_iterator2","fontFromData","_step3","_iterator3","_step4","_iterator4","findObject","_step5","_iterator5","styleBoxFromData","stored","retainStyleBox","_this_styleBoxReferences_get","count","fromData","theme","remaining","progressed","flat","position","patch","content","themeFallbacks","constant","font","fontSize","icon","Matrix3","normalizeMeasuredMinimum","normalizeMeasuredMaximum","combineMaximum","measured","custom","clampToMaximum","maximum","ANCHOR_PRESET_TABLE","centerLeft","centerTop","centerRight","centerBottom","center","leftWide","topWide","rightWide","bottomWide","vcenterWide","hcenterWide","fullRect","Control","owner","children","anchorMin","anchorMax","offsetMin","offsetMax","pivot","scale","shear","mouseForcePassScrollEvents","clipContents","_parent","_visible","_enabled","_mouseFilter","Stop","_mouseBehaviorRecursive","Inherited","_focusMode","None","_focusBehaviorRecursive","_defaultCursorShape","Arrow","_rotation","transformDirty","cachedTransform","disposed","customMinimumSize","customMaximumSize","minimumSizeCache","desiredSizeCache","maximumSizeCache","pendingMeasurementChanges","_horizontalSizeFlags","_verticalSizeFlags","_stretchRatio","_horizontalGrowDirection","_verticalGrowDirection","_theme","themeOwnerNode","_themeTypeVariation","themeOverrides","themeCache","overrideStyleBoxReferences","attachedThemeChanged","propagateThemeChanged","overrideStyleBoxChanged","getInheritedTheme","_this_themeOwnerNode","_this_themeOwnerNode_theme","getThemeOwnerNode","hasThemeOwnerNode","getThemeType","themeType","getThemeColor","resolveThemeItem","getThemeConstant","Constant","getThemeFont","Font","getThemeFontSize","FontSize","getThemeIcon","Icon","getThemeStyleBox","hasThemeColor","found","hasThemeConstant","hasThemeFont","hasThemeFontSize","hasThemeIcon","hasThemeStyleBox","setThemeColorOverride","setThemeOverride","setThemeConstantOverride","setThemeFontOverride","setThemeFontSizeOverride","setThemeIconOverride","setThemeStyleBoxOverride","removeThemeColorOverride","removeThemeOverride","removeThemeConstantOverride","removeThemeFontOverride","removeThemeFontSizeOverride","removeThemeIconOverride","removeThemeStyleBoxOverride","hasThemeColorOverride","hasThemeOverride","hasThemeConstantOverride","hasThemeFontOverride","hasThemeFontSizeOverride","hasThemeIconOverride","hasThemeStyleBoxOverride","clearThemeOverrides","releaseOverrideStyleBox","hasFocus","visibleOnly","_this_root","_this_root_guiControlHasFocus","root","guiControlHasFocus","drawStyleBox","addChild","child","parent","removeChild","getChildIndex","changeChildIndex","newIndex","oldIndex","splice","controlTreeChanged","addChildInternal","removeChildInternal","setPosition","keepOffsets","computeAnchors","getParentRect","computeOffsets","updateLayout","setSize","setRect","nextRect","setSizeFlags","horizontal","vertical","isInteger","getDesiredSize","getMaximumSize","getCombinedMinimumSize","getCachedMinimumSize","getCombinedMaximumSize","getCachedMaximumSize","getBoundMinimumSize","minimum","getBoundDesiredSize","desired","getCachedDesiredSize","setCustomMinimumSize","updateMinimumSize","setCustomMaximumSize","updateMaximumSize","invalidateMeasurementChanges","updateDesiredSize","invokeMeasurementChanges","changes","MeasurementChange","changed","scheduleMeasurementChanges","Container","invalidateMeasurementsFromChild","setScale","markTransformDirty","setRotation","degrees","setShear","setPivot","setAnchorMin","setAnchorMax","setOffsetMin","setOffsetMax","getRect","getTransform2D","radians","shearX","tan","shearY","pivotX","pivotY","tx","ty","setAnchorsPreset","preset","minX","minY","maxX","maxY","setOffsetsPreset","margin","parentSize","setAnchorsAndOffsetsPreset","getGlobalTransform2D","local","multiplyMatrices","hasPoint","point","intersectsChildContent","getEffectiveMouseFilter","enabledInHierarchy","isMouseRecursiveEnabled","mouseFilter","Ignore","getFocusModeWithOverride","isFocusRecursiveEnabled","focusMode","getCursorShape","defaultCursorShape","focus","hideFocus","grabControlFocus","grabFocus","grabClickFocus","grabControlClickFocus","releaseFocus","releaseControlFocus","warpMouse","matrix","elements","warpControlMouse","makePositionLocal","transform","abs","determinant","invert","getLocalMousePosition","getMousePosition","update","deltaTime","enabled","isDisposed","onDestroy","drawInternal","visibleInHierarchy","pushTransform","drawChildren","popTransform","drawLine","x1","y1","x2","y2","thickness","drawPolyline","drawLines","drawBezier","x3","y3","x4","y4","drawTriangle","drawRect","drawRectangle","drawCircle","fillRect","fillCircle","drawTexture","region","options","drawText","text","fontFamily","fontWeight","fontStyle","measureText","onMouseEnter","location","onMouseMove","event","onMouseLeave","onMouseWheel","onMouseDown","onMouseUp","onTouchDown","onTouchMove","onTouchUp","onKeyDown","onKeyUp","onGotFocus","onLostFocus","onScrollBegin","onScrollEnd","onPopupOpened","onPopupClosed","invokeGetDragData","getDragData","invokeCanDropData","canDropData","invokeDropData","dropData","dispose","_this__theme","_this_parent","_this_parent_size","resolveBoundedAxis","horizontalGrowDirection","verticalGrowDirection","applyBounds","pushClipRect","popClipRect","onThemeChanged","queueSort","onRootChanged","previousRoot","nextRoot","getThemeDependencies","explicitType","nativeType","requestedType","themeTypeVariation","concat","getFallbackThemeDependencies","cacheKey","cached","override","queryMatchesCurrentType","_this_themeOverrides_get","candidate","getThemeFallback","entry","retainOverrideStyleBox","_this_themeOverrides_get_has","_this_overrideStyleBoxReferences_get","includeChildren","propagateThemeOwner","ownerNode","notify","assignToControl","pending","queueMeasurementChange","locationChanged","sizeChanged","requestedSize","minimumSize","maximumSize","growDirection","finiteSize","difference","adjustedPosition","assertGrowDirection","queuePendingLayouts","queuePendingMeasurements","notifyRootChanged","_this_parent_size_clone","parentRect","mouseBehaviorRecursive","_this_parent_isMouseRecursiveEnabled","Enabled","focusBehaviorRecursive","_this_parent_isFocusRecursiveEnabled","rotation","horizontalSizeFlags","verticalSizeFlags","stretchRatio","applyThemeOverridesFromData","_this__parent","_this__parent1","controlRemoved","item","_this_owner","_this_owner_item","indexInParent","_this_parent_getChildIndex","visible","controlStateChanged","_this_parent_visibleInHierarchy","_this_parent_enabledInHierarchy","updateMouseCursorState","_this_parent_root","RootControl","_this_parent_getThemeOwnerNode","normalized","trim","effectsClass","sortPending","childLayoutChanged","invalidateMeasurementsAndQueueSort","ownSizeChanged","queueLayout","invokeSortChildren","sortChildren","previousIndex","wasChild","bindChild","unbindChild","fitChildInRect","fitAxis","getLayoutChildren","filter","flags","wantsFill","rootEventEmitter","cursorNames","Ibeam","PointingHand","Cross","Wait","Busy","Drag","CanDrop","Forbidden","Vsize","Hsize","Bdiagsize","Fdiagsize","Move","Vsplit","Hsplit","Help","getButtonMask","button","MouseButton","Left","MouseButtonMask","Right","Middle","Xbutton1","Xbutton2","isWheelButton","WheelUp","WheelRight","PopupLayer","buttonIndex","closeTop","accept","CanvasRootControl","canvas","inputDisabled","_this_canvas_item","receivesEvents","isActive","CanvasContainer","sortCanvases","sort","order","isVisible","WindowRootControl","popupStack","dragThreshold","lastInput","dirtyContainers","dirtyMeasurements","gui","mouseFocus","mouseClickGrabber","mouseFocusMask","mouseOver","mouseOverHierarchy","touchFocus","keyFocus","dragAccum","dragAttempted","dragging","dragData","dragMouseOver","dragSuccessful","lastMousePosition","NEGATIVE_INFINITY","sendingMouseEnterExit","mouseOverUpdatePending","canvases","popupLayer","closePopupControl","control","pushInput","cleanupInternalState","processGUIInput","postGrabClickFocus","isInputHandled","_this_lastInput","_this_lastInput_isAccepted","isAccepted","guiGetFocusOwner","isFocusTargetUsable","guiReleaseFocus","guiIsDragging","guiGetDragData","guiIsDragSuccessful","guiCancelDrag","endDragging","notifyFocusOwnerChanged","isControlValid","queueMicrotask","updateMouseOver","isControlUsable","updateCursor","dropControlState","updateMouseOverHierarchy","popupControl","originalTheme","focusOwner","restoreFocus","restoreFocusHidden","findIndex","state","removed","removedIndex","restore","container","cancelPointerInput","dropMouseFocus","dropMouseOver","onCanvasBlur","mask","_i","_iter","InputEventMouseButton","device","InputEvent","deviceIdInternal","pressed","globalPosition","callControlInput","cancelPointerPress","touchIndex","_this_gui_touchFocus_get","controlBelongsToSubtree","resize","render","flushLayout","begin","end","round","measurements","getControlDepth","depth","InputEventKey","callGUIInput","InputEventMouse","processMouseButton","InputEventMouseMotion","processMouseMotion","InputEventScreenTouch","processScreenTouch","InputEventScreenDrag","processScreenDrag","isPressed","setZero","findClickFocus","finishDrop","relative","origin","subtract","beginDragging","findDropTarget","findInputControl","pointerEvent","localEvent","xformedBy","getGlobalInverse","forcePassWheel","forcePassTouch","isReleased","_this_findControlAtPosition","findControlAtPosition","positionInParent","skipSelf","parentEnabled","parentMouseEnabled","localPosition","toControlLocal","mouseEnabled","buildHoverHierarchy","applyMouseOver","common","toLocal","hierarchy","mode","Click","All","successful","cursor","_this_gui_keyFocus","subtree","findCanvasRoot","GUIWindowComponent","Component","updateWindowRoot","windowRoot","renderWindowRoot","resizeWindowRoot","getBoundingClientRect","eventSystem","UICanvas","renderMode","_order","registered","rootControl","onEnable","register","onDisable","unregister","destroyCanvas","guiWindow","getComponent","_this_item","GUIPlugin","Plugin","onEngineCreated","addComponent","onCompositionCreating","composition","sceneRoot","assertEnumValue","reduce","total","growSlots","sizes","ceilings","weights","extra","integerPixels","active","map","_loop","totalWeight","capped","ceiling","share","growth","assigned","pixelError","activeIndex","exactGrowth","floor","UIControl","controlNode","linkedItemTransform","linkedControl","syncingLocation","itemTransformChanged","syncItemLocationToControl","controlLocationChanged","syncControlLocationToItem","onAwake","syncControl","onParentChanged","onOrderInParentChanged","syncControlOrder","disposeControl","unlinkControl","unbindLocationSync","attachControl","resolveParent","copyItemLocationToControl","bindLocationSync","orderInParent","parentItem","fallbackParentGetDelegate","uiControl","itemTransform","_this_linkedItemTransform","_this_linkedControl","z","getClass","uiControlData","hasControl","BoxContainer","_orientation","Horizontal","_alignment","Begin","_reverse","measureChildren","alignment","orientation","availableMain","availableCross","separation","gapTotal","slotSpace","minimums","getMainSize","maximums","every","isMainExpanded","usedMain","mainSize","useDesired","main","cross","childSize","getCrossSize","Expand","invalidateMeasurement","Vertical","End","HBoxContainer","VBoxContainer","GridContainer","_columns","measureGrid","columnCount","columns","rowCount","ceil","columnMetrics","collectTrackMetrics","rowMetrics","horizontalSeparation","verticalSeparation","columnSizes","allocateTracks","rowSizes","columnPositions","getTrackPositions","rowPositions","column","row","rows","fill","unbounded","expanded","track","childMinimum","childDesired","childMaximum","minimumValue","desiredValue","maximumValue","metrics","trackSpace","positions","MarginContainer","CenterContainer","_useTopLeft","useTopLeft","AspectRatioContainer","_ratio","_stretchMode","Fit","_horizontalAlignment","Center","_verticalAlignment","baseWidth","ratio","stretchMode","WidthControlsHeight","HeightControlsWidth","Cover","baseHeight","getAlignedOffset","horizontalAlignment","verticalAlignment","assertFinite","PanelContainer","margins","Separator","HSeparator","VSeparator","Range","_rounded","suppressSignals","rangeEventEmitter","createSharedRange","owners","setValue","calculateValue","valuesEqual","notifyValueChanged","setValueNoSignal","valueChanged","setMinValue","minValue","maxValue","page","clamp","setMaxValue","setStep","step","setPage","setAsRatio","exponentialRatio","log2","pow","span","getAsRatio","range","attachShared","unshare","allowGreater","allowLesser","isNaN","calculated","toPrecision","rounded","ScrollBar","scrollBarEventEmitter","_customStep","highlight","decrementActive","incrementActive","dragPosition","dragRatio","Accessibility","scroll","amount","scrollTo","decrementSize","getButtonAxisSize","incrementSize","incrementCrossSize","getButtonCrossSize","scrollMinimum","grabberMinimum","getGrabberMinimumSize","getCrossStartPadding","getCrossEndPadding","axisSize","decrementState","incrementState","trackLength","grabber","getGrabberRect","grabberStyle","scrollStyle","drawButtonIcon","updateHighlight","getAxis","area","getAreaSize","getAxisSize","grabberOffset","getGrabberOffset","grabberSize","getGrabberSize","trackPosition","getTrackStartMargin","getIncrement","getPageIncrement","WheelDown","direction","wheelIncrement","increment","keycode","customStep","getTrackSize","scrollAxisMinimum","offset","crossStart","crossSize","getButtonIcon","_this_getThemeIcon","shouldShowBar","contentSize","viewportSize","ShowAlways","Auto","Reserve","MaximizeFirst","decelerate","sign","assertScrollMode","Disabled","pageDivisor","PAGE_DIVISOR","HScrollBar","VScrollBar","ScrollContainer","scrollContainerEventEmitter","_horizontalScrollMode","_verticalScrollMode","_scrollHorizontalByDefault","_deadzone","_followFocus","focusRoot","touchDecelerating","beyondDeadzone","dragSpeed","dragFrom","lastDragAccum","motionSampleTime","viewportWidth","viewportHeight","scrollMoved","cancelTouchDrag","focusOwnerChanged","followFocus","isContentDescendant","ensureControlVisible","horizontalBar","verticalBar","getHScrollBar","getVScrollBar","Infinity","corner","global","horizontalDifference","verticalDifference","measureContent","previousHorizontal","previousVertical","horizontalEnabled","horizontalScrollMode","verticalEnabled","verticalScrollMode","swapAxes","scrollHorizontalByDefault","shiftPressed","verticalHidden","ShowNever","horizontalHidden","horizontalAmount","verticalAmount","WheelLeft","deadzone","notifyContentScroll","canceled","seconds","updateInertia","updateDragVelocity","_this_focusRoot","_this_focusRoot1","getLargestContentSize","layout","resolveLayout","horizontalVisible","verticalVisible","horizontalConstrained","verticalConstrained","verticalReserved","horizontalReserved","horizontalSize","verticalSize","nextHorizontalReserved","nextVerticalReserved","invalidateScrollLayout","INERTIA_DECELERATION","notifyEnd","horizontalCustomStep","verticalCustomStep","hScroll","vScroll","palette","disabledText","panel","normal","hover","disabled","accent","accentHover","white","background","borderWidth","contentHorizontal","contentVertical","empty","fontItems","isBreakSpace","character","isCJKLike","codePoint","codePointAt","countFillSpaces","fontColor","lineSpacing","hoverPressed","fontFocusColor","fontHoverColor","fontPressedColor","fontHoverPressedColor","fontDisabledColor","iconTint","iconFocusTint","iconHoverTint","iconPressedTint","iconHoverPressedTint","iconDisabledTint","iconSeparation","alignToLargestStyleBox","checked","unchecked","checkedDisabled","uncheckedDisabled","radioChecked","radioUnchecked","radioCheckedDisabled","radioUncheckedDisabled","checkedColor","uncheckedColor","checkedDisabledColor","markColor","markDisabledColor","markUncheckedColor","markUncheckedDisabledColor","markOutlineColor","markSize","markSeparation","checkVOffset","buttonCheckedColor","buttonUncheckedColor","switchColor","switchDisabledColor","switchOffColor","switchKnobColor","switchWidth","switchHeight","switchSeparation","separator","fontReadOnlyColor","fontPlaceholderColor","selectionColor","caretColor","caretWidth","checkColor","itemHeight","separatorHeight","horizontalPadding","iconWidth","arrow","arrowSize","arrowMargin","hSeparation","modulateArrow","swatchBorderColor","fillHighlight","grabberHighlight","grabberDisabled","trackThickness","scrollFocus","grabberPressed","decrement","decrementHighlight","decrementPressed","incrementHighlight","incrementPressed","paddingLeft","paddingTop","paddingRight","paddingBottom","Label","_text","Top","_autowrapMode","Off","_textOverflow","Visible","layoutDirty","layoutWidth","NaN","natural","createNaturalLayout","autowrapMode","textOverflow","getMinimumLineWidth","paragraphCount","split","lineHeight","getTextLayout","clipped","gap","getVerticalGap","getTextStartY","lines","line","Ellipsis","ellipsize","Fill","measurement","drawFilledLine","drawThemedText","getTextStartX","invalidateTextLayout","measure","constrainedWidth","createLayout","paragraphs","emptyMeasurement","paragraph","wrapParagraph","maximumWidth","characters","cursorWidth","breakEnd","breakNext","advance","advances","join","Arbitrary","Word","findWordEnd","replace","skipBreakSpaces","WordSmart","segment","lineWidth","Bottom","ellipsisMeasurement","used","spaces","FULL_REGION","u0","v0","u1","v1","TextureRect","_expandMode","KeepSize","Scale","flipH","flipV","controlSizeChanged","_this_texture","_this_texture1","_this_texture_width","_this_texture_height","expandMode","IgnoreSize","FitWidth","FitWidthProportional","FitHeight","FitHeightProportional","drawRegion","Tile","drawTiled","Keep","KeepCentered","KeepAspect","drawAspect","KeepAspectCentered","KeepAspectCovered","drawCovered","centered","sourceRatio","destinationRatio","tileWidth","tileHeight","verticalRatio","horizontalRatio","NinePatchRect","ninePatchEventEmitter","Stretch","_regionRect","setRegionRect","setPatchMargin","side","getPatchMargin","_this_patchMargins_side","regionRect","patchMarginLeft","patchMarginTop","patchMarginRight","patchMarginBottom","ColorRect","Panel","ButtonGroup","buttons","allowUnpress","getPressedButton","buttonPressed","getButtons","select","signal","emitPressed","peer","setPressedFromGroup","updateButton","BaseButton","buttonEventEmitter","_disabled","_toggleMode","_buttonPressed","_buttonMask","_buttonGroup","hovered","pressing","pressInside","mousePressing","keyboardPressing","cancelPress","actionMode","Release","keepPressedOutside","setPressedNoSignal","setPressed","isHovered","isPressing","getDrawMode","HoverPressed","Hover","Pressed","Normal","hasButton","buttonMask","beginPress","activate","finishPress","echo","isActivationKey","buttonGroup","setPressedDirect","inside","Press","wasPressing","toggleMode","Button","clipText","expandIcon","textAlignment","iconAlignment","iconVerticalAlignment","measureButton","getStyleBoxName","drawDecoration","drawContent","getContentInsets","getBaseContentInsets","getNormalContentInsets","_this_icon","_this_icon1","_this_icon_width","_this_icon_height","hasText","iconHeight","textWidth","textHeight","insets","contentWidth","contentHeight","naturalText","iconSize","getIconSize","reservedIconWidth","sourceText","ellipsizeText","iconX","textAreaX","textX","getAlignedX","textY","textAreaY","iconY","getAlignedY","getIconTint","getFontColor","ellipsisWidth","_icon","Checkbox","getMarkSize","yOffset","radio","iconName","fallbackY","fillRoundedMark","fillCheckMark","px","py","leftInner","fallback","CheckButton","getSwitchSize","switchSize","fallbackX","activeColor","trackColor","knobX","names","Slider","sliderEventEmitter","_editable","dragInitialValue","scrollable","highlighted","editable","fillStyle","fillWidth","fillY","updateDrag","beginDrag","endDrag","insideGrabber","initialValue","getRatioAt","getUsableLength","HSlider","VSlider","ProgressBar","_showPercentage","_fillMode","BeginToEnd","styleMinimum","showPercentage","fillMinimum","fillMode","progress","EndToBegin","TopToBottom","BottomToTop","TextInput","textEventEmitter","_placeholderText","_maxLength","selectionStart","selectionEnd","selectionAnchor","selecting","selectingWords","wordSelectionStart","wordSelectionEnd","textarea","textareaFocusTimer","composing","undoStack","redoStack","onBeforeInput","pushUndo","onTextareaInput","setText","onTextareaSelect","selectionDirection","onCompositionStart","onCompositionEnd","onTextareaKeyDown","multiline","isComposing","preventDefault","submit","onTextareaBlur","selectAll","setSelection","deselect","getSelectedText","syncTextareaSelection","cancelTextareaFocus","getCharacterIndex","doubleClick","_this_getWordRange","getWordRange","moveCaret","focusTextarea","command","ctrlPressed","metaPressed","toLowerCase","copySelection","replaceSelection","pasteClipboard","redo","undo","getPreviousCharacterIndex","getNextCharacterIndex","getLineStart","getLineEnd","erase","altPressed","unicode","String","fromCodePoint","activateTextarea","removeTextarea","getDisplayText","getSelectionRange","extendSelection","getTextFont","getTextFontSize","getTextColor","getTextStyleBox","drawTextBackground","drawSelection","drawCaret","hasSelection","onTextValueChanged","limited","_this_getSelectionRange","allowed","caret","lastIndexOf","snapshot","shift","pop","navigator","clipboard","writeText","readText","then","matchAll","RegExp","match","document","createElement","maxLength","wrap","setAttribute","cssText","addEventListener","body","appendChild","scheduleTextareaFocus","removeEventListener","remove","setSelectionRange","setTimeout","clearTimeout","activeElement","preventScroll","placeholderText","removeAttribute","caretColumn","isLowSurrogate","charCodeAt","isHighSurrogate","LineEdit","scrollOffset","_secret","_secretCharacter","display","getVisibleText","shown","full","updateScrollOffset","getAlignedTextX","prefix","measurePrefix","selected","fullWidth","boundaries","getCharacterBoundaries","secret","secretCharacter","repeat","visiblePrefix","TextEdit","scrollLine","textIndex","lineIndex","lineStart","lineEnd","selectedStart","selectedEnd","measureLine","getVerticalCaretIndex","ensureCaretLineVisible","targetLine","targetStart","visibleLines","caretLine","lineCount","Popup","popupEventEmitter","onPopup","offPopup","popup","hidePopup","PopupPanel","PopupMenu","menuEventEmitter","hoveredIndex","addItem","id","addSeparator","getItemCount","setItemDisabled","setItemChecked","padding","getIndexAt","activateIndex","findEnabledIndex","positionY","MenuButton","openMenu","showPopup","popupMenu","OptionButton","optionEventEmitter","_selected","menuSelected","selectId","arrowWidth","getArrowColor","startX","startY","middleX","middleY","endX","onOption","offOption","_this_popupMenu_getItem","ColorPlane","hue","saturation","hsvToColor","updateValue","clamp01","HueBar","colorToHsv","delta","h","s","v","alpha","section","fraction","q","t","ColorPicker","VBoxContainer1","colorEventEmitter","channelFields","currentColor","syncing","_editAlpha","plane","ExpandFill","hueBar","alphaSlider","channels","label","field","submitChannel","hexField","submitHex","hsv","syncEditors","padStart","toUpperCase","number","parsed","colorFromHex","fallbackAlpha","parseInt","hasAlpha","editAlpha","ColorPickerButton","openPicker","showPicker","popupPanel","picker","_mode","registerPlugin"],"mappings":"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"}