@flowgram.ai/utils 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/math/const.ts","../src/math/Vector2.ts","../src/math/Point.ts","../src/math/shapes/Rectangle.ts","../src/math/shapes/Circle.ts","../src/math/Matrix.ts","../src/math/ObservablePoint.ts","../src/math/Transform.ts","../src/math/wrap.ts","../src/math/angle.ts","../src/objects.ts","../src/types.ts","../src/disposable.ts","../src/event.ts","../src/disposable-collection.ts","../src/cancellation.ts","../src/promise-util.ts","../src/compare.ts","../src/cache.ts","../src/schema/schema.ts","../src/schema/schema-transform.ts","../src/schema/schema-base.ts","../src/dom-utils.ts","../src/id.ts","../src/array.ts","../src/inversify-utils.ts","../src/request-with-memo.ts","../src/compose.ts","../src/contribution-provider.ts","../src/add-event-listener.ts","../src/logger.ts","../src/decoration-style.ts","../src/hooks/use-refresh.ts"],"sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport * from './math/index';\nexport * from './objects';\nexport * from './types';\nexport * from './event';\nexport * from './disposable';\nexport * from './disposable-collection';\nexport * from './cancellation';\nexport * from './promise-util';\nexport * from './cache';\nexport * from './compare';\nexport * from './schema/index';\nexport * from './dom-utils';\nexport * from './id';\nexport * from './array';\nexport { bindContributions } from './inversify-utils';\nexport * from './request-with-memo';\nexport * from './compose';\nexport { ContributionProvider, bindContributionProvider } from './contribution-provider';\nexport * from './add-event-listener';\nexport * from './logger';\nexport { DecorationStyle } from './decoration-style';\nexport { useRefresh } from './hooks/use-refresh';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const { PI } = Math;\n\n/** Two Pi. */\nexport const PI_2 = PI * 2;\n\n/** Conversion factor for converting radians to degrees. */\nexport const RAD_TO_DEG = 180 / PI;\n\n/** Conversion factor for converting degrees to radians. */\nexport const DEG_TO_RAD = PI / 180;\n\n/** Constants that identify shapes. */\nexport enum SHAPES {\n /** Polygon */\n POLY = 0,\n /** Rectangle */\n RECT = 1,\n /** Circle */\n CIRC = 2,\n /** Ellipse */\n ELIP = 3,\n /** Rounded Rectangle */\n RREC = 4,\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport class Vector2 {\n constructor(public x = 0, public y = 0) {}\n\n /**\n * 向量减法\n */\n sub(v: Vector2): Vector2 {\n return new Vector2(this.x - v.x, this.y - v.y);\n }\n\n /**\n * 向量点乘\n */\n dot(v: Vector2): number {\n return this.x * v.x + this.y * v.y;\n }\n\n /**\n * 向量叉乘\n */\n // cross(v: Vector2): number {\n // }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { IPoint } from './IPoint';\n\n/**\n * The Point object represents a location in a two-dimensional coordinate system, where x represents\n * the horizontal axis and y represents the vertical axis.\n *\n * @class\n * @memberof PIXI\n * @implements IPoint\n */\nexport class Point implements IPoint {\n constructor(public x = 0, public y = 0) {}\n\n /**\n * Creates a clone of this point\n *\n * @return {Point} a copy of the point\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Copies x and y from the given point\n *\n * @param {IPoint} p - The point to copy from\n * @returns {this} Returns itself.\n */\n copyFrom(p: IPoint): this {\n this.set(p.x, p.y);\n\n return this;\n }\n\n /**\n * Copies x and y into the given point\n *\n * @param {IPoint} p - The point to copy.\n * @returns {IPoint} Given point with values updated\n */\n copyTo<T extends IPoint>(p: T): T {\n p.x = this.x;\n p.y = this.y;\n\n return p;\n }\n\n /**\n * Returns true if the given point is equal to this point\n *\n * @param {IPoint} p - The point to check\n * @returns {boolean} Whether the given point equal to this point\n */\n equals(p: IPoint): boolean {\n return p.x === this.x && p.y === this.y;\n }\n\n /**\n * Sets the point to a new x and y position.\n * If y is omitted, both x and y will be set to x.\n *\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=x] - position of the point on the y axis\n * @returns {this} Returns itself.\n */\n set(x = 0, y = x): this {\n this.x = x;\n this.y = y;\n\n return this;\n }\n}\n\nexport namespace Point {\n export const EMPTY: IPoint = { x: 0, y: 0 };\n\n /**\n * 获取两点间的距离\n * @param p1\n * @param p2\n */\n export function getDistance(p1: IPoint, p2: IPoint): number {\n return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2);\n }\n\n /**\n * 获取两点间的中间点\n * @param p1\n * @param p2\n */\n export function getMiddlePoint(p1: IPoint, p2: IPoint): IPoint {\n return getRatioPoint(p1, p2, 0.5);\n }\n\n /**\n * 按一定比例,获取两点间的中间点\n * @param p1\n * @param p2\n */\n export function getRatioPoint(p1: IPoint, p2: IPoint, ratio: number): IPoint {\n return {\n x: p1.x + ratio * (p2.x - p1.x),\n y: p1.y + ratio * (p2.y - p1.y),\n };\n }\n\n export function fixZero(output: IPoint): IPoint {\n // fix: -0\n if (output.x === 0) output.x = 0;\n if (output.y === 0) output.y = 0;\n return output;\n }\n\n /**\n * 往目标点移动 distance 距离\n * @param current\n * @param direction\n */\n export function move(current: IPoint, m: Partial<IPoint>): IPoint {\n return {\n x: current.x + (m.x || 0),\n y: current.y + (m.y || 0),\n };\n }\n\n /**\n * 往目标点移动 distance 距离\n * @param current\n * @param direction\n */\n export function moveDistanceToDirection(\n current: IPoint,\n direction: IPoint,\n distance: number,\n ): IPoint {\n const deltaX = direction.x - current.x;\n const deltaY = direction.y - current.y;\n\n const distanceX = deltaX === 0 ? 0 : Math.sqrt(distance ** 2 / (1 + deltaY ** 2 / deltaX ** 2));\n const moveX = deltaX > 0 ? distanceX : -distanceX;\n const distanceY = deltaX === 0 ? distance : Math.abs((distanceX * deltaY) / deltaX);\n const moveY = deltaY > 0 ? distanceY : -distanceY;\n\n return {\n x: current.x + moveX,\n y: current.y + moveY,\n };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Vector2 } from '../Vector2';\nimport { Point } from '../Point';\nimport { type IPoint } from '../IPoint';\nimport { SHAPES } from '../const';\nimport { type PaddingSchema } from '../../schema';\n\n/**\n * Size object, contains width and height\n */\nexport type ISize = { width: number; height: number };\n\n/**\n * Rectangle object is an area defined by its position, as indicated by its top-left corner\n * point (x, y) and by its width and its height.\n */\nexport class Rectangle {\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n */\n public readonly type = SHAPES.RECT;\n\n /**\n * @param [x] - The X coordinate of the upper-left corner of the rectangle\n * @param [y] - The Y coordinate of the upper-left corner of the rectangle\n * @param [width] - The overall width of this rectangle\n * @param [height] - The overall height of this rectangle\n */\n constructor(public x = 0, public y = 0, public width = 0, public height = 0) {}\n\n // static _empty: Rectangle = Object.freeze(new Rectangle(0, 0, 0, 0))\n\n /**\n * A constant empty rectangle. MUST NOT modify properties!\n */\n static get EMPTY(): Rectangle {\n return new Rectangle(0, 0, 0, 0);\n }\n\n get left(): number {\n return this.x;\n }\n\n get right(): number {\n return this.x + this.width;\n }\n\n get top(): number {\n return this.y;\n }\n\n get bottom(): number {\n return this.y + this.height;\n }\n\n /**\n * Creates a clone of this Rectangle.\n *\n * @return a copy of the rectangle\n */\n clone(): Rectangle {\n return new Rectangle(this.x, this.y, this.width, this.height);\n }\n\n /**\n * Copies another rectangle to this one.\n *\n * @return Returns itself.\n */\n copyFrom(rectangle: Rectangle): Rectangle {\n this.x = rectangle.x;\n this.y = rectangle.y;\n this.width = rectangle.width;\n this.height = rectangle.height;\n\n return this;\n }\n\n /**\n * Copies this rectangle to another one.\n *\n * @return Returns given rectangle.\n */\n copyTo(rectangle: Rectangle): Rectangle {\n rectangle.x = this.x;\n rectangle.y = this.y;\n rectangle.width = this.width;\n rectangle.height = this.height;\n\n return rectangle;\n }\n\n /**\n * Checks whether the x and y coordinates given are contained within this Rectangle\n *\n * @param x - The X coordinate of the point to test\n * @param y - The Y coordinate of the point to test\n * @return Whether the x/y coordinates are within this Rectangle\n */\n contains(x: number, y: number): boolean {\n if (this.width <= 0 || this.height <= 0) {\n return false;\n }\n\n if (x >= this.x && x <= this.right) {\n if (y >= this.y && y <= this.bottom) {\n return true;\n }\n }\n\n return false;\n }\n\n isEqual(rect: Rectangle): boolean {\n return (\n this.x === rect.x &&\n this.y === rect.y &&\n this.width === rect.width &&\n this.height === rect.height\n );\n }\n\n containsRectangle(rect: Rectangle): boolean {\n return (\n rect.left >= this.left &&\n rect.right <= this.right &&\n rect.top >= this.top &&\n rect.bottom <= this.bottom\n );\n }\n\n /**\n * Pads the rectangle making it grow in all directions.\n * If paddingY is omitted, both paddingX and paddingY will be set to paddingX.\n *\n * @param [paddingX] - The horizontal padding amount.\n * @param [paddingY] - The vertical padding amount.\n */\n pad(paddingX = 0, paddingY = paddingX): this {\n this.x -= paddingX;\n this.y -= paddingY;\n\n this.width += paddingX * 2;\n this.height += paddingY * 2;\n\n return this;\n }\n\n /**\n * Fits this rectangle around the passed one.\n * Intersection 交集\n */\n fit(rectangle: Rectangle): this {\n const x1 = Math.max(this.x, rectangle.x);\n const x2 = Math.min(this.x + this.width, rectangle.x + rectangle.width);\n const y1 = Math.max(this.y, rectangle.y);\n const y2 = Math.min(this.y + this.height, rectangle.y + rectangle.height);\n\n this.x = x1;\n this.width = Math.max(x2 - x1, 0);\n this.y = y1;\n this.height = Math.max(y2 - y1, 0);\n\n return this;\n }\n\n /**\n * Enlarges rectangle that way its corners lie on grid\n */\n ceil(resolution = 1, precision = 0.001): this {\n const x2 = Math.ceil((this.x + this.width - precision) * resolution) / resolution;\n const y2 = Math.ceil((this.y + this.height - precision) * resolution) / resolution;\n\n this.x = Math.floor((this.x + precision) * resolution) / resolution;\n this.y = Math.floor((this.y + precision) * resolution) / resolution;\n\n this.width = x2 - this.x;\n this.height = y2 - this.y;\n\n return this;\n }\n\n /**\n * Enlarges this rectangle to include the passed rectangle.\n */\n enlarge(rectangle: Rectangle): this {\n const x1 = Math.min(this.x, rectangle.x);\n const x2 = Math.max(this.x + this.width, rectangle.x + rectangle.width);\n const y1 = Math.min(this.y, rectangle.y);\n const y2 = Math.max(this.y + this.height, rectangle.y + rectangle.height);\n\n this.x = x1;\n this.width = x2 - x1;\n this.y = y1;\n this.height = y2 - y1;\n\n return this;\n }\n\n get center(): IPoint {\n return {\n x: this.x + this.width / 2,\n y: this.y + this.height / 2,\n };\n }\n\n get rightBottom(): IPoint {\n return {\n x: this.right,\n y: this.bottom,\n };\n }\n\n get leftBottom(): IPoint {\n return {\n x: this.left,\n y: this.bottom,\n };\n }\n\n get rightTop(): IPoint {\n return {\n x: this.right,\n y: this.top,\n };\n }\n\n get leftTop(): IPoint {\n return {\n x: this.left,\n y: this.top,\n };\n }\n\n get bottomCenter(): IPoint {\n return {\n x: this.x + this.width / 2,\n y: this.bottom,\n };\n }\n\n get topCenter(): IPoint {\n return {\n x: this.x + this.width / 2,\n y: this.top,\n };\n }\n\n get rightCenter(): IPoint {\n return {\n x: this.right,\n y: this.y + this.height / 2,\n };\n }\n\n get leftCenter(): IPoint {\n return {\n x: this.left,\n y: this.y + this.height / 2,\n };\n }\n\n update(fn: (rect: Rectangle) => Rectangle): Rectangle {\n return fn(this);\n }\n\n get crossDistance(): number {\n return Point.getDistance(this.leftTop, this.rightBottom);\n }\n\n toStyleStr(): string {\n return `left: ${this.x}px; top: ${this.y}px; width: ${this.width}px; height: ${this.height}px;`;\n }\n\n withPadding(padding: PaddingSchema) {\n this.x -= padding.left;\n this.y -= padding.top;\n this.width += padding.left + padding.right;\n this.height += padding.top + padding.bottom;\n return this;\n }\n\n withoutPadding(padding: PaddingSchema) {\n this.x += padding.left;\n this.y += padding.top;\n this.width = this.width - padding.left - padding.right;\n this.height = this.height - padding.top - padding.bottom;\n return this;\n }\n\n withHeight(height: number) {\n this.height = height;\n return this;\n }\n\n clearSpace() {\n this.width = 0;\n this.height = 0;\n return this;\n }\n}\n\nexport enum RectangleAlignType {\n ALIGN_LEFT = 'align-left',\n ALIGN_CENTER = 'align-center',\n ALIGN_RIGHT = 'align-right',\n ALIGN_TOP = 'align-top',\n ALIGN_MIDDLE = 'align-middle',\n ALIGN_BOTTOM = 'align-bottom',\n DISTRIBUTE_HORIZONTAL = 'distribute-horizontal',\n DISTRIBUTE_VERTICAL = 'distribute-vertical',\n}\n\nexport enum RectangleAlignTitle {\n ALIGN_LEFT = '左对齐',\n ALIGN_CENTER = '左右居中对齐',\n ALIGN_RIGHT = '右对齐',\n ALIGN_TOP = '上对齐',\n ALIGN_MIDDLE = '上下居中对齐',\n ALIGN_BOTTOM = '下对齐',\n DISTRIBUTE_HORIZONTAL = '水平平均分布',\n DISTRIBUTE_VERTICAL = '垂直平均分布',\n}\n\n// `branch not covered`\n// @see https://github.com/istanbuljs/nyc/issues/1209\nexport namespace Rectangle {\n /**\n * 矩形对齐\n */\n export function align(rectangles: Rectangle[], type: RectangleAlignType): Rectangle[] {\n if (rectangles.length <= 1) return rectangles;\n switch (type) {\n /**\n * 下对齐\n */\n case RectangleAlignType.ALIGN_BOTTOM:\n const maxBottom = Math.max(...rectangles.map((r) => r.bottom));\n rectangles.forEach((rect) => {\n rect.y = maxBottom - rect.height;\n });\n break;\n /**\n * 左右居中对齐\n */\n case RectangleAlignType.ALIGN_CENTER:\n const centerX = enlarge(rectangles).center.x;\n rectangles.forEach((rect) => {\n rect.x = centerX - rect.width / 2;\n });\n break;\n /**\n * 左对齐\n */\n case RectangleAlignType.ALIGN_LEFT:\n const minLeft = Math.min(...rectangles.map((r) => r.left));\n rectangles.forEach((rect) => {\n rect.x = minLeft;\n });\n break;\n /**\n * 上下居中对齐\n */\n case RectangleAlignType.ALIGN_MIDDLE:\n const centerY = enlarge(rectangles).center.y;\n rectangles.forEach((rect) => {\n rect.y = centerY - rect.height / 2;\n });\n break;\n /**\n * 右对齐\n */\n case RectangleAlignType.ALIGN_RIGHT:\n const maxRight = Math.max(...rectangles.map((r) => r.right));\n rectangles.forEach((rect) => {\n rect.x = maxRight - rect.width;\n });\n break;\n /**\n * 上对齐\n */\n case RectangleAlignType.ALIGN_TOP:\n const minTop = Math.min(...rectangles.map((r) => r.top));\n rectangles.forEach((rect) => {\n rect.y = minTop;\n });\n break;\n /**\n * 水平平均分布\n */\n case RectangleAlignType.DISTRIBUTE_HORIZONTAL:\n // 只支持大于三个\n if (rectangles.length <= 2) break;\n const sort = rectangles.slice().sort((r1, r2) => r1.left - r2.left);\n const bounds = enlarge(rectangles);\n const space =\n rectangles.reduce((s, rect) => s - rect.width, bounds.width) / (rectangles.length - 1);\n sort.reduce((left, rect) => {\n rect.x = left;\n return left + rect.width + space;\n }, bounds.x);\n break;\n /**\n * 垂直平均分布\n */\n case RectangleAlignType.DISTRIBUTE_VERTICAL:\n if (rectangles.length <= 2) break;\n const sort2 = rectangles.slice().sort((r1, r2) => r1.top - r2.top);\n const bounds2 = enlarge(rectangles);\n const space2 =\n rectangles.reduce((s, rect) => s - rect.height, bounds2.height) / (rectangles.length - 1);\n sort2.reduce((top, rect) => {\n rect.y = top;\n return top + rect.height + space2;\n }, bounds2.y);\n break;\n default:\n break;\n }\n return rectangles;\n }\n\n /**\n * 获取所有矩形的外围最大边框\n */\n export function enlarge(rectangles: Rectangle[]): Rectangle {\n const result = Rectangle.EMPTY.clone();\n if (!rectangles.length) return result;\n const lefts: number[] = [];\n const tops: number[] = [];\n const rights: number[] = [];\n const bottoms: number[] = [];\n rectangles.forEach((r) => {\n lefts.push(r.left);\n rights.push(r.right);\n bottoms.push(r.bottom);\n tops.push(r.top);\n });\n // 使用原生的 apply 减少一次复制\n // eslint-disable-next-line prefer-spread\n const left = Math.min.apply(Math, lefts);\n // eslint-disable-next-line prefer-spread\n const right = Math.max.apply(Math, rights);\n // eslint-disable-next-line prefer-spread\n const top = Math.min.apply(Math, tops);\n // eslint-disable-next-line prefer-spread\n const bottom = Math.max.apply(Math, bottoms);\n result.x = left;\n result.width = right - left;\n result.y = top;\n result.height = bottom - top;\n return result;\n }\n\n /**\n * 判断矩形相交\n *\n * @param [direction] 判断单一方向\n */\n export function intersects(\n target1: Rectangle,\n target2: Rectangle,\n direction?: 'horizontal' | 'vertical'\n ): boolean {\n const left1 = target1.left;\n const top1 = target1.top;\n const right1 = target1.right;\n const bottom1 = target1.bottom;\n const left2 = target2.left;\n const top2 = target2.top;\n const right2 = target2.right;\n const bottom2 = target2.bottom;\n\n if (direction === 'horizontal') return right1 > left2 && left1 < right2;\n if (direction === 'vertical') return bottom1 > top2 && top1 < bottom2;\n if (right1 > left2 && left1 < right2) {\n if (bottom1 > top2 && top1 < bottom2) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * 使用 OBB 算法判断两个旋转矩形是否相交\n * @param rotate1 单位 radian\n * @param rotate2 单位 radian\n */\n export function intersectsWithRotation(\n rect1: Rectangle,\n rotate1: number,\n rect2: Rectangle,\n rotate2: number\n ): boolean {\n const obb1 = new OBBRect(rect1.center, rect1.width, rect1.height, rotate1);\n const obb2 = new OBBRect(rect2.center, rect2.width, rect2.height, rotate2);\n const nv = obb1.centerPoint.sub(obb2.centerPoint);\n const axisA1 = obb1.axesX;\n if (\n obb1.getProjectionRadius(axisA1) + obb2.getProjectionRadius(axisA1) <=\n Math.abs(nv.dot(axisA1))\n )\n return false;\n const axisA2 = obb1.axesY;\n if (\n obb1.getProjectionRadius(axisA2) + obb2.getProjectionRadius(axisA2) <=\n Math.abs(nv.dot(axisA2))\n )\n return false;\n const axisB1 = obb2.axesX;\n if (\n obb1.getProjectionRadius(axisB1) + obb2.getProjectionRadius(axisB1) <=\n Math.abs(nv.dot(axisB1))\n )\n return false;\n const axisB2 = obb2.axesY;\n if (\n obb1.getProjectionRadius(axisB2) + obb2.getProjectionRadius(axisB2) <=\n Math.abs(nv.dot(axisB2))\n )\n return false;\n return true;\n }\n /**\n * 判断指定 rect 是否在 viewport 可见\n *\n * @param rotation rect 旋转,单位 radian\n * @param isContains 整个 bounds 是否全部可见\n */\n export function isViewportVisible(\n rect: Rectangle,\n viewport: Rectangle,\n rotation = 0,\n isContains = false\n ): boolean {\n if (isContains) {\n return viewport.containsRectangle(rect);\n }\n if (rotation === 0) return Rectangle.intersects(rect, viewport);\n return Rectangle.intersectsWithRotation(rect, rotation, viewport, 0);\n }\n\n /**\n * 保证bounds 永远在 viewport 里边\n *\n * @param bounds\n * @param viewport\n * @param padding 距离 viewport 的安全边界\n */\n export function setViewportVisible(\n bounds: Rectangle,\n viewport: Rectangle,\n padding = 0\n ): Rectangle {\n const { left: tLeft, right: tRight, top: tTop, bottom: tBottom, width, height } = bounds;\n const { left: vLeft, right: vRight, top: vTop, bottom: vBottom } = viewport;\n if (tLeft <= vLeft) {\n // 最左边\n bounds.x = vLeft + padding;\n } else if (tRight >= vRight) {\n // 最右边\n bounds.x = vRight - padding - width;\n }\n if (tTop <= vTop) {\n // 最上边\n bounds.y = vTop + padding;\n } else if (tBottom >= vBottom) {\n // 最下边\n bounds.y = vBottom - padding - height;\n }\n return bounds;\n }\n /**\n * 根据两点创建矩形\n */\n export function createRectangleWithTwoPoints(point1: IPoint, point2: IPoint): Rectangle {\n const x = point1.x < point2.x ? point1.x : point2.x;\n const y = point1.y < point2.y ? point1.y : point2.y;\n const width = Math.abs(point1.x - point2.x);\n const height = Math.abs(point1.y - point2.y);\n return new Rectangle(x, y, width, height);\n }\n}\n\n/**\n * Oriented Bounding Box (OBB)\n * @see https://en.wikipedia.org/wiki/Bounding_volume\n */\nexport class OBBRect {\n readonly axesX: Vector2;\n\n readonly axesY: Vector2;\n\n readonly centerPoint: Vector2;\n\n /**\n * @param rotation in radian\n */\n constructor(\n centerPoint: IPoint,\n protected width: number,\n protected height: number,\n rotation: number\n ) {\n this.centerPoint = new Vector2(centerPoint.x, centerPoint.y);\n this.axesX = new Vector2(Math.cos(rotation), Math.sin(rotation));\n this.axesY = new Vector2(-1 * this.axesX.y, this.axesX.x);\n }\n\n /**\n * 计算投影半径\n */\n getProjectionRadius(axis: Vector2): number {\n return (\n (this.width / 2) * Math.abs(axis.dot(this.axesX)) +\n (this.height / 2) * Math.abs(axis.dot(this.axesY))\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { SHAPES } from '../const';\nimport { Rectangle } from './Rectangle';\n\n/**\n * The Circle object is used to help draw graphics and can also be used to specify a hit area for displayObjects.\n */\nexport class Circle {\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n */\n public readonly type = SHAPES.CIRC;\n\n /**\n * @param x Circle center x\n * @param y Circle center y\n */\n constructor(public x = 0, public y = 0, public radius = 0) {}\n\n /**\n * Creates a clone of this Circle instance\n *\n * @return a copy of the Circle\n */\n clone(): Circle {\n return new Circle(this.x, this.y, this.radius);\n }\n\n /**\n * Checks whether the x and y coordinates given are contained within this circle\n *\n * @return Whether the (x, y) coordinates are within this Circle\n */\n contains(x: number, y: number): boolean {\n if (this.radius <= 0) {\n return false;\n }\n\n const r2 = this.radius * this.radius;\n let dx = this.x - x;\n let dy = this.y - y;\n\n dx *= dx;\n dy *= dy;\n\n return dx + dy <= r2;\n }\n\n /**\n * Returns the framing rectangle of the circle as a Rectangle object\n *\n * @return the framing rectangle\n */\n getBounds(): Rectangle {\n return new Rectangle(\n this.x - this.radius,\n this.y - this.radius,\n this.radius * 2,\n this.radius * 2,\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable prefer-destructuring */\nimport type { Transform } from './Transform';\nimport type { IPoint } from './IPoint';\nimport { PI_2 } from './const';\n\n/**\n * The PIXIJS Matrix as a class makes it a lot faster.\n *\n * Here is a representation of it:\n * ```js\n * | a | c | tx|\n * | b | d | ty|\n * | 0 | 0 | 1 |\n * // default:\n * | 1 | 0 | 0 |\n * | 0 | 1 | 0 |\n * | 0 | 0 | 1 |\n * ```\n */\nexport class Matrix {\n public array: Float32Array | null = null;\n\n /**\n * @param [a] x scale\n * @param [b] x skew\n * @param [c] y skew\n * @param [d] y scale\n * @param [tx] x translation\n * @param [ty] y translation\n */\n constructor(\n public a = 1,\n public b = 0,\n public c = 0,\n public d = 1,\n public tx = 0,\n public ty = 0,\n ) {}\n\n /**\n * A default (identity) matrix\n */\n static get IDENTITY(): Matrix {\n return new Matrix();\n }\n\n /**\n * A temp matrix\n */\n static get TEMP_MATRIX(): Matrix {\n return new Matrix();\n }\n\n /**\n * Creates a Matrix object based on the given array. The Element to Matrix mapping order is as follows:\n *\n * @param array The array that the matrix will be populated from.\n */\n fromArray(array: number[]): this {\n if (array.length < 6) return this;\n\n this.a = array[0];\n this.b = array[1];\n this.c = array[3];\n this.d = array[4];\n this.tx = array[2];\n this.ty = array[5];\n return this;\n }\n\n /**\n * sets the matrix properties\n *\n * @param a Matrix component\n * @param b Matrix component\n * @param c Matrix component\n * @param d Matrix component\n * @param tx Matrix component\n * @param ty Matrix component\n */\n set(a: number, b: number, c: number, d: number, tx: number, ty: number): this {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.tx = tx;\n this.ty = ty;\n\n return this;\n }\n\n /**\n * Creates an array from the current Matrix object.\n *\n * @param transpose Whether we need to transpose the matrix or not\n * @param [out=new Float32Array(9)] If provided the array will be assigned to out\n * @return the newly created array which contains the matrix\n */\n toArray(transpose: boolean, out?: Float32Array): Float32Array {\n if (!this.array) {\n this.array = new Float32Array(9);\n }\n\n const array = out || this.array;\n\n if (transpose) {\n array[0] = this.a;\n array[1] = this.b;\n array[2] = 0;\n array[3] = this.c;\n array[4] = this.d;\n array[5] = 0;\n array[6] = this.tx;\n array[7] = this.ty;\n array[8] = 1;\n } else {\n array[0] = this.a;\n array[1] = this.c;\n array[2] = this.tx;\n array[3] = this.b;\n array[4] = this.d;\n array[5] = this.ty;\n array[6] = 0;\n array[7] = 0;\n array[8] = 1;\n }\n\n return array;\n }\n\n /**\n * Get a new position with the current transformation applied.\n * Can be used to go from a child's coordinate space to the world coordinate space. (e.g. rendering)\n *\n * @param pos The origin\n * @param [newPos] The point that the new position is assigned to (allowed to be same as input)\n * @return The new point, transformed through this matrix\n */\n apply(pos: IPoint, newPos?: IPoint): IPoint {\n newPos = newPos || { x: 0, y: 0 };\n\n const { x, y } = pos;\n\n newPos.x = this.a * x + this.c * y + this.tx;\n newPos.y = this.b * x + this.d * y + this.ty;\n\n return newPos;\n }\n\n /**\n * Get a new position with the inverse of the current transformation applied.\n * Can be used to go from the world coordinate space to a child's coordinate space. (e.g. input)\n *\n * @param pos The origin\n * @param [newPos] The point that the new position is assigned to (allowed to be same as input)\n * @return The new point, inverse-transformed through this matrix\n */\n applyInverse(pos: IPoint, newPos?: IPoint): IPoint {\n newPos = newPos || { x: 0, y: 0 };\n\n const id = 1 / (this.a * this.d + this.c * -this.b);\n\n const { x } = pos;\n const { y } = pos;\n\n newPos.x = this.d * id * x + -this.c * id * y + (this.ty * this.c - this.tx * this.d) * id;\n newPos.y = this.a * id * y + -this.b * id * x + (-this.ty * this.a + this.tx * this.b) * id;\n\n return newPos;\n }\n\n /**\n * Translates the matrix on the x and y.\n *\n * @param x How much to translate x by\n * @param y How much to translate y by\n */\n translate(x: number, y: number): this {\n this.tx += x;\n this.ty += y;\n\n return this;\n }\n\n /**\n * Applies a scale transformation to the matrix.\n *\n * @param x The amount to scale horizontally\n * @param y The amount to scale vertically\n */\n scale(x: number, y: number): this {\n this.a *= x;\n this.d *= y;\n this.c *= x;\n this.b *= y;\n this.tx *= x;\n this.ty *= y;\n\n return this;\n }\n\n /**\n * Applies a rotation transformation to the matrix.\n *\n * @param angle The angle in radians.\n */\n rotate(angle: number): this {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n\n const a1 = this.a;\n const c1 = this.c;\n const tx1 = this.tx;\n\n this.a = a1 * cos - this.b * sin;\n this.b = a1 * sin + this.b * cos;\n this.c = c1 * cos - this.d * sin;\n this.d = c1 * sin + this.d * cos;\n this.tx = tx1 * cos - this.ty * sin;\n this.ty = tx1 * sin + this.ty * cos;\n\n return this;\n }\n\n /**\n * 矩阵乘法,当前矩阵 * matrix\n * Appends the given Matrix to this Matrix.\n */\n append(matrix: Matrix): this {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n\n this.a = matrix.a * a1 + matrix.b * c1;\n this.b = matrix.a * b1 + matrix.b * d1;\n this.c = matrix.c * a1 + matrix.d * c1;\n this.d = matrix.c * b1 + matrix.d * d1;\n\n this.tx = matrix.tx * a1 + matrix.ty * c1 + this.tx;\n this.ty = matrix.tx * b1 + matrix.ty * d1 + this.ty;\n\n return this;\n }\n\n /**\n * Sets the matrix based on all the available properties\n *\n * @param x Position on the x axis\n * @param y Position on the y axis\n * @param pivotX Pivot on the x axis\n * @param pivotY Pivot on the y axis\n * @param scaleX Scale on the x axis\n * @param scaleY Scale on the y axis\n * @param rotation Rotation in radians\n * @param skewX Skew on the x axis\n * @param skewY Skew on the y axis\n */\n setTransform(\n x: number,\n y: number,\n pivotX: number,\n pivotY: number,\n scaleX: number,\n scaleY: number,\n rotation: number,\n skewX: number,\n skewY: number,\n ): this {\n this.a = Math.cos(rotation + skewY) * scaleX;\n this.b = Math.sin(rotation + skewY) * scaleX;\n this.c = -Math.sin(rotation - skewX) * scaleY;\n this.d = Math.cos(rotation - skewX) * scaleY;\n\n this.tx = x - (pivotX * this.a + pivotY * this.c);\n this.ty = y - (pivotX * this.b + pivotY * this.d);\n\n return this;\n }\n\n /**\n * 矩阵乘法,matrix * 当前矩阵\n * Prepends the given Matrix to this Matrix.\n */\n prepend(matrix: Matrix): this {\n const tx1 = this.tx;\n\n if (matrix.a !== 1 || matrix.b !== 0 || matrix.c !== 0 || matrix.d !== 1) {\n const a1 = this.a;\n const c1 = this.c;\n\n this.a = a1 * matrix.a + this.b * matrix.c;\n this.b = a1 * matrix.b + this.b * matrix.d;\n this.c = c1 * matrix.a + this.d * matrix.c;\n this.d = c1 * matrix.b + this.d * matrix.d;\n }\n\n this.tx = tx1 * matrix.a + this.ty * matrix.c + matrix.tx;\n this.ty = tx1 * matrix.b + this.ty * matrix.d + matrix.ty;\n\n return this;\n }\n\n /**\n * Decomposes the matrix (x, y, scaleX, scaleY, and rotation) and sets the properties on to a transform.\n *\n * @param transform The transform to apply the properties to.\n * @return The transform with the newly applied properties\n */\n decompose(transform: Transform): Transform {\n // sort out rotation / skew..\n const { a } = this;\n const { b } = this;\n const { c } = this;\n const { d } = this;\n\n const skewX = -Math.atan2(-c, d);\n const skewY = Math.atan2(b, a);\n\n const delta = Math.abs(skewX + skewY);\n\n if (delta < 0.00001 || Math.abs(PI_2 - delta) < 0.00001) {\n transform.rotation = skewY;\n transform.skew.x = 0;\n transform.skew.y = 0;\n } else {\n transform.rotation = 0;\n transform.skew.x = skewX;\n transform.skew.y = skewY;\n }\n\n // next set scale\n transform.scale.x = Math.sqrt(a * a + b * b);\n transform.scale.y = Math.sqrt(c * c + d * d);\n\n // next set position\n transform.position.x = this.tx;\n transform.position.y = this.ty;\n\n return transform;\n }\n\n /**\n * Inverts this matrix\n */\n invert(): this {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n const tx1 = this.tx;\n const n = a1 * d1 - b1 * c1;\n\n this.a = d1 / n;\n this.b = -b1 / n;\n this.c = -c1 / n;\n this.d = a1 / n;\n this.tx = (c1 * this.ty - d1 * tx1) / n;\n this.ty = -(a1 * this.ty - b1 * tx1) / n;\n\n return this;\n }\n\n /**\n * Resets this Matrix to an identity (default) matrix.\n */\n identity(): this {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.tx = 0;\n this.ty = 0;\n\n return this;\n }\n\n /**\n * 未做旋转的矩阵\n */\n isSimple(): boolean {\n return this.a === 1 && this.b === 0 && this.c === 0 && this.d === 1;\n }\n\n /**\n * Creates a new Matrix object with the same values as this one.\n *\n * @return A copy of this matrix.\n */\n clone(): Matrix {\n const matrix = new Matrix();\n\n matrix.a = this.a;\n matrix.b = this.b;\n matrix.c = this.c;\n matrix.d = this.d;\n matrix.tx = this.tx;\n matrix.ty = this.ty;\n\n return matrix;\n }\n\n /**\n * Changes the values of the given matrix to be the same as the ones in this matrix\n *\n * @return The matrix given in parameter with its values updated.\n */\n copyTo(matrix: Matrix): Matrix {\n matrix.a = this.a;\n matrix.b = this.b;\n matrix.c = this.c;\n matrix.d = this.d;\n matrix.tx = this.tx;\n matrix.ty = this.ty;\n\n return matrix;\n }\n\n /**\n * Changes the values of the matrix to be the same as the ones in given matrix\n */\n copyFrom(matrix: Matrix): this {\n this.a = matrix.a;\n this.b = matrix.b;\n this.c = matrix.c;\n this.d = matrix.d;\n this.tx = matrix.tx;\n this.ty = matrix.ty;\n\n return this;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { IPoint } from './IPoint';\n\n/**\n * The Point object represents a location in a two-dimensional coordinate system, where x represents\n * the horizontal axis and y represents the vertical axis.\n *\n * An ObservablePoint is a point that triggers a callback when the point's position is changed.\n */\nexport class ObservablePoint<T = any> implements IPoint {\n public cb: (this: T) => any;\n\n public scope: any;\n\n /**\n * @param {Function} cb - callback when changed\n * @param {object} scope - owner of callback\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=0] - position of the point on the y axis\n */\n constructor(cb: (this: T) => any, scope: T, x = 0, y = 0) {\n this._x = x;\n this._y = y;\n\n this.cb = cb;\n this.scope = scope;\n }\n\n _x: number;\n\n /**\n * The position of the displayObject on the x axis relative to the local coordinates of the parent.\n */\n get x(): number {\n return this._x;\n }\n\n set x(value) {\n if (this._x !== value) {\n this._x = value;\n this.cb.call(this.scope);\n }\n }\n\n _y: number;\n\n /**\n * The position of the displayObject on the x axis relative to the local coordinates of the parent.\n */\n get y(): number {\n return this._y;\n }\n\n set y(value) {\n if (this._y !== value) {\n this._y = value;\n this.cb.call(this.scope);\n }\n }\n\n /**\n * Creates a clone of this point.\n * The callback and scope params can be overidden otherwise they will default\n * to the clone object's values.\n *\n * @override\n * @param {Function} [cb=null] - callback when changed\n * @param {object} [scope=null] - owner of callback\n * @return {ObservablePoint} a copy of the point\n */\n clone(cb = this.cb, scope = this.scope): ObservablePoint {\n return new ObservablePoint(cb, scope, this._x, this._y);\n }\n\n /**\n * Sets the point to a new x and y position.\n * If y is omitted, both x and y will be set to x.\n *\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=x] - position of the point on the y axis\n * @returns {this} Returns itself.\n */\n set(x = 0, y = x): this {\n if (this._x !== x || this._y !== y) {\n this._x = x;\n this._y = y;\n this.cb.call(this.scope);\n }\n\n return this;\n }\n\n /**\n * Copies x and y from the given point\n *\n * @param {IPoint} p - The point to copy from.\n * @returns {this} Returns itself.\n */\n copyFrom(p: IPoint): this {\n if (this._x !== p.x || this._y !== p.y) {\n this._x = p.x;\n this._y = p.y;\n this.cb.call(this.scope);\n }\n\n return this;\n }\n\n /**\n * Copies x and y into the given point\n *\n * @param {IPoint} p - The point to copy.\n * @returns {IPoint} Given point with values updated\n */\n copyTo<T2 extends IPoint>(p: T2): T2 {\n p.x = this._x;\n p.y = this._y;\n\n return p;\n }\n\n /**\n * Returns true if the given point is equal to this point\n *\n * @param {IPoint} p - The point to check\n * @returns {boolean} Whether the given point equal to this point\n */\n equals(p: IPoint): boolean {\n return p.x === this._x && p.y === this._y;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { ObservablePoint } from './ObservablePoint';\nimport { Matrix } from './Matrix';\n\n/**\n * Transform that takes care about its versions\n *\n * @class\n * @memberof PIXI\n */\nexport class Transform {\n /**\n * A default (identity) transform\n *\n * @static\n * @constant\n * @member {PIXI.Transform}\n */\n public static readonly IDENTITY = new Transform();\n\n public worldTransform: Matrix;\n\n public localTransform: Matrix;\n\n public position: ObservablePoint;\n\n public scale: ObservablePoint;\n\n public pivot: ObservablePoint;\n\n public skew: ObservablePoint;\n\n public _parentID: number;\n\n _worldID: number;\n\n protected _rotation: number;\n\n protected _cx: number;\n\n protected _sx: number;\n\n protected _cy: number;\n\n protected _sy: number;\n\n protected _localID: number;\n\n protected _currentLocalID: number;\n\n constructor() {\n /**\n * The world transformation matrix.\n *\n * @member {PIXI.Matrix}\n */\n this.worldTransform = new Matrix();\n\n /**\n * The local transformation matrix.\n *\n * @member {PIXI.Matrix}\n */\n this.localTransform = new Matrix();\n\n /**\n * The coordinate of the object relative to the local coordinates of the parent.\n *\n * @member {PIXI.ObservablePoint}\n */\n this.position = new ObservablePoint(this.onChange, this, 0, 0);\n\n /**\n * The scale factor of the object.\n *\n * @member {PIXI.ObservablePoint}\n */\n this.scale = new ObservablePoint(this.onChange, this, 1, 1);\n\n /**\n * The pivot point of the displayObject that it rotates around.\n *\n * @member {PIXI.ObservablePoint}\n */\n this.pivot = new ObservablePoint(this.onChange, this, 0, 0);\n\n /**\n * The skew amount, on the x and y axis.\n *\n * @member {PIXI.ObservablePoint}\n */\n this.skew = new ObservablePoint(this.updateSkew, this, 0, 0);\n\n /**\n * The rotation amount.\n *\n * @protected\n * @member {number}\n */\n this._rotation = 0;\n\n /**\n * The X-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n *\n * @protected\n * @member {number}\n */\n this._cx = 1;\n\n /**\n * The Y-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n *\n * @protected\n * @member {number}\n */\n this._sx = 0;\n\n /**\n * The X-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n *\n * @protected\n * @member {number}\n */\n this._cy = 0;\n\n /**\n * The Y-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n *\n * @protected\n * @member {number}\n */\n this._sy = 1;\n\n /**\n * The locally unique ID of the local transform.\n *\n * @protected\n * @member {number}\n */\n this._localID = 0;\n\n /**\n * The locally unique ID of the local transform\n * used to calculate the current local transformation matrix.\n *\n * @protected\n * @member {number}\n */\n this._currentLocalID = 0;\n\n /**\n * The locally unique ID of the world transform.\n *\n * @protected\n * @member {number}\n */\n this._worldID = 0;\n\n /**\n * The locally unique ID of the parent's world transform\n * used to calculate the current world transformation matrix.\n *\n * @protected\n * @member {number}\n */\n this._parentID = 0;\n }\n\n /**\n * Called when a value changes.\n *\n * @protected\n */\n protected onChange(): void {\n this._localID++;\n }\n\n /**\n * Called when the skew or the rotation changes.\n *\n * @protected\n */\n protected updateSkew(): void {\n this._cx = Math.cos(this._rotation + this.skew.y);\n this._sx = Math.sin(this._rotation + this.skew.y);\n this._cy = -Math.sin(this._rotation - this.skew.x); // cos, added PI/2\n this._sy = Math.cos(this._rotation - this.skew.x); // sin, added PI/2\n\n this._localID++;\n }\n\n /**\n * Updates the local transformation matrix.\n */\n updateLocalTransform(): void {\n const lt = this.localTransform;\n\n if (this._localID !== this._currentLocalID) {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c);\n lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d);\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n }\n\n /**\n * Updates the local and the world transformation matrices.\n *\n * @param {PIXI.Transform} parentTransform - The parent transform\n */\n updateTransform(parentTransform: Transform): void {\n const lt = this.localTransform;\n\n if (this._localID !== this._currentLocalID) {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c);\n lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d);\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n\n if (this._parentID !== parentTransform._worldID) {\n // concat the parent matrix with the objects transform.\n const pt = parentTransform.worldTransform;\n const wt = this.worldTransform;\n\n wt.a = lt.a * pt.a + lt.b * pt.c;\n wt.b = lt.a * pt.b + lt.b * pt.d;\n wt.c = lt.c * pt.a + lt.d * pt.c;\n wt.d = lt.c * pt.b + lt.d * pt.d;\n wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx;\n wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty;\n\n this._parentID = parentTransform._worldID;\n\n // update the id of the transform..\n this._worldID++;\n }\n }\n\n /**\n * Decomposes a matrix and sets the transforms properties based on it.\n *\n * @param {PIXI.Matrix} matrix - The matrix to decompose\n */\n setFromMatrix(matrix: Matrix): void {\n matrix.decompose(this);\n this._localID++;\n }\n\n /**\n * The rotation of the object in radians.\n *\n * @member {number}\n */\n get rotation(): number {\n return this._rotation;\n }\n\n set rotation(value: number) {\n if (this._rotation !== value) {\n this._rotation = value;\n this.updateSkew();\n }\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Wrap the given `value` between `min` and `max`.\n * value ∈ [min, max)\n * e.g.\n * expect(wrap(0, 1, 10)).toBe(9)\n * expect(wrap(1, 1, 10)).toBe(1)\n * expect(wrap(10, 1, 10)).toBe(1)\n *\n * @return The wrapped value.\n */\nexport function wrap(value: number, min: number, max: number): number {\n const range = max - min;\n\n return min + ((((value - min) % range) + range) % range);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { wrap as mathWrap } from './wrap';\nimport { type IPoint } from './IPoint';\n\nexport namespace Angle {\n /**\n * Wrap an angle.\n *\n * Wraps the angle to a value in the range of -PI to PI.\n *\n * @param angle - The angle to wrap, in radians.\n * @return The wrapped angle, in radians.\n */\n export function wrap(angle: number): number {\n return mathWrap(angle, -Math.PI, Math.PI);\n }\n /**\n * Wrap an angle in degrees.\n *\n * Wraps the angle to a value in the range of -180 to 180.\n *\n * @param angle - The angle to wrap, in degrees.\n * @return The wrapped angle, in degrees.\n */\n export function wrapDegrees(angle: number): number {\n return mathWrap(angle, -180, 180);\n }\n\n /**\n * 计算两个点的夹角\n *\n * @return The angle in radians.\n */\n export function betweenPoints(\n point1: IPoint,\n point2: IPoint,\n originPoint: IPoint = { x: 0, y: 0 },\n ): number {\n const p1 = {\n x: point1.x - originPoint.x,\n y: point1.y - originPoint.y,\n };\n const p2 = {\n x: point2.x - originPoint.x,\n y: point2.y - originPoint.y,\n };\n // return Math.atan2(p2.y, p2.x) - Math.atan2(p1.y, p1.x)\n return Math.atan2(p1.x * p2.y - p1.y * p2.x, p1.x * p2.x + p1.y * p2.y);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nconst { keys } = Object;\nexport function deepFreeze<T>(obj: T): T {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n const stack: any[] = [obj];\n while (stack.length > 0) {\n const objectToFreeze = stack.shift();\n Object.freeze(objectToFreeze);\n for (const key in objectToFreeze) {\n if (_hasOwnProperty.call(objectToFreeze, key)) {\n const prop = objectToFreeze[key];\n if (typeof prop === 'object' && !Object.isFrozen(prop)) {\n stack.push(prop);\n }\n }\n }\n }\n return obj;\n}\n\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function notEmpty<T>(arg: T | undefined | null): arg is T {\n return arg !== undefined && arg !== null;\n}\n\n/**\n * filter dangerous key, prevent prototype pollution injection\n * @param key key to be filtered\n * @returns filtered key\n */\nexport const safeKey = (key: string): string => {\n const dangerousProps = [\n '__proto__',\n 'constructor',\n 'prototype',\n '__defineGetter__',\n '__defineSetter__',\n '__lookupGetter__',\n '__lookupSetter__',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n 'toLocaleString',\n ];\n\n if (dangerousProps.includes(key.toLowerCase())) {\n return '';\n }\n\n return key;\n};\n\n/**\n * `true` if the argument is an empty object. Otherwise, `false`.\n */\nexport function isEmpty(arg: Object): boolean {\n return keys(arg).length === 0 && arg.constructor === Object;\n}\n\nexport const each = <T = any, K = string>(obj: any, fn: (value: T, key: K) => void) =>\n keys(obj).forEach((key) => fn(obj[key], key as any));\n\nexport const values = (obj: any) =>\n Object.values ? Object.values(obj) : keys(obj).map((k) => obj[k]);\n\nexport const filter = (obj: any, fn: (value: any, key: string) => boolean, dest?: any) =>\n keys(obj).reduce(\n (output, key) => (fn(obj[key], key) ? Object.assign(output, { [key]: obj[key] }) : output),\n dest || {}\n );\n\nexport const pick = (obj: any, fields: string[], dest?: any) =>\n filter(obj, (n, k) => fields.indexOf(k) !== -1, dest);\n\nexport const omit = (obj: any, fields: string[], dest?: any) =>\n filter(obj, (n, k) => fields.indexOf(k) === -1, dest);\n\nexport const reduce = <V = any, R = any>(\n obj: any,\n fn: (res: R, value: V, key: string) => any,\n res: R = {} as R\n) => keys(obj).reduce((r, k) => fn(r, obj[k], k), res);\n\nexport const mapValues = <V = any>(obj: any, fn: (value: V, key: string) => any) =>\n reduce<V>(obj, (res, value, key) => Object.assign(res, { [key]: fn(value, key) }));\n\nexport const mapKeys = <V = any>(obj: any, fn: (value: V, key: string) => any) =>\n reduce<V>(obj, (res, value, key) => Object.assign(res, { [fn(value, key)]: value }));\n\n/**\n * @param target\n * @param key\n * @example\n * const obj = {\n * position: {\n * x: 0\n * y: 0\n * }\n * }\n * getByKey(ob, 'position.x') // 0\n */\nexport function getByKey(target: any, key: string): any | undefined {\n if (typeof target !== 'object' || !key) return undefined;\n return key.split('.').reduce((v: any, k: string) => {\n if (typeof v !== 'object') return undefined;\n return v[k];\n }, target);\n}\n\n/**\n * @param target\n * @param key\n * @param newValue\n * @param autoCreateObject\n * @example\n * const obj = {\n * position: {\n * x: 0\n * y: 0\n * }\n * }\n * setByKey(ob, 'position.x', 100) // true\n * setByKey(obj, 'size.width', 100) // false\n * setBeyKey(obj, 'size.width', 100, true) // true\n */\nexport function setByKey(\n target: any,\n key: string,\n newValue: any,\n autoCreateObject = true,\n clone = false\n): any {\n if (typeof target !== 'object' || !key) return target;\n if (clone) {\n target = { ...target };\n }\n const originTarget = target;\n const targetKeys = key.split('.');\n while (targetKeys.length > 0) {\n key = targetKeys.shift()!;\n if (targetKeys.length === 0) {\n target[safeKey(key)] = newValue;\n return originTarget;\n }\n if (typeof target[key] !== 'object') {\n if (!autoCreateObject) return originTarget;\n target[safeKey(key)] = {};\n }\n if (clone) {\n if (Array.isArray(target[key])) {\n target[safeKey(key)] = target[key].slice();\n } else {\n target[safeKey(key)] = { ...target[key] };\n }\n }\n target = target[key];\n }\n return originTarget;\n}\n\nexport const NOOP = () => {};\n\n/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport function isPlainObject(obj: any): boolean {\n if (typeof obj !== 'object' || obj === null) return false;\n\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport interface AsClass<T> {\n new (...args: any[]): T;\n}\n\ntype UnknownObject<T extends object> = Record<string | number | symbol, unknown> & {\n [K in keyof T]: unknown;\n};\n\nexport function isObject<T extends object>(v: unknown): v is UnknownObject<T> {\n return typeof v === 'object' && v !== null;\n}\nexport function isString(v: unknown): v is string {\n return typeof v === 'string' || v instanceof String;\n}\nexport function isFunction<T extends (...args: unknown[]) => unknown>(v: unknown): v is T {\n return typeof v === 'function';\n}\nconst toString = Object.prototype.toString;\n\nexport function getTag(v: unknown) {\n if (v == null) {\n return v === undefined ? '[object Undefined]' : '[object Null]';\n }\n return toString.call(v);\n}\nexport function isNumber(v: unknown): v is number {\n return typeof v === 'number' || (isObject(v) && getTag(v) === '[object Number]');\n}\n\nexport type MaybeArray<T> = T | T[];\nexport type MaybePromise<T> = T | PromiseLike<T>;\n\nexport type RecursivePartial<T> = {\n [P in keyof T]?: T[P] extends Array<infer I>\n ? Array<RecursivePartial<I>>\n : RecursivePartial<T[P]>;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * An object that performs a cleanup operation when `.dispose()` is called.\n *\n * Some examples of how disposables are used:\n *\n * - An event listener that removes itself when `.dispose()` is called.\n * - The return value from registering a provider. When `.dispose()` is called, the provider is unregistered.\n */\nexport interface Disposable {\n dispose(): void;\n}\n\nexport namespace Disposable {\n export function is(thing: any): thing is Disposable {\n return (\n typeof thing === 'object' &&\n thing !== null &&\n typeof (<Disposable>(<any>thing)).dispose === 'function'\n );\n }\n\n export function create(func: () => void): Disposable {\n return {\n dispose: func,\n };\n }\n\n export const NULL = Object.freeze(create(() => {}));\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { NOOP } from './objects';\nimport { Disposable } from './disposable';\n\nexport interface EventListener<T> {\n (args: T): void;\n}\n\nexport interface Event<T> {\n (listener: EventListener<T>, thisArgs?: any): Disposable;\n}\n\nexport namespace Event {\n export const None: Event<any> = () => Disposable.NULL;\n}\n\nexport class Emitter<T = any> {\n static LEAK_WARNING_THRESHHOLD = 175;\n\n private _event?: Event<T>;\n\n private _listeners?: EventListener<T>[];\n\n private _disposed = false;\n\n get event(): Event<T> {\n if (!this._event) {\n this._event = (listener: EventListener<T>, thisArgs?: any) => {\n if (this._disposed) {\n return Disposable.NULL;\n }\n if (!this._listeners) {\n this._listeners = [];\n }\n const finalListener = thisArgs ? listener.bind(thisArgs) : listener;\n if (this._listeners.length >= Emitter.LEAK_WARNING_THRESHHOLD) {\n console.warn(`[Emitter] Listeners length >= ${Emitter.LEAK_WARNING_THRESHHOLD}`);\n }\n this._listeners.push(finalListener);\n\n const eventDisposable: Disposable = {\n dispose: () => {\n eventDisposable.dispose = NOOP;\n if (!this._disposed) {\n const index = this._listeners!.indexOf(finalListener);\n if (index !== -1) {\n this._listeners!.splice(index, 1);\n }\n }\n },\n };\n\n return eventDisposable;\n };\n }\n return this._event;\n }\n\n fire(event: T): void {\n if (this._listeners) {\n this._listeners.forEach((listener) => listener(event));\n }\n }\n\n get disposed(): boolean {\n return this._disposed;\n }\n\n dispose(): void {\n if (this._listeners) {\n this._listeners = undefined;\n }\n this._disposed = true;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Emitter, Event } from './event';\nimport { Disposable } from './disposable';\n\nexport class DisposableImpl implements Disposable {\n readonly toDispose = new DisposableCollection();\n\n dispose(): void {\n this.toDispose.dispose();\n }\n\n get disposed(): boolean {\n return this.toDispose.disposed;\n }\n\n get onDispose(): Event<void> {\n return this.toDispose.onDispose;\n }\n}\n\nexport class DisposableCollection implements Disposable {\n protected readonly disposables: Disposable[] = [];\n\n protected readonly onDisposeEmitter = new Emitter<void>();\n\n private _disposed = false;\n\n constructor(...toDispose: Disposable[]) {\n toDispose.forEach((d) => this.push(d));\n }\n\n get length() {\n return this.disposables.length;\n }\n\n get onDispose(): Event<void> {\n return this.onDisposeEmitter.event;\n }\n\n get disposed(): boolean {\n return this._disposed;\n }\n\n dispose(): void {\n if (this.disposed) {\n return;\n }\n this._disposed = true;\n this.disposables\n .slice()\n .reverse()\n .forEach((disposable) => {\n try {\n disposable.dispose();\n } catch (e) {\n console.error(e);\n }\n });\n this.onDisposeEmitter.fire(undefined);\n this.onDisposeEmitter.dispose();\n }\n\n push(disposable: Disposable): Disposable {\n if (this.disposed) return Disposable.NULL;\n if (disposable === Disposable.NULL) {\n return Disposable.NULL;\n }\n const { disposables } = this;\n if (disposables.find((d) => d === disposable)) {\n return Disposable.NULL;\n }\n const originalDispose = disposable.dispose;\n const toRemove = Disposable.create(() => {\n const index = disposables.indexOf(disposable);\n if (index !== -1) {\n disposables.splice(index, 1);\n }\n disposable.dispose = originalDispose;\n });\n disposable.dispose = () => {\n toRemove.dispose();\n disposable.dispose();\n };\n disposables.push(disposable);\n return toRemove;\n }\n\n pushAll(disposables: Disposable[]): Disposable[] {\n return disposables.map((disposable) => this.push(disposable));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation and others. All rights reserved.\n * Licensed under the MIT License. See https://github.com/Microsoft/vscode/blob/master/LICENSE.txt for license information.\n *\n * Fork: https://github.com/Microsoft/vscode/blob/main/src/vs/base/common/cancellation.ts\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, Event } from './event';\nimport { type Disposable } from './disposable';\n\nexport interface CancellationToken {\n /**\n * A flag signalling is cancellation has been requested.\n */\n readonly isCancellationRequested: boolean;\n /**\n * An event which fires when cancellation is requested. This event\n * only ever fires `once` as cancellation can only happen once. Listeners\n * that are registered after cancellation will be called (next event loop run),\n * but also only once.\n * @event\n */\n readonly onCancellationRequested: Event<void>;\n}\n\nconst shortcutEvent: Event<any> = Object.freeze(function (callback, context?): Disposable {\n const handle = setTimeout(callback.bind(context), 0);\n return {\n dispose() {\n clearTimeout(handle);\n },\n };\n});\n\nexport namespace CancellationToken {\n export function isCancellationToken(thing: unknown): thing is CancellationToken {\n if (thing === CancellationToken.None || thing === CancellationToken.Cancelled) {\n return true;\n }\n if (thing instanceof MutableToken) {\n return true;\n }\n if (!thing || typeof thing !== 'object') {\n return false;\n }\n return (\n typeof (thing as CancellationToken).isCancellationRequested === 'boolean' &&\n typeof (thing as CancellationToken).onCancellationRequested === 'function'\n );\n }\n export const None = Object.freeze<CancellationToken>({\n isCancellationRequested: false,\n onCancellationRequested: Event.None,\n });\n\n export const Cancelled = Object.freeze<CancellationToken>({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent,\n });\n}\n\nexport class MutableToken implements CancellationToken {\n private _isCancelled = false;\n\n private _emitter?: Emitter<void>;\n\n public cancel(): void {\n if (!this._isCancelled) {\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire(undefined);\n this.dispose();\n }\n }\n }\n\n get isCancellationRequested(): boolean {\n return this._isCancelled;\n }\n\n get onCancellationRequested(): Event<void> {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new Emitter<void>();\n }\n return this._emitter.event;\n }\n\n public dispose(): void {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = undefined;\n }\n }\n}\n\nexport class CancellationTokenSource {\n private _token: CancellationToken | undefined;\n\n get token(): CancellationToken {\n if (!this._token) {\n // be lazy and create the token only when\n // actually needed\n this._token = new MutableToken();\n }\n return this._token;\n }\n\n cancel(): void {\n if (!this._token) {\n // save an object by returning the default\n // cancelled token when cancellation happens\n // before someone asks for the token\n this._token = CancellationToken.Cancelled;\n } else if (this._token !== CancellationToken.Cancelled) {\n (<MutableToken>this._token).cancel();\n }\n }\n\n dispose(): void {\n this.cancel();\n }\n}\n\nconst cancelledMessage = 'Cancelled';\n\nexport function cancelled(): Error {\n return new Error(cancelledMessage);\n}\n\nexport function isCancelled(err: Error | undefined): boolean {\n return !!err && err.message === cancelledMessage;\n}\n\nexport function checkCancelled(token?: CancellationToken): void {\n if (!!token && token.isCancellationRequested) {\n throw cancelled();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { CancellationToken, cancelled } from './cancellation';\n\n/**\n * Simple implementation of the deferred pattern.\n * An object that exposes a promise and functions to resolve and reject it.\n */\nexport class PromiseDeferred<T> {\n resolve: (value?: T | PromiseLike<T>) => void;\n\n reject: (err?: any) => void;\n\n promise = new Promise<T>((resolve, reject) => {\n // @ts-ignore\n this.resolve = resolve;\n this.reject = reject;\n });\n}\n\nexport const Deferred = PromiseDeferred;\n/**\n * @returns resolves after a specified number of milliseconds\n * @throws cancelled if a given token is cancelled before a specified number of milliseconds\n */\nexport function delay(ms: number, token = CancellationToken.None): Promise<void> {\n const deferred = new PromiseDeferred<void>();\n const handle = setTimeout(() => deferred.resolve(), ms);\n token.onCancellationRequested(() => {\n clearTimeout(handle);\n deferred.reject(cancelled());\n });\n return deferred.promise;\n}\n\nexport async function retry<T>(\n task: () => Promise<T>,\n delayTime: number,\n retries: number,\n shouldRetry?: (res: T) => boolean,\n): Promise<T> {\n let lastError: Error | undefined;\n let result: T;\n\n for (let i = 0; i < retries; i++) {\n try {\n // eslint-disable-next-line no-await-in-loop\n result = await task();\n if (shouldRetry && shouldRetry(result)) {\n // eslint-disable-next-line no-await-in-loop\n await delay(delayTime);\n // eslint-disable-next-line no-continue\n continue;\n }\n return result;\n } catch (error: any) {\n lastError = error;\n\n // eslint-disable-next-line no-await-in-loop\n await delay(delayTime);\n }\n }\n\n if (lastError) {\n throw lastError;\n }\n return result!;\n}\n\nexport interface PromiseTask<T> {\n (): Promise<T>;\n}\n\nexport interface PromisePoolOpts {\n intervalCount?: number; // 每批数目\n intervalTime?: number; // 执行一批后的间隔时间, 默认没有间隔\n retries?: number; // 如果某个执行失败, 尝试的次数,默认不尝试\n retryDelay?: number;\n}\n\nconst PromisePoolOptsDefault: Required<PromisePoolOpts> = {\n intervalCount: 10, // 每批数目\n intervalTime: 0,\n retries: 0,\n retryDelay: 10,\n};\n\nexport class PromisePool {\n protected opts: Required<PromisePoolOpts>;\n\n constructor(opts: PromisePoolOpts = PromisePoolOptsDefault) {\n this.opts = { ...PromisePoolOptsDefault, ...opts };\n }\n\n protected async tryToExec<T>(\n task: PromiseTask<T>,\n checkIfRetry?: (res: T) => boolean,\n ): Promise<T> {\n if (this.opts.retries === 0) return task();\n return retry<T>(task, this.opts.retryDelay, this.opts.retries, checkIfRetry);\n }\n\n /**\n * @param tasks 执行任务\n * @param checkIfRetry 判断结果是否需要重试\n */\n async run<T>(tasks: PromiseTask<T>[], checkIfRetry?: (res: T) => boolean): Promise<T[]> {\n if (tasks.length === 0) return [];\n const curTasks = tasks.slice(0, this.opts.intervalCount);\n const promises = curTasks.map(task => this.tryToExec<T>(task, checkIfRetry));\n const result: T[] = await Promise.all(promises);\n const nextTasks = tasks.slice(this.opts.intervalCount);\n if (nextTasks.length === 0) return result;\n if (this.opts.intervalTime !== 0) await delay(this.opts.intervalTime);\n return result.concat(await this.run(nextTasks, checkIfRetry));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport namespace Compare {\n /**\n * 比较,默认浅比较\n * @param oldProps\n * @param newProps\n * @param depth - 比较的深度,默认是 1\n * @param partial - 比较对象的局部,默认 true\n */\n export function isChanged(oldProps: any, newProps: any, depth = 1, partial = true): boolean {\n if (oldProps === newProps) return false;\n if (depth === 0 || typeof oldProps !== 'object' || typeof newProps !== 'object') {\n return oldProps !== newProps;\n }\n const keys = Object.keys(newProps);\n if (!partial) {\n const oldKeys = Object.keys(oldProps);\n if (keys.length !== oldKeys.length) return true;\n }\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n if (isChanged(oldProps[key], newProps[key], depth - 1, partial)) return true;\n }\n return false;\n }\n /**\n * 深度比较\n * @param oldProps\n * @param newProps\n * @param partial - 比较对象的局部,默认 true\n */\n export function isDeepChanged(oldProps: any, newProps: any, partial?: boolean): boolean {\n return isChanged(oldProps, newProps, Infinity, partial);\n }\n export function isArrayShallowChanged(arr1: any[], arr2: any[]): boolean {\n if (arr1.length !== arr2.length) return true;\n for (let i = 0, len = arr1.length; i < len; i++) {\n if (arr1[i] !== arr2[i]) {\n return true;\n }\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type Disposable } from './disposable';\nimport { Compare } from './compare';\n\nexport interface CacheManager<T, ITEM extends CacheOriginItem = CacheOriginItem>\n extends Disposable {\n get(): T;\n getMore(count: number, autoDelete?: boolean): T[];\n getMoreByItemKeys(item: ITEM[]): T[];\n getMoreByItems(item: ITEM[]): T[];\n /**\n * 从缓存中获取\n * @param key\n */\n getFromCacheByKey(key: string): T | undefined;\n /**\n * 获取所有缓存\n */\n getFromCache(): Cache<T>[];\n /**\n * 清空缓存数据\n */\n clear(): void;\n}\n\nexport interface ShortCache<T> {\n get(fn: () => T): T;\n}\n\nexport interface WeakCache {\n get(key: any): any;\n save(key: any, value: any): void;\n isChanged(key: any, value: any): boolean;\n}\n\nexport type Cache<T> = {\n [P in keyof T]: T[P];\n} & { dispose?: () => void; key?: any };\n\nexport interface CacheOpts {\n deleteLimit?: number; // 限制数目,只有超过这个数目,才会自动删除\n}\n\nexport interface CacheOriginItem {\n key?: any;\n}\n\n/**\n * 缓存工具:\n * 1. 可延迟按需创建,提升性能\n * 2. 可支持多个或单个,有些动态创建多个的场景可以共享已有的实例,提升性能\n * 3. 自动删除,超过一定的数目会自动做清空回收\n *\n * @example\n * function htmlFactory<HTMLElement>(): Cache<HTMLElement> {\n * const el = document.createElement('div')\n * return Cache.assign(el, { dispose: () => el.remove() })\n * }\n * const htmlCache = Cache.create<HTMLElement>(htmlFactory)\n * console.log(htmlCache.get() === htmlCache.get()) // true\n * console.log(htmlCache.getMore(3)) // [HTMLElement, HTMLElement, HTMLElement]\n * console.log(htmlCache.getMore(2)) // [HTMLElement, HTMLElement] 自动删除第三个\n */\nexport namespace Cache {\n export function create<T, ITEM extends CacheOriginItem = CacheOriginItem>(\n cacheFactory: (item?: ITEM) => Cache<T>,\n opts: CacheOpts = {},\n ): CacheManager<T, ITEM> {\n let cache: Cache<T>[] = [];\n return {\n getFromCache(): Cache<T>[] {\n return cache;\n },\n getMore(count: number, autoDelete = true): T[] {\n if (count === cache.length) {\n // 强调互斥,统一 return cache.slice()\n } else if (count > cache.length) {\n let added = count - cache.length;\n while (added > 0) {\n cache.push(cacheFactory());\n added--;\n }\n } else if (autoDelete) {\n const deleteLimit = opts.deleteLimit ?? 0;\n // 只有剩余个数超过 deleteLimit,才会自动删除\n if (cache.length - count > deleteLimit) {\n const deleted = cache.splice(count);\n deleted.forEach(el => el.dispose && el.dispose());\n }\n }\n\n return cache.slice(0, count);\n },\n /**\n * 通过 key 去创建缓存\n * @param items\n */\n getMoreByItemKeys(items: ITEM[]): T[] {\n const newCache: Cache<T>[] = [];\n const findedMap: Map<any, any> = new Map();\n cache.forEach(item => {\n const finded = items.find(i => i.key === item.key);\n if (finded) {\n findedMap.set(item.key, item);\n } else {\n item.dispose?.();\n }\n });\n items.forEach(item => {\n if (!item.key) throw new Error('getMoreByItemKeys need a key');\n const finded = findedMap.get(item.key);\n if (finded) {\n newCache.push(finded);\n } else {\n newCache.push(cacheFactory(item));\n }\n });\n cache = newCache;\n return cache;\n },\n /**\n * 通过 item 引用取拿缓存数据\n */\n getMoreByItems(items: any[]): T[] {\n const newCache: Cache<T>[] = [];\n const findedMap: Map<any, any> = new Map();\n cache.forEach(cacheItem => {\n // 这里 key 存的是 item 的引用\n const finded = items.find(ref => ref === cacheItem.key);\n if (finded) {\n findedMap.set(cacheItem.key, cacheItem);\n } else {\n cacheItem.dispose?.();\n }\n });\n items.forEach(item => {\n const finded = findedMap.get(item);\n if (finded) {\n newCache.push(finded);\n } else {\n newCache.push({\n ...cacheFactory(item),\n key: item,\n });\n }\n });\n cache = newCache;\n return cache;\n },\n get(): T {\n if (cache.length > 0) return cache[0];\n cache.push(cacheFactory());\n return cache[0];\n },\n getFromCacheByKey(key: string): T | undefined {\n return cache.find(item => item.key === key);\n },\n dispose(): void {\n cache.forEach(item => item.dispose && item.dispose());\n cache.length = 0;\n },\n clear(): void {\n this.dispose();\n },\n };\n }\n\n export function assign<T = any>(target: T, fn: Disposable): Cache<T> {\n return Object.assign(target as any, fn) as any;\n }\n\n /**\n * 短存储\n * @param timeout\n */\n export function createShortCache<T>(timeout = 1000): ShortCache<T> {\n let cache: T | undefined;\n let timeoutId: number | undefined;\n\n function updateTimeout(): void {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n timeoutId = undefined;\n cache = undefined;\n // 这里加 any 是因为在 nodejs 场景 setTimeout 返回的格式定义的不是 number, yarn dev 会报错\n }, timeout) as any;\n }\n\n return {\n get(getValue: () => T): T {\n if (cache) {\n updateTimeout();\n return cache;\n }\n cache = getValue();\n updateTimeout();\n return cache;\n },\n };\n }\n\n export function createWeakCache(): WeakCache {\n const weakCache: WeakMap<any, any> = new WeakMap();\n return {\n get: key => weakCache.get(key),\n save: (key: any, value: any) => weakCache.set(key, value),\n isChanged: (key: any, value: any) => Compare.isChanged(weakCache.get(key), value),\n };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { mapValues } from '../objects';\n\nexport type SchemaType =\n | 'string'\n | 'integer'\n | 'float'\n | 'boolean'\n | 'enum'\n | 'object'\n | 'range'\n | 'color'\n | 'array';\n\ninterface SchemaMixinDefaults {\n [defaultKey: string]: any;\n}\nexport interface SchemaDecoration<SCHEMA = any> {\n type: SchemaType;\n label?: string; // 显示的名字\n description?: string; // 更多描述,用于 tooltip 展示\n properties?: {\n [K in keyof SCHEMA]: SchemaDecoration<SCHEMA[K]> & { priority?: number };\n };\n enumValues?: (string | number)[]; // only for enum\n enumType?: string | number;\n enumLabels?: string[];\n rangeStep?: number; // range 一步大小\n max?: number; // 最大值,只适用于数字\n min?: number; // 最小值,只适用于数字\n disabled?: boolean; // 是否屏蔽\n default?: SCHEMA; // 默认值\n mixinDefaults?: SchemaMixinDefaults;\n}\n\nexport namespace SchemaDecoration {\n /**\n * 扩展 SchemaDecoration\n *\n * @param properties - 定义新的属性\n * @param baseDecoration - 基类\n * @param mixinDefaults - 修改默认值\n * @example\n * const MySchemaDecoration = SchemaDecoration.create({\n * myProp: { label: '', default: 1, type: 'number' }\n * },\n * TransformSchemaDecoration, // 继承 Transform\n * {\n * 'size.width': 100, // 修改 size 的默认值\n * 'size.height': 100,\n * })\n */\n export function create<T>(\n properties: { [key: string]: SchemaDecoration },\n baseDecoration?: SchemaDecoration,\n mixinDefaults?: SchemaMixinDefaults,\n ): SchemaDecoration<T> {\n return {\n type: 'object',\n properties: {\n ...baseDecoration?.properties,\n ...properties,\n },\n mixinDefaults: {\n ...baseDecoration?.mixinDefaults,\n ...mixinDefaults,\n },\n } as SchemaDecoration;\n }\n}\n\nexport namespace Schema {\n export function createDefault<T>(\n decoration: SchemaDecoration,\n mixinDefaults?: SchemaMixinDefaults,\n _key?: string,\n ): T {\n mixinDefaults = { ...decoration.mixinDefaults, ...mixinDefaults };\n const prefixKey = _key ? `${_key}.` : '';\n if (decoration.properties) {\n return mapValues(decoration.properties, (v, k) => {\n const childKey = prefixKey + k;\n if (mixinDefaults && mixinDefaults[childKey] !== undefined) {\n return mixinDefaults[childKey];\n }\n return createDefault(v, mixinDefaults, childKey);\n }) as T;\n }\n return typeof decoration.default === 'function' ? decoration.default() : decoration.default;\n }\n /**\n * 非 object 类\n */\n export function isBaseType(decoration: SchemaDecoration): boolean {\n return (\n decoration.type === 'string' ||\n decoration.type === 'float' ||\n decoration.type === 'integer' ||\n decoration.type === 'boolean' ||\n decoration.type === 'enum' ||\n decoration.type === 'color' ||\n decoration.type === 'range'\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Schema, type SchemaDecoration } from './schema';\n\nexport interface PositionSchema {\n x: number;\n y: number;\n}\n\nexport type RotationSchema = number;\n\nexport interface OriginSchema {\n x: number;\n y: number;\n}\n\nexport interface ScaleSchema {\n x: number;\n y: number;\n}\n\nexport interface ScrollSchema {\n scrollX: number;\n scrollY: number;\n}\n\nexport interface SizeSchema {\n width: number;\n height: number;\n locked?: boolean; // 是否开启等比锁\n}\n\nexport interface SkewSchema {\n x: number;\n y: number;\n}\n\nexport interface TransformSchema {\n position: PositionSchema;\n size: SizeSchema;\n origin: OriginSchema;\n scale: ScaleSchema;\n skew: SkewSchema;\n rotation: RotationSchema;\n}\n\nexport const SizeSchemaDecoration: SchemaDecoration<SizeSchema> = {\n label: '大小',\n properties: {\n width: { label: '宽', default: 0, type: 'float' },\n height: { label: '高', default: 0, type: 'float' },\n locked: { label: '等比锁', default: false, type: 'boolean' },\n },\n type: 'object',\n};\n\nexport const OriginSchemaDecoration: SchemaDecoration<OriginSchema> = {\n label: '原点',\n description: '用于设置旋转的中心位置',\n properties: {\n x: { label: 'x', default: 0.5, type: 'float' },\n y: { label: 'y', default: 0.5, type: 'float' },\n },\n type: 'object',\n};\n\nexport const PositionSchemaDecoration: SchemaDecoration<PositionSchema> = {\n label: '位置',\n properties: {\n x: { label: 'x', default: 0, type: 'float' },\n y: { label: 'y', default: 0, type: 'float' },\n },\n type: 'object',\n};\n\nexport const RotationSchemaDecoration: SchemaDecoration<RotationSchema> = {\n label: '旋转',\n type: 'float',\n default: 0,\n};\n\nexport const ScaleSchemaDecoration: SchemaDecoration<ScaleSchema> = {\n label: '缩放',\n properties: {\n x: { label: 'x', default: 1, type: 'float' },\n y: { label: 'y', default: 1, type: 'float' },\n },\n type: 'object',\n};\nexport const SkewSchemaDecoration: SchemaDecoration<SkewSchema> = {\n label: '倾斜',\n properties: {\n x: { label: 'x', default: 0, type: 'float' },\n y: { label: 'y', default: 0, type: 'float' },\n },\n type: 'object',\n};\n\nexport const TransformSchemaDecoration: SchemaDecoration<TransformSchema> = {\n properties: {\n position: PositionSchemaDecoration,\n size: SizeSchemaDecoration,\n origin: OriginSchemaDecoration,\n scale: ScaleSchemaDecoration,\n skew: SkewSchemaDecoration,\n rotation: RotationSchemaDecoration,\n },\n type: 'object',\n};\nexport namespace TransformSchema {\n export function createDefault(): TransformSchema {\n return Schema.createDefault<TransformSchema>(TransformSchemaDecoration);\n }\n\n export function toJSON(obj: TransformSchema): TransformSchema {\n return {\n position: { x: obj.position.x, y: obj.position.y },\n size: {\n width: obj.size.width,\n height: obj.size.height,\n locked: obj.size.locked,\n },\n origin: { x: obj.origin.x, y: obj.origin.y },\n scale: { x: obj.scale.x, y: obj.scale.y },\n skew: { x: obj.skew.x, y: obj.skew.y },\n rotation: obj.rotation,\n };\n }\n export function getDelta(\n oldTransform: TransformSchema,\n newTransform: TransformSchema,\n ): TransformSchema {\n return {\n position: {\n x: newTransform.position.x - oldTransform.position.x,\n y: newTransform.position.y - oldTransform.position.y,\n },\n size: {\n width: newTransform.size.width - oldTransform.size.width,\n height: newTransform.size.height - oldTransform.size.height,\n },\n origin: {\n x: newTransform.origin.x - oldTransform.origin.x,\n y: newTransform.origin.y - oldTransform.origin.y,\n },\n scale: {\n x: newTransform.scale.x - oldTransform.scale.x,\n y: newTransform.scale.y - oldTransform.scale.y,\n },\n skew: {\n x: newTransform.skew.x - oldTransform.skew.x,\n y: newTransform.skew.y - oldTransform.skew.y,\n },\n rotation: newTransform.rotation - oldTransform.rotation,\n };\n }\n\n export function mergeDelta(\n oldTransform: TransformSchema,\n newTransformDelta: TransformSchema,\n toFixedNum?: number,\n ): TransformSchema {\n const toFixed =\n toFixedNum !== undefined ? (v: number) => Math.round(v * 100) / 100 : (v: number) => v;\n return {\n position: {\n x: toFixed(newTransformDelta.position.x + oldTransform.position.x),\n y: toFixed(newTransformDelta.position.y + oldTransform.position.y),\n },\n size: {\n width: toFixed(newTransformDelta.size.width + oldTransform.size.width),\n height: toFixed(newTransformDelta.size.height + oldTransform.size.height),\n locked: oldTransform.size.locked,\n },\n origin: {\n x: toFixed(newTransformDelta.origin.x + oldTransform.origin.x),\n y: toFixed(newTransformDelta.origin.y + oldTransform.origin.y),\n },\n scale: {\n x: toFixed(newTransformDelta.scale.x + oldTransform.scale.x),\n y: toFixed(newTransformDelta.scale.y + oldTransform.scale.y),\n },\n skew: {\n x: toFixed(newTransformDelta.skew.x + oldTransform.skew.x),\n y: toFixed(newTransformDelta.skew.y + oldTransform.skew.y),\n },\n rotation: newTransformDelta.rotation + oldTransform.rotation,\n };\n }\n\n export function is(obj: object): obj is TransformSchema {\n return (\n obj &&\n (obj as TransformSchema).position &&\n (obj as TransformSchema).size &&\n typeof (obj as TransformSchema).position.x === 'number' &&\n typeof (obj as TransformSchema).size.width === 'number'\n );\n }\n}\n\nexport namespace SizeSchema {\n /**\n * 适配父节点宽高\n *\n * @return 返回需要缩放的比例,为 1 则不缩放\n */\n export function fixSize(currentSize: SizeSchema, parentSize: SizeSchema): number {\n if (currentSize.width <= parentSize.width && currentSize.height <= parentSize.height) return 1;\n const wScale = currentSize.width / parentSize.width;\n const hScale = currentSize.height / parentSize.height;\n const scale = wScale > hScale ? wScale : hScale;\n return 1 / scale;\n }\n\n /**\n * 填充父节点的宽高\n *\n * @return 返回放大的比例\n */\n export function coverSize(currentSize: SizeSchema, parentSize: SizeSchema): number {\n const wScale = currentSize.width / parentSize.width;\n const hScale = currentSize.height / parentSize.height;\n const scale = wScale < hScale ? wScale : hScale;\n return 1 / scale;\n }\n\n export function empty(): SizeSchema {\n return { width: 0, height: 0 };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type PositionSchema, type SizeSchema } from './schema-transform';\nimport { type SchemaDecoration } from './schema';\n\nexport type OpacitySchema = number;\n\nexport interface FlipSchema {\n x: boolean;\n y: boolean;\n}\n\nexport interface ShadowSchema {\n color: string;\n offsetX: number;\n offsetY: number;\n blur: number;\n}\n\nexport interface PaddingSchema {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport namespace PaddingSchema {\n export const empty = () => ({ left: 0, right: 0, top: 0, bottom: 0 });\n}\n\nexport type MarginSchema = PaddingSchema;\n\nexport interface TintSchema {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n}\n\nexport namespace TintSchema {\n export function isEmpty(tint: Partial<TintSchema> | undefined): boolean {\n if (!tint) return true;\n return (\n tint.topLeft === undefined &&\n tint.topRight === undefined &&\n tint.bottomLeft === undefined &&\n tint.bottomRight === undefined\n );\n }\n}\n\nexport const CropSchemaDecoration: SchemaDecoration<PositionSchema & SizeSchema> = {\n label: '裁剪',\n properties: {\n width: { label: '宽', type: 'integer' },\n height: { label: '高', type: 'integer' },\n x: { label: 'x', type: 'integer' },\n y: { label: 'y', type: 'integer' },\n },\n type: 'object',\n};\n\nexport const FlipSchemaDecoration: SchemaDecoration<FlipSchema> = {\n label: '镜像替换',\n properties: {\n x: { label: '水平镜像替换', default: false, type: 'boolean' },\n y: { label: '垂直镜像替换', default: false, type: 'boolean' },\n },\n type: 'object',\n};\nexport const PaddingSchemaDecoration: SchemaDecoration<PaddingSchema> = {\n label: '留白',\n properties: {\n left: { label: '左', default: 0, type: 'integer' },\n top: { label: '上', default: 0, type: 'integer' },\n right: { label: '右', default: 0, type: 'integer' },\n bottom: { label: '下', default: 0, type: 'integer' },\n },\n type: 'object',\n};\n\nexport const ShadowSchemaDecoration: SchemaDecoration<ShadowSchema> = {\n label: '阴影',\n properties: {\n offsetX: { label: 'X', type: 'integer' },\n offsetY: { label: 'Y', type: 'integer' },\n blur: { label: '模糊', type: 'integer' },\n color: { label: '颜色', type: 'color' },\n },\n type: 'object',\n};\n\nexport const TintSchemaDecoration: SchemaDecoration<TintSchema> = {\n label: '颜色',\n properties: {\n topLeft: { label: '左上', type: 'color' },\n topRight: { label: '右上', type: 'color' },\n bottomLeft: { label: '左下', type: 'color' },\n bottomRight: { label: '右下', type: 'color' },\n },\n type: 'object',\n};\n\nexport const OpacitySchemaDecoration: SchemaDecoration<OpacitySchema> = {\n label: '透明度',\n type: 'float',\n min: 0,\n max: 1,\n default: 1,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport clx from 'clsx';\n\nimport { each } from './objects';\nimport { Disposable } from './disposable';\nimport { Cache, type CacheManager } from './cache';\n\nconst toStyleKey = (key: string) => key.replace(/([A-Z])/, (k) => `-${k.toLowerCase()}`);\n\nexport type CSSStyle = {\n [P in keyof CSSStyleDeclaration]?: string | number | undefined;\n};\n\nexport interface DOMCache extends HTMLElement, Disposable {\n setStyle(style: CSSStyle): void;\n key?: string | number;\n}\n\nexport namespace domUtils {\n export function toPixel(num: number): string {\n return `${num}px`;\n }\n\n // export function fromPixel(pixel: string): number {\n // return parseInt(pixel.substring(0, pixel.length - 2));\n // }\n\n export function fromPercent(percent: string): number {\n return parseFloat(percent.substring(0, percent.length - 1));\n }\n\n export function toPercent(percent: number): string {\n return `${percent}%`;\n }\n\n export function enableEvent(element: HTMLDivElement): void {\n element.style.pointerEvents = 'all';\n }\n\n export function disableEvent(element: HTMLDivElement): void {\n element.style.pointerEvents = 'none';\n }\n\n export function createElement<T extends HTMLElement>(ele: string, ...classNames: string[]): T {\n const element = document.createElement(ele);\n if (classNames.length > 0) {\n element.className = clx(classNames);\n }\n return element as T;\n }\n\n export function createDivWithClass(...classNames: string[]): HTMLDivElement {\n return createElement('div', ...classNames) as HTMLDivElement;\n }\n\n export function addClass(element: Element, ...classNames: string[]): void {\n element.className = clx(classNames.concat(element.className.split(' ')));\n }\n\n export function delClass(element: Element, ...classNames: string[]): void {\n classNames.forEach((name) => {\n element.classList.remove(name);\n });\n element.className = element.classList.toString();\n }\n\n export function coverClass(element: Element, ...classNames: string[]): void {\n element.className = clx(classNames);\n }\n\n export function clearChildren(container: HTMLDivElement): void {\n container.innerHTML = '';\n }\n\n export function translatePercent(node: HTMLDivElement, x: number, y: number): void {\n node.style.transform = `translate(${x}%, ${y}%)`;\n }\n\n export function translateXPercent(node: HTMLDivElement, x: number): void {\n node.style.transform = `translateX(${x}%)`;\n }\n\n export function translateYPercent(node: HTMLDivElement, y: number): void {\n node.style.transform = `translateY(${y}%)`;\n }\n\n export function setStyle(node: HTMLElement, styles: CSSStyle): void {\n const styleStrs: string[] = [];\n each(styles, (value, key) => {\n if (value === undefined) return;\n if (typeof value === 'number' && key !== 'opacity' && key !== 'zIndex' && key !== 'scale') {\n value = toPixel(value);\n }\n styleStrs.push(`${toStyleKey(key)}:${value}`);\n });\n const oldStyle = node.getAttribute('style');\n const newStyle = styleStrs.join(';');\n if (oldStyle !== newStyle) {\n node.setAttribute('style', newStyle);\n }\n }\n\n export function classNameWithPrefix(prefix: string): (key: string, opts?: any) => string {\n return (key: string, opts?: any) =>\n clx(\n key\n .split(/\\s+/)\n .map((s) => `${prefix}-${s}`)\n .join(' '),\n opts\n );\n }\n\n export function addStandardDisposableListener(\n dom: HTMLElement | HTMLDocument,\n type: string,\n listener: EventListenerOrEventListenerObject | any,\n options?: boolean | any\n ): Disposable {\n dom.addEventListener(type, listener, options);\n return Disposable.create(() => {\n dom.removeEventListener(type, listener);\n });\n }\n\n /**\n * dom 缓存\n * @param parent\n * @param className\n */\n export function createDOMCache<T extends DOMCache = DOMCache>(\n parent: HTMLElement,\n className: string | (() => HTMLElement),\n children?: string\n ): CacheManager<T> {\n return Cache.create<T>((/* item */) => {\n // item 悬空了?\n const dom =\n typeof className === 'string' ? domUtils.createDivWithClass(className) : className();\n if (children) {\n dom.innerHTML = children;\n }\n parent.appendChild(dom);\n return Object.assign(dom, {\n // key: item ? item.key : undefined,\n dispose: () => {\n const { parentNode } = dom;\n if (parentNode) {\n parentNode.removeChild(dom);\n }\n },\n setStyle: (style: CSSStyle) => {\n domUtils.setStyle(dom, style);\n },\n }) as T;\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nlet _idx = 0;\n\nexport type LocalId = number;\nexport function generateLocalId(): LocalId {\n // @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n if (_idx === Number.MAX_SAFE_INTEGER) {\n _idx = 0;\n }\n return _idx++;\n}\n\nexport function _setIdx(idx: number): void {\n _idx = idx;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport function iterToArray<T = any>(iter: IterableIterator<T>): T[] {\n const result = [];\n for (const v of iter) {\n result.push(v);\n }\n return result;\n}\n\nexport function arrayToSet(arr: any[]): Set<any> {\n const set = new Set();\n for (let i = 0, len = arr.length; i < len; i++) {\n set.add(arr[i]);\n }\n return set;\n}\n\n/**\n * @see https://stackoverflow.com/a/9229821\n * export function arrayUnion(arr: any[]): any[] {\n * return [...new Set(arr)]\n * }\n */\nexport function arrayUnion(arr: any[]): any[] {\n const result: any[] = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n if (!result.includes(arr[i])) result.push(arr[i]);\n }\n return result;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type interfaces } from 'inversify';\n\nexport function bindContributions(bind: interfaces.Bind, target: any, contribs: any[]) {\n bind(target).toSelf().inSingletonScope();\n contribs.forEach(contrib => bind(contrib).toService(target));\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\ntype RequestFn = (...args: any[]) => Promise<any>;\n\n/**\n * 请求缓存\n * @param req\n */\n// eslint-disable-next-line import/no-mutable-exports\nexport const RequestCache = new Map<any, Promise<any>>();\nconst CACHE_TIME = 10000; // 缓存过期时间\n\nexport function clearRequestCache(): void {\n RequestCache.clear();\n}\n\nexport function requestWithMemo(\n req: RequestFn,\n cacheTime = CACHE_TIME,\n createCacheKey?: (...args: any[]) => any,\n): RequestFn {\n return (...args: any[]) => {\n const cacheKey = createCacheKey ? createCacheKey(...args) : req;\n if (RequestCache.has(cacheKey)) {\n return Promise.resolve(RequestCache.get(cacheKey));\n }\n const result = req(...args);\n const time = setTimeout(() => RequestCache.delete(cacheKey), cacheTime);\n const withErrorResult = result.catch(e => {\n // 请求错误情况下不缓存\n RequestCache.delete(cacheKey);\n clearTimeout(time);\n throw e;\n });\n RequestCache.set(cacheKey, withErrorResult);\n return withErrorResult;\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { MaybePromise } from './';\n\ntype FuncMaybePromise<D> = (d: D, ...others: any[]) => MaybePromise<D>;\ntype FuncPromise<D> = (d: D, ...others: any[]) => Promise<D>;\ntype Func<D> = (d: D, ...others: any[]) => D;\n\nexport function composeAsync<D>(...fns: FuncMaybePromise<D>[]): FuncPromise<D> {\n return async (data: D, ...others: any[]) => {\n let index = 0;\n while (fns[index]) {\n data = await fns[index](data, ...others);\n index += 1;\n }\n return data;\n };\n}\n\nexport function compose<D>(...fns: Func<D>[]): Func<D> {\n return (data: D, ...others: any[]) => {\n let index = 0;\n while (fns[index]) {\n data = fns[index](data, ...others);\n index += 1;\n }\n return data;\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type interfaces } from 'inversify';\n\nexport const ContributionProvider = Symbol('ContributionProvider');\n\nexport interface ContributionProvider<T extends object> {\n getContributions(): T[];\n\n forEach(fn: (v: T) => void): void;\n}\n\nclass ContainerContributionProviderImpl<T extends object> implements ContributionProvider<T> {\n protected services: T[] | undefined;\n\n constructor(\n protected readonly container: interfaces.Container,\n protected readonly identifier: interfaces.ServiceIdentifier<T>\n ) {}\n\n forEach(fn: (v: T) => void): void {\n this.getContributions().forEach(fn);\n }\n\n getContributions(): T[] {\n if (!this.services) {\n const currentServices: T[] = [];\n let { container } = this;\n if (container.isBound(this.identifier)) {\n try {\n currentServices.push(...container.getAll(this.identifier));\n } catch (error: any) {\n console.error(error);\n }\n }\n\n this.services = currentServices;\n }\n return this.services;\n }\n}\n\nexport function bindContributionProvider(bind: interfaces.Bind, id: symbol): void {\n bind(ContributionProvider)\n .toDynamicValue((ctx) => new ContainerContributionProviderImpl(ctx.container, id))\n .inSingletonScope()\n .whenTargetNamed(id);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Disposable } from './disposable';\ntype EventListener<K extends keyof HTMLElementEventMap> = (\n this: HTMLElement,\n event: HTMLElementEventMap[K],\n) => any;\ntype EventListenerOrEventListenerObject<K extends keyof HTMLElementEventMap> = EventListener<K>;\nexport function addEventListener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement,\n type: K,\n listener: EventListenerOrEventListenerObject<K>,\n useCapture?: boolean,\n): Disposable {\n element.addEventListener(type, listener, useCapture);\n return Disposable.create(() => element.removeEventListener(type, listener, useCapture));\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nclass Logger {\n isDevEnv() {\n return process.env.NODE_ENV === 'development';\n }\n\n info(...props: any) {\n if (!this.isDevEnv()) return;\n // eslint-disable-next-line no-console\n return console.info(props);\n }\n\n log(...props: any) {\n if (!this.isDevEnv()) return;\n // eslint-disable-next-line no-console\n return console.log(...props);\n }\n\n error(...props: any) {\n return console.error(...props);\n }\n\n warn(...props: any) {\n return console.warn(...props);\n }\n}\n\nexport const logger = new Logger();\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nfunction createStyleElement(\n styleId: string,\n container: HTMLElement = document.head,\n): HTMLStyleElement {\n const style = document.createElement('style');\n style.id = styleId;\n style.type = 'text/css';\n style.media = 'screen';\n style.appendChild(document.createTextNode('')); // trick for webkit\n container.appendChild(style);\n return style;\n}\n\nexport const DecorationStyle = {\n createStyleElement,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useState } from 'react';\n\nexport function useRefresh(defaultValue?: any): (v?: any) => void {\n const [, update] = useState<any>(defaultValue);\n return useCallback((v?: any) => update(v !== undefined ? v : {}), []);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKO,IAAM,EAAE,GAAG,IAAI;AAGf,IAAM,OAAO,KAAK;AAGlB,IAAM,aAAa,MAAM;AAGzB,IAAM,aAAa,KAAK;AAGxB,IAAK,SAAL,kBAAKA,YAAL;AAEL,EAAAA,gBAAA,UAAO,KAAP;AAEA,EAAAA,gBAAA,UAAO,KAAP;AAEA,EAAAA,gBAAA,UAAO,KAAP;AAEA,EAAAA,gBAAA,UAAO,KAAP;AAEA,EAAAA,gBAAA,UAAO,KAAP;AAVU,SAAAA;AAAA,GAAA;;;ACZL,IAAM,UAAN,MAAM,SAAQ;AAAA,EACnB,YAAmB,IAAI,GAAU,IAAI,GAAG;AAArB;AAAc;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA,EAKzC,IAAI,GAAqB;AACvB,WAAO,IAAI,SAAQ,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,GAAoB;AACtB,WAAO,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAOF;;;ACZO,IAAM,QAAN,MAAM,OAAwB;AAAA,EACnC,YAAmB,IAAI,GAAU,IAAI,GAAG;AAArB;AAAc;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzC,QAAe;AACb,WAAO,IAAI,OAAM,KAAK,GAAG,KAAK,CAAC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,GAAiB;AACxB,SAAK,IAAI,EAAE,GAAG,EAAE,CAAC;AAEjB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAyB,GAAS;AAChC,MAAE,IAAI,KAAK;AACX,MAAE,IAAI,KAAK;AAEX,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,GAAoB;AACzB,WAAO,EAAE,MAAM,KAAK,KAAK,EAAE,MAAM,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,IAAI,GAAG,IAAI,GAAS;AACtB,SAAK,IAAI;AACT,SAAK,IAAI;AAET,WAAO;AAAA,EACT;AACF;AAAA,CAEO,CAAUC,WAAV;AACE,EAAMA,OAAA,QAAgB,EAAE,GAAG,GAAG,GAAG,EAAE;AAOnC,WAAS,YAAY,IAAY,IAAoB;AAC1D,WAAO,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;AAAA,EAC1D;AAFO,EAAAA,OAAS;AAST,WAAS,eAAe,IAAY,IAAoB;AAC7D,WAAO,cAAc,IAAI,IAAI,GAAG;AAAA,EAClC;AAFO,EAAAA,OAAS;AAST,WAAS,cAAc,IAAY,IAAY,OAAuB;AAC3E,WAAO;AAAA,MACL,GAAG,GAAG,IAAI,SAAS,GAAG,IAAI,GAAG;AAAA,MAC7B,GAAG,GAAG,IAAI,SAAS,GAAG,IAAI,GAAG;AAAA,IAC/B;AAAA,EACF;AALO,EAAAA,OAAS;AAOT,WAAS,QAAQ,QAAwB;AAE9C,QAAI,OAAO,MAAM,EAAG,QAAO,IAAI;AAC/B,QAAI,OAAO,MAAM,EAAG,QAAO,IAAI;AAC/B,WAAO;AAAA,EACT;AALO,EAAAA,OAAS;AAYT,WAAS,KAAK,SAAiB,GAA4B;AAChE,WAAO;AAAA,MACL,GAAG,QAAQ,KAAK,EAAE,KAAK;AAAA,MACvB,GAAG,QAAQ,KAAK,EAAE,KAAK;AAAA,IACzB;AAAA,EACF;AALO,EAAAA,OAAS;AAYT,WAAS,wBACd,SACA,WACA,UACQ;AACR,UAAM,SAAS,UAAU,IAAI,QAAQ;AACrC,UAAM,SAAS,UAAU,IAAI,QAAQ;AAErC,UAAM,YAAY,WAAW,IAAI,IAAI,KAAK,KAAK,YAAY,KAAK,IAAI,UAAU,IAAI,UAAU,EAAE;AAC9F,UAAM,QAAQ,SAAS,IAAI,YAAY,CAAC;AACxC,UAAM,YAAY,WAAW,IAAI,WAAW,KAAK,IAAK,YAAY,SAAU,MAAM;AAClF,UAAM,QAAQ,SAAS,IAAI,YAAY,CAAC;AAExC,WAAO;AAAA,MACL,GAAG,QAAQ,IAAI;AAAA,MACf,GAAG,QAAQ,IAAI;AAAA,IACjB;AAAA,EACF;AAjBO,EAAAA,OAAS;AAAA,GAzDD;;;AC1DV,IAAM,YAAN,MAAM,WAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYrB,YAAmB,IAAI,GAAU,IAAI,GAAU,QAAQ,GAAU,SAAS,GAAG;AAA1D;AAAc;AAAc;AAAkB;AARjE;AAAA;AAAA;AAAA,SAAgB;AAAA,EAQ8D;AAAA;AAAA;AAAA;AAAA;AAAA,EAO9E,WAAW,QAAmB;AAC5B,WAAO,IAAI,WAAU,GAAG,GAAG,GAAG,CAAC;AAAA,EACjC;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK,IAAI,KAAK;AAAA,EACvB;AAAA,EAEA,IAAI,MAAc;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,IAAI,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAmB;AACjB,WAAO,IAAI,WAAU,KAAK,GAAG,KAAK,GAAG,KAAK,OAAO,KAAK,MAAM;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,WAAiC;AACxC,SAAK,IAAI,UAAU;AACnB,SAAK,IAAI,UAAU;AACnB,SAAK,QAAQ,UAAU;AACvB,SAAK,SAAS,UAAU;AAExB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAiC;AACtC,cAAU,IAAI,KAAK;AACnB,cAAU,IAAI,KAAK;AACnB,cAAU,QAAQ,KAAK;AACvB,cAAU,SAAS,KAAK;AAExB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS,GAAW,GAAoB;AACtC,QAAI,KAAK,SAAS,KAAK,KAAK,UAAU,GAAG;AACvC,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO;AAClC,UAAI,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ;AACnC,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,MAA0B;AAChC,WACE,KAAK,MAAM,KAAK,KAChB,KAAK,MAAM,KAAK,KAChB,KAAK,UAAU,KAAK,SACpB,KAAK,WAAW,KAAK;AAAA,EAEzB;AAAA,EAEA,kBAAkB,MAA0B;AAC1C,WACE,KAAK,QAAQ,KAAK,QAClB,KAAK,SAAS,KAAK,SACnB,KAAK,OAAO,KAAK,OACjB,KAAK,UAAU,KAAK;AAAA,EAExB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAW,GAAG,WAAW,UAAgB;AAC3C,SAAK,KAAK;AACV,SAAK,KAAK;AAEV,SAAK,SAAS,WAAW;AACzB,SAAK,UAAU,WAAW;AAE1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,WAA4B;AAC9B,UAAM,KAAK,KAAK,IAAI,KAAK,GAAG,UAAU,CAAC;AACvC,UAAM,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,OAAO,UAAU,IAAI,UAAU,KAAK;AACtE,UAAM,KAAK,KAAK,IAAI,KAAK,GAAG,UAAU,CAAC;AACvC,UAAM,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,UAAU,IAAI,UAAU,MAAM;AAExE,SAAK,IAAI;AACT,SAAK,QAAQ,KAAK,IAAI,KAAK,IAAI,CAAC;AAChC,SAAK,IAAI;AACT,SAAK,SAAS,KAAK,IAAI,KAAK,IAAI,CAAC;AAEjC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,aAAa,GAAG,YAAY,MAAa;AAC5C,UAAM,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,QAAQ,aAAa,UAAU,IAAI;AACvE,UAAM,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,SAAS,aAAa,UAAU,IAAI;AAExE,SAAK,IAAI,KAAK,OAAO,KAAK,IAAI,aAAa,UAAU,IAAI;AACzD,SAAK,IAAI,KAAK,OAAO,KAAK,IAAI,aAAa,UAAU,IAAI;AAEzD,SAAK,QAAQ,KAAK,KAAK;AACvB,SAAK,SAAS,KAAK,KAAK;AAExB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,WAA4B;AAClC,UAAM,KAAK,KAAK,IAAI,KAAK,GAAG,UAAU,CAAC;AACvC,UAAM,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,OAAO,UAAU,IAAI,UAAU,KAAK;AACtE,UAAM,KAAK,KAAK,IAAI,KAAK,GAAG,UAAU,CAAC;AACvC,UAAM,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,UAAU,IAAI,UAAU,MAAM;AAExE,SAAK,IAAI;AACT,SAAK,QAAQ,KAAK;AAClB,SAAK,IAAI;AACT,SAAK,SAAS,KAAK;AAEnB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO;AAAA,MACL,GAAG,KAAK,IAAI,KAAK,QAAQ;AAAA,MACzB,GAAG,KAAK,IAAI,KAAK,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,IAAI,cAAsB;AACxB,WAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EAEA,IAAI,UAAkB;AACpB,WAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EAEA,IAAI,eAAuB;AACzB,WAAO;AAAA,MACL,GAAG,KAAK,IAAI,KAAK,QAAQ;AAAA,MACzB,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EAEA,IAAI,YAAoB;AACtB,WAAO;AAAA,MACL,GAAG,KAAK,IAAI,KAAK,QAAQ;AAAA,MACzB,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EAEA,IAAI,cAAsB;AACxB,WAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,GAAG,KAAK,IAAI,KAAK,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,GAAG,KAAK,IAAI,KAAK,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,IAA+C;AACpD,WAAO,GAAG,IAAI;AAAA,EAChB;AAAA,EAEA,IAAI,gBAAwB;AAC1B,WAAO,MAAM,YAAY,KAAK,SAAS,KAAK,WAAW;AAAA,EACzD;AAAA,EAEA,aAAqB;AACnB,WAAO,SAAS,KAAK,CAAC,YAAY,KAAK,CAAC,cAAc,KAAK,KAAK,eAAe,KAAK,MAAM;AAAA,EAC5F;AAAA,EAEA,YAAY,SAAwB;AAClC,SAAK,KAAK,QAAQ;AAClB,SAAK,KAAK,QAAQ;AAClB,SAAK,SAAS,QAAQ,OAAO,QAAQ;AACrC,SAAK,UAAU,QAAQ,MAAM,QAAQ;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,SAAwB;AACrC,SAAK,KAAK,QAAQ;AAClB,SAAK,KAAK,QAAQ;AAClB,SAAK,QAAQ,KAAK,QAAQ,QAAQ,OAAO,QAAQ;AACjD,SAAK,SAAS,KAAK,SAAS,QAAQ,MAAM,QAAQ;AAClD,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,QAAgB;AACzB,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEA,aAAa;AACX,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AACF;AAEO,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,gBAAa;AACb,EAAAA,oBAAA,kBAAe;AACf,EAAAA,oBAAA,iBAAc;AACd,EAAAA,oBAAA,eAAY;AACZ,EAAAA,oBAAA,kBAAe;AACf,EAAAA,oBAAA,kBAAe;AACf,EAAAA,oBAAA,2BAAwB;AACxB,EAAAA,oBAAA,yBAAsB;AARZ,SAAAA;AAAA,GAAA;AAWL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,gBAAa;AACb,EAAAA,qBAAA,kBAAe;AACf,EAAAA,qBAAA,iBAAc;AACd,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,kBAAe;AACf,EAAAA,qBAAA,kBAAe;AACf,EAAAA,qBAAA,2BAAwB;AACxB,EAAAA,qBAAA,yBAAsB;AARZ,SAAAA;AAAA,GAAA;AAAA,CAaL,CAAUC,eAAV;AAIE,WAAS,MAAM,YAAyB,MAAuC;AACpF,QAAI,WAAW,UAAU,EAAG,QAAO;AACnC,YAAQ,MAAM;AAAA;AAAA;AAAA;AAAA,MAIZ,KAAK;AACH,cAAM,YAAY,KAAK,IAAI,GAAG,WAAW,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7D,mBAAW,QAAQ,CAAC,SAAS;AAC3B,eAAK,IAAI,YAAY,KAAK;AAAA,QAC5B,CAAC;AACD;AAAA;AAAA;AAAA;AAAA,MAIF,KAAK;AACH,cAAM,UAAU,QAAQ,UAAU,EAAE,OAAO;AAC3C,mBAAW,QAAQ,CAAC,SAAS;AAC3B,eAAK,IAAI,UAAU,KAAK,QAAQ;AAAA,QAClC,CAAC;AACD;AAAA;AAAA;AAAA;AAAA,MAIF,KAAK;AACH,cAAM,UAAU,KAAK,IAAI,GAAG,WAAW,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AACzD,mBAAW,QAAQ,CAAC,SAAS;AAC3B,eAAK,IAAI;AAAA,QACX,CAAC;AACD;AAAA;AAAA;AAAA;AAAA,MAIF,KAAK;AACH,cAAM,UAAU,QAAQ,UAAU,EAAE,OAAO;AAC3C,mBAAW,QAAQ,CAAC,SAAS;AAC3B,eAAK,IAAI,UAAU,KAAK,SAAS;AAAA,QACnC,CAAC;AACD;AAAA;AAAA;AAAA;AAAA,MAIF,KAAK;AACH,cAAM,WAAW,KAAK,IAAI,GAAG,WAAW,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAC3D,mBAAW,QAAQ,CAAC,SAAS;AAC3B,eAAK,IAAI,WAAW,KAAK;AAAA,QAC3B,CAAC;AACD;AAAA;AAAA;AAAA;AAAA,MAIF,KAAK;AACH,cAAM,SAAS,KAAK,IAAI,GAAG,WAAW,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AACvD,mBAAW,QAAQ,CAAC,SAAS;AAC3B,eAAK,IAAI;AAAA,QACX,CAAC;AACD;AAAA;AAAA;AAAA;AAAA,MAIF,KAAK;AAEH,YAAI,WAAW,UAAU,EAAG;AAC5B,cAAM,OAAO,WAAW,MAAM,EAAE,KAAK,CAAC,IAAI,OAAO,GAAG,OAAO,GAAG,IAAI;AAClE,cAAM,SAAS,QAAQ,UAAU;AACjC,cAAM,QACJ,WAAW,OAAO,CAAC,GAAG,SAAS,IAAI,KAAK,OAAO,OAAO,KAAK,KAAK,WAAW,SAAS;AACtF,aAAK,OAAO,CAAC,MAAM,SAAS;AAC1B,eAAK,IAAI;AACT,iBAAO,OAAO,KAAK,QAAQ;AAAA,QAC7B,GAAG,OAAO,CAAC;AACX;AAAA;AAAA;AAAA;AAAA,MAIF,KAAK;AACH,YAAI,WAAW,UAAU,EAAG;AAC5B,cAAM,QAAQ,WAAW,MAAM,EAAE,KAAK,CAAC,IAAI,OAAO,GAAG,MAAM,GAAG,GAAG;AACjE,cAAM,UAAU,QAAQ,UAAU;AAClC,cAAM,SACJ,WAAW,OAAO,CAAC,GAAG,SAAS,IAAI,KAAK,QAAQ,QAAQ,MAAM,KAAK,WAAW,SAAS;AACzF,cAAM,OAAO,CAAC,KAAK,SAAS;AAC1B,eAAK,IAAI;AACT,iBAAO,MAAM,KAAK,SAAS;AAAA,QAC7B,GAAG,QAAQ,CAAC;AACZ;AAAA,MACF;AACE;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AA1FO,EAAAA,WAAS;AA+FT,WAAS,QAAQ,YAAoC;AAC1D,UAAM,SAASA,WAAU,MAAM,MAAM;AACrC,QAAI,CAAC,WAAW,OAAQ,QAAO;AAC/B,UAAM,QAAkB,CAAC;AACzB,UAAM,OAAiB,CAAC;AACxB,UAAM,SAAmB,CAAC;AAC1B,UAAM,UAAoB,CAAC;AAC3B,eAAW,QAAQ,CAAC,MAAM;AACxB,YAAM,KAAK,EAAE,IAAI;AACjB,aAAO,KAAK,EAAE,KAAK;AACnB,cAAQ,KAAK,EAAE,MAAM;AACrB,WAAK,KAAK,EAAE,GAAG;AAAA,IACjB,CAAC;AAGD,UAAM,OAAO,KAAK,IAAI,MAAM,MAAM,KAAK;AAEvC,UAAM,QAAQ,KAAK,IAAI,MAAM,MAAM,MAAM;AAEzC,UAAM,MAAM,KAAK,IAAI,MAAM,MAAM,IAAI;AAErC,UAAM,SAAS,KAAK,IAAI,MAAM,MAAM,OAAO;AAC3C,WAAO,IAAI;AACX,WAAO,QAAQ,QAAQ;AACvB,WAAO,IAAI;AACX,WAAO,SAAS,SAAS;AACzB,WAAO;AAAA,EACT;AA3BO,EAAAA,WAAS;AAkCT,WAAS,WACd,SACA,SACA,WACS;AACT,UAAM,QAAQ,QAAQ;AACtB,UAAM,OAAO,QAAQ;AACrB,UAAM,SAAS,QAAQ;AACvB,UAAM,UAAU,QAAQ;AACxB,UAAM,QAAQ,QAAQ;AACtB,UAAM,OAAO,QAAQ;AACrB,UAAM,SAAS,QAAQ;AACvB,UAAM,UAAU,QAAQ;AAExB,QAAI,cAAc,aAAc,QAAO,SAAS,SAAS,QAAQ;AACjE,QAAI,cAAc,WAAY,QAAO,UAAU,QAAQ,OAAO;AAC9D,QAAI,SAAS,SAAS,QAAQ,QAAQ;AACpC,UAAI,UAAU,QAAQ,OAAO,SAAS;AACpC,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAtBO,EAAAA,WAAS;AA6BT,WAAS,uBACd,OACA,SACA,OACA,SACS;AACT,UAAM,OAAO,IAAI,QAAQ,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,OAAO;AACzE,UAAM,OAAO,IAAI,QAAQ,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,OAAO;AACzE,UAAM,KAAK,KAAK,YAAY,IAAI,KAAK,WAAW;AAChD,UAAM,SAAS,KAAK;AACpB,QACE,KAAK,oBAAoB,MAAM,IAAI,KAAK,oBAAoB,MAAM,KAClE,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC;AAEvB,aAAO;AACT,UAAM,SAAS,KAAK;AACpB,QACE,KAAK,oBAAoB,MAAM,IAAI,KAAK,oBAAoB,MAAM,KAClE,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC;AAEvB,aAAO;AACT,UAAM,SAAS,KAAK;AACpB,QACE,KAAK,oBAAoB,MAAM,IAAI,KAAK,oBAAoB,MAAM,KAClE,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC;AAEvB,aAAO;AACT,UAAM,SAAS,KAAK;AACpB,QACE,KAAK,oBAAoB,MAAM,IAAI,KAAK,oBAAoB,MAAM,KAClE,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC;AAEvB,aAAO;AACT,WAAO;AAAA,EACT;AAlCO,EAAAA,WAAS;AAyCT,WAAS,kBACd,MACA,UACA,WAAW,GACX,aAAa,OACJ;AACT,QAAI,YAAY;AACd,aAAO,SAAS,kBAAkB,IAAI;AAAA,IACxC;AACA,QAAI,aAAa,EAAG,QAAOA,WAAU,WAAW,MAAM,QAAQ;AAC9D,WAAOA,WAAU,uBAAuB,MAAM,UAAU,UAAU,CAAC;AAAA,EACrE;AAXO,EAAAA,WAAS;AAoBT,WAAS,mBACd,QACA,UACA,UAAU,GACC;AACX,UAAM,EAAE,MAAM,OAAO,OAAO,QAAQ,KAAK,MAAM,QAAQ,SAAS,OAAO,OAAO,IAAI;AAClF,UAAM,EAAE,MAAM,OAAO,OAAO,QAAQ,KAAK,MAAM,QAAQ,QAAQ,IAAI;AACnE,QAAI,SAAS,OAAO;AAElB,aAAO,IAAI,QAAQ;AAAA,IACrB,WAAW,UAAU,QAAQ;AAE3B,aAAO,IAAI,SAAS,UAAU;AAAA,IAChC;AACA,QAAI,QAAQ,MAAM;AAEhB,aAAO,IAAI,OAAO;AAAA,IACpB,WAAW,WAAW,SAAS;AAE7B,aAAO,IAAI,UAAU,UAAU;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAtBO,EAAAA,WAAS;AA0BT,WAAS,6BAA6B,QAAgB,QAA2B;AACtF,UAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO;AAClD,UAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO;AAClD,UAAM,QAAQ,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC;AAC1C,UAAM,SAAS,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC;AAC3C,WAAO,IAAIA,WAAU,GAAG,GAAG,OAAO,MAAM;AAAA,EAC1C;AANO,EAAAA,WAAS;AAAA,GAzPD;AAsQV,IAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA,EAUnB,YACE,aACU,OACA,QACV,UACA;AAHU;AACA;AAGV,SAAK,cAAc,IAAI,QAAQ,YAAY,GAAG,YAAY,CAAC;AAC3D,SAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC;AAC/D,SAAK,QAAQ,IAAI,QAAQ,KAAK,KAAK,MAAM,GAAG,KAAK,MAAM,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,MAAuB;AACzC,WACG,KAAK,QAAQ,IAAK,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,IAC/C,KAAK,SAAS,IAAK,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC;AAAA,EAErD;AACF;;;ACnmBO,IAAM,SAAN,MAAM,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAUlB,YAAmB,IAAI,GAAU,IAAI,GAAU,SAAS,GAAG;AAAxC;AAAc;AAAc;AAN/C;AAAA;AAAA;AAAA,SAAgB;AAAA,EAM4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO5D,QAAgB;AACd,WAAO,IAAI,QAAO,KAAK,GAAG,KAAK,GAAG,KAAK,MAAM;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,GAAW,GAAoB;AACtC,QAAI,KAAK,UAAU,GAAG;AACpB,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,KAAK,SAAS,KAAK;AAC9B,QAAI,KAAK,KAAK,IAAI;AAClB,QAAI,KAAK,KAAK,IAAI;AAElB,UAAM;AACN,UAAM;AAEN,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAuB;AACrB,WAAO,IAAI;AAAA,MACT,KAAK,IAAI,KAAK;AAAA,MACd,KAAK,IAAI,KAAK;AAAA,MACd,KAAK,SAAS;AAAA,MACd,KAAK,SAAS;AAAA,IAChB;AAAA,EACF;AACF;;;ACzCO,IAAM,SAAN,MAAM,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlB,YACS,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACZ;AANO;AACA;AACA;AACA;AACA;AACA;AAhBT,SAAO,QAA6B;AAAA,EAiBjC;AAAA;AAAA;AAAA;AAAA,EAKH,WAAW,WAAmB;AAC5B,WAAO,IAAI,QAAO;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,cAAsB;AAC/B,WAAO,IAAI,QAAO;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,OAAuB;AAC/B,QAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,SAAK,IAAI,MAAM,CAAC;AAChB,SAAK,IAAI,MAAM,CAAC;AAChB,SAAK,IAAI,MAAM,CAAC;AAChB,SAAK,IAAI,MAAM,CAAC;AAChB,SAAK,KAAK,MAAM,CAAC;AACjB,SAAK,KAAK,MAAM,CAAC;AACjB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,GAAW,GAAW,GAAW,GAAW,IAAY,IAAkB;AAC5E,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,KAAK;AACV,SAAK,KAAK;AAEV,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,WAAoB,KAAkC;AAC5D,QAAI,CAAC,KAAK,OAAO;AACf,WAAK,QAAQ,IAAI,aAAa,CAAC;AAAA,IACjC;AAEA,UAAM,QAAQ,OAAO,KAAK;AAE1B,QAAI,WAAW;AACb,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI;AACX,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI;AACX,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI;AAAA,IACb,OAAO;AACL,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI,KAAK;AAChB,YAAM,CAAC,IAAI;AACX,YAAM,CAAC,IAAI;AACX,YAAM,CAAC,IAAI;AAAA,IACb;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,KAAa,QAAyB;AAC1C,aAAS,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAEhC,UAAM,EAAE,GAAG,EAAE,IAAI;AAEjB,WAAO,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK;AAC1C,WAAO,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK;AAE1C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAa,KAAa,QAAyB;AACjD,aAAS,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAEhC,UAAM,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,KAAK;AAEjD,UAAM,EAAE,EAAE,IAAI;AACd,UAAM,EAAE,EAAE,IAAI;AAEd,WAAO,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK;AACxF,WAAO,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK;AAEzF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,GAAW,GAAiB;AACpC,SAAK,MAAM;AACX,SAAK,MAAM;AAEX,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,GAAW,GAAiB;AAChC,SAAK,KAAK;AACV,SAAK,KAAK;AACV,SAAK,KAAK;AACV,SAAK,KAAK;AACV,SAAK,MAAM;AACX,SAAK,MAAM;AAEX,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAqB;AAC1B,UAAM,MAAM,KAAK,IAAI,KAAK;AAC1B,UAAM,MAAM,KAAK,IAAI,KAAK;AAE1B,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,MAAM,KAAK;AAEjB,SAAK,IAAI,KAAK,MAAM,KAAK,IAAI;AAC7B,SAAK,IAAI,KAAK,MAAM,KAAK,IAAI;AAC7B,SAAK,IAAI,KAAK,MAAM,KAAK,IAAI;AAC7B,SAAK,IAAI,KAAK,MAAM,KAAK,IAAI;AAC7B,SAAK,KAAK,MAAM,MAAM,KAAK,KAAK;AAChC,SAAK,KAAK,MAAM,MAAM,KAAK,KAAK;AAEhC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,QAAsB;AAC3B,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAEhB,SAAK,IAAI,OAAO,IAAI,KAAK,OAAO,IAAI;AACpC,SAAK,IAAI,OAAO,IAAI,KAAK,OAAO,IAAI;AACpC,SAAK,IAAI,OAAO,IAAI,KAAK,OAAO,IAAI;AACpC,SAAK,IAAI,OAAO,IAAI,KAAK,OAAO,IAAI;AAEpC,SAAK,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK;AACjD,SAAK,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK;AAEjD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,aACE,GACA,GACA,QACA,QACA,QACA,QACA,UACA,OACA,OACM;AACN,SAAK,IAAI,KAAK,IAAI,WAAW,KAAK,IAAI;AACtC,SAAK,IAAI,KAAK,IAAI,WAAW,KAAK,IAAI;AACtC,SAAK,IAAI,CAAC,KAAK,IAAI,WAAW,KAAK,IAAI;AACvC,SAAK,IAAI,KAAK,IAAI,WAAW,KAAK,IAAI;AAEtC,SAAK,KAAK,KAAK,SAAS,KAAK,IAAI,SAAS,KAAK;AAC/C,SAAK,KAAK,KAAK,SAAS,KAAK,IAAI,SAAS,KAAK;AAE/C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,QAAsB;AAC5B,UAAM,MAAM,KAAK;AAEjB,QAAI,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG;AACxE,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEhB,WAAK,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,OAAO;AACzC,WAAK,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,OAAO;AACzC,WAAK,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,OAAO;AACzC,WAAK,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,OAAO;AAAA,IAC3C;AAEA,SAAK,KAAK,MAAM,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,OAAO;AACvD,SAAK,KAAK,MAAM,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,OAAO;AAEvD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,WAAiC;AAEzC,UAAM,EAAE,EAAE,IAAI;AACd,UAAM,EAAE,EAAE,IAAI;AACd,UAAM,EAAE,EAAE,IAAI;AACd,UAAM,EAAE,EAAE,IAAI;AAEd,UAAM,QAAQ,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC;AAC/B,UAAM,QAAQ,KAAK,MAAM,GAAG,CAAC;AAE7B,UAAM,QAAQ,KAAK,IAAI,QAAQ,KAAK;AAEpC,QAAI,QAAQ,QAAW,KAAK,IAAI,OAAO,KAAK,IAAI,MAAS;AACvD,gBAAU,WAAW;AACrB,gBAAU,KAAK,IAAI;AACnB,gBAAU,KAAK,IAAI;AAAA,IACrB,OAAO;AACL,gBAAU,WAAW;AACrB,gBAAU,KAAK,IAAI;AACnB,gBAAU,KAAK,IAAI;AAAA,IACrB;AAGA,cAAU,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAC3C,cAAU,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAG3C,cAAU,SAAS,IAAI,KAAK;AAC5B,cAAU,SAAS,IAAI,KAAK;AAE5B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,SAAe;AACb,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,MAAM,KAAK;AACjB,UAAM,IAAI,KAAK,KAAK,KAAK;AAEzB,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,CAAC,KAAK;AACf,SAAK,IAAI,CAAC,KAAK;AACf,SAAK,IAAI,KAAK;AACd,SAAK,MAAM,KAAK,KAAK,KAAK,KAAK,OAAO;AACtC,SAAK,KAAK,EAAE,KAAK,KAAK,KAAK,KAAK,OAAO;AAEvC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAiB;AACf,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,KAAK;AACV,SAAK,KAAK;AAEV,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAoB;AAClB,WAAO,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAgB;AACd,UAAM,SAAS,IAAI,QAAO;AAE1B,WAAO,IAAI,KAAK;AAChB,WAAO,IAAI,KAAK;AAChB,WAAO,IAAI,KAAK;AAChB,WAAO,IAAI,KAAK;AAChB,WAAO,KAAK,KAAK;AACjB,WAAO,KAAK,KAAK;AAEjB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAwB;AAC7B,WAAO,IAAI,KAAK;AAChB,WAAO,IAAI,KAAK;AAChB,WAAO,IAAI,KAAK;AAChB,WAAO,IAAI,KAAK;AAChB,WAAO,KAAK,KAAK;AACjB,WAAO,KAAK,KAAK;AAEjB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,QAAsB;AAC7B,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,OAAO;AAChB,SAAK,IAAI,OAAO;AAChB,SAAK,KAAK,OAAO;AACjB,SAAK,KAAK,OAAO;AAEjB,WAAO;AAAA,EACT;AACF;;;ACvaO,IAAM,kBAAN,MAAM,iBAA2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWtD,YAAY,IAAsB,OAAU,IAAI,GAAG,IAAI,GAAG;AACxD,SAAK,KAAK;AACV,SAAK,KAAK;AAEV,SAAK,KAAK;AACV,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,IAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,EAAE,OAAO;AACX,QAAI,KAAK,OAAO,OAAO;AACrB,WAAK,KAAK;AACV,WAAK,GAAG,KAAK,KAAK,KAAK;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,IAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,EAAE,OAAO;AACX,QAAI,KAAK,OAAO,OAAO;AACrB,WAAK,KAAK;AACV,WAAK,GAAG,KAAK,KAAK,KAAK;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,KAAK,KAAK,IAAI,QAAQ,KAAK,OAAwB;AACvD,WAAO,IAAI,iBAAgB,IAAI,OAAO,KAAK,IAAI,KAAK,EAAE;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,IAAI,GAAG,IAAI,GAAS;AACtB,QAAI,KAAK,OAAO,KAAK,KAAK,OAAO,GAAG;AAClC,WAAK,KAAK;AACV,WAAK,KAAK;AACV,WAAK,GAAG,KAAK,KAAK,KAAK;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,GAAiB;AACxB,QAAI,KAAK,OAAO,EAAE,KAAK,KAAK,OAAO,EAAE,GAAG;AACtC,WAAK,KAAK,EAAE;AACZ,WAAK,KAAK,EAAE;AACZ,WAAK,GAAG,KAAK,KAAK,KAAK;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAA0B,GAAW;AACnC,MAAE,IAAI,KAAK;AACX,MAAE,IAAI,KAAK;AAEX,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,GAAoB;AACzB,WAAO,EAAE,MAAM,KAAK,MAAM,EAAE,MAAM,KAAK;AAAA,EACzC;AACF;;;ACxHO,IAAM,aAAN,MAAM,WAAU;AAAA,EAwCrB,cAAc;AAMZ,SAAK,iBAAiB,IAAI,OAAO;AAOjC,SAAK,iBAAiB,IAAI,OAAO;AAOjC,SAAK,WAAW,IAAI,gBAAgB,KAAK,UAAU,MAAM,GAAG,CAAC;AAO7D,SAAK,QAAQ,IAAI,gBAAgB,KAAK,UAAU,MAAM,GAAG,CAAC;AAO1D,SAAK,QAAQ,IAAI,gBAAgB,KAAK,UAAU,MAAM,GAAG,CAAC;AAO1D,SAAK,OAAO,IAAI,gBAAgB,KAAK,YAAY,MAAM,GAAG,CAAC;AAQ3D,SAAK,YAAY;AASjB,SAAK,MAAM;AASX,SAAK,MAAM;AASX,SAAK,MAAM;AASX,SAAK,MAAM;AAQX,SAAK,WAAW;AAShB,SAAK,kBAAkB;AAQvB,SAAK,WAAW;AAShB,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,WAAiB;AACzB,SAAK;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,aAAmB;AAC3B,SAAK,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,KAAK,CAAC;AAChD,SAAK,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,KAAK,CAAC;AAChD,SAAK,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,KAAK,KAAK,CAAC;AACjD,SAAK,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,KAAK,CAAC;AAEhD,SAAK;AAAA,EACP;AAAA;AAAA;AAAA;AAAA,EAKA,uBAA6B;AAC3B,UAAM,KAAK,KAAK;AAEhB,QAAI,KAAK,aAAa,KAAK,iBAAiB;AAE1C,SAAG,IAAI,KAAK,MAAM,KAAK,MAAM;AAC7B,SAAG,IAAI,KAAK,MAAM,KAAK,MAAM;AAC7B,SAAG,IAAI,KAAK,MAAM,KAAK,MAAM;AAC7B,SAAG,IAAI,KAAK,MAAM,KAAK,MAAM;AAE7B,SAAG,KAAK,KAAK,SAAS,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,IAAI,GAAG;AACnE,SAAG,KAAK,KAAK,SAAS,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,IAAI,GAAG;AACnE,WAAK,kBAAkB,KAAK;AAG5B,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,iBAAkC;AAChD,UAAM,KAAK,KAAK;AAEhB,QAAI,KAAK,aAAa,KAAK,iBAAiB;AAE1C,SAAG,IAAI,KAAK,MAAM,KAAK,MAAM;AAC7B,SAAG,IAAI,KAAK,MAAM,KAAK,MAAM;AAC7B,SAAG,IAAI,KAAK,MAAM,KAAK,MAAM;AAC7B,SAAG,IAAI,KAAK,MAAM,KAAK,MAAM;AAE7B,SAAG,KAAK,KAAK,SAAS,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,IAAI,GAAG;AACnE,SAAG,KAAK,KAAK,SAAS,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,IAAI,GAAG;AACnE,WAAK,kBAAkB,KAAK;AAG5B,WAAK,YAAY;AAAA,IACnB;AAEA,QAAI,KAAK,cAAc,gBAAgB,UAAU;AAE/C,YAAM,KAAK,gBAAgB;AAC3B,YAAM,KAAK,KAAK;AAEhB,SAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAC/B,SAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAC/B,SAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAC/B,SAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAC/B,SAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG;AACzC,SAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG;AAEzC,WAAK,YAAY,gBAAgB;AAGjC,WAAK;AAAA,IACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,QAAsB;AAClC,WAAO,UAAU,IAAI;AACrB,SAAK;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,OAAe;AAC1B,QAAI,KAAK,cAAc,OAAO;AAC5B,WAAK,YAAY;AACjB,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlRa,WAQY,WAAW,IAAI,WAAU;AAR3C,IAAM,YAAN;;;ACCA,SAAS,KAAK,OAAe,KAAa,KAAqB;AACpE,QAAM,QAAQ,MAAM;AAEpB,SAAO,QAAU,QAAQ,OAAO,QAAS,SAAS;AACpD;;;ACXO,IAAU;AAAA,CAAV,CAAUC,WAAV;AASE,WAASC,MAAK,OAAuB;AAC1C,WAAO,KAAS,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE;AAAA,EAC1C;AAFO,EAAAD,OAAS,OAAAC;AAWT,WAAS,YAAY,OAAuB;AACjD,WAAO,KAAS,OAAO,MAAM,GAAG;AAAA,EAClC;AAFO,EAAAD,OAAS;AAST,WAAS,cACd,QACA,QACA,cAAsB,EAAE,GAAG,GAAG,GAAG,EAAE,GAC3B;AACR,UAAM,KAAK;AAAA,MACT,GAAG,OAAO,IAAI,YAAY;AAAA,MAC1B,GAAG,OAAO,IAAI,YAAY;AAAA,IAC5B;AACA,UAAM,KAAK;AAAA,MACT,GAAG,OAAO,IAAI,YAAY;AAAA,MAC1B,GAAG,OAAO,IAAI,YAAY;AAAA,IAC5B;AAEA,WAAO,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;AAAA,EACxE;AAfO,EAAAA,OAAS;AAAA,GA7BD;;;ACHjB,IAAM,EAAE,KAAK,IAAI;AACV,SAAS,WAAc,KAAW;AACvC,MAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC,WAAO;AAAA,EACT;AACA,QAAM,QAAe,CAAC,GAAG;AACzB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,iBAAiB,MAAM,MAAM;AACnC,WAAO,OAAO,cAAc;AAC5B,eAAW,OAAO,gBAAgB;AAChC,UAAI,gBAAgB,KAAK,gBAAgB,GAAG,GAAG;AAC7C,cAAM,OAAO,eAAe,GAAG;AAC/B,YAAI,OAAO,SAAS,YAAY,CAAC,OAAO,SAAS,IAAI,GAAG;AACtD,gBAAM,KAAK,IAAI;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,kBAAkB,OAAO,UAAU;AAElC,SAAS,SAAY,KAAqC;AAC/D,SAAO,QAAQ,UAAa,QAAQ;AACtC;AAOO,IAAM,UAAU,CAAC,QAAwB;AAC9C,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,eAAe,SAAS,IAAI,YAAY,CAAC,GAAG;AAC9C,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAKO,SAAS,QAAQ,KAAsB;AAC5C,SAAO,KAAK,GAAG,EAAE,WAAW,KAAK,IAAI,gBAAgB;AACvD;AAEO,IAAM,OAAO,CAAsB,KAAU,OAClD,KAAK,GAAG,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG,GAAU,CAAC;AAE9C,IAAM,SAAS,CAAC,QACrB,OAAO,SAAS,OAAO,OAAO,GAAG,IAAI,KAAK,GAAG,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AAE3D,IAAM,SAAS,CAAC,KAAU,IAA0C,SACzE,KAAK,GAAG,EAAE;AAAA,EACR,CAAC,QAAQ,QAAS,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,OAAO,OAAO,QAAQ,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI;AAAA,EACnF,QAAQ,CAAC;AACX;AAEK,IAAM,OAAO,CAAC,KAAU,QAAkB,SAC/C,OAAO,KAAK,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAC,MAAM,IAAI,IAAI;AAE/C,IAAM,OAAO,CAAC,KAAU,QAAkB,SAC/C,OAAO,KAAK,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAC,MAAM,IAAI,IAAI;AAE/C,IAAM,SAAS,CACpB,KACA,IACA,MAAS,CAAC,MACP,KAAK,GAAG,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;AAE9C,IAAM,YAAY,CAAU,KAAU,OAC3C,OAAU,KAAK,CAAC,KAAK,OAAO,QAAQ,OAAO,OAAO,KAAK,EAAE,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;AAE5E,IAAM,UAAU,CAAU,KAAU,OACzC,OAAU,KAAK,CAAC,KAAK,OAAO,QAAQ,OAAO,OAAO,KAAK,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AAc9E,SAAS,SAAS,QAAa,KAA8B;AAClE,MAAI,OAAO,WAAW,YAAY,CAAC,IAAK,QAAO;AAC/C,SAAO,IAAI,MAAM,GAAG,EAAE,OAAO,CAAC,GAAQ,MAAc;AAClD,QAAI,OAAO,MAAM,SAAU,QAAO;AAClC,WAAO,EAAE,CAAC;AAAA,EACZ,GAAG,MAAM;AACX;AAkBO,SAAS,SACd,QACA,KACA,UACA,mBAAmB,MACnB,QAAQ,OACH;AACL,MAAI,OAAO,WAAW,YAAY,CAAC,IAAK,QAAO;AAC/C,MAAI,OAAO;AACT,aAAS,EAAE,GAAG,OAAO;AAAA,EACvB;AACA,QAAM,eAAe;AACrB,QAAM,aAAa,IAAI,MAAM,GAAG;AAChC,SAAO,WAAW,SAAS,GAAG;AAC5B,UAAM,WAAW,MAAM;AACvB,QAAI,WAAW,WAAW,GAAG;AAC3B,aAAO,QAAQ,GAAG,CAAC,IAAI;AACvB,aAAO;AAAA,IACT;AACA,QAAI,OAAO,OAAO,GAAG,MAAM,UAAU;AACnC,UAAI,CAAC,iBAAkB,QAAO;AAC9B,aAAO,QAAQ,GAAG,CAAC,IAAI,CAAC;AAAA,IAC1B;AACA,QAAI,OAAO;AACT,UAAI,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC9B,eAAO,QAAQ,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,MAAM;AAAA,MAC3C,OAAO;AACL,eAAO,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,OAAO,GAAG,EAAE;AAAA,MAC1C;AAAA,IACF;AACA,aAAS,OAAO,GAAG;AAAA,EACrB;AACA,SAAO;AACT;AAEO,IAAM,OAAO,MAAM;AAAC;AAMpB,SAAS,cAAc,KAAmB;AAC/C,MAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,QAAO;AAEpD,MAAI,QAAQ;AACZ,SAAO,OAAO,eAAe,KAAK,MAAM,MAAM;AAC5C,YAAQ,OAAO,eAAe,KAAK;AAAA,EACrC;AAEA,SAAO,OAAO,eAAe,GAAG,MAAM;AACxC;;;AC3KO,SAAS,SAA2B,GAAmC;AAC5E,SAAO,OAAO,MAAM,YAAY,MAAM;AACxC;AACO,SAAS,SAAS,GAAyB;AAChD,SAAO,OAAO,MAAM,YAAY,aAAa;AAC/C;AACO,SAAS,WAAsD,GAAoB;AACxF,SAAO,OAAO,MAAM;AACtB;AACA,IAAM,WAAW,OAAO,UAAU;AAE3B,SAAS,OAAO,GAAY;AACjC,MAAI,KAAK,MAAM;AACb,WAAO,MAAM,SAAY,uBAAuB;AAAA,EAClD;AACA,SAAO,SAAS,KAAK,CAAC;AACxB;AACO,SAAS,SAAS,GAAyB;AAChD,SAAO,OAAO,MAAM,YAAa,SAAS,CAAC,KAAK,OAAO,CAAC,MAAM;AAChE;;;ACfO,IAAU;AAAA,CAAV,CAAUE,gBAAV;AACE,WAAS,GAAG,OAAiC;AAClD,WACE,OAAO,UAAU,YACjB,UAAU,QACV,OAA0B,MAAQ,YAAY;AAAA,EAElD;AANO,EAAAA,YAAS;AAQT,WAAS,OAAO,MAA8B;AACnD,WAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF;AAJO,EAAAA,YAAS;AAMT,EAAMA,YAAA,OAAO,OAAO,OAAO,OAAO,MAAM;AAAA,EAAC,CAAC,CAAC;AAAA,GAfnC;;;ACDV,IAAU;AAAA,CAAV,CAAUC,WAAV;AACE,EAAMA,OAAA,OAAmB,MAAM,WAAW;AAAA,GADlC;AAIV,IAAM,WAAN,MAAM,SAAiB;AAAA,EAAvB;AAOL,SAAQ,YAAY;AAAA;AAAA,EAEpB,IAAI,QAAkB;AACpB,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,SAAS,CAAC,UAA4B,aAAmB;AAC5D,YAAI,KAAK,WAAW;AAClB,iBAAO,WAAW;AAAA,QACpB;AACA,YAAI,CAAC,KAAK,YAAY;AACpB,eAAK,aAAa,CAAC;AAAA,QACrB;AACA,cAAM,gBAAgB,WAAW,SAAS,KAAK,QAAQ,IAAI;AAC3D,YAAI,KAAK,WAAW,UAAU,SAAQ,yBAAyB;AAC7D,kBAAQ,KAAK,iCAAiC,SAAQ,uBAAuB,EAAE;AAAA,QACjF;AACA,aAAK,WAAW,KAAK,aAAa;AAElC,cAAM,kBAA8B;AAAA,UAClC,SAAS,MAAM;AACb,4BAAgB,UAAU;AAC1B,gBAAI,CAAC,KAAK,WAAW;AACnB,oBAAM,QAAQ,KAAK,WAAY,QAAQ,aAAa;AACpD,kBAAI,UAAU,IAAI;AAChB,qBAAK,WAAY,OAAO,OAAO,CAAC;AAAA,cAClC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,KAAK,OAAgB;AACnB,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,QAAQ,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,YAAY;AACnB,WAAK,aAAa;AAAA,IACpB;AACA,SAAK,YAAY;AAAA,EACnB;AACF;AA1Da,SACJ,0BAA0B;AAD5B,IAAM,UAAN;;;ACZA,IAAM,iBAAN,MAA2C;AAAA,EAA3C;AACL,SAAS,YAAY,IAAI,qBAAqB;AAAA;AAAA,EAE9C,UAAgB;AACd,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAI,YAAyB;AAC3B,WAAO,KAAK,UAAU;AAAA,EACxB;AACF;AAEO,IAAM,uBAAN,MAAiD;AAAA,EAOtD,eAAe,WAAyB;AANxC,SAAmB,cAA4B,CAAC;AAEhD,SAAmB,mBAAmB,IAAI,QAAc;AAExD,SAAQ,YAAY;AAGlB,cAAU,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AAAA,EACvC;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,IAAI,YAAyB;AAC3B,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,UAAU;AACjB;AAAA,IACF;AACA,SAAK,YAAY;AACjB,SAAK,YACF,MAAM,EACN,QAAQ,EACR,QAAQ,CAAC,eAAe;AACvB,UAAI;AACF,mBAAW,QAAQ;AAAA,MACrB,SAAS,GAAG;AACV,gBAAQ,MAAM,CAAC;AAAA,MACjB;AAAA,IACF,CAAC;AACH,SAAK,iBAAiB,KAAK,MAAS;AACpC,SAAK,iBAAiB,QAAQ;AAAA,EAChC;AAAA,EAEA,KAAK,YAAoC;AACvC,QAAI,KAAK,SAAU,QAAO,WAAW;AACrC,QAAI,eAAe,WAAW,MAAM;AAClC,aAAO,WAAW;AAAA,IACpB;AACA,UAAM,EAAE,YAAY,IAAI;AACxB,QAAI,YAAY,KAAK,CAAC,MAAM,MAAM,UAAU,GAAG;AAC7C,aAAO,WAAW;AAAA,IACpB;AACA,UAAM,kBAAkB,WAAW;AACnC,UAAM,WAAW,WAAW,OAAO,MAAM;AACvC,YAAM,QAAQ,YAAY,QAAQ,UAAU;AAC5C,UAAI,UAAU,IAAI;AAChB,oBAAY,OAAO,OAAO,CAAC;AAAA,MAC7B;AACA,iBAAW,UAAU;AAAA,IACvB,CAAC;AACD,eAAW,UAAU,MAAM;AACzB,eAAS,QAAQ;AACjB,iBAAW,QAAQ;AAAA,IACrB;AACA,gBAAY,KAAK,UAAU;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,aAAyC;AAC/C,WAAO,YAAY,IAAI,CAAC,eAAe,KAAK,KAAK,UAAU,CAAC;AAAA,EAC9D;AACF;;;AChEA,IAAM,gBAA4B,OAAO,OAAO,SAAU,UAAU,SAAsB;AACxF,QAAM,SAAS,WAAW,SAAS,KAAK,OAAO,GAAG,CAAC;AACnD,SAAO;AAAA,IACL,UAAU;AACR,mBAAa,MAAM;AAAA,IACrB;AAAA,EACF;AACF,CAAC;AAEM,IAAU;AAAA,CAAV,CAAUC,uBAAV;AACE,WAAS,oBAAoB,OAA4C;AAC9E,QAAI,UAAUA,mBAAkB,QAAQ,UAAUA,mBAAkB,WAAW;AAC7E,aAAO;AAAA,IACT;AACA,QAAI,iBAAiB,cAAc;AACjC,aAAO;AAAA,IACT;AACA,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,aAAO;AAAA,IACT;AACA,WACE,OAAQ,MAA4B,4BAA4B,aAChE,OAAQ,MAA4B,4BAA4B;AAAA,EAEpE;AAdO,EAAAA,mBAAS;AAeT,EAAMA,mBAAA,OAAO,OAAO,OAA0B;AAAA,IACnD,yBAAyB;AAAA,IACzB,yBAAyB,MAAM;AAAA,EACjC,CAAC;AAEM,EAAMA,mBAAA,YAAY,OAAO,OAA0B;AAAA,IACxD,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAC3B,CAAC;AAAA,GAxBc;AA2BV,IAAM,eAAN,MAAgD;AAAA,EAAhD;AACL,SAAQ,eAAe;AAAA;AAAA,EAIhB,SAAe;AACpB,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,eAAe;AACpB,UAAI,KAAK,UAAU;AACjB,aAAK,SAAS,KAAK,MAAS;AAC5B,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,0BAAmC;AACrC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,0BAAuC;AACzC,QAAI,KAAK,cAAc;AACrB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,IAAI,QAAc;AAAA,IACpC;AACA,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEO,UAAgB;AACrB,QAAI,KAAK,UAAU;AACjB,WAAK,SAAS,QAAQ;AACtB,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AACF;AAEO,IAAM,0BAAN,MAA8B;AAAA,EAGnC,IAAI,QAA2B;AAC7B,QAAI,CAAC,KAAK,QAAQ;AAGhB,WAAK,SAAS,IAAI,aAAa;AAAA,IACjC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAe;AACb,QAAI,CAAC,KAAK,QAAQ;AAIhB,WAAK,SAAS,kBAAkB;AAAA,IAClC,WAAW,KAAK,WAAW,kBAAkB,WAAW;AACtD,MAAe,KAAK,OAAQ,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,OAAO;AAAA,EACd;AACF;AAEA,IAAM,mBAAmB;AAElB,SAAS,YAAmB;AACjC,SAAO,IAAI,MAAM,gBAAgB;AACnC;AAEO,SAAS,YAAY,KAAiC;AAC3D,SAAO,CAAC,CAAC,OAAO,IAAI,YAAY;AAClC;AAEO,SAAS,eAAe,OAAiC;AAC9D,MAAI,CAAC,CAAC,SAAS,MAAM,yBAAyB;AAC5C,UAAM,UAAU;AAAA,EAClB;AACF;;;ACtIO,IAAM,kBAAN,MAAyB;AAAA,EAAzB;AAKL,mBAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AAE5C,WAAK,UAAU;AACf,WAAK,SAAS;AAAA,IAChB,CAAC;AAAA;AACH;AAEO,IAAM,WAAW;AAKjB,SAAS,MAAM,IAAY,QAAQ,kBAAkB,MAAqB;AAC/E,QAAM,WAAW,IAAI,gBAAsB;AAC3C,QAAM,SAAS,WAAW,MAAM,SAAS,QAAQ,GAAG,EAAE;AACtD,QAAM,wBAAwB,MAAM;AAClC,iBAAa,MAAM;AACnB,aAAS,OAAO,UAAU,CAAC;AAAA,EAC7B,CAAC;AACD,SAAO,SAAS;AAClB;AAEA,eAAsB,MACpB,MACA,WACA,SACA,aACY;AACZ,MAAI;AACJ,MAAI;AAEJ,WAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,QAAI;AAEF,eAAS,MAAM,KAAK;AACpB,UAAI,eAAe,YAAY,MAAM,GAAG;AAEtC,cAAM,MAAM,SAAS;AAErB;AAAA,MACF;AACA,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,kBAAY;AAGZ,YAAM,MAAM,SAAS;AAAA,IACvB;AAAA,EACF;AAEA,MAAI,WAAW;AACb,UAAM;AAAA,EACR;AACA,SAAO;AACT;AAaA,IAAM,yBAAoD;AAAA,EACxD,eAAe;AAAA;AAAA,EACf,cAAc;AAAA,EACd,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,cAAN,MAAkB;AAAA,EAGvB,YAAY,OAAwB,wBAAwB;AAC1D,SAAK,OAAO,EAAE,GAAG,wBAAwB,GAAG,KAAK;AAAA,EACnD;AAAA,EAEA,MAAgB,UACd,MACA,cACY;AACZ,QAAI,KAAK,KAAK,YAAY,EAAG,QAAO,KAAK;AACzC,WAAO,MAAS,MAAM,KAAK,KAAK,YAAY,KAAK,KAAK,SAAS,YAAY;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAO,OAAyB,cAAkD;AACtF,QAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAChC,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,KAAK,aAAa;AACvD,UAAM,WAAW,SAAS,IAAI,UAAQ,KAAK,UAAa,MAAM,YAAY,CAAC;AAC3E,UAAM,SAAc,MAAM,QAAQ,IAAI,QAAQ;AAC9C,UAAM,YAAY,MAAM,MAAM,KAAK,KAAK,aAAa;AACrD,QAAI,UAAU,WAAW,EAAG,QAAO;AACnC,QAAI,KAAK,KAAK,iBAAiB,EAAG,OAAM,MAAM,KAAK,KAAK,YAAY;AACpE,WAAO,OAAO,OAAO,MAAM,KAAK,IAAI,WAAW,YAAY,CAAC;AAAA,EAC9D;AACF;;;AClHO,IAAU;AAAA,CAAV,CAAUC,aAAV;AAQE,WAAS,UAAU,UAAe,UAAe,QAAQ,GAAG,UAAU,MAAe;AAC1F,QAAI,aAAa,SAAU,QAAO;AAClC,QAAI,UAAU,KAAK,OAAO,aAAa,YAAY,OAAO,aAAa,UAAU;AAC/E,aAAO,aAAa;AAAA,IACtB;AACA,UAAMC,QAAO,OAAO,KAAK,QAAQ;AACjC,QAAI,CAAC,SAAS;AACZ,YAAM,UAAU,OAAO,KAAK,QAAQ;AACpC,UAAIA,MAAK,WAAW,QAAQ,OAAQ,QAAO;AAAA,IAC7C;AACA,aAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,YAAM,MAAMA,MAAK,CAAC;AAClB,UAAI,UAAU,SAAS,GAAG,GAAG,SAAS,GAAG,GAAG,QAAQ,GAAG,OAAO,EAAG,QAAO;AAAA,IAC1E;AACA,WAAO;AAAA,EACT;AAfO,EAAAD,SAAS;AAsBT,WAAS,cAAc,UAAe,UAAe,SAA4B;AACtF,WAAO,UAAU,UAAU,UAAU,UAAU,OAAO;AAAA,EACxD;AAFO,EAAAA,SAAS;AAGT,WAAS,sBAAsB,MAAa,MAAsB;AACvE,QAAI,KAAK,WAAW,KAAK,OAAQ,QAAO;AACxC,aAAS,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,UAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG;AACvB,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AARO,EAAAA,SAAS;AAAA,GAjCD;;;AC8DV,IAAU;AAAA,CAAV,CAAUE,WAAV;AACE,WAAS,OACd,cACA,OAAkB,CAAC,GACI;AACvB,QAAI,QAAoB,CAAC;AACzB,WAAO;AAAA,MACL,eAA2B;AACzB,eAAO;AAAA,MACT;AAAA,MACA,QAAQ,OAAe,aAAa,MAAW;AAC7C,YAAI,UAAU,MAAM,QAAQ;AAAA,QAE5B,WAAW,QAAQ,MAAM,QAAQ;AAC/B,cAAI,QAAQ,QAAQ,MAAM;AAC1B,iBAAO,QAAQ,GAAG;AAChB,kBAAM,KAAK,aAAa,CAAC;AACzB;AAAA,UACF;AAAA,QACF,WAAW,YAAY;AACrB,gBAAM,cAAc,KAAK,eAAe;AAExC,cAAI,MAAM,SAAS,QAAQ,aAAa;AACtC,kBAAM,UAAU,MAAM,OAAO,KAAK;AAClC,oBAAQ,QAAQ,QAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAAA,UAClD;AAAA,QACF;AAEA,eAAO,MAAM,MAAM,GAAG,KAAK;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAkB,OAAoB;AACpC,cAAM,WAAuB,CAAC;AAC9B,cAAM,YAA2B,oBAAI,IAAI;AACzC,cAAM,QAAQ,UAAQ;AACpB,gBAAM,SAAS,MAAM,KAAK,OAAK,EAAE,QAAQ,KAAK,GAAG;AACjD,cAAI,QAAQ;AACV,sBAAU,IAAI,KAAK,KAAK,IAAI;AAAA,UAC9B,OAAO;AACL,iBAAK,UAAU;AAAA,UACjB;AAAA,QACF,CAAC;AACD,cAAM,QAAQ,UAAQ;AACpB,cAAI,CAAC,KAAK,IAAK,OAAM,IAAI,MAAM,8BAA8B;AAC7D,gBAAM,SAAS,UAAU,IAAI,KAAK,GAAG;AACrC,cAAI,QAAQ;AACV,qBAAS,KAAK,MAAM;AAAA,UACtB,OAAO;AACL,qBAAS,KAAK,aAAa,IAAI,CAAC;AAAA,UAClC;AAAA,QACF,CAAC;AACD,gBAAQ;AACR,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,eAAe,OAAmB;AAChC,cAAM,WAAuB,CAAC;AAC9B,cAAM,YAA2B,oBAAI,IAAI;AACzC,cAAM,QAAQ,eAAa;AAEzB,gBAAM,SAAS,MAAM,KAAK,SAAO,QAAQ,UAAU,GAAG;AACtD,cAAI,QAAQ;AACV,sBAAU,IAAI,UAAU,KAAK,SAAS;AAAA,UACxC,OAAO;AACL,sBAAU,UAAU;AAAA,UACtB;AAAA,QACF,CAAC;AACD,cAAM,QAAQ,UAAQ;AACpB,gBAAM,SAAS,UAAU,IAAI,IAAI;AACjC,cAAI,QAAQ;AACV,qBAAS,KAAK,MAAM;AAAA,UACtB,OAAO;AACL,qBAAS,KAAK;AAAA,cACZ,GAAG,aAAa,IAAI;AAAA,cACpB,KAAK;AAAA,YACP,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,gBAAQ;AACR,eAAO;AAAA,MACT;AAAA,MACA,MAAS;AACP,YAAI,MAAM,SAAS,EAAG,QAAO,MAAM,CAAC;AACpC,cAAM,KAAK,aAAa,CAAC;AACzB,eAAO,MAAM,CAAC;AAAA,MAChB;AAAA,MACA,kBAAkB,KAA4B;AAC5C,eAAO,MAAM,KAAK,UAAQ,KAAK,QAAQ,GAAG;AAAA,MAC5C;AAAA,MACA,UAAgB;AACd,cAAM,QAAQ,UAAQ,KAAK,WAAW,KAAK,QAAQ,CAAC;AACpD,cAAM,SAAS;AAAA,MACjB;AAAA,MACA,QAAc;AACZ,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,EACF;AArGO,EAAAA,OAAS;AAuGT,WAAS,OAAgB,QAAW,IAA0B;AACnE,WAAO,OAAO,OAAO,QAAe,EAAE;AAAA,EACxC;AAFO,EAAAA,OAAS;AAQT,WAAS,iBAAoB,UAAU,KAAqB;AACjE,QAAI;AACJ,QAAI;AAEJ,aAAS,gBAAsB;AAC7B,UAAI,UAAW,cAAa,SAAS;AACrC,kBAAY,WAAW,MAAM;AAC3B,oBAAY;AACZ,gBAAQ;AAAA,MAEV,GAAG,OAAO;AAAA,IACZ;AAEA,WAAO;AAAA,MACL,IAAI,UAAsB;AACxB,YAAI,OAAO;AACT,wBAAc;AACd,iBAAO;AAAA,QACT;AACA,gBAAQ,SAAS;AACjB,sBAAc;AACd,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAxBO,EAAAA,OAAS;AA0BT,WAAS,kBAA6B;AAC3C,UAAM,YAA+B,oBAAI,QAAQ;AACjD,WAAO;AAAA,MACL,KAAK,SAAO,UAAU,IAAI,GAAG;AAAA,MAC7B,MAAM,CAAC,KAAU,UAAe,UAAU,IAAI,KAAK,KAAK;AAAA,MACxD,WAAW,CAAC,KAAU,UAAe,QAAQ,UAAU,UAAU,IAAI,GAAG,GAAG,KAAK;AAAA,IAClF;AAAA,EACF;AAPO,EAAAA,OAAS;AAAA,GA1ID;;;AC5BV,IAAU;AAAA,CAAV,CAAUC,sBAAV;AAiBE,WAAS,OACd,YACA,gBACA,eACqB;AACrB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,QACV,GAAG,gBAAgB;AAAA,QACnB,GAAG;AAAA,MACL;AAAA,MACA,eAAe;AAAA,QACb,GAAG,gBAAgB;AAAA,QACnB,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAhBO,EAAAA,kBAAS;AAAA,GAjBD;AAoCV,IAAU;AAAA,CAAV,CAAUC,YAAV;AACE,WAAS,cACd,YACA,eACA,MACG;AACH,oBAAgB,EAAE,GAAG,WAAW,eAAe,GAAG,cAAc;AAChE,UAAM,YAAY,OAAO,GAAG,IAAI,MAAM;AACtC,QAAI,WAAW,YAAY;AACzB,aAAO,UAAU,WAAW,YAAY,CAAC,GAAG,MAAM;AAChD,cAAM,WAAW,YAAY;AAC7B,YAAI,iBAAiB,cAAc,QAAQ,MAAM,QAAW;AAC1D,iBAAO,cAAc,QAAQ;AAAA,QAC/B;AACA,eAAO,cAAc,GAAG,eAAe,QAAQ;AAAA,MACjD,CAAC;AAAA,IACH;AACA,WAAO,OAAO,WAAW,YAAY,aAAa,WAAW,QAAQ,IAAI,WAAW;AAAA,EACtF;AAjBO,EAAAA,QAAS;AAqBT,WAAS,WAAW,YAAuC;AAChE,WACE,WAAW,SAAS,YACpB,WAAW,SAAS,WACpB,WAAW,SAAS,aACpB,WAAW,SAAS,aACpB,WAAW,SAAS,UACpB,WAAW,SAAS,WACpB,WAAW,SAAS;AAAA,EAExB;AAVO,EAAAA,QAAS;AAAA,GAtBD;;;AC1BV,IAAM,uBAAqD;AAAA,EAChE,OAAO;AAAA,EACP,YAAY;AAAA,IACV,OAAO,EAAE,OAAO,UAAK,SAAS,GAAG,MAAM,QAAQ;AAAA,IAC/C,QAAQ,EAAE,OAAO,UAAK,SAAS,GAAG,MAAM,QAAQ;AAAA,IAChD,QAAQ,EAAE,OAAO,sBAAO,SAAS,OAAO,MAAM,UAAU;AAAA,EAC1D;AAAA,EACA,MAAM;AACR;AAEO,IAAM,yBAAyD;AAAA,EACpE,OAAO;AAAA,EACP,aAAa;AAAA,EACb,YAAY;AAAA,IACV,GAAG,EAAE,OAAO,KAAK,SAAS,KAAK,MAAM,QAAQ;AAAA,IAC7C,GAAG,EAAE,OAAO,KAAK,SAAS,KAAK,MAAM,QAAQ;AAAA,EAC/C;AAAA,EACA,MAAM;AACR;AAEO,IAAM,2BAA6D;AAAA,EACxE,OAAO;AAAA,EACP,YAAY;AAAA,IACV,GAAG,EAAE,OAAO,KAAK,SAAS,GAAG,MAAM,QAAQ;AAAA,IAC3C,GAAG,EAAE,OAAO,KAAK,SAAS,GAAG,MAAM,QAAQ;AAAA,EAC7C;AAAA,EACA,MAAM;AACR;AAEO,IAAM,2BAA6D;AAAA,EACxE,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACX;AAEO,IAAM,wBAAuD;AAAA,EAClE,OAAO;AAAA,EACP,YAAY;AAAA,IACV,GAAG,EAAE,OAAO,KAAK,SAAS,GAAG,MAAM,QAAQ;AAAA,IAC3C,GAAG,EAAE,OAAO,KAAK,SAAS,GAAG,MAAM,QAAQ;AAAA,EAC7C;AAAA,EACA,MAAM;AACR;AACO,IAAM,uBAAqD;AAAA,EAChE,OAAO;AAAA,EACP,YAAY;AAAA,IACV,GAAG,EAAE,OAAO,KAAK,SAAS,GAAG,MAAM,QAAQ;AAAA,IAC3C,GAAG,EAAE,OAAO,KAAK,SAAS,GAAG,MAAM,QAAQ;AAAA,EAC7C;AAAA,EACA,MAAM;AACR;AAEO,IAAM,4BAA+D;AAAA,EAC1E,YAAY;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AACR;AACO,IAAU;AAAA,CAAV,CAAUC,qBAAV;AACE,WAAS,gBAAiC;AAC/C,WAAO,OAAO,cAA+B,yBAAyB;AAAA,EACxE;AAFO,EAAAA,iBAAS;AAIT,WAAS,OAAO,KAAuC;AAC5D,WAAO;AAAA,MACL,UAAU,EAAE,GAAG,IAAI,SAAS,GAAG,GAAG,IAAI,SAAS,EAAE;AAAA,MACjD,MAAM;AAAA,QACJ,OAAO,IAAI,KAAK;AAAA,QAChB,QAAQ,IAAI,KAAK;AAAA,QACjB,QAAQ,IAAI,KAAK;AAAA,MACnB;AAAA,MACA,QAAQ,EAAE,GAAG,IAAI,OAAO,GAAG,GAAG,IAAI,OAAO,EAAE;AAAA,MAC3C,OAAO,EAAE,GAAG,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,EAAE;AAAA,MACxC,MAAM,EAAE,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,MACrC,UAAU,IAAI;AAAA,IAChB;AAAA,EACF;AAbO,EAAAA,iBAAS;AAcT,WAAS,SACd,cACA,cACiB;AACjB,WAAO;AAAA,MACL,UAAU;AAAA,QACR,GAAG,aAAa,SAAS,IAAI,aAAa,SAAS;AAAA,QACnD,GAAG,aAAa,SAAS,IAAI,aAAa,SAAS;AAAA,MACrD;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,aAAa,KAAK,QAAQ,aAAa,KAAK;AAAA,QACnD,QAAQ,aAAa,KAAK,SAAS,aAAa,KAAK;AAAA,MACvD;AAAA,MACA,QAAQ;AAAA,QACN,GAAG,aAAa,OAAO,IAAI,aAAa,OAAO;AAAA,QAC/C,GAAG,aAAa,OAAO,IAAI,aAAa,OAAO;AAAA,MACjD;AAAA,MACA,OAAO;AAAA,QACL,GAAG,aAAa,MAAM,IAAI,aAAa,MAAM;AAAA,QAC7C,GAAG,aAAa,MAAM,IAAI,aAAa,MAAM;AAAA,MAC/C;AAAA,MACA,MAAM;AAAA,QACJ,GAAG,aAAa,KAAK,IAAI,aAAa,KAAK;AAAA,QAC3C,GAAG,aAAa,KAAK,IAAI,aAAa,KAAK;AAAA,MAC7C;AAAA,MACA,UAAU,aAAa,WAAW,aAAa;AAAA,IACjD;AAAA,EACF;AA3BO,EAAAA,iBAAS;AA6BT,WAAS,WACd,cACA,mBACA,YACiB;AACjB,UAAM,UACJ,eAAe,SAAY,CAAC,MAAc,KAAK,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAc;AACvF,WAAO;AAAA,MACL,UAAU;AAAA,QACR,GAAG,QAAQ,kBAAkB,SAAS,IAAI,aAAa,SAAS,CAAC;AAAA,QACjE,GAAG,QAAQ,kBAAkB,SAAS,IAAI,aAAa,SAAS,CAAC;AAAA,MACnE;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,QAAQ,kBAAkB,KAAK,QAAQ,aAAa,KAAK,KAAK;AAAA,QACrE,QAAQ,QAAQ,kBAAkB,KAAK,SAAS,aAAa,KAAK,MAAM;AAAA,QACxE,QAAQ,aAAa,KAAK;AAAA,MAC5B;AAAA,MACA,QAAQ;AAAA,QACN,GAAG,QAAQ,kBAAkB,OAAO,IAAI,aAAa,OAAO,CAAC;AAAA,QAC7D,GAAG,QAAQ,kBAAkB,OAAO,IAAI,aAAa,OAAO,CAAC;AAAA,MAC/D;AAAA,MACA,OAAO;AAAA,QACL,GAAG,QAAQ,kBAAkB,MAAM,IAAI,aAAa,MAAM,CAAC;AAAA,QAC3D,GAAG,QAAQ,kBAAkB,MAAM,IAAI,aAAa,MAAM,CAAC;AAAA,MAC7D;AAAA,MACA,MAAM;AAAA,QACJ,GAAG,QAAQ,kBAAkB,KAAK,IAAI,aAAa,KAAK,CAAC;AAAA,QACzD,GAAG,QAAQ,kBAAkB,KAAK,IAAI,aAAa,KAAK,CAAC;AAAA,MAC3D;AAAA,MACA,UAAU,kBAAkB,WAAW,aAAa;AAAA,IACtD;AAAA,EACF;AA/BO,EAAAA,iBAAS;AAiCT,WAAS,GAAG,KAAqC;AACtD,WACE,OACC,IAAwB,YACxB,IAAwB,QACzB,OAAQ,IAAwB,SAAS,MAAM,YAC/C,OAAQ,IAAwB,KAAK,UAAU;AAAA,EAEnD;AARO,EAAAA,iBAAS;AAAA,GAjFD;AA4FV,IAAU;AAAA,CAAV,CAAUC,gBAAV;AAME,WAAS,QAAQ,aAAyB,YAAgC;AAC/E,QAAI,YAAY,SAAS,WAAW,SAAS,YAAY,UAAU,WAAW,OAAQ,QAAO;AAC7F,UAAM,SAAS,YAAY,QAAQ,WAAW;AAC9C,UAAM,SAAS,YAAY,SAAS,WAAW;AAC/C,UAAM,QAAQ,SAAS,SAAS,SAAS;AACzC,WAAO,IAAI;AAAA,EACb;AANO,EAAAA,YAAS;AAaT,WAAS,UAAU,aAAyB,YAAgC;AACjF,UAAM,SAAS,YAAY,QAAQ,WAAW;AAC9C,UAAM,SAAS,YAAY,SAAS,WAAW;AAC/C,UAAM,QAAQ,SAAS,SAAS,SAAS;AACzC,WAAO,IAAI;AAAA,EACb;AALO,EAAAA,YAAS;AAOT,WAAS,QAAoB;AAClC,WAAO,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,EAC/B;AAFO,EAAAA,YAAS;AAAA,GA1BD;;;AC/KV,IAAU;AAAA,CAAV,CAAUC,mBAAV;AACE,EAAMA,eAAA,QAAQ,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAE;AAAA,GADpD;AAaV,IAAU;AAAA,CAAV,CAAUC,gBAAV;AACE,WAASC,SAAQ,MAAgD;AACtE,QAAI,CAAC,KAAM,QAAO;AAClB,WACE,KAAK,YAAY,UACjB,KAAK,aAAa,UAClB,KAAK,eAAe,UACpB,KAAK,gBAAgB;AAAA,EAEzB;AARO,EAAAD,YAAS,UAAAC;AAAA,GADD;AAYV,IAAM,uBAAsE;AAAA,EACjF,OAAO;AAAA,EACP,YAAY;AAAA,IACV,OAAO,EAAE,OAAO,UAAK,MAAM,UAAU;AAAA,IACrC,QAAQ,EAAE,OAAO,UAAK,MAAM,UAAU;AAAA,IACtC,GAAG,EAAE,OAAO,KAAK,MAAM,UAAU;AAAA,IACjC,GAAG,EAAE,OAAO,KAAK,MAAM,UAAU;AAAA,EACnC;AAAA,EACA,MAAM;AACR;AAEO,IAAM,uBAAqD;AAAA,EAChE,OAAO;AAAA,EACP,YAAY;AAAA,IACV,GAAG,EAAE,OAAO,wCAAU,SAAS,OAAO,MAAM,UAAU;AAAA,IACtD,GAAG,EAAE,OAAO,wCAAU,SAAS,OAAO,MAAM,UAAU;AAAA,EACxD;AAAA,EACA,MAAM;AACR;AACO,IAAM,0BAA2D;AAAA,EACtE,OAAO;AAAA,EACP,YAAY;AAAA,IACV,MAAM,EAAE,OAAO,UAAK,SAAS,GAAG,MAAM,UAAU;AAAA,IAChD,KAAK,EAAE,OAAO,UAAK,SAAS,GAAG,MAAM,UAAU;AAAA,IAC/C,OAAO,EAAE,OAAO,UAAK,SAAS,GAAG,MAAM,UAAU;AAAA,IACjD,QAAQ,EAAE,OAAO,UAAK,SAAS,GAAG,MAAM,UAAU;AAAA,EACpD;AAAA,EACA,MAAM;AACR;AAEO,IAAM,yBAAyD;AAAA,EACpE,OAAO;AAAA,EACP,YAAY;AAAA,IACV,SAAS,EAAE,OAAO,KAAK,MAAM,UAAU;AAAA,IACvC,SAAS,EAAE,OAAO,KAAK,MAAM,UAAU;AAAA,IACvC,MAAM,EAAE,OAAO,gBAAM,MAAM,UAAU;AAAA,IACrC,OAAO,EAAE,OAAO,gBAAM,MAAM,QAAQ;AAAA,EACtC;AAAA,EACA,MAAM;AACR;AAEO,IAAM,uBAAqD;AAAA,EAChE,OAAO;AAAA,EACP,YAAY;AAAA,IACV,SAAS,EAAE,OAAO,gBAAM,MAAM,QAAQ;AAAA,IACtC,UAAU,EAAE,OAAO,gBAAM,MAAM,QAAQ;AAAA,IACvC,YAAY,EAAE,OAAO,gBAAM,MAAM,QAAQ;AAAA,IACzC,aAAa,EAAE,OAAO,gBAAM,MAAM,QAAQ;AAAA,EAC5C;AAAA,EACA,MAAM;AACR;AAEO,IAAM,0BAA2D;AAAA,EACtE,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AACX;;;AC3GA,kBAAgB;AAMhB,IAAM,aAAa,CAAC,QAAgB,IAAI,QAAQ,WAAW,CAAC,MAAM,IAAI,EAAE,YAAY,CAAC,EAAE;AAWhF,IAAU;AAAA,CAAV,CAAUC,cAAV;AACE,WAAS,QAAQ,KAAqB;AAC3C,WAAO,GAAG,GAAG;AAAA,EACf;AAFO,EAAAA,UAAS;AAQT,WAAS,YAAY,SAAyB;AACnD,WAAO,WAAW,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,EAC5D;AAFO,EAAAA,UAAS;AAIT,WAAS,UAAU,SAAyB;AACjD,WAAO,GAAG,OAAO;AAAA,EACnB;AAFO,EAAAA,UAAS;AAIT,WAAS,YAAY,SAA+B;AACzD,YAAQ,MAAM,gBAAgB;AAAA,EAChC;AAFO,EAAAA,UAAS;AAIT,WAAS,aAAa,SAA+B;AAC1D,YAAQ,MAAM,gBAAgB;AAAA,EAChC;AAFO,EAAAA,UAAS;AAIT,WAAS,cAAqC,QAAgB,YAAyB;AAC5F,UAAM,UAAU,SAAS,cAAc,GAAG;AAC1C,QAAI,WAAW,SAAS,GAAG;AACzB,cAAQ,gBAAY,YAAAC,SAAI,UAAU;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AANO,EAAAD,UAAS;AAQT,WAAS,sBAAsB,YAAsC;AAC1E,WAAO,cAAc,OAAO,GAAG,UAAU;AAAA,EAC3C;AAFO,EAAAA,UAAS;AAIT,WAAS,SAAS,YAAqB,YAA4B;AACxE,YAAQ,gBAAY,YAAAC,SAAI,WAAW,OAAO,QAAQ,UAAU,MAAM,GAAG,CAAC,CAAC;AAAA,EACzE;AAFO,EAAAD,UAAS;AAIT,WAAS,SAAS,YAAqB,YAA4B;AACxE,eAAW,QAAQ,CAAC,SAAS;AAC3B,cAAQ,UAAU,OAAO,IAAI;AAAA,IAC/B,CAAC;AACD,YAAQ,YAAY,QAAQ,UAAU,SAAS;AAAA,EACjD;AALO,EAAAA,UAAS;AAOT,WAAS,WAAW,YAAqB,YAA4B;AAC1E,YAAQ,gBAAY,YAAAC,SAAI,UAAU;AAAA,EACpC;AAFO,EAAAD,UAAS;AAIT,WAAS,cAAc,WAAiC;AAC7D,cAAU,YAAY;AAAA,EACxB;AAFO,EAAAA,UAAS;AAIT,WAAS,iBAAiB,MAAsB,GAAW,GAAiB;AACjF,SAAK,MAAM,YAAY,aAAa,CAAC,MAAM,CAAC;AAAA,EAC9C;AAFO,EAAAA,UAAS;AAIT,WAAS,kBAAkB,MAAsB,GAAiB;AACvE,SAAK,MAAM,YAAY,cAAc,CAAC;AAAA,EACxC;AAFO,EAAAA,UAAS;AAIT,WAAS,kBAAkB,MAAsB,GAAiB;AACvE,SAAK,MAAM,YAAY,cAAc,CAAC;AAAA,EACxC;AAFO,EAAAA,UAAS;AAIT,WAAS,SAAS,MAAmB,QAAwB;AAClE,UAAM,YAAsB,CAAC;AAC7B,SAAK,QAAQ,CAAC,OAAO,QAAQ;AAC3B,UAAI,UAAU,OAAW;AACzB,UAAI,OAAO,UAAU,YAAY,QAAQ,aAAa,QAAQ,YAAY,QAAQ,SAAS;AACzF,gBAAQ,QAAQ,KAAK;AAAA,MACvB;AACA,gBAAU,KAAK,GAAG,WAAW,GAAG,CAAC,IAAI,KAAK,EAAE;AAAA,IAC9C,CAAC;AACD,UAAM,WAAW,KAAK,aAAa,OAAO;AAC1C,UAAM,WAAW,UAAU,KAAK,GAAG;AACnC,QAAI,aAAa,UAAU;AACzB,WAAK,aAAa,SAAS,QAAQ;AAAA,IACrC;AAAA,EACF;AAdO,EAAAA,UAAS;AAgBT,WAAS,oBAAoB,QAAqD;AACvF,WAAO,CAAC,KAAa,aACnB,YAAAC;AAAA,MACE,IACG,MAAM,KAAK,EACX,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,EAC3B,KAAK,GAAG;AAAA,MACX;AAAA,IACF;AAAA,EACJ;AATO,EAAAD,UAAS;AAWT,WAAS,8BACd,KACA,MACA,UACA,SACY;AACZ,QAAI,iBAAiB,MAAM,UAAU,OAAO;AAC5C,WAAO,WAAW,OAAO,MAAM;AAC7B,UAAI,oBAAoB,MAAM,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AAVO,EAAAA,UAAS;AAiBT,WAAS,eACd,QACA,WACA,UACiB;AACjB,WAAO,MAAM,OAAU,MAAgB;AAErC,YAAM,MACJ,OAAO,cAAc,WAAWA,UAAS,mBAAmB,SAAS,IAAI,UAAU;AACrF,UAAI,UAAU;AACZ,YAAI,YAAY;AAAA,MAClB;AACA,aAAO,YAAY,GAAG;AACtB,aAAO,OAAO,OAAO,KAAK;AAAA;AAAA,QAExB,SAAS,MAAM;AACb,gBAAM,EAAE,WAAW,IAAI;AACvB,cAAI,YAAY;AACd,uBAAW,YAAY,GAAG;AAAA,UAC5B;AAAA,QACF;AAAA,QACA,UAAU,CAAC,UAAoB;AAC7B,UAAAA,UAAS,SAAS,KAAK,KAAK;AAAA,QAC9B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AA1BO,EAAAA,UAAS;AAAA,GAhHD;;;ACjBjB,IAAI,OAAO;AAGJ,SAAS,kBAA2B;AAEzC,MAAI,SAAS,OAAO,kBAAkB;AACpC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,QAAQ,KAAmB;AACzC,SAAO;AACT;;;ACbO,SAAS,YAAqB,MAAgC;AACnE,QAAM,SAAS,CAAC;AAChB,aAAW,KAAK,MAAM;AACpB,WAAO,KAAK,CAAC;AAAA,EACf;AACA,SAAO;AACT;AAEO,SAAS,WAAW,KAAsB;AAC/C,QAAM,MAAM,oBAAI,IAAI;AACpB,WAAS,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC9C,QAAI,IAAI,IAAI,CAAC,CAAC;AAAA,EAChB;AACA,SAAO;AACT;AAQO,SAAS,WAAW,KAAmB;AAC5C,QAAM,SAAgB,CAAC;AACvB,WAAS,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC9C,QAAI,CAAC,OAAO,SAAS,IAAI,CAAC,CAAC,EAAG,QAAO,KAAK,IAAI,CAAC,CAAC;AAAA,EAClD;AACA,SAAO;AACT;;;AC1BO,SAAS,kBAAkB,MAAuB,QAAa,UAAiB;AACrF,OAAK,MAAM,EAAE,OAAO,EAAE,iBAAiB;AACvC,WAAS,QAAQ,aAAW,KAAK,OAAO,EAAE,UAAU,MAAM,CAAC;AAC7D;;;ACEO,IAAM,eAAe,oBAAI,IAAuB;AACvD,IAAM,aAAa;AAEZ,SAAS,oBAA0B;AACxC,eAAa,MAAM;AACrB;AAEO,SAAS,gBACd,KACA,YAAY,YACZ,gBACW;AACX,SAAO,IAAI,SAAgB;AACzB,UAAM,WAAW,iBAAiB,eAAe,GAAG,IAAI,IAAI;AAC5D,QAAI,aAAa,IAAI,QAAQ,GAAG;AAC9B,aAAO,QAAQ,QAAQ,aAAa,IAAI,QAAQ,CAAC;AAAA,IACnD;AACA,UAAM,SAAS,IAAI,GAAG,IAAI;AAC1B,UAAM,OAAO,WAAW,MAAM,aAAa,OAAO,QAAQ,GAAG,SAAS;AACtE,UAAM,kBAAkB,OAAO,MAAM,OAAK;AAExC,mBAAa,OAAO,QAAQ;AAC5B,mBAAa,IAAI;AACjB,YAAM;AAAA,IACR,CAAC;AACD,iBAAa,IAAI,UAAU,eAAe;AAC1C,WAAO;AAAA,EACT;AACF;;;AC7BO,SAAS,gBAAmB,KAA4C;AAC7E,SAAO,OAAO,SAAY,WAAkB;AAC1C,QAAI,QAAQ;AACZ,WAAO,IAAI,KAAK,GAAG;AACjB,aAAO,MAAM,IAAI,KAAK,EAAE,MAAM,GAAG,MAAM;AACvC,eAAS;AAAA,IACX;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,WAAc,KAAyB;AACrD,SAAO,CAAC,SAAY,WAAkB;AACpC,QAAI,QAAQ;AACZ,WAAO,IAAI,KAAK,GAAG;AACjB,aAAO,IAAI,KAAK,EAAE,MAAM,GAAG,MAAM;AACjC,eAAS;AAAA,IACX;AACA,WAAO;AAAA,EACT;AACF;;;ACxBO,IAAM,uBAAuB,OAAO,sBAAsB;AAQjE,IAAM,oCAAN,MAA6F;AAAA,EAG3F,YACqB,WACA,YACnB;AAFmB;AACA;AAAA,EAClB;AAAA,EAEH,QAAQ,IAA0B;AAChC,SAAK,iBAAiB,EAAE,QAAQ,EAAE;AAAA,EACpC;AAAA,EAEA,mBAAwB;AACtB,QAAI,CAAC,KAAK,UAAU;AAClB,YAAM,kBAAuB,CAAC;AAC9B,UAAI,EAAE,UAAU,IAAI;AACpB,UAAI,UAAU,QAAQ,KAAK,UAAU,GAAG;AACtC,YAAI;AACF,0BAAgB,KAAK,GAAG,UAAU,OAAO,KAAK,UAAU,CAAC;AAAA,QAC3D,SAAS,OAAY;AACnB,kBAAQ,MAAM,KAAK;AAAA,QACrB;AAAA,MACF;AAEA,WAAK,WAAW;AAAA,IAClB;AACA,WAAO,KAAK;AAAA,EACd;AACF;AAEO,SAAS,yBAAyB,MAAuB,IAAkB;AAChF,OAAK,oBAAoB,EACtB,eAAe,CAAC,QAAQ,IAAI,kCAAkC,IAAI,WAAW,EAAE,CAAC,EAChF,iBAAiB,EACjB,gBAAgB,EAAE;AACvB;;;ACvCO,SAAS,iBACd,SACA,MACA,UACA,YACY;AACZ,UAAQ,iBAAiB,MAAM,UAAU,UAAU;AACnD,SAAO,WAAW,OAAO,MAAM,QAAQ,oBAAoB,MAAM,UAAU,UAAU,CAAC;AACxF;;;ACdA,IAAM,SAAN,MAAa;AAAA,EACX,WAAW;AACT,WAAO,QAAQ,IAAI,aAAa;AAAA,EAClC;AAAA,EAEA,QAAQ,OAAY;AAClB,QAAI,CAAC,KAAK,SAAS,EAAG;AAEtB,WAAO,QAAQ,KAAK,KAAK;AAAA,EAC3B;AAAA,EAEA,OAAO,OAAY;AACjB,QAAI,CAAC,KAAK,SAAS,EAAG;AAEtB,WAAO,QAAQ,IAAI,GAAG,KAAK;AAAA,EAC7B;AAAA,EAEA,SAAS,OAAY;AACnB,WAAO,QAAQ,MAAM,GAAG,KAAK;AAAA,EAC/B;AAAA,EAEA,QAAQ,OAAY;AAClB,WAAO,QAAQ,KAAK,GAAG,KAAK;AAAA,EAC9B;AACF;AAEO,IAAM,SAAS,IAAI,OAAO;;;AC1BjC,SAAS,mBACP,SACA,YAAyB,SAAS,MAChB;AAClB,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,KAAK;AACX,QAAM,OAAO;AACb,QAAM,QAAQ;AACd,QAAM,YAAY,SAAS,eAAe,EAAE,CAAC;AAC7C,YAAU,YAAY,KAAK;AAC3B,SAAO;AACT;AAEO,IAAM,kBAAkB;AAAA,EAC7B;AACF;;;ACfA,mBAAsC;AAE/B,SAAS,WAAW,cAAuC;AAChE,QAAM,CAAC,EAAE,MAAM,QAAI,uBAAc,YAAY;AAC7C,aAAO,0BAAY,CAAC,MAAY,OAAO,MAAM,SAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACtE;","names":["SHAPES","Point","RectangleAlignType","RectangleAlignTitle","Rectangle","Angle","wrap","Disposable","Event","CancellationToken","Compare","keys","Cache","SchemaDecoration","Schema","TransformSchema","SizeSchema","PaddingSchema","TintSchema","isEmpty","domUtils","clx"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/math/const.ts","../src/math/Vector2.ts","../src/math/Point.ts","../src/math/shapes/Rectangle.ts","../src/math/shapes/Circle.ts","../src/math/Matrix.ts","../src/math/ObservablePoint.ts","../src/math/Transform.ts","../src/math/wrap.ts","../src/math/angle.ts","../src/objects.ts","../src/types.ts","../src/disposable.ts","../src/event.ts","../src/disposable-collection.ts","../src/cancellation.ts","../src/promise-util.ts","../src/compare.ts","../src/cache.ts","../src/schema/schema.ts","../src/schema/schema-transform.ts","../src/schema/schema-base.ts","../src/dom-utils.ts","../src/id.ts","../src/array.ts","../src/inversify-utils.ts","../src/request-with-memo.ts","../src/compose.ts","../src/contribution-provider.ts","../src/add-event-listener.ts","../src/logger.ts","../src/decoration-style.ts","../src/hooks/use-refresh.ts"],"sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport * from './math/index';\nexport * from './objects';\nexport * from './types';\nexport * from './event';\nexport * from './disposable';\nexport * from './disposable-collection';\nexport * from './cancellation';\nexport * from './promise-util';\nexport * from './cache';\nexport * from './compare';\nexport * from './schema/index';\nexport * from './dom-utils';\nexport * from './id';\nexport * from './array';\nexport { bindContributions } from './inversify-utils';\nexport * from './request-with-memo';\nexport * from './compose';\nexport { ContributionProvider, bindContributionProvider } from './contribution-provider';\nexport * from './add-event-listener';\nexport * from './logger';\nexport { DecorationStyle } from './decoration-style';\nexport { useRefresh } from './hooks/use-refresh';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const { PI } = Math;\n\n/** Two Pi. */\nexport const PI_2 = PI * 2;\n\n/** Conversion factor for converting radians to degrees. */\nexport const RAD_TO_DEG = 180 / PI;\n\n/** Conversion factor for converting degrees to radians. */\nexport const DEG_TO_RAD = PI / 180;\n\n/** Constants that identify shapes. */\nexport enum SHAPES {\n /** Polygon */\n POLY = 0,\n /** Rectangle */\n RECT = 1,\n /** Circle */\n CIRC = 2,\n /** Ellipse */\n ELIP = 3,\n /** Rounded Rectangle */\n RREC = 4,\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport class Vector2 {\n constructor(public x = 0, public y = 0) {}\n\n /**\n * 向量减法\n */\n sub(v: Vector2): Vector2 {\n return new Vector2(this.x - v.x, this.y - v.y);\n }\n\n /**\n * 向量点乘\n */\n dot(v: Vector2): number {\n return this.x * v.x + this.y * v.y;\n }\n\n /**\n * 向量叉乘\n */\n // cross(v: Vector2): number {\n // }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { IPoint } from './IPoint';\n\n/**\n * The Point object represents a location in a two-dimensional coordinate system, where x represents\n * the horizontal axis and y represents the vertical axis.\n *\n * @class\n * @memberof PIXI\n * @implements IPoint\n */\nexport class Point implements IPoint {\n constructor(public x = 0, public y = 0) {}\n\n /**\n * Creates a clone of this point\n *\n * @return {Point} a copy of the point\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Copies x and y from the given point\n *\n * @param {IPoint} p - The point to copy from\n * @returns {this} Returns itself.\n */\n copyFrom(p: IPoint): this {\n this.set(p.x, p.y);\n\n return this;\n }\n\n /**\n * Copies x and y into the given point\n *\n * @param {IPoint} p - The point to copy.\n * @returns {IPoint} Given point with values updated\n */\n copyTo<T extends IPoint>(p: T): T {\n p.x = this.x;\n p.y = this.y;\n\n return p;\n }\n\n /**\n * Returns true if the given point is equal to this point\n *\n * @param {IPoint} p - The point to check\n * @returns {boolean} Whether the given point equal to this point\n */\n equals(p: IPoint): boolean {\n return p.x === this.x && p.y === this.y;\n }\n\n /**\n * Sets the point to a new x and y position.\n * If y is omitted, both x and y will be set to x.\n *\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=x] - position of the point on the y axis\n * @returns {this} Returns itself.\n */\n set(x = 0, y = x): this {\n this.x = x;\n this.y = y;\n\n return this;\n }\n}\n\nexport namespace Point {\n export const EMPTY: IPoint = { x: 0, y: 0 };\n\n /**\n * 获取两点间的距离\n * @param p1\n * @param p2\n */\n export function getDistance(p1: IPoint, p2: IPoint): number {\n return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2);\n }\n\n /**\n * 获取两点间的中间点\n * @param p1\n * @param p2\n */\n export function getMiddlePoint(p1: IPoint, p2: IPoint): IPoint {\n return getRatioPoint(p1, p2, 0.5);\n }\n\n /**\n * 按一定比例,获取两点间的中间点\n * @param p1\n * @param p2\n */\n export function getRatioPoint(p1: IPoint, p2: IPoint, ratio: number): IPoint {\n return {\n x: p1.x + ratio * (p2.x - p1.x),\n y: p1.y + ratio * (p2.y - p1.y),\n };\n }\n\n export function fixZero(output: IPoint): IPoint {\n // fix: -0\n if (output.x === 0) output.x = 0;\n if (output.y === 0) output.y = 0;\n return output;\n }\n\n /**\n * 往目标点移动 distance 距离\n * @param current\n * @param direction\n */\n export function move(current: IPoint, m: Partial<IPoint>): IPoint {\n return {\n x: current.x + (m.x || 0),\n y: current.y + (m.y || 0),\n };\n }\n\n /**\n * 往目标点移动 distance 距离\n * @param current\n * @param direction\n */\n export function moveDistanceToDirection(\n current: IPoint,\n direction: IPoint,\n distance: number,\n ): IPoint {\n const deltaX = direction.x - current.x;\n const deltaY = direction.y - current.y;\n\n const distanceX = deltaX === 0 ? 0 : Math.sqrt(distance ** 2 / (1 + deltaY ** 2 / deltaX ** 2));\n const moveX = deltaX > 0 ? distanceX : -distanceX;\n const distanceY = deltaX === 0 ? distance : Math.abs((distanceX * deltaY) / deltaX);\n const moveY = deltaY > 0 ? distanceY : -distanceY;\n\n return {\n x: current.x + moveX,\n y: current.y + moveY,\n };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Vector2 } from '../Vector2';\nimport { Point } from '../Point';\nimport { type IPoint } from '../IPoint';\nimport { SHAPES } from '../const';\nimport { type PaddingSchema } from '../../schema';\n\n/**\n * Size object, contains width and height\n */\nexport type ISize = { width: number; height: number };\n\n/**\n * Rectangle object is an area defined by its position, as indicated by its top-left corner\n * point (x, y) and by its width and its height.\n */\nexport class Rectangle {\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n */\n public readonly type = SHAPES.RECT;\n\n /**\n * @param [x] - The X coordinate of the upper-left corner of the rectangle\n * @param [y] - The Y coordinate of the upper-left corner of the rectangle\n * @param [width] - The overall width of this rectangle\n * @param [height] - The overall height of this rectangle\n */\n constructor(public x = 0, public y = 0, public width = 0, public height = 0) {}\n\n // static _empty: Rectangle = Object.freeze(new Rectangle(0, 0, 0, 0))\n\n /**\n * A constant empty rectangle. MUST NOT modify properties!\n */\n static get EMPTY(): Rectangle {\n return new Rectangle(0, 0, 0, 0);\n }\n\n get left(): number {\n return this.x;\n }\n\n get right(): number {\n return this.x + this.width;\n }\n\n get top(): number {\n return this.y;\n }\n\n get bottom(): number {\n return this.y + this.height;\n }\n\n /**\n * Creates a clone of this Rectangle.\n *\n * @return a copy of the rectangle\n */\n clone(): Rectangle {\n return new Rectangle(this.x, this.y, this.width, this.height);\n }\n\n /**\n * Copies another rectangle to this one.\n *\n * @return Returns itself.\n */\n copyFrom(rectangle: Rectangle): Rectangle {\n this.x = rectangle.x;\n this.y = rectangle.y;\n this.width = rectangle.width;\n this.height = rectangle.height;\n\n return this;\n }\n\n /**\n * Copies this rectangle to another one.\n *\n * @return Returns given rectangle.\n */\n copyTo(rectangle: Rectangle): Rectangle {\n rectangle.x = this.x;\n rectangle.y = this.y;\n rectangle.width = this.width;\n rectangle.height = this.height;\n\n return rectangle;\n }\n\n /**\n * Checks whether the x and y coordinates given are contained within this Rectangle\n *\n * @param x - The X coordinate of the point to test\n * @param y - The Y coordinate of the point to test\n * @return Whether the x/y coordinates are within this Rectangle\n */\n contains(x: number, y: number): boolean {\n if (this.width <= 0 || this.height <= 0) {\n return false;\n }\n\n if (x >= this.x && x <= this.right) {\n if (y >= this.y && y <= this.bottom) {\n return true;\n }\n }\n\n return false;\n }\n\n isEqual(rect: Rectangle): boolean {\n return (\n this.x === rect.x &&\n this.y === rect.y &&\n this.width === rect.width &&\n this.height === rect.height\n );\n }\n\n containsRectangle(rect: Rectangle): boolean {\n return (\n rect.left >= this.left &&\n rect.right <= this.right &&\n rect.top >= this.top &&\n rect.bottom <= this.bottom\n );\n }\n\n /**\n * Pads the rectangle making it grow in all directions.\n * If paddingY is omitted, both paddingX and paddingY will be set to paddingX.\n *\n * @param [paddingX] - The horizontal padding amount.\n * @param [paddingY] - The vertical padding amount.\n */\n pad(paddingX = 0, paddingY = paddingX): this {\n this.x -= paddingX;\n this.y -= paddingY;\n\n this.width += paddingX * 2;\n this.height += paddingY * 2;\n\n return this;\n }\n\n /**\n * Fits this rectangle around the passed one.\n * Intersection 交集\n */\n fit(rectangle: Rectangle): this {\n const x1 = Math.max(this.x, rectangle.x);\n const x2 = Math.min(this.x + this.width, rectangle.x + rectangle.width);\n const y1 = Math.max(this.y, rectangle.y);\n const y2 = Math.min(this.y + this.height, rectangle.y + rectangle.height);\n\n this.x = x1;\n this.width = Math.max(x2 - x1, 0);\n this.y = y1;\n this.height = Math.max(y2 - y1, 0);\n\n return this;\n }\n\n /**\n * Enlarges rectangle that way its corners lie on grid\n */\n ceil(resolution = 1, precision = 0.001): this {\n const x2 = Math.ceil((this.x + this.width - precision) * resolution) / resolution;\n const y2 = Math.ceil((this.y + this.height - precision) * resolution) / resolution;\n\n this.x = Math.floor((this.x + precision) * resolution) / resolution;\n this.y = Math.floor((this.y + precision) * resolution) / resolution;\n\n this.width = x2 - this.x;\n this.height = y2 - this.y;\n\n return this;\n }\n\n /**\n * Enlarges this rectangle to include the passed rectangle.\n */\n enlarge(rectangle: Rectangle): this {\n const x1 = Math.min(this.x, rectangle.x);\n const x2 = Math.max(this.x + this.width, rectangle.x + rectangle.width);\n const y1 = Math.min(this.y, rectangle.y);\n const y2 = Math.max(this.y + this.height, rectangle.y + rectangle.height);\n\n this.x = x1;\n this.width = x2 - x1;\n this.y = y1;\n this.height = y2 - y1;\n\n return this;\n }\n\n get center(): IPoint {\n return {\n x: this.x + this.width / 2,\n y: this.y + this.height / 2,\n };\n }\n\n get rightBottom(): IPoint {\n return {\n x: this.right,\n y: this.bottom,\n };\n }\n\n get leftBottom(): IPoint {\n return {\n x: this.left,\n y: this.bottom,\n };\n }\n\n get rightTop(): IPoint {\n return {\n x: this.right,\n y: this.top,\n };\n }\n\n get leftTop(): IPoint {\n return {\n x: this.left,\n y: this.top,\n };\n }\n\n get bottomCenter(): IPoint {\n return {\n x: this.x + this.width / 2,\n y: this.bottom,\n };\n }\n\n get topCenter(): IPoint {\n return {\n x: this.x + this.width / 2,\n y: this.top,\n };\n }\n\n get rightCenter(): IPoint {\n return {\n x: this.right,\n y: this.y + this.height / 2,\n };\n }\n\n get leftCenter(): IPoint {\n return {\n x: this.left,\n y: this.y + this.height / 2,\n };\n }\n\n update(fn: (rect: Rectangle) => Rectangle): Rectangle {\n return fn(this);\n }\n\n get crossDistance(): number {\n return Point.getDistance(this.leftTop, this.rightBottom);\n }\n\n toStyleStr(): string {\n return `left: ${this.x}px; top: ${this.y}px; width: ${this.width}px; height: ${this.height}px;`;\n }\n\n withPadding(padding: PaddingSchema) {\n this.x -= padding.left;\n this.y -= padding.top;\n this.width += padding.left + padding.right;\n this.height += padding.top + padding.bottom;\n return this;\n }\n\n withoutPadding(padding: PaddingSchema) {\n this.x += padding.left;\n this.y += padding.top;\n this.width = this.width - padding.left - padding.right;\n this.height = this.height - padding.top - padding.bottom;\n return this;\n }\n\n withHeight(height: number) {\n this.height = height;\n return this;\n }\n\n clearSpace() {\n this.width = 0;\n this.height = 0;\n return this;\n }\n}\n\nexport enum RectangleAlignType {\n ALIGN_LEFT = 'align-left',\n ALIGN_CENTER = 'align-center',\n ALIGN_RIGHT = 'align-right',\n ALIGN_TOP = 'align-top',\n ALIGN_MIDDLE = 'align-middle',\n ALIGN_BOTTOM = 'align-bottom',\n DISTRIBUTE_HORIZONTAL = 'distribute-horizontal',\n DISTRIBUTE_VERTICAL = 'distribute-vertical',\n}\n\nexport enum RectangleAlignTitle {\n ALIGN_LEFT = '左对齐',\n ALIGN_CENTER = '左右居中对齐',\n ALIGN_RIGHT = '右对齐',\n ALIGN_TOP = '上对齐',\n ALIGN_MIDDLE = '上下居中对齐',\n ALIGN_BOTTOM = '下对齐',\n DISTRIBUTE_HORIZONTAL = '水平平均分布',\n DISTRIBUTE_VERTICAL = '垂直平均分布',\n}\n\n// `branch not covered`\n// @see https://github.com/istanbuljs/nyc/issues/1209\nexport namespace Rectangle {\n /**\n * 矩形对齐\n */\n export function align(rectangles: Rectangle[], type: RectangleAlignType): Rectangle[] {\n if (rectangles.length <= 1) return rectangles;\n switch (type) {\n /**\n * 下对齐\n */\n case RectangleAlignType.ALIGN_BOTTOM:\n const maxBottom = Math.max(...rectangles.map((r) => r.bottom));\n rectangles.forEach((rect) => {\n rect.y = maxBottom - rect.height;\n });\n break;\n /**\n * 左右居中对齐\n */\n case RectangleAlignType.ALIGN_CENTER:\n const centerX = enlarge(rectangles).center.x;\n rectangles.forEach((rect) => {\n rect.x = centerX - rect.width / 2;\n });\n break;\n /**\n * 左对齐\n */\n case RectangleAlignType.ALIGN_LEFT:\n const minLeft = Math.min(...rectangles.map((r) => r.left));\n rectangles.forEach((rect) => {\n rect.x = minLeft;\n });\n break;\n /**\n * 上下居中对齐\n */\n case RectangleAlignType.ALIGN_MIDDLE:\n const centerY = enlarge(rectangles).center.y;\n rectangles.forEach((rect) => {\n rect.y = centerY - rect.height / 2;\n });\n break;\n /**\n * 右对齐\n */\n case RectangleAlignType.ALIGN_RIGHT:\n const maxRight = Math.max(...rectangles.map((r) => r.right));\n rectangles.forEach((rect) => {\n rect.x = maxRight - rect.width;\n });\n break;\n /**\n * 上对齐\n */\n case RectangleAlignType.ALIGN_TOP:\n const minTop = Math.min(...rectangles.map((r) => r.top));\n rectangles.forEach((rect) => {\n rect.y = minTop;\n });\n break;\n /**\n * 水平平均分布\n */\n case RectangleAlignType.DISTRIBUTE_HORIZONTAL:\n // 只支持大于三个\n if (rectangles.length <= 2) break;\n const sort = rectangles.slice().sort((r1, r2) => r1.left - r2.left);\n const bounds = enlarge(rectangles);\n const space =\n rectangles.reduce((s, rect) => s - rect.width, bounds.width) / (rectangles.length - 1);\n sort.reduce((left, rect) => {\n rect.x = left;\n return left + rect.width + space;\n }, bounds.x);\n break;\n /**\n * 垂直平均分布\n */\n case RectangleAlignType.DISTRIBUTE_VERTICAL:\n if (rectangles.length <= 2) break;\n const sort2 = rectangles.slice().sort((r1, r2) => r1.top - r2.top);\n const bounds2 = enlarge(rectangles);\n const space2 =\n rectangles.reduce((s, rect) => s - rect.height, bounds2.height) / (rectangles.length - 1);\n sort2.reduce((top, rect) => {\n rect.y = top;\n return top + rect.height + space2;\n }, bounds2.y);\n break;\n default:\n break;\n }\n return rectangles;\n }\n\n /**\n * 获取所有矩形的外围最大边框\n */\n export function enlarge(rectangles: Rectangle[]): Rectangle {\n const result = Rectangle.EMPTY.clone();\n if (!rectangles.length) return result;\n const lefts: number[] = [];\n const tops: number[] = [];\n const rights: number[] = [];\n const bottoms: number[] = [];\n rectangles.forEach((r) => {\n lefts.push(r.left);\n rights.push(r.right);\n bottoms.push(r.bottom);\n tops.push(r.top);\n });\n // 使用原生的 apply 减少一次复制\n // eslint-disable-next-line prefer-spread\n const left = Math.min.apply(Math, lefts);\n // eslint-disable-next-line prefer-spread\n const right = Math.max.apply(Math, rights);\n // eslint-disable-next-line prefer-spread\n const top = Math.min.apply(Math, tops);\n // eslint-disable-next-line prefer-spread\n const bottom = Math.max.apply(Math, bottoms);\n result.x = left;\n result.width = right - left;\n result.y = top;\n result.height = bottom - top;\n return result;\n }\n\n /**\n * 判断矩形相交\n *\n * @param [direction] 判断单一方向\n */\n export function intersects(\n target1: Rectangle,\n target2: Rectangle,\n direction?: 'horizontal' | 'vertical'\n ): boolean {\n const left1 = target1.left;\n const top1 = target1.top;\n const right1 = target1.right;\n const bottom1 = target1.bottom;\n const left2 = target2.left;\n const top2 = target2.top;\n const right2 = target2.right;\n const bottom2 = target2.bottom;\n\n if (direction === 'horizontal') return right1 > left2 && left1 < right2;\n if (direction === 'vertical') return bottom1 > top2 && top1 < bottom2;\n if (right1 > left2 && left1 < right2) {\n if (bottom1 > top2 && top1 < bottom2) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * 使用 OBB 算法判断两个旋转矩形是否相交\n * @param rotate1 单位 radian\n * @param rotate2 单位 radian\n */\n export function intersectsWithRotation(\n rect1: Rectangle,\n rotate1: number,\n rect2: Rectangle,\n rotate2: number\n ): boolean {\n const obb1 = new OBBRect(rect1.center, rect1.width, rect1.height, rotate1);\n const obb2 = new OBBRect(rect2.center, rect2.width, rect2.height, rotate2);\n const nv = obb1.centerPoint.sub(obb2.centerPoint);\n const axisA1 = obb1.axesX;\n if (\n obb1.getProjectionRadius(axisA1) + obb2.getProjectionRadius(axisA1) <=\n Math.abs(nv.dot(axisA1))\n )\n return false;\n const axisA2 = obb1.axesY;\n if (\n obb1.getProjectionRadius(axisA2) + obb2.getProjectionRadius(axisA2) <=\n Math.abs(nv.dot(axisA2))\n )\n return false;\n const axisB1 = obb2.axesX;\n if (\n obb1.getProjectionRadius(axisB1) + obb2.getProjectionRadius(axisB1) <=\n Math.abs(nv.dot(axisB1))\n )\n return false;\n const axisB2 = obb2.axesY;\n if (\n obb1.getProjectionRadius(axisB2) + obb2.getProjectionRadius(axisB2) <=\n Math.abs(nv.dot(axisB2))\n )\n return false;\n return true;\n }\n /**\n * 判断指定 rect 是否在 viewport 可见\n *\n * @param rotation rect 旋转,单位 radian\n * @param isContains 整个 bounds 是否全部可见\n */\n export function isViewportVisible(\n rect: Rectangle,\n viewport: Rectangle,\n rotation = 0,\n isContains = false\n ): boolean {\n if (isContains) {\n return viewport.containsRectangle(rect);\n }\n if (rotation === 0) return Rectangle.intersects(rect, viewport);\n return Rectangle.intersectsWithRotation(rect, rotation, viewport, 0);\n }\n\n /**\n * 保证bounds 永远在 viewport 里边\n *\n * @param bounds\n * @param viewport\n * @param padding 距离 viewport 的安全边界\n */\n export function setViewportVisible(\n bounds: Rectangle,\n viewport: Rectangle,\n padding = 0\n ): Rectangle {\n const { left: tLeft, right: tRight, top: tTop, bottom: tBottom, width, height } = bounds;\n const { left: vLeft, right: vRight, top: vTop, bottom: vBottom } = viewport;\n if (tLeft <= vLeft) {\n // 最左边\n bounds.x = vLeft + padding;\n } else if (tRight >= vRight) {\n // 最右边\n bounds.x = vRight - padding - width;\n }\n if (tTop <= vTop) {\n // 最上边\n bounds.y = vTop + padding;\n } else if (tBottom >= vBottom) {\n // 最下边\n bounds.y = vBottom - padding - height;\n }\n return bounds;\n }\n /**\n * 根据两点创建矩形\n */\n export function createRectangleWithTwoPoints(point1: IPoint, point2: IPoint): Rectangle {\n const x = point1.x < point2.x ? point1.x : point2.x;\n const y = point1.y < point2.y ? point1.y : point2.y;\n const width = Math.abs(point1.x - point2.x);\n const height = Math.abs(point1.y - point2.y);\n return new Rectangle(x, y, width, height);\n }\n}\n\n/**\n * Oriented Bounding Box (OBB)\n * @see https://en.wikipedia.org/wiki/Bounding_volume\n */\nexport class OBBRect {\n readonly axesX: Vector2;\n\n readonly axesY: Vector2;\n\n readonly centerPoint: Vector2;\n\n /**\n * @param rotation in radian\n */\n constructor(\n centerPoint: IPoint,\n protected width: number,\n protected height: number,\n rotation: number\n ) {\n this.centerPoint = new Vector2(centerPoint.x, centerPoint.y);\n this.axesX = new Vector2(Math.cos(rotation), Math.sin(rotation));\n this.axesY = new Vector2(-1 * this.axesX.y, this.axesX.x);\n }\n\n /**\n * 计算投影半径\n */\n getProjectionRadius(axis: Vector2): number {\n return (\n (this.width / 2) * Math.abs(axis.dot(this.axesX)) +\n (this.height / 2) * Math.abs(axis.dot(this.axesY))\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { SHAPES } from '../const';\nimport { Rectangle } from './Rectangle';\n\n/**\n * The Circle object is used to help draw graphics and can also be used to specify a hit area for displayObjects.\n */\nexport class Circle {\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n */\n public readonly type = SHAPES.CIRC;\n\n /**\n * @param x Circle center x\n * @param y Circle center y\n */\n constructor(public x = 0, public y = 0, public radius = 0) {}\n\n /**\n * Creates a clone of this Circle instance\n *\n * @return a copy of the Circle\n */\n clone(): Circle {\n return new Circle(this.x, this.y, this.radius);\n }\n\n /**\n * Checks whether the x and y coordinates given are contained within this circle\n *\n * @return Whether the (x, y) coordinates are within this Circle\n */\n contains(x: number, y: number): boolean {\n if (this.radius <= 0) {\n return false;\n }\n\n const r2 = this.radius * this.radius;\n let dx = this.x - x;\n let dy = this.y - y;\n\n dx *= dx;\n dy *= dy;\n\n return dx + dy <= r2;\n }\n\n /**\n * Returns the framing rectangle of the circle as a Rectangle object\n *\n * @return the framing rectangle\n */\n getBounds(): Rectangle {\n return new Rectangle(\n this.x - this.radius,\n this.y - this.radius,\n this.radius * 2,\n this.radius * 2,\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable prefer-destructuring */\nimport type { Transform } from './Transform';\nimport type { IPoint } from './IPoint';\nimport { PI_2 } from './const';\n\n/**\n * The PIXIJS Matrix as a class makes it a lot faster.\n *\n * Here is a representation of it:\n * ```js\n * | a | c | tx|\n * | b | d | ty|\n * | 0 | 0 | 1 |\n * // default:\n * | 1 | 0 | 0 |\n * | 0 | 1 | 0 |\n * | 0 | 0 | 1 |\n * ```\n */\nexport class Matrix {\n public array: Float32Array | null = null;\n\n /**\n * @param [a] x scale\n * @param [b] x skew\n * @param [c] y skew\n * @param [d] y scale\n * @param [tx] x translation\n * @param [ty] y translation\n */\n constructor(\n public a = 1,\n public b = 0,\n public c = 0,\n public d = 1,\n public tx = 0,\n public ty = 0,\n ) {}\n\n /**\n * A default (identity) matrix\n */\n static get IDENTITY(): Matrix {\n return new Matrix();\n }\n\n /**\n * A temp matrix\n */\n static get TEMP_MATRIX(): Matrix {\n return new Matrix();\n }\n\n /**\n * Creates a Matrix object based on the given array. The Element to Matrix mapping order is as follows:\n *\n * @param array The array that the matrix will be populated from.\n */\n fromArray(array: number[]): this {\n if (array.length < 6) return this;\n\n this.a = array[0];\n this.b = array[1];\n this.c = array[3];\n this.d = array[4];\n this.tx = array[2];\n this.ty = array[5];\n return this;\n }\n\n /**\n * sets the matrix properties\n *\n * @param a Matrix component\n * @param b Matrix component\n * @param c Matrix component\n * @param d Matrix component\n * @param tx Matrix component\n * @param ty Matrix component\n */\n set(a: number, b: number, c: number, d: number, tx: number, ty: number): this {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.tx = tx;\n this.ty = ty;\n\n return this;\n }\n\n /**\n * Creates an array from the current Matrix object.\n *\n * @param transpose Whether we need to transpose the matrix or not\n * @param [out=new Float32Array(9)] If provided the array will be assigned to out\n * @return the newly created array which contains the matrix\n */\n toArray(transpose: boolean, out?: Float32Array): Float32Array {\n if (!this.array) {\n this.array = new Float32Array(9);\n }\n\n const array = out || this.array;\n\n if (transpose) {\n array[0] = this.a;\n array[1] = this.b;\n array[2] = 0;\n array[3] = this.c;\n array[4] = this.d;\n array[5] = 0;\n array[6] = this.tx;\n array[7] = this.ty;\n array[8] = 1;\n } else {\n array[0] = this.a;\n array[1] = this.c;\n array[2] = this.tx;\n array[3] = this.b;\n array[4] = this.d;\n array[5] = this.ty;\n array[6] = 0;\n array[7] = 0;\n array[8] = 1;\n }\n\n return array;\n }\n\n /**\n * Get a new position with the current transformation applied.\n * Can be used to go from a child's coordinate space to the world coordinate space. (e.g. rendering)\n *\n * @param pos The origin\n * @param [newPos] The point that the new position is assigned to (allowed to be same as input)\n * @return The new point, transformed through this matrix\n */\n apply(pos: IPoint, newPos?: IPoint): IPoint {\n newPos = newPos || { x: 0, y: 0 };\n\n const { x, y } = pos;\n\n newPos.x = this.a * x + this.c * y + this.tx;\n newPos.y = this.b * x + this.d * y + this.ty;\n\n return newPos;\n }\n\n /**\n * Get a new position with the inverse of the current transformation applied.\n * Can be used to go from the world coordinate space to a child's coordinate space. (e.g. input)\n *\n * @param pos The origin\n * @param [newPos] The point that the new position is assigned to (allowed to be same as input)\n * @return The new point, inverse-transformed through this matrix\n */\n applyInverse(pos: IPoint, newPos?: IPoint): IPoint {\n newPos = newPos || { x: 0, y: 0 };\n\n const id = 1 / (this.a * this.d + this.c * -this.b);\n\n const { x } = pos;\n const { y } = pos;\n\n newPos.x = this.d * id * x + -this.c * id * y + (this.ty * this.c - this.tx * this.d) * id;\n newPos.y = this.a * id * y + -this.b * id * x + (-this.ty * this.a + this.tx * this.b) * id;\n\n return newPos;\n }\n\n /**\n * Translates the matrix on the x and y.\n *\n * @param x How much to translate x by\n * @param y How much to translate y by\n */\n translate(x: number, y: number): this {\n this.tx += x;\n this.ty += y;\n\n return this;\n }\n\n /**\n * Applies a scale transformation to the matrix.\n *\n * @param x The amount to scale horizontally\n * @param y The amount to scale vertically\n */\n scale(x: number, y: number): this {\n this.a *= x;\n this.d *= y;\n this.c *= x;\n this.b *= y;\n this.tx *= x;\n this.ty *= y;\n\n return this;\n }\n\n /**\n * Applies a rotation transformation to the matrix.\n *\n * @param angle The angle in radians.\n */\n rotate(angle: number): this {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n\n const a1 = this.a;\n const c1 = this.c;\n const tx1 = this.tx;\n\n this.a = a1 * cos - this.b * sin;\n this.b = a1 * sin + this.b * cos;\n this.c = c1 * cos - this.d * sin;\n this.d = c1 * sin + this.d * cos;\n this.tx = tx1 * cos - this.ty * sin;\n this.ty = tx1 * sin + this.ty * cos;\n\n return this;\n }\n\n /**\n * 矩阵乘法,当前矩阵 * matrix\n * Appends the given Matrix to this Matrix.\n */\n append(matrix: Matrix): this {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n\n this.a = matrix.a * a1 + matrix.b * c1;\n this.b = matrix.a * b1 + matrix.b * d1;\n this.c = matrix.c * a1 + matrix.d * c1;\n this.d = matrix.c * b1 + matrix.d * d1;\n\n this.tx = matrix.tx * a1 + matrix.ty * c1 + this.tx;\n this.ty = matrix.tx * b1 + matrix.ty * d1 + this.ty;\n\n return this;\n }\n\n /**\n * Sets the matrix based on all the available properties\n *\n * @param x Position on the x axis\n * @param y Position on the y axis\n * @param pivotX Pivot on the x axis\n * @param pivotY Pivot on the y axis\n * @param scaleX Scale on the x axis\n * @param scaleY Scale on the y axis\n * @param rotation Rotation in radians\n * @param skewX Skew on the x axis\n * @param skewY Skew on the y axis\n */\n setTransform(\n x: number,\n y: number,\n pivotX: number,\n pivotY: number,\n scaleX: number,\n scaleY: number,\n rotation: number,\n skewX: number,\n skewY: number,\n ): this {\n this.a = Math.cos(rotation + skewY) * scaleX;\n this.b = Math.sin(rotation + skewY) * scaleX;\n this.c = -Math.sin(rotation - skewX) * scaleY;\n this.d = Math.cos(rotation - skewX) * scaleY;\n\n this.tx = x - (pivotX * this.a + pivotY * this.c);\n this.ty = y - (pivotX * this.b + pivotY * this.d);\n\n return this;\n }\n\n /**\n * 矩阵乘法,matrix * 当前矩阵\n * Prepends the given Matrix to this Matrix.\n */\n prepend(matrix: Matrix): this {\n const tx1 = this.tx;\n\n if (matrix.a !== 1 || matrix.b !== 0 || matrix.c !== 0 || matrix.d !== 1) {\n const a1 = this.a;\n const c1 = this.c;\n\n this.a = a1 * matrix.a + this.b * matrix.c;\n this.b = a1 * matrix.b + this.b * matrix.d;\n this.c = c1 * matrix.a + this.d * matrix.c;\n this.d = c1 * matrix.b + this.d * matrix.d;\n }\n\n this.tx = tx1 * matrix.a + this.ty * matrix.c + matrix.tx;\n this.ty = tx1 * matrix.b + this.ty * matrix.d + matrix.ty;\n\n return this;\n }\n\n /**\n * Decomposes the matrix (x, y, scaleX, scaleY, and rotation) and sets the properties on to a transform.\n *\n * @param transform The transform to apply the properties to.\n * @return The transform with the newly applied properties\n */\n decompose(transform: Transform): Transform {\n // sort out rotation / skew..\n const { a } = this;\n const { b } = this;\n const { c } = this;\n const { d } = this;\n\n const skewX = -Math.atan2(-c, d);\n const skewY = Math.atan2(b, a);\n\n const delta = Math.abs(skewX + skewY);\n\n if (delta < 0.00001 || Math.abs(PI_2 - delta) < 0.00001) {\n transform.rotation = skewY;\n transform.skew.x = 0;\n transform.skew.y = 0;\n } else {\n transform.rotation = 0;\n transform.skew.x = skewX;\n transform.skew.y = skewY;\n }\n\n // next set scale\n transform.scale.x = Math.sqrt(a * a + b * b);\n transform.scale.y = Math.sqrt(c * c + d * d);\n\n // next set position\n transform.position.x = this.tx;\n transform.position.y = this.ty;\n\n return transform;\n }\n\n /**\n * Inverts this matrix\n */\n invert(): this {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n const tx1 = this.tx;\n const n = a1 * d1 - b1 * c1;\n\n this.a = d1 / n;\n this.b = -b1 / n;\n this.c = -c1 / n;\n this.d = a1 / n;\n this.tx = (c1 * this.ty - d1 * tx1) / n;\n this.ty = -(a1 * this.ty - b1 * tx1) / n;\n\n return this;\n }\n\n /**\n * Resets this Matrix to an identity (default) matrix.\n */\n identity(): this {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.tx = 0;\n this.ty = 0;\n\n return this;\n }\n\n /**\n * 未做旋转的矩阵\n */\n isSimple(): boolean {\n return this.a === 1 && this.b === 0 && this.c === 0 && this.d === 1;\n }\n\n /**\n * Creates a new Matrix object with the same values as this one.\n *\n * @return A copy of this matrix.\n */\n clone(): Matrix {\n const matrix = new Matrix();\n\n matrix.a = this.a;\n matrix.b = this.b;\n matrix.c = this.c;\n matrix.d = this.d;\n matrix.tx = this.tx;\n matrix.ty = this.ty;\n\n return matrix;\n }\n\n /**\n * Changes the values of the given matrix to be the same as the ones in this matrix\n *\n * @return The matrix given in parameter with its values updated.\n */\n copyTo(matrix: Matrix): Matrix {\n matrix.a = this.a;\n matrix.b = this.b;\n matrix.c = this.c;\n matrix.d = this.d;\n matrix.tx = this.tx;\n matrix.ty = this.ty;\n\n return matrix;\n }\n\n /**\n * Changes the values of the matrix to be the same as the ones in given matrix\n */\n copyFrom(matrix: Matrix): this {\n this.a = matrix.a;\n this.b = matrix.b;\n this.c = matrix.c;\n this.d = matrix.d;\n this.tx = matrix.tx;\n this.ty = matrix.ty;\n\n return this;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { IPoint } from './IPoint';\n\n/**\n * The Point object represents a location in a two-dimensional coordinate system, where x represents\n * the horizontal axis and y represents the vertical axis.\n *\n * An ObservablePoint is a point that triggers a callback when the point's position is changed.\n */\nexport class ObservablePoint<T = any> implements IPoint {\n public cb: (this: T) => any;\n\n public scope: any;\n\n /**\n * @param {Function} cb - callback when changed\n * @param {object} scope - owner of callback\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=0] - position of the point on the y axis\n */\n constructor(cb: (this: T) => any, scope: T, x = 0, y = 0) {\n this._x = x;\n this._y = y;\n\n this.cb = cb;\n this.scope = scope;\n }\n\n _x: number;\n\n /**\n * The position of the displayObject on the x axis relative to the local coordinates of the parent.\n */\n get x(): number {\n return this._x;\n }\n\n set x(value) {\n if (this._x !== value) {\n this._x = value;\n this.cb.call(this.scope);\n }\n }\n\n _y: number;\n\n /**\n * The position of the displayObject on the x axis relative to the local coordinates of the parent.\n */\n get y(): number {\n return this._y;\n }\n\n set y(value) {\n if (this._y !== value) {\n this._y = value;\n this.cb.call(this.scope);\n }\n }\n\n /**\n * Creates a clone of this point.\n * The callback and scope params can be overidden otherwise they will default\n * to the clone object's values.\n *\n * @override\n * @param {Function} [cb=null] - callback when changed\n * @param {object} [scope=null] - owner of callback\n * @return {ObservablePoint} a copy of the point\n */\n clone(cb = this.cb, scope = this.scope): ObservablePoint {\n return new ObservablePoint(cb, scope, this._x, this._y);\n }\n\n /**\n * Sets the point to a new x and y position.\n * If y is omitted, both x and y will be set to x.\n *\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=x] - position of the point on the y axis\n * @returns {this} Returns itself.\n */\n set(x = 0, y = x): this {\n if (this._x !== x || this._y !== y) {\n this._x = x;\n this._y = y;\n this.cb.call(this.scope);\n }\n\n return this;\n }\n\n /**\n * Copies x and y from the given point\n *\n * @param {IPoint} p - The point to copy from.\n * @returns {this} Returns itself.\n */\n copyFrom(p: IPoint): this {\n if (this._x !== p.x || this._y !== p.y) {\n this._x = p.x;\n this._y = p.y;\n this.cb.call(this.scope);\n }\n\n return this;\n }\n\n /**\n * Copies x and y into the given point\n *\n * @param {IPoint} p - The point to copy.\n * @returns {IPoint} Given point with values updated\n */\n copyTo<T2 extends IPoint>(p: T2): T2 {\n p.x = this._x;\n p.y = this._y;\n\n return p;\n }\n\n /**\n * Returns true if the given point is equal to this point\n *\n * @param {IPoint} p - The point to check\n * @returns {boolean} Whether the given point equal to this point\n */\n equals(p: IPoint): boolean {\n return p.x === this._x && p.y === this._y;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { ObservablePoint } from './ObservablePoint';\nimport { Matrix } from './Matrix';\n\n/**\n * Transform that takes care about its versions\n *\n * @class\n * @memberof PIXI\n */\nexport class Transform {\n /**\n * A default (identity) transform\n *\n * @static\n * @constant\n * @member {PIXI.Transform}\n */\n public static readonly IDENTITY = new Transform();\n\n public worldTransform: Matrix;\n\n public localTransform: Matrix;\n\n public position: ObservablePoint;\n\n public scale: ObservablePoint;\n\n public pivot: ObservablePoint;\n\n public skew: ObservablePoint;\n\n public _parentID: number;\n\n _worldID: number;\n\n protected _rotation: number;\n\n protected _cx: number;\n\n protected _sx: number;\n\n protected _cy: number;\n\n protected _sy: number;\n\n protected _localID: number;\n\n protected _currentLocalID: number;\n\n constructor() {\n /**\n * The world transformation matrix.\n *\n * @member {PIXI.Matrix}\n */\n this.worldTransform = new Matrix();\n\n /**\n * The local transformation matrix.\n *\n * @member {PIXI.Matrix}\n */\n this.localTransform = new Matrix();\n\n /**\n * The coordinate of the object relative to the local coordinates of the parent.\n *\n * @member {PIXI.ObservablePoint}\n */\n this.position = new ObservablePoint(this.onChange, this, 0, 0);\n\n /**\n * The scale factor of the object.\n *\n * @member {PIXI.ObservablePoint}\n */\n this.scale = new ObservablePoint(this.onChange, this, 1, 1);\n\n /**\n * The pivot point of the displayObject that it rotates around.\n *\n * @member {PIXI.ObservablePoint}\n */\n this.pivot = new ObservablePoint(this.onChange, this, 0, 0);\n\n /**\n * The skew amount, on the x and y axis.\n *\n * @member {PIXI.ObservablePoint}\n */\n this.skew = new ObservablePoint(this.updateSkew, this, 0, 0);\n\n /**\n * The rotation amount.\n *\n * @protected\n * @member {number}\n */\n this._rotation = 0;\n\n /**\n * The X-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n *\n * @protected\n * @member {number}\n */\n this._cx = 1;\n\n /**\n * The Y-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n *\n * @protected\n * @member {number}\n */\n this._sx = 0;\n\n /**\n * The X-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n *\n * @protected\n * @member {number}\n */\n this._cy = 0;\n\n /**\n * The Y-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n *\n * @protected\n * @member {number}\n */\n this._sy = 1;\n\n /**\n * The locally unique ID of the local transform.\n *\n * @protected\n * @member {number}\n */\n this._localID = 0;\n\n /**\n * The locally unique ID of the local transform\n * used to calculate the current local transformation matrix.\n *\n * @protected\n * @member {number}\n */\n this._currentLocalID = 0;\n\n /**\n * The locally unique ID of the world transform.\n *\n * @protected\n * @member {number}\n */\n this._worldID = 0;\n\n /**\n * The locally unique ID of the parent's world transform\n * used to calculate the current world transformation matrix.\n *\n * @protected\n * @member {number}\n */\n this._parentID = 0;\n }\n\n /**\n * Called when a value changes.\n *\n * @protected\n */\n protected onChange(): void {\n this._localID++;\n }\n\n /**\n * Called when the skew or the rotation changes.\n *\n * @protected\n */\n protected updateSkew(): void {\n this._cx = Math.cos(this._rotation + this.skew.y);\n this._sx = Math.sin(this._rotation + this.skew.y);\n this._cy = -Math.sin(this._rotation - this.skew.x); // cos, added PI/2\n this._sy = Math.cos(this._rotation - this.skew.x); // sin, added PI/2\n\n this._localID++;\n }\n\n /**\n * Updates the local transformation matrix.\n */\n updateLocalTransform(): void {\n const lt = this.localTransform;\n\n if (this._localID !== this._currentLocalID) {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c);\n lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d);\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n }\n\n /**\n * Updates the local and the world transformation matrices.\n *\n * @param {PIXI.Transform} parentTransform - The parent transform\n */\n updateTransform(parentTransform: Transform): void {\n const lt = this.localTransform;\n\n if (this._localID !== this._currentLocalID) {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n lt.tx = this.position.x - (this.pivot.x * lt.a + this.pivot.y * lt.c);\n lt.ty = this.position.y - (this.pivot.x * lt.b + this.pivot.y * lt.d);\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n\n if (this._parentID !== parentTransform._worldID) {\n // concat the parent matrix with the objects transform.\n const pt = parentTransform.worldTransform;\n const wt = this.worldTransform;\n\n wt.a = lt.a * pt.a + lt.b * pt.c;\n wt.b = lt.a * pt.b + lt.b * pt.d;\n wt.c = lt.c * pt.a + lt.d * pt.c;\n wt.d = lt.c * pt.b + lt.d * pt.d;\n wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx;\n wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty;\n\n this._parentID = parentTransform._worldID;\n\n // update the id of the transform..\n this._worldID++;\n }\n }\n\n /**\n * Decomposes a matrix and sets the transforms properties based on it.\n *\n * @param {PIXI.Matrix} matrix - The matrix to decompose\n */\n setFromMatrix(matrix: Matrix): void {\n matrix.decompose(this);\n this._localID++;\n }\n\n /**\n * The rotation of the object in radians.\n *\n * @member {number}\n */\n get rotation(): number {\n return this._rotation;\n }\n\n set rotation(value: number) {\n if (this._rotation !== value) {\n this._rotation = value;\n this.updateSkew();\n }\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Wrap the given `value` between `min` and `max`.\n * value ∈ [min, max)\n * e.g.\n * expect(wrap(0, 1, 10)).toBe(9)\n * expect(wrap(1, 1, 10)).toBe(1)\n * expect(wrap(10, 1, 10)).toBe(1)\n *\n * @return The wrapped value.\n */\nexport function wrap(value: number, min: number, max: number): number {\n const range = max - min;\n\n return min + ((((value - min) % range) + range) % range);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { wrap as mathWrap } from './wrap';\nimport { type IPoint } from './IPoint';\n\nexport namespace Angle {\n /**\n * Wrap an angle.\n *\n * Wraps the angle to a value in the range of -PI to PI.\n *\n * @param angle - The angle to wrap, in radians.\n * @return The wrapped angle, in radians.\n */\n export function wrap(angle: number): number {\n return mathWrap(angle, -Math.PI, Math.PI);\n }\n /**\n * Wrap an angle in degrees.\n *\n * Wraps the angle to a value in the range of -180 to 180.\n *\n * @param angle - The angle to wrap, in degrees.\n * @return The wrapped angle, in degrees.\n */\n export function wrapDegrees(angle: number): number {\n return mathWrap(angle, -180, 180);\n }\n\n /**\n * 计算两个点的夹角\n *\n * @return The angle in radians.\n */\n export function betweenPoints(\n point1: IPoint,\n point2: IPoint,\n originPoint: IPoint = { x: 0, y: 0 },\n ): number {\n const p1 = {\n x: point1.x - originPoint.x,\n y: point1.y - originPoint.y,\n };\n const p2 = {\n x: point2.x - originPoint.x,\n y: point2.y - originPoint.y,\n };\n // return Math.atan2(p2.y, p2.x) - Math.atan2(p1.y, p1.x)\n return Math.atan2(p1.x * p2.y - p1.y * p2.x, p1.x * p2.x + p1.y * p2.y);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nconst { keys } = Object;\nexport function deepFreeze<T>(obj: T): T {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n const stack: any[] = [obj];\n while (stack.length > 0) {\n const objectToFreeze = stack.shift();\n Object.freeze(objectToFreeze);\n for (const key in objectToFreeze) {\n if (_hasOwnProperty.call(objectToFreeze, key)) {\n const prop = objectToFreeze[key];\n if (typeof prop === 'object' && !Object.isFrozen(prop)) {\n stack.push(prop);\n }\n }\n }\n }\n return obj;\n}\n\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function notEmpty<T>(arg: T | undefined | null): arg is T {\n return arg !== undefined && arg !== null;\n}\n\n/**\n * filter dangerous key, prevent prototype pollution injection\n * @param key key to be filtered\n * @returns filtered key\n */\nexport const safeKey = (key: string): string => {\n const dangerousProps = [\n '__proto__',\n 'constructor',\n 'prototype',\n '__defineGetter__',\n '__defineSetter__',\n '__lookupGetter__',\n '__lookupSetter__',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n 'toLocaleString',\n ];\n\n if (dangerousProps.includes(key.toLowerCase())) {\n return '';\n }\n\n return key;\n};\n\n/**\n * `true` if the argument is an empty object. Otherwise, `false`.\n */\nexport function isEmpty(arg: Object): boolean {\n return keys(arg).length === 0 && arg.constructor === Object;\n}\n\nexport const each = <T = any, K = string>(obj: any, fn: (value: T, key: K) => void) =>\n keys(obj).forEach((key) => fn(obj[key], key as any));\n\nexport const values = (obj: any) =>\n Object.values ? Object.values(obj) : keys(obj).map((k) => obj[k]);\n\nexport const filter = (obj: any, fn: (value: any, key: string) => boolean, dest?: any) =>\n keys(obj).reduce(\n (output, key) => (fn(obj[key], key) ? Object.assign(output, { [key]: obj[key] }) : output),\n dest || {}\n );\n\nexport const pick = (obj: any, fields: string[], dest?: any) =>\n filter(obj, (n, k) => fields.indexOf(k) !== -1, dest);\n\nexport const omit = (obj: any, fields: string[], dest?: any) =>\n filter(obj, (n, k) => fields.indexOf(k) === -1, dest);\n\nexport const reduce = <V = any, R = any>(\n obj: any,\n fn: (res: R, value: V, key: string) => any,\n res: R = {} as R\n) => keys(obj).reduce((r, k) => fn(r, obj[k], k), res);\n\nexport const mapValues = <V = any>(obj: any, fn: (value: V, key: string) => any) =>\n reduce<V>(obj, (res, value, key) => Object.assign(res, { [key]: fn(value, key) }));\n\nexport const mapKeys = <V = any>(obj: any, fn: (value: V, key: string) => any) =>\n reduce<V>(obj, (res, value, key) => Object.assign(res, { [fn(value, key)]: value }));\n\n/**\n * @param target\n * @param key\n * @example\n * const obj = {\n * position: {\n * x: 0\n * y: 0\n * }\n * }\n * getByKey(ob, 'position.x') // 0\n */\nexport function getByKey(target: any, key: string): any | undefined {\n if (typeof target !== 'object' || !key) return undefined;\n return key.split('.').reduce((v: any, k: string) => {\n if (typeof v !== 'object') return undefined;\n return v[k];\n }, target);\n}\n\n/**\n * @param target\n * @param key\n * @param newValue\n * @param autoCreateObject\n * @example\n * const obj = {\n * position: {\n * x: 0\n * y: 0\n * }\n * }\n * setByKey(ob, 'position.x', 100) // true\n * setByKey(obj, 'size.width', 100) // false\n * setBeyKey(obj, 'size.width', 100, true) // true\n */\nexport function setByKey(\n target: any,\n key: string,\n newValue: any,\n autoCreateObject = true,\n clone = false\n): any {\n if (typeof target !== 'object' || !key) return target;\n if (clone) {\n target = { ...target };\n }\n const originTarget = target;\n const targetKeys = key.split('.');\n while (targetKeys.length > 0) {\n key = targetKeys.shift()!;\n if (targetKeys.length === 0) {\n target[safeKey(key)] = newValue;\n return originTarget;\n }\n if (typeof target[key] !== 'object') {\n if (!autoCreateObject) return originTarget;\n target[safeKey(key)] = {};\n }\n if (clone) {\n if (Array.isArray(target[key])) {\n target[safeKey(key)] = target[key].slice();\n } else {\n target[safeKey(key)] = { ...target[key] };\n }\n }\n target = target[key];\n }\n return originTarget;\n}\n\nexport const NOOP = () => {};\n\n/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport function isPlainObject(obj: any): boolean {\n if (typeof obj !== 'object' || obj === null) return false;\n\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport interface AsClass<T> {\n new (...args: any[]): T;\n}\n\ntype UnknownObject<T extends object> = Record<string | number | symbol, unknown> & {\n [K in keyof T]: unknown;\n};\n\nexport function isObject<T extends object>(v: unknown): v is UnknownObject<T> {\n return typeof v === 'object' && v !== null;\n}\nexport function isString(v: unknown): v is string {\n return typeof v === 'string' || v instanceof String;\n}\nexport function isFunction<T extends (...args: unknown[]) => unknown>(v: unknown): v is T {\n return typeof v === 'function';\n}\nconst toString = Object.prototype.toString;\n\nexport function getTag(v: unknown) {\n if (v == null) {\n return v === undefined ? '[object Undefined]' : '[object Null]';\n }\n return toString.call(v);\n}\nexport function isNumber(v: unknown): v is number {\n return typeof v === 'number' || (isObject(v) && getTag(v) === '[object Number]');\n}\n\nexport type MaybeArray<T> = T | T[];\nexport type MaybePromise<T> = T | PromiseLike<T>;\n\nexport type RecursivePartial<T> = {\n [P in keyof T]?: T[P] extends Array<infer I>\n ? Array<RecursivePartial<I>>\n : RecursivePartial<T[P]>;\n};\n\ntype Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };\n\nexport type Xor<T, U> = T | U extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * An object that performs a cleanup operation when `.dispose()` is called.\n *\n * Some examples of how disposables are used:\n *\n * - An event listener that removes itself when `.dispose()` is called.\n * - The return value from registering a provider. When `.dispose()` is called, the provider is unregistered.\n */\nexport interface Disposable {\n dispose(): void;\n}\n\nexport namespace Disposable {\n export function is(thing: any): thing is Disposable {\n return (\n typeof thing === 'object' &&\n thing !== null &&\n typeof (<Disposable>(<any>thing)).dispose === 'function'\n );\n }\n\n export function create(func: () => void): Disposable {\n return {\n dispose: func,\n };\n }\n\n export const NULL = Object.freeze(create(() => {}));\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { NOOP } from './objects';\nimport { Disposable } from './disposable';\n\nexport interface EventListener<T> {\n (args: T): void;\n}\n\nexport interface Event<T> {\n (listener: EventListener<T>, thisArgs?: any): Disposable;\n}\n\nexport namespace Event {\n export const None: Event<any> = () => Disposable.NULL;\n}\n\nexport class Emitter<T = any> {\n static LEAK_WARNING_THRESHHOLD = 175;\n\n private _event?: Event<T>;\n\n private _listeners?: EventListener<T>[];\n\n private _disposed = false;\n\n get event(): Event<T> {\n if (!this._event) {\n this._event = (listener: EventListener<T>, thisArgs?: any) => {\n if (this._disposed) {\n return Disposable.NULL;\n }\n if (!this._listeners) {\n this._listeners = [];\n }\n const finalListener = thisArgs ? listener.bind(thisArgs) : listener;\n if (this._listeners.length >= Emitter.LEAK_WARNING_THRESHHOLD) {\n console.warn(`[Emitter] Listeners length >= ${Emitter.LEAK_WARNING_THRESHHOLD}`);\n }\n this._listeners.push(finalListener);\n\n const eventDisposable: Disposable = {\n dispose: () => {\n eventDisposable.dispose = NOOP;\n if (!this._disposed) {\n const index = this._listeners!.indexOf(finalListener);\n if (index !== -1) {\n this._listeners!.splice(index, 1);\n }\n }\n },\n };\n\n return eventDisposable;\n };\n }\n return this._event;\n }\n\n fire(event: T): void {\n if (this._listeners) {\n this._listeners.forEach((listener) => listener(event));\n }\n }\n\n get disposed(): boolean {\n return this._disposed;\n }\n\n dispose(): void {\n if (this._listeners) {\n this._listeners = undefined;\n }\n this._disposed = true;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Emitter, Event } from './event';\nimport { Disposable } from './disposable';\n\nexport class DisposableImpl implements Disposable {\n readonly toDispose = new DisposableCollection();\n\n dispose(): void {\n this.toDispose.dispose();\n }\n\n get disposed(): boolean {\n return this.toDispose.disposed;\n }\n\n get onDispose(): Event<void> {\n return this.toDispose.onDispose;\n }\n}\n\nexport class DisposableCollection implements Disposable {\n protected readonly disposables: Disposable[] = [];\n\n protected readonly onDisposeEmitter = new Emitter<void>();\n\n private _disposed = false;\n\n constructor(...toDispose: Disposable[]) {\n toDispose.forEach((d) => this.push(d));\n }\n\n get length() {\n return this.disposables.length;\n }\n\n get onDispose(): Event<void> {\n return this.onDisposeEmitter.event;\n }\n\n get disposed(): boolean {\n return this._disposed;\n }\n\n dispose(): void {\n if (this.disposed) {\n return;\n }\n this._disposed = true;\n this.disposables\n .slice()\n .reverse()\n .forEach((disposable) => {\n try {\n disposable.dispose();\n } catch (e) {\n console.error(e);\n }\n });\n this.onDisposeEmitter.fire(undefined);\n this.onDisposeEmitter.dispose();\n }\n\n push(disposable: Disposable): Disposable {\n if (this.disposed) return Disposable.NULL;\n if (disposable === Disposable.NULL) {\n return Disposable.NULL;\n }\n const { disposables } = this;\n if (disposables.find((d) => d === disposable)) {\n return Disposable.NULL;\n }\n const originalDispose = disposable.dispose;\n const toRemove = Disposable.create(() => {\n const index = disposables.indexOf(disposable);\n if (index !== -1) {\n disposables.splice(index, 1);\n }\n disposable.dispose = originalDispose;\n });\n disposable.dispose = () => {\n toRemove.dispose();\n disposable.dispose();\n };\n disposables.push(disposable);\n return toRemove;\n }\n\n pushAll(disposables: Disposable[]): Disposable[] {\n return disposables.map((disposable) => this.push(disposable));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation and others. All rights reserved.\n * Licensed under the MIT License. See https://github.com/Microsoft/vscode/blob/master/LICENSE.txt for license information.\n *\n * Fork: https://github.com/Microsoft/vscode/blob/main/src/vs/base/common/cancellation.ts\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, Event } from './event';\nimport { type Disposable } from './disposable';\n\nexport interface CancellationToken {\n /**\n * A flag signalling is cancellation has been requested.\n */\n readonly isCancellationRequested: boolean;\n /**\n * An event which fires when cancellation is requested. This event\n * only ever fires `once` as cancellation can only happen once. Listeners\n * that are registered after cancellation will be called (next event loop run),\n * but also only once.\n * @event\n */\n readonly onCancellationRequested: Event<void>;\n}\n\nconst shortcutEvent: Event<any> = Object.freeze(function (callback, context?): Disposable {\n const handle = setTimeout(callback.bind(context), 0);\n return {\n dispose() {\n clearTimeout(handle);\n },\n };\n});\n\nexport namespace CancellationToken {\n export function isCancellationToken(thing: unknown): thing is CancellationToken {\n if (thing === CancellationToken.None || thing === CancellationToken.Cancelled) {\n return true;\n }\n if (thing instanceof MutableToken) {\n return true;\n }\n if (!thing || typeof thing !== 'object') {\n return false;\n }\n return (\n typeof (thing as CancellationToken).isCancellationRequested === 'boolean' &&\n typeof (thing as CancellationToken).onCancellationRequested === 'function'\n );\n }\n export const None = Object.freeze<CancellationToken>({\n isCancellationRequested: false,\n onCancellationRequested: Event.None,\n });\n\n export const Cancelled = Object.freeze<CancellationToken>({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent,\n });\n}\n\nexport class MutableToken implements CancellationToken {\n private _isCancelled = false;\n\n private _emitter?: Emitter<void>;\n\n public cancel(): void {\n if (!this._isCancelled) {\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire(undefined);\n this.dispose();\n }\n }\n }\n\n get isCancellationRequested(): boolean {\n return this._isCancelled;\n }\n\n get onCancellationRequested(): Event<void> {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new Emitter<void>();\n }\n return this._emitter.event;\n }\n\n public dispose(): void {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = undefined;\n }\n }\n}\n\nexport class CancellationTokenSource {\n private _token: CancellationToken | undefined;\n\n get token(): CancellationToken {\n if (!this._token) {\n // be lazy and create the token only when\n // actually needed\n this._token = new MutableToken();\n }\n return this._token;\n }\n\n cancel(): void {\n if (!this._token) {\n // save an object by returning the default\n // cancelled token when cancellation happens\n // before someone asks for the token\n this._token = CancellationToken.Cancelled;\n } else if (this._token !== CancellationToken.Cancelled) {\n (<MutableToken>this._token).cancel();\n }\n }\n\n dispose(): void {\n this.cancel();\n }\n}\n\nconst cancelledMessage = 'Cancelled';\n\nexport function cancelled(): Error {\n return new Error(cancelledMessage);\n}\n\nexport function isCancelled(err: Error | undefined): boolean {\n return !!err && err.message === cancelledMessage;\n}\n\nexport function checkCancelled(token?: CancellationToken): void {\n if (!!token && token.isCancellationRequested) {\n throw cancelled();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { CancellationToken, cancelled } from './cancellation';\n\n/**\n * Simple implementation of the deferred pattern.\n * An object that exposes a promise and functions to resolve and reject it.\n */\nexport class PromiseDeferred<T> {\n resolve: (value?: T | PromiseLike<T>) => void;\n\n reject: (err?: any) => void;\n\n promise = new Promise<T>((resolve, reject) => {\n // @ts-ignore\n this.resolve = resolve;\n this.reject = reject;\n });\n}\n\nexport const Deferred = PromiseDeferred;\n/**\n * @returns resolves after a specified number of milliseconds\n * @throws cancelled if a given token is cancelled before a specified number of milliseconds\n */\nexport function delay(ms: number, token = CancellationToken.None): Promise<void> {\n const deferred = new PromiseDeferred<void>();\n const handle = setTimeout(() => deferred.resolve(), ms);\n token.onCancellationRequested(() => {\n clearTimeout(handle);\n deferred.reject(cancelled());\n });\n return deferred.promise;\n}\n\nexport async function retry<T>(\n task: () => Promise<T>,\n delayTime: number,\n retries: number,\n shouldRetry?: (res: T) => boolean,\n): Promise<T> {\n let lastError: Error | undefined;\n let result: T;\n\n for (let i = 0; i < retries; i++) {\n try {\n // eslint-disable-next-line no-await-in-loop\n result = await task();\n if (shouldRetry && shouldRetry(result)) {\n // eslint-disable-next-line no-await-in-loop\n await delay(delayTime);\n // eslint-disable-next-line no-continue\n continue;\n }\n return result;\n } catch (error: any) {\n lastError = error;\n\n // eslint-disable-next-line no-await-in-loop\n await delay(delayTime);\n }\n }\n\n if (lastError) {\n throw lastError;\n }\n return result!;\n}\n\nexport interface PromiseTask<T> {\n (): Promise<T>;\n}\n\nexport interface PromisePoolOpts {\n intervalCount?: number; // 每批数目\n intervalTime?: number; // 执行一批后的间隔时间, 默认没有间隔\n retries?: number; // 如果某个执行失败, 尝试的次数,默认不尝试\n retryDelay?: number;\n}\n\nconst PromisePoolOptsDefault: Required<PromisePoolOpts> = {\n intervalCount: 10, // 每批数目\n intervalTime: 0,\n retries: 0,\n retryDelay: 10,\n};\n\nexport class PromisePool {\n protected opts: Required<PromisePoolOpts>;\n\n constructor(opts: PromisePoolOpts = PromisePoolOptsDefault) {\n this.opts = { ...PromisePoolOptsDefault, ...opts };\n }\n\n protected async tryToExec<T>(\n task: PromiseTask<T>,\n checkIfRetry?: (res: T) => boolean,\n ): Promise<T> {\n if (this.opts.retries === 0) return task();\n return retry<T>(task, this.opts.retryDelay, this.opts.retries, checkIfRetry);\n }\n\n /**\n * @param tasks 执行任务\n * @param checkIfRetry 判断结果是否需要重试\n */\n async run<T>(tasks: PromiseTask<T>[], checkIfRetry?: (res: T) => boolean): Promise<T[]> {\n if (tasks.length === 0) return [];\n const curTasks = tasks.slice(0, this.opts.intervalCount);\n const promises = curTasks.map(task => this.tryToExec<T>(task, checkIfRetry));\n const result: T[] = await Promise.all(promises);\n const nextTasks = tasks.slice(this.opts.intervalCount);\n if (nextTasks.length === 0) return result;\n if (this.opts.intervalTime !== 0) await delay(this.opts.intervalTime);\n return result.concat(await this.run(nextTasks, checkIfRetry));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport namespace Compare {\n /**\n * 比较,默认浅比较\n * @param oldProps\n * @param newProps\n * @param depth - 比较的深度,默认是 1\n * @param partial - 比较对象的局部,默认 true\n */\n export function isChanged(oldProps: any, newProps: any, depth = 1, partial = true): boolean {\n if (oldProps === newProps) return false;\n if (depth === 0 || typeof oldProps !== 'object' || typeof newProps !== 'object') {\n return oldProps !== newProps;\n }\n const keys = Object.keys(newProps);\n if (!partial) {\n const oldKeys = Object.keys(oldProps);\n if (keys.length !== oldKeys.length) return true;\n }\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n if (isChanged(oldProps[key], newProps[key], depth - 1, partial)) return true;\n }\n return false;\n }\n /**\n * 深度比较\n * @param oldProps\n * @param newProps\n * @param partial - 比较对象的局部,默认 true\n */\n export function isDeepChanged(oldProps: any, newProps: any, partial?: boolean): boolean {\n return isChanged(oldProps, newProps, Infinity, partial);\n }\n export function isArrayShallowChanged(arr1: any[], arr2: any[]): boolean {\n if (arr1.length !== arr2.length) return true;\n for (let i = 0, len = arr1.length; i < len; i++) {\n if (arr1[i] !== arr2[i]) {\n return true;\n }\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type Disposable } from './disposable';\nimport { Compare } from './compare';\n\nexport interface CacheManager<T, ITEM extends CacheOriginItem = CacheOriginItem>\n extends Disposable {\n get(): T;\n getMore(count: number, autoDelete?: boolean): T[];\n getMoreByItemKeys(item: ITEM[]): T[];\n getMoreByItems(item: ITEM[]): T[];\n /**\n * 从缓存中获取\n * @param key\n */\n getFromCacheByKey(key: string): T | undefined;\n /**\n * 获取所有缓存\n */\n getFromCache(): Cache<T>[];\n /**\n * 清空缓存数据\n */\n clear(): void;\n}\n\nexport interface ShortCache<T> {\n get(fn: () => T): T;\n}\n\nexport interface WeakCache {\n get(key: any): any;\n save(key: any, value: any): void;\n isChanged(key: any, value: any): boolean;\n}\n\nexport type Cache<T> = {\n [P in keyof T]: T[P];\n} & { dispose?: () => void; key?: any };\n\nexport interface CacheOpts {\n deleteLimit?: number; // 限制数目,只有超过这个数目,才会自动删除\n}\n\nexport interface CacheOriginItem {\n key?: any;\n}\n\n/**\n * 缓存工具:\n * 1. 可延迟按需创建,提升性能\n * 2. 可支持多个或单个,有些动态创建多个的场景可以共享已有的实例,提升性能\n * 3. 自动删除,超过一定的数目会自动做清空回收\n *\n * @example\n * function htmlFactory<HTMLElement>(): Cache<HTMLElement> {\n * const el = document.createElement('div')\n * return Cache.assign(el, { dispose: () => el.remove() })\n * }\n * const htmlCache = Cache.create<HTMLElement>(htmlFactory)\n * console.log(htmlCache.get() === htmlCache.get()) // true\n * console.log(htmlCache.getMore(3)) // [HTMLElement, HTMLElement, HTMLElement]\n * console.log(htmlCache.getMore(2)) // [HTMLElement, HTMLElement] 自动删除第三个\n */\nexport namespace Cache {\n export function create<T, ITEM extends CacheOriginItem = CacheOriginItem>(\n cacheFactory: (item?: ITEM) => Cache<T>,\n opts: CacheOpts = {},\n ): CacheManager<T, ITEM> {\n let cache: Cache<T>[] = [];\n return {\n getFromCache(): Cache<T>[] {\n return cache;\n },\n getMore(count: number, autoDelete = true): T[] {\n if (count === cache.length) {\n // 强调互斥,统一 return cache.slice()\n } else if (count > cache.length) {\n let added = count - cache.length;\n while (added > 0) {\n cache.push(cacheFactory());\n added--;\n }\n } else if (autoDelete) {\n const deleteLimit = opts.deleteLimit ?? 0;\n // 只有剩余个数超过 deleteLimit,才会自动删除\n if (cache.length - count > deleteLimit) {\n const deleted = cache.splice(count);\n deleted.forEach(el => el.dispose && el.dispose());\n }\n }\n\n return cache.slice(0, count);\n },\n /**\n * 通过 key 去创建缓存\n * @param items\n */\n getMoreByItemKeys(items: ITEM[]): T[] {\n const newCache: Cache<T>[] = [];\n const findedMap: Map<any, any> = new Map();\n cache.forEach(item => {\n const finded = items.find(i => i.key === item.key);\n if (finded) {\n findedMap.set(item.key, item);\n } else {\n item.dispose?.();\n }\n });\n items.forEach(item => {\n if (!item.key) throw new Error('getMoreByItemKeys need a key');\n const finded = findedMap.get(item.key);\n if (finded) {\n newCache.push(finded);\n } else {\n newCache.push(cacheFactory(item));\n }\n });\n cache = newCache;\n return cache;\n },\n /**\n * 通过 item 引用取拿缓存数据\n */\n getMoreByItems(items: any[]): T[] {\n const newCache: Cache<T>[] = [];\n const findedMap: Map<any, any> = new Map();\n cache.forEach(cacheItem => {\n // 这里 key 存的是 item 的引用\n const finded = items.find(ref => ref === cacheItem.key);\n if (finded) {\n findedMap.set(cacheItem.key, cacheItem);\n } else {\n cacheItem.dispose?.();\n }\n });\n items.forEach(item => {\n const finded = findedMap.get(item);\n if (finded) {\n newCache.push(finded);\n } else {\n newCache.push({\n ...cacheFactory(item),\n key: item,\n });\n }\n });\n cache = newCache;\n return cache;\n },\n get(): T {\n if (cache.length > 0) return cache[0];\n cache.push(cacheFactory());\n return cache[0];\n },\n getFromCacheByKey(key: string): T | undefined {\n return cache.find(item => item.key === key);\n },\n dispose(): void {\n cache.forEach(item => item.dispose && item.dispose());\n cache.length = 0;\n },\n clear(): void {\n this.dispose();\n },\n };\n }\n\n export function assign<T = any>(target: T, fn: Disposable): Cache<T> {\n return Object.assign(target as any, fn) as any;\n }\n\n /**\n * 短存储\n * @param timeout\n */\n export function createShortCache<T>(timeout = 1000): ShortCache<T> {\n let cache: T | undefined;\n let timeoutId: number | undefined;\n\n function updateTimeout(): void {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n timeoutId = undefined;\n cache = undefined;\n // 这里加 any 是因为在 nodejs 场景 setTimeout 返回的格式定义的不是 number, yarn dev 会报错\n }, timeout) as any;\n }\n\n return {\n get(getValue: () => T): T {\n if (cache) {\n updateTimeout();\n return cache;\n }\n cache = getValue();\n updateTimeout();\n return cache;\n },\n };\n }\n\n export function createWeakCache(): WeakCache {\n const weakCache: WeakMap<any, any> = new WeakMap();\n return {\n get: key => weakCache.get(key),\n save: (key: any, value: any) => weakCache.set(key, value),\n isChanged: (key: any, value: any) => Compare.isChanged(weakCache.get(key), value),\n };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { mapValues } from '../objects';\n\nexport type SchemaType =\n | 'string'\n | 'integer'\n | 'float'\n | 'boolean'\n | 'enum'\n | 'object'\n | 'range'\n | 'color'\n | 'array';\n\ninterface SchemaMixinDefaults {\n [defaultKey: string]: any;\n}\nexport interface SchemaDecoration<SCHEMA = any> {\n type: SchemaType;\n label?: string; // 显示的名字\n description?: string; // 更多描述,用于 tooltip 展示\n properties?: {\n [K in keyof SCHEMA]: SchemaDecoration<SCHEMA[K]> & { priority?: number };\n };\n enumValues?: (string | number)[]; // only for enum\n enumType?: string | number;\n enumLabels?: string[];\n rangeStep?: number; // range 一步大小\n max?: number; // 最大值,只适用于数字\n min?: number; // 最小值,只适用于数字\n disabled?: boolean; // 是否屏蔽\n default?: SCHEMA; // 默认值\n mixinDefaults?: SchemaMixinDefaults;\n}\n\nexport namespace SchemaDecoration {\n /**\n * 扩展 SchemaDecoration\n *\n * @param properties - 定义新的属性\n * @param baseDecoration - 基类\n * @param mixinDefaults - 修改默认值\n * @example\n * const MySchemaDecoration = SchemaDecoration.create({\n * myProp: { label: '', default: 1, type: 'number' }\n * },\n * TransformSchemaDecoration, // 继承 Transform\n * {\n * 'size.width': 100, // 修改 size 的默认值\n * 'size.height': 100,\n * })\n */\n export function create<T>(\n properties: { [key: string]: SchemaDecoration },\n baseDecoration?: SchemaDecoration,\n mixinDefaults?: SchemaMixinDefaults,\n ): SchemaDecoration<T> {\n return {\n type: 'object',\n properties: {\n ...baseDecoration?.properties,\n ...properties,\n },\n mixinDefaults: {\n ...baseDecoration?.mixinDefaults,\n ...mixinDefaults,\n },\n } as SchemaDecoration;\n }\n}\n\nexport namespace Schema {\n export function createDefault<T>(\n decoration: SchemaDecoration,\n mixinDefaults?: SchemaMixinDefaults,\n _key?: string,\n ): T {\n mixinDefaults = { ...decoration.mixinDefaults, ...mixinDefaults };\n const prefixKey = _key ? `${_key}.` : '';\n if (decoration.properties) {\n return mapValues(decoration.properties, (v, k) => {\n const childKey = prefixKey + k;\n if (mixinDefaults && mixinDefaults[childKey] !== undefined) {\n return mixinDefaults[childKey];\n }\n return createDefault(v, mixinDefaults, childKey);\n }) as T;\n }\n return typeof decoration.default === 'function' ? decoration.default() : decoration.default;\n }\n /**\n * 非 object 类\n */\n export function isBaseType(decoration: SchemaDecoration): boolean {\n return (\n decoration.type === 'string' ||\n decoration.type === 'float' ||\n decoration.type === 'integer' ||\n decoration.type === 'boolean' ||\n decoration.type === 'enum' ||\n decoration.type === 'color' ||\n decoration.type === 'range'\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Schema, type SchemaDecoration } from './schema';\n\nexport interface PositionSchema {\n x: number;\n y: number;\n}\n\nexport type RotationSchema = number;\n\nexport interface OriginSchema {\n x: number;\n y: number;\n}\n\nexport interface ScaleSchema {\n x: number;\n y: number;\n}\n\nexport interface ScrollSchema {\n scrollX: number;\n scrollY: number;\n}\n\nexport interface SizeSchema {\n width: number;\n height: number;\n locked?: boolean; // 是否开启等比锁\n}\n\nexport interface SkewSchema {\n x: number;\n y: number;\n}\n\nexport interface TransformSchema {\n position: PositionSchema;\n size: SizeSchema;\n origin: OriginSchema;\n scale: ScaleSchema;\n skew: SkewSchema;\n rotation: RotationSchema;\n}\n\nexport const SizeSchemaDecoration: SchemaDecoration<SizeSchema> = {\n label: '大小',\n properties: {\n width: { label: '宽', default: 0, type: 'float' },\n height: { label: '高', default: 0, type: 'float' },\n locked: { label: '等比锁', default: false, type: 'boolean' },\n },\n type: 'object',\n};\n\nexport const OriginSchemaDecoration: SchemaDecoration<OriginSchema> = {\n label: '原点',\n description: '用于设置旋转的中心位置',\n properties: {\n x: { label: 'x', default: 0.5, type: 'float' },\n y: { label: 'y', default: 0.5, type: 'float' },\n },\n type: 'object',\n};\n\nexport const PositionSchemaDecoration: SchemaDecoration<PositionSchema> = {\n label: '位置',\n properties: {\n x: { label: 'x', default: 0, type: 'float' },\n y: { label: 'y', default: 0, type: 'float' },\n },\n type: 'object',\n};\n\nexport const RotationSchemaDecoration: SchemaDecoration<RotationSchema> = {\n label: '旋转',\n type: 'float',\n default: 0,\n};\n\nexport const ScaleSchemaDecoration: SchemaDecoration<ScaleSchema> = {\n label: '缩放',\n properties: {\n x: { label: 'x', default: 1, type: 'float' },\n y: { label: 'y', default: 1, type: 'float' },\n },\n type: 'object',\n};\nexport const SkewSchemaDecoration: SchemaDecoration<SkewSchema> = {\n label: '倾斜',\n properties: {\n x: { label: 'x', default: 0, type: 'float' },\n y: { label: 'y', default: 0, type: 'float' },\n },\n type: 'object',\n};\n\nexport const TransformSchemaDecoration: SchemaDecoration<TransformSchema> = {\n properties: {\n position: PositionSchemaDecoration,\n size: SizeSchemaDecoration,\n origin: OriginSchemaDecoration,\n scale: ScaleSchemaDecoration,\n skew: SkewSchemaDecoration,\n rotation: RotationSchemaDecoration,\n },\n type: 'object',\n};\nexport namespace TransformSchema {\n export function createDefault(): TransformSchema {\n return Schema.createDefault<TransformSchema>(TransformSchemaDecoration);\n }\n\n export function toJSON(obj: TransformSchema): TransformSchema {\n return {\n position: { x: obj.position.x, y: obj.position.y },\n size: {\n width: obj.size.width,\n height: obj.size.height,\n locked: obj.size.locked,\n },\n origin: { x: obj.origin.x, y: obj.origin.y },\n scale: { x: obj.scale.x, y: obj.scale.y },\n skew: { x: obj.skew.x, y: obj.skew.y },\n rotation: obj.rotation,\n };\n }\n export function getDelta(\n oldTransform: TransformSchema,\n newTransform: TransformSchema,\n ): TransformSchema {\n return {\n position: {\n x: newTransform.position.x - oldTransform.position.x,\n y: newTransform.position.y - oldTransform.position.y,\n },\n size: {\n width: newTransform.size.width - oldTransform.size.width,\n height: newTransform.size.height - oldTransform.size.height,\n },\n origin: {\n x: newTransform.origin.x - oldTransform.origin.x,\n y: newTransform.origin.y - oldTransform.origin.y,\n },\n scale: {\n x: newTransform.scale.x - oldTransform.scale.x,\n y: newTransform.scale.y - oldTransform.scale.y,\n },\n skew: {\n x: newTransform.skew.x - oldTransform.skew.x,\n y: newTransform.skew.y - oldTransform.skew.y,\n },\n rotation: newTransform.rotation - oldTransform.rotation,\n };\n }\n\n export function mergeDelta(\n oldTransform: TransformSchema,\n newTransformDelta: TransformSchema,\n toFixedNum?: number,\n ): TransformSchema {\n const toFixed =\n toFixedNum !== undefined ? (v: number) => Math.round(v * 100) / 100 : (v: number) => v;\n return {\n position: {\n x: toFixed(newTransformDelta.position.x + oldTransform.position.x),\n y: toFixed(newTransformDelta.position.y + oldTransform.position.y),\n },\n size: {\n width: toFixed(newTransformDelta.size.width + oldTransform.size.width),\n height: toFixed(newTransformDelta.size.height + oldTransform.size.height),\n locked: oldTransform.size.locked,\n },\n origin: {\n x: toFixed(newTransformDelta.origin.x + oldTransform.origin.x),\n y: toFixed(newTransformDelta.origin.y + oldTransform.origin.y),\n },\n scale: {\n x: toFixed(newTransformDelta.scale.x + oldTransform.scale.x),\n y: toFixed(newTransformDelta.scale.y + oldTransform.scale.y),\n },\n skew: {\n x: toFixed(newTransformDelta.skew.x + oldTransform.skew.x),\n y: toFixed(newTransformDelta.skew.y + oldTransform.skew.y),\n },\n rotation: newTransformDelta.rotation + oldTransform.rotation,\n };\n }\n\n export function is(obj: object): obj is TransformSchema {\n return (\n obj &&\n (obj as TransformSchema).position &&\n (obj as TransformSchema).size &&\n typeof (obj as TransformSchema).position.x === 'number' &&\n typeof (obj as TransformSchema).size.width === 'number'\n );\n }\n}\n\nexport namespace SizeSchema {\n /**\n * 适配父节点宽高\n *\n * @return 返回需要缩放的比例,为 1 则不缩放\n */\n export function fixSize(currentSize: SizeSchema, parentSize: SizeSchema): number {\n if (currentSize.width <= parentSize.width && currentSize.height <= parentSize.height) return 1;\n const wScale = currentSize.width / parentSize.width;\n const hScale = currentSize.height / parentSize.height;\n const scale = wScale > hScale ? wScale : hScale;\n return 1 / scale;\n }\n\n /**\n * 填充父节点的宽高\n *\n * @return 返回放大的比例\n */\n export function coverSize(currentSize: SizeSchema, parentSize: SizeSchema): number {\n const wScale = currentSize.width / parentSize.width;\n const hScale = currentSize.height / parentSize.height;\n const scale = wScale < hScale ? wScale : hScale;\n return 1 / scale;\n }\n\n export function empty(): SizeSchema {\n return { width: 0, height: 0 };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type PositionSchema, type SizeSchema } from './schema-transform';\nimport { type SchemaDecoration } from './schema';\n\nexport type OpacitySchema = number;\n\nexport interface FlipSchema {\n x: boolean;\n y: boolean;\n}\n\nexport interface ShadowSchema {\n color: string;\n offsetX: number;\n offsetY: number;\n blur: number;\n}\n\nexport interface PaddingSchema {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport namespace PaddingSchema {\n export const empty = () => ({ left: 0, right: 0, top: 0, bottom: 0 });\n}\n\nexport type MarginSchema = PaddingSchema;\n\nexport interface TintSchema {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n}\n\nexport namespace TintSchema {\n export function isEmpty(tint: Partial<TintSchema> | undefined): boolean {\n if (!tint) return true;\n return (\n tint.topLeft === undefined &&\n tint.topRight === undefined &&\n tint.bottomLeft === undefined &&\n tint.bottomRight === undefined\n );\n }\n}\n\nexport const CropSchemaDecoration: SchemaDecoration<PositionSchema & SizeSchema> = {\n label: '裁剪',\n properties: {\n width: { label: '宽', type: 'integer' },\n height: { label: '高', type: 'integer' },\n x: { label: 'x', type: 'integer' },\n y: { label: 'y', type: 'integer' },\n },\n type: 'object',\n};\n\nexport const FlipSchemaDecoration: SchemaDecoration<FlipSchema> = {\n label: '镜像替换',\n properties: {\n x: { label: '水平镜像替换', default: false, type: 'boolean' },\n y: { label: '垂直镜像替换', default: false, type: 'boolean' },\n },\n type: 'object',\n};\nexport const PaddingSchemaDecoration: SchemaDecoration<PaddingSchema> = {\n label: '留白',\n properties: {\n left: { label: '左', default: 0, type: 'integer' },\n top: { label: '上', default: 0, type: 'integer' },\n right: { label: '右', default: 0, type: 'integer' },\n bottom: { label: '下', default: 0, type: 'integer' },\n },\n type: 'object',\n};\n\nexport const ShadowSchemaDecoration: SchemaDecoration<ShadowSchema> = {\n label: '阴影',\n properties: {\n offsetX: { label: 'X', type: 'integer' },\n offsetY: { label: 'Y', type: 'integer' },\n blur: { label: '模糊', type: 'integer' },\n color: { label: '颜色', type: 'color' },\n },\n type: 'object',\n};\n\nexport const TintSchemaDecoration: SchemaDecoration<TintSchema> = {\n label: '颜色',\n properties: {\n topLeft: { label: '左上', type: 'color' },\n topRight: { label: '右上', type: 'color' },\n bottomLeft: { label: '左下', type: 'color' },\n bottomRight: { label: '右下', type: 'color' },\n },\n type: 'object',\n};\n\nexport const OpacitySchemaDecoration: SchemaDecoration<OpacitySchema> = {\n label: '透明度',\n type: 'float',\n min: 0,\n max: 1,\n default: 1,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport clx from 'clsx';\n\nimport { each } from './objects';\nimport { Disposable } from './disposable';\nimport { Cache, type CacheManager } from './cache';\n\nconst toStyleKey = (key: string) => key.replace(/([A-Z])/, (k) => `-${k.toLowerCase()}`);\n\nexport type CSSStyle = {\n [P in keyof CSSStyleDeclaration]?: string | number | undefined;\n};\n\nexport interface DOMCache extends HTMLElement, Disposable {\n setStyle(style: CSSStyle): void;\n key?: string | number;\n}\n\nexport namespace domUtils {\n export function toPixel(num: number): string {\n return `${num}px`;\n }\n\n // export function fromPixel(pixel: string): number {\n // return parseInt(pixel.substring(0, pixel.length - 2));\n // }\n\n export function fromPercent(percent: string): number {\n return parseFloat(percent.substring(0, percent.length - 1));\n }\n\n export function toPercent(percent: number): string {\n return `${percent}%`;\n }\n\n export function enableEvent(element: HTMLDivElement): void {\n element.style.pointerEvents = 'all';\n }\n\n export function disableEvent(element: HTMLDivElement): void {\n element.style.pointerEvents = 'none';\n }\n\n export function createElement<T extends HTMLElement>(ele: string, ...classNames: string[]): T {\n const element = document.createElement(ele);\n if (classNames.length > 0) {\n element.className = clx(classNames);\n }\n return element as T;\n }\n\n export function createDivWithClass(...classNames: string[]): HTMLDivElement {\n return createElement('div', ...classNames) as HTMLDivElement;\n }\n\n export function addClass(element: Element, ...classNames: string[]): void {\n element.className = clx(classNames.concat(element.className.split(' ')));\n }\n\n export function delClass(element: Element, ...classNames: string[]): void {\n classNames.forEach((name) => {\n element.classList.remove(name);\n });\n element.className = element.classList.toString();\n }\n\n export function coverClass(element: Element, ...classNames: string[]): void {\n element.className = clx(classNames);\n }\n\n export function clearChildren(container: HTMLDivElement): void {\n container.innerHTML = '';\n }\n\n export function translatePercent(node: HTMLDivElement, x: number, y: number): void {\n node.style.transform = `translate(${x}%, ${y}%)`;\n }\n\n export function translateXPercent(node: HTMLDivElement, x: number): void {\n node.style.transform = `translateX(${x}%)`;\n }\n\n export function translateYPercent(node: HTMLDivElement, y: number): void {\n node.style.transform = `translateY(${y}%)`;\n }\n\n export function setStyle(node: HTMLElement, styles: CSSStyle): void {\n const styleStrs: string[] = [];\n each(styles, (value, key) => {\n if (value === undefined) return;\n if (typeof value === 'number' && key !== 'opacity' && key !== 'zIndex' && key !== 'scale') {\n value = toPixel(value);\n }\n styleStrs.push(`${toStyleKey(key)}:${value}`);\n });\n const oldStyle = node.getAttribute('style');\n const newStyle = styleStrs.join(';');\n if (oldStyle !== newStyle) {\n node.setAttribute('style', newStyle);\n }\n }\n\n export function classNameWithPrefix(prefix: string): (key: string, opts?: any) => string {\n return (key: string, opts?: any) =>\n clx(\n key\n .split(/\\s+/)\n .map((s) => `${prefix}-${s}`)\n .join(' '),\n opts\n );\n }\n\n export function addStandardDisposableListener(\n dom: HTMLElement | HTMLDocument,\n type: string,\n listener: EventListenerOrEventListenerObject | any,\n options?: boolean | any\n ): Disposable {\n dom.addEventListener(type, listener, options);\n return Disposable.create(() => {\n dom.removeEventListener(type, listener);\n });\n }\n\n /**\n * dom 缓存\n * @param parent\n * @param className\n */\n export function createDOMCache<T extends DOMCache = DOMCache>(\n parent: HTMLElement,\n className: string | (() => HTMLElement),\n children?: string\n ): CacheManager<T> {\n return Cache.create<T>((/* item */) => {\n // item 悬空了?\n const dom =\n typeof className === 'string' ? domUtils.createDivWithClass(className) : className();\n if (children) {\n dom.innerHTML = children;\n }\n parent.appendChild(dom);\n return Object.assign(dom, {\n // key: item ? item.key : undefined,\n dispose: () => {\n const { parentNode } = dom;\n if (parentNode) {\n parentNode.removeChild(dom);\n }\n },\n setStyle: (style: CSSStyle) => {\n domUtils.setStyle(dom, style);\n },\n }) as T;\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nlet _idx = 0;\n\nexport type LocalId = number;\nexport function generateLocalId(): LocalId {\n // @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n if (_idx === Number.MAX_SAFE_INTEGER) {\n _idx = 0;\n }\n return _idx++;\n}\n\nexport function _setIdx(idx: number): void {\n _idx = idx;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport function iterToArray<T = any>(iter: IterableIterator<T>): T[] {\n const result = [];\n for (const v of iter) {\n result.push(v);\n }\n return result;\n}\n\nexport function arrayToSet(arr: any[]): Set<any> {\n const set = new Set();\n for (let i = 0, len = arr.length; i < len; i++) {\n set.add(arr[i]);\n }\n return set;\n}\n\n/**\n * @see https://stackoverflow.com/a/9229821\n * export function arrayUnion(arr: any[]): any[] {\n * return [...new Set(arr)]\n * }\n */\nexport function arrayUnion(arr: any[]): any[] {\n const result: any[] = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n if (!result.includes(arr[i])) result.push(arr[i]);\n }\n return result;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type interfaces } from 'inversify';\n\nexport function bindContributions(bind: interfaces.Bind, target: any, contribs: any[]) {\n bind(target).toSelf().inSingletonScope();\n contribs.forEach(contrib => bind(contrib).toService(target));\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\ntype RequestFn = (...args: any[]) => Promise<any>;\n\n/**\n * 请求缓存\n * @param req\n */\n// eslint-disable-next-line import/no-mutable-exports\nexport const RequestCache = new Map<any, Promise<any>>();\nconst CACHE_TIME = 10000; // 缓存过期时间\n\nexport function clearRequestCache(): void {\n RequestCache.clear();\n}\n\nexport function requestWithMemo(\n req: RequestFn,\n cacheTime = CACHE_TIME,\n createCacheKey?: (...args: any[]) => any,\n): RequestFn {\n return (...args: any[]) => {\n const cacheKey = createCacheKey ? createCacheKey(...args) : req;\n if (RequestCache.has(cacheKey)) {\n return Promise.resolve(RequestCache.get(cacheKey));\n }\n const result = req(...args);\n const time = setTimeout(() => RequestCache.delete(cacheKey), cacheTime);\n const withErrorResult = result.catch(e => {\n // 请求错误情况下不缓存\n RequestCache.delete(cacheKey);\n clearTimeout(time);\n throw e;\n });\n RequestCache.set(cacheKey, withErrorResult);\n return withErrorResult;\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { MaybePromise } from './';\n\ntype FuncMaybePromise<D> = (d: D, ...others: any[]) => MaybePromise<D>;\ntype FuncPromise<D> = (d: D, ...others: any[]) => Promise<D>;\ntype Func<D> = (d: D, ...others: any[]) => D;\n\nexport function composeAsync<D>(...fns: FuncMaybePromise<D>[]): FuncPromise<D> {\n return async (data: D, ...others: any[]) => {\n let index = 0;\n while (fns[index]) {\n data = await fns[index](data, ...others);\n index += 1;\n }\n return data;\n };\n}\n\nexport function compose<D>(...fns: Func<D>[]): Func<D> {\n return (data: D, ...others: any[]) => {\n let index = 0;\n while (fns[index]) {\n data = fns[index](data, ...others);\n index += 1;\n }\n return data;\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type interfaces } from 'inversify';\n\nexport const ContributionProvider = Symbol('ContributionProvider');\n\nexport interface ContributionProvider<T extends object> {\n getContributions(): T[];\n\n forEach(fn: (v: T) => void): void;\n}\n\nclass ContainerContributionProviderImpl<T extends object> implements ContributionProvider<T> {\n protected services: T[] | undefined;\n\n constructor(\n protected readonly container: interfaces.Container,\n protected readonly identifier: interfaces.ServiceIdentifier<T>\n ) {}\n\n forEach(fn: (v: T) => void): void {\n this.getContributions().forEach(fn);\n }\n\n getContributions(): T[] {\n if (!this.services) {\n const currentServices: T[] = [];\n let { container } = this;\n if (container.isBound(this.identifier)) {\n try {\n currentServices.push(...container.getAll(this.identifier));\n } catch (error: any) {\n console.error(error);\n }\n }\n\n this.services = currentServices;\n }\n return this.services;\n }\n}\n\nexport function bindContributionProvider(bind: interfaces.Bind, id: symbol): void {\n bind(ContributionProvider)\n .toDynamicValue((ctx) => new ContainerContributionProviderImpl(ctx.container, id))\n .inSingletonScope()\n .whenTargetNamed(id);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Disposable } from './disposable';\ntype EventListener<K extends keyof HTMLElementEventMap> = (\n this: HTMLElement,\n event: HTMLElementEventMap[K],\n) => any;\ntype EventListenerOrEventListenerObject<K extends keyof HTMLElementEventMap> = EventListener<K>;\nexport function addEventListener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement,\n type: K,\n listener: EventListenerOrEventListenerObject<K>,\n useCapture?: boolean,\n): Disposable {\n element.addEventListener(type, listener, useCapture);\n return Disposable.create(() => element.removeEventListener(type, listener, useCapture));\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nclass Logger {\n isDevEnv() {\n return process.env.NODE_ENV === 'development';\n }\n\n info(...props: any) {\n if (!this.isDevEnv()) return;\n // eslint-disable-next-line no-console\n return console.info(props);\n }\n\n log(...props: any) {\n if (!this.isDevEnv()) return;\n // eslint-disable-next-line no-console\n return console.log(...props);\n }\n\n error(...props: any) {\n return console.error(...props);\n }\n\n warn(...props: any) {\n return console.warn(...props);\n }\n}\n\nexport const logger = new Logger();\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nfunction createStyleElement(\n styleId: string,\n container: HTMLElement = document.head,\n): HTMLStyleElement {\n const style = document.createElement('style');\n style.id = styleId;\n style.type = 'text/css';\n style.media = 'screen';\n style.appendChild(document.createTextNode('')); // trick for webkit\n container.appendChild(style);\n return style;\n}\n\nexport const DecorationStyle = {\n createStyleElement,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useState } from 'react';\n\nexport function useRefresh(defaultValue?: any): (v?: any) => void {\n const [, update] = useState<any>(defaultValue);\n return useCallback((v?: any) => update(v !== undefined ? v : {}), []);\n}\n"],"mappings":"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","names":["SHAPES","Point","RectangleAlignType","RectangleAlignTitle","Rectangle","Angle","wrap","Disposable","Event","CancellationToken","Compare","keys","Cache","SchemaDecoration","Schema","TransformSchema","SizeSchema","PaddingSchema","TintSchema","isEmpty","domUtils","clx"]}