@aibee/crc-bmap 0.0.92 → 0.0.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/bmap.ts", "../src/utils/timer.ts", "../src/utils/init-helper.ts", "../src/utils/dispose.ts", "../src/utils/rules.ts", "../src/utils/texture.ts", "../src/utils/coordinate.ts", "../src/utils/proxy.ts", "../src/utils/promise.ts", "../src/utils/svg.ts", "../src/utils/sleep.ts", "../src/utils/color.ts", "../src/utils/model.ts", "../src/utils/os.ts", "../src/utils/keyboard.ts", "../src/context.ts", "../src/operations/selection/selection.ts", "../src/elements/graphic.ts", "../src/elements/shadow.ts", "../src/elements/poi.ts", "../src/elements/overlay.ts", "../src/elements/floor.ts", "../src/layer/graphic-layer.ts", "../src/layer/layer.ts", "../src/layer/poi-layer.ts", "../src/elements/heatmap.ts", "../src/elements/model.ts", "../src/elements/base-svg.ts", "../src/elements/svg-line.ts", "../src/elements/svg-polygon.ts", "../src/elements/select-box.ts", "../src/operations/selection/box-selection.ts", "../src/operations/hover/hover-helper.ts", "../src/factory/material.ts", "../src/utils/camera-bound.ts", "../src/config.ts"],
4
- "sourcesContent": ["import { EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { Context } from \"./context\";\nimport { clearTextTexture, clearCanvas, vector3ToDevice, getCenter, getLongestSideDir } from \"./utils\";\nimport { Config, getConfig } from './config'\nimport {Floor, Graphic, HeatmapDataParam, Model, ModelOptions, PoiOptionsParam} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport { GraphicInfo, GraphicOptions, PolygonGeometry, ResGraphicInfo } from \"./types\";\nimport { debounce } from \"lodash\";\nimport { disposeLoader } from \"./utils/model\";\n\nexport interface LoadQuery {\n brand: string;\n project: string;\n phase: string;\n building: string;\n floor: string;\n ts: string;\n resource_type_list: string;\n}\n\ninterface BmapEventMap {\n \"zoom-change\": {\n basicZoom: number;\n cameraZoom: number;\n }\n}\n\nexport type MapType = \"2d\" | \"3d\"\n\nexport enum MapTypePolar {\n D2 = 0,\n D3 = 1.1\n}\n\nexport class BMap extends EventDispatcher<BmapEventMap> {\n config: Config;\n\n public context: Context;\n\n private polarKeys: string[] = [];\n\n private azimuthalKeys: string[] = [];\n\n private svgLine?: SvgLine;\n\n private svgPolygon?: SvgPolygon;\n\n public basicZoom = 1;\n\n private prevCameraZoom = 1;\n\n type: MapType = \"2d\"\n\n floorDataMap: Map<string, GraphicInfo[]> = new Map()\n\n buildingGroundMap = new Map<string, GraphicInfo | null>()\n\n currentBuildGround: GraphicInfo | null = null\n\n private observe: ResizeObserver | null = null;\n\n constructor(private container: HTMLElement, config: Partial<Config> = {}) {\n super();\n this.config = getConfig(config)\n this.context = new Context(container, this.config);\n this.registryEvent();\n this.context.render();\n }\n\n private async loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery): Promise<GraphicInfo[]> {\n const { apiDomain, apiPath: { floorGraphic }, apiInfo } = this.config\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo[] => {\n (res || []).map(item => item.info = (JSON.parse(item.info)))\n return (res || []) as unknown as GraphicInfo[]\n })\n return data\n }\n\n getBuildingKey({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">) {\n const key = `${brand}-${project}-${phase}-${building}`\n return key\n }\n\n private async loadBuildingGround({ brand, project, phase, building }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">): Promise<GraphicInfo | null>{ \n const key = this.getBuildingKey({ brand, project, phase, building })\n if (this.buildingGroundMap.get(key)) { \n return this.buildingGroundMap.get(key) || null\n }\n const { apiDomain, apiPath: { floorRange }, apiInfo } = this.config\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${phase}&building=${building}`\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then(res => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo | null => {\n const data = (res || [])[0]\n if (data) {\n data.info = JSON.parse(data.info)\n }\n return data as unknown as GraphicInfo | null\n })\n this.buildingGroundMap.set(key, data)\n return data\n }\n \n getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) { \n const floorKey = `${brand}-${project}-${phase}-${building}-${floor}-${ts}-${resource_type_list}`\n return floorKey\n }\n\n async load({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n if (this.floorDataMap.get(floorKey)) { return }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({ brand, project, phase, building, floor, ts, resource_type_list }),\n this.loadBuildingGround({ brand, project, phase, building })\n ])\n if (buildGround) {\n const center = getCenter((buildGround.info.geometry as PolygonGeometry).cds[0])\n data.forEach(item => {\n item.info.geometry.coords = JSON.parse(JSON.stringify(item.info.geometry.cds))\n if (item.info.geometry.type === \"polygon\") { \n item.info.geometry.coords.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = item.info.geometry.cds\n item.info.geometry.coords = [x - center[0], y - center[1]]\n }\n item.info.transformToBuildingGround = true\n })\n }\n const { ground, markGraphic, graphic } = this.config\n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n item.info.deltaHeight = 0.00001 * (i + 1)\n if (item.info.group === \"ground\") {\n item.info.fillColor = ground.color\n item.info.fillOpacity = ground.opacity\n item.info.height = ground.height\n item.info.stroke = ground.stroke\n item.info.strokeColor = ground.strokeColor\n item.info.strokeOpacity = ground.strokeOpacity\n } else if (item.info.userData.mark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.fillOpacity = markGraphic.opacity;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n } else {\n item.info.fillOpacity = graphic.fillOpacity;\n if (this.config.initTransToMark) { \n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n }\n }\n }\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear()\n }\n this.floorDataMap.set(floorKey, data)\n return data\n }\n\n private createFloor(data: GraphicInfo[]) { \n const curFloor = new Floor(this.context)\n if (!data.length) { return { curFloor, graphics: [] } }\n const legacyToGraphicMap = new Map<string, Graphic>()\n const graphics = []\n for (const item of data) {\n if (item.info.group === \"ground\") {\n curFloor.createGround(item.info)\n } else {\n const graphic = curFloor.addGraphic(item.info)\n graphic.userData.data = item\n legacyToGraphicMap.set(item.legacy_id, graphic)\n graphics.push(graphic)\n }\n }\n // curFloor.addShadow()\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap\n return { curFloor, graphics }\n }\n\n switchFloor({ brand, project, phase, building, floor, ts, resource_type_list }: LoadQuery) {\n const floorKey = this.getFloorKey({ brand, project, phase, building, floor, ts, resource_type_list })\n const curFloorData = this.floorDataMap.get(floorKey)\n this.context.control.removeEventListener(\"change\", this.onControlChange)\n if (curFloorData) {\n const buildingKey = this.getBuildingKey({ brand, project, phase, building })\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null\n const createdFloor = this.createFloor(curFloorData)\n if (createdFloor) {\n this.context.cameraBound.setEnable(false)\n this.context.switchFloor(createdFloor.curFloor)\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, 0);\n this.context.fitCameraToGround(undefined, 0);\n this.basicZoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n this.context.control.addEventListener(\"change\", this.onControlChange)\n if (this.type === \"3d\") {\n this.context.fitCameraToGround(this.config.defaultPadding, 0, false)\n }\n this.onControlChange()\n this.context.cameraBound.setEnable(true)\n } else {\n console.warn(\"[switchFloor error] [\"+ floor +\"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\")\n }\n } else {\n console.warn(\"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\")\n }\n }\n\n onControlChange = () => {\n const { camera: { zoom } } = this.context\n if (zoom !== this.prevCameraZoom) {\n this.dispatchEvent({\n type: \"zoom-change\",\n basicZoom: this.basicZoom,\n cameraZoom: this.context.camera.zoom\n })\n this.prevCameraZoom = zoom\n }\n }\n\n // \u6276\u68AF\n addModel(graphic: Graphic, options: ModelOptions) { \n // \u6839\u636E\u6700\u957F\u8FB9\uFF0C\u83B7\u53D6\u6276\u68AF\u7684\u65B9\u5411\n if (graphic.options.geometry.type === \"polygon\") {\n // \u6839\u636E\u65B9\u5411\u6E32\u67D3\u6A21\u578B\n const model = this.context.currentFloor?.addModel({\n ...options,\n position: graphic.getPosition().setZ(0.1),\n id: graphic.options.id\n })\n if (model) {\n const { facilityAngle = 0, facilityXScale = 1, facilityYScale = 1 } = graphic.options.userData\n model.rotateZ((180 - facilityAngle) / 180 * Math.PI)\n model.scale.set(facilityXScale, facilityYScale, 1)\n }\n }\n }\n\n addHeatmap(data: HeatmapDataParam) {\n return this.context.currentFloor?.addHeatmap(data)\n }\n\n getLegacyToGraphicMap(): Map<string, Graphic> {\n return this.context.currentFloor?.userData.legacyToGraphicMap || new Map()\n }\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u697C\u5C42\u5168\u90E8\u7684graphic\n * @returns \n */\n getFloorAllGraphics(): Graphic[] {\n return this.context.currentFloor?.graphicLayer.children.filter(item => item instanceof Graphic) as Graphic[] || []\n }\n\n createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) { \n if (this.context.currentFloor) {\n if (options.id === undefined) {\n options.id = graphic.options.id\n }\n const position = graphic.getCenter()\n const poi = this.context.currentFloor.addPoi({\n ...options,\n position: { ...position, z: position.z + graphic.options.height / 2 }\n })\n return poi\n }\n return null\n }\n\n removeHeatMap() {\n this.context.currentFloor?.removeHeatMap()\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n translateElementToCenter(ele: { getPosition: () => Vector3 }, duration: number = 500) {\n const position = ele.getPosition()\n return this.context.setCameraPosition(position, duration);\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n async translateElementToCenterX(ele: { getPosition: () => Vector3 }, duration: number = 500) {\n const { y, z } = this.context.control.target\n const position = ele.getPosition()\n position.setY(y)\n position.setZ(z)\n await this.context.setCameraPosition(position, duration);\n }\n\n /**\n * \u83B7\u53D6\u7269\u4F53\u7684\u5C4F\u5E55\u5750\u6807\n */\n getElementDeviceCoordinate(ele: Object3D) {\n const vector = ele.position.clone();\n const { clientWidth, clientHeight } = this.container;\n return vector3ToDevice(\n vector,\n this.context.camera,\n clientWidth,\n clientHeight\n );\n }\n\n /**\n * \u5207\u63622d\u30013d\u89C6\u89D2\n * @param type\n * @param duration\n */\n changeMapType(type: MapType, duration = 500) {\n this.type = type;\n if (type === \"2d\") {\n return this.context.setPolarAngle(MapTypePolar.D2, duration);\n } else {\n return this.context.setPolarAngle(MapTypePolar.D3, duration);\n }\n }\n\n async resetView(duration = 300) { \n const time = duration / 3\n await this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, time)\n await this.changeMapType(this.type, time)\n await this.context.fitCameraToGround(this.config.defaultPadding, time, false)\n }\n\n /**\n * \u7F29\u5C0F\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n reduceMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom - zoom,\n this.context.control.target,\n duration\n );\n }\n\n /**\n * \u653E\u5927\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n enlargeMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom + zoom,\n this.context.control.target,\n duration\n );\n }\n\n onKeydown = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n this.context.control.maxPolarAngle = this.config.control.maxPolar;\n this.context.control.minPolarAngle = 0;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n this.context.control.maxAzimuthAngle = Infinity;\n this.context.control.minAzimuthAngle = Infinity;\n }\n };\n\n onKeyUp = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n const polar = this.context.control.getPolarAngle();\n this.context.control.maxPolarAngle = polar;\n this.context.control.minPolarAngle = polar;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal;\n this.context.control.minAzimuthAngle = azimuthal;\n }\n };\n\n registryEvent() {\n window.addEventListener(\"keydown\", this.onKeydown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n if (this.config.resizeObserver) {\n const observe = new ResizeObserver(debounce(this.resize, 5))\n observe.observe(this.container)\n this.observe = observe\n }\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"keydown\", this.onKeydown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n this.observe?.disconnect()\n this.observe = null;\n }\n\n /**\n * \u914D\u7F6E\u5750\u6807\u5B9A\u70B9 2D/3D\u7EBF\u6027\u5207\u6362\u7684\u5FEB\u6377\u952E\n * @param key\n */\n configurePolarShortcutKeys(keys: string[]) {\n this.polarKeys = keys;\n }\n\n configureAzimuthalShortcutKeys(keys: string[]) {\n this.azimuthalKeys = keys;\n }\n\n rotateMap(radius = 0.1) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal + radius;\n this.context.control.minAzimuthAngle = azimuthal + radius;\n this.context.control.update()\n }\n\n /**\n * \u6D4B\u91CF\u8DDD\u79BB\n * @returns \n */\n async measureDistance() { \n this.cancelDistance()\n return new Promise((resolve, reject) => { \n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgLine = new SvgLine(this.context)\n const dispose = this.svgLine.dispose.bind(this.svgLine)\n this.svgLine.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgLine.addEventListener(\"distance\", ({ distance }) => {\n resolve(distance)\n })\n }) \n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u957F\u5EA6\n */\n cancelDistance() {\n if (this.svgLine) {\n this.svgLine.dispose()\n this.svgLine = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6D4B\u91CF\u9762\u79EF\n */\n measureArea() { \n this.cancelArea()\n return new Promise((resolve, reject) => {\n this.changeMapType('2d', 0)\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgPolygon = new SvgPolygon(this.context)\n const dispose = this.svgPolygon.dispose.bind(this.svgPolygon)\n this.svgPolygon.dispose = function () {\n dispose();\n reject(\"cancel\")\n }\n this.svgPolygon.addEventListener(\"area\", ({ area }) => {\n resolve(area)\n })\n })\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u9762\u79EF\n */\n cancelArea() {\n if (this.svgPolygon) {\n this.svgPolygon.dispose()\n this.svgPolygon = undefined\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6839\u636EnodeId \u83B7\u53D6graphic\n */\n getGraphicByNodeId(nodeId: string) {\n return this.context.currentFloor?.graphicLayer.getGraphicByNodeId(nodeId) || null\n }\n\n deleteGraphic(graphic: Graphic) {\n this.context.currentFloor?.graphicLayer.removeGraphic(graphic)\n }\n\n createGraphicByOptions(options: GraphicOptions) {\n if (!options.transformToBuildingGround) {\n if (this.currentBuildGround) {\n const center = getCenter((this.currentBuildGround.info.geometry as PolygonGeometry).cds[0])\n if (options.geometry.type === \"polygon\") {\n options.geometry.coords = JSON.parse(JSON.stringify(options.geometry.cds))\n options.geometry.coords.map(cds => {\n if (Array.isArray(cds)) {\n cds.forEach(coord => {\n coord[0] -= center[0]\n coord[1] -= center[1]\n })\n }\n })\n } else {\n // point\n const [x, y] = options.geometry.cds\n options.geometry.coords = [x - center[0], y - center[1]]\n }\n }\n }\n return this.context.currentFloor?.graphicLayer.createGraphic(options)\n }\n\n removePoiById(id: string) { \n return this.context.currentFloor?.poiLayer.removePoiById(id)\n }\n\n getPoiById(id: string) { \n return this.context.currentFloor?.poiLayer.getPoiById(id)\n }\n\n getPois() { \n return (this.context.currentFloor?.poiLayer.pois || []).filter(item => !item.options.built_in)\n }\n\n clearPoi() {\n if (this.context.currentFloor) { \n this.context.currentFloor.poiLayer.clear()\n }\n }\n\n removeSelectGraphic(graphic: Graphic) { \n this.context.selection.remove(graphic)\n }\n\n resize = () => { \n this.context.cameraBound.setEnable(false)\n this.context.onWindowResize();\n const azimuthal = this.context.control.getAzimuthalAngle();\n const zoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(0, 0);\n const basicZoom = this.context.getFitCameraToGroundZoom(undefined, 0);\n this.basicZoom = basicZoom || 0;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n this.context.camera.zoom = zoom;\n this.context.control.addEventListener(\"change\", this.onControlChange)\n this.context.setAzimuthalAngle(azimuthal, 0);\n this.context.cameraBound.setEnable(true)\n }\n\n dispose() {\n this.context.dispose();\n this.floorDataMap.clear();\n this.buildingGroundMap.clear();\n clearTextTexture();\n clearCanvas();\n disposeLoader();\n this.unRegistryEvent();\n }\n}\n", "type Fn = (...arg: any) => any\n\n/**\n * \u4EFB\u52A1\u7BA1\u7406\u5668\n * \u5728\u7C7B\u9500\u6BC1\u7684\u65F6\u5019\uFF0C\u8981\u6E05\u9664\u6240\u6709\u7684\u5F02\u6B65\u5B9A\u65F6\u5668\n */\nexport class Timer { \n tasks = {\n requestAnimation: new Set<number>(),\n timeout: new Set<number>(),\n interval: new Set<number>()\n }\n\n requestAnimationFrame(fn: Fn): number { \n const timer = window.requestAnimationFrame(() => {\n this.tasks.requestAnimation.delete(timer)\n fn()\n })\n this.tasks.requestAnimation.add(timer)\n return timer\n }\n\n cancelAnimationFrame(timer: number) { \n this.tasks.requestAnimation.delete(timer)\n window.cancelAnimationFrame(timer)\n }\n\n setTimeout(fn: Fn, wait: number): number { \n const timer = window.setTimeout(() => {\n this.tasks.timeout.delete(timer)\n fn()\n }, wait)\n this.tasks.timeout.add(timer)\n return timer\n }\n\n clearTimeout(timer: number) {\n this.tasks.timeout.delete(timer)\n window.clearTimeout(timer)\n }\n\n setInterval(fn: Fn, wait: number): number { \n const timer = window.setInterval(() => {\n this.tasks.interval.delete(timer)\n fn()\n }, wait)\n this.tasks.interval.add(timer)\n return timer\n }\n\n clearInterval(timer: number) {\n this.tasks.interval.delete(timer)\n window.clearInterval(timer)\n }\n\n dispose() { \n this.tasks.requestAnimation.forEach(timer => {\n window.cancelAnimationFrame(timer)\n })\n this.tasks.requestAnimation.clear()\n this.tasks.timeout.forEach(timer => {\n window.clearTimeout(timer)\n })\n this.tasks.timeout.clear()\n this.tasks.interval.forEach(timer => {\n window.clearInterval(timer)\n }) \n this.tasks.interval.clear()\n }\n}", "import { Coordinate } from 'src/types'\nimport {\n Scene, WebGLRenderer, OrthographicCamera, HemisphereLight, Shape, \n PCFSoftShadowMap, Group, Color, DirectionalLight, AmbientLight, Path, Vector2\n} from 'three'\nimport { MapControls } from 'three/examples/jsm/controls/MapControls'\n\nexport function initScene() {\n const scene = new Scene()\n scene.background = new Color(0xffffff)\n return scene\n}\n\nexport function initRenderer() {\n const renderer = new WebGLRenderer({\n antialias: true,\n // logarithmicDepthBuffer: true,\n // alpha: false,\n // premultipliedAlpha: false\n })\n renderer.autoClear = true\n renderer.setClearAlpha(1);\n renderer.setClearColor(0xffffff);\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.autoUpdate = true;\n renderer.shadowMap.type = PCFSoftShadowMap;\n return renderer\n}\n\nexport function initCamera(width: number, height: number): OrthographicCamera {\n const camera = new OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, -1000, 5000)\n camera.up.set(0, 0, 1);\n camera.position.set(0, 0, 100);\n camera.lookAt(0, 0, 0);\n return camera\n}\n\nexport function initLight() {\n const lights = new Group()\n // \u534A\u7403\u5149\n // const hemisphereLight = new HemisphereLight(0xffffff, 0xffffff, 1);\n // hemisphereLight.intensity = 1;\n // hemisphereLight.position.set(0, 0, 10);\n // hemisphereLight.up.set(0, 0, 1);\n // lights.add(hemisphereLight)\n const ambientLight = new AmbientLight(0xffffff, 2.6);\n lights.add(ambientLight)\n return lights\n}\n\nexport function initControl(camera: OrthographicCamera, domElement: HTMLCanvasElement) {\n const control = new MapControls(camera, domElement)\n // \u7981\u7528\u963B\u5C3C\n control.enableDamping = false\n // \u8BBE\u7F6E2.5D\n // control.maxPolarAngle = 0\n // control.minPolarAngle = 0\n // \u7981\u7528\u6C34\u5E73\u65CB\u8F6C\n // control.maxAzimuthAngle = 0\n // control.minAzimuthAngle = 0\n control.zoomSpeed = 2\n return control\n}\n\nexport function initShape(path: Coordinate[], holePath: Coordinate[][] = []) { \n const shape = new Shape(path.map(item => new Vector2(...item)));\n if (holePath.length) {\n holePath.forEach(cur => {\n var hole = new Path(cur.map(item => new Vector2(...item)));\n shape.holes.push(hole);\n })\n }\n return shape\n}\n\nexport function initDirectionalLight(color = 0xffffff, intensity = 1) {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.castShadow = true;\n directionalLight.shadow.radius = 8;\n directionalLight.shadow.bias = -0.001;\n directionalLight.shadow.mapSize.set(256, 256);\n directionalLight.shadow.camera.left = -200;\n directionalLight.shadow.camera.right = 200;\n directionalLight.shadow.camera.top = 200;\n directionalLight.shadow.camera.bottom = -200;\n return directionalLight\n}", "import { Object3D, Mesh, Light } from 'three'\n\nexport function dispose(o: Object3D, recursive?: boolean): void {\n if (recursive && o.children && o.children.length) {\n o.children.forEach((child) => {\n dispose(child, recursive);\n });\n }\n if ((o as Mesh).isMesh) {\n const m = o as Mesh;\n if (m.geometry) m.geometry.dispose();\n if (m.material) {\n if (Array.isArray(m.material)) {\n m.material.forEach((mat) => {\n mat.dispose();\n });\n } else {\n m.material.dispose();\n }\n }\n }\n if ((o as Light).isLight) {\n (o as Light).dispose?.()\n }\n}", "export function hasChinese(str:string) {\n return /[\\u4E00-\\u9FA5]+/g.test(str);\n}", "import { hasChinese } from './rules'\nimport { DataTexture, RGBAFormat, LinearFilter } from 'three'\n\nconst urlTextureMap = new Map()\nconst textTextureMap = new Map<string, DataTexture>()\n\nexport function initCanvas() {\n const canvas = document.createElement('canvas');\n canvas.width = 1024;\n canvas.height = 64;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n }) as CanvasRenderingContext2D;\n ctx.font = '54px sans-serif';\n ctx.textBaseline = 'hanging';\n ctx.lineWidth = 12;\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.strokeStyle = 'white';\n return { canvas, ctx }\n}\n\nlet canvas: HTMLCanvasElement;\nlet ctx: CanvasRenderingContext2D;\n\nexport function createCanvas() {\n if (!canvas) {\n const { canvas: c, ctx: t } = initCanvas()\n canvas = c;\n ctx = t;\n }\n}\n\nexport function getTextureByText(text: string): DataTexture {\n if (textTextureMap.has(text)) {\n return textTextureMap.get(text)!\n }\n createCanvas()\n\n ctx.clearRect(0, 0, 1024, 64);\n const y = hasChinese(text) ? 4 : 8;\n ctx.strokeText(text, 2, y);\n ctx.fillText(text, 2, y);\n\n let width = Math.ceil(ctx.measureText(text).width);\n width = width % 2 === 0 ? width : width + 1;\n width += 2;\n const imageData = ctx.getImageData(0, 0, width, 64);\n const texture = new DataTexture(\n Uint8Array.from(imageData.data),\n width,\n 64,\n RGBAFormat,\n );\n texture.flipY = true;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n textTextureMap.set(text, texture);\n return texture;\n}\n\nexport function clearTextTexture() {\n textTextureMap.clear()\n}\n\nexport function clearCanvas() {\n ctx = null as unknown as CanvasRenderingContext2D;\n canvas = null as unknown as HTMLCanvasElement;\n}", "import { Coordinate } from 'src/types';\nimport { Vector3, Camera } from 'three';\nimport { point, featureCollection, center } from '@turf/turf'\n\n/**\n * 3D\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n * @param vector \n * @param camera \n * @param w container\u7684\u5BBD\n * @param h container\u7684\u9AD8\n * @returns \n */\nexport function vector3ToDevice(vector: Vector3, camera: Camera, w: number, h: number) {\n const _vector = vector.clone().project(camera);//\u901A\u8FC7\u4E16\u754C\u5750\u6807\u83B7\u53D6\u8F6C\u6807\u51C6\u8BBE\u5907\u5750\u6807\n const _w = w / 2;\n const _h = h / 2;\n const x = Math.round(_vector.x * _w + _w);//\u6807\u51C6\u8BBE\u5907\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n const y = Math.round(-_vector.y * _h + _h);\n return { x, y }\n}\n\n\n/**\n * \u83B7\u53D6\u591A\u53D8\u5F62\u7684\u4E2D\u5FC3\u70B9\n * @param coordinates \n */\nexport function getCenter(coordinates: Coordinate[]) {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates\n}\n\ntype Position = {\n x: number,\n y: number\n}\nexport function isContain(point: Position, start: Position, end: Position) {\n // \u5224\u65AD point\u662F\u5426\u5728 start \u548Cend\u5F62\u6210\u7684\u77E9\u5F62\u4E2D\n return point.x >= start.x &&\n point.x <= end.x &&\n point.y >= start.y &&\n point.y <= end.y \n}\n\n/**\n * \u83B7\u53D6\u6700\u957F\u8FB9\u7684\u65B9\u5411\n * @param cds \n */\nexport function getLongestSideDir(cds: Coordinate[]) { \n let maxDistance = 0;\n let dir = new Vector3();\n for (let i = 1; i < cds.length; i++) { \n const point_0 = new Vector3(cds[i - 1][0], cds[i - 1][1], 0);\n const point_1 = new Vector3(cds[i][0], cds[i][1], 0);\n const distance = point_1.distanceTo(point_0)\n if (distance > maxDistance) {\n maxDistance = distance;\n dir = point_1.clone().sub(point_0).normalize();\n }\n }\n return dir;\n}", "import { EventDispatcher } from 'three'\n\nexport function proxyOptions\n <T extends Record<string, any>, M extends { [K in keyof T as `change-${Extract<K, string>}`]: { value: T[K] } }>\n (target: T, master: EventDispatcher<M>): T\n{ \n return new Proxy<T>(target, {\n get: (target, p, receiver) => {\n return Reflect.get(target, p, receiver)\n },\n set: (target, p, newValue, receiver) => {\n const oldValue = Reflect.get(target, p, receiver)\n const res = Reflect.set(target, p, newValue, receiver)\n if (oldValue !== newValue) {\n master.dispatchEvent({ type: `change-${p as Extract<keyof T, string>}`, value: newValue } as any)\n }\n return res\n }\n })\n}", "/**\n * \u53EF\u4EE5\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u7684promise\n * @param promise \n * @param timeout \n * @returns \n */\nexport function timeoutPromise<T>(promise: Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve, reject) => {\n setTimeout(() => reject(new Error(\"Promise timeout\")), timeout);\n })\n ]);\n}", "export function createSvgElement(tag: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', tag); \n}\n\n/**\n * \u521B\u5EFAsvg\n */\nexport function createSvg(w: string, h: string) {\n const svg = createSvgElement(\"svg\");\n svg.setAttribute(\"width\", w)\n svg.setAttribute(\"height\", h)\n svg.style.cssText = \"position: absolute; left: 0; top: 0; pointer-events: none;\"\n return svg;\n}\n\n/**\n * \u521B\u5EFA\u5706\u70B9\n * @param radius \n */\nexport function createCircle(radius = \"2\", fill: string) {\n const circle = createSvgElement(\"circle\");\n circle.setAttribute(\"r\", radius)\n circle.setAttribute(\"fill\", fill)\n return circle\n}\n\n/**\n * \u521B\u5EFA\u7EBF\n * @param stroke \n */\nexport function createLine(stroke: string) {\n const line = createSvgElement(\"line\")\n line.setAttribute(\"stroke\", stroke)\n return line\n}\n\n/**\n * \u521B\u5EFA\u77E9\u5F62\n * @param stroke \n * @returns \n */\nexport function createRect(stroke: string, fill: string) {\n const rect = createSvgElement(\"rect\")\n rect.setAttribute(\"stroke\", stroke)\n rect.setAttribute(\"fill\", fill)\n return rect\n}\n\nexport function setCirclePosition(circle: SVGElement, x: number, y: number) {\n circle.setAttribute('cx', `${x}`)\n circle.setAttribute('cy', `${y}`)\n}\n\ntype Position = { x: number; y: number }\n\nexport function setLineStartEnd(line: SVGElement, start?: Position, end?: Position) {\n if (start) { \n line.setAttribute(\"x1\", `${start.x}`)\n line.setAttribute(\"y1\", `${start.y}`)\n }\n if (end) {\n line.setAttribute(\"x2\", `${end.x}`)\n line.setAttribute(\"y2\", `${end.y}`)\n }\n}\n\nexport function setRectPosition(rect: SVGElement, x: number, y: number, w: number, h: number) {\n rect.setAttribute('x', `${x}`)\n rect.setAttribute('y', `${y}`)\n rect.setAttribute('width', `${w}`)\n rect.setAttribute('height', `${h}`)\n}", "export function sleepOnePromise() {\n return Promise.resolve()\n}\n\nexport function sleepOneRf() { \n return new Promise(resolve => {\n requestAnimationFrame(resolve)\n })\n}", "export function strToNumber(str: string) {\n return parseInt(str.replace(\"#\", \"0x\"), 16);\n}\n\n/**\n * \u7ED9\u989C\u8272\u52A0\u4E0A\u900F\u660E\u5EA6\n * @param hexColor\n * @param alpha\n * @returns\n */\nexport function addAlphaToHexColor(hexColor: string, alpha: number) {\n // \u5C0616\u8FDB\u5236\u989C\u8272\u503C\u8F6C\u6362\u4E3ARGB\u6570\u503C\n let r = parseInt(hexColor.substring(1, 3), 16);\n let g = parseInt(hexColor.substring(3, 5), 16);\n let b = parseInt(hexColor.substring(5, 7), 16);\n\n // \u8BA1\u7B97\u65B0\u7684RGB\u6570\u503C\n let newR = Math.round(r * alpha);\n let newG = Math.round(g * alpha);\n let newB = Math.round(b * alpha);\n\n // \u5C06\u65B0\u7684RGB\u6570\u503C\u8F6C\u6362\u4E3A16\u8FDB\u5236\u683C\u5F0F\n let newHexColor = `#${(1 << 24 | newR << 16 | newG << 8 | newB).toString(16).slice(1)}`;\n\n return newHexColor;\n}\n\nexport function darkenColor(hexColor: string, factor = 0.85) {\n let r: number;\n let g: number;\n let b: number;\n if (hexColor.startsWith(\"#\")) {\n // \u5C06\u5341\u516D\u8FDB\u5236\u989C\u8272\u8F6C\u6362\u4E3ARGB\n r = parseInt(hexColor.substring(1, 3), 16);\n g = parseInt(hexColor.substring(3, 5), 16);\n b = parseInt(hexColor.substring(5, 7), 16);\n } else { \n // rgb\u683C\u5F0F\u7684\n let numbers = hexColor.slice(4, -1).split(\",\");\n r = parseInt(numbers[0].trim())\n g = parseInt(numbers[1].trim())\n b = parseInt(numbers[2].trim())\n }\n // \u8BA1\u7B97\u6697\u70B9\u989C\u8272\n r = Math.min(Math.floor(r * factor), 255);\n g = Math.min(Math.floor(g * factor), 255);\n b = Math.min(Math.floor(b * factor), 255);\n\n\n // \u5C06RGB\u989C\u8272\u8F6C\u6362\u56DE\u5341\u516D\u8FDB\u5236\n let darkHexColor = \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n\n return darkHexColor;\n}\n", "import { Object3D, Scene, Mesh, MeshBasicMaterial } from 'three'\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\n\nfunction createLoader() { \n const loader = new GLTFLoader()\n return loader\n}\n\nlet loader: GLTFLoader | null = null\nlet modelMap = new Map<string, Promise<GLTF>>()\n\n/**\n * \u52A0\u8F7D\u6A21\u578B\n * @param url \n * @returns \n */\nexport function loadModel(url: string): Promise<GLTF> { \n if (modelMap.has(url)) {\n const gltf = modelMap.get(url)!.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n }\n if (!loader) {\n loader = createLoader()\n }\n const p = new Promise<GLTF>((resolve, reject) => { \n loader!.load(url, gltf => {\n resolve(gltf)\n }, undefined, reject)\n })\n modelMap.set(url, p)\n return p.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n}\n\nexport function disposeLoader() { \n loader = null\n modelMap.clear()\n}", "export const isMac = navigator.userAgent.toUpperCase().indexOf('MAC') >= 0;\n", "import { isMac } from \"./os\";\n\nexport function isControl(key: string) { \n if (isMac) {\n return key === \"Meta\"\n }\n return key === \"Control\"\n}", "import { MapControls } from \"three/examples/jsm/controls/MapControls\";\nimport {\n Timer,\n initCamera,\n initRenderer,\n initScene,\n initLight,\n initControl,\n dispose,\n vector3ToDevice,\n timeoutPromise,\n} from \"./utils\";\nimport {\n EventDispatcher,\n OrthographicCamera,\n Light,\n Box2,\n Vector3,\n Vector2,\n Raycaster,\n Object3D,\n Box3,\n Color,\n AmbientLight,\n} from \"three\";\nimport { Graphic, Poi, Floor } from \"./elements\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\nimport { Selection } from \"./operations/selection/selection\";\nimport { HoverHelper } from \"./operations\";\nimport { MaterialFactory } from \"./factory\";\nimport { CameraBound } from \"./utils/camera-bound\";\n\nexport interface ContextEventMap {\n update: {};\n \"graphic-click\": {\n graphics: Graphic[];\n position: Vector3 | null\n };\n \"poi-click\": {\n pois: Poi[];\n };\n 'pointer-level': {};\n 'pointer-over': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n };\n 'pointer-move': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n },\n 'change-ratio': {\n px: number;\n },\n \"select-graphic\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n },\n \"hover\": {\n graphics: Graphic[];\n },\n \"control-change\": {},\n \"resize\": {\n width: number;\n height: number;\n }\n}\n\nexport class Context extends EventDispatcher<ContextEventMap> {\n scene = initScene();\n\n renderer = initRenderer();\n\n camera!: OrthographicCamera;\n\n control!: MapControls;\n\n lights = initLight();\n\n // \u7BA1\u7406\u4EFB\u52A1\uFF0C\u9632\u6B62\u5185\u5B58\u6CC4\u6F0F\n timer = new Timer();\n \n tweenGroup = new TweenGroup();\n \n currentFloor?: Floor;\n\n selection: Selection;\n\n hoverHelper: HoverHelper;\n \n private basicRatio?: number; // zoom=1\u7684\u65F6\u5019\uFF0C100M\u5BF9\u5E94\u7684\u50CF\u7D20\u4E2A\u6570\n\n public materialFactory!: MaterialFactory;\n\n cameraBound!: CameraBound;\n\n clientSize = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n }\n\n constructor(public container: HTMLElement, public config: Config) {\n super();\n this.container.style.position = \"relative\";\n this.container.style.overflow = \"hidden\";\n this.init();\n this.selection = new Selection(this);\n this.hoverHelper = new HoverHelper(this);\n this.materialFactory = new MaterialFactory(this);\n this.resizeClientSize()\n this.registryEvent();\n }\n\n resizeClientSize() { \n const { x, y, width, height } = this.container.getBoundingClientRect()\n this.clientSize = {\n width: width || this.container.clientWidth,\n height: height || this.container.clientHeight,\n x,\n y\n }\n }\n\n init() {\n const { clientWidth: w, clientHeight: h } = this.container;\n this.camera = initCamera(w, h);\n this.renderer.setSize(w, h);\n this.control = initControl(this.camera, this.renderer.domElement);\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.container.appendChild(this.renderer.domElement);\n this.scene.add(this.lights);\n this.basicRatio = this.getRatio()\n // \u65CB\u8F6C\u89C6\u89D2\u7684\u65F6\u5019\uFF0C\u9690\u85CF\u548C\u663E\u793A\u9634\u5F71\n this.control.addEventListener(\"change\", () => {\n const polarAngle = this.control.getPolarAngle();\n this.currentFloor?.setShadowOpacity(polarAngle / this.config.control.maxPolar)\n this.dispatchEvent({ type: 'change-ratio', px: (this.basicRatio || 0) * this.camera.zoom })\n this.dispatchEvent({ type: 'control-change' })\n });\n this.cameraBound = new CameraBound(this);\n }\n\n /**\n * \u83B7\u53D6\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u50CF\u7D20\u6570\n */\n getRatio(point1 = new Vector3(0, 0, 0), point2 = new Vector3(100, 0, 0)) {\n const { clientWidth, clientHeight } = this.container\n const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight)\n const device2 = vector3ToDevice(point2, this.camera, clientWidth, clientHeight)\n return Math.ceil(Math.sqrt((device2.x - device1.x) ** 2 + (device2.y - device1.y) ** 2))\n }\n\n changeAmbientLightColor(color: string | number) {\n this.lights.children.forEach((item) => {\n if (item instanceof AmbientLight) {\n item.color = new Color(color);\n }\n });\n }\n\n switchFloor(floor: Floor) {\n if (this.currentFloor) {\n this.scene.remove(this.currentFloor)\n this.currentFloor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.getCenter()\n if (position) {\n this.lights.position.x = position.x\n this.lights.position.y = position.y\n }\n }\n\n onWindowResize = () => {\n const { container, camera, renderer } = this;\n let { clientWidth: w, clientHeight: h } = container;\n w = Math.max(1, w);\n h = Math.max(1, h);\n camera.left = -w / 2;\n camera.right = w / 2;\n camera.top = h / 2;\n camera.bottom = -h / 2;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n this.resizeClientSize()\n this.dispatchEvent({ type:'resize', width: w, height: h })\n };\n\n onClick = (e: MouseEvent) => {\n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n if (graphics.length) {\n this.dispatchEvent({\n type: \"graphic-click\",\n graphics: graphics,\n position\n });\n }\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY);\n if (pois.length) {\n this.dispatchEvent({ type: \"poi-click\", pois: pois as Poi[] });\n }\n };\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684graphic\n * @param x\n * @param y\n * @returns\n */\n getGraphicsByDeviceXy(x: number, y: number): { graphics: Graphic[], position: Vector3 | null } {\n const point = new Vector2();\n point.x = (x / this.clientSize.width) * 2 - 1;\n point.y = (y / this.clientSize.height) * -2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(point, this.camera);\n const res = this.currentFloor?.graphicLayer.getGraphicByRaycaster(raycaster)\n return res || { graphics: [], position: null }\n }\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684poi\n * @param x\n * @param y\n * @returns\n */\n getPoisByDeviceXy(x: number, y: number) {\n const pois = this.currentFloor?.poiLayer.getPoiByDeviceXy(x, y)\n return pois || [];\n }\n\n onPointerover = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY) as Poi[];\n this.dispatchEvent({ type: 'pointer-over', e, graphics, pois, position })\n }\n\n onPointermove = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY)\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY) as Poi[];\n // console.log(graphics, position, e.offsetX, e.offsetY)\n this.dispatchEvent({ type: 'pointer-move', e, graphics, pois, position })\n }\n\n onPointerleave = () => { \n this.dispatchEvent({ type: \"pointer-level\" })\n }\n\n onSelectionSelect = ({ graphics, isMultipleSelect }: {graphics: Graphic[], isMultipleSelect: boolean}) => { \n this.dispatchEvent({ type: \"select-graphic\", graphics, isMultipleSelect })\n }\n\n onHoverChange = ({ graphics }: { graphics: Graphic[] }) => { \n this.dispatchEvent({ type: \"hover\", graphics })\n }\n\n registryEvent() {\n window.addEventListener(\"resize\", this.onWindowResize);\n this.container.addEventListener(\"click\", this.onClick);\n this.container.addEventListener(\"pointerover\", this.onPointerover)\n this.container.addEventListener(\"pointermove\", this.onPointermove)\n this.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.addEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.addEventListener(\"hover-change\", this.onHoverChange)\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n this.container.removeEventListener(\"click\", this.onClick);\n this.container.removeEventListener(\"pointerover\", this.onPointerover)\n this.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.removeEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.removeEventListener(\"hover-change\", this.onHoverChange)\n }\n\n /**\n * \u8BBE\u7F6E\u7EB5\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param polar \u5F27\u5EA6\n */\n public setPolarAngle(polar: number, duration = 500) {\n if (duration === 0) {\n this.control.maxPolarAngle = polar;\n this.control.minPolarAngle = polar;\n this.control.update();\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n return Promise.resolve();\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { polar: this.control.getPolarAngle() };\n const end = { polar };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxPolarAngle = start.polar;\n this.control.minPolarAngle = start.polar;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n /**\n * \u8BBE\u7F6E\u6A2A\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param azimuthal \u5F27\u5EA6\n */\n public setAzimuthalAngle(azimuthal: number, duration = 500) {\n if (duration === 0) {\n this.control.maxAzimuthAngle = azimuthal;\n this.control.minAzimuthAngle = azimuthal;\n this.control.update();\n this.control.maxAzimuthAngle = Infinity;\n this.control.minAzimuthAngle = Infinity;\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { azimuthal: this.control.getAzimuthalAngle() };\n const end = { azimuthal };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxAzimuthAngle = start.azimuthal;\n this.control.minAzimuthAngle = start.azimuthal;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.control.maxAzimuthAngle = Infinity;\n this.control.minAzimuthAngle = Infinity;\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getCameraLookAt() {\n return new Vector3().subVectors(this.control.target, this.camera.position);\n }\n\n /**\n * \u6309\u7167\u4E00\u4E2A\u4E2D\u5FC3\u70B9\u8BBE\u7F6E\u76F8\u673A\u7684\u653E\u5927\u7F29\u5C0F\n * @param zoom\n * @param center\n * @returns\n */\n public setZoom(zoom: number, center: Vector3, duration = 500) {\n const lookAtVector = this.getCameraLookAt();\n const start = {\n zoom: this.camera.zoom,\n target: this.control.target.clone(),\n };\n if (!duration) { \n this.camera.position.copy(center.clone().sub(lookAtVector));\n this.control.target.copy(center);\n this.camera.zoom = zoom;\n this.control.update()\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const tween = new Tween(start, this.tweenGroup)\n .to(\n {\n zoom,\n target: center,\n },\n duration\n )\n .onUpdate(() => {\n this.camera.position.copy(start.target.clone().sub(lookAtVector));\n this.control.target.copy(start.target);\n this.camera.zoom = start.zoom;\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.control.enabled = true;\n resolve(true)\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getFitCameraToObjectZoom(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) { \n const [top, right, bottom, left] = padding;\n const { clientSize: { width, height } } = this;\n const polar = this.control.getPolarAngle()\n if (force2DView) {\n // \u83B7\u53D6\u57282D\u89C6\u56FE\u4E0B\u7684\u5927\u5C0F\n this.setPolarAngle(0, 0)\n }\n // \u83B7\u53D6\u7269\u4F53\u7684\u4E09\u7EF4\u76D2\u5B50\u5750\u6807\n const boundingBox = new Box3().setFromObject(object);\n this.setPolarAngle(polar, 0)\n const { max, min } = boundingBox;\n // \u9700\u8981\u83B7\u53D6\u5230box\u76844\u4E2A\u70B9\u7684\u5750\u6807\n const leftTop = new Vector3(min.x, max.y, min.z);\n const rightTop = new Vector3(max.x, max.y, min.z);\n const rightBottom = new Vector3(max.x, min.y, max.z);\n const leftBottom = new Vector3(min.x, min.y, max.z);\n // \u5750\u6807\u8F6C\u6210\u5C4F\u5E55\u5750\u6807\u5E76\u8BA1\u7B97\u51FA\u5360\u7528\u5C4F\u5E55\u5750\u6807\u7684\u5927\u5C0F\n const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);\n const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);\n const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);\n const rightBottom2d = vector3ToDevice(rightBottom, this.camera, width, height);\n const boundingBox2d = new Box2().setFromPoints([\n new Vector2(leftTop2d.x, leftTop2d.y),\n new Vector2(rightTop2d.x, rightTop2d.y),\n new Vector2(leftBottom2d.x, leftBottom2d.y),\n new Vector2(rightBottom2d.x, rightBottom2d.y),\n ]);\n const size = boundingBox2d.getSize(new Vector2());\n\n // \u8BA1\u7B97\u5728\u5C4F\u5E55\u4E0Ax,y\u65B9\u5411\u4E0A\u9700\u8981\u8C03\u6574\u7684\u500D\u6570\n const xScale = (width - right - left) / size.x;\n const yScale = (height - top - bottom) / size.y;\n const scale = Math.min(xScale, yScale);\n const center = new Vector3((max.x + min.x) / 2, (max.y + min.y) / 2, 0);\n return { zoom: scale * this.camera.zoom, center };\n }\n\n /**\n * \u653E\u5927\u76F8\u673A\u5230\u7269\u4F53\u5360\u5168\u5C4F\n * @param object\n * @param padding\n * @param duration\n * @returns\n */\n fitCameraToObject(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) {\n const { zoom, center } = this.getFitCameraToObjectZoom(object, padding, duration, force2DView)\n return this.setZoom(zoom, center, duration);\n }\n\n getFitCameraToGroundZoom(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) {\n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.getFitCameraToObjectZoom(this.currentFloor.groundUpper, padding, duration, force2DView).zoom;\n }\n }\n\n fitCameraToGround(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) { \n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.fitCameraToObject(this.currentFloor.groundUpper, padding, duration, force2DView);\n } else {\n return Promise.resolve(false);\n }\n }\n\n /**\n * \u4FEE\u6539\u76F8\u673A\u4F4D\u7F6E\n * @param position \u4FEE\u6539\u540E\u7684\u76F8\u673A\u7684\u4F4D\u7F6E\n * @param duration \u52A8\u753B\u6301\u7EED\u65F6\u95F4\n */\n public setCameraPosition(position: Vector3, duration: number) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = this.camera.position.clone();\n const lookAtVector = this.getCameraLookAt();\n const tween = new Tween(start, this.tweenGroup)\n .to(position, duration)\n .onUpdate(() => {\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(start.clone());\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(position.clone());\n this.control.update();\n this.control.enabled = true;\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n render() {\n this.renderer.render(this.scene, this.camera);\n this.dispatchEvent({ type: \"update\" });\n this.timer.requestAnimationFrame(() => {\n this.render();\n });\n this.tweenGroup.update();\n }\n\n dispose() {\n this.cameraBound.dispose()\n this.selection.dispose()\n this.hoverHelper.dispose()\n this.tweenGroup.getAll().forEach((item) => item.stop());\n this.tweenGroup.removeAll();\n this.unRegistryEvent();\n this.container.removeChild(this.renderer.domElement);\n this.timer.dispose();\n this.renderer.dispose();\n (this.lights.children as Light[]).forEach((light: Light) =>\n light.dispose()\n );\n this.materialFactory.dispose();\n dispose(this.scene);\n }\n}\n", "import { EventDispatcher } from \"three\";\nimport { Context } from \"../../context\";\nimport { Graphic, Poi } from \"../../elements\";\nimport { BoxSelection } from \"./box-selection\";\nimport { isControl, isMac } from \"../../utils\";\n\ninterface SelectionEventMap {\n \"select\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n }\n}\n\nexport class Selection extends EventDispatcher<SelectionEventMap> {\n private _list = new Set<Graphic>()\n\n private boxSelection: BoxSelection;\n private prevPanStatus?: boolean;\n private prevRotateStatus?: boolean;\n private downPoint: { x: number, y: number } | null = null\n\n private isMultipleSelect = false;\n\n constructor(private context: Context) {\n super()\n this.boxSelection = new BoxSelection(context)\n this.boxSelection.setEnable(false)\n this.registryEvent()\n }\n\n get list() {\n return this._list\n }\n\n enableBoxSelection() { \n if (this.isMultipleSelect) { return }\n this.isMultipleSelect = true;\n this.boxSelection.setEnable(true)\n this.prevPanStatus = this.context.control.enablePan\n this.prevRotateStatus = this.context.control.enableRotate\n this.context.control.enablePan = false\n this.context.control.enableRotate = false\n }\n\n disableBoxSelection() { \n if (this.isMultipleSelect) { \n this.isMultipleSelect = false;\n this.boxSelection.setEnable(false)\n this.context.control.enablePan = !!this.prevPanStatus\n this.context.control.enableRotate = !!this.prevRotateStatus\n }\n }\n\n onPointerDown = (e: PointerEvent) => {\n this.downPoint = { x: e.offsetX, y: e.offsetY }\n }\n\n onPointerUp = (e: PointerEvent) => {\n if (!this.downPoint) { return }\n const { offsetX, offsetY } = e\n const { x, y } = this.downPoint\n if (Math.sqrt((x - offsetX) ** 2 + (y - offsetY) ** 2) > 3) {\n return\n }\n const { graphics } = this.context.getGraphicsByDeviceXy(offsetX, offsetY)\n const graphicIdSet = new Set(graphics.map(item => item.options.id))\n const pois = this.context.getPoisByDeviceXy(offsetX, offsetY) as Poi[];\n pois.forEach(item => { \n if (!graphicIdSet.has(item.options.id)) {\n const graphic = this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id) || null\n if (graphic && graphic.options.geometry.type === 'point') { \n graphics.push(graphic)\n graphicIdSet.add(item.options.id)\n }\n }\n })\n if (!(isMac ? e.metaKey : e.ctrlKey)) {\n this._list.clear()\n }\n graphics.forEach(item => this._list.add(item))\n this.selectEnd()\n this.downPoint = null\n }\n\n onPointerOut = (e: PointerEvent) => { \n this.disableBoxSelection()\n }\n\n onKeyDown = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.enableBoxSelection()\n }\n }\n\n onKeyUp = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.disableBoxSelection()\n }\n }\n\n onBoxSelected = ({ list }: { list: Graphic[] }) => { \n this._list.clear()\n list.forEach(item => {\n this._list.add(item)\n })\n this.selectEnd()\n }\n\n selectEnd() {\n this.dispatchEvent({type: \"select\", graphics: [...this._list], isMultipleSelect: this.isMultipleSelect})\n }\n\n registryEvent() {\n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.addEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.addEventListener(\"pointercancel\", this.onPointerOut)\n window.addEventListener(\"keydown\", this.onKeyDown)\n window.addEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.addEventListener(\"selected\", this.onBoxSelected)\n }\n\n unRegistryEvent() {\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.removeEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.removeEventListener(\"pointercancel\", this.onPointerOut)\n window.removeEventListener(\"keydown\", this.onKeyDown)\n window.removeEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.removeEventListener(\"selected\", this.onBoxSelected)\n }\n\n clear() {\n this._list.clear()\n }\n\n remove(graphic: Graphic) { \n this._list.delete(graphic)\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import {\n Object3D,\n ExtrudeGeometry,\n Mesh,\n Box3,\n MeshBasicMaterial,\n Raycaster,\n Object3DEventMap,\n Vector3,\n BufferGeometry,\n LineBasicMaterial,\n LineSegments,\n Float32BufferAttribute,\n ShaderMaterial,\n DoubleSide,\n Color,\n Ray,\n BoxGeometry,\n Line,\n Box3Helper,\n } from \"three\";\nimport { initShape, proxyOptions, darkenColor } from \"../utils\";\nimport { GraphicOptions, PolygonGeometry } from \"src/types\";\nimport { Context } from \"../context\";\n\n// \u95E8\u7684\u7C7B\u578B\nconst DoorType = {\n single: \"\u5355\u5F00\u95E8\",\n double: \"\u53CC\u5F00\u95E8\",\n move: \"\u79FB\u52A8\u95E8\",\n};\n\n// \u95E8\u7684\u6750\u8D28\nconst DoorMaterial = {\n wood: \"\u6728\u95E8\",\n glass: \"\u73BB\u7483\u95E8\",\n aluminum: \"\u94DD\u5408\u91D1\u95E8\",\n};\n\n// \u5355\u4E2A\u95E8\u7684\u914D\u7F6E\nexport interface Door {\n // \u540D\u79F0\n name: string;\n id: string;\n width: number;\n // \u5185\u5F00/\u5916\u5F00\n open: boolean;\n // \u7C7B\u578B \u5355\u5F00\u95E8 \u53CC\u5F00\u95E8 \u79FB\u52A8\u95E8\n type: keyof typeof DoorType;\n // \u6750\u8D28\n material: keyof typeof DoorMaterial;\n}\n\nexport type GraphicOptionsParam = Partial<GraphicOptions>;\n\ntype GraphicEventMap = {\n [K in keyof GraphicOptions as `change-${K}`]: { value: GraphicOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: GraphicOptions = {\n id: \"\", // \u56FE\u5F62id\n height: 0.1, // \u56FE\u5F62\u9AD8\u5EA6\n airHeight: 0, // \u60AC\u7A7A\u9AD8\u5EA6\n area: 0, // \u9762\u79EF\n group: \"\", // \u5206\u7EC4\n fillColor: \"#EFF4FB\", // \u989C\u8272\n strokeColor: \"#ffffff\", // \u8FB9\u6846\n fillOpacity: 1, // \u900F\u660E\u5EA6\n strokeOpacity: 1, // \u63CF\u8FB9\u900F\u660E\u5EA6\n strokeWidth: 1, // \u63CF\u8FB9\u5BBD\u5EA6\n doors: [], // \u95E8\u914D\u7F6E\n locked: false,\n visible: true,\n geometry: {\n type: \"polygon\",\n cds: [],\n coords: [],\n curveCpt: [],\n curveIndex: [],\n },\n layerType: \"\",\n zIndex: 0,\n stroke: true,\n deltaHeight: 0,\n userData: {},\n gradualColor: [],\n renderType: \"single\",\n colorFactor: 0.9\n};\n\nexport class Graphic extends Object3D<GraphicEventMap> {\n private geometry!: ExtrudeGeometry;\n\n private material!: MeshBasicMaterial | MeshBasicMaterial[] | ShaderMaterial[] | ShaderMaterial;\n\n public mesh!: Mesh;\n\n private line!: LineSegments;\n\n private lineMaterial?: LineBasicMaterial;\n\n private lineGeometry?: BufferGeometry;\n\n public options: GraphicOptions;\n\n constructor(\n private context: Context,\n options: GraphicOptionsParam\n ) {\n super();\n this.options = proxyOptions<GraphicOptions, GraphicEventMap>(\n { ...defaultOptions, ...options },\n this\n );\n if (this.options.geometry.type === \"point\") {\n const [x, y] = this.options.geometry.coords;\n this.position.set(x, y, this.options.height + this.options.airHeight);\n return this;\n }\n this.init();\n this.visible = this.options.visible;\n this.addEventListener(\"change-fillColor\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-fillOpacity\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-height\", ({ value }) => {\n this.dispose();\n this.init();\n });\n this.addEventListener(\"change-strokeColor\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n this.addEventListener(\"change-strokeOpacity\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n // this.addEventListener('change-strokeWidth', ({ value }) => {\n // this.initLineMaterial();\n // this.createBorder();\n // })\n this.addEventListener(\"change-airHeight\", ({ value }) => {\n this.position.z = value;\n });\n this.addEventListener(\"change-visible\", ({ value }) => {\n this.visible = value;\n });\n this.addEventListener(\"change-stroke\", ({ value }) => {\n if (value) {\n if (this.line) {\n return;\n }\n this.initLineGeometry();\n this.initLineMaterial();\n this.createBorder();\n } else if (this.line) {\n this.remove(this.line);\n this.lineGeometry?.dispose();\n }\n });\n this.addEventListener(\"change-renderType\", () => {\n this.initMaterial();\n this.initMesh();\n })\n this.addEventListener(\"change-gradualColor\", () => {\n this.initMaterial();\n this.initMesh();\n })\n }\n\n getCenter() {\n if (this.options.geometry.type === \"point\") {\n return this.position.clone();\n }\n const center = new Vector3();\n const box = new Box3();\n box.setFromObject(this);\n box.getCenter(center);\n return center;\n }\n\n getSize() {\n if (this.options.geometry.type === \"point\") {\n return new Vector3(0, 0, 0);\n }\n const box = new Box3();\n const size = new Vector3();\n box.setFromObject(this);\n box.getSize(size);\n return size;\n }\n\n getPosition() {\n const center = this.getCenter();\n center.setZ(center.z + this.options.height / 2);\n return center;\n }\n\n init() {\n this.geometry = this.initGeometry();\n this.initMaterial();\n this.initMesh();\n this.mesh.position.z = this.options.airHeight + this.options.deltaHeight;\n if (this.options.stroke) {\n // \u521B\u5EFA\u8FB9\u6846\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n }\n\n initGeometry() {\n const shape = initShape(\n (this.options.geometry as PolygonGeometry).coords[0],\n (this.options.geometry as PolygonGeometry).coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: this.options.height,\n curveSegments: 4,\n });\n return geometry;\n }\n\n initSingleMaterial() {\n const material = this.context.materialFactory.createMeshBasicMaterial({\n color: this.options.fillColor,\n opacity: this.options.fillOpacity,\n });\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n const material1 = this.context.materialFactory.createMeshBasicMaterial({\n color: darkenColor(this.options.fillColor),\n opacity: this.options.fillOpacity,\n });\n this.material = [material, material1];\n return [material, material1];\n }\n\n // createMesh(pos: Vector3, color = 0xff0000) { \n // const geometry = new BoxGeometry(1, 1, 1)\n // const material = new MeshBasicMaterial({ color })\n // const mesh = new Mesh(geometry, material)\n // mesh.position.copy(pos)\n // this.context.scene.add(mesh)\n // }\n\n // createLine(points: Vector3[], color = 0xff0000) {\n // const material = new LineBasicMaterial({\n // color: color\n // });\n // const geometry = new BufferGeometry().setFromPoints(points);\n // const line = new Line( geometry, material );\n // this.context.scene.add(line)\n // }\n\n getMaxAndMin(pos: Vector3, dir: Vector3) {\n const box = new Box3().setFromObject(this)\n const minOrigin = pos.clone().add(dir.clone().multiplyScalar(1000))\n const raycaster = new Ray(minOrigin, dir.clone().multiplyScalar(-1));\n const min = new Vector3()\n raycaster.intersectBox(box, min);\n const maxOrigin = pos.clone().add(dir.clone().multiplyScalar(-1000))\n const raycaster2 = new Ray(maxOrigin, dir.clone());\n const max = new Vector3()\n raycaster2.intersectBox(box, max);\n return {\n max, min\n }\n }\n\n initGradualMaterial() { \n const { max, min } = new Box3().setFromObject(this)\n const _max = max.clone().sub(min)\n const maxValue = Math.max(_max.x, _max.y, _max.z) / 2\n const pos = this.getPosition();\n const dir = new Vector3(-1.0, 0.2, 0.0).normalize()\n const { max: __max, min: _min } = this.getMaxAndMin(pos, dir)\n\n const material = this.context.materialFactory.createShaderMaterial({\n gradualColor: this.options.gradualColor,\n center: this.getPosition(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 0.0),\n max: __max,\n min: _min\n })\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n\n const center = this.getCenter();\n const dir2 = new Vector3(-1.0, 0.2, 1.0).normalize()\n const { max: ___max, min: __min } = this.getMaxAndMin(center, dir2)\n const material1 = this.context.materialFactory.createShaderMaterial({\n gradualColor: [darkenColor(this.options.gradualColor[0], this.options.colorFactor), darkenColor(this.options.gradualColor[1], this.options.colorFactor)],\n center: this.getCenter(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 1.0),\n max: ___max,\n min: __min\n })\n\n this.material = [material, material1];\n return [material, material1];\n }\n\n initMaterial() {\n if (this.options.renderType === 'gradual') { \n return this.initGradualMaterial()\n } else {\n return this.initSingleMaterial()\n }\n }\n\n initLineMaterial() {\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: this.options.strokeColor,\n opacity: this.options.strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n initMesh() {\n if (this.mesh) {\n this.remove(this.mesh);\n }\n this.mesh = new Mesh(this.geometry, this.material);\n this.add(this.mesh);\n }\n\n getBorderPoints() {\n const points = [];\n const height = this.options.height + this.options.deltaHeight;\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = this.options.geometry as PolygonGeometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], height));\n points.push(new Vector3(next[0], next[1], height));\n }\n }\n return points;\n }\n\n initLineGeometry() {\n if (this.lineGeometry) {\n this.lineGeometry.dispose();\n }\n const points = this.getBorderPoints();\n const lineGeometry = new BufferGeometry().setFromPoints(points);\n this.lineGeometry = lineGeometry;\n }\n\n createBorder() {\n if (this.line) {\n this.remove(this.line);\n }\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n line.position.z = this.options.airHeight + 0.01;\n this.line = line;\n this.add(line);\n return line;\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) {\n return false;\n }\n if (this.options.geometry.type === \"point\") {\n return false;\n }\n const intersects = raycaster.intersectObject(this.mesh);\n if (intersects[0]) {\n const { point: position, distance } = intersects[0];\n return { position, distance };\n }\n return false;\n }\n\n dispose() {\n this.geometry.dispose();\n this.line?.geometry.dispose();\n this.clear();\n }\n}\n", "import {\n Object3D, PlaneGeometry, DirectionalLight,\n Mesh, MeshStandardMaterial, ShadowMaterial, Color, Vector3, DoubleSide\n} from 'three';\nimport { dispose, initDirectionalLight } from '../utils'\n\nexport class Shadow extends Object3D {\n\n private directionalLight: DirectionalLight\n\n private plane!: Mesh\n\n public basicOpacity = 0.07\n\n constructor() {\n super()\n this.directionalLight = this.initLight()\n this.initPlane()\n }\n\n // \u521B\u5EFA\u5149\u6E90\n initLight() { \n const directionalLight = initDirectionalLight(0xffffff, 0.5)\n directionalLight.position.set(0, 0, 100);\n this.add(directionalLight);\n return directionalLight\n }\n \n changeLightCamera(size: Vector3) {\n const x = size.x\n const y = size.y\n this.directionalLight.shadow.camera.left = -x;\n this.directionalLight.shadow.camera.right = x;\n this.directionalLight.shadow.camera.top = y;\n this.directionalLight.shadow.camera.bottom = -y;\n this.directionalLight.shadow.camera.near = 0.5;\n this.directionalLight.shadow.camera.far = Math.max(x, y);\n }\n\n changeLightColor(color: number | string) {\n this.directionalLight.color = new Color(color)\n }\n\n setPosition(position: Vector3) {\n this.position.copy(position)\n this.directionalLight.position.set(-position.x / 2, -position.y / 2, 100)\n }\n\n // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 1000, height = 1000) { \n const geometry = new PlaneGeometry(width, height)\n const material = new ShadowMaterial({\n transparent: true,\n opacity: 0,\n side: DoubleSide\n })\n const mesh = new Mesh(geometry, material)\n mesh.receiveShadow = true\n mesh.position.z = -10\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Object3D) {\n this.directionalLight.target = target\n }\n\n transformOpacity(opacity: number): number {\n return opacity * this.basicOpacity\n }\n\n setOpacity(opacity: number) { \n (this.plane.material as MeshStandardMaterial).opacity = this.transformOpacity(opacity);\n }\n \n dispose() {\n dispose(this, true)\n }\n\n}", "import { proxyOptions, sleepOnePromise } from '../utils';\nimport { EventDispatcher, Object3D, Object3DEventMap, Vector3 } from 'three';\nimport { Context } from '../context'\nimport { Overlay } from './overlay';\n\nexport interface PoiOptions {\n texts: { text: string, styles?: { [key: string]: string }; }[];\n icon?: string;\n icon_size?: [number, number]; // \u5BBD \u9AD8\n icon_position?: 'top' | 'bottom';\n level: number; // \u6E32\u67D3\u4F18\u5148\u7EA7\n collision_enable: boolean; // \u662F\u5426\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\n opacity: number;\n id: string; // poi\u7684key\n position: { x: number; y: number; z: number };\n icon_opacity: number;\n icon_border: { color: string, width: number };\n background: string;\n collision_hide_icon: boolean;\n built_in: boolean; // \u662F\u5426\u662F\u5185\u7F6E\u7684poi\n box_only_icon: boolean; // \u5305\u56F4\u76D2\u662F\u4E0D\u662F\u53EA\u5305\u542B\u56FE\u6807\n}\n\ntype PoiEventMap = {\n [K in keyof PoiOptions as `change-${K}`]: { value: PoiOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: PoiOptions = {\n texts: [{ text: \"\" }],\n level: 1,\n icon_position: 'bottom',\n collision_enable: true,\n opacity: 1,\n id: \"\",\n position: { x: 0, y: 0, z: 0 },\n icon_opacity: 1,\n icon_border: { color: \"#586EE0\", width: 0 },\n background: \"\",\n collision_hide_icon: true,\n built_in: false,\n box_only_icon: false\n}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends EventDispatcher<PoiEventMap> {\n\n private div!: HTMLDivElement\n\n private textDiv!: HTMLDivElement\n\n private img?: HTMLImageElement\n\n private overlay: Overlay\n\n public options: PoiOptions\n\n public visible = true\n\n size = { width: 0, height: 0 }\n\n position = new Vector3()\n\n userData = {};\n\n showTextStatus = true\n\n constructor(private context: Context, options: PoiOptionsParam) {\n super()\n this.options = proxyOptions<PoiOptions, PoiEventMap>({...defaultOptions, ...options}, this)\n this.position.set(options.position?.x || 0, options.position?.y || 0, options.position?.z || 0)\n this.overlay = new Overlay(this.context, { autoUpdate: false })\n this.overlay.addEventListener(\"update-position\", ({ x, y, height }) => { \n this.overlay.div.style.transform = `translate3d(calc(${x}px - 50%), calc(${-height + y}px - ${this.options.icon ? '100%' : '50%'}), 0)`;\n })\n this.overlay.bindElement(this as unknown as Object3D)\n this.registryEvent()\n this.initDiv()\n this.addEventListener(\"change-icon\", ({ value }) => {\n if (value) {\n if (!this.img) {\n this.addIcon()\n this._changePosition()\n } else {\n this.img.setAttribute('src', value)\n }\n } else {\n this.img && this.div.removeChild(this.img)\n this.img = undefined\n this._changePosition()\n this.resetSize()\n }\n })\n this.addEventListener(\"change-texts\", ({ value }) => {\n this.div.removeChild(this.textDiv)\n this.addText()\n this.resetSize()\n })\n this.addEventListener(\"change-opacity\", ({ value }) => {\n this.overlay.setOpacity(value)\n })\n this.addEventListener(\"change-icon_size\", ({ value }) => {\n if (this.img) {\n this.img.style.width = `${value?.[0] || 32}px`\n this.img.style.height = `${value?.[1] || 32}px`\n this.resetSize()\n }\n })\n this.addEventListener(\"change-icon_opacity\", ({ value }) => {\n if (this.img) {\n this.img.style.opacity = `${value}`\n }\n })\n this.addEventListener(\"change-icon_border\", ({ value }) => {\n if (this.img) {\n this.img.style.border = `${value.width}px solid ${value.color}`\n }\n })\n this.addEventListener(\"change-background\", ({ value }) => {\n this.div.style.background = value;\n })\n }\n\n get withinDisplayRange() {\n return this.overlay.withinDisplayRange\n }\n\n async resetSize() {\n await sleepOnePromise()\n if (this.options.box_only_icon) {\n if (!this.img) { return }\n const { width, height } = this.img.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n } else {\n const { width, height } = this.div.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n }\n }\n\n renderHelperBox() {\n // let div = this.helperDiv\n // if (!div) {\n // div = document.createElement('div')\n // this.context.container.appendChild(div)\n // }\n // const box = this.getBox()\n // div.style.cssText = `position: absolute; top: ${box.top}px;left: ${box.left}px;width: ${box.right - box.left}px;height: ${box.bottom - box.top}px;border: 1px solid red;`\n // this.helperDiv = div;\n }\n\n get clientPos() {\n return this.overlay.clientPos\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n this.div = div;\n this.addText()\n if (this.options.icon) { \n this.addIcon()\n }\n div.style.fontSize = `12px`;\n div.style.textShadow = `#fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0`;\n div.style.display = `flex`;\n div.style.flexDirection = `column`;\n div.style.justifyContent = `center`;\n div.style.alignItems = `center`;\n div.style.padding = \"4px\";\n this.overlay.setOpacity(this.options.opacity);\n this.overlay.div.style.pointerEvents = `none`;\n this.overlay.div.style.userSelect = `none`;\n this.overlay.div.appendChild(div)\n // this._changePosition()\n this.resetSize()\n return div\n }\n\n addIcon() { \n if (!this.img) {\n const icon = this.initIcon()\n if (this.options.icon_position === \"top\") {\n if (this.div.firstChild) {\n this.div.insertBefore(icon, this.div.firstChild)\n } else {\n this.div.appendChild(icon)\n }\n } else {\n this.div.appendChild(icon)\n }\n }\n }\n\n addText() { \n const text = this.initText()\n if (this.options.icon_position === \"top\") {\n this.div.appendChild(text)\n } else {\n if (this.div.firstChild) {\n this.div.insertBefore(text, this.div.firstChild)\n } else {\n this.div.appendChild(text)\n }\n }\n }\n\n getPosition() {\n return this.position\n }\n\n initText() {\n const textDiv = document.createElement(\"div\")\n textDiv.appendChild(this.createTextFragment())\n textDiv.style.textAlign = \"center\"\n this.textDiv = textDiv\n return textDiv\n }\n\n createTextFragment() { \n const f = document.createDocumentFragment()\n this.options.texts.forEach(item => { \n const div = document.createElement(\"div\")\n div.style.whiteSpace = 'nowrap';\n if (item.styles) { \n for (let [key, value] of Object.entries(item.styles)) { \n div.style[key as any] = value;\n }\n }\n div.textContent = item.text;\n f.appendChild(div)\n })\n return f\n }\n\n initIcon() {\n const img = document.createElement(\"img\")\n img.setAttribute(\"src\", this.options.icon!)\n img.style.width = `${this.options.icon_size?.[0] || 32}px`\n img.style.height = `${this.options.icon_size?.[1] || 32}px`\n img.style.opacity = `${this.options.icon_opacity}px`\n img.style.borderRadius = '50%';\n if (this.options.icon_border.width) {\n img.style.border = `${this.options.icon_border.width}px solid ${this.options.icon_border.color}`\n }\n img.onload = () => {\n // this._changePosition()\n this.resetSize()\n }\n this.img = img\n return img\n }\n\n private _changePosition = () => {\n this.overlay.updatePosition(true)\n }\n\n registryEvent() {\n // this.context.addEventListener('update', this._changePosition)\n }\n\n unRegistryEvent() {\n // this.context.removeEventListener('update', this._changePosition)\n }\n\n setVisible(visible: boolean) {\n if (visible === this.visible) { return }\n this.visible = visible\n this.changeOverlayVisible(visible)\n }\n\n changeOverlayVisible(visible: boolean) {\n if (visible === this.overlay.visible && this.options.collision_hide_icon) { return }\n if (this.options.collision_hide_icon) {\n this.overlay.visible = visible;\n this.overlay.div.style.visibility = visible ? \"visible\" : \"hidden\"\n } else {\n if (this.showTextStatus === visible) { return }\n this.textDiv.style.visibility = visible ? \"visible\" : \"hidden\"\n this.showTextStatus = visible\n }\n }\n\n parentSetVisible(visible: boolean) { \n if (!this.visible) { \n return\n }\n this.changeOverlayVisible(visible)\n // if (visible) {\n // this.renderHelperBox()\n // } else {\n // this.helperDiv?.remove()\n // this.helperDiv = null\n // }\n }\n\n getBox(boxScale = this.context.config.poi.boxScale) {\n const { width, height } = this.size\n const w = width * boxScale;\n const h = height * boxScale;\n const { x, y } = this.overlay.clientPos\n return {\n left: x - w / 2,\n right: x + w / 2,\n top: this.options.icon ? y - h : y - h / 2,\n bottom: this.options.icon ? y : y + h / 2,\n }\n }\n\n getOriginBox() { \n return this.getBox(1)\n }\n\n isContain(x: number, y: number) {\n if (!this.overlay.visible) { return false }\n if (!this.visible) {return false}\n const box = this.getOriginBox()\n return x >= box.left && x <= box.right && y >= box.top && y <= box.bottom\n }\n\n dispose() {\n this.unRegistryEvent();\n this.div = null as unknown as HTMLDivElement;\n this.textDiv = null as unknown as HTMLDivElement;\n this.img = undefined\n this.overlay.dispose();\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from \"../utils\";\nimport { debounce } from \"lodash\";\n\ninterface OverlayOptions {\n autoUpdate: boolean;\n appendToBody: boolean;\n autoChangePlacement: boolean;\n}\n\nconst defaultOptions: OverlayOptions = {\n autoUpdate: true,\n appendToBody: false,\n autoChangePlacement: false,\n};\n\ninterface OverlayEventMap {\n \"update-position\": {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\ntype Placement =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"leftTop\"\n | \"rightTop\"\n | \"leftBottom\"\n | \"rightBottom\"\n | \"center\";\n\nexport class Overlay extends EventDispatcher<OverlayEventMap> {\n public div: HTMLDivElement;\n\n private element?: Object3D & { getPosition?: () => Vector3 };\n\n public position = new Vector3();\n\n clientPos = { x: 0, y: 0 };\n\n visible = true;\n\n private options: OverlayOptions;\n\n placement: Placement = \"top\";\n\n observer: MutationObserver | null = null;\n\n constructor(\n private context: Context,\n options: Partial<OverlayOptions> = {}\n ) {\n super();\n this.options = { ...defaultOptions, ...options };\n this.registryEvent();\n this.div = this.initDiv();\n if (this.options.appendToBody) {\n document.body.appendChild(this.div);\n } else {\n this.context.container.appendChild(this.div);\n }\n }\n\n initObserver() {\n const observer = new MutationObserver(\n debounce(() => {\n this.usePlacement();\n }, 100)\n );\n observer.observe(this.div, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n this.observer = observer;\n }\n\n getPlacementPosition(): Record<Placement, Vector3> {\n const { max, min } = new Box3().setFromObject(this.element!);\n const centerX = (max.x + min.x) / 2;\n const centerY = (max.y + min.y) / 2;\n return {\n left: new Vector3(min.x, centerY, max.z),\n leftTop: new Vector3(min.x, max.y, max.z),\n top: new Vector3(centerX, max.y, max.z),\n rightTop: new Vector3(max.x, max.y, max.z),\n right: new Vector3(max.x, centerY, max.z),\n rightBottom: new Vector3(max.x, min.y, max.z),\n bottom: new Vector3(centerX, min.y, max.z),\n leftBottom: new Vector3(min.x, min.y, max.z),\n center: new Vector3(centerX, centerY, max.z),\n };\n }\n\n getPlacementScreenPosition(): Record<Placement, { x: number; y: number }> {\n const { width, height } = this.context.clientSize;\n const positions = this.getPlacementPosition();\n return Object.keys(positions).reduce((obj, key) => {\n const { x, y } = vector3ToDevice(\n (positions as any)[key],\n this.context.camera,\n width,\n height\n );\n (obj as any)[key] = { x, y };\n return obj;\n }, {}) as Record<Placement, { x: number; y: number }>;\n }\n\n // \u68C0\u67E5\u662F\u4E0D\u662F\u6EA2\u51FA\u4E86context.container\n // @return true \u8868\u793A\u6CA1\u6709\u6EA2\u51FA\n checkOverflow(\n max: { x: number; y: number },\n min: { x: number; y: number }\n ): boolean {\n const { width, height } = this.context.clientSize;\n return min.x > 0 && max.x < width && min.y < height && max.y > 0;\n }\n\n // \u8BA1\u7B97\u9002\u7528\u7684placement\n getPlacement(): { type: Placement, position: { x: number, y: number } } {\n const { clientWidth, clientHeight } = this.div;\n const positions = this.getPlacementScreenPosition();\n const halfWidth = clientWidth / 2;\n const halfHeight = clientHeight / 2;\n const placements: {\n type: Placement;\n getBox: (\n x: number,\n y: number\n ) => {\n max: { x: number; y: number };\n min: { x: number; y: number };\n };\n }[] = [\n {\n type: \"center\",\n getBox(x: number, y: number) {\n return {\n max: { x: halfWidth + x, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"left\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - halfHeight },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n {\n type: \"leftTop\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - clientHeight },\n min: { x: x - clientWidth, y: y },\n };\n },\n },\n {\n type: \"top\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"rightTop\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - clientHeight },\n min: { x: x, y: y },\n };\n },\n },\n {\n type: \"right\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - halfHeight },\n min: { x: x, y: y + halfHeight },\n };\n },\n },\n {\n type: \"rightBottom\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y },\n min: { x: x, y: y + clientHeight },\n };\n },\n },\n {\n type: \"bottom\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y },\n min: { x: x - halfWidth, y: y + clientHeight },\n };\n },\n },\n {\n type: \"leftBottom\",\n getBox(x, y) {\n return {\n max: { x: x, y: y },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n ];\n for (let i = 0; i < placements.length; i++) {\n const placement = placements[i];\n const position = positions[placement.type];\n const { max, min } = placement.getBox(position.x, position.y);\n if (this.checkOverflow(max, min)) {\n return {\n type: placement.type,\n position,\n };\n }\n }\n return {\n type: \"center\",\n position: positions.center\n };\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n return div;\n }\n\n usePlacement() {\n const placement = this.getPlacement();\n this.div.className = `overlay_${placement.type}`;\n this._updatePosition(placement.position.x, placement.position.y)\n }\n\n bindElement(element: Object3D) {\n this.element = element;\n if (this.options.autoChangePlacement) {\n this.initObserver();\n // TODO\n // this.usePlacement();\n }\n this.onUpdate();\n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = \"block\") {\n if (visible === this.visible) {\n return;\n }\n this.div.style.display = visible ? display : \"none\";\n this.visible = visible;\n }\n\n setOpacity(opacity: number) {\n this.div.style.opacity = `${opacity}`;\n }\n\n getPosition() {\n if (this.element) {\n if (typeof this.element.getPosition === \"function\") {\n return this.element.getPosition();\n }\n const box = new Box3().setFromObject(this.element);\n const center = box.getCenter(new Vector3());\n return center;\n } else {\n return this.position;\n }\n }\n\n get withinDisplayRange() {\n const { x, y } = this.clientPos;\n const { width, height } = this.context.clientSize;\n return x >= 0 && x <= width && y >= 0 && y <= height;\n }\n\n _updatePosition(x: number, y: number) { \n this.clientPos = { x, y };\n const { width, height, x: clientX, y: clientY } = this.context.clientSize;\n if (this.options.appendToBody) {\n this.div.style.left = `${clientX}px`;\n this.div.style.top = `${clientY + height}px`;\n }\n if (this.options.autoUpdate) {\n this.div.style.transform = `translate3d(${x}px, ${-height + y}px, 0)`;\n } else {\n this.dispatchEvent({ type: \"update-position\", x, y, width, height });\n }\n }\n\n updatePosition(force = false) {\n const vector = this.getPosition();\n const { width, height, x: clientX, y: clientY } = this.context.clientSize;\n const { x, y } = vector3ToDevice(\n vector,\n this.context.camera,\n width,\n height\n );\n if (this.clientPos.x === x && this.clientPos.y === y && !force) {\n return;\n }\n this._updatePosition(x, y)\n }\n\n onUpdate = () => {\n if (this.options.autoChangePlacement) { \n this.usePlacement();\n } else {\n this.updatePosition();\n }\n };\n\n registryEvent() {\n this.context.addEventListener(\"update\", this.onUpdate);\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"update\", this.onUpdate);\n }\n\n dispose() {\n this.unRegistryEvent();\n this.unBindElement();\n this.observer?.disconnect();\n this.div?.remove();\n this.div = null as unknown as HTMLDivElement;\n }\n}\n", "import { Context } from \"../context\";\nimport { Box3, Object3D, Vector3 } from \"three\";\nimport { GraphicLayer } from '../layer/graphic-layer'\nimport { PoiLayer } from '../layer/poi-layer'\nimport { Graphic, GraphicOptionsParam } from \"./graphic\";\nimport { Shadow } from \"./shadow\";\nimport { PoiOptionsParam } from \"./poi\";\nimport { HeatmapDataParam, HeatmapElement } from './heatmap'\nimport { Model, ModelOptions } from \"./model\";\n\nexport class Floor extends Object3D {\n \n graphicLayer: GraphicLayer;\n\n poiLayer: PoiLayer;\n\n grounds: Set<Graphic> = new Set();\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n groundUpper = new Object3D();\n\n models = new Object3D()\n\n modelMap = new Map()\n\n private groundMaxHeight = 0;\n\n constructor(public context: Context) {\n super()\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.groundUpper.add(this.graphicLayer)\n this.groundUpper.add(this.poiLayer)\n this.add(this.groundUpper)\n this.add(this.models)\n }\n\n getPosition() { \n const box = new Box3().setFromObject(this.groundUpper)\n return box.getCenter(new Vector3())\n }\n\n createGround(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.grounds.size\n const ground = new Graphic(this.context, options)\n this.addGrounds([ground])\n }\n\n addGrounds(grounds: Graphic[]) {\n grounds.forEach(ground => { \n if (!this.grounds.has(ground)) {\n ground.mesh.castShadow = true;\n this.grounds.add(ground)\n this.groundUpper.add(ground)\n }\n })\n this.changeGroundMaxHeight()\n }\n\n changeGroundMaxHeight() { \n const grounds = Array.from(this.grounds)\n this.groundMaxHeight = this.grounds.size > 0 ? Math.max(...grounds.map(ground => ground.options.height + ground.options.airHeight + ground.options.deltaHeight)) : 0\n this.graphicLayer.position.z = this.groundMaxHeight\n this.models.position.z = this.groundMaxHeight\n }\n\n get hasElement() { \n return !!(this.grounds.size || this.graphicLayer.children.length)\n }\n\n getCenter() { \n return new Box3().setFromObject(this.groundUpper).getCenter(new Vector3())\n }\n \n addModel(options: ModelOptions) { \n const model = new Model(this.context, options)\n this.models.add(model)\n this.modelMap.set(options.id, model)\n return model\n }\n\n addShadow() { \n const box = new Box3().setFromObject(this.groundUpper)\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n this.shadow.setPosition(center)\n this.shadow.changeLightCamera(size)\n // this.add(this.shadow)\n }\n\n addGraphic(graphicOptions: GraphicOptionsParam) {\n return this.graphicLayer.createGraphic(graphicOptions)\n }\n\n addPoi(poiOptions: PoiOptionsParam) {\n return this.poiLayer.createPoi(poiOptions)\n }\n\n addHeatmap(data: HeatmapDataParam) {\n if (!this.heatmap) {\n this.heatmap = new HeatmapElement(this.context)\n this.add(this.heatmap)\n }\n this.heatmap.loadData(data)\n const box = new Box3().setFromObject(this.graphicLayer)\n this.heatmap.position.setZ(box.max.z)\n return this.heatmap\n }\n\n removeHeatMap() {\n if (this.heatmap) {\n this.remove(this.heatmap)\n this.heatmap.dispose()\n this.heatmap = undefined\n }\n }\n\n setShadowOpacity(opacity: number) {\n this.shadow.setOpacity(opacity)\n }\n\n setShadowVisible(visible: boolean) {\n this.shadow.visible = visible;\n }\n\n dispose() {\n this.shadow.dispose();\n this.graphicLayer.dispose()\n this.poiLayer.dispose()\n this.grounds.forEach(ground => ground.dispose())\n this.heatmap?.dispose()\n this.groundUpper.clear()\n this.models.children.forEach((model) => (model as unknown as Model).dispose())\n this.models.clear()\n this.modelMap.clear()\n this.clear()\n }\n\n}", "import { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Box3, Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n graphicMap = new Map<string, Graphic>()\n\n constructor(context: Context) {\n super(context)\n }\n\n getCenter(): Vector3 { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGraphic(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.graphicMap.size;\n const graphic = new Graphic(this.context, options)\n this.add(graphic)\n this.graphicMap.set(options.id!, graphic)\n return graphic\n }\n\n removeGraphic(graphic: Graphic) { \n this.remove(graphic)\n this.graphicMap.delete(graphic.options.id!)\n graphic.dispose()\n }\n\n removeGraphicById(id: string) {\n if (this.graphicMap.has(id)) {\n this.removeGraphic(this.graphicMap.get(id)!)\n }\n }\n\n getGraphicByNodeId(id: string) {\n return this.graphicMap.get(id) || null\n }\n\n /**\n * \u83B7\u53D6\u5C04\u7EBF\u76F8\u4EA4\u7684\u5143\u7D20\n * @param raycaster \n */\n getGraphicByRaycaster(raycaster: Raycaster): { graphics: Graphic[], position: Vector3 | null } {\n const initData: {\n position: Vector3 | null,\n graphic: Graphic | null,\n distance: number\n } = { distance: 10000, graphic: null, position: null }\n const data = this.children.reduce((res, item) => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n const { distance } = pos\n if (distance < res.distance) {\n return {\n distance: res.distance,\n position: res.position,\n graphic: item\n }\n }\n }\n return res\n } else {\n return res\n }\n }, initData)\n if (data === initData) {\n return { graphics: [], position: null }\n }\n return { graphics: [data.graphic!], position: data.position }\n }\n}", "import { Context } from \"../context\";\nimport { Object3D } from \"three\";\nimport { dispose } from '../utils'\n\nexport class Layer extends Object3D {\n constructor(public context: Context) {\n super();\n }\n\n dispose() {\n dispose(this)\n this.clear()\n }\n}", "import { Poi, PoiOptionsParam } from \"../elements\";\nimport { Layer } from \"./layer\";\nimport { Context } from '../context'\nimport { debounce } from 'lodash'\nimport { Timer } from \"../utils\";\n\nexport class PoiLayer extends Layer {\n pois: Poi[] = []\n debounceCollisionDetection: () => void\n\n timer = new Timer()\n \n constructor(context: Context) {\n super(context)\n this.registryEvent()\n this.debounceCollisionDetection = debounce(this.collisionDetection, 10)\n }\n\n clear(force = false) {\n this.pois.forEach(item => {\n if (item.options.built_in && !force) { \n return\n }\n item.dispose()\n })\n this.pois = force ? [] : this.pois.filter(item => item.options.built_in)\n return this\n }\n\n createPoi(options: PoiOptionsParam) {\n const poi = new Poi(this.context, options)\n this.pushPoi(poi)\n poi.addEventListener(\"change-level\", () => this.changePoiLevelOrCollisionEnable(poi))\n poi.addEventListener(\"change-collision_enable\", () => this.changePoiLevelOrCollisionEnable(poi))\n Promise.resolve().then(() => { \n this.debounceCollisionDetection()\n })\n return poi\n }\n\n changePoiLevelOrCollisionEnable(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n this.pushPoi(poi)\n }\n\n removePoi(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n poi.dispose()\n }\n\n removePoiById(id: string) {\n const poi = this.pois.find(item => item.options.id === id)\n if (poi) {\n this.removePoi(poi)\n }\n }\n\n getPoiById(id: string) { \n const poi = this.pois.find(item => item.options.id === id)\n return poi || null\n }\n\n /**\n * \u4FDD\u5B58poi\u6309\u7167level\u6392\u5E8F\n * @param poi \n */\n pushPoi(poi: Poi) {\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u6700\u524D\u9762\n if (!poi.options.collision_enable) {\n this.pois.unshift(poi)\n return\n }\n // level\u6700\u5C0F\u7684\u5728\u6700\u540E\u9762\n if (poi.options.level === 0) {\n this.pois.push(poi)\n return\n }\n for (let i = 0; i < this.pois.length; i++) {\n const item = this.pois[i]\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u524D\u9762\n if (!item.options.collision_enable) { \n continue\n }\n if (item.options.level <= poi.options.level) {\n this.pois.splice(i, 0, poi)\n return\n }\n }\n // \u63D2\u5165\u5230\u6700\u540E\n this.pois.push(poi) \n }\n\n getPoiByDeviceXy(x: number, y: number) {\n const pois = this.pois.filter(item => {\n return (item instanceof Poi) && item.isContain(x, y)\n })\n return pois\n }\n\n onUpdate = () => { \n this.timer.requestAnimationFrame(() => { \n this.collisionDetection()\n })\n }\n\n /**\n * \u78B0\u649E\u68C0\u6D4B\n */\n collisionDetection() {\n const range: { left: number; right: number; top: number; bottom: number; }[] = []\n // \u6392\u9664\u5728\u5C4F\u5E55\u5916\u7684poi\n const pois = this.pois.filter(item => item.visible && item.withinDisplayRange)\n pois.forEach((item, index) => {\n const { left, right, top, bottom } = item.getBox()\n if (index === 0 || !item.options.collision_enable) {\n range.push({ left, right, top, bottom })\n item.parentSetVisible(true)\n return\n }\n // valid boolean \u8868\u793A\u53D1\u751F\u4E86\u78B0\u649E\n const valid = range.some((box) => { \n // \u5224\u65AD\u56DB\u4E2A\u70B9\u662F\u4E0D\u662F\u90FD\u4E0D\u5728box\u7684\u8303\u56F4\u5185\n return box.left < right && box.right > left && box.top < bottom && box.bottom > top;\n })\n item.parentSetVisible(!valid)\n if (!valid) { \n range.push({ left, right, top, bottom })\n }\n })\n }\n\n registryEvent() {\n this.context.addEventListener('update', this.onUpdate)\n }\n\n unRegistryEvent() { \n this.context.removeEventListener('update', this.onUpdate)\n }\n \n dispose() {\n this.timer.dispose()\n this.pois.forEach(item => item.dispose())\n this.pois.length = 0;\n this.debounceCollisionDetection = () => { }\n super.dispose()\n this.unRegistryEvent()\n }\n}", "import { Context } from \"../context\";\nimport {\n MeshBasicMaterial, Object3D, PlaneGeometry,\n Texture, DoubleSide, Mesh, Matrix3, Vector2\n} from \"three\";\nimport { create, Heatmap, HeatmapData, DataPoint } from '@mars3d/heatmap.js'\nimport { featureCollection, point, bbox, center as getCenter } from '@turf/turf'\n\ntype V = 'value'\ntype X = 'x'\ntype Y = 'y'\n\nexport type HeatmapDataParam = HeatmapData<DataPoint<V, X, Y>>\n\nexport class HeatmapElement extends Object3D {\n\n private heatmap?: Heatmap<V, X, Y>;\n\n private div: HTMLDivElement\n\n private plane?: Mesh;\n\n constructor(private context: Context) {\n super()\n this.div = document.createElement(\"div\")\n }\n\n clearHeatmap() {\n if (this.div.firstChild) {\n this.div.removeChild(this.div.firstChild)\n }\n this.heatmap = undefined;\n }\n\n loadData(data: HeatmapDataParam) {\n this.clearHeatmap()\n const { width, height, leftTop, center } = this.getBox(data)\n this.heatmap = create({\n width: width,\n height: height,\n container: this.div,\n ...this.context.config.heatMap,\n } as any);\n this.heatmap.setData(this.transformData(data, leftTop))\n this.initPlane(width, height)\n this.position.set(center[0], center[1], this.position.z)\n }\n\n initPlane(width: number, height: number) {\n if (this.plane) { this.remove(this.plane) }\n const geometry = new PlaneGeometry(width, height)\n const texture = new Texture(this.div.firstChild as HTMLCanvasElement);\n texture.needsUpdate = true;\n const material = new MeshBasicMaterial({\n transparent: true,\n side: DoubleSide,\n map: texture,\n });\n material.needsUpdate = true;\n this.plane = new Mesh(geometry, material)\n this.add(this.plane)\n }\n\n getTransMatrix({ x, y }: { x: number, y: number }) {\n // \u5148\u628A\u5DE6\u4E0A\u89D2\u5E73\u79FB\u523000\u70B9\uFF0C\u7136\u540E\u5BF9y\u8F74\u53D6\u53CD\n return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y))\n }\n\n /**\n * \u6240\u6709\u70B9\u7684\u5750\u6807\u51CF\u53BB\u5DE6\u4E0A\u89D2\u4ECE00\u70B9\u5F00\u59CB\u753Bcanvas\n * @param data \n * @param leftTop \n * @returns \n */\n transformData(data: HeatmapDataParam, leftTop: { x: number, y: number }): HeatmapDataParam {\n const matrix = this.getTransMatrix(leftTop)\n const $data = data.data.map(item => { \n const vector = new Vector2(item.x, item.y).applyMatrix3(matrix)\n return {\n x: vector.x,\n y: vector.y,\n value: item.value\n }\n })\n return {\n data: $data,\n max: data.max,\n min: data.min\n }\n }\n\n getBox(data: HeatmapDataParam) {\n const features = featureCollection(data.data.map(item => point([item.x, item.y])))\n // \u8FD4\u56DE\u4E00\u4E2A\u77E9\u5F62\u8FB9\u6846\u5750\u6807\n const box = bbox(features);\n const width = box[2] - box[0]\n const height = box[3] - box[1]\n const leftTop = { x: box[0], y: box[3] }\n const center = getCenter(features)\n return { width, height, leftTop, center: center.geometry.coordinates }\n }\n\n dispose() {\n this.div = null as unknown as HTMLDivElement\n this.heatmap = undefined\n }\n}", "import { Box3, Object3D, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { loadModel, dispose } from \"../utils\";\nimport { Poi } from \"./poi\";\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\n\nexport interface ModelOptions {\n modelUrl: string;\n icon?: string;\n icon_size?: [number, number];\n position?: Vector3;\n id: string;\n}\n\nexport class Model extends Object3D {\n poi: Poi | null = null;\n\n model: GLTF | null = null\n\n constructor(public context: Context, private options: ModelOptions) {\n super()\n this.position.copy(options.position || new Vector3(0, 0, 0))\n this.loadModel()\n }\n \n async loadModel() { \n const object = await loadModel(this.options.modelUrl);\n object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0)\n this.add(object.scene)\n this.model = object\n this.initPoi()\n }\n\n initPoi() {\n if (!this.options.icon) {\n return\n }\n const poi = this.context.currentFloor?.addPoi({\n icon: this.options.icon,\n icon_size: this.options.icon_size,\n built_in: true,\n level: 0\n })\n this.poi = poi || null\n if (this.model && poi) {\n poi.position = (new Box3().setFromObject(this)).getCenter(new Vector3())\n }\n }\n\n dispose() {\n dispose(this)\n this.model = null\n if (this.poi) {\n this.context.currentFloor?.poiLayer.removePoi(this.poi)\n this.poi = null;\n }\n }\n}", "import { Context } from \"../context\";\nimport { EventDispatcher, Vector3 } from \"three\";\nimport { createSvg, vector3ToDevice } from '../utils'\n\nexport class BaseSvg<T extends {} = {}> extends EventDispatcher<T> {\n protected points: Vector3[] = [];\n\n protected svg: SVGElement;\n\n protected enable = true;\n\n constructor(public context: Context) {\n super()\n this.svg = createSvg(`${context.container.clientWidth}`, `${context.container.clientHeight}`)\n context.container.appendChild(this.svg)\n this._registryEvent()\n }\n\n private _onResize = ({ width, height }: { width: number; height: number }) => {\n if (this.svg) {\n this.svg.setAttribute(\"width\", `${width}`)\n this.svg.setAttribute(\"height\", `${height}`)\n }\n }\n\n private _registryEvent() {\n this.context.addEventListener(\"resize\", this._onResize)\n }\n\n private _unRegistryEvent() { \n this.context.removeEventListener(\"resize\", this._onResize)\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.svg.style.display = 'block';\n } else {\n this.svg.style.display = 'none';\n }\n }\n\n getIntersectByPointerEvent(e: PointerEvent) {\n const { camera, renderer } = this.context\n const { offsetX: x, offsetY: y } = e\n const { clientWidth, clientHeight } = renderer.domElement;\n const nx = x / clientWidth * 2 - 1;\n const ny = 1 - y / clientHeight * 2;\n\n const v = new Vector3(nx, ny, 0);\n\n return v.unproject(camera);\n }\n\n getSvgCoordinate(vector: Vector3) {\n const { camera, container } = this.context\n const coord = vector3ToDevice(vector, camera, container.clientWidth, container.clientHeight)\n return coord\n }\n \n dispose() {\n this._unRegistryEvent()\n this.context.container.removeChild(this.svg)\n this.svg = null as unknown as SVGElement\n }\n}", "import { Context } from \"../context\";\nimport { Vector3 } from \"three\";\nimport { setCirclePosition, createCircle, createLine, setLineStartEnd } from '../utils'\nimport { BaseSvg } from './base-svg'\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SvgLine extends BaseSvg<SvgLineEventMap> {\n\n private circles: SVGElement[] \n \n private line: SVGElement\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { circle, line } } } = context\n this.circles = [createCircle(circle.radius, circle.fill), createCircle(circle.radius, circle.fill)]\n this.line = createLine(line.stroke)\n this.svg.appendChild(this.circles[0]);\n this.svg.appendChild(this.circles[1]);\n this.svg.appendChild(this.line);\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points[0]) {\n const point1 = this.getSvgCoordinate(this.points[0])\n setCirclePosition(this.circles[0], point1.x, point1.y)\n setLineStartEnd(this.line, point1)\n }\n if (this.points[1]) {\n const point2 = this.getSvgCoordinate(this.points[1])\n setCirclePosition(this.circles[1], point2.x, point2.y)\n setLineStartEnd(this.line, undefined, point2)\n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u53EA\u5728\u6709\u7B2C\u4E00\u4E2A\u70B9\u7684\u65F6\u5019\u9700\u8981\n if (this.points.length !== 1) { return }\n this.line.style.display = \"block\";\n setLineStartEnd(this.line, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n this.line.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n // \u4FEE\u6539\u70B9\n const circle = this.circles[this.points.length]\n setCirclePosition(circle, x, y)\n if (!this.points.length) { \n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(this.line, { x, y }, { x, y })\n }\n this.addPoint(point)\n }\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.points.length >= 2) {\n const distance = this.calculatedDistance()\n this.dispatchEvent({ type: 'distance', distance })\n }\n }\n\n /**\n * \u8BA1\u7B97\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u8DDD\u79BB\n */\n calculatedDistance() { \n const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = this.points\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.line = null as unknown as SVGElement\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { BaseSvg } from \"./base-svg\";\nimport { setCirclePosition, setLineStartEnd, createLine, createCircle } from '../utils'\nimport { Vector3 } from \"three\";\n\ninterface SvgPolygonEventMap {\n 'area': { area: number }\n}\n\nexport class SvgPolygon extends BaseSvg<SvgPolygonEventMap> {\n\n private circles: SVGElement[] = []\n\n private lines: SVGElement[] = []\n\n private isClose = false\n\n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n private get lastLine() {\n return this.lines.slice(-1)[0]\n }\n\n private addCircle(circle: SVGElement) {\n this.circles.push(circle)\n this.svg.appendChild(circle)\n }\n\n private addLine(line: SVGElement) {\n this.lines.push(line)\n this.svg.appendChild(line)\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points.length) {\n this.points.forEach((point, index) => {\n const devicePoint = this.getSvgCoordinate(point)\n if (this.circles[index]) {\n setCirclePosition(this.circles[index], devicePoint.x, devicePoint.y)\n }\n if (index !== 0) {\n setLineStartEnd(this.lines[index - 1], undefined, devicePoint)\n }\n if (this.lines[index]) {\n setLineStartEnd(this.lines[index], devicePoint)\n }\n }) \n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u5FC5\u987B\u8981\u6709\u4E00\u4E2A\u70B9\u5E76\u4E14\u8FD8\u6CA1\u6709\u95ED\u5408\u624D\u9700\u8981\u5904\u7406\n if (!this.lastLine || this.isClose) { return }\n this.lastLine.style.display = \"block\";\n setLineStartEnd(this.lastLine, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\u5C31\u4E0D\u9700\u8981\u5904\u7406\u4E86\n if (this.isClose) { return } \n this.lastLine.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\n if (this.isClose) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n if (this.checkAdsorb(x, y)) {\n this.isClose = true\n this.addPoint(this.points[0])\n } else {\n this.addPoint(point)\n }\n const { circle: { fill, radius }, line: { stroke } } = this.context.config.svg\n if (!this.isClose) {\n // \u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u70B9\n const circle = createCircle(radius, fill)\n setCirclePosition(circle, x, y)\n this.addCircle(circle)\n }\n if (this.lines.length) {\n // \u5982\u679C\u5DF2\u7ECF\u6709\u4E00\u6761\u7EBF\u4E86 \u8981\u95ED\u5408\u8FD9\u6761\u7EBF\n setLineStartEnd(this.lastLine, undefined, { x, y })\n }\n // \u5982\u679C\u8FD9\u4E2A\u591A\u8FB9\u5F62\u8FD8\u6CA1\u6709\u95ED\u5408 \u5C31\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u7EBF \u5305\u62EC\u521B\u5EFA\u7B2C\u4E00\u6761\u7EBF\n if (!this.isClose) {\n const line = createLine(stroke)\n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(line, { x, y }, { x, y })\n this.addLine(line)\n }\n }\n }\n\n /**\n * \u68C0\u6D4B\u662F\u5426\u53EF\u4EE5\u5438\u9644\n * \u5750\u6807\u70B9\u6700\u5C113\u4E2A \u4F20\u5165\u7684\u5750\u6807\u70B9\u548C\u7B2C\u4E00\u4E2A\u5750\u6807\u7684\u50CF\u7D20\u76F8\u5DEE\u4E0D\u8D85\u8FC75\u4E2A\u50CF\u7D20\n */\n checkAdsorb(x: number, y: number) {\n if (this.points.length < 3) { return false }\n const circle = this.circles[0]\n const cx = +circle.getAttribute(\"cx\")!\n const cy = +circle.getAttribute(\"cy\")!\n return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.isClose) {\n const area = this.calculatedArea()\n this.dispatchEvent({ type: 'area', area })\n }\n }\n // \u8BA1\u7B97\u9762\u79EF\n calculatedArea() {\n const cds = this.points.map(item => [item.x, item.y])\n let area = 0\n const numPoints = cds.length\n for (let i = 0; i < numPoints; i++) {\n const j = (i + 1) % numPoints\n area += (cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1])\n }\n return Math.abs(area / 2)\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.lines = []\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { Box3 } from \"three\";\nimport { vector3ToDevice, createRect, setRectPosition } from '../utils'\nimport { BaseSvg } from './base-svg'\nimport { Graphic } from \"./graphic\";\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SelectBox extends BaseSvg<SvgLineEventMap> {\n\n private rect!: SVGElement\n\n private cornerRect: SVGElement[] = [] // \u56DB\u4E2A\u89D2\u4E0A\u7684\u65B9\u5757\n\n private centerRect: SVGElement[] = [] // \u56DB\u4E2A\u7EBF\u4E2D\u95F4\u7684\u65B9\u5757\n\n private graphic?: Graphic\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { line } } } = context\n this.rect = createRect(line.stroke, \"transparent\")\n this.svg.appendChild(this.rect)\n for (let i = 0; i < 4; i++) {\n this.cornerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.centerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.svg.appendChild(this.cornerRect[i])\n this.svg.appendChild(this.centerRect[i])\n }\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (!this.graphic) {\n setRectPosition(this.rect, 0, 0, 0, 0)\n for (let i = 0; i < this.cornerRect.length; i++) {\n setRectPosition(this.cornerRect[i], 0, 0, 0, 0)\n setRectPosition(this.centerRect[i], 0, 0, 0, 0)\n }\n } else {\n const box = new Box3().setFromObject(this.graphic)\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const leftBottom = vector3ToDevice(min, camera, w, h)\n const rightTop = vector3ToDevice(max, camera, w, h)\n // \u753B\u51FA\u4E00\u4E2A\u6846\u6765\n setRectPosition(this.rect, leftBottom.x, rightTop.y, Math.abs(rightTop.x - leftBottom.x), Math.abs(rightTop.y - leftBottom.y))\n // \u56DB\u4E2A\u89D2\u7684\u4F4D\u7F6E\n const { x: left, y: bottom } = leftBottom\n const { x: right, y: top } = rightTop\n const halfWidth = 5;\n const corners = [\n { x: left - halfWidth, y: top - halfWidth }, // \u5DE6\u4E0A\u89D2\n { x: right - halfWidth, y: top - halfWidth }, // \u53F3\u4E0A\u89D2\n { x: left - halfWidth, y: bottom - halfWidth }, // \u5DE6\u4E0B\u89D2\n { x: right - halfWidth, y: bottom - halfWidth }, // \u53F3\u4E0B\u89D2 \n ]\n for (let i = 0; i < corners.length; i++) {\n setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2)\n }\n // \u56DB\u4E2A\u4E2D\u95F4\u7684\u4F4D\u7F6E\n const centerHalfWidth = 4;\n const centerX = (left + right) / 2\n const centerY = (bottom + top) / 2\n const centers = [\n { x: centerX - centerHalfWidth, y: top - centerHalfWidth }, // \u4E0A\n { x: left - centerHalfWidth, y: centerY - centerHalfWidth }, // \u5DE6\n { x: right - centerHalfWidth, y: centerY - centerHalfWidth }, // \u53F3\n { x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }, // \u4E0B\n ]\n for (let i = 0; i < centers.length; i++) {\n setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2)\n }\n }\n }\n \n selectGraphic(graphic: Graphic) { \n this.graphic = graphic\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.rect = null as unknown as SVGElement\n this.cornerRect = []\n this.centerRect = []\n }\n}", "import { createRect, isContain, setRectPosition, vector3ToDevice } from \"../../utils\";\nimport { Context } from \"../../context\";\nimport { BaseSvg, Graphic } from \"../../elements\";\nimport { Frustum, Vector3 } from \"three\";\n\ninterface BoxSelectionEventMap { \n \"selected\": {\n list: Graphic[]\n }\n}\n\nexport class BoxSelection extends BaseSvg<BoxSelectionEventMap> {\n\n private startPoint?: Vector3;\n\n private endPoint?: Vector3;\n\n rect: SVGElement;\n\n frustum = new Frustum();\n\n constructor(context: Context) { \n super(context);\n const { config: { selectBox: { fill, stroke } } } = context\n this.rect = createRect(stroke, fill)\n this.svg.appendChild(this.rect)\n this.registryEvent()\n }\n\n setEnable(enable: boolean): void {\n super.setEnable(enable)\n setRectPosition(this.rect, 0, 0, 0, 0)\n if (enable) {\n this.registryEvent()\n } else {\n this.startPoint = undefined\n this.unRegistryEvent()\n }\n }\n\n onPointerDown = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.startPoint = point\n }\n this.endPoint = undefined;\n }\n\n onPointerMove = (e: PointerEvent) => { \n if (!this.enable || !this.startPoint) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n }\n\n onPointerUp = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n this.doSelect()\n this.startPoint = undefined\n }\n\n onUpdate = () => {\n if (this.startPoint) {\n const startPoint = this.getSvgCoordinate(this.startPoint)\n let endPoint = { ...startPoint }\n if (this.endPoint) {\n endPoint = this.getSvgCoordinate(this.endPoint)\n }\n const leftTop = { x: Math.min(startPoint.x, endPoint.x), y: Math.min(startPoint.y, endPoint.y) }\n const width = Math.abs(endPoint.x - startPoint.x)\n const height = Math.abs(endPoint.y - startPoint.y)\n setRectPosition(this.rect, leftTop.x, leftTop.y, width, height)\n } else {\n setRectPosition(this.rect, 0, 0, 0, 0)\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n doSelect() { \n if (this.startPoint && this.endPoint) {\n const dis = this.startPoint.distanceTo(this.endPoint);\n if (dis < 0.1) { return }\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n const startDevice = vector3ToDevice(this.startPoint!, camera, w, h)\n const endDevice = vector3ToDevice(this.endPoint!, camera, w, h)\n const leftTop = { x: Math.min(startDevice.x, endDevice.x), y: Math.min(startDevice.y, endDevice.y) }\n const rightBottom = { x: Math.max(startDevice.x, endDevice.x), y: Math.max(startDevice.y, endDevice.y) }\n const list = this.searchMapInFrustum(leftTop, rightBottom);\n this.dispatchEvent({ type: \"selected\", list })\n }\n }\n\n searchMapInFrustum(leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): Graphic[] {\n const { context } = this\n return context.currentFloor?.graphicLayer.children.filter(item => {\n return item instanceof Graphic && this.searchChildInFrustum(item, leftTop, rightBottom)\n }) as Graphic[] || []\n }\n\n searchChildInFrustum(object: Graphic, leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): boolean {\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n if (!object) return false;\n if (!object.mesh) { \n // \u70B9\n const position = object.getPosition()\n if (position) {\n const position2d = vector3ToDevice(position, camera, w, h)\n return isContain(position2d, leftTop, rightBottom)\n }\n return false\n }\n if (!object.mesh.geometry.boundingBox) {\n object.mesh.geometry.computeBoundingBox();\n }\n const box = object.mesh.geometry.boundingBox;\n if (!box) { return false }\n const { min, max } = box\n const minDevice = vector3ToDevice(min, camera, w, h)\n const maxDevice = vector3ToDevice(max, camera, w, h)\n \n if (!isContain(minDevice, leftTop, rightBottom)) { return false }\n if (!isContain(maxDevice, leftTop, rightBottom)) { return false; }\n return true;\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}\n\n", "import { Graphic, Poi } from \"../../elements\";\nimport { Context } from \"../../context\";\nimport { EventDispatcher } from \"three\";\nimport { Timer } from \"../../utils\";\n\ninterface HoverHelperEventMap {\n \"hover-change\": {\n graphics: Graphic[]\n },\n}\n\nexport class HoverHelper extends EventDispatcher<HoverHelperEventMap> { \n\n curGraphics = new Set<Graphic>()\n\n timer = new Timer()\n\n graphicTimerMap = new Map<Graphic, number>()\n \n constructor(private context: Context) {\n super()\n this.registryEvent()\n }\n\n onPointerMove = ({ graphics, pois, e }: { graphics: Graphic[], pois: Poi[], e: PointerEvent }) => {\n const poiGraphics = pois\n .map(item => this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id))\n .filter(graphic => graphic && graphic.options.geometry.type === \"point\") as Graphic[]\n if (!graphics.length && !poiGraphics.length && this.curGraphics.size) {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n return\n }\n const { time } = this.context.config.hover\n const allGraphics = new Set<Graphic>()\n if (poiGraphics.length) { \n // \u627E\u79BB\u4E2D\u5FC3\u70B9\u6700\u65B0\u7684\u90A3\u4E2A\n let resGraphic: Graphic;\n let distance = 10000;\n poiGraphics.forEach(graphic => { \n const poi = pois.find(poi => poi.options.id === graphic.options.id)!\n const { x, y } = poi.clientPos\n let curDistance = Math.sqrt((x - e.offsetX) ** 2 + (y - e.offsetY) ** 2)\n if (curDistance < distance) {\n distance = curDistance\n resGraphic = graphic\n }\n })\n allGraphics.add(resGraphic!)\n }\n if (!allGraphics.size) { \n graphics.forEach(graphic => allGraphics.add(graphic))\n }\n allGraphics.forEach((graphic) => {\n // \u5982\u679C\u5DF2\u7ECF\u6709hover\u7684\u5B9A\u65F6\u5668\u5728\u6267\u884C\u4E86\u5C31\u8FD4\u56DE\n if (this.graphicTimerMap.get(graphic)) { \n return\n }\n // \u5982\u679C\u8FD9\u4E2A\u5143\u7D20\u7684hover\u5DF2\u7ECF\u89E6\u53D1\u8FC7\u4E86\u5C31\u8FD4\u56DE\n if (this.curGraphics.has(graphic)) { \n return\n }\n // \u8FD9\u4E2A\u5143\u7D20\u6CA1\u6709\u89E6\u53D1\u8FC7\u4E5F\u6CA1\u6709\u5B9A\u65F6\u5668\u5C31\u6DFB\u52A0\u4E00\u4E2A\u5B9A\u65F6\u5668\n const timer = this.timer.setTimeout(() => {\n this.curGraphics.add(graphic)\n this.graphicTimerMap.delete(graphic)\n this.timer.clearTimeout(timer)\n this.handleHoverGraphicsChange()\n }, time)\n this.graphicTimerMap.set(graphic, timer)\n })\n // \u5982\u679C\u5B9A\u65F6\u5668\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524Dgraphics\u4E2D\u4E86\u5C31\u5220\u9664\n this.graphicTimerMap.forEach((timer, graphic) => { \n if (!allGraphics.has(graphic)) { \n this.timer.clearTimeout(timer)\n this.graphicTimerMap.delete(graphic)\n }\n })\n // \u5982\u679C\u5DF2\u7ECFhover\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524D\u7684graphics\u4E86\u5C31\u5220\u9664\n const size = this.curGraphics.size\n this.curGraphics.forEach((graphic) => { \n if (!allGraphics.has(graphic)) { \n this.curGraphics.delete(graphic)\n }\n })\n // \u5982\u679C\u6709\u5220\u9664\u5C31\u89E6\u53D1\u4E8B\u4EF6\n if (size !== this.curGraphics.size) {\n this.handleHoverGraphicsChange()\n }\n }\n\n onPointerLevel = () => {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n }\n\n handleHoverGraphicsChange(graphics = this.curGraphics) { \n this.dispatchEvent({ type: 'hover-change', graphics: Array.from(graphics) })\n }\n\n registryEvent() {\n this.context.addEventListener(\"pointer-over\", this.onPointerMove)\n this.context.addEventListener(\"pointer-move\", this.onPointerMove)\n this.context.addEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"pointer-over\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-move\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.timer.dispose()\n }\n}", "import { Context } from \"../context\";\nimport {\n Color,\n LineBasicMaterial,\n MeshStandardMaterial,\n MeshBasicMaterial,\n ShaderMaterial,\n Vector3,\n DoubleSide\n} from \"three\";\n\nfunction vectorToString(vector: Vector3) {\n return `${vector.x}-${vector.y}-${vector.z}`;\n}\n\ninterface LineMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshStandardMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshBasicMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface ShaderMaterialOptions {\n gradualColor: string[];\n center: Vector3;\n maxValue: number;\n opacity: number;\n direction: Vector3;\n max: Vector3;\n min: Vector3;\n}\n\nexport class MaterialFactory {\n private lineMaterialMap = new Map<string, LineBasicMaterial>();\n\n private meshStandardMaterialMap = new Map<string, MeshStandardMaterial>();\n\n private meshBasicMaterialMap = new Map<string, MeshBasicMaterial>();\n\n private shaderMaterialMap = new Map<string, ShaderMaterial>();\n\n constructor(private context: Context) {}\n\n generateLineMaterialKey({ color, opacity }: LineMaterialOptions) {\n return `${color}-${opacity}`;\n }\n\n createLineMaterial({ color, opacity }: LineMaterialOptions) {\n const key = this.generateLineMaterialKey({ color, opacity });\n if (this.lineMaterialMap.has(key)) {\n return this.lineMaterialMap.get(key)!;\n }\n const lineMaterial = new LineBasicMaterial({\n color: new Color(color).convertLinearToSRGB(),\n transparent: true,\n opacity: opacity,\n });\n this.lineMaterialMap.set(key, lineMaterial);\n return lineMaterial;\n }\n\n createMeshStandardMaterial({ color, opacity }: MeshStandardMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshStandardMaterialMap.has(key)) {\n return this.meshStandardMaterialMap.get(key)!;\n }\n const material = new MeshStandardMaterial({\n color: new Color(color).convertLinearToSRGB(),\n roughness: 1,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n });\n this.meshStandardMaterialMap.set(key, material);\n return material;\n }\n\n createMeshBasicMaterial({ color, opacity }: MeshBasicMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshBasicMaterialMap.has(key)) {\n return this.meshBasicMaterialMap.get(key)!;\n }\n const material = new MeshBasicMaterial({\n color: color,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n });\n this.meshBasicMaterialMap.set(key, material);\n return material;\n }\n\n createShaderMaterial({\n gradualColor,\n center,\n maxValue,\n opacity,\n direction,\n max,\n min,\n }: ShaderMaterialOptions) {\n const key = `${gradualColor.toString()}-${vectorToString(\n center\n )}-${maxValue}-${opacity}-${vectorToString(direction)}`;\n if (this.shaderMaterialMap.has(key)) {\n return this.shaderMaterialMap.get(key)!;\n }\n // \u81EA\u5B9A\u4E49\u7740\u8272\u5668\u4EE3\u7801\n const vertexShader = `\n uniform vec3 uColor;\n uniform vec3 uGradualColor;\n uniform vec3 center;\n uniform vec3 uDirection;\n uniform vec3 uMax;\n uniform vec3 uMin;\n uniform float maxValue;\n varying vec3 vColor; \n\n void main() {\n vec3 lineVec = uMax - uMin; // \u7EBF\u6BB5AB\u7684\u65B9\u5411\u5411\u91CF\n vec3 AP = position - uMin; // \u5411\u91CFAP\n float t = dot(AP, lineVec) / dot(lineVec, lineVec); // \u53C2\u6570t\n t = clamp(t, 0.0, 1.0); // \u9650\u5236t\u5728[0, 1]\u8303\u56F4\u5185\uFF0C\u786E\u4FDD\u6700\u77ED\u8DDD\u79BB\u5728\u7EBF\u6BB5AB\u4E0A\n \n vec3 closestPoint = uMin + t * lineVec; // \u6700\u77ED\u8DDD\u79BB\u70B9\u7684\u4F4D\u7F6E\n vec3 vecAP = closestPoint - uMin; // \u5411\u91CFAP'\n float distance = length(vecAP);\n float maxLen = length(lineVec);\n\n vec3 direction = normalize(uDirection);\n float gradient = dot(normalize(normal), normalize(uDirection));\n vec3 currentPosition = position - center;\n // float colorFactor = (dot(direction, currentPosition) / maxValue) * 0.5 + 0.5;\n float colorFactor = distance / maxLen;\n\n vColor = mix(uColor, uGradualColor, 1.0 - t);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `;\n\n const fragmentShader = `\n varying vec3 vColor;\n uniform float opacity;\n\n void main() {\n gl_FragColor = vec4(vColor.x, vColor.y, vColor.z, opacity);\n }\n `;\n\n // \u521B\u5EFA\u81EA\u5B9A\u4E49ShaderMaterial\n const material = new ShaderMaterial({\n uniforms: {\n uColor: {\n value: new Color(gradualColor[0]).convertLinearToSRGB(),\n },\n uGradualColor: {\n value: new Color(gradualColor[1]).convertLinearToSRGB(),\n },\n center: {\n value: center,\n },\n maxValue: {\n value: maxValue,\n },\n opacity: {\n value: opacity,\n },\n uDirection: {\n value: direction,\n },\n uMax: {\n value: max,\n },\n uMin: {\n value: min,\n },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n side: DoubleSide,\n });\n this.shaderMaterialMap.set(key, material);\n return material;\n }\n\n dispose() {\n this.lineMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.lineMaterialMap.clear();\n\n this.meshStandardMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.meshStandardMaterialMap.clear();\n\n this.meshBasicMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.meshBasicMaterialMap.clear();\n\n this.shaderMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.shaderMaterialMap.clear();\n }\n}\n", "import { Box3, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { vector3ToDevice } from \"./coordinate\";\n\nexport class CameraBound {\n private prevCamera = {\n position: new Vector3(),\n zoom: 1,\n target: new Vector3()\n }\n\n private enable = true;\n\n constructor(private context: Context) {\n this.registryEvent()\n this.changePrevCamera()\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n changePrevCamera() {\n this.prevCamera = {\n position: this.context.camera.position.clone(),\n zoom: this.context.camera.zoom,\n target: this.context.control.target.clone()\n }\n }\n\n backToPrevCamera() {\n this.setEnable(false)\n this.context.camera.position.copy(this.prevCamera.position)\n this.context.camera.zoom = this.prevCamera.zoom;\n this.context.control.target.copy(this.prevCamera.target)\n this.context.control.update()\n this.setEnable(true)\n }\n\n registryEvent() { \n this.context.addEventListener(\"control-change\", this.onCameraChange)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"control-change\", this.onCameraChange)\n }\n\n getCurFloorScreenPosition() {\n if (!this.context.currentFloor) {\n return null\n }\n const box = new Box3().setFromObject(this.context.currentFloor.groundUpper);\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const lb = vector3ToDevice(min, camera, w, h)\n const rt = vector3ToDevice(max, camera, w, h)\n const lt = vector3ToDevice(new Vector3(min.x, max.y, max.z), camera, w, h)\n const rb = vector3ToDevice(new Vector3(max.x, min.y, min.z), camera, w, h)\n const left = Math.min(lb.x, rt.x, lt.x, rb.x)\n const right = Math.max(lb.x, rt.x, lt.x, rb.x)\n const top = Math.min(lb.y, rt.y, lt.y, rb.y)\n const bottom = Math.max(lb.y, rt.y, lt.y, rb.y)\n return { left, right, top, bottom }\n }\n\n /**\n * \u68C0\u6D4B\u5730\u56FE\u662F\u4E0D\u662F\u5728\u663E\u793A\u8303\u56F4\n * @param param0 \n * @returns \n */\n checkDistanceToScreenEdge({ left, right, top, bottom }: { left: number, right: number, top: number, bottom: number }) { \n const { width, height } = this.context.clientSize\n const [pt, pr, pb, pl] = this.context.config.cameraBound.padding\n // console.log(left, left <= pl , width - right, width - right <= pr , top <= pt , height - bottom <= pb)\n // \u6240\u6709\u7684\u8FB9\u90FD\u4E0D\u8D85\u51FA\n return (left <= pl && width - right <= pr && top <= pt && height - bottom <= pb)\n }\n\n onCameraChange = () => {\n // \u5224\u65AD\u5982\u679C\u8D85\u51FA\u5C31\u7528\u4E4B\u524D\u7684prevCamera\n // \u83B7\u53D6\u5730\u56FE\u7684\u5C4F\u5E55\u4F4D\u7F6E\n // \u5148\u4E0D\u505A\u8FB9\u754C\u5224\u65AD\n // const bound = this.getCurFloorScreenPosition();\n // if (bound) {\n // const { left, right, top, bottom } = bound\n // const isInBound = this.checkDistanceToScreenEdge({ left, right, top, bottom });\n // console.log(\"isInBound\", isInBound)\n // if (isInBound) {\n // this.changePrevCamera()\n // } else {\n // this.backToPrevCamera()\n // }\n // }\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\n apiPath: {\n floorGraphic: string,\n floorRange: string\n },\n resizeObserver: boolean;\n heatMap: Partial<HeatmapConfiguration>,\n useFloorCache: boolean;\n control: {\n maxPolar: number;\n defaultPolar: number;\n defaultAzimuthal: number;\n },\n defaultPadding: [number, number, number, number];\n initTransToMark: boolean;\n svg: {\n circle: {\n radius: string;\n fill: string;\n },\n line: {\n stroke: string;\n }\n },\n selectBox: {\n stroke: string;\n fill: string;\n },\n hover: {\n time: number;\n },\n ground: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean,\n strokeColor: string,\n strokeOpacity: number\n },\n markGraphic: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean;\n strokeColor: string;\n strokeOpacity: number;\n },\n graphic: {\n fillOpacity: number,\n },\n cameraBound: {\n padding: [number, number, number, number]\n },\n poi: {\n boxScale: number;\n }\n}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\n apiPath: {\n floorGraphic: \"/api/inception-map/floor/get\",\n floorRange: \"/api/inception-map/range/get\"\n },\n resizeObserver: false,\n initTransToMark: false,\n heatMap: {\n radius: 50,\n gradient: {\n 0: '#8F9FCD',\n 0.5: '#6284FF',\n 1: '#F95D5D',\n },\n },\n useFloorCache: true,\n control: {\n maxPolar: 1.2,\n defaultPolar: 1.1,\n defaultAzimuthal: 0,\n },\n defaultPadding: [20, 20, 20, 20],\n svg: {\n circle: {\n radius: \"2\",\n fill: \"#1CADFF\"\n },\n line: {\n stroke: \"#1CADFF\"\n }\n },\n selectBox: {\n stroke: \"#1CADFF\",\n fill: \"rgba(28, 173, 255, 0.3)\"\n },\n hover: {\n time: 100\n },\n ground: {\n color: \"#F6F6F6\",\n opacity: 1,\n height: 0.001,\n stroke: false, \n strokeColor: \"#E6E6E6\",\n strokeOpacity: 1\n },\n markGraphic: {\n color: \"#EEF0F3\",\n opacity: 1,\n height: 0.001,\n stroke: false,\n strokeColor: \"#000\",\n strokeOpacity: 1\n },\n graphic: {\n fillOpacity: 1,\n },\n cameraBound: {\n padding: [150, 150, 150, 150]\n },\n poi: {\n boxScale: 1.0\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\n}"],
5
- "mappings": "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",
6
- "names": ["import_three", "Timer", "__publicField", "fn", "timer", "wait", "import_three", "import_MapControls", "initScene", "scene", "initRenderer", "renderer", "initCamera", "width", "height", "camera", "initLight", "lights", "ambientLight", "initControl", "domElement", "control", "initShape", "path", "holePath", "shape", "item", "cur", "hole", "initDirectionalLight", "color", "intensity", "directionalLight", "dispose", "o", "recursive", "_a", "child", "m", "mat", "hasChinese", "str", "import_three", "textTextureMap", "initCanvas", "canvas", "ctx", "createCanvas", "c", "t", "getTextureByText", "text", "y", "hasChinese", "width", "imageData", "texture", "clearTextTexture", "clearCanvas", "import_three", "import_turf", "vector3ToDevice", "vector", "camera", "w", "h", "_vector", "_w", "_h", "x", "y", "getCenter", "coordinates", "features", "item", "isContain", "point", "start", "end", "getLongestSideDir", "cds", "maxDistance", "dir", "i", "point_0", "point_1", "distance", "proxyOptions", "target", "master", "p", "receiver", "newValue", "oldValue", "res", "timeoutPromise", "promise", "timeout", "resolve", "reject", "createSvgElement", "tag", "createSvg", "w", "h", "svg", "createCircle", "radius", "fill", "circle", "createLine", "stroke", "line", "createRect", "rect", "setCirclePosition", "x", "y", "setLineStartEnd", "start", "end", "setRectPosition", "sleepOnePromise", "sleepOneRf", "resolve", "strToNumber", "str", "addAlphaToHexColor", "hexColor", "alpha", "r", "g", "b", "newR", "newG", "newB", "darkenColor", "factor", "numbers", "import_GLTFLoader", "createLoader", "loader", "modelMap", "loadModel", "url", "gltf", "p", "resolve", "reject", "disposeLoader", "isMac", "isControl", "key", "isMac", "import_three", "import_tween", "import_three", "import_three", "defaultOptions", "Graphic", "context", "options", "__publicField", "proxyOptions", "__spreadValues", "x", "y", "value", "_a", "center", "box", "size", "shape", "initShape", "material", "material1", "darkenColor", "pos", "dir", "minOrigin", "raycaster", "min", "maxOrigin", "raycaster2", "max", "_max", "maxValue", "__max", "_min", "dir2", "___max", "__min", "lineMaterial", "points", "height", "coords", "j", "curCds", "i", "cur", "next", "lineGeometry", "line", "intersects", "position", "distance", "import_three", "Shadow", "__publicField", "directionalLight", "initDirectionalLight", "size", "x", "y", "color", "position", "width", "height", "geometry", "material", "mesh", "target", "opacity", "dispose", "import_three", "import_three", "import_lodash", "defaultOptions", "Overlay", "context", "options", "__publicField", "__spreadValues", "observer", "max", "min", "centerX", "centerY", "width", "height", "positions", "obj", "key", "x", "y", "vector3ToDevice", "clientWidth", "clientHeight", "halfWidth", "halfHeight", "placements", "i", "placement", "position", "div", "element", "visible", "display", "opacity", "clientX", "clientY", "force", "vector", "_a", "_b", "defaultOptions", "Poi", "context", "options", "_a", "_b", "_c", "__publicField", "proxyOptions", "__spreadValues", "Overlay", "x", "y", "height", "value", "__async", "sleepOnePromise", "width", "div", "icon", "text", "textDiv", "f", "item", "key", "img", "visible", "boxScale", "w", "h", "box", "import_three", "import_three", "import_three", "Layer", "context", "dispose", "GraphicLayer", "Layer", "context", "__publicField", "options", "graphic", "Graphic", "id", "raycaster", "initData", "data", "res", "item", "pos", "distance", "import_lodash", "PoiLayer", "Layer", "context", "__publicField", "Timer", "force", "item", "options", "poi", "Poi", "index", "id", "i", "x", "y", "range", "left", "right", "top", "bottom", "valid", "box", "import_three", "import_heatmap", "import_turf", "HeatmapElement", "context", "__publicField", "data", "width", "height", "leftTop", "center", "__spreadValues", "geometry", "texture", "material", "x", "y", "matrix", "item", "vector", "features", "box", "getCenter", "import_three", "Model", "context", "options", "__publicField", "__async", "object", "loadModel", "_a", "poi", "dispose", "Floor", "context", "__publicField", "Shadow", "GraphicLayer", "PoiLayer", "options", "ground", "Graphic", "grounds", "model", "Model", "box", "center", "size", "graphicOptions", "poiOptions", "data", "HeatmapElement", "opacity", "visible", "_a", "import_three", "BaseSvg", "context", "__publicField", "width", "height", "createSvg", "enable", "e", "camera", "renderer", "x", "y", "clientWidth", "clientHeight", "nx", "ny", "vector", "container", "vector3ToDevice", "SvgLine", "BaseSvg", "context", "__publicField", "point1", "setCirclePosition", "setLineStartEnd", "point2", "e", "point", "x", "y", "circle", "line", "createCircle", "createLine", "enable", "vector", "distance", "x1", "y1", "x2", "y2", "__pow", "SvgPolygon", "BaseSvg", "context", "__publicField", "point", "index", "devicePoint", "setCirclePosition", "setLineStartEnd", "e", "x", "y", "fill", "radius", "stroke", "circle", "createCircle", "line", "createLine", "enable", "cx", "cy", "__pow", "vector", "area", "cds", "item", "numPoints", "i", "j", "import_three", "SelectBox", "BaseSvg", "context", "__publicField", "box", "camera", "w", "h", "min", "max", "leftBottom", "vector3ToDevice", "rightTop", "setRectPosition", "left", "bottom", "right", "top", "halfWidth", "corners", "i", "centerHalfWidth", "centerX", "centerY", "centers", "line", "createRect", "enable", "graphic", "import_three", "BoxSelection", "BaseSvg", "context", "__publicField", "e", "point", "startPoint", "endPoint", "__spreadValues", "leftTop", "width", "height", "setRectPosition", "fill", "stroke", "createRect", "enable", "camera", "w", "h", "startDevice", "vector3ToDevice", "endDevice", "rightBottom", "list", "_a", "item", "Graphic", "object", "position", "position2d", "isContain", "box", "min", "max", "minDevice", "maxDevice", "Selection", "context", "__publicField", "e", "offsetX", "offsetY", "x", "y", "__pow", "graphics", "graphicIdSet", "item", "_a", "graphic", "isMac", "isControl", "list", "BoxSelection", "import_three", "HoverHelper", "context", "__publicField", "Timer", "graphics", "pois", "e", "poiGraphics", "item", "_a", "graphic", "time", "allGraphics", "resGraphic", "distance", "poi", "x", "y", "curDistance", "__pow", "timer", "size", "import_three", "vectorToString", "vector", "MaterialFactory", "context", "__publicField", "color", "opacity", "key", "lineMaterial", "material", "gradualColor", "center", "maxValue", "direction", "max", "min", "vertexShader", "fragmentShader", "val", "_", "import_three", "CameraBound", "context", "__publicField", "enable", "box", "camera", "w", "h", "min", "max", "lb", "vector3ToDevice", "rt", "lt", "rb", "left", "right", "top", "bottom", "width", "height", "pt", "pr", "pb", "pl", "Context", "container", "config", "__publicField", "initScene", "initRenderer", "initLight", "Timer", "TweenGroup", "camera", "renderer", "w", "h", "e", "graphics", "position", "pois", "isMultipleSelect", "Selection", "HoverHelper", "MaterialFactory", "x", "y", "width", "height", "initCamera", "initControl", "_a", "polarAngle", "CameraBound", "point1", "point2", "clientWidth", "clientHeight", "device1", "vector3ToDevice", "device2", "__pow", "color", "item", "floor", "point", "raycaster", "polar", "duration", "timeoutPromise", "resolve", "start", "end", "tween", "azimuthal", "zoom", "center", "lookAtVector", "object", "padding", "force2DView", "top", "right", "bottom", "left", "boundingBox", "max", "min", "leftTop", "rightTop", "rightBottom", "leftBottom", "leftTop2d", "rightTop2d", "leftBottom2d", "rightBottom2d", "size", "xScale", "yScale", "scale", "light", "dispose", "import_lodash", "defaultConfig", "getConfig", "config", "import_lodash", "MapTypePolar", "BMap", "container", "config", "__publicField", "zoom", "e", "polar", "azimuthal", "basicZoom", "getConfig", "Context", "_0", "__async", "brand", "project", "phase", "building", "floor", "ts", "resource_type_list", "apiDomain", "floorGraphic", "apiInfo", "url", "res", "item", "key", "floorRange", "data", "floorKey", "buildGround", "center", "getCenter", "cds", "coord", "x", "y", "ground", "markGraphic", "graphic", "i", "curFloor", "Floor", "legacyToGraphicMap", "graphics", "curFloorData", "buildingKey", "createdFloor", "options", "_a", "model", "__spreadProps", "__spreadValues", "facilityAngle", "facilityXScale", "facilityYScale", "Graphic", "position", "ele", "duration", "z", "vector", "clientWidth", "clientHeight", "vector3ToDevice", "type", "time", "cameraZoom", "observe", "keys", "radius", "resolve", "reject", "SvgLine", "dispose", "distance", "SvgPolygon", "area", "nodeId", "id", "clearTextTexture", "clearCanvas", "disposeLoader"]
4
+ "sourcesContent": ["import { EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { Context } from \"./context\";\nimport {\n clearTextTexture,\n clearCanvas,\n vector3ToDevice,\n getCenter,\n timeoutPromise,\n Timer\n} from \"./utils\";\nimport { Config, getConfig } from \"./config\";\nimport {\n Floor,\n Graphic,\n HeatmapDataParam,\n ModelOptions,\n PoiOptionsParam,\n} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport {\n GraphicInfo,\n GraphicOptions,\n PolygonGeometry,\n ResGraphicInfo,\n} from \"./types\";\nimport { debounce } from \"lodash\";\nimport { disposeLoader } from \"./utils/model\";\n\nexport interface LoadQuery {\n brand: string;\n project: string;\n phase: string;\n building: string;\n floor: string;\n ts: string;\n resource_type_list: string;\n}\n\ninterface BmapEventMap {\n \"zoom-change\": {\n basicZoom: number;\n cameraZoom: number;\n };\n}\n\nexport type MapType = \"2d\" | \"3d\";\n\nexport enum MapTypePolar {\n D2 = 0,\n D3 = 1.1,\n}\n\nexport class BMap extends EventDispatcher<BmapEventMap> {\n config: Config;\n\n public context: Context;\n\n private polarKeys: string[] = [];\n\n private azimuthalKeys: string[] = [];\n\n private svgLine?: SvgLine;\n\n private svgPolygon?: SvgPolygon;\n\n public basicZoom = 1;\n\n private prevCameraZoom = 1;\n\n type: MapType = \"2d\";\n\n floorDataMap: Map<string, GraphicInfo[]> = new Map();\n\n buildingGroundMap = new Map<string, GraphicInfo | null>();\n\n currentBuildGround: GraphicInfo | null = null;\n\n private observe: ResizeObserver | null = null;\n\n timer = new Timer();\n\n constructor(\n private container: HTMLElement,\n config: Partial<Config> = {}\n ) {\n super();\n this.config = getConfig(config);\n this.context = new Context(container, this.config);\n this.registryEvent();\n this.context.render();\n }\n\n private async loadGraphics({\n brand,\n project,\n phase,\n building,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery): Promise<GraphicInfo[]> {\n const {\n apiDomain,\n apiPath: { floorGraphic },\n apiInfo,\n } = this.config;\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`;\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo[] => {\n (res || []).map((item) => (item.info = JSON.parse(item.info)));\n return (res || []) as unknown as GraphicInfo[];\n });\n return data;\n }\n\n getBuildingKey({\n brand,\n project,\n phase,\n building,\n }: Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">) {\n const key = `${brand}-${project}-${phase}-${building}`;\n return key;\n }\n\n private async loadBuildingGround({\n brand,\n project,\n phase,\n building,\n }: Omit<\n LoadQuery,\n \"floor\" | \"ts\" | \"resource_type_list\"\n >): Promise<GraphicInfo | null> {\n const key = this.getBuildingKey({ brand, project, phase, building });\n if (this.buildingGroundMap.get(key)) {\n return this.buildingGroundMap.get(key) || null;\n }\n const {\n apiDomain,\n apiPath: { floorRange },\n apiInfo,\n } = this.config;\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${phase}&building=${building}`;\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo | null => {\n const data = (res || [])[0];\n if (data) {\n data.info = JSON.parse(data.info);\n }\n return data as unknown as GraphicInfo | null;\n });\n this.buildingGroundMap.set(key, data);\n return data;\n }\n\n getFloorKey({\n brand,\n project,\n phase,\n building,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = `${brand}-${project}-${phase}-${building}-${floor}-${ts}-${resource_type_list}`;\n return floorKey;\n }\n\n async load({\n brand,\n project,\n phase,\n building,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = this.getFloorKey({\n brand,\n project,\n phase,\n building,\n floor,\n ts,\n resource_type_list,\n });\n if (this.floorDataMap.get(floorKey)) {\n return;\n }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({\n brand,\n project,\n phase,\n building,\n floor,\n ts,\n resource_type_list,\n }),\n this.loadBuildingGround({ brand, project, phase, building }),\n ]);\n if (buildGround) {\n const center = getCenter(\n (buildGround.info.geometry as PolygonGeometry).cds[0]\n );\n data.forEach((item) => {\n item.info.geometry.coords = JSON.parse(\n JSON.stringify(item.info.geometry.cds)\n );\n if (item.info.geometry.type === \"polygon\") {\n item.info.geometry.coords.map((cds) => {\n if (Array.isArray(cds)) {\n cds.forEach((coord) => {\n coord[0] -= center[0];\n coord[1] -= center[1];\n });\n }\n });\n } else {\n // point\n const [x, y] = item.info.geometry.cds;\n item.info.geometry.coords = [x - center[0], y - center[1]];\n }\n item.info.transformToBuildingGround = true;\n });\n }\n const { ground, markGraphic, graphic } = this.config;\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n item.info.deltaHeight = 0.00001 * (i + 1);\n if (item.info.group === \"ground\") {\n item.info.fillColor = ground.color;\n item.info.fillOpacity = ground.opacity;\n item.info.height = ground.height;\n item.info.stroke = ground.stroke;\n item.info.strokeColor = ground.strokeColor;\n item.info.strokeOpacity = ground.strokeOpacity;\n } else if (item.info.userData.mark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.fillOpacity = markGraphic.opacity;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n } else {\n item.info.fillOpacity = graphic.fillOpacity;\n if (this.config.initTransToMark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n }\n }\n }\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear();\n }\n this.floorDataMap.set(floorKey, data);\n return data;\n }\n\n private createFloor(data: GraphicInfo[]) {\n const curFloor = new Floor(this.context);\n if (!data.length) {\n return { curFloor, graphics: [] };\n }\n const legacyToGraphicMap = new Map<string, Graphic>();\n const graphics = [];\n for (const item of data) {\n if (item.info.group === \"ground\") {\n curFloor.createGround(item.info);\n } else {\n const graphic = curFloor.addGraphic(item.info);\n graphic.userData.data = item;\n legacyToGraphicMap.set(item.legacy_id, graphic);\n graphics.push(graphic);\n }\n }\n // curFloor.addShadow()\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap;\n return { curFloor, graphics };\n }\n\n switchFloor({\n brand,\n project,\n phase,\n building,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = this.getFloorKey({\n brand,\n project,\n phase,\n building,\n floor,\n ts,\n resource_type_list,\n });\n const curFloorData = this.floorDataMap.get(floorKey);\n this.context.control.removeEventListener(\"change\", this.onControlChange);\n if (curFloorData) {\n const buildingKey = this.getBuildingKey({\n brand,\n project,\n phase,\n building,\n });\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null;\n const createdFloor = this.createFloor(curFloorData);\n if (createdFloor) {\n this.context.cameraBound.setEnable(false);\n this.context.switchFloor(createdFloor.curFloor);\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, 0);\n this.context.fitCameraToGround(undefined, 0);\n this.basicZoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n this.context.control.addEventListener(\"change\", this.onControlChange);\n if (this.type === \"3d\") {\n this.context.fitCameraToGround(this.config.defaultPadding, 0, false);\n }\n this.onControlChange();\n this.context.cameraBound.setEnable(true);\n } else {\n console.warn(\"[switchFloor error] [\" + floor + \"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\");\n }\n } else {\n console.warn(\n \"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\"\n );\n }\n }\n\n onControlChange = () => {\n const {\n camera: { zoom },\n } = this.context;\n if (zoom !== this.prevCameraZoom) {\n this.dispatchEvent({\n type: \"zoom-change\",\n basicZoom: this.basicZoom,\n cameraZoom: this.context.camera.zoom,\n });\n this.prevCameraZoom = zoom;\n }\n };\n\n // \u6276\u68AF\n addModel(graphic: Graphic, options: ModelOptions) {\n // \u6839\u636E\u6700\u957F\u8FB9\uFF0C\u83B7\u53D6\u6276\u68AF\u7684\u65B9\u5411\n if (graphic.options.geometry.type === \"polygon\") {\n // \u6839\u636E\u65B9\u5411\u6E32\u67D3\u6A21\u578B\n const model = this.context.currentFloor?.addModel({\n ...options,\n position: graphic.getPosition().setZ(0.1),\n id: graphic.options.id,\n });\n if (model) {\n const {\n facilityAngle = 0,\n facilityXScale = 1,\n facilityYScale = 1,\n } = graphic.options.userData;\n model.rotateZ(((180 - facilityAngle) / 180) * Math.PI);\n model.scale.set(facilityXScale, facilityYScale, 1);\n }\n }\n }\n\n addHeatmap(data: HeatmapDataParam) {\n return this.context.currentFloor?.addHeatmap(data);\n }\n\n getLegacyToGraphicMap(): Map<string, Graphic> {\n return this.context.currentFloor?.userData.legacyToGraphicMap || new Map();\n }\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u697C\u5C42\u5168\u90E8\u7684graphic\n * @returns\n */\n getFloorAllGraphics(): Graphic[] {\n return (\n (this.context.currentFloor?.graphicLayer.children.filter(\n (item) => item instanceof Graphic\n ) as Graphic[]) || []\n );\n }\n\n createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) {\n if (this.context.currentFloor) {\n if (options.id === undefined) {\n options.id = graphic.options.id;\n }\n const position = graphic.getCenter();\n const poi = this.context.currentFloor.addPoi({\n ...options,\n position: { ...position, z: position.z + graphic.options.height / 2 },\n });\n return poi;\n }\n return null;\n }\n\n removeHeatMap() {\n this.context.currentFloor?.removeHeatMap();\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n translateElementToCenter(\n ele: { getPosition: () => Vector3 },\n duration: number = 500\n ) {\n const position = ele.getPosition();\n return this.context.setCameraPosition(position, duration);\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n async translateElementToCenterX(\n ele: { getPosition: () => Vector3 },\n duration: number = 500\n ) {\n return timeoutPromise(new Promise((resolve) => { \n const target = this.context.control.target.clone();\n const position = ele.getPosition();\n this.timer.requestAnimationFrame(() => { \n const {\n clientSize: { width, height },\n camera,\n } = this.context;\n console.log(\"width\", width, height);\n const device = vector3ToDevice(position, camera, width, height);\n const offsetX = device.x - width / 2;\n const v3 = new Vector3();\n v3.setFromMatrixColumn(this.context.camera.matrix, 0);\n v3.normalize();\n v3.multiplyScalar(offsetX / this.context.camera.zoom);\n target.add(v3)\n this.context.setCameraPosition(target, duration).then(resolve)\n })\n }), duration + 500)\n \n }\n\n /**\n * \u83B7\u53D6\u7269\u4F53\u7684\u5C4F\u5E55\u5750\u6807\n */\n getElementDeviceCoordinate(ele: Object3D) {\n const vector = ele.position.clone();\n const { clientWidth, clientHeight } = this.container;\n return vector3ToDevice(\n vector,\n this.context.camera,\n clientWidth,\n clientHeight\n );\n }\n\n /**\n * \u5207\u63622d\u30013d\u89C6\u89D2\n * @param type\n * @param duration\n */\n changeMapType(type: MapType, duration = 500) {\n this.type = type;\n if (type === \"2d\") {\n return this.context.setPolarAngle(MapTypePolar.D2, duration);\n } else {\n return this.context.setPolarAngle(MapTypePolar.D3, duration);\n }\n }\n\n async resetView(duration = 300) {\n const time = duration / 3;\n await this.context.setAzimuthalAngle(\n this.config.control.defaultAzimuthal,\n time\n );\n await this.changeMapType(this.type, time);\n await this.context.fitCameraToGround(\n this.config.defaultPadding,\n time,\n false\n );\n }\n\n /**\n * \u7F29\u5C0F\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n reduceMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom - zoom,\n this.context.control.target,\n duration\n );\n }\n\n /**\n * \u653E\u5927\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n enlargeMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom + zoom,\n this.context.control.target,\n duration\n );\n }\n\n onKeydown = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n this.context.control.maxPolarAngle = this.config.control.maxPolar;\n this.context.control.minPolarAngle = 0;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n this.context.control.maxAzimuthAngle = Infinity;\n this.context.control.minAzimuthAngle = Infinity;\n }\n };\n\n onKeyUp = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n const polar = this.context.control.getPolarAngle();\n this.context.control.maxPolarAngle = polar;\n this.context.control.minPolarAngle = polar;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal;\n this.context.control.minAzimuthAngle = azimuthal;\n }\n };\n\n registryEvent() {\n window.addEventListener(\"keydown\", this.onKeydown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n if (this.config.resizeObserver) {\n const observe = new ResizeObserver(debounce(this.resize, 5));\n observe.observe(this.container);\n this.observe = observe;\n }\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"keydown\", this.onKeydown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n this.observe?.disconnect();\n this.observe = null;\n }\n\n /**\n * \u914D\u7F6E\u5750\u6807\u5B9A\u70B9 2D/3D\u7EBF\u6027\u5207\u6362\u7684\u5FEB\u6377\u952E\n * @param key\n */\n configurePolarShortcutKeys(keys: string[]) {\n this.polarKeys = keys;\n }\n\n configureAzimuthalShortcutKeys(keys: string[]) {\n this.azimuthalKeys = keys;\n }\n\n rotateMap(radius = 0.1) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal + radius;\n this.context.control.minAzimuthAngle = azimuthal + radius;\n this.context.control.update();\n }\n\n /**\n * \u6D4B\u91CF\u8DDD\u79BB\n * @returns\n */\n async measureDistance() {\n this.cancelDistance();\n return new Promise((resolve, reject) => {\n this.changeMapType(\"2d\", 0);\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgLine = new SvgLine(this.context);\n const dispose = this.svgLine.dispose.bind(this.svgLine);\n this.svgLine.dispose = function () {\n dispose();\n reject(\"cancel\");\n };\n this.svgLine.addEventListener(\"distance\", ({ distance }) => {\n resolve(distance);\n });\n });\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u957F\u5EA6\n */\n cancelDistance() {\n if (this.svgLine) {\n this.svgLine.dispose();\n this.svgLine = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6D4B\u91CF\u9762\u79EF\n */\n measureArea() {\n this.cancelArea();\n return new Promise((resolve, reject) => {\n this.changeMapType(\"2d\", 0);\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgPolygon = new SvgPolygon(this.context);\n const dispose = this.svgPolygon.dispose.bind(this.svgPolygon);\n this.svgPolygon.dispose = function () {\n dispose();\n reject(\"cancel\");\n };\n this.svgPolygon.addEventListener(\"area\", ({ area }) => {\n resolve(area);\n });\n });\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u9762\u79EF\n */\n cancelArea() {\n if (this.svgPolygon) {\n this.svgPolygon.dispose();\n this.svgPolygon = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6839\u636EnodeId \u83B7\u53D6graphic\n */\n getGraphicByNodeId(nodeId: string) {\n return (\n this.context.currentFloor?.graphicLayer.getGraphicByNodeId(nodeId) || null\n );\n }\n\n deleteGraphic(graphic: Graphic) {\n this.context.currentFloor?.graphicLayer.removeGraphic(graphic);\n }\n\n createGraphicByOptions(options: GraphicOptions) {\n if (!options.transformToBuildingGround) {\n if (this.currentBuildGround) {\n const center = getCenter(\n (this.currentBuildGround.info.geometry as PolygonGeometry).cds[0]\n );\n if (options.geometry.type === \"polygon\") {\n options.geometry.coords = JSON.parse(\n JSON.stringify(options.geometry.cds)\n );\n options.geometry.coords.map((cds) => {\n if (Array.isArray(cds)) {\n cds.forEach((coord) => {\n coord[0] -= center[0];\n coord[1] -= center[1];\n });\n }\n });\n } else {\n // point\n const [x, y] = options.geometry.cds;\n options.geometry.coords = [x - center[0], y - center[1]];\n }\n }\n }\n return this.context.currentFloor?.graphicLayer.createGraphic(options);\n }\n\n removePoiById(id: string) {\n return this.context.currentFloor?.poiLayer.removePoiById(id);\n }\n\n getPoiById(id: string) {\n return this.context.currentFloor?.poiLayer.getPoiById(id);\n }\n\n getPois() {\n return (this.context.currentFloor?.poiLayer.pois || []).filter(\n (item) => !item.options.built_in\n );\n }\n\n clearPoi() {\n if (this.context.currentFloor) {\n this.context.currentFloor.poiLayer.clear();\n }\n }\n\n removeSelectGraphic(graphic: Graphic) {\n this.context.selection.remove(graphic);\n }\n\n resize = () => {\n this.context.cameraBound.setEnable(false);\n this.context.onWindowResize();\n const azimuthal = this.context.control.getAzimuthalAngle();\n const zoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(0, 0);\n const basicZoom = this.context.getFitCameraToGroundZoom(undefined, 0);\n this.basicZoom = basicZoom || 0;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = this.basicZoom;\n this.context.control.maxZoom = this.basicZoom * 25;\n this.context.camera.zoom = zoom;\n this.context.control.addEventListener(\"change\", this.onControlChange);\n this.context.setAzimuthalAngle(azimuthal, 0);\n this.context.cameraBound.setEnable(true);\n };\n\n dispose() {\n this.timer.dispose();\n this.context.dispose();\n this.floorDataMap.clear();\n this.buildingGroundMap.clear();\n clearTextTexture();\n clearCanvas();\n disposeLoader();\n this.unRegistryEvent();\n }\n}\n", "type Fn = (...arg: any) => any\n\n/**\n * \u4EFB\u52A1\u7BA1\u7406\u5668\n * \u5728\u7C7B\u9500\u6BC1\u7684\u65F6\u5019\uFF0C\u8981\u6E05\u9664\u6240\u6709\u7684\u5F02\u6B65\u5B9A\u65F6\u5668\n */\nexport class Timer { \n tasks = {\n requestAnimation: new Set<number>(),\n timeout: new Set<number>(),\n interval: new Set<number>()\n }\n\n requestAnimationFrame(fn: Fn): number { \n const timer = window.requestAnimationFrame(() => {\n this.tasks.requestAnimation.delete(timer)\n fn()\n })\n this.tasks.requestAnimation.add(timer)\n return timer\n }\n\n cancelAnimationFrame(timer: number) { \n this.tasks.requestAnimation.delete(timer)\n window.cancelAnimationFrame(timer)\n }\n\n setTimeout(fn: Fn, wait: number): number { \n const timer = window.setTimeout(() => {\n this.tasks.timeout.delete(timer)\n fn()\n }, wait)\n this.tasks.timeout.add(timer)\n return timer\n }\n\n clearTimeout(timer: number) {\n this.tasks.timeout.delete(timer)\n window.clearTimeout(timer)\n }\n\n setInterval(fn: Fn, wait: number): number { \n const timer = window.setInterval(() => {\n this.tasks.interval.delete(timer)\n fn()\n }, wait)\n this.tasks.interval.add(timer)\n return timer\n }\n\n clearInterval(timer: number) {\n this.tasks.interval.delete(timer)\n window.clearInterval(timer)\n }\n\n dispose() { \n this.tasks.requestAnimation.forEach(timer => {\n window.cancelAnimationFrame(timer)\n })\n this.tasks.requestAnimation.clear()\n this.tasks.timeout.forEach(timer => {\n window.clearTimeout(timer)\n })\n this.tasks.timeout.clear()\n this.tasks.interval.forEach(timer => {\n window.clearInterval(timer)\n }) \n this.tasks.interval.clear()\n }\n}", "import { Coordinate } from 'src/types'\nimport {\n Scene, WebGLRenderer, OrthographicCamera, HemisphereLight, Shape, \n PCFSoftShadowMap, Group, Color, DirectionalLight, AmbientLight, Path, Vector2\n} from 'three'\nimport { MapControls } from 'three/examples/jsm/controls/MapControls'\n\nexport function initScene() {\n const scene = new Scene()\n scene.background = new Color(0xffffff)\n return scene\n}\n\nexport function initRenderer() {\n const renderer = new WebGLRenderer({\n antialias: true,\n // logarithmicDepthBuffer: true,\n // alpha: false,\n // premultipliedAlpha: false\n })\n renderer.autoClear = true\n renderer.setClearAlpha(1);\n renderer.setClearColor(0xffffff);\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.autoUpdate = true;\n renderer.shadowMap.type = PCFSoftShadowMap;\n return renderer\n}\n\nexport function initCamera(width: number, height: number): OrthographicCamera {\n const camera = new OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, -1000, 5000)\n camera.up.set(0, 0, 1);\n camera.position.set(0, 0, 100);\n camera.lookAt(0, 0, 0);\n return camera\n}\n\nexport function initLight() {\n const lights = new Group()\n // \u534A\u7403\u5149\n // const hemisphereLight = new HemisphereLight(0xffffff, 0xffffff, 1);\n // hemisphereLight.intensity = 1;\n // hemisphereLight.position.set(0, 0, 10);\n // hemisphereLight.up.set(0, 0, 1);\n // lights.add(hemisphereLight)\n const ambientLight = new AmbientLight(0xffffff, 2.6);\n lights.add(ambientLight)\n return lights\n}\n\nexport function initControl(camera: OrthographicCamera, domElement: HTMLCanvasElement) {\n const control = new MapControls(camera, domElement)\n // \u7981\u7528\u963B\u5C3C\n control.enableDamping = false\n // \u8BBE\u7F6E2.5D\n // control.maxPolarAngle = 0\n // control.minPolarAngle = 0\n // \u7981\u7528\u6C34\u5E73\u65CB\u8F6C\n // control.maxAzimuthAngle = 0\n // control.minAzimuthAngle = 0\n control.zoomSpeed = 2\n return control\n}\n\nexport function initShape(path: Coordinate[], holePath: Coordinate[][] = []) { \n const shape = new Shape(path.map(item => new Vector2(...item)));\n if (holePath.length) {\n holePath.forEach(cur => {\n var hole = new Path(cur.map(item => new Vector2(...item)));\n shape.holes.push(hole);\n })\n }\n return shape\n}\n\nexport function initDirectionalLight(color = 0xffffff, intensity = 1) {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.castShadow = true;\n directionalLight.shadow.radius = 8;\n directionalLight.shadow.bias = -0.001;\n directionalLight.shadow.mapSize.set(256, 256);\n directionalLight.shadow.camera.left = -200;\n directionalLight.shadow.camera.right = 200;\n directionalLight.shadow.camera.top = 200;\n directionalLight.shadow.camera.bottom = -200;\n return directionalLight\n}", "import { Object3D, Mesh, Light } from 'three'\n\nexport function dispose(o: Object3D, recursive?: boolean): void {\n if (recursive && o.children && o.children.length) {\n o.children.forEach((child) => {\n dispose(child, recursive);\n });\n }\n if ((o as Mesh).isMesh) {\n const m = o as Mesh;\n if (m.geometry) m.geometry.dispose();\n if (m.material) {\n if (Array.isArray(m.material)) {\n m.material.forEach((mat) => {\n mat.dispose();\n });\n } else {\n m.material.dispose();\n }\n }\n }\n if ((o as Light).isLight) {\n (o as Light).dispose?.()\n }\n}", "export function hasChinese(str:string) {\n return /[\\u4E00-\\u9FA5]+/g.test(str);\n}", "import { hasChinese } from './rules'\nimport { DataTexture, RGBAFormat, LinearFilter } from 'three'\n\nconst urlTextureMap = new Map()\nconst textTextureMap = new Map<string, DataTexture>()\n\nexport function initCanvas() {\n const canvas = document.createElement('canvas');\n canvas.width = 1024;\n canvas.height = 64;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n }) as CanvasRenderingContext2D;\n ctx.font = '54px sans-serif';\n ctx.textBaseline = 'hanging';\n ctx.lineWidth = 12;\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.strokeStyle = 'white';\n return { canvas, ctx }\n}\n\nlet canvas: HTMLCanvasElement;\nlet ctx: CanvasRenderingContext2D;\n\nexport function createCanvas() {\n if (!canvas) {\n const { canvas: c, ctx: t } = initCanvas()\n canvas = c;\n ctx = t;\n }\n}\n\nexport function getTextureByText(text: string): DataTexture {\n if (textTextureMap.has(text)) {\n return textTextureMap.get(text)!\n }\n createCanvas()\n\n ctx.clearRect(0, 0, 1024, 64);\n const y = hasChinese(text) ? 4 : 8;\n ctx.strokeText(text, 2, y);\n ctx.fillText(text, 2, y);\n\n let width = Math.ceil(ctx.measureText(text).width);\n width = width % 2 === 0 ? width : width + 1;\n width += 2;\n const imageData = ctx.getImageData(0, 0, width, 64);\n const texture = new DataTexture(\n Uint8Array.from(imageData.data),\n width,\n 64,\n RGBAFormat,\n );\n texture.flipY = true;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n textTextureMap.set(text, texture);\n return texture;\n}\n\nexport function clearTextTexture() {\n textTextureMap.clear()\n}\n\nexport function clearCanvas() {\n ctx = null as unknown as CanvasRenderingContext2D;\n canvas = null as unknown as HTMLCanvasElement;\n}", "import { Coordinate } from 'src/types';\nimport { Vector3, Camera } from 'three';\nimport { point, featureCollection, center } from '@turf/turf'\n\n/**\n * 3D\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n * @param vector \n * @param camera \n * @param w container\u7684\u5BBD\n * @param h container\u7684\u9AD8\n * @returns \n */\nexport function vector3ToDevice(vector: Vector3, camera: Camera, w: number, h: number) {\n const _vector = vector.clone().project(camera);//\u901A\u8FC7\u4E16\u754C\u5750\u6807\u83B7\u53D6\u8F6C\u6807\u51C6\u8BBE\u5907\u5750\u6807\n const _w = w / 2;\n const _h = h / 2;\n const x = Math.round(_vector.x * _w + _w);//\u6807\u51C6\u8BBE\u5907\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n const y = Math.round(-_vector.y * _h + _h);\n return { x, y }\n}\n\n\n/**\n * \u83B7\u53D6\u591A\u53D8\u5F62\u7684\u4E2D\u5FC3\u70B9\n * @param coordinates \n */\nexport function getCenter(coordinates: Coordinate[]) {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates\n}\n\ntype Position = {\n x: number,\n y: number\n}\nexport function isContain(point: Position, start: Position, end: Position) {\n // \u5224\u65AD point\u662F\u5426\u5728 start \u548Cend\u5F62\u6210\u7684\u77E9\u5F62\u4E2D\n return point.x >= start.x &&\n point.x <= end.x &&\n point.y >= start.y &&\n point.y <= end.y \n}\n\n/**\n * \u83B7\u53D6\u6700\u957F\u8FB9\u7684\u65B9\u5411\n * @param cds \n */\nexport function getLongestSideDir(cds: Coordinate[]) { \n let maxDistance = 0;\n let dir = new Vector3();\n for (let i = 1; i < cds.length; i++) { \n const point_0 = new Vector3(cds[i - 1][0], cds[i - 1][1], 0);\n const point_1 = new Vector3(cds[i][0], cds[i][1], 0);\n const distance = point_1.distanceTo(point_0)\n if (distance > maxDistance) {\n maxDistance = distance;\n dir = point_1.clone().sub(point_0).normalize();\n }\n }\n return dir;\n}", "import { EventDispatcher } from 'three'\n\nexport function proxyOptions\n <T extends Record<string, any>, M extends { [K in keyof T as `change-${Extract<K, string>}`]: { value: T[K] } }>\n (target: T, master: EventDispatcher<M>): T\n{ \n return new Proxy<T>(target, {\n get: (target, p, receiver) => {\n return Reflect.get(target, p, receiver)\n },\n set: (target, p, newValue, receiver) => {\n const oldValue = Reflect.get(target, p, receiver)\n const res = Reflect.set(target, p, newValue, receiver)\n if (oldValue !== newValue) {\n master.dispatchEvent({ type: `change-${p as Extract<keyof T, string>}`, value: newValue } as any)\n }\n return res\n }\n })\n}", "/**\n * \u53EF\u4EE5\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u7684promise\n * @param promise \n * @param timeout \n * @returns \n */\nexport function timeoutPromise<T>(promise: Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve, reject) => {\n setTimeout(() => reject(new Error(\"Promise timeout\")), timeout);\n })\n ]);\n}", "export function createSvgElement(tag: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', tag); \n}\n\n/**\n * \u521B\u5EFAsvg\n */\nexport function createSvg(w: string, h: string) {\n const svg = createSvgElement(\"svg\");\n svg.setAttribute(\"width\", w)\n svg.setAttribute(\"height\", h)\n svg.style.cssText = \"position: absolute; left: 0; top: 0; pointer-events: none;\"\n return svg;\n}\n\n/**\n * \u521B\u5EFA\u5706\u70B9\n * @param radius \n */\nexport function createCircle(radius = \"2\", fill: string) {\n const circle = createSvgElement(\"circle\");\n circle.setAttribute(\"r\", radius)\n circle.setAttribute(\"fill\", fill)\n return circle\n}\n\n/**\n * \u521B\u5EFA\u7EBF\n * @param stroke \n */\nexport function createLine(stroke: string) {\n const line = createSvgElement(\"line\")\n line.setAttribute(\"stroke\", stroke)\n return line\n}\n\n/**\n * \u521B\u5EFA\u77E9\u5F62\n * @param stroke \n * @returns \n */\nexport function createRect(stroke: string, fill: string) {\n const rect = createSvgElement(\"rect\")\n rect.setAttribute(\"stroke\", stroke)\n rect.setAttribute(\"fill\", fill)\n return rect\n}\n\nexport function setCirclePosition(circle: SVGElement, x: number, y: number) {\n circle.setAttribute('cx', `${x}`)\n circle.setAttribute('cy', `${y}`)\n}\n\ntype Position = { x: number; y: number }\n\nexport function setLineStartEnd(line: SVGElement, start?: Position, end?: Position) {\n if (start) { \n line.setAttribute(\"x1\", `${start.x}`)\n line.setAttribute(\"y1\", `${start.y}`)\n }\n if (end) {\n line.setAttribute(\"x2\", `${end.x}`)\n line.setAttribute(\"y2\", `${end.y}`)\n }\n}\n\nexport function setRectPosition(rect: SVGElement, x: number, y: number, w: number, h: number) {\n rect.setAttribute('x', `${x}`)\n rect.setAttribute('y', `${y}`)\n rect.setAttribute('width', `${w}`)\n rect.setAttribute('height', `${h}`)\n}", "export function sleepOnePromise() {\n return Promise.resolve()\n}\n\nexport function sleepOneRf() { \n return new Promise(resolve => {\n requestAnimationFrame(resolve)\n })\n}", "export function strToNumber(str: string) {\n return parseInt(str.replace(\"#\", \"0x\"), 16);\n}\n\n/**\n * \u7ED9\u989C\u8272\u52A0\u4E0A\u900F\u660E\u5EA6\n * @param hexColor\n * @param alpha\n * @returns\n */\nexport function addAlphaToHexColor(hexColor: string, alpha: number) {\n // \u5C0616\u8FDB\u5236\u989C\u8272\u503C\u8F6C\u6362\u4E3ARGB\u6570\u503C\n let r = parseInt(hexColor.substring(1, 3), 16);\n let g = parseInt(hexColor.substring(3, 5), 16);\n let b = parseInt(hexColor.substring(5, 7), 16);\n\n // \u8BA1\u7B97\u65B0\u7684RGB\u6570\u503C\n let newR = Math.round(r * alpha);\n let newG = Math.round(g * alpha);\n let newB = Math.round(b * alpha);\n\n // \u5C06\u65B0\u7684RGB\u6570\u503C\u8F6C\u6362\u4E3A16\u8FDB\u5236\u683C\u5F0F\n let newHexColor = `#${(1 << 24 | newR << 16 | newG << 8 | newB).toString(16).slice(1)}`;\n\n return newHexColor;\n}\n\nexport function darkenColor(hexColor: string, factor = 0.85) {\n let r: number;\n let g: number;\n let b: number;\n if (hexColor.startsWith(\"#\")) {\n // \u5C06\u5341\u516D\u8FDB\u5236\u989C\u8272\u8F6C\u6362\u4E3ARGB\n r = parseInt(hexColor.substring(1, 3), 16);\n g = parseInt(hexColor.substring(3, 5), 16);\n b = parseInt(hexColor.substring(5, 7), 16);\n } else { \n // rgb\u683C\u5F0F\u7684\n let numbers = hexColor.slice(4, -1).split(\",\");\n r = parseInt(numbers[0].trim())\n g = parseInt(numbers[1].trim())\n b = parseInt(numbers[2].trim())\n }\n // \u8BA1\u7B97\u6697\u70B9\u989C\u8272\n r = Math.min(Math.floor(r * factor), 255);\n g = Math.min(Math.floor(g * factor), 255);\n b = Math.min(Math.floor(b * factor), 255);\n\n\n // \u5C06RGB\u989C\u8272\u8F6C\u6362\u56DE\u5341\u516D\u8FDB\u5236\n let darkHexColor = \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n\n return darkHexColor;\n}\n", "import { Object3D, Scene, Mesh, MeshBasicMaterial } from 'three'\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\n\nfunction createLoader() { \n const loader = new GLTFLoader()\n return loader\n}\n\nlet loader: GLTFLoader | null = null\nlet modelMap = new Map<string, Promise<GLTF>>()\n\n/**\n * \u52A0\u8F7D\u6A21\u578B\n * @param url \n * @returns \n */\nexport function loadModel(url: string): Promise<GLTF> { \n if (modelMap.has(url)) {\n const gltf = modelMap.get(url)!.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n }\n if (!loader) {\n loader = createLoader()\n }\n const p = new Promise<GLTF>((resolve, reject) => { \n loader!.load(url, gltf => {\n resolve(gltf)\n }, undefined, reject)\n })\n modelMap.set(url, p)\n return p.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n}\n\nexport function disposeLoader() { \n loader = null\n modelMap.clear()\n}", "export const isMac = navigator.userAgent.toUpperCase().indexOf('MAC') >= 0;\n", "import { isMac } from \"./os\";\n\nexport function isControl(key: string) { \n if (isMac) {\n return key === \"Meta\"\n }\n return key === \"Control\"\n}", "import { MapControls } from \"three/examples/jsm/controls/MapControls\";\nimport {\n Timer,\n initCamera,\n initRenderer,\n initScene,\n initLight,\n initControl,\n dispose,\n vector3ToDevice,\n timeoutPromise,\n} from \"./utils\";\nimport {\n EventDispatcher,\n OrthographicCamera,\n Light,\n Box2,\n Vector3,\n Vector2,\n Raycaster,\n Object3D,\n Box3,\n Color,\n AmbientLight,\n} from \"three\";\nimport { Graphic, Poi, Floor } from \"./elements\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\nimport { Selection } from \"./operations/selection/selection\";\nimport { HoverHelper } from \"./operations\";\nimport { MaterialFactory } from \"./factory\";\nimport { CameraBound } from \"./utils/camera-bound\";\n\nexport interface ContextEventMap {\n update: {};\n \"graphic-click\": {\n graphics: Graphic[];\n position: Vector3 | null\n };\n \"poi-click\": {\n pois: Poi[];\n };\n 'pointer-level': {};\n 'pointer-over': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n };\n 'pointer-move': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n },\n 'change-ratio': {\n px: number;\n },\n \"select-graphic\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n },\n \"hover\": {\n graphics: Graphic[];\n },\n \"control-change\": {},\n \"resize\": {\n width: number;\n height: number;\n }\n}\n\nexport class Context extends EventDispatcher<ContextEventMap> {\n scene = initScene();\n\n renderer = initRenderer();\n\n camera!: OrthographicCamera;\n\n control!: MapControls;\n\n lights = initLight();\n\n // \u7BA1\u7406\u4EFB\u52A1\uFF0C\u9632\u6B62\u5185\u5B58\u6CC4\u6F0F\n timer = new Timer();\n \n tweenGroup = new TweenGroup();\n \n currentFloor?: Floor;\n\n selection: Selection;\n\n hoverHelper: HoverHelper;\n \n private basicRatio?: number; // zoom=1\u7684\u65F6\u5019\uFF0C100M\u5BF9\u5E94\u7684\u50CF\u7D20\u4E2A\u6570\n\n public materialFactory!: MaterialFactory;\n\n cameraBound!: CameraBound;\n\n clientSize = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n }\n\n constructor(public container: HTMLElement, public config: Config) {\n super();\n this.container.style.position = \"relative\";\n this.container.style.overflow = \"hidden\";\n this.init();\n this.selection = new Selection(this);\n this.hoverHelper = new HoverHelper(this);\n this.materialFactory = new MaterialFactory(this);\n this.resizeClientSize()\n this.registryEvent();\n }\n\n resizeClientSize() { \n const { x, y, width, height } = this.container.getBoundingClientRect()\n this.clientSize = {\n width: width || this.container.clientWidth,\n height: height || this.container.clientHeight,\n x,\n y\n }\n }\n\n init() {\n const { clientWidth: w, clientHeight: h } = this.container;\n this.camera = initCamera(w, h);\n this.renderer.setSize(w, h);\n this.control = initControl(this.camera, this.renderer.domElement);\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.container.appendChild(this.renderer.domElement);\n this.scene.add(this.lights);\n this.basicRatio = this.getRatio()\n // \u65CB\u8F6C\u89C6\u89D2\u7684\u65F6\u5019\uFF0C\u9690\u85CF\u548C\u663E\u793A\u9634\u5F71\n this.control.addEventListener(\"change\", () => {\n const polarAngle = this.control.getPolarAngle();\n this.currentFloor?.setShadowOpacity(polarAngle / this.config.control.maxPolar)\n this.dispatchEvent({ type: 'change-ratio', px: (this.basicRatio || 0) * this.camera.zoom })\n this.dispatchEvent({ type: 'control-change' })\n });\n this.cameraBound = new CameraBound(this);\n }\n\n /**\n * \u83B7\u53D6\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u50CF\u7D20\u6570\n */\n getRatio(point1 = new Vector3(0, 0, 0), point2 = new Vector3(100, 0, 0)) {\n const { clientWidth, clientHeight } = this.container\n const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight)\n const device2 = vector3ToDevice(point2, this.camera, clientWidth, clientHeight)\n return Math.ceil(Math.sqrt((device2.x - device1.x) ** 2 + (device2.y - device1.y) ** 2))\n }\n\n changeAmbientLightColor(color: string | number) {\n this.lights.children.forEach((item) => {\n if (item instanceof AmbientLight) {\n item.color = new Color(color);\n }\n });\n }\n\n switchFloor(floor: Floor) {\n if (this.currentFloor) {\n this.scene.remove(this.currentFloor)\n this.currentFloor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.getCenter()\n if (position) {\n this.lights.position.x = position.x\n this.lights.position.y = position.y\n }\n }\n\n onWindowResize = () => {\n const { container, camera, renderer } = this;\n let { clientWidth: w, clientHeight: h } = container;\n w = Math.max(1, w);\n h = Math.max(1, h);\n camera.left = -w / 2;\n camera.right = w / 2;\n camera.top = h / 2;\n camera.bottom = -h / 2;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n this.resizeClientSize()\n this.dispatchEvent({ type:'resize', width: w, height: h })\n };\n\n onClick = (e: MouseEvent) => {\n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n if (graphics.length) {\n this.dispatchEvent({\n type: \"graphic-click\",\n graphics: graphics,\n position\n });\n }\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY);\n if (pois.length) {\n this.dispatchEvent({ type: \"poi-click\", pois: pois as Poi[] });\n }\n };\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684graphic\n * @param x\n * @param y\n * @returns\n */\n getGraphicsByDeviceXy(x: number, y: number): { graphics: Graphic[], position: Vector3 | null } {\n const point = new Vector2();\n point.x = (x / this.clientSize.width) * 2 - 1;\n point.y = (y / this.clientSize.height) * -2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(point, this.camera);\n const res = this.currentFloor?.graphicLayer.getGraphicByRaycaster(raycaster)\n return res || { graphics: [], position: null }\n }\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684poi\n * @param x\n * @param y\n * @returns\n */\n getPoisByDeviceXy(x: number, y: number) {\n const pois = this.currentFloor?.poiLayer.getPoiByDeviceXy(x, y)\n return pois || [];\n }\n\n onPointerover = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY) as Poi[];\n this.dispatchEvent({ type: 'pointer-over', e, graphics, pois, position })\n }\n\n onPointermove = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY)\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY) as Poi[];\n // console.log(graphics, position, e.offsetX, e.offsetY)\n this.dispatchEvent({ type: 'pointer-move', e, graphics, pois, position })\n }\n\n onPointerleave = () => { \n this.dispatchEvent({ type: \"pointer-level\" })\n }\n\n onSelectionSelect = ({ graphics, isMultipleSelect }: {graphics: Graphic[], isMultipleSelect: boolean}) => { \n this.dispatchEvent({ type: \"select-graphic\", graphics, isMultipleSelect })\n }\n\n onHoverChange = ({ graphics }: { graphics: Graphic[] }) => { \n this.dispatchEvent({ type: \"hover\", graphics })\n }\n\n registryEvent() {\n window.addEventListener(\"resize\", this.onWindowResize);\n this.container.addEventListener(\"click\", this.onClick);\n this.container.addEventListener(\"pointerover\", this.onPointerover)\n this.container.addEventListener(\"pointermove\", this.onPointermove)\n this.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.addEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.addEventListener(\"hover-change\", this.onHoverChange)\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n this.container.removeEventListener(\"click\", this.onClick);\n this.container.removeEventListener(\"pointerover\", this.onPointerover)\n this.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.selection.removeEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.removeEventListener(\"hover-change\", this.onHoverChange)\n }\n\n /**\n * \u8BBE\u7F6E\u7EB5\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param polar \u5F27\u5EA6\n */\n public setPolarAngle(polar: number, duration = 500) {\n if (duration === 0) {\n this.control.maxPolarAngle = polar;\n this.control.minPolarAngle = polar;\n this.control.update();\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n return Promise.resolve();\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { polar: this.control.getPolarAngle() };\n const end = { polar };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxPolarAngle = start.polar;\n this.control.minPolarAngle = start.polar;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n /**\n * \u8BBE\u7F6E\u6A2A\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param azimuthal \u5F27\u5EA6\n */\n public setAzimuthalAngle(azimuthal: number, duration = 500) {\n if (duration === 0) {\n this.control.maxAzimuthAngle = azimuthal;\n this.control.minAzimuthAngle = azimuthal;\n this.control.update();\n this.control.maxAzimuthAngle = Infinity;\n this.control.minAzimuthAngle = Infinity;\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { azimuthal: this.control.getAzimuthalAngle() };\n const end = { azimuthal };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxAzimuthAngle = start.azimuthal;\n this.control.minAzimuthAngle = start.azimuthal;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.control.maxAzimuthAngle = Infinity;\n this.control.minAzimuthAngle = Infinity;\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getCameraLookAt() {\n return new Vector3().subVectors(this.control.target, this.camera.position);\n }\n\n /**\n * \u6309\u7167\u4E00\u4E2A\u4E2D\u5FC3\u70B9\u8BBE\u7F6E\u76F8\u673A\u7684\u653E\u5927\u7F29\u5C0F\n * @param zoom\n * @param center\n * @returns\n */\n public setZoom(zoom: number, center: Vector3, duration = 500) {\n const lookAtVector = this.getCameraLookAt();\n const start = {\n zoom: this.camera.zoom,\n target: this.control.target.clone(),\n };\n if (!duration) { \n this.camera.position.copy(center.clone().sub(lookAtVector));\n this.control.target.copy(center);\n this.camera.zoom = zoom;\n this.control.update()\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const tween = new Tween(start, this.tweenGroup)\n .to(\n {\n zoom,\n target: center,\n },\n duration\n )\n .onUpdate(() => {\n this.camera.position.copy(start.target.clone().sub(lookAtVector));\n this.control.target.copy(start.target);\n this.camera.zoom = start.zoom;\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.control.enabled = true;\n resolve(true)\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getFitCameraToObjectZoom(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) { \n const [top, right, bottom, left] = padding;\n const { clientSize: { width, height } } = this;\n const polar = this.control.getPolarAngle()\n if (force2DView) {\n // \u83B7\u53D6\u57282D\u89C6\u56FE\u4E0B\u7684\u5927\u5C0F\n this.setPolarAngle(0, 0)\n }\n // \u83B7\u53D6\u7269\u4F53\u7684\u4E09\u7EF4\u76D2\u5B50\u5750\u6807\n const boundingBox = new Box3().setFromObject(object);\n this.setPolarAngle(polar, 0)\n const { max, min } = boundingBox;\n // \u9700\u8981\u83B7\u53D6\u5230box\u76844\u4E2A\u70B9\u7684\u5750\u6807\n const leftTop = new Vector3(min.x, max.y, max.z);\n const rightTop = new Vector3(max.x, max.y, max.z);\n const rightBottom = new Vector3(max.x, min.y, min.z);\n const leftBottom = new Vector3(min.x, min.y, min.z);\n // \u5750\u6807\u8F6C\u6210\u5C4F\u5E55\u5750\u6807\u5E76\u8BA1\u7B97\u51FA\u5360\u7528\u5C4F\u5E55\u5750\u6807\u7684\u5927\u5C0F\n const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);\n const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);\n const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);\n const rightBottom2d = vector3ToDevice(rightBottom, this.camera, width, height);\n const boundingBox2d = new Box2().setFromPoints([\n new Vector2(leftTop2d.x, leftTop2d.y),\n new Vector2(rightTop2d.x, rightTop2d.y),\n new Vector2(leftBottom2d.x, leftBottom2d.y),\n new Vector2(rightBottom2d.x, rightBottom2d.y),\n ]);\n const size = boundingBox2d.getSize(new Vector2());\n\n // \u8BA1\u7B97\u5728\u5C4F\u5E55\u4E0Ax,y\u65B9\u5411\u4E0A\u9700\u8981\u8C03\u6574\u7684\u500D\u6570\n const xScale = (width - right - left) / size.x;\n const yScale = (height - top - bottom) / size.y;\n const scale = Math.min(xScale, yScale);\n const center = new Vector3((max.x + min.x) / 2, (max.y + min.y) / 2, (max.z + min.z) / 2);\n return { zoom: scale * this.camera.zoom, center };\n }\n\n /**\n * \u653E\u5927\u76F8\u673A\u5230\u7269\u4F53\u5360\u5168\u5C4F\n * @param object\n * @param padding\n * @param duration\n * @returns\n */\n fitCameraToObject(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) {\n const { zoom, center } = this.getFitCameraToObjectZoom(object, padding, duration, force2DView)\n return this.setZoom(zoom, center, duration);\n }\n\n getFitCameraToGroundZoom(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) {\n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.getFitCameraToObjectZoom(this.currentFloor.groundUpper, padding, duration, force2DView).zoom;\n }\n }\n\n fitCameraToGround(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) { \n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.fitCameraToObject(this.currentFloor.groundUpper, padding, duration, force2DView);\n } else {\n return Promise.resolve(false);\n }\n }\n\n /**\n * \u4FEE\u6539\u76F8\u673A\u4F4D\u7F6E\n * @param position \u4FEE\u6539\u540E\u7684\u76F8\u673A\u7684\u4F4D\u7F6E\n * @param duration \u52A8\u753B\u6301\u7EED\u65F6\u95F4\n */\n public setCameraPosition(position: Vector3, duration: number) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = this.camera.position.clone();\n const lookAtVector = this.getCameraLookAt();\n const tween = new Tween(start, this.tweenGroup)\n .to(position, duration)\n .onUpdate(() => {\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(start.clone());\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(position.clone());\n this.control.update();\n this.control.enabled = true;\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n render() {\n this.renderer.render(this.scene, this.camera);\n this.dispatchEvent({ type: \"update\" });\n this.timer.requestAnimationFrame(() => {\n this.render();\n });\n this.tweenGroup.update();\n }\n\n dispose() {\n this.cameraBound.dispose()\n this.selection.dispose()\n this.hoverHelper.dispose()\n this.tweenGroup.getAll().forEach((item) => item.stop());\n this.tweenGroup.removeAll();\n this.unRegistryEvent();\n this.container.removeChild(this.renderer.domElement);\n this.timer.dispose();\n this.renderer.dispose();\n (this.lights.children as Light[]).forEach((light: Light) =>\n light.dispose()\n );\n this.materialFactory.dispose();\n dispose(this.scene);\n }\n}\n", "import { EventDispatcher } from \"three\";\nimport { Context } from \"../../context\";\nimport { Graphic, Poi } from \"../../elements\";\nimport { BoxSelection } from \"./box-selection\";\nimport { isControl, isMac } from \"../../utils\";\n\ninterface SelectionEventMap {\n \"select\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n }\n}\n\nexport class Selection extends EventDispatcher<SelectionEventMap> {\n private _list = new Set<Graphic>()\n\n private boxSelection: BoxSelection;\n private prevPanStatus?: boolean;\n private prevRotateStatus?: boolean;\n private downPoint: { x: number, y: number } | null = null\n\n private isMultipleSelect = false;\n\n constructor(private context: Context) {\n super()\n this.boxSelection = new BoxSelection(context)\n this.boxSelection.setEnable(false)\n this.registryEvent()\n }\n\n get list() {\n return this._list\n }\n\n enableBoxSelection() { \n if (this.isMultipleSelect) { return }\n this.isMultipleSelect = true;\n this.boxSelection.setEnable(true)\n this.prevPanStatus = this.context.control.enablePan\n this.prevRotateStatus = this.context.control.enableRotate\n this.context.control.enablePan = false\n this.context.control.enableRotate = false\n }\n\n disableBoxSelection() { \n if (this.isMultipleSelect) { \n this.isMultipleSelect = false;\n this.boxSelection.setEnable(false)\n this.context.control.enablePan = !!this.prevPanStatus\n this.context.control.enableRotate = !!this.prevRotateStatus\n }\n }\n\n onPointerDown = (e: PointerEvent) => {\n this.downPoint = { x: e.offsetX, y: e.offsetY }\n }\n\n onPointerUp = (e: PointerEvent) => {\n if (!this.downPoint) { return }\n const { offsetX, offsetY } = e\n const { x, y } = this.downPoint\n if (Math.sqrt((x - offsetX) ** 2 + (y - offsetY) ** 2) > 3) {\n return\n }\n const { graphics } = this.context.getGraphicsByDeviceXy(offsetX, offsetY)\n const graphicIdSet = new Set(graphics.map(item => item.options.id))\n const pois = this.context.getPoisByDeviceXy(offsetX, offsetY) as Poi[];\n pois.forEach(item => { \n if (!graphicIdSet.has(item.options.id)) {\n const graphic = this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id) || null\n if (graphic && graphic.options.geometry.type === 'point') { \n graphics.push(graphic)\n graphicIdSet.add(item.options.id)\n }\n }\n })\n if (!(isMac ? e.metaKey : e.ctrlKey)) {\n this._list.clear()\n }\n graphics.forEach(item => this._list.add(item))\n this.selectEnd()\n this.downPoint = null\n }\n\n onPointerOut = (e: PointerEvent) => { \n this.disableBoxSelection()\n }\n\n onKeyDown = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.enableBoxSelection()\n }\n }\n\n onKeyUp = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.disableBoxSelection()\n }\n }\n\n onBoxSelected = ({ list }: { list: Graphic[] }) => { \n this._list.clear()\n list.forEach(item => {\n this._list.add(item)\n })\n this.selectEnd()\n }\n\n selectEnd() {\n this.dispatchEvent({type: \"select\", graphics: [...this._list], isMultipleSelect: this.isMultipleSelect})\n }\n\n registryEvent() {\n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.addEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.addEventListener(\"pointercancel\", this.onPointerOut)\n window.addEventListener(\"keydown\", this.onKeyDown)\n window.addEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.addEventListener(\"selected\", this.onBoxSelected)\n }\n\n unRegistryEvent() {\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.removeEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.removeEventListener(\"pointercancel\", this.onPointerOut)\n window.removeEventListener(\"keydown\", this.onKeyDown)\n window.removeEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.removeEventListener(\"selected\", this.onBoxSelected)\n }\n\n clear() {\n this._list.clear()\n }\n\n remove(graphic: Graphic) { \n this._list.delete(graphic)\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import {\n Object3D,\n ExtrudeGeometry,\n Mesh,\n Box3,\n MeshBasicMaterial,\n Raycaster,\n Object3DEventMap,\n Vector3,\n BufferGeometry,\n LineBasicMaterial,\n LineSegments,\n Float32BufferAttribute,\n ShaderMaterial,\n DoubleSide,\n Color,\n Ray,\n BoxGeometry,\n Line,\n Box3Helper,\n } from \"three\";\nimport { initShape, proxyOptions, darkenColor } from \"../utils\";\nimport { GraphicOptions, PolygonGeometry } from \"src/types\";\nimport { Context } from \"../context\";\n\n// \u95E8\u7684\u7C7B\u578B\nconst DoorType = {\n single: \"\u5355\u5F00\u95E8\",\n double: \"\u53CC\u5F00\u95E8\",\n move: \"\u79FB\u52A8\u95E8\",\n};\n\n// \u95E8\u7684\u6750\u8D28\nconst DoorMaterial = {\n wood: \"\u6728\u95E8\",\n glass: \"\u73BB\u7483\u95E8\",\n aluminum: \"\u94DD\u5408\u91D1\u95E8\",\n};\n\n// \u5355\u4E2A\u95E8\u7684\u914D\u7F6E\nexport interface Door {\n // \u540D\u79F0\n name: string;\n id: string;\n width: number;\n // \u5185\u5F00/\u5916\u5F00\n open: boolean;\n // \u7C7B\u578B \u5355\u5F00\u95E8 \u53CC\u5F00\u95E8 \u79FB\u52A8\u95E8\n type: keyof typeof DoorType;\n // \u6750\u8D28\n material: keyof typeof DoorMaterial;\n}\n\nexport type GraphicOptionsParam = Partial<GraphicOptions>;\n\ntype GraphicEventMap = {\n [K in keyof GraphicOptions as `change-${K}`]: { value: GraphicOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: GraphicOptions = {\n id: \"\", // \u56FE\u5F62id\n height: 0.1, // \u56FE\u5F62\u9AD8\u5EA6\n airHeight: 0, // \u60AC\u7A7A\u9AD8\u5EA6\n area: 0, // \u9762\u79EF\n group: \"\", // \u5206\u7EC4\n fillColor: \"#EFF4FB\", // \u989C\u8272\n strokeColor: \"#ffffff\", // \u8FB9\u6846\n fillOpacity: 1, // \u900F\u660E\u5EA6\n strokeOpacity: 1, // \u63CF\u8FB9\u900F\u660E\u5EA6\n strokeWidth: 1, // \u63CF\u8FB9\u5BBD\u5EA6\n doors: [], // \u95E8\u914D\u7F6E\n locked: false,\n visible: true,\n geometry: {\n type: \"polygon\",\n cds: [],\n coords: [],\n curveCpt: [],\n curveIndex: [],\n },\n layerType: \"\",\n zIndex: 0,\n stroke: true,\n deltaHeight: 0,\n userData: {},\n gradualColor: [],\n renderType: \"single\",\n colorFactor: 0.9\n};\n\nexport class Graphic extends Object3D<GraphicEventMap> {\n private geometry!: ExtrudeGeometry;\n\n private material!: MeshBasicMaterial | MeshBasicMaterial[] | ShaderMaterial[] | ShaderMaterial;\n\n public mesh!: Mesh;\n\n private line!: LineSegments;\n\n private lineMaterial?: LineBasicMaterial;\n\n private lineGeometry?: BufferGeometry;\n\n public options: GraphicOptions;\n\n constructor(\n private context: Context,\n options: GraphicOptionsParam\n ) {\n super();\n this.options = proxyOptions<GraphicOptions, GraphicEventMap>(\n { ...defaultOptions, ...options },\n this\n );\n if (this.options.geometry.type === \"point\") {\n const [x, y] = this.options.geometry.coords;\n this.position.set(x, y, this.options.height + this.options.airHeight);\n return this;\n }\n this.init();\n this.visible = this.options.visible;\n this.addEventListener(\"change-fillColor\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-fillOpacity\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-height\", ({ value }) => {\n this.dispose();\n this.init();\n });\n this.addEventListener(\"change-strokeColor\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n this.addEventListener(\"change-strokeOpacity\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n // this.addEventListener('change-strokeWidth', ({ value }) => {\n // this.initLineMaterial();\n // this.createBorder();\n // })\n this.addEventListener(\"change-airHeight\", ({ value }) => {\n this.position.z = value;\n });\n this.addEventListener(\"change-visible\", ({ value }) => {\n this.visible = value;\n });\n this.addEventListener(\"change-stroke\", ({ value }) => {\n if (value) {\n if (this.line) {\n return;\n }\n this.initLineGeometry();\n this.initLineMaterial();\n this.createBorder();\n } else if (this.line) {\n this.remove(this.line);\n this.lineGeometry?.dispose();\n }\n });\n this.addEventListener(\"change-renderType\", () => {\n this.initMaterial();\n this.initMesh();\n })\n this.addEventListener(\"change-gradualColor\", () => {\n this.initMaterial();\n this.initMesh();\n })\n }\n\n getCenter() {\n if (this.options.geometry.type === \"point\") {\n return this.position.clone();\n }\n const center = new Vector3();\n const box = new Box3();\n box.setFromObject(this);\n box.getCenter(center);\n return center;\n }\n\n getSize() {\n if (this.options.geometry.type === \"point\") {\n return new Vector3(0, 0, 0);\n }\n const box = new Box3();\n const size = new Vector3();\n box.setFromObject(this);\n box.getSize(size);\n return size;\n }\n\n getPosition() {\n const center = this.getCenter();\n center.setZ(center.z + this.options.height / 2);\n return center;\n }\n\n init() {\n this.geometry = this.initGeometry();\n this.initMaterial();\n this.initMesh();\n this.mesh.position.z = this.options.airHeight + this.options.deltaHeight;\n if (this.options.stroke) {\n // \u521B\u5EFA\u8FB9\u6846\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n }\n\n initGeometry() {\n const shape = initShape(\n (this.options.geometry as PolygonGeometry).coords[0],\n (this.options.geometry as PolygonGeometry).coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: this.options.height,\n curveSegments: 4,\n });\n return geometry;\n }\n\n initSingleMaterial() {\n const material = this.context.materialFactory.createMeshBasicMaterial({\n color: this.options.fillColor,\n opacity: this.options.fillOpacity,\n });\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n const material1 = this.context.materialFactory.createMeshBasicMaterial({\n color: darkenColor(this.options.fillColor),\n opacity: this.options.fillOpacity,\n });\n this.material = [material, material1];\n return [material, material1];\n }\n\n // createMesh(pos: Vector3, color = 0xff0000) { \n // const geometry = new BoxGeometry(1, 1, 1)\n // const material = new MeshBasicMaterial({ color })\n // const mesh = new Mesh(geometry, material)\n // mesh.position.copy(pos)\n // this.context.scene.add(mesh)\n // }\n\n // createLine(points: Vector3[], color = 0xff0000) {\n // const material = new LineBasicMaterial({\n // color: color\n // });\n // const geometry = new BufferGeometry().setFromPoints(points);\n // const line = new Line( geometry, material );\n // this.context.scene.add(line)\n // }\n\n getMaxAndMin(pos: Vector3, dir: Vector3) {\n const box = new Box3().setFromObject(this)\n const minOrigin = pos.clone().add(dir.clone().multiplyScalar(1000))\n const raycaster = new Ray(minOrigin, dir.clone().multiplyScalar(-1));\n const min = new Vector3()\n raycaster.intersectBox(box, min);\n const maxOrigin = pos.clone().add(dir.clone().multiplyScalar(-1000))\n const raycaster2 = new Ray(maxOrigin, dir.clone());\n const max = new Vector3()\n raycaster2.intersectBox(box, max);\n return {\n max, min\n }\n }\n\n initGradualMaterial() { \n const { max, min } = new Box3().setFromObject(this)\n const _max = max.clone().sub(min)\n const maxValue = Math.max(_max.x, _max.y, _max.z) / 2\n const pos = this.getPosition();\n const dir = new Vector3(-1.0, 0.2, 0.0).normalize()\n const { max: __max, min: _min } = this.getMaxAndMin(pos, dir)\n\n const material = this.context.materialFactory.createShaderMaterial({\n gradualColor: this.options.gradualColor,\n center: this.getPosition(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 0.0),\n max: __max,\n min: _min\n })\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n\n const center = this.getCenter();\n const dir2 = new Vector3(-1.0, 0.2, 1.0).normalize()\n const { max: ___max, min: __min } = this.getMaxAndMin(center, dir2)\n const material1 = this.context.materialFactory.createShaderMaterial({\n gradualColor: [darkenColor(this.options.gradualColor[0], this.options.colorFactor), darkenColor(this.options.gradualColor[1], this.options.colorFactor)],\n center: this.getCenter(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 1.0),\n max: ___max,\n min: __min\n })\n\n this.material = [material, material1];\n return [material, material1];\n }\n\n initMaterial() {\n if (this.options.renderType === 'gradual') { \n return this.initGradualMaterial()\n } else {\n return this.initSingleMaterial()\n }\n }\n\n initLineMaterial() {\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: this.options.strokeColor,\n opacity: this.options.strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n initMesh() {\n if (this.mesh) {\n this.remove(this.mesh);\n }\n this.mesh = new Mesh(this.geometry, this.material);\n this.add(this.mesh);\n }\n\n getBorderPoints() {\n const points = [];\n const height = this.options.height + this.options.deltaHeight;\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = this.options.geometry as PolygonGeometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], height));\n points.push(new Vector3(next[0], next[1], height));\n }\n }\n return points;\n }\n\n initLineGeometry() {\n if (this.lineGeometry) {\n this.lineGeometry.dispose();\n }\n const points = this.getBorderPoints();\n const lineGeometry = new BufferGeometry().setFromPoints(points);\n this.lineGeometry = lineGeometry;\n }\n\n createBorder() {\n if (this.line) {\n this.remove(this.line);\n }\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n line.position.z = this.options.airHeight + 0.01;\n this.line = line;\n this.add(line);\n return line;\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) {\n return false;\n }\n if (this.options.geometry.type === \"point\") {\n return false;\n }\n const intersects = raycaster.intersectObject(this.mesh);\n if (intersects[0]) {\n const { point: position, distance } = intersects[0];\n return { position, distance };\n }\n return false;\n }\n\n dispose() {\n this.geometry.dispose();\n this.line?.geometry.dispose();\n this.clear();\n }\n}\n", "import {\n Object3D, PlaneGeometry, DirectionalLight,\n Mesh, MeshStandardMaterial, ShadowMaterial, Color, Vector3, DoubleSide\n} from 'three';\nimport { dispose, initDirectionalLight } from '../utils'\n\nexport class Shadow extends Object3D {\n\n private directionalLight: DirectionalLight\n\n private plane!: Mesh\n\n public basicOpacity = 0.07\n\n constructor() {\n super()\n this.directionalLight = this.initLight()\n this.initPlane()\n }\n\n // \u521B\u5EFA\u5149\u6E90\n initLight() { \n const directionalLight = initDirectionalLight(0xffffff, 0.5)\n directionalLight.position.set(0, 0, 100);\n this.add(directionalLight);\n return directionalLight\n }\n \n changeLightCamera(size: Vector3) {\n const x = size.x\n const y = size.y\n this.directionalLight.shadow.camera.left = -x;\n this.directionalLight.shadow.camera.right = x;\n this.directionalLight.shadow.camera.top = y;\n this.directionalLight.shadow.camera.bottom = -y;\n this.directionalLight.shadow.camera.near = 0.5;\n this.directionalLight.shadow.camera.far = Math.max(x, y);\n }\n\n changeLightColor(color: number | string) {\n this.directionalLight.color = new Color(color)\n }\n\n setPosition(position: Vector3) {\n this.position.copy(position)\n this.directionalLight.position.set(-position.x / 2, -position.y / 2, 100)\n }\n\n // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 1000, height = 1000) { \n const geometry = new PlaneGeometry(width, height)\n const material = new ShadowMaterial({\n transparent: true,\n opacity: 0,\n side: DoubleSide\n })\n const mesh = new Mesh(geometry, material)\n mesh.receiveShadow = true\n mesh.position.z = -10\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Object3D) {\n this.directionalLight.target = target\n }\n\n transformOpacity(opacity: number): number {\n return opacity * this.basicOpacity\n }\n\n setOpacity(opacity: number) { \n (this.plane.material as MeshStandardMaterial).opacity = this.transformOpacity(opacity);\n }\n \n dispose() {\n dispose(this, true)\n }\n\n}", "import { proxyOptions, sleepOnePromise } from '../utils';\nimport { EventDispatcher, Object3D, Object3DEventMap, Vector3 } from 'three';\nimport { Context } from '../context'\nimport { Overlay } from './overlay';\n\nexport interface PoiOptions {\n texts: { text: string, styles?: { [key: string]: string }; }[];\n icon?: string;\n icon_size?: [number, number]; // \u5BBD \u9AD8\n icon_position?: 'top' | 'bottom';\n level: number; // \u6E32\u67D3\u4F18\u5148\u7EA7\n collision_enable: boolean; // \u662F\u5426\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\n opacity: number;\n id: string; // poi\u7684key\n position: { x: number; y: number; z: number };\n icon_opacity: number;\n icon_border: { color: string, width: number };\n background: string;\n collision_hide_icon: boolean;\n built_in: boolean; // \u662F\u5426\u662F\u5185\u7F6E\u7684poi\n box_only_icon: boolean; // \u5305\u56F4\u76D2\u662F\u4E0D\u662F\u53EA\u5305\u542B\u56FE\u6807\n}\n\ntype PoiEventMap = {\n [K in keyof PoiOptions as `change-${K}`]: { value: PoiOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: PoiOptions = {\n texts: [{ text: \"\" }],\n level: 1,\n icon_position: 'bottom',\n collision_enable: true,\n opacity: 1,\n id: \"\",\n position: { x: 0, y: 0, z: 0 },\n icon_opacity: 1,\n icon_border: { color: \"#586EE0\", width: 0 },\n background: \"\",\n collision_hide_icon: true,\n built_in: false,\n box_only_icon: false\n}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends EventDispatcher<PoiEventMap> {\n\n private div!: HTMLDivElement\n\n private textDiv!: HTMLDivElement\n\n private img?: HTMLImageElement\n\n private overlay: Overlay\n\n public options: PoiOptions\n\n public visible = true\n\n size = { width: 0, height: 0 }\n\n position = new Vector3()\n\n userData = {};\n\n showTextStatus = true\n\n constructor(private context: Context, options: PoiOptionsParam) {\n super()\n this.options = proxyOptions<PoiOptions, PoiEventMap>({...defaultOptions, ...options}, this)\n this.position.set(options.position?.x || 0, options.position?.y || 0, options.position?.z || 0)\n this.overlay = new Overlay(this.context, { autoUpdate: false })\n this.overlay.addEventListener(\"update-position\", ({ x, y, height }) => { \n this.overlay.div.style.transform = `translate3d(calc(${x}px - 50%), calc(${-height + y}px - ${this.options.icon ? '100%' : '50%'}), 0)`;\n })\n this.overlay.bindElement(this as unknown as Object3D)\n this.registryEvent()\n this.initDiv()\n this.addEventListener(\"change-icon\", ({ value }) => {\n if (value) {\n if (!this.img) {\n this.addIcon()\n this._changePosition()\n } else {\n this.img.setAttribute('src', value)\n }\n } else {\n this.img && this.div.removeChild(this.img)\n this.img = undefined\n this._changePosition()\n this.resetSize()\n }\n })\n this.addEventListener(\"change-texts\", ({ value }) => {\n this.div.removeChild(this.textDiv)\n this.addText()\n this.resetSize()\n })\n this.addEventListener(\"change-opacity\", ({ value }) => {\n this.overlay.setOpacity(value)\n })\n this.addEventListener(\"change-icon_size\", ({ value }) => {\n if (this.img) {\n this.img.style.width = `${value?.[0] || 32}px`\n this.img.style.height = `${value?.[1] || 32}px`\n this.resetSize()\n }\n })\n this.addEventListener(\"change-icon_opacity\", ({ value }) => {\n if (this.img) {\n this.img.style.opacity = `${value}`\n }\n })\n this.addEventListener(\"change-icon_border\", ({ value }) => {\n if (this.img) {\n this.img.style.border = `${value.width}px solid ${value.color}`\n }\n })\n this.addEventListener(\"change-background\", ({ value }) => {\n this.div.style.background = value;\n })\n }\n\n get withinDisplayRange() {\n return this.overlay.withinDisplayRange\n }\n\n async resetSize() {\n await sleepOnePromise()\n if (this.options.box_only_icon) {\n if (!this.img) { return }\n const { width, height } = this.img.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n } else {\n const { width, height } = this.div.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n }\n }\n\n renderHelperBox() {\n // let div = this.helperDiv\n // if (!div) {\n // div = document.createElement('div')\n // this.context.container.appendChild(div)\n // }\n // const box = this.getBox()\n // div.style.cssText = `position: absolute; top: ${box.top}px;left: ${box.left}px;width: ${box.right - box.left}px;height: ${box.bottom - box.top}px;border: 1px solid red;`\n // this.helperDiv = div;\n }\n\n get clientPos() {\n return this.overlay.clientPos\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n this.div = div;\n this.addText()\n if (this.options.icon) { \n this.addIcon()\n }\n div.style.fontSize = `12px`;\n div.style.textShadow = `#fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0`;\n div.style.display = `flex`;\n div.style.flexDirection = `column`;\n div.style.justifyContent = `center`;\n div.style.alignItems = `center`;\n div.style.padding = \"4px\";\n this.overlay.setOpacity(this.options.opacity);\n this.overlay.div.style.pointerEvents = `none`;\n this.overlay.div.style.userSelect = `none`;\n this.overlay.div.appendChild(div)\n // this._changePosition()\n this.resetSize()\n return div\n }\n\n addIcon() { \n if (!this.img) {\n const icon = this.initIcon()\n if (this.options.icon_position === \"top\") {\n if (this.div.firstChild) {\n this.div.insertBefore(icon, this.div.firstChild)\n } else {\n this.div.appendChild(icon)\n }\n } else {\n this.div.appendChild(icon)\n }\n }\n }\n\n addText() { \n const text = this.initText()\n if (this.options.icon_position === \"top\") {\n this.div.appendChild(text)\n } else {\n if (this.div.firstChild) {\n this.div.insertBefore(text, this.div.firstChild)\n } else {\n this.div.appendChild(text)\n }\n }\n }\n\n getPosition() {\n return this.position\n }\n\n initText() {\n const textDiv = document.createElement(\"div\")\n textDiv.appendChild(this.createTextFragment())\n textDiv.style.textAlign = \"center\"\n this.textDiv = textDiv\n return textDiv\n }\n\n createTextFragment() { \n const f = document.createDocumentFragment()\n this.options.texts.forEach(item => { \n const div = document.createElement(\"div\")\n div.style.whiteSpace = 'nowrap';\n if (item.styles) { \n for (let [key, value] of Object.entries(item.styles)) { \n div.style[key as any] = value;\n }\n }\n div.textContent = item.text;\n f.appendChild(div)\n })\n return f\n }\n\n initIcon() {\n const img = document.createElement(\"img\")\n img.setAttribute(\"src\", this.options.icon!)\n img.style.width = `${this.options.icon_size?.[0] || 32}px`\n img.style.height = `${this.options.icon_size?.[1] || 32}px`\n img.style.opacity = `${this.options.icon_opacity}px`\n img.style.borderRadius = '50%';\n if (this.options.icon_border.width) {\n img.style.border = `${this.options.icon_border.width}px solid ${this.options.icon_border.color}`\n }\n img.onload = () => {\n // this._changePosition()\n this.resetSize()\n }\n this.img = img\n return img\n }\n\n private _changePosition = () => {\n this.overlay.updatePosition(true)\n }\n\n registryEvent() {\n // this.context.addEventListener('update', this._changePosition)\n }\n\n unRegistryEvent() {\n // this.context.removeEventListener('update', this._changePosition)\n }\n\n setVisible(visible: boolean) {\n if (visible === this.visible) { return }\n this.visible = visible\n this.changeOverlayVisible(visible)\n }\n\n changeOverlayVisible(visible: boolean) {\n if (visible === this.overlay.visible && this.options.collision_hide_icon) { return }\n if (this.options.collision_hide_icon) {\n this.overlay.visible = visible;\n this.overlay.div.style.visibility = visible ? \"visible\" : \"hidden\"\n } else {\n if (this.showTextStatus === visible) { return }\n this.textDiv.style.visibility = visible ? \"visible\" : \"hidden\"\n this.showTextStatus = visible\n }\n }\n\n parentSetVisible(visible: boolean) { \n if (!this.visible) { \n return\n }\n this.changeOverlayVisible(visible)\n // if (visible) {\n // this.renderHelperBox()\n // } else {\n // this.helperDiv?.remove()\n // this.helperDiv = null\n // }\n }\n\n getBox(boxScale = this.context.config.poi.boxScale) {\n const { width, height } = this.size\n const w = width * boxScale;\n const h = height * boxScale;\n const { x, y } = this.overlay.clientPos\n return {\n left: x - w / 2,\n right: x + w / 2,\n top: this.options.icon ? y - h : y - h / 2,\n bottom: this.options.icon ? y : y + h / 2,\n }\n }\n\n getOriginBox() { \n return this.getBox(1)\n }\n\n isContain(x: number, y: number) {\n if (!this.overlay.visible) { return false }\n if (!this.visible) {return false}\n const box = this.getOriginBox()\n return x >= box.left && x <= box.right && y >= box.top && y <= box.bottom\n }\n\n dispose() {\n this.unRegistryEvent();\n this.div = null as unknown as HTMLDivElement;\n this.textDiv = null as unknown as HTMLDivElement;\n this.img = undefined\n this.overlay.dispose();\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from \"../utils\";\nimport { debounce } from \"lodash\";\n\ninterface OverlayOptions {\n autoUpdate: boolean;\n appendToBody: boolean;\n autoChangePlacement: boolean;\n}\n\nconst defaultOptions: OverlayOptions = {\n autoUpdate: true,\n appendToBody: false,\n autoChangePlacement: false,\n};\n\ninterface OverlayEventMap {\n \"update-position\": {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\ntype Placement =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"leftTop\"\n | \"rightTop\"\n | \"leftBottom\"\n | \"rightBottom\"\n | \"center\";\n\nexport class Overlay extends EventDispatcher<OverlayEventMap> {\n public div: HTMLDivElement;\n\n private element?: Object3D & { getPosition?: () => Vector3 };\n\n public position = new Vector3();\n\n clientPos = { x: 0, y: 0 };\n\n visible = true;\n\n private options: OverlayOptions;\n\n placement: Placement = \"top\";\n\n observer: MutationObserver | null = null;\n\n constructor(\n private context: Context,\n options: Partial<OverlayOptions> = {}\n ) {\n super();\n this.options = { ...defaultOptions, ...options };\n this.registryEvent();\n this.div = this.initDiv();\n if (this.options.appendToBody) {\n document.body.appendChild(this.div);\n } else {\n this.context.container.appendChild(this.div);\n }\n }\n\n initObserver() {\n const observer = new MutationObserver(\n debounce(() => {\n if (this.div) {\n this.usePlacement();\n }\n }, 100)\n );\n observer.observe(this.div, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n this.observer = observer;\n }\n\n getPlacementPosition(): Record<Placement, Vector3> {\n const { max, min } = new Box3().setFromObject(this.element!);\n const centerX = (max.x + min.x) / 2;\n const centerY = (max.y + min.y) / 2;\n return {\n left: new Vector3(min.x, centerY, max.z),\n leftTop: new Vector3(min.x, max.y, max.z),\n top: new Vector3(centerX, max.y, max.z),\n rightTop: new Vector3(max.x, max.y, max.z),\n right: new Vector3(max.x, centerY, max.z),\n rightBottom: new Vector3(max.x, min.y, max.z),\n bottom: new Vector3(centerX, min.y, max.z),\n leftBottom: new Vector3(min.x, min.y, max.z),\n center: new Vector3(centerX, centerY, max.z),\n };\n }\n\n getPlacementScreenPosition(): Record<Placement, { x: number; y: number }> {\n const { width, height } = this.context.clientSize;\n const positions = this.getPlacementPosition();\n return Object.keys(positions).reduce((obj, key) => {\n const { x, y } = vector3ToDevice(\n (positions as any)[key],\n this.context.camera,\n width,\n height\n );\n (obj as any)[key] = { x, y };\n return obj;\n }, {}) as Record<Placement, { x: number; y: number }>;\n }\n\n // \u68C0\u67E5\u662F\u4E0D\u662F\u6EA2\u51FA\u4E86context.container\n // @return true \u8868\u793A\u6CA1\u6709\u6EA2\u51FA\n checkOverflow(\n max: { x: number; y: number },\n min: { x: number; y: number }\n ): boolean {\n const { width, height } = this.context.clientSize;\n return min.x > 0 && max.x < width && min.y < height && max.y > 0;\n }\n\n // \u8BA1\u7B97\u9002\u7528\u7684placement\n getPlacement(): { type: Placement, position: { x: number, y: number } } {\n const { clientWidth, clientHeight } = this.div;\n const positions = this.getPlacementScreenPosition();\n const halfWidth = clientWidth / 2;\n const halfHeight = clientHeight / 2;\n const placements: {\n type: Placement;\n getBox: (\n x: number,\n y: number\n ) => {\n max: { x: number; y: number };\n min: { x: number; y: number };\n };\n }[] = [\n {\n type: \"center\",\n getBox(x: number, y: number) {\n return {\n max: { x: halfWidth + x, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"left\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - halfHeight },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n {\n type: \"leftTop\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - clientHeight },\n min: { x: x - clientWidth, y: y },\n };\n },\n },\n {\n type: \"top\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"rightTop\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - clientHeight },\n min: { x: x, y: y },\n };\n },\n },\n {\n type: \"right\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - halfHeight },\n min: { x: x, y: y + halfHeight },\n };\n },\n },\n {\n type: \"rightBottom\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y },\n min: { x: x, y: y + clientHeight },\n };\n },\n },\n {\n type: \"bottom\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y },\n min: { x: x - halfWidth, y: y + clientHeight },\n };\n },\n },\n {\n type: \"leftBottom\",\n getBox(x, y) {\n return {\n max: { x: x, y: y },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n ];\n for (let i = 0; i < placements.length; i++) {\n const placement = placements[i];\n const position = positions[placement.type];\n const { max, min } = placement.getBox(position.x, position.y);\n if (this.checkOverflow(max, min)) {\n return {\n type: placement.type,\n position,\n };\n }\n }\n return {\n type: \"center\",\n position: positions.center\n };\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n return div;\n }\n\n usePlacement() {\n const placement = this.getPlacement();\n this.div.className = `overlay_${placement.type}`;\n this._updatePosition(placement.position.x, placement.position.y)\n }\n\n bindElement(element: Object3D) {\n this.element = element;\n if (this.options.autoChangePlacement) {\n this.initObserver();\n // TODO\n // this.usePlacement();\n }\n this.onUpdate();\n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = \"block\") {\n if (visible === this.visible) {\n return;\n }\n this.div.style.display = visible ? display : \"none\";\n this.visible = visible;\n }\n\n setOpacity(opacity: number) {\n this.div.style.opacity = `${opacity}`;\n }\n\n getPosition() {\n if (this.element) {\n if (typeof this.element.getPosition === \"function\") {\n return this.element.getPosition();\n }\n const box = new Box3().setFromObject(this.element);\n const center = box.getCenter(new Vector3());\n return center;\n } else {\n return this.position;\n }\n }\n\n get withinDisplayRange() {\n const { x, y } = this.clientPos;\n const { width, height } = this.context.clientSize;\n return x >= 0 && x <= width && y >= 0 && y <= height;\n }\n\n _updatePosition(x: number, y: number) { \n this.clientPos = { x, y };\n const { width, height, x: clientX, y: clientY } = this.context.clientSize;\n if (this.options.appendToBody) {\n this.div.style.left = `${clientX}px`;\n this.div.style.top = `${clientY + height}px`;\n }\n if (this.options.autoUpdate) {\n this.div.style.transform = `translate3d(${x}px, ${-height + y}px, 0)`;\n } else {\n this.dispatchEvent({ type: \"update-position\", x, y, width, height });\n }\n }\n\n updatePosition(force = false) {\n const vector = this.getPosition();\n const { width, height, x: clientX, y: clientY } = this.context.clientSize;\n const { x, y } = vector3ToDevice(\n vector,\n this.context.camera,\n width,\n height\n );\n if (this.clientPos.x === x && this.clientPos.y === y && !force) {\n return;\n }\n this._updatePosition(x, y)\n }\n\n onUpdate = () => {\n if (this.options.autoChangePlacement) { \n this.usePlacement();\n } else {\n this.updatePosition();\n }\n };\n\n registryEvent() {\n this.context.addEventListener(\"update\", this.onUpdate);\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"update\", this.onUpdate);\n }\n\n dispose() {\n this.unRegistryEvent();\n this.unBindElement();\n this.observer?.disconnect();\n this.div?.remove();\n this.div = null as unknown as HTMLDivElement;\n }\n}\n", "import { Context } from \"../context\";\nimport { Box3, Object3D, Vector3 } from \"three\";\nimport { GraphicLayer } from '../layer/graphic-layer'\nimport { PoiLayer } from '../layer/poi-layer'\nimport { Graphic, GraphicOptionsParam } from \"./graphic\";\nimport { Shadow } from \"./shadow\";\nimport { PoiOptionsParam } from \"./poi\";\nimport { HeatmapDataParam, HeatmapElement } from './heatmap'\nimport { Model, ModelOptions } from \"./model\";\n\nexport class Floor extends Object3D {\n \n graphicLayer: GraphicLayer;\n\n poiLayer: PoiLayer;\n\n grounds: Set<Graphic> = new Set();\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n groundUpper = new Object3D();\n\n models = new Object3D()\n\n modelMap = new Map()\n\n private groundMaxHeight = 0;\n\n constructor(public context: Context) {\n super()\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.groundUpper.add(this.graphicLayer)\n this.groundUpper.add(this.poiLayer)\n this.add(this.groundUpper)\n this.add(this.models)\n }\n\n getPosition() { \n const box = new Box3().setFromObject(this.groundUpper)\n return box.getCenter(new Vector3())\n }\n\n createGround(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.grounds.size\n const ground = new Graphic(this.context, options)\n this.addGrounds([ground])\n }\n\n addGrounds(grounds: Graphic[]) {\n grounds.forEach(ground => { \n if (!this.grounds.has(ground)) {\n ground.mesh.castShadow = true;\n this.grounds.add(ground)\n this.groundUpper.add(ground)\n }\n })\n this.changeGroundMaxHeight()\n }\n\n changeGroundMaxHeight() { \n const grounds = Array.from(this.grounds)\n this.groundMaxHeight = this.grounds.size > 0 ? Math.max(...grounds.map(ground => ground.options.height + ground.options.airHeight + ground.options.deltaHeight)) : 0\n this.graphicLayer.position.z = this.groundMaxHeight\n this.models.position.z = this.groundMaxHeight\n }\n\n get hasElement() { \n return !!(this.grounds.size || this.graphicLayer.children.length)\n }\n\n getCenter() { \n return new Box3().setFromObject(this.groundUpper).getCenter(new Vector3())\n }\n \n addModel(options: ModelOptions) { \n const model = new Model(this.context, options)\n this.models.add(model)\n this.modelMap.set(options.id, model)\n return model\n }\n\n addShadow() { \n const box = new Box3().setFromObject(this.groundUpper)\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n this.shadow.setPosition(center)\n this.shadow.changeLightCamera(size)\n // this.add(this.shadow)\n }\n\n addGraphic(graphicOptions: GraphicOptionsParam) {\n return this.graphicLayer.createGraphic(graphicOptions)\n }\n\n addPoi(poiOptions: PoiOptionsParam) {\n return this.poiLayer.createPoi(poiOptions)\n }\n\n addHeatmap(data: HeatmapDataParam) {\n if (!this.heatmap) {\n this.heatmap = new HeatmapElement(this.context)\n this.add(this.heatmap)\n }\n this.heatmap.loadData(data)\n const box = new Box3().setFromObject(this.graphicLayer)\n this.heatmap.position.setZ(box.max.z)\n return this.heatmap\n }\n\n removeHeatMap() {\n if (this.heatmap) {\n this.remove(this.heatmap)\n this.heatmap.dispose()\n this.heatmap = undefined\n }\n }\n\n setShadowOpacity(opacity: number) {\n this.shadow.setOpacity(opacity)\n }\n\n setShadowVisible(visible: boolean) {\n this.shadow.visible = visible;\n }\n\n dispose() {\n this.shadow.dispose();\n this.graphicLayer.dispose()\n this.poiLayer.dispose()\n this.grounds.forEach(ground => ground.dispose())\n this.heatmap?.dispose()\n this.groundUpper.clear()\n this.models.children.forEach((model) => (model as unknown as Model).dispose())\n this.models.clear()\n this.modelMap.clear()\n this.clear()\n }\n\n}", "import { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Box3, Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n graphicMap = new Map<string, Graphic>()\n\n constructor(context: Context) {\n super(context)\n }\n\n getCenter(): Vector3 { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGraphic(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.graphicMap.size;\n const graphic = new Graphic(this.context, options)\n this.add(graphic)\n this.graphicMap.set(options.id!, graphic)\n return graphic\n }\n\n removeGraphic(graphic: Graphic) { \n this.remove(graphic)\n this.graphicMap.delete(graphic.options.id!)\n graphic.dispose()\n }\n\n removeGraphicById(id: string) {\n if (this.graphicMap.has(id)) {\n this.removeGraphic(this.graphicMap.get(id)!)\n }\n }\n\n getGraphicByNodeId(id: string) {\n return this.graphicMap.get(id) || null\n }\n\n /**\n * \u83B7\u53D6\u5C04\u7EBF\u76F8\u4EA4\u7684\u5143\u7D20\n * @param raycaster \n */\n getGraphicByRaycaster(raycaster: Raycaster): { graphics: Graphic[], position: Vector3 | null } {\n const initData: {\n position: Vector3 | null,\n graphic: Graphic | null,\n distance: number\n } = { distance: 10000, graphic: null, position: null }\n const data = this.children.reduce((res, item) => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n const { distance } = pos\n if (distance < res.distance) {\n return {\n distance: res.distance,\n position: res.position,\n graphic: item\n }\n }\n }\n return res\n } else {\n return res\n }\n }, initData)\n if (data === initData) {\n return { graphics: [], position: null }\n }\n return { graphics: [data.graphic!], position: data.position }\n }\n}", "import { Context } from \"../context\";\nimport { Object3D } from \"three\";\nimport { dispose } from '../utils'\n\nexport class Layer extends Object3D {\n constructor(public context: Context) {\n super();\n }\n\n dispose() {\n dispose(this)\n this.clear()\n }\n}", "import { Poi, PoiOptionsParam } from \"../elements\";\nimport { Layer } from \"./layer\";\nimport { Context } from '../context'\nimport { debounce } from 'lodash'\nimport { Timer } from \"../utils\";\n\nexport class PoiLayer extends Layer {\n pois: Poi[] = []\n debounceCollisionDetection: () => void\n\n timer = new Timer()\n \n constructor(context: Context) {\n super(context)\n this.registryEvent()\n this.debounceCollisionDetection = debounce(this.collisionDetection, 10)\n }\n\n clear(force = false) {\n this.pois.forEach(item => {\n if (item.options.built_in && !force) { \n return\n }\n item.dispose()\n })\n this.pois = force ? [] : this.pois.filter(item => item.options.built_in)\n return this\n }\n\n createPoi(options: PoiOptionsParam) {\n const poi = new Poi(this.context, options)\n this.pushPoi(poi)\n poi.addEventListener(\"change-level\", () => this.changePoiLevelOrCollisionEnable(poi))\n poi.addEventListener(\"change-collision_enable\", () => this.changePoiLevelOrCollisionEnable(poi))\n Promise.resolve().then(() => { \n this.debounceCollisionDetection()\n })\n return poi\n }\n\n changePoiLevelOrCollisionEnable(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n this.pushPoi(poi)\n }\n\n removePoi(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n poi.dispose()\n }\n\n removePoiById(id: string) {\n const poi = this.pois.find(item => item.options.id === id)\n if (poi) {\n this.removePoi(poi)\n }\n }\n\n getPoiById(id: string) { \n const poi = this.pois.find(item => item.options.id === id)\n return poi || null\n }\n\n /**\n * \u4FDD\u5B58poi\u6309\u7167level\u6392\u5E8F\n * @param poi \n */\n pushPoi(poi: Poi) {\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u6700\u524D\u9762\n if (!poi.options.collision_enable) {\n this.pois.unshift(poi)\n return\n }\n // level\u6700\u5C0F\u7684\u5728\u6700\u540E\u9762\n if (poi.options.level === 0) {\n this.pois.push(poi)\n return\n }\n for (let i = 0; i < this.pois.length; i++) {\n const item = this.pois[i]\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u524D\u9762\n if (!item.options.collision_enable) { \n continue\n }\n if (item.options.level <= poi.options.level) {\n this.pois.splice(i, 0, poi)\n return\n }\n }\n // \u63D2\u5165\u5230\u6700\u540E\n this.pois.push(poi) \n }\n\n getPoiByDeviceXy(x: number, y: number) {\n const pois = this.pois.filter(item => {\n return (item instanceof Poi) && item.isContain(x, y)\n })\n return pois\n }\n\n onUpdate = () => { \n this.timer.requestAnimationFrame(() => { \n this.collisionDetection()\n })\n }\n\n /**\n * \u78B0\u649E\u68C0\u6D4B\n */\n collisionDetection() {\n const range: { left: number; right: number; top: number; bottom: number; }[] = []\n // \u6392\u9664\u5728\u5C4F\u5E55\u5916\u7684poi\n const pois = this.pois.filter(item => item.visible && item.withinDisplayRange)\n pois.forEach((item, index) => {\n const { left, right, top, bottom } = item.getBox()\n if (index === 0 || !item.options.collision_enable) {\n range.push({ left, right, top, bottom })\n item.parentSetVisible(true)\n return\n }\n // valid boolean \u8868\u793A\u53D1\u751F\u4E86\u78B0\u649E\n const valid = range.some((box) => { \n // \u5224\u65AD\u56DB\u4E2A\u70B9\u662F\u4E0D\u662F\u90FD\u4E0D\u5728box\u7684\u8303\u56F4\u5185\n return box.left < right && box.right > left && box.top < bottom && box.bottom > top;\n })\n item.parentSetVisible(!valid)\n if (!valid) { \n range.push({ left, right, top, bottom })\n }\n })\n }\n\n registryEvent() {\n this.context.addEventListener('update', this.onUpdate)\n }\n\n unRegistryEvent() { \n this.context.removeEventListener('update', this.onUpdate)\n }\n \n dispose() {\n this.timer.dispose()\n this.pois.forEach(item => item.dispose())\n this.pois.length = 0;\n this.debounceCollisionDetection = () => { }\n super.dispose()\n this.unRegistryEvent()\n }\n}", "import { Context } from \"../context\";\nimport {\n MeshBasicMaterial, Object3D, PlaneGeometry,\n Texture, DoubleSide, Mesh, Matrix3, Vector2\n} from \"three\";\nimport { create, Heatmap, HeatmapData, DataPoint } from '@mars3d/heatmap.js'\nimport { featureCollection, point, bbox, center as getCenter } from '@turf/turf'\n\ntype V = 'value'\ntype X = 'x'\ntype Y = 'y'\n\nexport type HeatmapDataParam = HeatmapData<DataPoint<V, X, Y>>\n\nexport class HeatmapElement extends Object3D {\n\n private heatmap?: Heatmap<V, X, Y>;\n\n private div: HTMLDivElement\n\n private plane?: Mesh;\n\n constructor(private context: Context) {\n super()\n this.div = document.createElement(\"div\")\n }\n\n clearHeatmap() {\n if (this.div.firstChild) {\n this.div.removeChild(this.div.firstChild)\n }\n this.heatmap = undefined;\n }\n\n loadData(data: HeatmapDataParam) {\n this.clearHeatmap()\n const { width, height, leftTop, center } = this.getBox(data)\n this.heatmap = create({\n width: width,\n height: height,\n container: this.div,\n ...this.context.config.heatMap,\n } as any);\n this.heatmap.setData(this.transformData(data, leftTop))\n this.initPlane(width, height)\n this.position.set(center[0], center[1], this.position.z)\n }\n\n initPlane(width: number, height: number) {\n if (this.plane) { this.remove(this.plane) }\n const geometry = new PlaneGeometry(width, height)\n const texture = new Texture(this.div.firstChild as HTMLCanvasElement);\n texture.needsUpdate = true;\n const material = new MeshBasicMaterial({\n transparent: true,\n side: DoubleSide,\n map: texture,\n });\n material.needsUpdate = true;\n this.plane = new Mesh(geometry, material)\n this.add(this.plane)\n }\n\n getTransMatrix({ x, y }: { x: number, y: number }) {\n // \u5148\u628A\u5DE6\u4E0A\u89D2\u5E73\u79FB\u523000\u70B9\uFF0C\u7136\u540E\u5BF9y\u8F74\u53D6\u53CD\n return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y))\n }\n\n /**\n * \u6240\u6709\u70B9\u7684\u5750\u6807\u51CF\u53BB\u5DE6\u4E0A\u89D2\u4ECE00\u70B9\u5F00\u59CB\u753Bcanvas\n * @param data \n * @param leftTop \n * @returns \n */\n transformData(data: HeatmapDataParam, leftTop: { x: number, y: number }): HeatmapDataParam {\n const matrix = this.getTransMatrix(leftTop)\n const $data = data.data.map(item => { \n const vector = new Vector2(item.x, item.y).applyMatrix3(matrix)\n return {\n x: vector.x,\n y: vector.y,\n value: item.value\n }\n })\n return {\n data: $data,\n max: data.max,\n min: data.min\n }\n }\n\n getBox(data: HeatmapDataParam) {\n const features = featureCollection(data.data.map(item => point([item.x, item.y])))\n // \u8FD4\u56DE\u4E00\u4E2A\u77E9\u5F62\u8FB9\u6846\u5750\u6807\n const box = bbox(features);\n const width = box[2] - box[0]\n const height = box[3] - box[1]\n const leftTop = { x: box[0], y: box[3] }\n const center = getCenter(features)\n return { width, height, leftTop, center: center.geometry.coordinates }\n }\n\n dispose() {\n this.div = null as unknown as HTMLDivElement\n this.heatmap = undefined\n }\n}", "import { Box3, Object3D, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { loadModel, dispose } from \"../utils\";\nimport { Poi } from \"./poi\";\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\n\nexport interface ModelOptions {\n modelUrl: string;\n icon?: string;\n icon_size?: [number, number];\n position?: Vector3;\n id: string;\n}\n\nexport class Model extends Object3D {\n poi: Poi | null = null;\n\n model: GLTF | null = null\n\n constructor(public context: Context, private options: ModelOptions) {\n super()\n this.position.copy(options.position || new Vector3(0, 0, 0))\n this.loadModel()\n }\n \n async loadModel() { \n const object = await loadModel(this.options.modelUrl);\n object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0)\n this.add(object.scene)\n this.model = object\n this.initPoi()\n }\n\n initPoi() {\n if (!this.options.icon) {\n return\n }\n const poi = this.context.currentFloor?.addPoi({\n icon: this.options.icon,\n icon_size: this.options.icon_size,\n built_in: true,\n level: 0\n })\n this.poi = poi || null\n if (this.model && poi) {\n poi.position = (new Box3().setFromObject(this)).getCenter(new Vector3())\n }\n }\n\n dispose() {\n dispose(this)\n this.model = null\n if (this.poi) {\n this.context.currentFloor?.poiLayer.removePoi(this.poi)\n this.poi = null;\n }\n }\n}", "import { Context } from \"../context\";\nimport { EventDispatcher, Vector3 } from \"three\";\nimport { createSvg, vector3ToDevice } from '../utils'\n\nexport class BaseSvg<T extends {} = {}> extends EventDispatcher<T> {\n protected points: Vector3[] = [];\n\n protected svg: SVGElement;\n\n protected enable = true;\n\n constructor(public context: Context) {\n super()\n this.svg = createSvg(`${context.container.clientWidth}`, `${context.container.clientHeight}`)\n context.container.appendChild(this.svg)\n this._registryEvent()\n }\n\n private _onResize = ({ width, height }: { width: number; height: number }) => {\n if (this.svg) {\n this.svg.setAttribute(\"width\", `${width}`)\n this.svg.setAttribute(\"height\", `${height}`)\n }\n }\n\n private _registryEvent() {\n this.context.addEventListener(\"resize\", this._onResize)\n }\n\n private _unRegistryEvent() { \n this.context.removeEventListener(\"resize\", this._onResize)\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.svg.style.display = 'block';\n } else {\n this.svg.style.display = 'none';\n }\n }\n\n getIntersectByPointerEvent(e: PointerEvent) {\n const { camera, renderer } = this.context\n const { offsetX: x, offsetY: y } = e\n const { clientWidth, clientHeight } = renderer.domElement;\n const nx = x / clientWidth * 2 - 1;\n const ny = 1 - y / clientHeight * 2;\n\n const v = new Vector3(nx, ny, 0);\n\n return v.unproject(camera);\n }\n\n getSvgCoordinate(vector: Vector3) {\n const { camera, container } = this.context\n const coord = vector3ToDevice(vector, camera, container.clientWidth, container.clientHeight)\n return coord\n }\n \n dispose() {\n this._unRegistryEvent()\n this.context.container.removeChild(this.svg)\n this.svg = null as unknown as SVGElement\n }\n}", "import { Context } from \"../context\";\nimport { Vector3 } from \"three\";\nimport { setCirclePosition, createCircle, createLine, setLineStartEnd } from '../utils'\nimport { BaseSvg } from './base-svg'\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SvgLine extends BaseSvg<SvgLineEventMap> {\n\n private circles: SVGElement[] \n \n private line: SVGElement\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { circle, line } } } = context\n this.circles = [createCircle(circle.radius, circle.fill), createCircle(circle.radius, circle.fill)]\n this.line = createLine(line.stroke)\n this.svg.appendChild(this.circles[0]);\n this.svg.appendChild(this.circles[1]);\n this.svg.appendChild(this.line);\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points[0]) {\n const point1 = this.getSvgCoordinate(this.points[0])\n setCirclePosition(this.circles[0], point1.x, point1.y)\n setLineStartEnd(this.line, point1)\n }\n if (this.points[1]) {\n const point2 = this.getSvgCoordinate(this.points[1])\n setCirclePosition(this.circles[1], point2.x, point2.y)\n setLineStartEnd(this.line, undefined, point2)\n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u53EA\u5728\u6709\u7B2C\u4E00\u4E2A\u70B9\u7684\u65F6\u5019\u9700\u8981\n if (this.points.length !== 1) { return }\n this.line.style.display = \"block\";\n setLineStartEnd(this.line, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n this.line.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n // \u4FEE\u6539\u70B9\n const circle = this.circles[this.points.length]\n setCirclePosition(circle, x, y)\n if (!this.points.length) { \n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(this.line, { x, y }, { x, y })\n }\n this.addPoint(point)\n }\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.points.length >= 2) {\n const distance = this.calculatedDistance()\n this.dispatchEvent({ type: 'distance', distance })\n }\n }\n\n /**\n * \u8BA1\u7B97\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u8DDD\u79BB\n */\n calculatedDistance() { \n const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = this.points\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.line = null as unknown as SVGElement\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { BaseSvg } from \"./base-svg\";\nimport { setCirclePosition, setLineStartEnd, createLine, createCircle } from '../utils'\nimport { Vector3 } from \"three\";\n\ninterface SvgPolygonEventMap {\n 'area': { area: number }\n}\n\nexport class SvgPolygon extends BaseSvg<SvgPolygonEventMap> {\n\n private circles: SVGElement[] = []\n\n private lines: SVGElement[] = []\n\n private isClose = false\n\n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n private get lastLine() {\n return this.lines.slice(-1)[0]\n }\n\n private addCircle(circle: SVGElement) {\n this.circles.push(circle)\n this.svg.appendChild(circle)\n }\n\n private addLine(line: SVGElement) {\n this.lines.push(line)\n this.svg.appendChild(line)\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points.length) {\n this.points.forEach((point, index) => {\n const devicePoint = this.getSvgCoordinate(point)\n if (this.circles[index]) {\n setCirclePosition(this.circles[index], devicePoint.x, devicePoint.y)\n }\n if (index !== 0) {\n setLineStartEnd(this.lines[index - 1], undefined, devicePoint)\n }\n if (this.lines[index]) {\n setLineStartEnd(this.lines[index], devicePoint)\n }\n }) \n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u5FC5\u987B\u8981\u6709\u4E00\u4E2A\u70B9\u5E76\u4E14\u8FD8\u6CA1\u6709\u95ED\u5408\u624D\u9700\u8981\u5904\u7406\n if (!this.lastLine || this.isClose) { return }\n this.lastLine.style.display = \"block\";\n setLineStartEnd(this.lastLine, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\u5C31\u4E0D\u9700\u8981\u5904\u7406\u4E86\n if (this.isClose) { return } \n this.lastLine.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\n if (this.isClose) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n if (this.checkAdsorb(x, y)) {\n this.isClose = true\n this.addPoint(this.points[0])\n } else {\n this.addPoint(point)\n }\n const { circle: { fill, radius }, line: { stroke } } = this.context.config.svg\n if (!this.isClose) {\n // \u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u70B9\n const circle = createCircle(radius, fill)\n setCirclePosition(circle, x, y)\n this.addCircle(circle)\n }\n if (this.lines.length) {\n // \u5982\u679C\u5DF2\u7ECF\u6709\u4E00\u6761\u7EBF\u4E86 \u8981\u95ED\u5408\u8FD9\u6761\u7EBF\n setLineStartEnd(this.lastLine, undefined, { x, y })\n }\n // \u5982\u679C\u8FD9\u4E2A\u591A\u8FB9\u5F62\u8FD8\u6CA1\u6709\u95ED\u5408 \u5C31\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u7EBF \u5305\u62EC\u521B\u5EFA\u7B2C\u4E00\u6761\u7EBF\n if (!this.isClose) {\n const line = createLine(stroke)\n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(line, { x, y }, { x, y })\n this.addLine(line)\n }\n }\n }\n\n /**\n * \u68C0\u6D4B\u662F\u5426\u53EF\u4EE5\u5438\u9644\n * \u5750\u6807\u70B9\u6700\u5C113\u4E2A \u4F20\u5165\u7684\u5750\u6807\u70B9\u548C\u7B2C\u4E00\u4E2A\u5750\u6807\u7684\u50CF\u7D20\u76F8\u5DEE\u4E0D\u8D85\u8FC75\u4E2A\u50CF\u7D20\n */\n checkAdsorb(x: number, y: number) {\n if (this.points.length < 3) { return false }\n const circle = this.circles[0]\n const cx = +circle.getAttribute(\"cx\")!\n const cy = +circle.getAttribute(\"cy\")!\n return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.isClose) {\n const area = this.calculatedArea()\n this.dispatchEvent({ type: 'area', area })\n }\n }\n // \u8BA1\u7B97\u9762\u79EF\n calculatedArea() {\n const cds = this.points.map(item => [item.x, item.y])\n let area = 0\n const numPoints = cds.length\n for (let i = 0; i < numPoints; i++) {\n const j = (i + 1) % numPoints\n area += (cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1])\n }\n return Math.abs(area / 2)\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.lines = []\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { Box3 } from \"three\";\nimport { vector3ToDevice, createRect, setRectPosition } from '../utils'\nimport { BaseSvg } from './base-svg'\nimport { Graphic } from \"./graphic\";\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SelectBox extends BaseSvg<SvgLineEventMap> {\n\n private rect!: SVGElement\n\n private cornerRect: SVGElement[] = [] // \u56DB\u4E2A\u89D2\u4E0A\u7684\u65B9\u5757\n\n private centerRect: SVGElement[] = [] // \u56DB\u4E2A\u7EBF\u4E2D\u95F4\u7684\u65B9\u5757\n\n private graphic?: Graphic\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { line } } } = context\n this.rect = createRect(line.stroke, \"transparent\")\n this.svg.appendChild(this.rect)\n for (let i = 0; i < 4; i++) {\n this.cornerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.centerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.svg.appendChild(this.cornerRect[i])\n this.svg.appendChild(this.centerRect[i])\n }\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (!this.graphic) {\n setRectPosition(this.rect, 0, 0, 0, 0)\n for (let i = 0; i < this.cornerRect.length; i++) {\n setRectPosition(this.cornerRect[i], 0, 0, 0, 0)\n setRectPosition(this.centerRect[i], 0, 0, 0, 0)\n }\n } else {\n const box = new Box3().setFromObject(this.graphic)\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const leftBottom = vector3ToDevice(min, camera, w, h)\n const rightTop = vector3ToDevice(max, camera, w, h)\n // \u753B\u51FA\u4E00\u4E2A\u6846\u6765\n setRectPosition(this.rect, leftBottom.x, rightTop.y, Math.abs(rightTop.x - leftBottom.x), Math.abs(rightTop.y - leftBottom.y))\n // \u56DB\u4E2A\u89D2\u7684\u4F4D\u7F6E\n const { x: left, y: bottom } = leftBottom\n const { x: right, y: top } = rightTop\n const halfWidth = 5;\n const corners = [\n { x: left - halfWidth, y: top - halfWidth }, // \u5DE6\u4E0A\u89D2\n { x: right - halfWidth, y: top - halfWidth }, // \u53F3\u4E0A\u89D2\n { x: left - halfWidth, y: bottom - halfWidth }, // \u5DE6\u4E0B\u89D2\n { x: right - halfWidth, y: bottom - halfWidth }, // \u53F3\u4E0B\u89D2 \n ]\n for (let i = 0; i < corners.length; i++) {\n setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2)\n }\n // \u56DB\u4E2A\u4E2D\u95F4\u7684\u4F4D\u7F6E\n const centerHalfWidth = 4;\n const centerX = (left + right) / 2\n const centerY = (bottom + top) / 2\n const centers = [\n { x: centerX - centerHalfWidth, y: top - centerHalfWidth }, // \u4E0A\n { x: left - centerHalfWidth, y: centerY - centerHalfWidth }, // \u5DE6\n { x: right - centerHalfWidth, y: centerY - centerHalfWidth }, // \u53F3\n { x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }, // \u4E0B\n ]\n for (let i = 0; i < centers.length; i++) {\n setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2)\n }\n }\n }\n \n selectGraphic(graphic: Graphic) { \n this.graphic = graphic\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.rect = null as unknown as SVGElement\n this.cornerRect = []\n this.centerRect = []\n }\n}", "import { createRect, isContain, setRectPosition, vector3ToDevice } from \"../../utils\";\nimport { Context } from \"../../context\";\nimport { BaseSvg, Graphic } from \"../../elements\";\nimport { Frustum, Vector3 } from \"three\";\n\ninterface BoxSelectionEventMap { \n \"selected\": {\n list: Graphic[]\n }\n}\n\nexport class BoxSelection extends BaseSvg<BoxSelectionEventMap> {\n\n private startPoint?: Vector3;\n\n private endPoint?: Vector3;\n\n rect: SVGElement;\n\n frustum = new Frustum();\n\n constructor(context: Context) { \n super(context);\n const { config: { selectBox: { fill, stroke } } } = context\n this.rect = createRect(stroke, fill)\n this.svg.appendChild(this.rect)\n this.registryEvent()\n }\n\n setEnable(enable: boolean): void {\n super.setEnable(enable)\n setRectPosition(this.rect, 0, 0, 0, 0)\n if (enable) {\n this.registryEvent()\n } else {\n this.startPoint = undefined\n this.unRegistryEvent()\n }\n }\n\n onPointerDown = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.startPoint = point\n }\n this.endPoint = undefined;\n }\n\n onPointerMove = (e: PointerEvent) => { \n if (!this.enable || !this.startPoint) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n }\n\n onPointerUp = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n this.doSelect()\n this.startPoint = undefined\n }\n\n onUpdate = () => {\n if (this.startPoint) {\n const startPoint = this.getSvgCoordinate(this.startPoint)\n let endPoint = { ...startPoint }\n if (this.endPoint) {\n endPoint = this.getSvgCoordinate(this.endPoint)\n }\n const leftTop = { x: Math.min(startPoint.x, endPoint.x), y: Math.min(startPoint.y, endPoint.y) }\n const width = Math.abs(endPoint.x - startPoint.x)\n const height = Math.abs(endPoint.y - startPoint.y)\n setRectPosition(this.rect, leftTop.x, leftTop.y, width, height)\n } else {\n setRectPosition(this.rect, 0, 0, 0, 0)\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n doSelect() { \n if (this.startPoint && this.endPoint) {\n const dis = this.startPoint.distanceTo(this.endPoint);\n if (dis < 0.1) { return }\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n const startDevice = vector3ToDevice(this.startPoint!, camera, w, h)\n const endDevice = vector3ToDevice(this.endPoint!, camera, w, h)\n const leftTop = { x: Math.min(startDevice.x, endDevice.x), y: Math.min(startDevice.y, endDevice.y) }\n const rightBottom = { x: Math.max(startDevice.x, endDevice.x), y: Math.max(startDevice.y, endDevice.y) }\n const list = this.searchMapInFrustum(leftTop, rightBottom);\n this.dispatchEvent({ type: \"selected\", list })\n }\n }\n\n searchMapInFrustum(leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): Graphic[] {\n const { context } = this\n return context.currentFloor?.graphicLayer.children.filter(item => {\n return item instanceof Graphic && this.searchChildInFrustum(item, leftTop, rightBottom)\n }) as Graphic[] || []\n }\n\n searchChildInFrustum(object: Graphic, leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): boolean {\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n if (!object) return false;\n if (!object.mesh) { \n // \u70B9\n const position = object.getPosition()\n if (position) {\n const position2d = vector3ToDevice(position, camera, w, h)\n return isContain(position2d, leftTop, rightBottom)\n }\n return false\n }\n if (!object.mesh.geometry.boundingBox) {\n object.mesh.geometry.computeBoundingBox();\n }\n const box = object.mesh.geometry.boundingBox;\n if (!box) { return false }\n const { min, max } = box\n const minDevice = vector3ToDevice(min, camera, w, h)\n const maxDevice = vector3ToDevice(max, camera, w, h)\n \n if (!isContain(minDevice, leftTop, rightBottom)) { return false }\n if (!isContain(maxDevice, leftTop, rightBottom)) { return false; }\n return true;\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}\n\n", "import { Graphic, Poi } from \"../../elements\";\nimport { Context } from \"../../context\";\nimport { EventDispatcher } from \"three\";\nimport { Timer } from \"../../utils\";\n\ninterface HoverHelperEventMap {\n \"hover-change\": {\n graphics: Graphic[]\n },\n}\n\nexport class HoverHelper extends EventDispatcher<HoverHelperEventMap> { \n\n curGraphics = new Set<Graphic>()\n\n timer = new Timer()\n\n graphicTimerMap = new Map<Graphic, number>()\n \n constructor(private context: Context) {\n super()\n this.registryEvent()\n }\n\n onPointerMove = ({ graphics, pois, e }: { graphics: Graphic[], pois: Poi[], e: PointerEvent }) => {\n const poiGraphics = pois\n .map(item => this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id))\n .filter(graphic => graphic && graphic.options.geometry.type === \"point\") as Graphic[]\n if (!graphics.length && !poiGraphics.length && this.curGraphics.size) {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n return\n }\n const { time } = this.context.config.hover\n const allGraphics = new Set<Graphic>()\n if (poiGraphics.length) { \n // \u627E\u79BB\u4E2D\u5FC3\u70B9\u6700\u65B0\u7684\u90A3\u4E2A\n let resGraphic: Graphic;\n let distance = 10000;\n poiGraphics.forEach(graphic => { \n const poi = pois.find(poi => poi.options.id === graphic.options.id)!\n const { x, y } = poi.clientPos\n let curDistance = Math.sqrt((x - e.offsetX) ** 2 + (y - e.offsetY) ** 2)\n if (curDistance < distance) {\n distance = curDistance\n resGraphic = graphic\n }\n })\n allGraphics.add(resGraphic!)\n }\n if (!allGraphics.size) { \n graphics.forEach(graphic => allGraphics.add(graphic))\n }\n allGraphics.forEach((graphic) => {\n // \u5982\u679C\u5DF2\u7ECF\u6709hover\u7684\u5B9A\u65F6\u5668\u5728\u6267\u884C\u4E86\u5C31\u8FD4\u56DE\n if (this.graphicTimerMap.get(graphic)) { \n return\n }\n // \u5982\u679C\u8FD9\u4E2A\u5143\u7D20\u7684hover\u5DF2\u7ECF\u89E6\u53D1\u8FC7\u4E86\u5C31\u8FD4\u56DE\n if (this.curGraphics.has(graphic)) { \n return\n }\n // \u8FD9\u4E2A\u5143\u7D20\u6CA1\u6709\u89E6\u53D1\u8FC7\u4E5F\u6CA1\u6709\u5B9A\u65F6\u5668\u5C31\u6DFB\u52A0\u4E00\u4E2A\u5B9A\u65F6\u5668\n const timer = this.timer.setTimeout(() => {\n this.curGraphics.add(graphic)\n this.graphicTimerMap.delete(graphic)\n this.timer.clearTimeout(timer)\n this.handleHoverGraphicsChange()\n }, time)\n this.graphicTimerMap.set(graphic, timer)\n })\n // \u5982\u679C\u5B9A\u65F6\u5668\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524Dgraphics\u4E2D\u4E86\u5C31\u5220\u9664\n this.graphicTimerMap.forEach((timer, graphic) => { \n if (!allGraphics.has(graphic)) { \n this.timer.clearTimeout(timer)\n this.graphicTimerMap.delete(graphic)\n }\n })\n // \u5982\u679C\u5DF2\u7ECFhover\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524D\u7684graphics\u4E86\u5C31\u5220\u9664\n const size = this.curGraphics.size\n this.curGraphics.forEach((graphic) => { \n if (!allGraphics.has(graphic)) { \n this.curGraphics.delete(graphic)\n }\n })\n // \u5982\u679C\u6709\u5220\u9664\u5C31\u89E6\u53D1\u4E8B\u4EF6\n if (size !== this.curGraphics.size) {\n this.handleHoverGraphicsChange()\n }\n }\n\n onPointerLevel = () => {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n }\n\n handleHoverGraphicsChange(graphics = this.curGraphics) { \n this.dispatchEvent({ type: 'hover-change', graphics: Array.from(graphics) })\n }\n\n registryEvent() {\n this.context.addEventListener(\"pointer-over\", this.onPointerMove)\n this.context.addEventListener(\"pointer-move\", this.onPointerMove)\n this.context.addEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"pointer-over\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-move\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-level\", this.onPointerLevel)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.timer.dispose()\n }\n}", "import { Context } from \"../context\";\nimport {\n Color,\n LineBasicMaterial,\n MeshStandardMaterial,\n MeshBasicMaterial,\n ShaderMaterial,\n Vector3,\n DoubleSide\n} from \"three\";\n\nfunction vectorToString(vector: Vector3) {\n return `${vector.x}-${vector.y}-${vector.z}`;\n}\n\ninterface LineMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshStandardMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshBasicMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface ShaderMaterialOptions {\n gradualColor: string[];\n center: Vector3;\n maxValue: number;\n opacity: number;\n direction: Vector3;\n max: Vector3;\n min: Vector3;\n}\n\nexport class MaterialFactory {\n private lineMaterialMap = new Map<string, LineBasicMaterial>();\n\n private meshStandardMaterialMap = new Map<string, MeshStandardMaterial>();\n\n private meshBasicMaterialMap = new Map<string, MeshBasicMaterial>();\n\n private shaderMaterialMap = new Map<string, ShaderMaterial>();\n\n constructor(private context: Context) {}\n\n generateLineMaterialKey({ color, opacity }: LineMaterialOptions) {\n return `${color}-${opacity}`;\n }\n\n createLineMaterial({ color, opacity }: LineMaterialOptions) {\n const key = this.generateLineMaterialKey({ color, opacity });\n if (this.lineMaterialMap.has(key)) {\n return this.lineMaterialMap.get(key)!;\n }\n const lineMaterial = new LineBasicMaterial({\n color: new Color(color).convertLinearToSRGB(),\n transparent: true,\n opacity: opacity,\n });\n this.lineMaterialMap.set(key, lineMaterial);\n return lineMaterial;\n }\n\n createMeshStandardMaterial({ color, opacity }: MeshStandardMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshStandardMaterialMap.has(key)) {\n return this.meshStandardMaterialMap.get(key)!;\n }\n const material = new MeshStandardMaterial({\n color: new Color(color).convertLinearToSRGB(),\n roughness: 1,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n });\n this.meshStandardMaterialMap.set(key, material);\n return material;\n }\n\n createMeshBasicMaterial({ color, opacity }: MeshBasicMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshBasicMaterialMap.has(key)) {\n return this.meshBasicMaterialMap.get(key)!;\n }\n const material = new MeshBasicMaterial({\n color: color,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n });\n this.meshBasicMaterialMap.set(key, material);\n return material;\n }\n\n createShaderMaterial({\n gradualColor,\n center,\n maxValue,\n opacity,\n direction,\n max,\n min,\n }: ShaderMaterialOptions) {\n const key = `${gradualColor.toString()}-${vectorToString(\n center\n )}-${maxValue}-${opacity}-${vectorToString(direction)}`;\n if (this.shaderMaterialMap.has(key)) {\n return this.shaderMaterialMap.get(key)!;\n }\n // \u81EA\u5B9A\u4E49\u7740\u8272\u5668\u4EE3\u7801\n const vertexShader = `\n uniform vec3 uColor;\n uniform vec3 uGradualColor;\n uniform vec3 center;\n uniform vec3 uDirection;\n uniform vec3 uMax;\n uniform vec3 uMin;\n uniform float maxValue;\n varying vec3 vColor; \n\n void main() {\n vec3 lineVec = uMax - uMin; // \u7EBF\u6BB5AB\u7684\u65B9\u5411\u5411\u91CF\n vec3 AP = position - uMin; // \u5411\u91CFAP\n float t = dot(AP, lineVec) / dot(lineVec, lineVec); // \u53C2\u6570t\n t = clamp(t, 0.0, 1.0); // \u9650\u5236t\u5728[0, 1]\u8303\u56F4\u5185\uFF0C\u786E\u4FDD\u6700\u77ED\u8DDD\u79BB\u5728\u7EBF\u6BB5AB\u4E0A\n \n vec3 closestPoint = uMin + t * lineVec; // \u6700\u77ED\u8DDD\u79BB\u70B9\u7684\u4F4D\u7F6E\n vec3 vecAP = closestPoint - uMin; // \u5411\u91CFAP'\n float distance = length(vecAP);\n float maxLen = length(lineVec);\n\n vec3 direction = normalize(uDirection);\n float gradient = dot(normalize(normal), normalize(uDirection));\n vec3 currentPosition = position - center;\n // float colorFactor = (dot(direction, currentPosition) / maxValue) * 0.5 + 0.5;\n float colorFactor = distance / maxLen;\n\n vColor = mix(uColor, uGradualColor, 1.0 - t);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `;\n\n const fragmentShader = `\n varying vec3 vColor;\n uniform float opacity;\n\n void main() {\n gl_FragColor = vec4(vColor.x, vColor.y, vColor.z, opacity);\n }\n `;\n\n // \u521B\u5EFA\u81EA\u5B9A\u4E49ShaderMaterial\n const material = new ShaderMaterial({\n uniforms: {\n uColor: {\n value: new Color(gradualColor[0]).convertLinearToSRGB(),\n },\n uGradualColor: {\n value: new Color(gradualColor[1]).convertLinearToSRGB(),\n },\n center: {\n value: center,\n },\n maxValue: {\n value: maxValue,\n },\n opacity: {\n value: opacity,\n },\n uDirection: {\n value: direction,\n },\n uMax: {\n value: max,\n },\n uMin: {\n value: min,\n },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n side: DoubleSide,\n });\n this.shaderMaterialMap.set(key, material);\n return material;\n }\n\n dispose() {\n this.lineMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.lineMaterialMap.clear();\n\n this.meshStandardMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.meshStandardMaterialMap.clear();\n\n this.meshBasicMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.meshBasicMaterialMap.clear();\n\n this.shaderMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.shaderMaterialMap.clear();\n }\n}\n", "import { Box3, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { vector3ToDevice } from \"./coordinate\";\n\nexport class CameraBound {\n private prevCamera = {\n position: new Vector3(),\n zoom: 1,\n target: new Vector3()\n }\n\n private enable = true;\n\n constructor(private context: Context) {\n this.registryEvent()\n this.changePrevCamera()\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n changePrevCamera() {\n this.prevCamera = {\n position: this.context.camera.position.clone(),\n zoom: this.context.camera.zoom,\n target: this.context.control.target.clone()\n }\n }\n\n backToPrevCamera() {\n this.setEnable(false)\n this.context.camera.position.copy(this.prevCamera.position)\n this.context.camera.zoom = this.prevCamera.zoom;\n this.context.control.target.copy(this.prevCamera.target)\n this.context.control.update()\n this.setEnable(true)\n }\n\n registryEvent() { \n this.context.addEventListener(\"control-change\", this.onCameraChange)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"control-change\", this.onCameraChange)\n }\n\n getCurFloorScreenPosition() {\n if (!this.context.currentFloor) {\n return null\n }\n const box = new Box3().setFromObject(this.context.currentFloor.groundUpper);\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const lb = vector3ToDevice(min, camera, w, h)\n const rt = vector3ToDevice(max, camera, w, h)\n const lt = vector3ToDevice(new Vector3(min.x, max.y, max.z), camera, w, h)\n const rb = vector3ToDevice(new Vector3(max.x, min.y, min.z), camera, w, h)\n const left = Math.min(lb.x, rt.x, lt.x, rb.x)\n const right = Math.max(lb.x, rt.x, lt.x, rb.x)\n const top = Math.min(lb.y, rt.y, lt.y, rb.y)\n const bottom = Math.max(lb.y, rt.y, lt.y, rb.y)\n return { left, right, top, bottom }\n }\n\n /**\n * \u68C0\u6D4B\u5730\u56FE\u662F\u4E0D\u662F\u5728\u663E\u793A\u8303\u56F4\n * @param param0 \n * @returns \n */\n checkDistanceToScreenEdge({ left, right, top, bottom }: { left: number, right: number, top: number, bottom: number }) { \n const { width, height } = this.context.clientSize\n const [pt, pr, pb, pl] = this.context.config.cameraBound.padding\n // console.log(left, left <= pl , width - right, width - right <= pr , top <= pt , height - bottom <= pb)\n // \u6240\u6709\u7684\u8FB9\u90FD\u4E0D\u8D85\u51FA\n return (left <= pl && width - right <= pr && top <= pt && height - bottom <= pb)\n }\n\n onCameraChange = () => {\n // \u5224\u65AD\u5982\u679C\u8D85\u51FA\u5C31\u7528\u4E4B\u524D\u7684prevCamera\n // \u83B7\u53D6\u5730\u56FE\u7684\u5C4F\u5E55\u4F4D\u7F6E\n // \u5148\u4E0D\u505A\u8FB9\u754C\u5224\u65AD\n // const bound = this.getCurFloorScreenPosition();\n // if (bound) {\n // const { left, right, top, bottom } = bound\n // const isInBound = this.checkDistanceToScreenEdge({ left, right, top, bottom });\n // console.log(\"isInBound\", isInBound)\n // if (isInBound) {\n // this.changePrevCamera()\n // } else {\n // this.backToPrevCamera()\n // }\n // }\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\n apiPath: {\n floorGraphic: string,\n floorRange: string\n },\n resizeObserver: boolean;\n heatMap: Partial<HeatmapConfiguration>,\n useFloorCache: boolean;\n control: {\n maxPolar: number;\n defaultPolar: number;\n defaultAzimuthal: number;\n },\n defaultPadding: [number, number, number, number];\n initTransToMark: boolean;\n svg: {\n circle: {\n radius: string;\n fill: string;\n },\n line: {\n stroke: string;\n }\n },\n selectBox: {\n stroke: string;\n fill: string;\n },\n hover: {\n time: number;\n },\n ground: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean,\n strokeColor: string,\n strokeOpacity: number\n },\n markGraphic: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean;\n strokeColor: string;\n strokeOpacity: number;\n },\n graphic: {\n fillOpacity: number,\n },\n cameraBound: {\n padding: [number, number, number, number]\n },\n poi: {\n boxScale: number;\n }\n}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\n apiPath: {\n floorGraphic: \"/api/inception-map/floor/get\",\n floorRange: \"/api/inception-map/range/get\"\n },\n resizeObserver: false,\n initTransToMark: false,\n heatMap: {\n radius: 50,\n gradient: {\n 0: '#8F9FCD',\n 0.5: '#6284FF',\n 1: '#F95D5D',\n },\n },\n useFloorCache: true,\n control: {\n maxPolar: 1.2,\n defaultPolar: 1.1,\n defaultAzimuthal: 0,\n },\n defaultPadding: [20, 20, 20, 20],\n svg: {\n circle: {\n radius: \"2\",\n fill: \"#1CADFF\"\n },\n line: {\n stroke: \"#1CADFF\"\n }\n },\n selectBox: {\n stroke: \"#1CADFF\",\n fill: \"rgba(28, 173, 255, 0.3)\"\n },\n hover: {\n time: 100\n },\n ground: {\n color: \"#F6F6F6\",\n opacity: 1,\n height: 0.001,\n stroke: false, \n strokeColor: \"#E6E6E6\",\n strokeOpacity: 1\n },\n markGraphic: {\n color: \"#EEF0F3\",\n opacity: 1,\n height: 0.001,\n stroke: false,\n strokeColor: \"#000\",\n strokeOpacity: 1\n },\n graphic: {\n fillOpacity: 1,\n },\n cameraBound: {\n padding: [150, 150, 150, 150]\n },\n poi: {\n boxScale: 1.0\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\n}"],
5
+ "mappings": "2/BAAA,IAAAA,GAAmD,WCM5C,IAAMC,EAAN,KAAY,CAAZ,cACLC,EAAA,aAAQ,CACN,iBAAkB,IAAI,IACtB,QAAS,IAAI,IACb,SAAU,IAAI,GAChB,GAEA,sBAAsBC,EAAgB,CACpC,IAAMC,EAAQ,OAAO,sBAAsB,IAAM,CAC/C,KAAK,MAAM,iBAAiB,OAAOA,CAAK,EACxCD,EAAG,CACL,CAAC,EACD,YAAK,MAAM,iBAAiB,IAAIC,CAAK,EAC9BA,CACT,CAEA,qBAAqBA,EAAe,CAClC,KAAK,MAAM,iBAAiB,OAAOA,CAAK,EACxC,OAAO,qBAAqBA,CAAK,CACnC,CAEA,WAAWD,EAAQE,EAAsB,CACvC,IAAMD,EAAQ,OAAO,WAAW,IAAM,CACpC,KAAK,MAAM,QAAQ,OAAOA,CAAK,EAC/BD,EAAG,CACL,EAAGE,CAAI,EACP,YAAK,MAAM,QAAQ,IAAID,CAAK,EACrBA,CACT,CAEA,aAAaA,EAAe,CAC1B,KAAK,MAAM,QAAQ,OAAOA,CAAK,EAC/B,OAAO,aAAaA,CAAK,CAC3B,CAEA,YAAYD,EAAQE,EAAsB,CACxC,IAAMD,EAAQ,OAAO,YAAY,IAAM,CACrC,KAAK,MAAM,SAAS,OAAOA,CAAK,EAChCD,EAAG,CACL,EAAGE,CAAI,EACP,YAAK,MAAM,SAAS,IAAID,CAAK,EACtBA,CACT,CAEA,cAAcA,EAAe,CAC3B,KAAK,MAAM,SAAS,OAAOA,CAAK,EAChC,OAAO,cAAcA,CAAK,CAC5B,CAEA,SAAU,CACR,KAAK,MAAM,iBAAiB,QAAQA,GAAS,CAC3C,OAAO,qBAAqBA,CAAK,CACnC,CAAC,EACD,KAAK,MAAM,iBAAiB,MAAM,EAClC,KAAK,MAAM,QAAQ,QAAQA,GAAS,CAClC,OAAO,aAAaA,CAAK,CAC3B,CAAC,EACD,KAAK,MAAM,QAAQ,MAAM,EACzB,KAAK,MAAM,SAAS,QAAQA,GAAS,CACnC,OAAO,cAAcA,CAAK,CAC5B,CAAC,EACD,KAAK,MAAM,SAAS,MAAM,CAC5B,CACF,ECpEA,IAAAE,EAGO,WACPC,GAA4B,6CAErB,SAASC,IAAY,CAC1B,IAAMC,EAAQ,IAAI,QAClB,OAAAA,EAAM,WAAa,IAAI,QAAM,QAAQ,EAC9BA,CACT,CAEO,SAASC,IAAe,CAC7B,IAAMC,EAAW,IAAI,gBAAc,CACjC,UAAW,EAIb,CAAC,EACD,OAAAA,EAAS,UAAY,GACrBA,EAAS,cAAc,CAAC,EACxBA,EAAS,cAAc,QAAQ,EAC/BA,EAAS,cAAc,OAAO,gBAAgB,EAC9CA,EAAS,UAAU,QAAU,GAC7BA,EAAS,UAAU,WAAa,GAChCA,EAAS,UAAU,KAAO,mBACnBA,CACT,CAEO,SAASC,GAAWC,EAAeC,EAAoC,CAC5E,IAAMC,EAAS,IAAI,qBAAmB,CAACF,EAAQ,EAAGA,EAAQ,EAAGC,EAAS,EAAG,CAACA,EAAS,EAAG,KAAO,GAAI,EACjG,OAAAC,EAAO,GAAG,IAAI,EAAG,EAAG,CAAC,EACrBA,EAAO,SAAS,IAAI,EAAG,EAAG,GAAG,EAC7BA,EAAO,OAAO,EAAG,EAAG,CAAC,EACdA,CACT,CAEO,SAASC,IAAY,CAC1B,IAAMC,EAAS,IAAI,QAObC,EAAe,IAAI,eAAa,SAAU,GAAG,EACnD,OAAAD,EAAO,IAAIC,CAAY,EAChBD,CACT,CAEO,SAASE,GAAYJ,EAA4BK,EAA+B,CACrF,IAAMC,EAAU,IAAI,eAAYN,EAAQK,CAAU,EAElD,OAAAC,EAAQ,cAAgB,GAOxBA,EAAQ,UAAY,EACbA,CACT,CAEO,SAASC,GAAUC,EAAoBC,EAA2B,CAAC,EAAG,CAC3E,IAAMC,EAAQ,IAAI,QAAMF,EAAK,IAAIG,GAAQ,IAAI,UAAQ,GAAGA,CAAI,CAAC,CAAC,EAC9D,OAAIF,EAAS,QACXA,EAAS,QAAQG,GAAO,CACtB,IAAIC,EAAO,IAAI,OAAKD,EAAI,IAAID,GAAQ,IAAI,UAAQ,GAAGA,CAAI,CAAC,CAAC,EACzDD,EAAM,MAAM,KAAKG,CAAI,CACvB,CAAC,EAEIH,CACT,CAEO,SAASI,GAAqBC,EAAQ,SAAUC,EAAY,EAAG,CACpE,IAAMC,EAAmB,IAAI,mBAAiBF,EAAOC,CAAS,EAC9D,OAAAC,EAAiB,WAAa,GAC9BA,EAAiB,OAAO,OAAS,EACjCA,EAAiB,OAAO,KAAO,MAC/BA,EAAiB,OAAO,QAAQ,IAAI,IAAK,GAAG,EAC5CA,EAAiB,OAAO,OAAO,KAAO,KACtCA,EAAiB,OAAO,OAAO,MAAQ,IACvCA,EAAiB,OAAO,OAAO,IAAM,IACrCA,EAAiB,OAAO,OAAO,OAAS,KACjCA,CACT,CCrFO,SAASC,EAAQC,EAAaC,EAA2B,CAFhE,IAAAC,EAQE,GALID,GAAaD,EAAE,UAAYA,EAAE,SAAS,QACxCA,EAAE,SAAS,QAASG,GAAU,CAC5BJ,EAAQI,EAAOF,CAAS,CAC1B,CAAC,EAEED,EAAW,OAAQ,CACtB,IAAMI,EAAIJ,EACNI,EAAE,UAAUA,EAAE,SAAS,QAAQ,EAC/BA,EAAE,WACA,MAAM,QAAQA,EAAE,QAAQ,EAC1BA,EAAE,SAAS,QAASC,GAAQ,CAC1BA,EAAI,QAAQ,CACd,CAAC,EAEDD,EAAE,SAAS,QAAQ,EAGzB,CACKJ,EAAY,WACdE,EAAAF,EAAY,UAAZ,MAAAE,EAAA,KAAAF,GAEL,CCxBO,SAASM,GAAWC,EAAY,CACrC,MAAO,oBAAoB,KAAKA,CAAG,CACrC,CCDA,IAAAC,EAAsD,WAGtD,IAAMC,GAAiB,IAAI,IAEpB,SAASC,IAAa,CAC3B,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQ,KACfA,EAAO,OAAS,GAChB,IAAMC,EAAMD,EAAO,WAAW,KAAM,CAClC,mBAAoB,EACtB,CAAC,EACD,OAAAC,EAAI,KAAO,kBACXA,EAAI,aAAe,UACnBA,EAAI,UAAY,GAChBA,EAAI,UAAY,gBAChBA,EAAI,YAAc,QACX,CAAE,OAAAD,EAAQ,IAAAC,CAAI,CACvB,CAEA,IAAID,GACAC,EAEG,SAASC,IAAe,CAC7B,GAAI,CAACF,GAAQ,CACX,GAAM,CAAE,OAAQG,EAAG,IAAKC,CAAE,EAAIL,GAAW,EACzCC,GAASG,EACTF,EAAMG,CACR,CACF,CAEO,SAASC,GAAiBC,EAA2B,CAC1D,GAAIR,GAAe,IAAIQ,CAAI,EACzB,OAAOR,GAAe,IAAIQ,CAAI,EAEhCJ,GAAa,EAEbD,EAAI,UAAU,EAAG,EAAG,KAAM,EAAE,EAC5B,IAAMM,EAAIC,GAAWF,CAAI,EAAI,EAAI,EACjCL,EAAI,WAAWK,EAAM,EAAGC,CAAC,EACzBN,EAAI,SAASK,EAAM,EAAGC,CAAC,EAEvB,IAAIE,EAAQ,KAAK,KAAKR,EAAI,YAAYK,CAAI,EAAE,KAAK,EACjDG,EAAQA,EAAQ,IAAM,EAAIA,EAAQA,EAAQ,EAC1CA,GAAS,EACT,IAAMC,EAAYT,EAAI,aAAa,EAAG,EAAGQ,EAAO,EAAE,EAC5CE,EAAU,IAAI,cAClB,WAAW,KAAKD,EAAU,IAAI,EAC9BD,EACA,GACA,YACF,EACA,OAAAE,EAAQ,MAAQ,GAChBA,EAAQ,UAAY,eACpBA,EAAQ,UAAY,eAEpBb,GAAe,IAAIQ,EAAMK,CAAO,EACzBA,CACT,CAEO,SAASC,IAAmB,CACjCd,GAAe,MAAM,CACvB,CAEO,SAASe,IAAc,CAC5BZ,EAAM,KACND,GAAS,IACX,CCnEA,IAAAc,GAAgC,WAChCC,EAAiD,gBAU1C,SAASC,EAAgBC,EAAiBC,EAAgBC,EAAWC,EAAW,CACrF,IAAMC,EAAUJ,EAAO,MAAM,EAAE,QAAQC,CAAM,EACvCI,EAAKH,EAAI,EACTI,EAAKH,EAAI,EACTI,EAAI,KAAK,MAAMH,EAAQ,EAAIC,EAAKA,CAAE,EAClCG,EAAI,KAAK,MAAM,CAACJ,EAAQ,EAAIE,EAAKA,CAAE,EACzC,MAAO,CAAE,EAAAC,EAAG,EAAAC,CAAE,CAChB,CAOO,SAASC,GAAUC,EAA2B,CACnD,IAAMC,KAAW,qBAAkBD,EAAY,IAAIE,MAAQ,SAAMA,CAAI,CAAC,CAAC,EAEvE,SADa,UAAOD,CAAQ,EAChB,SAAS,WACvB,CAMO,SAASE,GAAUC,EAAiBC,EAAiBC,EAAe,CAEzE,OAAOF,EAAM,GAAKC,EAAM,GACtBD,EAAM,GAAKE,EAAI,GACfF,EAAM,GAAKC,EAAM,GACjBD,EAAM,GAAKE,EAAI,CACnB,CAMO,SAASC,GAAkBC,EAAmB,CACnD,IAAIC,EAAc,EACdC,EAAM,IAAI,WACd,QAASC,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAAK,CACnC,IAAMC,EAAU,IAAI,WAAQJ,EAAIG,EAAI,CAAC,EAAE,CAAC,EAAGH,EAAIG,EAAI,CAAC,EAAE,CAAC,EAAG,CAAC,EACrDE,EAAU,IAAI,WAAQL,EAAIG,CAAC,EAAE,CAAC,EAAGH,EAAIG,CAAC,EAAE,CAAC,EAAG,CAAC,EAC7CG,EAAWD,EAAQ,WAAWD,CAAO,EACvCE,EAAWL,IACbA,EAAcK,EACdJ,EAAMG,EAAQ,MAAM,EAAE,IAAID,CAAO,EAAE,UAAU,EAEjD,CACA,OAAOF,CACT,CC3DO,SAASK,GAEbC,EAAWC,EACd,CACE,OAAO,IAAI,MAASD,EAAQ,CAC1B,IAAK,CAACA,EAAQE,EAAGC,IACR,QAAQ,IAAIH,EAAQE,EAAGC,CAAQ,EAExC,IAAK,CAACH,EAAQE,EAAGE,EAAUD,IAAa,CACtC,IAAME,EAAW,QAAQ,IAAIL,EAAQE,EAAGC,CAAQ,EAC1CG,EAAM,QAAQ,IAAIN,EAAQE,EAAGE,EAAUD,CAAQ,EACrD,OAAIE,IAAaD,GACfH,EAAO,cAAc,CAAE,KAAM,UAAUC,CAA6B,GAAI,MAAOE,CAAS,CAAQ,EAE3FE,CACT,CACF,CAAC,CACH,CCbO,SAASC,EAAkBC,EAAqBC,EAA6B,CAClF,OAAO,QAAQ,KAAK,CAClBD,EACA,IAAI,QAAW,CAACE,EAASC,IAAW,CAClC,WAAW,IAAMA,EAAO,IAAI,MAAM,iBAAiB,CAAC,EAAGF,CAAO,CAChE,CAAC,CACH,CAAC,CACH,CCbO,SAASG,GAAiBC,EAAa,CAC5C,OAAO,SAAS,gBAAgB,6BAA8BA,CAAG,CACnE,CAKO,SAASC,GAAUC,EAAWC,EAAW,CAC9C,IAAMC,EAAML,GAAiB,KAAK,EAClC,OAAAK,EAAI,aAAa,QAASF,CAAC,EAC3BE,EAAI,aAAa,SAAUD,CAAC,EAC5BC,EAAI,MAAM,QAAU,6DACbA,CACT,CAMO,SAASC,EAAaC,EAAS,IAAKC,EAAc,CACvD,IAAMC,EAAST,GAAiB,QAAQ,EACxC,OAAAS,EAAO,aAAa,IAAKF,CAAM,EAC/BE,EAAO,aAAa,OAAQD,CAAI,EACzBC,CACT,CAMO,SAASC,GAAWC,EAAgB,CACzC,IAAMC,EAAOZ,GAAiB,MAAM,EACpC,OAAAY,EAAK,aAAa,SAAUD,CAAM,EAC3BC,CACT,CAOO,SAASC,EAAWF,EAAgBH,EAAc,CACvD,IAAMM,EAAOd,GAAiB,MAAM,EACpC,OAAAc,EAAK,aAAa,SAAUH,CAAM,EAClCG,EAAK,aAAa,OAAQN,CAAI,EACvBM,CACT,CAEO,SAASC,EAAkBN,EAAoBO,EAAWC,EAAW,CAC1ER,EAAO,aAAa,KAAM,GAAGO,CAAC,EAAE,EAChCP,EAAO,aAAa,KAAM,GAAGQ,CAAC,EAAE,CAClC,CAIO,SAASC,EAAgBN,EAAkBO,EAAkBC,EAAgB,CAC9ED,IACFP,EAAK,aAAa,KAAM,GAAGO,EAAM,CAAC,EAAE,EACpCP,EAAK,aAAa,KAAM,GAAGO,EAAM,CAAC,EAAE,GAElCC,IACFR,EAAK,aAAa,KAAM,GAAGQ,EAAI,CAAC,EAAE,EAClCR,EAAK,aAAa,KAAM,GAAGQ,EAAI,CAAC,EAAE,EAEtC,CAEO,SAASC,EAAgBP,EAAkBE,EAAWC,EAAWd,EAAWC,EAAW,CAC5FU,EAAK,aAAa,IAAK,GAAGE,CAAC,EAAE,EAC7BF,EAAK,aAAa,IAAK,GAAGG,CAAC,EAAE,EAC7BH,EAAK,aAAa,QAAS,GAAGX,CAAC,EAAE,EACjCW,EAAK,aAAa,SAAU,GAAGV,CAAC,EAAE,CACpC,CCvEO,SAASkB,IAAkB,CAChC,OAAO,QAAQ,QAAQ,CACzB,CAEO,SAASC,IAAa,CAC3B,OAAO,IAAI,QAAQC,GAAW,CAC5B,sBAAsBA,CAAO,CAC/B,CAAC,CACH,CCRO,SAASC,GAAYC,EAAa,CACvC,OAAO,SAASA,EAAI,QAAQ,IAAK,IAAI,EAAG,EAAE,CAC5C,CAQO,SAASC,GAAmBC,EAAkBC,EAAe,CAElE,IAAIC,EAAI,SAASF,EAAS,UAAU,EAAG,CAAC,EAAG,EAAE,EACzCG,EAAI,SAASH,EAAS,UAAU,EAAG,CAAC,EAAG,EAAE,EACzCI,EAAI,SAASJ,EAAS,UAAU,EAAG,CAAC,EAAG,EAAE,EAGzCK,EAAO,KAAK,MAAMH,EAAID,CAAK,EAC3BK,EAAO,KAAK,MAAMH,EAAIF,CAAK,EAC3BM,EAAO,KAAK,MAAMH,EAAIH,CAAK,EAK/B,MAFkB,KAAK,GAAK,GAAKI,GAAQ,GAAKC,GAAQ,EAAIC,GAAM,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,EAGvF,CAEO,SAASC,GAAYR,EAAkBS,EAAS,IAAM,CAC3D,IAAIP,EACAC,EACAC,EACJ,GAAIJ,EAAS,WAAW,GAAG,EAEzBE,EAAI,SAASF,EAAS,UAAU,EAAG,CAAC,EAAG,EAAE,EACzCG,EAAI,SAASH,EAAS,UAAU,EAAG,CAAC,EAAG,EAAE,EACzCI,EAAI,SAASJ,EAAS,UAAU,EAAG,CAAC,EAAG,EAAE,MACpC,CAEL,IAAIU,EAAUV,EAAS,MAAM,EAAG,EAAE,EAAE,MAAM,GAAG,EAC7CE,EAAI,SAASQ,EAAQ,CAAC,EAAE,KAAK,CAAC,EAC9BP,EAAI,SAASO,EAAQ,CAAC,EAAE,KAAK,CAAC,EAC9BN,EAAI,SAASM,EAAQ,CAAC,EAAE,KAAK,CAAC,CAChC,CAEA,OAAAR,EAAI,KAAK,IAAI,KAAK,MAAMA,EAAIO,CAAM,EAAG,GAAG,EACxCN,EAAI,KAAK,IAAI,KAAK,MAAMA,EAAIM,CAAM,EAAG,GAAG,EACxCL,EAAI,KAAK,IAAI,KAAK,MAAMA,EAAIK,CAAM,EAAG,GAAG,EAIrB,MAAQ,GAAK,KAAOP,GAAK,KAAOC,GAAK,GAAKC,GAAG,SAAS,EAAE,EAAE,MAAM,CAAC,CAGtF,CCpDA,IAAAO,GAAiC,2CAEjC,SAASC,IAAe,CAEtB,OADe,IAAI,aAErB,CAEA,IAAIC,GAA4B,KAC5BC,GAAW,IAAI,IAOZ,SAASC,GAAUC,EAA4B,CACpD,GAAIF,GAAS,IAAIE,CAAG,EAAG,CACrB,IAAMC,EAAOH,GAAS,IAAIE,CAAG,EAAG,KAAKC,IACnCA,EAAK,MAAQA,EAAK,MAAM,MAAM,EACvBA,EACR,CACH,CACKJ,KACHA,GAASD,GAAa,GAExB,IAAMM,EAAI,IAAI,QAAc,CAACC,EAASC,IAAW,CAC/CP,GAAQ,KAAKG,EAAKC,GAAQ,CACxBE,EAAQF,CAAI,CACd,EAAG,OAAWG,CAAM,CACtB,CAAC,EACD,OAAAN,GAAS,IAAIE,EAAKE,CAAC,EACZA,EAAE,KAAKD,IACZA,EAAK,MAAQA,EAAK,MAAM,MAAM,EACvBA,EACR,CACH,CAEO,SAASI,IAAgB,CAC9BR,GAAS,KACTC,GAAS,MAAM,CACjB,CCzCO,IAAMQ,GAAQ,UAAU,UAAU,YAAY,EAAE,QAAQ,KAAK,GAAK,ECElE,SAASC,GAAUC,EAAa,CACrC,OAAIC,GACKD,IAAQ,OAEVA,IAAQ,SACjB,CCKA,IAAAE,EAYO,WAEPC,EAA2C,uBC1B3C,IAAAC,GAAgC,WCAhC,IAAAC,EAoBS,WAuCT,IAAMC,GAAiC,CACrC,GAAI,GACJ,OAAQ,GACR,UAAW,EACX,KAAM,EACN,MAAO,GACP,UAAW,UACX,YAAa,UACb,YAAa,EACb,cAAe,EACf,YAAa,EACb,MAAO,CAAC,EACR,OAAQ,GACR,QAAS,GACT,SAAU,CACR,KAAM,UACN,IAAK,CAAC,EACN,OAAQ,CAAC,EACT,SAAU,CAAC,EACX,WAAY,CAAC,CACf,EACA,UAAW,GACX,OAAQ,EACR,OAAQ,GACR,YAAa,EACb,SAAU,CAAC,EACX,aAAc,CAAC,EACf,WAAY,SACZ,YAAa,EACf,EAEaC,EAAN,cAAsB,UAA0B,CAerD,YACUC,EACRC,EACA,CACA,MAAM,EAHE,aAAAD,EAfVE,EAAA,KAAQ,YAERA,EAAA,KAAQ,YAERA,EAAA,KAAO,QAEPA,EAAA,KAAQ,QAERA,EAAA,KAAQ,gBAERA,EAAA,KAAQ,gBAERA,EAAA,KAAO,WAOL,QAAK,QAAUC,GACbC,IAAA,GAAKN,IAAmBG,GACxB,IACF,EACI,KAAK,QAAQ,SAAS,OAAS,QAAS,CAC1C,GAAM,CAACI,EAAGC,CAAC,EAAI,KAAK,QAAQ,SAAS,OACrC,YAAK,SAAS,IAAID,EAAGC,EAAG,KAAK,QAAQ,OAAS,KAAK,QAAQ,SAAS,EAC7D,IACT,CACA,KAAK,KAAK,EACV,KAAK,QAAU,KAAK,QAAQ,QAC5B,KAAK,iBAAiB,mBAAoB,CAAC,CAAE,MAAAC,CAAM,IAAM,CACvD,KAAK,aAAa,EAClB,KAAK,SAAS,CAChB,CAAC,EACD,KAAK,iBAAiB,qBAAsB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACzD,KAAK,aAAa,EAClB,KAAK,SAAS,CAChB,CAAC,EACD,KAAK,iBAAiB,gBAAiB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACpD,KAAK,QAAQ,EACb,KAAK,KAAK,CACZ,CAAC,EACD,KAAK,iBAAiB,qBAAsB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACpD,KAAK,QAAQ,SAGlB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACpB,CAAC,EACD,KAAK,iBAAiB,uBAAwB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACtD,KAAK,QAAQ,SAGlB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACpB,CAAC,EAKD,KAAK,iBAAiB,mBAAoB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACvD,KAAK,SAAS,EAAIA,CACpB,CAAC,EACD,KAAK,iBAAiB,iBAAkB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACrD,KAAK,QAAUA,CACjB,CAAC,EACD,KAAK,iBAAiB,gBAAiB,CAAC,CAAE,MAAAA,CAAM,IAAM,CA7J1D,IAAAC,EA8JM,GAAID,EAAO,CACT,GAAI,KAAK,KACP,OAEF,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,aAAa,CACpB,MAAW,KAAK,OACd,KAAK,OAAO,KAAK,IAAI,GACrBC,EAAA,KAAK,eAAL,MAAAA,EAAmB,UAEvB,CAAC,EACD,KAAK,iBAAiB,oBAAqB,IAAM,CAC/C,KAAK,aAAa,EAClB,KAAK,SAAS,CAChB,CAAC,EACD,KAAK,iBAAiB,sBAAuB,IAAM,CACjD,KAAK,aAAa,EAClB,KAAK,SAAS,CAChB,CAAC,CACH,CAEA,WAAY,CACV,GAAI,KAAK,QAAQ,SAAS,OAAS,QACjC,OAAO,KAAK,SAAS,MAAM,EAE7B,IAAMC,EAAS,IAAI,UACbC,EAAM,IAAI,OAChB,OAAAA,EAAI,cAAc,IAAI,EACtBA,EAAI,UAAUD,CAAM,EACbA,CACT,CAEA,SAAU,CACR,GAAI,KAAK,QAAQ,SAAS,OAAS,QACjC,OAAO,IAAI,UAAQ,EAAG,EAAG,CAAC,EAE5B,IAAMC,EAAM,IAAI,OACVC,EAAO,IAAI,UACjB,OAAAD,EAAI,cAAc,IAAI,EACtBA,EAAI,QAAQC,CAAI,EACTA,CACT,CAEA,aAAc,CACZ,IAAMF,EAAS,KAAK,UAAU,EAC9B,OAAAA,EAAO,KAAKA,EAAO,EAAI,KAAK,QAAQ,OAAS,CAAC,EACvCA,CACT,CAEA,MAAO,CACL,KAAK,SAAW,KAAK,aAAa,EAClC,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,KAAK,SAAS,EAAI,KAAK,QAAQ,UAAY,KAAK,QAAQ,YACzD,KAAK,QAAQ,SAEf,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAEtB,CAEA,cAAe,CACb,IAAMG,EAAQC,GACX,KAAK,QAAQ,SAA6B,OAAO,CAAC,EAClD,KAAK,QAAQ,SAA6B,OAAO,MAAM,CAAC,CAC3D,EAOA,OANiB,IAAI,kBAAgBD,EAAO,CAC1C,MAAO,EACP,aAAc,GACd,MAAO,KAAK,QAAQ,OACpB,cAAe,CACjB,CAAC,CAEH,CAEA,oBAAqB,CACnB,IAAME,EAAW,KAAK,QAAQ,gBAAgB,wBAAwB,CACpE,MAAO,KAAK,QAAQ,UACpB,QAAS,KAAK,QAAQ,WACxB,CAAC,EACD,GAAI,KAAK,QAAQ,QAAU,GACzB,YAAK,SAAWA,EACTA,EAET,IAAMC,EAAY,KAAK,QAAQ,gBAAgB,wBAAwB,CACrE,MAAOC,GAAY,KAAK,QAAQ,SAAS,EACzC,QAAS,KAAK,QAAQ,WACxB,CAAC,EACD,YAAK,SAAW,CAACF,EAAUC,CAAS,EAC7B,CAACD,EAAUC,CAAS,CAC7B,CAmBA,aAAaE,EAAcC,EAAc,CACvC,IAAMR,EAAM,IAAI,OAAK,EAAE,cAAc,IAAI,EACnCS,EAAYF,EAAI,MAAM,EAAE,IAAIC,EAAI,MAAM,EAAE,eAAe,GAAI,CAAC,EAC5DE,EAAY,IAAI,MAAID,EAAWD,EAAI,MAAM,EAAE,eAAe,EAAE,CAAC,EAC7DG,EAAM,IAAI,UAChBD,EAAU,aAAaV,EAAKW,CAAG,EAC/B,IAAMC,EAAYL,EAAI,MAAM,EAAE,IAAIC,EAAI,MAAM,EAAE,eAAe,IAAK,CAAC,EAC7DK,EAAa,IAAI,MAAID,EAAWJ,EAAI,MAAM,CAAC,EAC3CM,EAAM,IAAI,UAChB,OAAAD,EAAW,aAAab,EAAKc,CAAG,EACzB,CACL,IAAAA,EAAK,IAAAH,CACP,CACF,CAEA,qBAAsB,CACpB,GAAM,CAAE,IAAAG,EAAK,IAAAH,CAAI,EAAI,IAAI,OAAK,EAAE,cAAc,IAAI,EAC5CI,EAAOD,EAAI,MAAM,EAAE,IAAIH,CAAG,EAC1BK,EAAW,KAAK,IAAID,EAAK,EAAGA,EAAK,EAAGA,EAAK,CAAC,EAAI,EAC9CR,EAAM,KAAK,YAAY,EACvBC,EAAM,IAAI,UAAQ,GAAM,GAAK,CAAG,EAAE,UAAU,EAC5C,CAAE,IAAKS,EAAO,IAAKC,CAAK,EAAI,KAAK,aAAaX,EAAKC,CAAG,EAEtDJ,EAAW,KAAK,QAAQ,gBAAgB,qBAAqB,CACjE,aAAc,KAAK,QAAQ,aAC3B,OAAQ,KAAK,YAAY,EACzB,SAAAY,EACA,QAAS,KAAK,QAAQ,YACtB,UAAW,IAAI,UAAQ,GAAM,GAAK,CAAG,EACrC,IAAKC,EACL,IAAKC,CACP,CAAC,EACD,GAAI,KAAK,QAAQ,QAAU,GACzB,YAAK,SAAWd,EACTA,EAGT,IAAML,EAAS,KAAK,UAAU,EACxBoB,EAAO,IAAI,UAAQ,GAAM,GAAK,CAAG,EAAE,UAAU,EAC7C,CAAE,IAAKC,EAAQ,IAAKC,CAAM,EAAI,KAAK,aAAatB,EAAQoB,CAAI,EAC5Dd,EAAY,KAAK,QAAQ,gBAAgB,qBAAqB,CAClE,aAAc,CAACC,GAAY,KAAK,QAAQ,aAAa,CAAC,EAAG,KAAK,QAAQ,WAAW,EAAGA,GAAY,KAAK,QAAQ,aAAa,CAAC,EAAG,KAAK,QAAQ,WAAW,CAAC,EACvJ,OAAQ,KAAK,UAAU,EACvB,SAAAU,EACA,QAAS,KAAK,QAAQ,YACtB,UAAW,IAAI,UAAQ,GAAM,GAAK,CAAG,EACrC,IAAKI,EACL,IAAKC,CACP,CAAC,EAED,YAAK,SAAW,CAACjB,EAAUC,CAAS,EAC7B,CAACD,EAAUC,CAAS,CAC7B,CAEA,cAAe,CACb,OAAI,KAAK,QAAQ,aAAe,UACvB,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,CAEnC,CAEA,kBAAmB,CACjB,IAAMiB,EAAe,KAAK,QAAQ,gBAAgB,mBAAmB,CACnE,MAAO,KAAK,QAAQ,YACpB,QAAS,KAAK,QAAQ,aACxB,CAAC,EACD,YAAK,aAAeA,EACbA,CACT,CAEA,UAAW,CACL,KAAK,MACP,KAAK,OAAO,KAAK,IAAI,EAEvB,KAAK,KAAO,IAAI,OAAK,KAAK,SAAU,KAAK,QAAQ,EACjD,KAAK,IAAI,KAAK,IAAI,CACpB,CAEA,iBAAkB,CAChB,IAAMC,EAAS,CAAC,EACVC,EAAS,KAAK,QAAQ,OAAS,KAAK,QAAQ,YAE5C,CAAE,OAAAC,CAAO,EAAI,KAAK,QAAQ,SAChC,QAASC,EAAI,EAAGA,EAAID,EAAO,OAAQC,IAAK,CACtC,IAAMC,EAASF,EAAOC,CAAC,EACvB,QAASE,EAAI,EAAGA,EAAID,EAAO,OAAQC,IAAK,CACtC,IAAMC,EAAMF,EAAOC,CAAC,EACdE,EAAOF,EAAI,IAAMD,EAAO,OAASA,EAAO,CAAC,EAAIA,EAAOC,EAAI,CAAC,EAE/DL,EAAO,KAAK,IAAI,UAAQM,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGL,CAAM,CAAC,EAC/CD,EAAO,KAAK,IAAI,UAAQO,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGN,CAAM,CAAC,CACnD,CACF,CACA,OAAOD,CACT,CAEA,kBAAmB,CACb,KAAK,cACP,KAAK,aAAa,QAAQ,EAE5B,IAAMA,EAAS,KAAK,gBAAgB,EAC9BQ,EAAe,IAAI,iBAAe,EAAE,cAAcR,CAAM,EAC9D,KAAK,aAAeQ,CACtB,CAEA,cAAe,CACT,KAAK,MACP,KAAK,OAAO,KAAK,IAAI,EAEvB,IAAMC,EAAO,IAAI,eAAa,KAAK,aAAc,KAAK,YAAY,EAClE,OAAAA,EAAK,SAAS,EAAI,KAAK,QAAQ,UAAY,IAC3C,KAAK,KAAOA,EACZ,KAAK,IAAIA,CAAI,EACNA,CACT,CAEA,QAAQtB,EAAsB,CAI5B,GAHI,CAAC,KAAK,SAGN,KAAK,QAAQ,SAAS,OAAS,QACjC,MAAO,GAET,IAAMuB,EAAavB,EAAU,gBAAgB,KAAK,IAAI,EACtD,GAAIuB,EAAW,CAAC,EAAG,CACjB,GAAM,CAAE,MAAOC,EAAU,SAAAC,CAAS,EAAIF,EAAW,CAAC,EAClD,MAAO,CAAE,SAAAC,EAAU,SAAAC,CAAS,CAC9B,CACA,MAAO,EACT,CAEA,SAAU,CAjZZ,IAAArC,EAkZI,KAAK,SAAS,QAAQ,GACtBA,EAAA,KAAK,OAAL,MAAAA,EAAW,SAAS,UACpB,KAAK,MAAM,CACb,CACF,ECtZA,IAAAsC,EAGO,WAGA,IAAMC,GAAN,cAAqB,UAAS,CAQnC,aAAc,CACZ,MAAM,EAPRC,EAAA,KAAQ,oBAERA,EAAA,KAAQ,SAERA,EAAA,KAAO,eAAe,KAIpB,KAAK,iBAAmB,KAAK,UAAU,EACvC,KAAK,UAAU,CACjB,CAGA,WAAY,CACV,IAAMC,EAAmBC,GAAqB,SAAU,EAAG,EAC3D,OAAAD,EAAiB,SAAS,IAAI,EAAG,EAAG,GAAG,EACvC,KAAK,IAAIA,CAAgB,EAClBA,CACT,CAEA,kBAAkBE,EAAe,CAC/B,IAAMC,EAAID,EAAK,EACTE,EAAIF,EAAK,EACf,KAAK,iBAAiB,OAAO,OAAO,KAAO,CAACC,EAC5C,KAAK,iBAAiB,OAAO,OAAO,MAAQA,EAC5C,KAAK,iBAAiB,OAAO,OAAO,IAAMC,EAC1C,KAAK,iBAAiB,OAAO,OAAO,OAAS,CAACA,EAC9C,KAAK,iBAAiB,OAAO,OAAO,KAAO,GAC3C,KAAK,iBAAiB,OAAO,OAAO,IAAM,KAAK,IAAID,EAAGC,CAAC,CACzD,CAEA,iBAAiBC,EAAwB,CACvC,KAAK,iBAAiB,MAAQ,IAAI,QAAMA,CAAK,CAC/C,CAEA,YAAYC,EAAmB,CAC7B,KAAK,SAAS,KAAKA,CAAQ,EAC3B,KAAK,iBAAiB,SAAS,IAAI,CAACA,EAAS,EAAI,EAAG,CAACA,EAAS,EAAI,EAAG,GAAG,CAC1E,CAGA,UAAUC,EAAQ,IAAMC,EAAS,IAAM,CACrC,IAAMC,EAAW,IAAI,gBAAcF,EAAOC,CAAM,EAC1CE,EAAW,IAAI,iBAAe,CAClC,YAAa,GACb,QAAS,EACT,KAAM,YACR,CAAC,EACKC,EAAO,IAAI,OAAKF,EAAUC,CAAQ,EACxC,OAAAC,EAAK,cAAgB,GACrBA,EAAK,SAAS,EAAI,IAClB,KAAK,IAAIA,CAAI,EACb,KAAK,MAAQA,EACNA,CACT,CAEA,UAAUC,EAAkB,CAC1B,KAAK,iBAAiB,OAASA,CACjC,CAEA,iBAAiBC,EAAyB,CACxC,OAAOA,EAAU,KAAK,YACxB,CAEA,WAAWA,EAAiB,CACzB,KAAK,MAAM,SAAkC,QAAU,KAAK,iBAAiBA,CAAO,CACvF,CAEA,SAAU,CACRC,EAAQ,KAAM,EAAI,CACpB,CAEF,EC/EA,IAAAC,GAAqE,WCArE,IAAAC,EAAyD,WAEzD,IAAAC,GAAyB,YAQzB,IAAMC,GAAiC,CACrC,WAAY,GACZ,aAAc,GACd,oBAAqB,EACvB,EAsBaC,GAAN,cAAsB,iBAAiC,CAiB5D,YACUC,EACRC,EAAmC,CAAC,EACpC,CACA,MAAM,EAHE,aAAAD,EAjBVE,EAAA,KAAO,OAEPA,EAAA,KAAQ,WAERA,EAAA,KAAO,WAAW,IAAI,WAEtBA,EAAA,iBAAY,CAAE,EAAG,EAAG,EAAG,CAAE,GAEzBA,EAAA,eAAU,IAEVA,EAAA,KAAQ,WAERA,EAAA,iBAAuB,OAEvBA,EAAA,gBAAoC,MAoRpCA,EAAA,gBAAW,IAAM,CACX,KAAK,QAAQ,oBACf,KAAK,aAAa,EAElB,KAAK,eAAe,CAExB,GAnRE,KAAK,QAAUC,IAAA,GAAKL,IAAmBG,GACvC,KAAK,cAAc,EACnB,KAAK,IAAM,KAAK,QAAQ,EACpB,KAAK,QAAQ,aACf,SAAS,KAAK,YAAY,KAAK,GAAG,EAElC,KAAK,QAAQ,UAAU,YAAY,KAAK,GAAG,CAE/C,CAEA,cAAe,CACb,IAAMG,EAAW,IAAI,oBACnB,aAAS,IAAM,CACT,KAAK,KACP,KAAK,aAAa,CAEtB,EAAG,GAAG,CACR,EACAA,EAAS,QAAQ,KAAK,IAAK,CACzB,UAAW,GACX,QAAS,GACT,WAAY,EACd,CAAC,EACD,KAAK,SAAWA,CAClB,CAEA,sBAAmD,CACjD,GAAM,CAAE,IAAAC,EAAK,IAAAC,CAAI,EAAI,IAAI,OAAK,EAAE,cAAc,KAAK,OAAQ,EACrDC,GAAWF,EAAI,EAAIC,EAAI,GAAK,EAC5BE,GAAWH,EAAI,EAAIC,EAAI,GAAK,EAClC,MAAO,CACL,KAAM,IAAI,UAAQA,EAAI,EAAGE,EAASH,EAAI,CAAC,EACvC,QAAS,IAAI,UAAQC,EAAI,EAAGD,EAAI,EAAGA,EAAI,CAAC,EACxC,IAAK,IAAI,UAAQE,EAASF,EAAI,EAAGA,EAAI,CAAC,EACtC,SAAU,IAAI,UAAQA,EAAI,EAAGA,EAAI,EAAGA,EAAI,CAAC,EACzC,MAAO,IAAI,UAAQA,EAAI,EAAGG,EAASH,EAAI,CAAC,EACxC,YAAa,IAAI,UAAQA,EAAI,EAAGC,EAAI,EAAGD,EAAI,CAAC,EAC5C,OAAQ,IAAI,UAAQE,EAASD,EAAI,EAAGD,EAAI,CAAC,EACzC,WAAY,IAAI,UAAQC,EAAI,EAAGA,EAAI,EAAGD,EAAI,CAAC,EAC3C,OAAQ,IAAI,UAAQE,EAASC,EAASH,EAAI,CAAC,CAC7C,CACF,CAEA,4BAA0E,CACxE,GAAM,CAAE,MAAAI,EAAO,OAAAC,CAAO,EAAI,KAAK,QAAQ,WACjCC,EAAY,KAAK,qBAAqB,EAC5C,OAAO,OAAO,KAAKA,CAAS,EAAE,OAAO,CAACC,EAAKC,IAAQ,CACjD,GAAM,CAAE,EAAAC,EAAG,EAAAC,CAAE,EAAIC,EACdL,EAAkBE,CAAG,EACtB,KAAK,QAAQ,OACbJ,EACAC,CACF,EACA,OAACE,EAAYC,CAAG,EAAI,CAAE,EAAAC,EAAG,EAAAC,CAAE,EACpBH,CACT,EAAG,CAAC,CAAC,CACP,CAIA,cACEP,EACAC,EACS,CACT,GAAM,CAAE,MAAAG,EAAO,OAAAC,CAAO,EAAI,KAAK,QAAQ,WACvC,OAAOJ,EAAI,EAAI,GAAKD,EAAI,EAAII,GAASH,EAAI,EAAII,GAAUL,EAAI,EAAI,CACjE,CAGA,cAAwE,CACtE,GAAM,CAAE,YAAAY,EAAa,aAAAC,CAAa,EAAI,KAAK,IACrCP,EAAY,KAAK,2BAA2B,EAC5CQ,EAAYF,EAAc,EAC1BG,EAAaF,EAAe,EAC5BG,EASA,CACJ,CACE,KAAM,SACN,OAAOP,EAAWC,EAAW,CAC3B,MAAO,CACL,IAAK,CAAE,EAAGI,EAAYL,EAAG,EAAGC,EAAIG,CAAa,EAC7C,IAAK,CAAE,EAAGJ,EAAIK,EAAW,EAAGJ,CAAE,CAChC,CACF,CACF,EACA,CACE,KAAM,OACN,OAAOD,EAAGC,EAAG,CACX,MAAO,CACL,IAAK,CAAE,EAAGD,EAAG,EAAGC,EAAIK,CAAW,EAC/B,IAAK,CAAE,EAAGN,EAAIG,EAAa,EAAGF,EAAIK,CAAW,CAC/C,CACF,CACF,EACA,CACE,KAAM,UACN,OAAON,EAAGC,EAAG,CACX,MAAO,CACL,IAAK,CAAE,EAAGD,EAAG,EAAGC,EAAIG,CAAa,EACjC,IAAK,CAAE,EAAGJ,EAAIG,EAAa,EAAGF,CAAE,CAClC,CACF,CACF,EACA,CACE,KAAM,MACN,OAAOD,EAAGC,EAAG,CACX,MAAO,CACL,IAAK,CAAE,EAAGD,EAAIK,EAAW,EAAGJ,EAAIG,CAAa,EAC7C,IAAK,CAAE,EAAGJ,EAAIK,EAAW,EAAGJ,CAAE,CAChC,CACF,CACF,EACA,CACE,KAAM,WACN,OAAOD,EAAGC,EAAG,CACX,MAAO,CACL,IAAK,CAAE,EAAGD,EAAIG,EAAa,EAAGF,EAAIG,CAAa,EAC/C,IAAK,CAAE,EAAGJ,EAAG,EAAGC,CAAE,CACpB,CACF,CACF,EACA,CACE,KAAM,QACN,OAAOD,EAAGC,EAAG,CACX,MAAO,CACL,IAAK,CAAE,EAAGD,EAAIG,EAAa,EAAGF,EAAIK,CAAW,EAC7C,IAAK,CAAE,EAAGN,EAAG,EAAGC,EAAIK,CAAW,CACjC,CACF,CACF,EACA,CACE,KAAM,cACN,OAAON,EAAGC,EAAG,CACX,MAAO,CACL,IAAK,CAAE,EAAGD,EAAIG,EAAa,EAAGF,CAAE,EAChC,IAAK,CAAE,EAAGD,EAAG,EAAGC,EAAIG,CAAa,CACnC,CACF,CACF,EACA,CACE,KAAM,SACN,OAAOJ,EAAGC,EAAG,CACX,MAAO,CACL,IAAK,CAAE,EAAGD,EAAIK,EAAW,EAAGJ,CAAE,EAC9B,IAAK,CAAE,EAAGD,EAAIK,EAAW,EAAGJ,EAAIG,CAAa,CAC/C,CACF,CACF,EACA,CACE,KAAM,aACN,OAAOJ,EAAGC,EAAG,CACX,MAAO,CACL,IAAK,CAAE,EAAGD,EAAG,EAAGC,CAAE,EAClB,IAAK,CAAE,EAAGD,EAAIG,EAAa,EAAGF,EAAIK,CAAW,CAC/C,CACF,CACF,CACF,EACA,QAASE,EAAI,EAAGA,EAAID,EAAW,OAAQC,IAAK,CAC1C,IAAMC,EAAYF,EAAWC,CAAC,EACxBE,EAAWb,EAAUY,EAAU,IAAI,EACnC,CAAE,IAAAlB,EAAK,IAAAC,CAAI,EAAIiB,EAAU,OAAOC,EAAS,EAAGA,EAAS,CAAC,EAC5D,GAAI,KAAK,cAAcnB,EAAKC,CAAG,EAC7B,MAAO,CACL,KAAMiB,EAAU,KAChB,SAAAC,CACF,CAEJ,CACA,MAAO,CACL,KAAM,SACN,SAAUb,EAAU,MACtB,CACF,CAEA,SAAU,CACR,IAAMc,EAAM,SAAS,cAAc,KAAK,EACxC,OAAAA,EAAI,MAAM,SAAW,WACdA,CACT,CAEA,cAAe,CACb,IAAMF,EAAY,KAAK,aAAa,EACpC,KAAK,IAAI,UAAY,WAAWA,EAAU,IAAI,GAC9C,KAAK,gBAAgBA,EAAU,SAAS,EAAGA,EAAU,SAAS,CAAC,CACjE,CAEA,YAAYG,EAAmB,CAC7B,KAAK,QAAUA,EACX,KAAK,QAAQ,qBACf,KAAK,aAAa,EAIpB,KAAK,SAAS,CAChB,CAEA,eAAgB,CACd,KAAK,QAAU,MACjB,CAEA,WAAWC,EAAkBC,EAAU,QAAS,CAC1CD,IAAY,KAAK,UAGrB,KAAK,IAAI,MAAM,QAAUA,EAAUC,EAAU,OAC7C,KAAK,QAAUD,EACjB,CAEA,WAAWE,EAAiB,CAC1B,KAAK,IAAI,MAAM,QAAU,GAAGA,CAAO,EACrC,CAEA,aAAc,CACZ,OAAI,KAAK,QACH,OAAO,KAAK,QAAQ,aAAgB,WAC/B,KAAK,QAAQ,YAAY,EAEtB,IAAI,OAAK,EAAE,cAAc,KAAK,OAAO,EAC9B,UAAU,IAAI,SAAS,EAGnC,KAAK,QAEhB,CAEA,IAAI,oBAAqB,CACvB,GAAM,CAAE,EAAAf,EAAG,EAAAC,CAAE,EAAI,KAAK,UAChB,CAAE,MAAAN,EAAO,OAAAC,CAAO,EAAI,KAAK,QAAQ,WACvC,OAAOI,GAAK,GAAKA,GAAKL,GAASM,GAAK,GAAKA,GAAKL,CAChD,CAEA,gBAAgBI,EAAWC,EAAW,CACpC,KAAK,UAAY,CAAE,EAAAD,EAAG,EAAAC,CAAE,EACxB,GAAM,CAAE,MAAAN,EAAO,OAAAC,EAAQ,EAAGoB,EAAS,EAAGC,CAAQ,EAAI,KAAK,QAAQ,WAC3D,KAAK,QAAQ,eACf,KAAK,IAAI,MAAM,KAAO,GAAGD,CAAO,KAChC,KAAK,IAAI,MAAM,IAAM,GAAGC,EAAUrB,CAAM,MAEtC,KAAK,QAAQ,WACf,KAAK,IAAI,MAAM,UAAY,eAAeI,CAAC,OAAO,CAACJ,EAASK,CAAC,SAE7D,KAAK,cAAc,CAAE,KAAM,kBAAmB,EAAAD,EAAG,EAAAC,EAAG,MAAAN,EAAO,OAAAC,CAAO,CAAC,CAEvE,CAEA,eAAesB,EAAQ,GAAO,CAC5B,IAAMC,EAAS,KAAK,YAAY,EAC1B,CAAE,MAAAxB,EAAO,OAAAC,EAAQ,EAAGoB,EAAS,EAAGC,CAAQ,EAAI,KAAK,QAAQ,WACzD,CAAE,EAAAjB,EAAG,EAAAC,CAAE,EAAIC,EACfiB,EACA,KAAK,QAAQ,OACbxB,EACAC,CACF,EACI,KAAK,UAAU,IAAMI,GAAK,KAAK,UAAU,IAAMC,GAAK,CAACiB,GAGzD,KAAK,gBAAgBlB,EAAGC,CAAC,CAC3B,CAUA,eAAgB,CACd,KAAK,QAAQ,iBAAiB,SAAU,KAAK,QAAQ,CACvD,CAEA,iBAAkB,CAChB,KAAK,QAAQ,oBAAoB,SAAU,KAAK,QAAQ,CAC1D,CAEA,SAAU,CAxVZ,IAAAmB,EAAAC,EAyVI,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACnBD,EAAA,KAAK,WAAL,MAAAA,EAAe,cACfC,EAAA,KAAK,MAAL,MAAAA,EAAU,SACV,KAAK,IAAM,IACb,CACF,EDpUA,IAAMC,GAA6B,CACjC,MAAO,CAAC,CAAE,KAAM,EAAG,CAAC,EACpB,MAAO,EACP,cAAe,SACf,iBAAkB,GAClB,QAAS,EACT,GAAI,GACJ,SAAU,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAC7B,aAAc,EACd,YAAa,CAAE,MAAO,UAAW,MAAO,CAAE,EAC1C,WAAY,GACZ,oBAAqB,GACrB,SAAU,GACV,cAAe,EACjB,EAIaC,EAAN,cAAkB,kBAA6B,CAsBpD,YAAoBC,EAAkBC,EAA0B,CAnElE,IAAAC,EAAAC,EAAAC,EAoEI,MAAM,EADY,aAAAJ,EApBpBK,EAAA,KAAQ,OAERA,EAAA,KAAQ,WAERA,EAAA,KAAQ,OAERA,EAAA,KAAQ,WAERA,EAAA,KAAO,WAEPA,EAAA,KAAO,UAAU,IAEjBA,EAAA,YAAO,CAAE,MAAO,EAAG,OAAQ,CAAE,GAE7BA,EAAA,gBAAW,IAAI,YAEfA,EAAA,gBAAW,CAAC,GAEZA,EAAA,sBAAiB,IAgMjBA,EAAA,KAAQ,kBAAkB,IAAM,CAC9B,KAAK,QAAQ,eAAe,EAAI,CAClC,GA9LE,KAAK,QAAUC,GAAsCC,IAAA,GAAIT,IAAmBG,GAAU,IAAI,EAC1F,KAAK,SAAS,MAAIC,EAAAD,EAAQ,WAAR,YAAAC,EAAkB,IAAK,IAAGC,EAAAF,EAAQ,WAAR,YAAAE,EAAkB,IAAK,IAAGC,EAAAH,EAAQ,WAAR,YAAAG,EAAkB,IAAK,CAAC,EAC9F,KAAK,QAAU,IAAII,GAAQ,KAAK,QAAS,CAAE,WAAY,EAAM,CAAC,EAC9D,KAAK,QAAQ,iBAAiB,kBAAmB,CAAC,CAAE,EAAAC,EAAG,EAAAC,EAAG,OAAAC,CAAO,IAAM,CACrE,KAAK,QAAQ,IAAI,MAAM,UAAY,oBAAoBF,CAAC,mBAAmB,CAACE,EAASD,CAAC,QAAQ,KAAK,QAAQ,KAAO,OAAS,KAAK,OAClI,CAAC,EACD,KAAK,QAAQ,YAAY,IAA2B,EACpD,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,iBAAiB,cAAe,CAAC,CAAE,MAAAE,CAAM,IAAM,CAC9CA,EACG,KAAK,IAIR,KAAK,IAAI,aAAa,MAAOA,CAAK,GAHlC,KAAK,QAAQ,EACb,KAAK,gBAAgB,IAKvB,KAAK,KAAO,KAAK,IAAI,YAAY,KAAK,GAAG,EACzC,KAAK,IAAM,OACX,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAEnB,CAAC,EACD,KAAK,iBAAiB,eAAgB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACnD,KAAK,IAAI,YAAY,KAAK,OAAO,EACjC,KAAK,QAAQ,EACb,KAAK,UAAU,CACjB,CAAC,EACD,KAAK,iBAAiB,iBAAkB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACrD,KAAK,QAAQ,WAAWA,CAAK,CAC/B,CAAC,EACD,KAAK,iBAAiB,mBAAoB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACnD,KAAK,MACP,KAAK,IAAI,MAAM,MAAQ,IAAGA,GAAA,YAAAA,EAAQ,KAAM,EAAE,KAC1C,KAAK,IAAI,MAAM,OAAS,IAAGA,GAAA,YAAAA,EAAQ,KAAM,EAAE,KAC3C,KAAK,UAAU,EAEnB,CAAC,EACD,KAAK,iBAAiB,sBAAuB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACtD,KAAK,MACP,KAAK,IAAI,MAAM,QAAU,GAAGA,CAAK,GAErC,CAAC,EACD,KAAK,iBAAiB,qBAAsB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACrD,KAAK,MACP,KAAK,IAAI,MAAM,OAAS,GAAGA,EAAM,KAAK,YAAYA,EAAM,KAAK,GAEjE,CAAC,EACD,KAAK,iBAAiB,oBAAqB,CAAC,CAAE,MAAAA,CAAM,IAAM,CACxD,KAAK,IAAI,MAAM,WAAaA,CAC9B,CAAC,CACH,CAEA,IAAI,oBAAqB,CACvB,OAAO,KAAK,QAAQ,kBACtB,CAEM,WAAY,QAAAC,EAAA,sBAEhB,GADA,MAAMC,GAAgB,EAClB,KAAK,QAAQ,cAAe,CAC9B,GAAI,CAAC,KAAK,IAAO,OACjB,GAAM,CAAE,MAAAC,EAAO,OAAAJ,CAAO,EAAI,KAAK,IAAI,sBAAsB,EACzD,KAAK,KAAO,CACV,MAAOI,EAAQ,EACf,OAAQJ,EAAS,CACnB,CACF,KAAO,CACL,GAAM,CAAE,MAAAI,EAAO,OAAAJ,CAAO,EAAI,KAAK,IAAI,sBAAsB,EACzD,KAAK,KAAO,CACV,MAAOI,EAAQ,EACf,OAAQJ,EAAS,CACnB,CACF,CACF,GAEA,iBAAkB,CASlB,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,QAAQ,SACtB,CAEA,SAAU,CACR,IAAMK,EAAM,SAAS,cAAc,KAAK,EACxC,YAAK,IAAMA,EACX,KAAK,QAAQ,EACT,KAAK,QAAQ,MACf,KAAK,QAAQ,EAEfA,EAAI,MAAM,SAAW,OACrBA,EAAI,MAAM,WAAa,2DACvBA,EAAI,MAAM,QAAU,OACpBA,EAAI,MAAM,cAAgB,SAC1BA,EAAI,MAAM,eAAiB,SAC3BA,EAAI,MAAM,WAAa,SACvBA,EAAI,MAAM,QAAU,MACpB,KAAK,QAAQ,WAAW,KAAK,QAAQ,OAAO,EAC5C,KAAK,QAAQ,IAAI,MAAM,cAAgB,OACvC,KAAK,QAAQ,IAAI,MAAM,WAAa,OACpC,KAAK,QAAQ,IAAI,YAAYA,CAAG,EAEhC,KAAK,UAAU,EACRA,CACT,CAEA,SAAU,CACR,GAAI,CAAC,KAAK,IAAK,CACb,IAAMC,EAAO,KAAK,SAAS,EACvB,KAAK,QAAQ,gBAAkB,MAC7B,KAAK,IAAI,WACX,KAAK,IAAI,aAAaA,EAAM,KAAK,IAAI,UAAU,EAE/C,KAAK,IAAI,YAAYA,CAAI,EAG3B,KAAK,IAAI,YAAYA,CAAI,CAE7B,CACF,CAEA,SAAU,CACR,IAAMC,EAAO,KAAK,SAAS,EACvB,KAAK,QAAQ,gBAAkB,MACjC,KAAK,IAAI,YAAYA,CAAI,EAErB,KAAK,IAAI,WACX,KAAK,IAAI,aAAaA,EAAM,KAAK,IAAI,UAAU,EAE/C,KAAK,IAAI,YAAYA,CAAI,CAG/B,CAEA,aAAc,CACZ,OAAO,KAAK,QACd,CAEA,UAAW,CACT,IAAMC,EAAU,SAAS,cAAc,KAAK,EAC5C,OAAAA,EAAQ,YAAY,KAAK,mBAAmB,CAAC,EAC7CA,EAAQ,MAAM,UAAY,SAC1B,KAAK,QAAUA,EACRA,CACT,CAEA,oBAAqB,CACnB,IAAMC,EAAI,SAAS,uBAAuB,EAC1C,YAAK,QAAQ,MAAM,QAAQC,GAAQ,CACjC,IAAML,EAAM,SAAS,cAAc,KAAK,EAExC,GADAA,EAAI,MAAM,WAAa,SACnBK,EAAK,OACP,OAAS,CAACC,EAAKV,CAAK,IAAK,OAAO,QAAQS,EAAK,MAAM,EACjDL,EAAI,MAAMM,CAAU,EAAIV,EAG5BI,EAAI,YAAcK,EAAK,KACvBD,EAAE,YAAYJ,CAAG,CACnB,CAAC,EACMI,CACT,CAEA,UAAW,CA/Ob,IAAAlB,EAAAC,EAgPI,IAAMoB,EAAM,SAAS,cAAc,KAAK,EACxC,OAAAA,EAAI,aAAa,MAAO,KAAK,QAAQ,IAAK,EAC1CA,EAAI,MAAM,MAAQ,KAAGrB,EAAA,KAAK,QAAQ,YAAb,YAAAA,EAAyB,KAAM,EAAE,KACtDqB,EAAI,MAAM,OAAS,KAAGpB,EAAA,KAAK,QAAQ,YAAb,YAAAA,EAAyB,KAAM,EAAE,KACvDoB,EAAI,MAAM,QAAU,GAAG,KAAK,QAAQ,YAAY,KAChDA,EAAI,MAAM,aAAe,MACrB,KAAK,QAAQ,YAAY,QAC3BA,EAAI,MAAM,OAAS,GAAG,KAAK,QAAQ,YAAY,KAAK,YAAY,KAAK,QAAQ,YAAY,KAAK,IAEhGA,EAAI,OAAS,IAAM,CAEjB,KAAK,UAAU,CACjB,EACA,KAAK,IAAMA,EACJA,CACT,CAMA,eAAgB,CAEhB,CAEA,iBAAkB,CAElB,CAEA,WAAWC,EAAkB,CACvBA,IAAY,KAAK,UACrB,KAAK,QAAUA,EACf,KAAK,qBAAqBA,CAAO,EACnC,CAEA,qBAAqBA,EAAkB,CACrC,GAAI,EAAAA,IAAY,KAAK,QAAQ,SAAW,KAAK,QAAQ,qBACrD,GAAI,KAAK,QAAQ,oBACf,KAAK,QAAQ,QAAUA,EACvB,KAAK,QAAQ,IAAI,MAAM,WAAaA,EAAU,UAAY,aACrD,CACL,GAAI,KAAK,iBAAmBA,EAAW,OACvC,KAAK,QAAQ,MAAM,WAAaA,EAAU,UAAY,SACtD,KAAK,eAAiBA,CACxB,CACF,CAEA,iBAAiBA,EAAkB,CAC5B,KAAK,SAGV,KAAK,qBAAqBA,CAAO,CAOnC,CAEA,OAAOC,EAAW,KAAK,QAAQ,OAAO,IAAI,SAAU,CAClD,GAAM,CAAE,MAAAV,EAAO,OAAAJ,CAAO,EAAI,KAAK,KACzBe,EAAIX,EAAQU,EACZE,EAAIhB,EAASc,EACb,CAAE,EAAAhB,EAAG,EAAAC,CAAE,EAAI,KAAK,QAAQ,UAC9B,MAAO,CACL,KAAMD,EAAKiB,EAAI,EACf,MAAOjB,EAAIiB,EAAI,EACf,IAAK,KAAK,QAAQ,KAAOhB,EAAIiB,EAAIjB,EAAIiB,EAAI,EACzC,OAAQ,KAAK,QAAQ,KAAOjB,EAAIA,EAAIiB,EAAI,CAC1C,CACF,CAEA,cAAe,CACb,OAAO,KAAK,OAAO,CAAC,CACtB,CAEA,UAAUlB,EAAWC,EAAW,CAE9B,GADI,CAAC,KAAK,QAAQ,SACd,CAAC,KAAK,QAAU,MAAO,GAC3B,IAAMkB,EAAM,KAAK,aAAa,EAC9B,OAAOnB,GAAKmB,EAAI,MAAQnB,GAAKmB,EAAI,OAASlB,GAAKkB,EAAI,KAAOlB,GAAKkB,EAAI,MACrE,CAEA,SAAU,CACR,KAAK,gBAAgB,EACrB,KAAK,IAAM,KACX,KAAK,QAAU,KACf,KAAK,IAAM,OACX,KAAK,QAAQ,QAAQ,CACvB,CACF,EE1UA,IAAAC,EAAwC,WCAxC,IAAAC,GAAyC,WCAzC,IAAAC,GAAyB,WAGlB,IAAMC,EAAN,cAAoB,WAAS,CAClC,YAAmBC,EAAkB,CACnC,MAAM,EADW,aAAAA,CAEnB,CAEA,SAAU,CACRC,EAAQ,IAAI,EACZ,KAAK,MAAM,CACb,CACF,EDRO,IAAMC,GAAN,cAA2BC,CAAM,CAItC,YAAYC,EAAkB,CAC5B,MAAMA,CAAO,EAHfC,EAAA,kBAAa,IAAI,IAIjB,CAEA,WAAqB,CAEnB,OADY,IAAI,QAAK,EAAE,cAAc,IAAI,EAC9B,UAAU,IAAI,UAAS,CACpC,CAEA,cAAcC,EAA8B,CAE1C,IAAMC,EAAU,IAAIC,EAAQ,KAAK,QAASF,CAAO,EACjD,YAAK,IAAIC,CAAO,EAChB,KAAK,WAAW,IAAID,EAAQ,GAAKC,CAAO,EACjCA,CACT,CAEA,cAAcA,EAAkB,CAC9B,KAAK,OAAOA,CAAO,EACnB,KAAK,WAAW,OAAOA,EAAQ,QAAQ,EAAG,EAC1CA,EAAQ,QAAQ,CAClB,CAEA,kBAAkBE,EAAY,CACxB,KAAK,WAAW,IAAIA,CAAE,GACxB,KAAK,cAAc,KAAK,WAAW,IAAIA,CAAE,CAAE,CAE/C,CAEA,mBAAmBA,EAAY,CAC7B,OAAO,KAAK,WAAW,IAAIA,CAAE,GAAK,IACpC,CAMA,sBAAsBC,EAAyE,CAC7F,IAAMC,EAIF,CAAE,SAAU,IAAO,QAAS,KAAM,SAAU,IAAK,EAC/CC,EAAO,KAAK,SAAS,OAAO,CAACC,EAAKC,IAAS,CAC/C,GAAIA,aAAgBN,EAAS,CAC3B,IAAMO,EAAMD,EAAK,QAAQJ,CAAS,EAClC,GAAIK,EAAK,CACP,GAAM,CAAE,SAAAC,CAAS,EAAID,EACrB,GAAIC,EAAWH,EAAI,SACjB,MAAO,CACL,SAAUA,EAAI,SACd,SAAUA,EAAI,SACd,QAASC,CACX,CAEJ,CACA,OAAOD,CACT,KACE,QAAOA,CAEX,EAAGF,CAAQ,EACX,OAAIC,IAASD,EACJ,CAAE,SAAU,CAAC,EAAG,SAAU,IAAK,EAEjC,CAAE,SAAU,CAACC,EAAK,OAAQ,EAAG,SAAUA,EAAK,QAAS,CAC9D,CACF,EExEA,IAAAK,GAAyB,YAGlB,IAAMC,GAAN,cAAuBC,CAAM,CAMlC,YAAYC,EAAkB,CAC5B,MAAMA,CAAO,EANfC,EAAA,YAAc,CAAC,GACfA,EAAA,mCAEAA,EAAA,aAAQ,IAAIC,GA6FZD,EAAA,gBAAW,IAAM,CACf,KAAK,MAAM,sBAAsB,IAAM,CACrC,KAAK,mBAAmB,CAC1B,CAAC,CACH,GA7FE,KAAK,cAAc,EACnB,KAAK,8BAA6B,aAAS,KAAK,mBAAoB,EAAE,CACxE,CAEA,MAAME,EAAQ,GAAO,CACnB,YAAK,KAAK,QAAQC,GAAQ,CACpBA,EAAK,QAAQ,UAAY,CAACD,GAG9BC,EAAK,QAAQ,CACf,CAAC,EACD,KAAK,KAAOD,EAAQ,CAAC,EAAI,KAAK,KAAK,OAAOC,GAAQA,EAAK,QAAQ,QAAQ,EAChE,IACT,CAEA,UAAUC,EAA0B,CAClC,IAAMC,EAAM,IAAIC,EAAI,KAAK,QAASF,CAAO,EACzC,YAAK,QAAQC,CAAG,EAChBA,EAAI,iBAAiB,eAAgB,IAAM,KAAK,gCAAgCA,CAAG,CAAC,EACpFA,EAAI,iBAAiB,0BAA2B,IAAM,KAAK,gCAAgCA,CAAG,CAAC,EAC/F,QAAQ,QAAQ,EAAE,KAAK,IAAM,CAC3B,KAAK,2BAA2B,CAClC,CAAC,EACMA,CACT,CAEA,gCAAgCA,EAAU,CACxC,IAAME,EAAQ,KAAK,KAAK,UAAUJ,GAAQA,IAASE,CAAG,EAClDE,IAAU,KACd,KAAK,KAAK,OAAOA,EAAO,CAAC,EACzB,KAAK,QAAQF,CAAG,EAClB,CAEA,UAAUA,EAAU,CAClB,IAAME,EAAQ,KAAK,KAAK,UAAUJ,GAAQA,IAASE,CAAG,EAClDE,IAAU,KACd,KAAK,KAAK,OAAOA,EAAO,CAAC,EACzBF,EAAI,QAAQ,EACd,CAEA,cAAcG,EAAY,CACxB,IAAMH,EAAM,KAAK,KAAK,KAAKF,GAAQA,EAAK,QAAQ,KAAOK,CAAE,EACrDH,GACF,KAAK,UAAUA,CAAG,CAEtB,CAEA,WAAWG,EAAY,CAErB,OADY,KAAK,KAAK,KAAKL,GAAQA,EAAK,QAAQ,KAAOK,CAAE,GAC3C,IAChB,CAMA,QAAQH,EAAU,CAEhB,GAAI,CAACA,EAAI,QAAQ,iBAAkB,CACjC,KAAK,KAAK,QAAQA,CAAG,EACrB,MACF,CAEA,GAAIA,EAAI,QAAQ,QAAU,EAAG,CAC3B,KAAK,KAAK,KAAKA,CAAG,EAClB,MACF,CACA,QAASI,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IAAK,CACzC,IAAMN,EAAO,KAAK,KAAKM,CAAC,EAExB,GAAKN,EAAK,QAAQ,kBAGdA,EAAK,QAAQ,OAASE,EAAI,QAAQ,MAAO,CAC3C,KAAK,KAAK,OAAOI,EAAG,EAAGJ,CAAG,EAC1B,MACF,CACF,CAEA,KAAK,KAAK,KAAKA,CAAG,CACpB,CAEA,iBAAiBK,EAAWC,EAAW,CAIrC,OAHa,KAAK,KAAK,OAAOR,GACpBA,aAAgBG,GAAQH,EAAK,UAAUO,EAAGC,CAAC,CACpD,CAEH,CAWA,oBAAqB,CACnB,IAAMC,EAAyE,CAAC,EAEnE,KAAK,KAAK,OAAOT,GAAQA,EAAK,SAAWA,EAAK,kBAAkB,EACxE,QAAQ,CAACA,EAAMI,IAAU,CAC5B,GAAM,CAAE,KAAAM,EAAM,MAAAC,EAAO,IAAAC,EAAK,OAAAC,CAAO,EAAIb,EAAK,OAAO,EACjD,GAAII,IAAU,GAAK,CAACJ,EAAK,QAAQ,iBAAkB,CACjDS,EAAM,KAAK,CAAE,KAAAC,EAAM,MAAAC,EAAO,IAAAC,EAAK,OAAAC,CAAO,CAAC,EACvCb,EAAK,iBAAiB,EAAI,EAC1B,MACF,CAEA,IAAMc,EAAQL,EAAM,KAAMM,GAEjBA,EAAI,KAAOJ,GAASI,EAAI,MAAQL,GAAQK,EAAI,IAAMF,GAAUE,EAAI,OAASH,CACjF,EACDZ,EAAK,iBAAiB,CAACc,CAAK,EACvBA,GACHL,EAAM,KAAK,CAAE,KAAAC,EAAM,MAAAC,EAAO,IAAAC,EAAK,OAAAC,CAAO,CAAC,CAE3C,CAAC,CACH,CAEA,eAAgB,CACd,KAAK,QAAQ,iBAAiB,SAAU,KAAK,QAAQ,CACvD,CAEA,iBAAkB,CAChB,KAAK,QAAQ,oBAAoB,SAAU,KAAK,QAAQ,CAC1D,CAEA,SAAU,CACR,KAAK,MAAM,QAAQ,EACnB,KAAK,KAAK,QAAQb,GAAQA,EAAK,QAAQ,CAAC,EACxC,KAAK,KAAK,OAAS,EACnB,KAAK,2BAA6B,IAAM,CAAE,EAC1C,MAAM,QAAQ,EACd,KAAK,gBAAgB,CACvB,CACF,ECtJA,IAAAgB,EAGO,WACPC,GAAwD,wBACxDC,EAAoE,gBAQ7D,IAAMC,GAAN,cAA6B,UAAS,CAQ3C,YAAoBC,EAAkB,CACpC,MAAM,EADY,aAAAA,EANpBC,EAAA,KAAQ,WAERA,EAAA,KAAQ,OAERA,EAAA,KAAQ,SAIN,KAAK,IAAM,SAAS,cAAc,KAAK,CACzC,CAEA,cAAe,CACT,KAAK,IAAI,YACX,KAAK,IAAI,YAAY,KAAK,IAAI,UAAU,EAE1C,KAAK,QAAU,MACjB,CAEA,SAASC,EAAwB,CAC/B,KAAK,aAAa,EAClB,GAAM,CAAE,MAAAC,EAAO,OAAAC,EAAQ,QAAAC,EAAS,OAAAC,CAAO,EAAI,KAAK,OAAOJ,CAAI,EAC3D,KAAK,WAAU,WAAOK,EAAA,CACpB,MAAOJ,EACP,OAAQC,EACR,UAAW,KAAK,KACb,KAAK,QAAQ,OAAO,QACjB,EACR,KAAK,QAAQ,QAAQ,KAAK,cAAcF,EAAMG,CAAO,CAAC,EACtD,KAAK,UAAUF,EAAOC,CAAM,EAC5B,KAAK,SAAS,IAAIE,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAG,KAAK,SAAS,CAAC,CACzD,CAEA,UAAUH,EAAeC,EAAgB,CACnC,KAAK,OAAS,KAAK,OAAO,KAAK,KAAK,EACxC,IAAMI,EAAW,IAAI,gBAAcL,EAAOC,CAAM,EAC1CK,EAAU,IAAI,UAAQ,KAAK,IAAI,UAA+B,EACpEA,EAAQ,YAAc,GACtB,IAAMC,EAAW,IAAI,oBAAkB,CACrC,YAAa,GACb,KAAM,aACN,IAAKD,CACP,CAAC,EACDC,EAAS,YAAc,GACvB,KAAK,MAAQ,IAAI,OAAKF,EAAUE,CAAQ,EACxC,KAAK,IAAI,KAAK,KAAK,CACrB,CAEA,eAAe,CAAE,EAAAC,EAAG,EAAAC,CAAE,EAA6B,CAEjD,OAAO,IAAI,UAAQ,EAAE,UAAU,EAAG,EAAE,EAAE,SAAS,IAAI,UAAQ,EAAE,gBAAgB,EAAID,EAAG,EAAIC,CAAC,CAAC,CAC5F,CAQA,cAAcV,EAAwBG,EAAqD,CACzF,IAAMQ,EAAS,KAAK,eAAeR,CAAO,EAS1C,MAAO,CACL,KATYH,EAAK,KAAK,IAAIY,GAAQ,CAClC,IAAMC,EAAS,IAAI,UAAQD,EAAK,EAAGA,EAAK,CAAC,EAAE,aAAaD,CAAM,EAC9D,MAAO,CACL,EAAGE,EAAO,EACV,EAAGA,EAAO,EACV,MAAOD,EAAK,KACd,CACF,CAAC,EAGC,IAAKZ,EAAK,IACV,IAAKA,EAAK,GACZ,CACF,CAEA,OAAOA,EAAwB,CAC7B,IAAMc,KAAW,qBAAkBd,EAAK,KAAK,IAAIY,MAAQ,SAAM,CAACA,EAAK,EAAGA,EAAK,CAAC,CAAC,CAAC,CAAC,EAE3EG,KAAM,QAAKD,CAAQ,EACnBb,EAAQc,EAAI,CAAC,EAAIA,EAAI,CAAC,EACtBb,EAASa,EAAI,CAAC,EAAIA,EAAI,CAAC,EACvBZ,EAAU,CAAE,EAAGY,EAAI,CAAC,EAAG,EAAGA,EAAI,CAAC,CAAE,EACjCX,KAAS,EAAAY,QAAUF,CAAQ,EACjC,MAAO,CAAE,MAAAb,EAAO,OAAAC,EAAQ,QAAAC,EAAS,OAAQC,EAAO,SAAS,WAAY,CACvE,CAEA,SAAU,CACR,KAAK,IAAM,KACX,KAAK,QAAU,MACjB,CACF,EC1GA,IAAAa,EAAwC,WAcjC,IAAMC,GAAN,cAAoB,UAAS,CAKlC,YAAmBC,EAA0BC,EAAuB,CAClE,MAAM,EADW,aAAAD,EAA0B,aAAAC,EAJ7CC,EAAA,WAAkB,MAElBA,EAAA,aAAqB,MAInB,KAAK,SAAS,KAAKD,EAAQ,UAAY,IAAI,UAAQ,EAAG,EAAG,CAAC,CAAC,EAC3D,KAAK,UAAU,CACjB,CAEM,WAAY,QAAAE,EAAA,sBAChB,IAAMC,EAAS,MAAMC,GAAU,KAAK,QAAQ,QAAQ,EACpDD,EAAO,MAAM,SAAS,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,CAAC,EACrD,KAAK,IAAIA,EAAO,KAAK,EACrB,KAAK,MAAQA,EACb,KAAK,QAAQ,CACf,GAEA,SAAU,CAjCZ,IAAAE,EAkCI,GAAI,CAAC,KAAK,QAAQ,KAChB,OAEF,IAAMC,GAAMD,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,OAAO,CAC5C,KAAM,KAAK,QAAQ,KACnB,UAAW,KAAK,QAAQ,UACxB,SAAU,GACV,MAAO,CACT,GACA,KAAK,IAAMC,GAAO,KACd,KAAK,OAASA,IAChBA,EAAI,SAAY,IAAI,OAAK,EAAE,cAAc,IAAI,EAAG,UAAU,IAAI,SAAS,EAE3E,CAEA,SAAU,CAjDZ,IAAAD,EAkDIE,EAAQ,IAAI,EACZ,KAAK,MAAQ,KACT,KAAK,OACPF,EAAA,KAAK,QAAQ,eAAb,MAAAA,EAA2B,SAAS,UAAU,KAAK,KACnD,KAAK,IAAM,KAEf,CACF,EL/CO,IAAMG,GAAN,cAAoB,UAAS,CAoBlC,YAAmBC,EAAkB,CACnC,MAAM,EADW,aAAAA,EAlBnBC,EAAA,qBAEAA,EAAA,iBAEAA,EAAA,eAAwB,IAAI,KAE5BA,EAAA,cAAS,IAAIC,IAEbD,EAAA,gBAEAA,EAAA,mBAAc,IAAI,YAElBA,EAAA,cAAS,IAAI,YAEbA,EAAA,gBAAW,IAAI,KAEfA,EAAA,KAAQ,kBAAkB,GAIxB,KAAK,aAAe,IAAIE,GAAa,KAAK,OAAO,EACjD,KAAK,SAAW,IAAIC,GAAS,KAAK,OAAO,EACzC,KAAK,YAAY,IAAI,KAAK,YAAY,EACtC,KAAK,YAAY,IAAI,KAAK,QAAQ,EAClC,KAAK,IAAI,KAAK,WAAW,EACzB,KAAK,IAAI,KAAK,MAAM,CACtB,CAEA,aAAc,CAEZ,OADY,IAAI,OAAK,EAAE,cAAc,KAAK,WAAW,EAC1C,UAAU,IAAI,SAAS,CACpC,CAEA,aAAaC,EAA8B,CAEzC,IAAMC,EAAS,IAAIC,EAAQ,KAAK,QAASF,CAAO,EAChD,KAAK,WAAW,CAACC,CAAM,CAAC,CAC1B,CAEA,WAAWE,EAAoB,CAC7BA,EAAQ,QAAQF,GAAU,CACnB,KAAK,QAAQ,IAAIA,CAAM,IAC1BA,EAAO,KAAK,WAAa,GACzB,KAAK,QAAQ,IAAIA,CAAM,EACvB,KAAK,YAAY,IAAIA,CAAM,EAE/B,CAAC,EACD,KAAK,sBAAsB,CAC7B,CAEA,uBAAwB,CACtB,IAAME,EAAU,MAAM,KAAK,KAAK,OAAO,EACvC,KAAK,gBAAkB,KAAK,QAAQ,KAAO,EAAI,KAAK,IAAI,GAAGA,EAAQ,IAAIF,GAAUA,EAAO,QAAQ,OAASA,EAAO,QAAQ,UAAYA,EAAO,QAAQ,WAAW,CAAC,EAAI,EACnK,KAAK,aAAa,SAAS,EAAI,KAAK,gBACpC,KAAK,OAAO,SAAS,EAAI,KAAK,eAChC,CAEA,IAAI,YAAa,CACf,MAAO,CAAC,EAAE,KAAK,QAAQ,MAAQ,KAAK,aAAa,SAAS,OAC5D,CAEA,WAAY,CACV,OAAO,IAAI,OAAK,EAAE,cAAc,KAAK,WAAW,EAAE,UAAU,IAAI,SAAS,CAC3E,CAEA,SAASD,EAAuB,CAC9B,IAAMI,EAAQ,IAAIC,GAAM,KAAK,QAASL,CAAO,EAC7C,YAAK,OAAO,IAAII,CAAK,EACrB,KAAK,SAAS,IAAIJ,EAAQ,GAAII,CAAK,EAC5BA,CACT,CAEA,WAAY,CACV,IAAME,EAAM,IAAI,OAAK,EAAE,cAAc,KAAK,WAAW,EAC/CC,EAASD,EAAI,UAAU,IAAI,SAAS,EACpCE,EAAOF,EAAI,QAAQ,IAAI,SAAS,EACtC,KAAK,OAAO,YAAYC,CAAM,EAC9B,KAAK,OAAO,kBAAkBC,CAAI,CAEpC,CAEA,WAAWC,EAAqC,CAC9C,OAAO,KAAK,aAAa,cAAcA,CAAc,CACvD,CAEA,OAAOC,EAA6B,CAClC,OAAO,KAAK,SAAS,UAAUA,CAAU,CAC3C,CAEA,WAAWC,EAAwB,CAC5B,KAAK,UACR,KAAK,QAAU,IAAIC,GAAe,KAAK,OAAO,EAC9C,KAAK,IAAI,KAAK,OAAO,GAEvB,KAAK,QAAQ,SAASD,CAAI,EAC1B,IAAML,EAAM,IAAI,OAAK,EAAE,cAAc,KAAK,YAAY,EACtD,YAAK,QAAQ,SAAS,KAAKA,EAAI,IAAI,CAAC,EAC7B,KAAK,OACd,CAEA,eAAgB,CACV,KAAK,UACP,KAAK,OAAO,KAAK,OAAO,EACxB,KAAK,QAAQ,QAAQ,EACrB,KAAK,QAAU,OAEnB,CAEA,iBAAiBO,EAAiB,CAChC,KAAK,OAAO,WAAWA,CAAO,CAChC,CAEA,iBAAiBC,EAAkB,CACjC,KAAK,OAAO,QAAUA,CACxB,CAEA,SAAU,CAhIZ,IAAAC,EAiII,KAAK,OAAO,QAAQ,EACpB,KAAK,aAAa,QAAQ,EAC1B,KAAK,SAAS,QAAQ,EACtB,KAAK,QAAQ,QAAQd,GAAUA,EAAO,QAAQ,CAAC,GAC/Cc,EAAA,KAAK,UAAL,MAAAA,EAAc,UACd,KAAK,YAAY,MAAM,EACvB,KAAK,OAAO,SAAS,QAASX,GAAWA,EAA2B,QAAQ,CAAC,EAC7E,KAAK,OAAO,MAAM,EAClB,KAAK,SAAS,MAAM,EACpB,KAAK,MAAM,CACb,CAEF,EM5IA,IAAAY,GAAyC,WAGlC,IAAMC,EAAN,cAAyC,kBAAmB,CAOjE,YAAmBC,EAAkB,CACnC,MAAM,EADW,aAAAA,EANnBC,EAAA,KAAU,SAAoB,CAAC,GAE/BA,EAAA,KAAU,OAEVA,EAAA,KAAU,SAAS,IASnBA,EAAA,KAAQ,YAAY,CAAC,CAAE,MAAAC,EAAO,OAAAC,CAAO,IAAyC,CACxE,KAAK,MACP,KAAK,IAAI,aAAa,QAAS,GAAGD,CAAK,EAAE,EACzC,KAAK,IAAI,aAAa,SAAU,GAAGC,CAAM,EAAE,EAE/C,GAVE,KAAK,IAAMC,GAAU,GAAGJ,EAAQ,UAAU,WAAW,GAAI,GAAGA,EAAQ,UAAU,YAAY,EAAE,EAC5FA,EAAQ,UAAU,YAAY,KAAK,GAAG,EACtC,KAAK,eAAe,CACtB,CASQ,gBAAiB,CACvB,KAAK,QAAQ,iBAAiB,SAAU,KAAK,SAAS,CACxD,CAEQ,kBAAmB,CACzB,KAAK,QAAQ,oBAAoB,SAAU,KAAK,SAAS,CAC3D,CAEA,UAAUK,EAAiB,CACzB,KAAK,OAASA,EACVA,EACF,KAAK,IAAI,MAAM,QAAU,QAEzB,KAAK,IAAI,MAAM,QAAU,MAE7B,CAEA,2BAA2BC,EAAiB,CAC1C,GAAM,CAAE,OAAAC,EAAQ,SAAAC,CAAS,EAAI,KAAK,QAC5B,CAAE,QAASC,EAAG,QAASC,CAAE,EAAIJ,EAC7B,CAAE,YAAAK,EAAa,aAAAC,CAAa,EAAIJ,EAAS,WACzCK,EAAKJ,EAAIE,EAAc,EAAI,EAC3BG,EAAK,EAAIJ,EAAIE,EAAe,EAIlC,OAFU,IAAI,WAAQC,EAAIC,EAAI,CAAC,EAEtB,UAAUP,CAAM,CAC3B,CAEA,iBAAiBQ,EAAiB,CAChC,GAAM,CAAE,OAAAR,EAAQ,UAAAS,CAAU,EAAI,KAAK,QAEnC,OADcC,EAAgBF,EAAQR,EAAQS,EAAU,YAAaA,EAAU,YAAY,CAE7F,CAEA,SAAU,CACR,KAAK,iBAAiB,EACtB,KAAK,QAAQ,UAAU,YAAY,KAAK,GAAG,EAC3C,KAAK,IAAM,IACb,CACF,ECxDO,IAAME,GAAN,cAAsBC,CAAyB,CAMpD,YAAmBC,EAAkB,CACnC,MAAMA,CAAO,EADI,aAAAA,EAJnBC,EAAA,KAAQ,WAERA,EAAA,KAAQ,QAsCRA,EAAA,gBAAW,IAAM,CACf,GAAI,KAAK,OAAO,CAAC,EAAG,CAClB,IAAMC,EAAS,KAAK,iBAAiB,KAAK,OAAO,CAAC,CAAC,EACnDC,EAAkB,KAAK,QAAQ,CAAC,EAAGD,EAAO,EAAGA,EAAO,CAAC,EACrDE,EAAgB,KAAK,KAAMF,CAAM,CACnC,CACA,GAAI,KAAK,OAAO,CAAC,EAAG,CAClB,IAAMG,EAAS,KAAK,iBAAiB,KAAK,OAAO,CAAC,CAAC,EACnDF,EAAkB,KAAK,QAAQ,CAAC,EAAGE,EAAO,EAAGA,EAAO,CAAC,EACrDD,EAAgB,KAAK,KAAM,OAAWC,CAAM,CAC9C,CACF,GAGAJ,EAAA,qBAAiBK,GAAoB,CAE/B,KAAK,OAAO,SAAW,IAC3B,KAAK,KAAK,MAAM,QAAU,QAC1BF,EAAgB,KAAK,KAAM,OAAW,CAAE,EAAGE,EAAE,QAAS,EAAGA,EAAE,OAAQ,CAAC,EACtE,GAEAL,EAAA,sBAAiB,IAAM,CACjB,KAAK,OAAO,CAAC,IACjB,KAAK,KAAK,MAAM,QAAU,OAC5B,GAEAA,EAAA,qBAAiBK,GAAoB,CACnC,GAAI,KAAK,OAAO,CAAC,EAAK,OACtB,IAAMC,EAAQ,KAAK,2BAA2BD,CAAC,EAC/C,GAAIC,EAAO,CACT,GAAM,CAAE,QAASC,EAAG,QAASC,CAAE,EAAIH,EAE7BI,EAAS,KAAK,QAAQ,KAAK,OAAO,MAAM,EAC9CP,EAAkBO,EAAQF,EAAGC,CAAC,EACzB,KAAK,OAAO,QAEfL,EAAgB,KAAK,KAAM,CAAE,EAAAI,EAAG,EAAAC,CAAE,EAAG,CAAE,EAAAD,EAAG,EAAAC,CAAE,CAAC,EAE/C,KAAK,SAASF,CAAK,CACrB,CACF,GA1EE,GAAM,CAAE,OAAQ,CAAE,IAAK,CAAE,OAAAG,EAAQ,KAAAC,CAAK,CAAE,CAAE,EAAIX,EAC9C,KAAK,QAAU,CAACY,EAAaF,EAAO,OAAQA,EAAO,IAAI,EAAGE,EAAaF,EAAO,OAAQA,EAAO,IAAI,CAAC,EAClG,KAAK,KAAOG,GAAWF,EAAK,MAAM,EAClC,KAAK,IAAI,YAAY,KAAK,QAAQ,CAAC,CAAC,EACpC,KAAK,IAAI,YAAY,KAAK,QAAQ,CAAC,CAAC,EACpC,KAAK,IAAI,YAAY,KAAK,IAAI,EAC9B,KAAK,cAAc,CACrB,CAEA,UAAUG,EAAiB,CACzB,MAAM,UAAUA,CAAM,EAClBA,EACF,KAAK,cAAc,EAEnB,KAAK,gBAAgB,CAEzB,CAEA,eAAgB,CACd,KAAK,QAAQ,UAAU,iBAAiB,eAAgB,KAAK,aAAa,EAC1E,KAAK,QAAQ,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACzE,KAAK,QAAQ,UAAU,iBAAiB,eAAgB,KAAK,cAAc,EAC3E,KAAK,QAAQ,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACzE,KAAK,QAAQ,iBAAiB,SAAU,KAAK,QAAQ,CACvD,CAEA,iBAAkB,CAChB,KAAK,QAAQ,UAAU,oBAAoB,eAAgB,KAAK,aAAa,EAC7E,KAAK,QAAQ,UAAU,oBAAoB,cAAe,KAAK,aAAa,EAC5E,KAAK,QAAQ,UAAU,oBAAoB,eAAgB,KAAK,cAAc,EAC9E,KAAK,QAAQ,UAAU,oBAAoB,cAAe,KAAK,aAAa,EAC5E,KAAK,QAAQ,oBAAoB,SAAU,KAAK,QAAQ,CAC1D,CA4CA,SAASC,EAAiB,CAExB,GADA,KAAK,OAAO,KAAKA,CAAM,EACnB,KAAK,OAAO,QAAU,EAAG,CAC3B,IAAMC,EAAW,KAAK,mBAAmB,EACzC,KAAK,cAAc,CAAE,KAAM,WAAY,SAAAA,CAAS,CAAC,CACnD,CACF,CAKA,oBAAqB,CACnB,GAAM,CAAC,CAAE,EAAGC,EAAI,EAAGC,CAAG,EAAG,CAAE,EAAGC,EAAI,EAAGC,CAAG,CAAC,EAAI,KAAK,OAClD,OAAO,KAAK,KAAMC,EAAAF,EAAKF,EAAO,GAAKI,EAAAD,EAAKF,EAAO,EAAC,CAClD,CAEA,SAAU,CACR,MAAM,QAAQ,EACd,KAAK,gBAAgB,EACrB,KAAK,KAAO,KACZ,KAAK,QAAU,CAAC,CAClB,CACF,EC1GO,IAAMI,GAAN,cAAyBC,CAA4B,CAQ1D,YAAYC,EAAkB,CAC5B,MAAMA,CAAO,EAPfC,EAAA,KAAQ,UAAwB,CAAC,GAEjCA,EAAA,KAAQ,QAAsB,CAAC,GAE/BA,EAAA,KAAQ,UAAU,IA8ClBA,EAAA,gBAAW,IAAM,CACX,KAAK,OAAO,QACd,KAAK,OAAO,QAAQ,CAACC,EAAOC,IAAU,CACpC,IAAMC,EAAc,KAAK,iBAAiBF,CAAK,EAC3C,KAAK,QAAQC,CAAK,GACpBE,EAAkB,KAAK,QAAQF,CAAK,EAAGC,EAAY,EAAGA,EAAY,CAAC,EAEjED,IAAU,GACZG,EAAgB,KAAK,MAAMH,EAAQ,CAAC,EAAG,OAAWC,CAAW,EAE3D,KAAK,MAAMD,CAAK,GAClBG,EAAgB,KAAK,MAAMH,CAAK,EAAGC,CAAW,CAElD,CAAC,CAEL,GAGAH,EAAA,qBAAiBM,GAAoB,CAE/B,CAAC,KAAK,UAAY,KAAK,UAC3B,KAAK,SAAS,MAAM,QAAU,QAC9BD,EAAgB,KAAK,SAAU,OAAW,CAAE,EAAGC,EAAE,QAAS,EAAGA,EAAE,OAAQ,CAAC,EAC1E,GAEAN,EAAA,sBAAiB,IAAM,CAEjB,KAAK,UACT,KAAK,SAAS,MAAM,QAAU,OAChC,GAEAA,EAAA,qBAAiBM,GAAoB,CAEnC,GAAI,KAAK,QAAW,OACpB,IAAML,EAAQ,KAAK,2BAA2BK,CAAC,EAC/C,GAAIL,EAAO,CACT,GAAM,CAAE,QAASM,EAAG,QAASC,CAAE,EAAIF,EAC/B,KAAK,YAAYC,EAAGC,CAAC,GACvB,KAAK,QAAU,GACf,KAAK,SAAS,KAAK,OAAO,CAAC,CAAC,GAE5B,KAAK,SAASP,CAAK,EAErB,GAAM,CAAE,OAAQ,CAAE,KAAAQ,EAAM,OAAAC,CAAO,EAAG,KAAM,CAAE,OAAAC,CAAO,CAAE,EAAI,KAAK,QAAQ,OAAO,IAC3E,GAAI,CAAC,KAAK,QAAS,CAEjB,IAAMC,EAASC,EAAaH,EAAQD,CAAI,EACxCL,EAAkBQ,EAAQL,EAAGC,CAAC,EAC9B,KAAK,UAAUI,CAAM,CACvB,CAMA,GALI,KAAK,MAAM,QAEbP,EAAgB,KAAK,SAAU,OAAW,CAAE,EAAAE,EAAG,EAAAC,CAAE,CAAC,EAGhD,CAAC,KAAK,QAAS,CACjB,IAAMM,EAAOC,GAAWJ,CAAM,EAE9BN,EAAgBS,EAAM,CAAE,EAAAP,EAAG,EAAAC,CAAE,EAAG,CAAE,EAAAD,EAAG,EAAAC,CAAE,CAAC,EACxC,KAAK,QAAQM,CAAI,CACnB,CACF,CACF,GAxGE,KAAK,cAAc,CACrB,CAEA,UAAUE,EAAiB,CACzB,MAAM,UAAUA,CAAM,EAClBA,EACF,KAAK,cAAc,EAEnB,KAAK,gBAAgB,CAEzB,CAEA,IAAY,UAAW,CACrB,OAAO,KAAK,MAAM,MAAM,EAAE,EAAE,CAAC,CAC/B,CAEQ,UAAUJ,EAAoB,CACpC,KAAK,QAAQ,KAAKA,CAAM,EACxB,KAAK,IAAI,YAAYA,CAAM,CAC7B,CAEQ,QAAQE,EAAkB,CAChC,KAAK,MAAM,KAAKA,CAAI,EACpB,KAAK,IAAI,YAAYA,CAAI,CAC3B,CAEA,eAAgB,CACd,KAAK,QAAQ,UAAU,iBAAiB,eAAgB,KAAK,aAAa,EAC1E,KAAK,QAAQ,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACzE,KAAK,QAAQ,UAAU,iBAAiB,eAAgB,KAAK,cAAc,EAC3E,KAAK,QAAQ,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACzE,KAAK,QAAQ,iBAAiB,SAAU,KAAK,QAAQ,CACvD,CAEA,iBAAkB,CAChB,KAAK,QAAQ,UAAU,oBAAoB,eAAgB,KAAK,aAAa,EAC7E,KAAK,QAAQ,UAAU,oBAAoB,cAAe,KAAK,aAAa,EAC5E,KAAK,QAAQ,UAAU,oBAAoB,eAAgB,KAAK,cAAc,EAC9E,KAAK,QAAQ,UAAU,oBAAoB,cAAe,KAAK,aAAa,EAC5E,KAAK,QAAQ,oBAAoB,SAAU,KAAK,QAAQ,CAC1D,CAsEA,YAAYP,EAAWC,EAAW,CAChC,GAAI,KAAK,OAAO,OAAS,EAAK,MAAO,GACrC,IAAMI,EAAS,KAAK,QAAQ,CAAC,EACvBK,EAAK,CAACL,EAAO,aAAa,IAAI,EAC9BM,EAAK,CAACN,EAAO,aAAa,IAAI,EACpC,OAAO,KAAK,KAAMO,EAAAZ,EAAIU,EAAO,GAAKE,EAAAX,EAAIU,EAAO,EAAC,GAAK,CACrD,CAEA,SAASE,EAAiB,CAExB,GADA,KAAK,OAAO,KAAKA,CAAM,EACnB,KAAK,QAAS,CAChB,IAAMC,EAAO,KAAK,eAAe,EACjC,KAAK,cAAc,CAAE,KAAM,OAAQ,KAAAA,CAAK,CAAC,CAC3C,CACF,CAEA,gBAAiB,CACf,IAAMC,EAAM,KAAK,OAAO,IAAIC,GAAQ,CAACA,EAAK,EAAGA,EAAK,CAAC,CAAC,EAChDF,EAAO,EACLG,EAAYF,EAAI,OACtB,QAASG,EAAI,EAAGA,EAAID,EAAWC,IAAK,CAClC,IAAMC,GAAKD,EAAI,GAAKD,EACpBH,GAASC,EAAIG,CAAC,EAAE,CAAC,EAAIH,EAAII,CAAC,EAAE,CAAC,EAAIJ,EAAII,CAAC,EAAE,CAAC,EAAIJ,EAAIG,CAAC,EAAE,CAAC,CACvD,CACA,OAAO,KAAK,IAAIJ,EAAO,CAAC,CAC1B,CAEA,SAAU,CACR,MAAM,QAAQ,EACd,KAAK,gBAAgB,EACrB,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,CAAC,CAClB,CACF,ECjKA,IAAAM,GAAqB,WASd,IAAMC,GAAN,cAAwBC,CAAyB,CAUtD,YAAmBC,EAAkB,CACnC,MAAMA,CAAO,EADI,aAAAA,EARnBC,EAAA,KAAQ,QAERA,EAAA,KAAQ,aAA2B,CAAC,GAEpCA,EAAA,KAAQ,aAA2B,CAAC,GAEpCA,EAAA,KAAQ,WAiCRA,EAAA,gBAAW,IAAM,CACf,GAAK,KAAK,QAMH,CACL,IAAMC,EAAM,IAAI,QAAK,EAAE,cAAc,KAAK,OAAO,EAC3C,CAAE,OAAAC,EAAQ,UAAW,CAAE,YAAaC,EAAG,aAAcC,CAAE,CAAE,EAAI,KAAK,QAClE,CAAE,IAAAC,EAAK,IAAAC,CAAI,EAAIL,EACfM,EAAaC,EAAgBH,EAAKH,EAAQC,EAAGC,CAAC,EAC9CK,EAAWD,EAAgBF,EAAKJ,EAAQC,EAAGC,CAAC,EAElDM,EAAgB,KAAK,KAAMH,EAAW,EAAGE,EAAS,EAAG,KAAK,IAAIA,EAAS,EAAIF,EAAW,CAAC,EAAG,KAAK,IAAIE,EAAS,EAAIF,EAAW,CAAC,CAAC,EAE7H,GAAM,CAAE,EAAGI,EAAM,EAAGC,CAAO,EAAIL,EACzB,CAAE,EAAGM,EAAO,EAAGC,CAAI,EAAIL,EACvBM,EAAY,EACZC,EAAU,CACd,CAAE,EAAGL,EAAOI,EAAW,EAAGD,EAAMC,CAAU,EAC1C,CAAE,EAAGF,EAAQE,EAAW,EAAGD,EAAMC,CAAU,EAC3C,CAAE,EAAGJ,EAAOI,EAAW,EAAGH,EAASG,CAAU,EAC7C,CAAE,EAAGF,EAAQE,EAAW,EAAGH,EAASG,CAAU,CAChD,EACA,QAASE,EAAI,EAAGA,EAAID,EAAQ,OAAQC,IAClCP,EAAgB,KAAK,WAAWO,CAAC,EAAGD,EAAQC,CAAC,EAAE,EAAGD,EAAQC,CAAC,EAAE,EAAGF,EAAY,EAAGA,EAAY,CAAC,EAG9F,IAAMG,EAAkB,EAClBC,GAAWR,EAAOE,GAAS,EAC3BO,GAAWR,EAASE,GAAO,EAC3BO,EAAU,CACd,CAAE,EAAGF,EAAUD,EAAiB,EAAGJ,EAAMI,CAAgB,EACzD,CAAE,EAAGP,EAAOO,EAAiB,EAAGE,EAAUF,CAAgB,EAC1D,CAAE,EAAGL,EAAQK,EAAiB,EAAGE,EAAUF,CAAgB,EAC3D,CAAE,EAAGC,EAAUD,EAAiB,EAAGN,EAASM,CAAgB,CAC9D,EACA,QAASD,EAAI,EAAGA,EAAII,EAAQ,OAAQJ,IAClCP,EAAgB,KAAK,WAAWO,CAAC,EAAGI,EAAQJ,CAAC,EAAE,EAAGI,EAAQJ,CAAC,EAAE,EAAGC,EAAkB,EAAGA,EAAkB,CAAC,CAE5G,KAxCmB,CACjBR,EAAgB,KAAK,KAAM,EAAG,EAAG,EAAG,CAAC,EACrC,QAASO,EAAI,EAAGA,EAAI,KAAK,WAAW,OAAQA,IAC1CP,EAAgB,KAAK,WAAWO,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,EAC9CP,EAAgB,KAAK,WAAWO,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,CAElD,CAmCF,GAvEE,GAAM,CAAE,OAAQ,CAAE,IAAK,CAAE,KAAAK,CAAK,CAAE,CAAE,EAAIvB,EACtC,KAAK,KAAOwB,EAAWD,EAAK,OAAQ,aAAa,EACjD,KAAK,IAAI,YAAY,KAAK,IAAI,EAC9B,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,KAAK,WAAW,CAAC,EAAIC,EAAWD,EAAK,OAAQ,SAAS,EACtD,KAAK,WAAW,CAAC,EAAIC,EAAWD,EAAK,OAAQ,SAAS,EACtD,KAAK,IAAI,YAAY,KAAK,WAAW,CAAC,CAAC,EACvC,KAAK,IAAI,YAAY,KAAK,WAAW,CAAC,CAAC,EAEzC,KAAK,cAAc,CACrB,CAEA,UAAUE,EAAiB,CACzB,MAAM,UAAUA,CAAM,EAClBA,EACF,KAAK,cAAc,EAEnB,KAAK,gBAAgB,CAEzB,CAEA,eAAgB,CACd,KAAK,QAAQ,iBAAiB,SAAU,KAAK,QAAQ,CACvD,CAEA,iBAAkB,CAChB,KAAK,QAAQ,oBAAoB,SAAU,KAAK,QAAQ,CAC1D,CA8CA,cAAcC,EAAkB,CAC9B,KAAK,QAAUA,CACjB,CAEA,SAAU,CACR,MAAM,QAAQ,EACd,KAAK,gBAAgB,EACrB,KAAK,KAAO,KACZ,KAAK,WAAa,CAAC,EACnB,KAAK,WAAa,CAAC,CACrB,CACF,ECvGA,IAAAC,GAAiC,WAQ1B,IAAMC,GAAN,cAA2BC,CAA8B,CAU9D,YAAYC,EAAkB,CAC5B,MAAMA,CAAO,EATfC,EAAA,KAAQ,cAERA,EAAA,KAAQ,YAERA,EAAA,aAEAA,EAAA,eAAU,IAAI,YAqBdA,EAAA,qBAAiBC,GAAoB,CACnC,GAAI,CAAC,KAAK,OAAU,OACpB,IAAMC,EAAQ,KAAK,2BAA2BD,CAAC,EAC3CC,IACF,KAAK,WAAaA,GAEpB,KAAK,SAAW,MAClB,GAEAF,EAAA,qBAAiBC,GAAoB,CACnC,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,WAAc,OACxC,IAAMC,EAAQ,KAAK,2BAA2BD,CAAC,EAC3CC,IACF,KAAK,SAAWA,EAEpB,GAEAF,EAAA,mBAAeC,GAAoB,CACjC,GAAI,CAAC,KAAK,OAAU,OACpB,IAAMC,EAAQ,KAAK,2BAA2BD,CAAC,EAC3CC,IACF,KAAK,SAAWA,GAElB,KAAK,SAAS,EACd,KAAK,WAAa,MACpB,GAEAF,EAAA,gBAAW,IAAM,CACf,GAAI,KAAK,WAAY,CACnB,IAAMG,EAAa,KAAK,iBAAiB,KAAK,UAAU,EACpDC,EAAWC,EAAA,GAAKF,GAChB,KAAK,WACPC,EAAW,KAAK,iBAAiB,KAAK,QAAQ,GAEhD,IAAME,EAAU,CAAE,EAAG,KAAK,IAAIH,EAAW,EAAGC,EAAS,CAAC,EAAG,EAAG,KAAK,IAAID,EAAW,EAAGC,EAAS,CAAC,CAAE,EACzFG,EAAQ,KAAK,IAAIH,EAAS,EAAID,EAAW,CAAC,EAC1CK,EAAS,KAAK,IAAIJ,EAAS,EAAID,EAAW,CAAC,EACjDM,EAAgB,KAAK,KAAMH,EAAQ,EAAGA,EAAQ,EAAGC,EAAOC,CAAM,CAChE,MACEC,EAAgB,KAAK,KAAM,EAAG,EAAG,EAAG,CAAC,CAEzC,GA1DE,GAAM,CAAE,OAAQ,CAAE,UAAW,CAAE,KAAAC,EAAM,OAAAC,CAAO,CAAE,CAAE,EAAIZ,EACpD,KAAK,KAAOa,EAAWD,EAAQD,CAAI,EACnC,KAAK,IAAI,YAAY,KAAK,IAAI,EAC9B,KAAK,cAAc,CACrB,CAEA,UAAUG,EAAuB,CAC/B,MAAM,UAAUA,CAAM,EACtBJ,EAAgB,KAAK,KAAM,EAAG,EAAG,EAAG,CAAC,EACjCI,EACF,KAAK,cAAc,GAEnB,KAAK,WAAa,OAClB,KAAK,gBAAgB,EAEzB,CA6CA,eAAgB,CACd,KAAK,QAAQ,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACzE,KAAK,QAAQ,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACzE,KAAK,QAAQ,UAAU,iBAAiB,YAAa,KAAK,WAAW,EACrE,KAAK,QAAQ,iBAAiB,SAAU,KAAK,QAAQ,CACvD,CAEA,iBAAkB,CAChB,KAAK,QAAQ,UAAU,oBAAoB,cAAe,KAAK,aAAa,EAC5E,KAAK,QAAQ,UAAU,oBAAoB,cAAe,KAAK,aAAa,EAC5E,KAAK,QAAQ,UAAU,oBAAoB,YAAa,KAAK,WAAW,EACxE,KAAK,QAAQ,oBAAoB,SAAU,KAAK,QAAQ,CAC1D,CAEA,UAAW,CACT,GAAI,KAAK,YAAc,KAAK,SAAU,CAEpC,GADY,KAAK,WAAW,WAAW,KAAK,QAAQ,EAC1C,GAAO,OACjB,GAAM,CAAE,QAAS,CAAE,OAAAC,EAAQ,UAAW,CAAE,YAAaC,EAAG,aAAcC,CAAE,CAAE,CAAE,EAAI,KAC1EC,EAAcC,EAAgB,KAAK,WAAaJ,EAAQC,EAAGC,CAAC,EAC5DG,EAAYD,EAAgB,KAAK,SAAWJ,EAAQC,EAAGC,CAAC,EACxDV,EAAU,CAAE,EAAG,KAAK,IAAIW,EAAY,EAAGE,EAAU,CAAC,EAAG,EAAG,KAAK,IAAIF,EAAY,EAAGE,EAAU,CAAC,CAAE,EAC7FC,EAAc,CAAE,EAAG,KAAK,IAAIH,EAAY,EAAGE,EAAU,CAAC,EAAG,EAAG,KAAK,IAAIF,EAAY,EAAGE,EAAU,CAAC,CAAE,EACjGE,EAAO,KAAK,mBAAmBf,EAASc,CAAW,EACzD,KAAK,cAAc,CAAE,KAAM,WAAY,KAAAC,CAAK,CAAC,CAC/C,CACF,CAEA,mBAAmBf,EAAmCc,EAAkD,CA/G1G,IAAAE,EAgHI,GAAM,CAAE,QAAAvB,CAAQ,EAAI,KACpB,QAAOuB,EAAAvB,EAAQ,eAAR,YAAAuB,EAAsB,aAAa,SAAS,OAAOC,GACjDA,aAAgBC,GAAW,KAAK,qBAAqBD,EAAMjB,EAASc,CAAW,KACrE,CAAC,CACtB,CAEA,qBAAqBK,EAAiBnB,EAAmCc,EAAgD,CACvH,GAAM,CAAE,QAAS,CAAE,OAAAN,EAAQ,UAAW,CAAE,YAAaC,EAAG,aAAcC,CAAE,CAAE,CAAE,EAAI,KAChF,GAAI,CAACS,EAAQ,MAAO,GACpB,GAAI,CAACA,EAAO,KAAM,CAEhB,IAAMC,EAAWD,EAAO,YAAY,EACpC,GAAIC,EAAU,CACZ,IAAMC,EAAaT,EAAgBQ,EAAUZ,EAAQC,EAAGC,CAAC,EACzD,OAAOY,GAAUD,EAAYrB,EAASc,CAAW,CACnD,CACA,MAAO,EACT,CACKK,EAAO,KAAK,SAAS,aACxBA,EAAO,KAAK,SAAS,mBAAmB,EAE1C,IAAMI,EAAMJ,EAAO,KAAK,SAAS,YACjC,GAAI,CAACI,EAAO,MAAO,GACnB,GAAM,CAAE,IAAAC,EAAK,IAAAC,CAAI,EAAIF,EACfG,EAAYd,EAAgBY,EAAKhB,EAAQC,EAAGC,CAAC,EAC7CiB,EAAYf,EAAgBa,EAAKjB,EAAQC,EAAGC,CAAC,EAGnD,MADI,GAACY,GAAUI,EAAW1B,EAASc,CAAW,GAC1C,CAACQ,GAAUK,EAAW3B,EAASc,CAAW,EAEhD,CAEA,SAAU,CACR,KAAK,gBAAgB,CACvB,CACF,EftIO,IAAMc,GAAN,cAAwB,kBAAmC,CAUhE,YAAoBC,EAAkB,CACpC,MAAM,EADY,aAAAA,EATpBC,EAAA,KAAQ,QAAQ,IAAI,KAEpBA,EAAA,KAAQ,gBACRA,EAAA,KAAQ,iBACRA,EAAA,KAAQ,oBACRA,EAAA,KAAQ,YAA6C,MAErDA,EAAA,KAAQ,mBAAmB,IAgC3BA,EAAA,qBAAiBC,GAAoB,CAC/B,KAAK,UAAY,CAAE,EAAGA,EAAE,QAAS,EAAGA,EAAE,OAAQ,CACpD,GAEAD,EAAA,mBAAeC,GAAoB,CACjC,GAAI,CAAC,KAAK,UAAa,OACvB,GAAM,CAAE,QAAAC,EAAS,QAAAC,CAAQ,EAAIF,EACvB,CAAE,EAAAG,EAAG,EAAAC,CAAE,EAAI,KAAK,UACtB,GAAI,KAAK,KAAMC,EAAAF,EAAIF,EAAY,GAAKI,EAAAD,EAAIF,EAAY,EAAC,EAAI,EACvD,OAEF,GAAM,CAAE,SAAAI,CAAS,EAAI,KAAK,QAAQ,sBAAsBL,EAASC,CAAO,EAClEK,EAAe,IAAI,IAAID,EAAS,IAAIE,GAAQA,EAAK,QAAQ,EAAE,CAAC,EACrD,KAAK,QAAQ,kBAAkBP,EAASC,CAAO,EACvD,QAAQM,GAAQ,CAnEzB,IAAAC,EAoEM,GAAI,CAACF,EAAa,IAAIC,EAAK,QAAQ,EAAE,EAAG,CACtC,IAAME,IAAUD,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,aAAa,WAAW,IAAID,EAAK,QAAQ,MAAO,KACvFE,GAAWA,EAAQ,QAAQ,SAAS,OAAS,UAC/CJ,EAAS,KAAKI,CAAO,EACrBH,EAAa,IAAIC,EAAK,QAAQ,EAAE,EAEpC,CACF,CAAC,GACKG,GAAQX,EAAE,QAAUA,EAAE,UAC1B,KAAK,MAAM,MAAM,EAEnBM,EAAS,QAAQE,GAAQ,KAAK,MAAM,IAAIA,CAAI,CAAC,EAC7C,KAAK,UAAU,EACf,KAAK,UAAY,IACnB,GAEAT,EAAA,oBAAgBC,GAAoB,CAClC,KAAK,oBAAoB,CAC3B,GAEAD,EAAA,iBAAaC,GAAqB,CAC5BY,GAAUZ,EAAE,GAAG,GACjB,KAAK,mBAAmB,CAE5B,GAEAD,EAAA,eAAWC,GAAqB,CAC1BY,GAAUZ,EAAE,GAAG,GACjB,KAAK,oBAAoB,CAE7B,GAEAD,EAAA,qBAAgB,CAAC,CAAE,KAAAc,CAAK,IAA2B,CACjD,KAAK,MAAM,MAAM,EACjBA,EAAK,QAAQL,GAAQ,CACnB,KAAK,MAAM,IAAIA,CAAI,CACrB,CAAC,EACD,KAAK,UAAU,CACjB,GAjFE,KAAK,aAAe,IAAIM,GAAahB,CAAO,EAC5C,KAAK,aAAa,UAAU,EAAK,EACjC,KAAK,cAAc,CACrB,CAEA,IAAI,MAAO,CACT,OAAO,KAAK,KACd,CAEA,oBAAqB,CACf,KAAK,mBACT,KAAK,iBAAmB,GACxB,KAAK,aAAa,UAAU,EAAI,EAChC,KAAK,cAAgB,KAAK,QAAQ,QAAQ,UAC1C,KAAK,iBAAmB,KAAK,QAAQ,QAAQ,aAC7C,KAAK,QAAQ,QAAQ,UAAY,GACjC,KAAK,QAAQ,QAAQ,aAAe,GACtC,CAEA,qBAAsB,CAChB,KAAK,mBACP,KAAK,iBAAmB,GACxB,KAAK,aAAa,UAAU,EAAK,EACjC,KAAK,QAAQ,QAAQ,UAAY,CAAC,CAAC,KAAK,cACxC,KAAK,QAAQ,QAAQ,aAAe,CAAC,CAAC,KAAK,iBAE/C,CAyDA,WAAY,CACV,KAAK,cAAc,CAAC,KAAM,SAAU,SAAU,CAAC,GAAG,KAAK,KAAK,EAAG,iBAAkB,KAAK,gBAAgB,CAAC,CACzG,CAEA,eAAgB,CACd,KAAK,QAAQ,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACzE,KAAK,QAAQ,UAAU,iBAAiB,YAAa,KAAK,WAAW,EACrE,KAAK,QAAQ,UAAU,iBAAiB,aAAc,KAAK,YAAY,EACvE,KAAK,QAAQ,UAAU,iBAAiB,gBAAiB,KAAK,YAAY,EAC1E,OAAO,iBAAiB,UAAW,KAAK,SAAS,EACjD,OAAO,iBAAiB,QAAS,KAAK,OAAO,EAC7C,KAAK,aAAa,iBAAiB,WAAY,KAAK,aAAa,CACnE,CAEA,iBAAkB,CAChB,KAAK,QAAQ,UAAU,oBAAoB,cAAe,KAAK,aAAa,EAC5E,KAAK,QAAQ,UAAU,oBAAoB,YAAa,KAAK,WAAW,EACxE,KAAK,QAAQ,UAAU,oBAAoB,aAAc,KAAK,YAAY,EAC1E,KAAK,QAAQ,UAAU,oBAAoB,gBAAiB,KAAK,YAAY,EAC7E,OAAO,oBAAoB,UAAW,KAAK,SAAS,EACpD,OAAO,oBAAoB,QAAS,KAAK,OAAO,EAChD,KAAK,aAAa,oBAAoB,WAAY,KAAK,aAAa,CACtE,CAEA,OAAQ,CACN,KAAK,MAAM,MAAM,CACnB,CAEA,OAAOY,EAAkB,CACvB,KAAK,MAAM,OAAOA,CAAO,CAC3B,CAEA,SAAU,CACR,KAAK,gBAAgB,CACvB,CACF,EgB7IA,IAAAK,GAAgC,WASzB,IAAMC,GAAN,cAA0B,kBAAqC,CAQpE,YAAoBC,EAAkB,CACpC,MAAM,EADY,aAAAA,EANpBC,EAAA,mBAAc,IAAI,KAElBA,EAAA,aAAQ,IAAIC,GAEZD,EAAA,uBAAkB,IAAI,KAOtBA,EAAA,qBAAgB,CAAC,CAAE,SAAAE,EAAU,KAAAC,EAAM,EAAAC,CAAE,IAA6D,CAChG,IAAMC,EAAcF,EACjB,IAAIG,GAAK,CA1BhB,IAAAC,EA0BmB,OAAAA,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,aAAa,WAAW,IAAID,EAAK,QAAQ,IAAG,EACnF,OAAOE,GAAWA,GAAWA,EAAQ,QAAQ,SAAS,OAAS,OAAO,EACzE,GAAI,CAACN,EAAS,QAAU,CAACG,EAAY,QAAU,KAAK,YAAY,KAAM,CACpE,KAAK,YAAY,MAAM,EACvB,KAAK,0BAA0B,EAC/B,MACF,CACA,GAAM,CAAE,KAAAI,CAAK,EAAI,KAAK,QAAQ,OAAO,MAC/BC,EAAc,IAAI,IACxB,GAAIL,EAAY,OAAQ,CAEtB,IAAIM,EACAC,EAAW,IACfP,EAAY,QAAQG,GAAW,CAC7B,IAAMK,EAAMV,EAAK,KAAKU,GAAOA,EAAI,QAAQ,KAAOL,EAAQ,QAAQ,EAAE,EAC5D,CAAE,EAAAM,EAAG,EAAAC,CAAE,EAAIF,EAAI,UACjBG,EAAc,KAAK,KAAMC,EAAAH,EAAIV,EAAE,QAAY,GAAKa,EAAAF,EAAIX,EAAE,QAAY,EAAC,EACnEY,EAAcJ,IAChBA,EAAWI,EACXL,EAAaH,EAEjB,CAAC,EACDE,EAAY,IAAIC,CAAW,CAC7B,CACKD,EAAY,MACfR,EAAS,QAAQM,GAAWE,EAAY,IAAIF,CAAO,CAAC,EAEtDE,EAAY,QAASF,GAAY,CAM/B,GAJI,KAAK,gBAAgB,IAAIA,CAAO,GAIhC,KAAK,YAAY,IAAIA,CAAO,EAC9B,OAGF,IAAMU,EAAQ,KAAK,MAAM,WAAW,IAAM,CACxC,KAAK,YAAY,IAAIV,CAAO,EAC5B,KAAK,gBAAgB,OAAOA,CAAO,EACnC,KAAK,MAAM,aAAaU,CAAK,EAC7B,KAAK,0BAA0B,CACjC,EAAGT,CAAI,EACP,KAAK,gBAAgB,IAAID,EAASU,CAAK,CACzC,CAAC,EAED,KAAK,gBAAgB,QAAQ,CAACA,EAAOV,IAAY,CAC1CE,EAAY,IAAIF,CAAO,IAC1B,KAAK,MAAM,aAAaU,CAAK,EAC7B,KAAK,gBAAgB,OAAOV,CAAO,EAEvC,CAAC,EAED,IAAMW,EAAO,KAAK,YAAY,KAC9B,KAAK,YAAY,QAASX,GAAY,CAC/BE,EAAY,IAAIF,CAAO,GAC1B,KAAK,YAAY,OAAOA,CAAO,CAEnC,CAAC,EAEGW,IAAS,KAAK,YAAY,MAC5B,KAAK,0BAA0B,CAEnC,GAEAnB,EAAA,sBAAiB,IAAM,CACrB,KAAK,YAAY,MAAM,EACvB,KAAK,0BAA0B,CACjC,GAzEE,KAAK,cAAc,CACrB,CA0EA,0BAA0BE,EAAW,KAAK,YAAa,CACrD,KAAK,cAAc,CAAE,KAAM,eAAgB,SAAU,MAAM,KAAKA,CAAQ,CAAE,CAAC,CAC7E,CAEA,eAAgB,CACd,KAAK,QAAQ,iBAAiB,eAAgB,KAAK,aAAa,EAChE,KAAK,QAAQ,iBAAiB,eAAgB,KAAK,aAAa,EAChE,KAAK,QAAQ,iBAAiB,gBAAiB,KAAK,cAAc,CACpE,CAEA,iBAAkB,CAChB,KAAK,QAAQ,oBAAoB,eAAgB,KAAK,aAAa,EACnE,KAAK,QAAQ,oBAAoB,eAAgB,KAAK,aAAa,EACnE,KAAK,QAAQ,oBAAoB,gBAAiB,KAAK,cAAc,CACvE,CAEA,SAAU,CACR,KAAK,gBAAgB,EACrB,KAAK,MAAM,QAAQ,CACrB,CACF,ECnHA,IAAAkB,EAQO,WAEP,SAASC,GAAeC,EAAiB,CACvC,MAAO,GAAGA,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAIA,EAAO,CAAC,EAC5C,CA2BO,IAAMC,GAAN,KAAsB,CAS3B,YAAoBC,EAAkB,CAAlB,aAAAA,EARpBC,EAAA,KAAQ,kBAAkB,IAAI,KAE9BA,EAAA,KAAQ,0BAA0B,IAAI,KAEtCA,EAAA,KAAQ,uBAAuB,IAAI,KAEnCA,EAAA,KAAQ,oBAAoB,IAAI,IAEO,CAEvC,wBAAwB,CAAE,MAAAC,EAAO,QAAAC,CAAQ,EAAwB,CAC/D,MAAO,GAAGD,CAAK,IAAIC,CAAO,EAC5B,CAEA,mBAAmB,CAAE,MAAAD,EAAO,QAAAC,CAAQ,EAAwB,CAC1D,IAAMC,EAAM,KAAK,wBAAwB,CAAE,MAAAF,EAAO,QAAAC,CAAQ,CAAC,EAC3D,GAAI,KAAK,gBAAgB,IAAIC,CAAG,EAC9B,OAAO,KAAK,gBAAgB,IAAIA,CAAG,EAErC,IAAMC,EAAe,IAAI,oBAAkB,CACzC,MAAO,IAAI,QAAMH,CAAK,EAAE,oBAAoB,EAC5C,YAAa,GACb,QAASC,CACX,CAAC,EACD,YAAK,gBAAgB,IAAIC,EAAKC,CAAY,EACnCA,CACT,CAEA,2BAA2B,CAAE,MAAAH,EAAO,QAAAC,CAAQ,EAAgC,CAC1E,IAAMC,EAAM,GAAGF,CAAK,IAAIC,CAAO,GAC/B,GAAI,KAAK,wBAAwB,IAAIC,CAAG,EACtC,OAAO,KAAK,wBAAwB,IAAIA,CAAG,EAE7C,IAAME,EAAW,IAAI,uBAAqB,CACxC,MAAO,IAAI,QAAMJ,CAAK,EAAE,oBAAoB,EAC5C,UAAW,EACX,YAAa,GACb,QAASC,EACT,WAAY,EACd,CAAC,EACD,YAAK,wBAAwB,IAAIC,EAAKE,CAAQ,EACvCA,CACT,CAEA,wBAAwB,CAAE,MAAAJ,EAAO,QAAAC,CAAQ,EAA6B,CACpE,IAAMC,EAAM,GAAGF,CAAK,IAAIC,CAAO,GAC/B,GAAI,KAAK,qBAAqB,IAAIC,CAAG,EACnC,OAAO,KAAK,qBAAqB,IAAIA,CAAG,EAE1C,IAAME,EAAW,IAAI,oBAAkB,CACrC,MAAOJ,EACP,YAAa,GACb,QAASC,EACT,WAAY,EACd,CAAC,EACD,YAAK,qBAAqB,IAAIC,EAAKE,CAAQ,EACpCA,CACT,CAEA,qBAAqB,CACnB,aAAAC,EACA,OAAAC,EACA,SAAAC,EACA,QAAAN,EACA,UAAAO,EACA,IAAAC,EACA,IAAAC,CACF,EAA0B,CACxB,IAAMR,EAAM,GAAGG,EAAa,SAAS,CAAC,IAAIV,GACxCW,CACF,CAAC,IAAIC,CAAQ,IAAIN,CAAO,IAAIN,GAAea,CAAS,CAAC,GACrD,GAAI,KAAK,kBAAkB,IAAIN,CAAG,EAChC,OAAO,KAAK,kBAAkB,IAAIA,CAAG,EAGvC,IAAMS,EAAe;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,MAgCfC,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUjBR,EAAW,IAAI,iBAAe,CAClC,SAAU,CACR,OAAQ,CACN,MAAO,IAAI,QAAMC,EAAa,CAAC,CAAC,EAAE,oBAAoB,CACxD,EACA,cAAe,CACb,MAAO,IAAI,QAAMA,EAAa,CAAC,CAAC,EAAE,oBAAoB,CACxD,EACA,OAAQ,CACN,MAAOC,CACT,EACA,SAAU,CACR,MAAOC,CACT,EACA,QAAS,CACP,MAAON,CACT,EACA,WAAY,CACV,MAAOO,CACT,EACA,KAAM,CACJ,MAAOC,CACT,EACA,KAAM,CACJ,MAAOC,CACT,CACF,EACA,aAAcC,EACd,eAAgBC,EAChB,KAAM,YACR,CAAC,EACD,YAAK,kBAAkB,IAAIV,EAAKE,CAAQ,EACjCA,CACT,CAEA,SAAU,CACR,KAAK,gBAAgB,QAAQ,CAACS,EAAKC,IAAM,CACvCD,EAAI,QAAQ,CACd,CAAC,EACD,KAAK,gBAAgB,MAAM,EAE3B,KAAK,wBAAwB,QAAQ,CAACA,EAAKC,IAAM,CAC/CD,EAAI,QAAQ,CACd,CAAC,EACD,KAAK,wBAAwB,MAAM,EAEnC,KAAK,qBAAqB,QAAQ,CAACA,EAAKC,IAAM,CAC5CD,EAAI,QAAQ,CACd,CAAC,EACD,KAAK,qBAAqB,MAAM,EAEhC,KAAK,kBAAkB,QAAQ,CAACA,EAAKC,IAAM,CACzCD,EAAI,QAAQ,CACd,CAAC,EACD,KAAK,kBAAkB,MAAM,CAC/B,CACF,ECtNA,IAAAE,EAA8B,WAIvB,IAAMC,GAAN,KAAkB,CASvB,YAAoBC,EAAkB,CAAlB,aAAAA,EARpBC,EAAA,KAAQ,aAAa,CACnB,SAAU,IAAI,UACd,KAAM,EACN,OAAQ,IAAI,SACd,GAEAA,EAAA,KAAQ,SAAS,IAwEjBA,EAAA,sBAAiB,IAAM,CAevB,GApFE,KAAK,cAAc,EACnB,KAAK,iBAAiB,CACxB,CAEA,UAAUC,EAAiB,CACzB,KAAK,OAASA,EACVA,EACF,KAAK,cAAc,EAEnB,KAAK,gBAAgB,CAEzB,CAEA,kBAAmB,CACjB,KAAK,WAAa,CAChB,SAAU,KAAK,QAAQ,OAAO,SAAS,MAAM,EAC7C,KAAM,KAAK,QAAQ,OAAO,KAC1B,OAAQ,KAAK,QAAQ,QAAQ,OAAO,MAAM,CAC5C,CACF,CAEA,kBAAmB,CACjB,KAAK,UAAU,EAAK,EACpB,KAAK,QAAQ,OAAO,SAAS,KAAK,KAAK,WAAW,QAAQ,EAC1D,KAAK,QAAQ,OAAO,KAAO,KAAK,WAAW,KAC3C,KAAK,QAAQ,QAAQ,OAAO,KAAK,KAAK,WAAW,MAAM,EACvD,KAAK,QAAQ,QAAQ,OAAO,EAC5B,KAAK,UAAU,EAAI,CACrB,CAEA,eAAgB,CACd,KAAK,QAAQ,iBAAiB,iBAAkB,KAAK,cAAc,CACrE,CAEA,iBAAkB,CAChB,KAAK,QAAQ,oBAAoB,iBAAkB,KAAK,cAAc,CACxE,CAEA,2BAA4B,CAC1B,GAAI,CAAC,KAAK,QAAQ,aAChB,OAAO,KAET,IAAMC,EAAM,IAAI,OAAK,EAAE,cAAc,KAAK,QAAQ,aAAa,WAAW,EACpE,CAAE,OAAAC,EAAQ,UAAW,CAAE,YAAaC,EAAG,aAAcC,CAAE,CAAE,EAAI,KAAK,QAClE,CAAE,IAAAC,EAAK,IAAAC,CAAI,EAAIL,EACfM,EAAKC,EAAgBH,EAAKH,EAAQC,EAAGC,CAAC,EACtCK,EAAKD,EAAgBF,EAAKJ,EAAQC,EAAGC,CAAC,EACtCM,EAAKF,EAAgB,IAAI,UAAQH,EAAI,EAAGC,EAAI,EAAGA,EAAI,CAAC,EAAGJ,EAAQC,EAAGC,CAAC,EACnEO,EAAKH,EAAgB,IAAI,UAAQF,EAAI,EAAGD,EAAI,EAAGA,EAAI,CAAC,EAAGH,EAAQC,EAAGC,CAAC,EACnEQ,EAAO,KAAK,IAAIL,EAAG,EAAGE,EAAG,EAAGC,EAAG,EAAGC,EAAG,CAAC,EACtCE,EAAQ,KAAK,IAAIN,EAAG,EAAGE,EAAG,EAAGC,EAAG,EAAGC,EAAG,CAAC,EACvCG,EAAM,KAAK,IAAIP,EAAG,EAAGE,EAAG,EAAGC,EAAG,EAAGC,EAAG,CAAC,EACrCI,EAAS,KAAK,IAAIR,EAAG,EAAGE,EAAG,EAAGC,EAAG,EAAGC,EAAG,CAAC,EAC9C,MAAO,CAAE,KAAAC,EAAM,MAAAC,EAAO,IAAAC,EAAK,OAAAC,CAAO,CACpC,CAOA,0BAA0B,CAAE,KAAAH,EAAM,MAAAC,EAAO,IAAAC,EAAK,OAAAC,CAAO,EAAiE,CACpH,GAAM,CAAE,MAAAC,EAAO,OAAAC,CAAO,EAAI,KAAK,QAAQ,WACjC,CAACC,EAAIC,EAAIC,EAAIC,CAAE,EAAI,KAAK,QAAQ,OAAO,YAAY,QAGzD,OAAQT,GAAQS,GAAML,EAAQH,GAASM,GAAML,GAAOI,GAAMD,EAASF,GAAUK,CAC/E,CAmBA,SAAU,CACR,KAAK,gBAAgB,CACvB,CACF,EnB/BO,IAAME,GAAN,cAAsB,iBAAiC,CAmC5D,YAAmBC,EAA+BC,EAAgB,CAChE,MAAM,EADW,eAAAD,EAA+B,YAAAC,EAlClDC,EAAA,aAAQC,GAAU,GAElBD,EAAA,gBAAWE,GAAa,GAExBF,EAAA,eAEAA,EAAA,gBAEAA,EAAA,cAASG,GAAU,GAGnBH,EAAA,aAAQ,IAAII,GAEZJ,EAAA,kBAAa,IAAI,EAAAK,OAEjBL,EAAA,qBAEAA,EAAA,kBAEAA,EAAA,oBAEAA,EAAA,KAAQ,cAERA,EAAA,KAAO,mBAEPA,EAAA,oBAEAA,EAAA,kBAAa,CACX,MAAO,EACP,OAAQ,EACR,EAAG,EACH,EAAG,CACL,GA4EAA,EAAA,sBAAiB,IAAM,CACrB,GAAM,CAAE,UAAAF,EAAW,OAAAQ,EAAQ,SAAAC,CAAS,EAAI,KACpC,CAAE,YAAaC,EAAG,aAAcC,CAAE,EAAIX,EAC1CU,EAAI,KAAK,IAAI,EAAGA,CAAC,EACjBC,EAAI,KAAK,IAAI,EAAGA,CAAC,EACjBH,EAAO,KAAO,CAACE,EAAI,EACnBF,EAAO,MAAQE,EAAI,EACnBF,EAAO,IAAMG,EAAI,EACjBH,EAAO,OAAS,CAACG,EAAI,EACrBH,EAAO,uBAAuB,EAC9BC,EAAS,QAAQC,EAAGC,CAAC,EACrB,KAAK,iBAAiB,EACtB,KAAK,cAAc,CAAE,KAAK,SAAU,MAAOD,EAAG,OAAQC,CAAE,CAAC,CAC3D,GAEAT,EAAA,eAAWU,GAAkB,CAC3B,GAAM,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAAI,KAAK,sBAAsBF,EAAE,QAASA,EAAE,OAAO,EAC1EC,EAAS,QACX,KAAK,cAAc,CACjB,KAAM,gBACN,SAAUA,EACV,SAAAC,CACF,CAAC,EAEH,IAAMC,EAAO,KAAK,kBAAkBH,EAAE,QAASA,EAAE,OAAO,EACpDG,EAAK,QACP,KAAK,cAAc,CAAE,KAAM,YAAa,KAAMA,CAAc,CAAC,CAEjE,GA6BAb,EAAA,qBAAiBU,GAAoB,CACnC,GAAM,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAAI,KAAK,sBAAsBF,EAAE,QAASA,EAAE,OAAO,EACxEG,EAAO,KAAK,kBAAkBH,EAAE,QAASA,EAAE,OAAO,EACxD,KAAK,cAAc,CAAE,KAAM,eAAgB,EAAAA,EAAG,SAAAC,EAAU,KAAAE,EAAM,SAAAD,CAAS,CAAC,CAC1E,GAEAZ,EAAA,qBAAiBU,GAAoB,CACnC,GAAM,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAAI,KAAK,sBAAsBF,EAAE,QAASA,EAAE,OAAO,EACxEG,EAAO,KAAK,kBAAkBH,EAAE,QAASA,EAAE,OAAO,EAExD,KAAK,cAAc,CAAE,KAAM,eAAgB,EAAAA,EAAG,SAAAC,EAAU,KAAAE,EAAM,SAAAD,CAAS,CAAC,CAC1E,GAEAZ,EAAA,sBAAiB,IAAM,CACrB,KAAK,cAAc,CAAE,KAAM,eAAgB,CAAC,CAC9C,GAEAA,EAAA,yBAAoB,CAAC,CAAE,SAAAW,EAAU,iBAAAG,CAAiB,IAAwD,CACxG,KAAK,cAAc,CAAE,KAAM,iBAAkB,SAAAH,EAAU,iBAAAG,CAAiB,CAAC,CAC3E,GAEAd,EAAA,qBAAgB,CAAC,CAAE,SAAAW,CAAS,IAA+B,CACzD,KAAK,cAAc,CAAE,KAAM,QAAS,SAAAA,CAAS,CAAC,CAChD,GAxJE,KAAK,UAAU,MAAM,SAAW,WAChC,KAAK,UAAU,MAAM,SAAW,SAChC,KAAK,KAAK,EACV,KAAK,UAAY,IAAII,GAAU,IAAI,EACnC,KAAK,YAAc,IAAIC,GAAY,IAAI,EACvC,KAAK,gBAAkB,IAAIC,GAAgB,IAAI,EAC/C,KAAK,iBAAiB,EACtB,KAAK,cAAc,CACrB,CAEA,kBAAmB,CACjB,GAAM,CAAE,EAAAC,EAAG,EAAAC,EAAG,MAAAC,EAAO,OAAAC,CAAO,EAAI,KAAK,UAAU,sBAAsB,EACrE,KAAK,WAAa,CAChB,MAAOD,GAAS,KAAK,UAAU,YAC/B,OAAQC,GAAU,KAAK,UAAU,aACjC,EAAAH,EACA,EAAAC,CACF,CACF,CAEA,MAAO,CACL,GAAM,CAAE,YAAaX,EAAG,aAAcC,CAAE,EAAI,KAAK,UACjD,KAAK,OAASa,GAAWd,EAAGC,CAAC,EAC7B,KAAK,SAAS,QAAQD,EAAGC,CAAC,EAC1B,KAAK,QAAUc,GAAY,KAAK,OAAQ,KAAK,SAAS,UAAU,EAChE,KAAK,QAAQ,cAAgB,KAAK,OAAO,QAAQ,SACjD,KAAK,UAAU,YAAY,KAAK,SAAS,UAAU,EACnD,KAAK,MAAM,IAAI,KAAK,MAAM,EAC1B,KAAK,WAAa,KAAK,SAAS,EAEhC,KAAK,QAAQ,iBAAiB,SAAU,IAAM,CA3IlD,IAAAC,EA4IM,IAAMC,EAAa,KAAK,QAAQ,cAAc,GAC9CD,EAAA,KAAK,eAAL,MAAAA,EAAmB,iBAAiBC,EAAa,KAAK,OAAO,QAAQ,UACrE,KAAK,cAAc,CAAE,KAAM,eAAgB,IAAK,KAAK,YAAc,GAAK,KAAK,OAAO,IAAK,CAAC,EAC1F,KAAK,cAAc,CAAE,KAAM,gBAAiB,CAAC,CAC/C,CAAC,EACD,KAAK,YAAc,IAAIC,GAAY,IAAI,CACzC,CAKA,SAASC,EAAS,IAAI,UAAQ,EAAG,EAAG,CAAC,EAAGC,EAAS,IAAI,UAAQ,IAAK,EAAG,CAAC,EAAG,CACvE,GAAM,CAAE,YAAAC,EAAa,aAAAC,CAAa,EAAI,KAAK,UACrCC,EAAUC,EAAgBL,EAAQ,KAAK,OAAQE,EAAaC,CAAY,EACxEG,EAAUD,EAAgBJ,EAAQ,KAAK,OAAQC,EAAaC,CAAY,EAC9E,OAAO,KAAK,KAAK,KAAK,KAAMI,EAAAD,EAAQ,EAAIF,EAAQ,EAAM,GAAKG,EAAAD,EAAQ,EAAIF,EAAQ,EAAM,EAAC,CAAC,CACzF,CAEA,wBAAwBI,EAAwB,CAC9C,KAAK,OAAO,SAAS,QAASC,GAAS,CACjCA,aAAgB,iBAClBA,EAAK,MAAQ,IAAI,QAAMD,CAAK,EAEhC,CAAC,CACH,CAEA,YAAYE,EAAc,CACpB,KAAK,eACP,KAAK,MAAM,OAAO,KAAK,YAAY,EACnC,KAAK,aAAa,QAAQ,GAE5B,KAAK,aAAeA,EACpB,KAAK,MAAM,IAAIA,CAAK,EAEpB,IAAMzB,EAAWyB,EAAM,UAAU,EAC7BzB,IACF,KAAK,OAAO,SAAS,EAAIA,EAAS,EAClC,KAAK,OAAO,SAAS,EAAIA,EAAS,EAEtC,CAsCA,sBAAsBM,EAAWC,EAA8D,CAzNjG,IAAAK,EA0NI,IAAMc,EAAQ,IAAI,UAClBA,EAAM,EAAKpB,EAAI,KAAK,WAAW,MAAS,EAAI,EAC5CoB,EAAM,EAAKnB,EAAI,KAAK,WAAW,OAAU,GAAK,EAC9C,IAAMoB,EAAY,IAAI,YACtB,OAAAA,EAAU,cAAcD,EAAO,KAAK,MAAM,IAC9Bd,EAAA,KAAK,eAAL,YAAAA,EAAmB,aAAa,sBAAsBe,KACpD,CAAE,SAAU,CAAC,EAAG,SAAU,IAAK,CAC/C,CAQA,kBAAkBrB,EAAWC,EAAW,CAzO1C,IAAAK,EA2OI,QADaA,EAAA,KAAK,eAAL,YAAAA,EAAmB,SAAS,iBAAiBN,EAAGC,KAC9C,CAAC,CAClB,CA2BA,eAAgB,CACd,OAAO,iBAAiB,SAAU,KAAK,cAAc,EACrD,KAAK,UAAU,iBAAiB,QAAS,KAAK,OAAO,EACrD,KAAK,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACjE,KAAK,UAAU,iBAAiB,cAAe,KAAK,aAAa,EACjE,KAAK,UAAU,iBAAiB,eAAgB,KAAK,cAAc,EACnE,KAAK,UAAU,iBAAiB,SAAU,KAAK,iBAAiB,EAChE,KAAK,YAAY,iBAAiB,eAAgB,KAAK,aAAa,CACtE,CAEA,iBAAkB,CAChB,OAAO,oBAAoB,SAAU,KAAK,cAAc,EACxD,KAAK,UAAU,oBAAoB,QAAS,KAAK,OAAO,EACxD,KAAK,UAAU,oBAAoB,cAAe,KAAK,aAAa,EACpE,KAAK,UAAU,oBAAoB,cAAe,KAAK,aAAa,EACpE,KAAK,UAAU,oBAAoB,eAAgB,KAAK,cAAc,EACtE,KAAK,UAAU,oBAAoB,SAAU,KAAK,iBAAiB,EACnE,KAAK,YAAY,oBAAoB,eAAgB,KAAK,aAAa,CACzE,CAMO,cAAcqB,EAAeC,EAAW,IAAK,CAClD,OAAIA,IAAa,GACf,KAAK,QAAQ,cAAgBD,EAC7B,KAAK,QAAQ,cAAgBA,EAC7B,KAAK,QAAQ,OAAO,EACpB,KAAK,QAAQ,cAAgB,KAAK,OAAO,QAAQ,SACjD,KAAK,QAAQ,cAAgB,EACtB,QAAQ,QAAQ,GAElBE,EACL,IAAI,QAASC,GAAY,CACvB,IAAMC,EAAQ,CAAE,MAAO,KAAK,QAAQ,cAAc,CAAE,EAC9CC,EAAM,CAAE,MAAAL,CAAM,EACdM,EAAQ,IAAI,QAAMF,EAAO,KAAK,UAAU,EAC3C,GAAGC,EAAKJ,CAAQ,EAChB,SAAS,IAAM,CACd,KAAK,QAAQ,cAAgBG,EAAM,MACnC,KAAK,QAAQ,cAAgBA,EAAM,MACnC,KAAK,QAAQ,OAAO,CACtB,CAAC,EACA,WAAW,IAAM,CAChB,KAAK,QAAQ,QAAU,GACvB,KAAK,QAAQ,cAAgB,KAAK,OAAO,QAAQ,SACjD,KAAK,QAAQ,cAAgB,EAC7B,KAAK,WAAW,OAAOE,CAAK,EAC5BH,EAAQ,EAAI,CACd,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,QAAQ,QAAU,EACzB,CAAC,EACA,MAAM,CACX,CAAC,EACDF,EAAW,GACb,CACF,CAMO,kBAAkBM,EAAmBN,EAAW,IAAK,CAC1D,GAAIA,IAAa,EAAG,CAClB,KAAK,QAAQ,gBAAkBM,EAC/B,KAAK,QAAQ,gBAAkBA,EAC/B,KAAK,QAAQ,OAAO,EACpB,KAAK,QAAQ,gBAAkB,IAC/B,KAAK,QAAQ,gBAAkB,IAC/B,MACF,CACA,OAAOL,EACL,IAAI,QAASC,GAAY,CACvB,IAAMC,EAAQ,CAAE,UAAW,KAAK,QAAQ,kBAAkB,CAAE,EACtDC,EAAM,CAAE,UAAAE,CAAU,EAClBD,EAAQ,IAAI,QAAMF,EAAO,KAAK,UAAU,EAC3C,GAAGC,EAAKJ,CAAQ,EAChB,SAAS,IAAM,CACd,KAAK,QAAQ,gBAAkBG,EAAM,UACrC,KAAK,QAAQ,gBAAkBA,EAAM,UACrC,KAAK,QAAQ,OAAO,CACtB,CAAC,EACA,WAAW,IAAM,CAChB,KAAK,QAAQ,QAAU,GACvB,KAAK,QAAQ,gBAAkB,IAC/B,KAAK,QAAQ,gBAAkB,IAC/B,KAAK,WAAW,OAAOE,CAAK,EAC5BH,EAAQ,EAAI,CACd,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,QAAQ,QAAU,EACzB,CAAC,EACA,MAAM,CACX,CAAC,EACDF,EAAW,GACb,CACF,CAEA,iBAAkB,CAChB,OAAO,IAAI,UAAQ,EAAE,WAAW,KAAK,QAAQ,OAAQ,KAAK,OAAO,QAAQ,CAC3E,CAQO,QAAQO,EAAcC,EAAiBR,EAAW,IAAK,CAC5D,IAAMS,EAAe,KAAK,gBAAgB,EACpCN,EAAQ,CACZ,KAAM,KAAK,OAAO,KAClB,OAAQ,KAAK,QAAQ,OAAO,MAAM,CACpC,EACA,GAAI,CAACH,EAAU,CACb,KAAK,OAAO,SAAS,KAAKQ,EAAO,MAAM,EAAE,IAAIC,CAAY,CAAC,EAC1D,KAAK,QAAQ,OAAO,KAAKD,CAAM,EAC/B,KAAK,OAAO,KAAOD,EACnB,KAAK,QAAQ,OAAO,EACpB,MACF,CACA,OAAON,EACL,IAAI,QAASC,GAAY,CACvB,IAAMG,EAAQ,IAAI,QAAMF,EAAO,KAAK,UAAU,EAC3C,GACC,CACE,KAAAI,EACA,OAAQC,CACV,EACAR,CACF,EACC,SAAS,IAAM,CACd,KAAK,OAAO,SAAS,KAAKG,EAAM,OAAO,MAAM,EAAE,IAAIM,CAAY,CAAC,EAChE,KAAK,QAAQ,OAAO,KAAKN,EAAM,MAAM,EACrC,KAAK,OAAO,KAAOA,EAAM,KACzB,KAAK,QAAQ,OAAO,CACtB,CAAC,EACA,WAAW,IAAM,CAChB,KAAK,WAAW,OAAOE,CAAK,EAC5B,KAAK,QAAQ,QAAU,GACvBH,EAAQ,EAAI,CACd,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,QAAQ,QAAU,EACzB,CAAC,EACA,MAAM,CACX,CAAC,EACDF,EAAW,GACb,CACF,CAEA,yBACEU,EACAC,EAA4C,CAAC,GAAI,GAAI,GAAI,EAAE,EAC3DX,EAAW,IACXY,EAAc,GACd,CACA,GAAM,CAACC,EAAKC,EAAOC,EAAQC,CAAI,EAAIL,EAC7B,CAAE,WAAY,CAAE,MAAAhC,EAAO,OAAAC,CAAO,CAAE,EAAI,KACpCmB,EAAQ,KAAK,QAAQ,cAAc,EACrCa,GAEF,KAAK,cAAc,EAAG,CAAC,EAGzB,IAAMK,EAAc,IAAI,OAAK,EAAE,cAAcP,CAAM,EACnD,KAAK,cAAcX,EAAO,CAAC,EAC3B,GAAM,CAAE,IAAAmB,EAAK,IAAAC,CAAI,EAAIF,EAEfG,EAAU,IAAI,UAAQD,EAAI,EAAGD,EAAI,EAAGA,EAAI,CAAC,EACzCG,EAAW,IAAI,UAAQH,EAAI,EAAGA,EAAI,EAAGA,EAAI,CAAC,EAC1CI,EAAc,IAAI,UAAQJ,EAAI,EAAGC,EAAI,EAAGA,EAAI,CAAC,EAC7CI,EAAa,IAAI,UAAQJ,EAAI,EAAGA,EAAI,EAAGA,EAAI,CAAC,EAE5CK,EAAYjC,EAAgB6B,EAAS,KAAK,OAAQzC,EAAOC,CAAM,EAC/D6C,GAAalC,EAAgB8B,EAAU,KAAK,OAAQ1C,EAAOC,CAAM,EACjE8C,GAAenC,EAAgBgC,EAAY,KAAK,OAAQ5C,EAAOC,CAAM,EACrE+C,GAAgBpC,EAAgB+B,EAAa,KAAK,OAAQ3C,EAAOC,CAAM,EAOvEgD,GANgB,IAAI,OAAK,EAAE,cAAc,CAC7C,IAAI,UAAQJ,EAAU,EAAGA,EAAU,CAAC,EACpC,IAAI,UAAQC,GAAW,EAAGA,GAAW,CAAC,EACtC,IAAI,UAAQC,GAAa,EAAGA,GAAa,CAAC,EAC1C,IAAI,UAAQC,GAAc,EAAGA,GAAc,CAAC,CAC9C,CAAC,EAC0B,QAAQ,IAAI,SAAS,EAG1CE,IAAUlD,EAAQmC,EAAQE,GAAQY,GAAK,EACvCE,IAAUlD,EAASiC,EAAME,GAAUa,GAAK,EACxCG,GAAQ,KAAK,IAAIF,GAAQC,EAAM,EAC/BtB,GAAS,IAAI,WAASU,EAAI,EAAIC,EAAI,GAAK,GAAID,EAAI,EAAIC,EAAI,GAAK,GAAID,EAAI,EAAIC,EAAI,GAAK,CAAC,EACxF,MAAO,CAAE,KAAMY,GAAQ,KAAK,OAAO,KAAM,OAAAvB,EAAO,CAClD,CASA,kBACEE,EACAC,EAA4C,CAAC,GAAI,GAAI,GAAI,EAAE,EAC3DX,EAAW,IACXY,EAAc,GACd,CACA,GAAM,CAAE,KAAAL,EAAM,OAAAC,CAAO,EAAI,KAAK,yBAAyBE,EAAQC,EAASX,EAAUY,CAAW,EAC7F,OAAO,KAAK,QAAQL,EAAMC,EAAQR,CAAQ,CAC5C,CAEA,yBAAyBW,EAA4C,CAAC,GAAI,GAAI,GAAI,EAAE,EAAGX,EAAW,IAAKY,EAAc,GAAM,CACzH,GAAI,KAAK,cAAgB,KAAK,aAAa,WACzC,OAAO,KAAK,yBAAyB,KAAK,aAAa,YAAaD,EAASX,EAAUY,CAAW,EAAE,IAExG,CAEA,kBAAkBD,EAA4C,CAAC,GAAI,GAAI,GAAI,EAAE,EAAGX,EAAW,IAAKY,EAAc,GAAM,CAClH,OAAI,KAAK,cAAgB,KAAK,aAAa,WAClC,KAAK,kBAAkB,KAAK,aAAa,YAAaD,EAASX,EAAUY,CAAW,EAEpF,QAAQ,QAAQ,EAAK,CAEhC,CAOO,kBAAkBzC,EAAmB6B,EAAkB,CAC5D,OAAOC,EACL,IAAI,QAASC,GAAY,CACvB,IAAMC,EAAQ,KAAK,OAAO,SAAS,MAAM,EACnCM,EAAe,KAAK,gBAAgB,EACpCJ,EAAQ,IAAI,QAAMF,EAAO,KAAK,UAAU,EAC3C,GAAGhC,EAAU6B,CAAQ,EACrB,SAAS,IAAM,CACd,KAAK,OAAO,SAAS,KAAKG,EAAM,MAAM,EAAE,IAAIM,CAAY,CAAC,EACzD,KAAK,QAAQ,OAAO,KAAKN,EAAM,MAAM,CAAC,EACtC,KAAK,QAAQ,OAAO,CACtB,CAAC,EACA,WAAW,IAAM,CAChB,KAAK,WAAW,OAAOE,CAAK,EAC5B,KAAK,OAAO,SAAS,KAAKF,EAAM,MAAM,EAAE,IAAIM,CAAY,CAAC,EACzD,KAAK,QAAQ,OAAO,KAAKtC,EAAS,MAAM,CAAC,EACzC,KAAK,QAAQ,OAAO,EACpB,KAAK,QAAQ,QAAU,GACvB+B,EAAQ,EAAI,CACd,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,QAAQ,QAAU,EACzB,CAAC,EACA,MAAM,CACX,CAAC,EACDF,EAAW,GACb,CACF,CAEA,QAAS,CACP,KAAK,SAAS,OAAO,KAAK,MAAO,KAAK,MAAM,EAC5C,KAAK,cAAc,CAAE,KAAM,QAAS,CAAC,EACrC,KAAK,MAAM,sBAAsB,IAAM,CACrC,KAAK,OAAO,CACd,CAAC,EACD,KAAK,WAAW,OAAO,CACzB,CAEA,SAAU,CACR,KAAK,YAAY,QAAQ,EACzB,KAAK,UAAU,QAAQ,EACvB,KAAK,YAAY,QAAQ,EACzB,KAAK,WAAW,OAAO,EAAE,QAASL,GAASA,EAAK,KAAK,CAAC,EACtD,KAAK,WAAW,UAAU,EAC1B,KAAK,gBAAgB,EACrB,KAAK,UAAU,YAAY,KAAK,SAAS,UAAU,EACnD,KAAK,MAAM,QAAQ,EACnB,KAAK,SAAS,QAAQ,EACrB,KAAK,OAAO,SAAqB,QAASqC,GACzCA,EAAM,QAAQ,CAChB,EACA,KAAK,gBAAgB,QAAQ,EAC7BC,EAAQ,KAAK,KAAK,CACpB,CACF,EoBriBA,IAAAC,GAAsB,YA+DTC,GAAwB,CACnC,UAAW,GACX,QAAS,CAAC,EACV,QAAS,CACP,aAAc,+BACd,WAAY,8BACd,EACA,eAAgB,GAChB,gBAAiB,GACjB,QAAS,CACP,OAAQ,GACR,SAAU,CACR,EAAG,UACH,GAAK,UACL,EAAG,SACL,CACF,EACA,cAAe,GACf,QAAS,CACP,SAAU,IACV,aAAc,IACd,iBAAkB,CACpB,EACA,eAAgB,CAAC,GAAI,GAAI,GAAI,EAAE,EAC/B,IAAK,CACH,OAAQ,CACN,OAAQ,IACR,KAAM,SACR,EACA,KAAM,CACJ,OAAQ,SACV,CACF,EACA,UAAW,CACT,OAAQ,UACR,KAAM,yBACR,EACA,MAAO,CACL,KAAM,GACR,EACA,OAAQ,CACN,MAAO,UACP,QAAS,EACT,OAAQ,KACR,OAAQ,GACR,YAAa,UACb,cAAe,CACjB,EACA,YAAa,CACX,MAAO,UACP,QAAS,EACT,OAAQ,KACR,OAAQ,GACR,YAAa,OACb,cAAe,CACjB,EACA,QAAS,CACP,YAAa,CACf,EACA,YAAa,CACX,QAAS,CAAC,IAAK,IAAK,IAAK,GAAG,CAC9B,EACA,IAAK,CACH,SAAU,CACZ,CACF,EAEO,SAASC,GAAUC,EAAiC,CACzD,SAAO,UAAM,CAAC,EAAGF,GAAeE,CAAM,CACxC,CnC3GA,IAAAC,GAAyB,YAsBlB,IAAKC,QACVA,IAAA,GAAK,GAAL,KACAA,IAAA,GAAK,KAAL,KAFUA,QAAA,IAKCC,GAAN,cAAmB,kBAA8B,CA6BtD,YACUC,EACRC,EAA0B,CAAC,EAC3B,CACA,MAAM,EAHE,eAAAD,EA7BVE,EAAA,eAEAA,EAAA,KAAO,WAEPA,EAAA,KAAQ,YAAsB,CAAC,GAE/BA,EAAA,KAAQ,gBAA0B,CAAC,GAEnCA,EAAA,KAAQ,WAERA,EAAA,KAAQ,cAERA,EAAA,KAAO,YAAY,GAEnBA,EAAA,KAAQ,iBAAiB,GAEzBA,EAAA,YAAgB,MAEhBA,EAAA,oBAA2C,IAAI,KAE/CA,EAAA,yBAAoB,IAAI,KAExBA,EAAA,0BAAyC,MAEzCA,EAAA,KAAQ,UAAiC,MAEzCA,EAAA,aAAQ,IAAIC,GA4QZD,EAAA,uBAAkB,IAAM,CACtB,GAAM,CACJ,OAAQ,CAAE,KAAAE,CAAK,CACjB,EAAI,KAAK,QACLA,IAAS,KAAK,iBAChB,KAAK,cAAc,CACjB,KAAM,cACN,UAAW,KAAK,UAChB,WAAY,KAAK,QAAQ,OAAO,IAClC,CAAC,EACD,KAAK,eAAiBA,EAE1B,GAmLAF,EAAA,iBAAaG,GAAqB,CAC5B,KAAK,UAAU,SAASA,EAAE,IAAI,IAChC,KAAK,QAAQ,QAAQ,cAAgB,KAAK,OAAO,QAAQ,SACzD,KAAK,QAAQ,QAAQ,cAAgB,GAEnC,KAAK,cAAc,SAASA,EAAE,IAAI,IACpC,KAAK,QAAQ,QAAQ,gBAAkB,IACvC,KAAK,QAAQ,QAAQ,gBAAkB,IAE3C,GAEAH,EAAA,eAAWG,GAAqB,CAC9B,GAAI,KAAK,UAAU,SAASA,EAAE,IAAI,EAAG,CACnC,IAAMC,EAAQ,KAAK,QAAQ,QAAQ,cAAc,EACjD,KAAK,QAAQ,QAAQ,cAAgBA,EACrC,KAAK,QAAQ,QAAQ,cAAgBA,CACvC,CACA,GAAI,KAAK,cAAc,SAASD,EAAE,IAAI,EAAG,CACvC,IAAME,EAAY,KAAK,QAAQ,QAAQ,kBAAkB,EACzD,KAAK,QAAQ,QAAQ,gBAAkBA,EACvC,KAAK,QAAQ,QAAQ,gBAAkBA,CACzC,CACF,GAsKAL,EAAA,cAAS,IAAM,CACb,KAAK,QAAQ,YAAY,UAAU,EAAK,EACxC,KAAK,QAAQ,eAAe,EAC5B,IAAMK,EAAY,KAAK,QAAQ,QAAQ,kBAAkB,EACnDH,EAAO,KAAK,QAAQ,OAAO,KAEjC,KAAK,QAAQ,QAAQ,QAAU,EAC/B,KAAK,QAAQ,QAAQ,QAAU,IAC/B,KAAK,QAAQ,OAAO,KAAO,EAC3B,KAAK,QAAQ,kBAAkB,EAAG,CAAC,EACnC,IAAMI,EAAY,KAAK,QAAQ,yBAAyB,OAAW,CAAC,EACpE,KAAK,UAAYA,GAAa,EAE9B,KAAK,QAAQ,QAAQ,QAAU,KAAK,UACpC,KAAK,QAAQ,QAAQ,QAAU,KAAK,UAAY,GAChD,KAAK,QAAQ,OAAO,KAAOJ,EAC3B,KAAK,QAAQ,QAAQ,iBAAiB,SAAU,KAAK,eAAe,EACpE,KAAK,QAAQ,kBAAkBG,EAAW,CAAC,EAC3C,KAAK,QAAQ,YAAY,UAAU,EAAI,CACzC,GAnpBE,KAAK,OAASE,GAAUR,CAAM,EAC9B,KAAK,QAAU,IAAIS,GAAQV,EAAW,KAAK,MAAM,EACjD,KAAK,cAAc,EACnB,KAAK,QAAQ,OAAO,CACtB,CAEc,aAAaW,EAQW,QAAAC,EAAA,yBARX,CACzB,MAAAC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,GAAAC,EACA,mBAAAC,CACF,EAAsC,CACpC,GAAM,CACJ,UAAAC,EACA,QAAS,CAAE,aAAAC,CAAa,EACxB,QAAAC,CACF,EAAI,KAAK,OACHC,EAAM,GAAGH,CAAS,GAAGC,CAAY,UAAUR,CAAK,YAAYC,CAAO,UAAUC,CAAK,aAAaC,CAAQ,UAAUC,CAAK,OAAOC,CAAE,uBAAuBC,CAAkB,GAQ9K,OAPa,MAAM,MAAMI,EAAKD,CAAO,EAClC,KAAME,GAAQA,EAAI,KAAK,CAAC,EACxB,KAAMA,GAAQA,EAAI,IAAI,EACtB,KAAMA,KACJA,GAAO,CAAC,GAAG,IAAKC,GAAUA,EAAK,KAAO,KAAK,MAAMA,EAAK,IAAI,CAAE,EACrDD,GAAO,CAAC,EACjB,CAEL,GAEA,eAAe,CACb,MAAAX,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,EAA2D,CAEzD,MADY,GAAGH,CAAK,IAAIC,CAAO,IAAIC,CAAK,IAAIC,CAAQ,EAEtD,CAEc,mBAAmBL,EAQD,QAAAC,EAAA,yBARC,CAC/B,MAAAC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,EAGgC,CAC9B,IAAMU,EAAM,KAAK,eAAe,CAAE,MAAAb,EAAO,QAAAC,EAAS,MAAAC,EAAO,SAAAC,CAAS,CAAC,EACnE,GAAI,KAAK,kBAAkB,IAAIU,CAAG,EAChC,OAAO,KAAK,kBAAkB,IAAIA,CAAG,GAAK,KAE5C,GAAM,CACJ,UAAAN,EACA,QAAS,CAAE,WAAAO,CAAW,EACtB,QAAAL,CACF,EAAI,KAAK,OACHC,EAAM,GAAGH,CAAS,GAAGO,CAAU,UAAUd,CAAK,YAAYC,CAAO,UAAUC,CAAK,aAAaC,CAAQ,GACrGY,EAAO,MAAM,MAAML,EAAKD,CAAO,EAClC,KAAME,GAAQA,EAAI,KAAK,CAAC,EACxB,KAAMA,GAAQA,EAAI,IAAI,EACtB,KAAMA,GAA8C,CACnD,IAAMI,GAAQJ,GAAO,CAAC,GAAG,CAAC,EAC1B,OAAII,IACFA,EAAK,KAAO,KAAK,MAAMA,EAAK,IAAI,GAE3BA,CACT,CAAC,EACH,YAAK,kBAAkB,IAAIF,EAAKE,CAAI,EAC7BA,CACT,GAEA,YAAY,CACV,MAAAf,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,GAAAC,EACA,mBAAAC,CACF,EAAc,CAEZ,MADiB,GAAGN,CAAK,IAAIC,CAAO,IAAIC,CAAK,IAAIC,CAAQ,IAAIC,CAAK,IAAIC,CAAE,IAAIC,CAAkB,EAEhG,CAEM,KAAKR,EAQG,QAAAC,EAAA,yBARH,CACT,MAAAC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,GAAAC,EACA,mBAAAC,CACF,EAAc,CACZ,IAAMU,EAAW,KAAK,YAAY,CAChC,MAAAhB,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,GAAAC,EACA,mBAAAC,CACF,CAAC,EACD,GAAI,KAAK,aAAa,IAAIU,CAAQ,EAChC,OAEF,GAAM,CAACD,EAAME,CAAW,EAAI,MAAM,QAAQ,IAAI,CAC5C,KAAK,aAAa,CAChB,MAAAjB,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,GAAAC,EACA,mBAAAC,CACF,CAAC,EACD,KAAK,mBAAmB,CAAE,MAAAN,EAAO,QAAAC,EAAS,MAAAC,EAAO,SAAAC,CAAS,CAAC,CAC7D,CAAC,EACD,GAAIc,EAAa,CACf,IAAMC,EAASC,GACZF,EAAY,KAAK,SAA6B,IAAI,CAAC,CACtD,EACAF,EAAK,QAASH,GAAS,CAIrB,GAHAA,EAAK,KAAK,SAAS,OAAS,KAAK,MAC/B,KAAK,UAAUA,EAAK,KAAK,SAAS,GAAG,CACvC,EACIA,EAAK,KAAK,SAAS,OAAS,UAC9BA,EAAK,KAAK,SAAS,OAAO,IAAKQ,GAAQ,CACjC,MAAM,QAAQA,CAAG,GACnBA,EAAI,QAASC,GAAU,CACrBA,EAAM,CAAC,GAAKH,EAAO,CAAC,EACpBG,EAAM,CAAC,GAAKH,EAAO,CAAC,CACtB,CAAC,CAEL,CAAC,MACI,CAEL,GAAM,CAACI,EAAGC,CAAC,EAAIX,EAAK,KAAK,SAAS,IAClCA,EAAK,KAAK,SAAS,OAAS,CAACU,EAAIJ,EAAO,CAAC,EAAGK,EAAIL,EAAO,CAAC,CAAC,CAC3D,CACAN,EAAK,KAAK,0BAA4B,EACxC,CAAC,CACH,CACA,GAAM,CAAE,OAAAY,EAAQ,YAAAC,EAAa,QAAAC,CAAQ,EAAI,KAAK,OAC9C,QAASC,EAAI,EAAGA,EAAIZ,EAAK,OAAQY,IAAK,CACpC,IAAMf,EAAOG,EAAKY,CAAC,EACnBf,EAAK,KAAK,YAAc,MAAWe,EAAI,GACnCf,EAAK,KAAK,QAAU,UACtBA,EAAK,KAAK,UAAYY,EAAO,MAC7BZ,EAAK,KAAK,YAAcY,EAAO,QAC/BZ,EAAK,KAAK,OAASY,EAAO,OAC1BZ,EAAK,KAAK,OAASY,EAAO,OAC1BZ,EAAK,KAAK,YAAcY,EAAO,YAC/BZ,EAAK,KAAK,cAAgBY,EAAO,eACxBZ,EAAK,KAAK,SAAS,MAC5BA,EAAK,KAAK,OAASa,EAAY,OAC/Bb,EAAK,KAAK,UAAYa,EAAY,MAClCb,EAAK,KAAK,YAAca,EAAY,QACpCb,EAAK,KAAK,OAASa,EAAY,OAC/Bb,EAAK,KAAK,YAAca,EAAY,YACpCb,EAAK,KAAK,cAAgBa,EAAY,gBAEtCb,EAAK,KAAK,YAAcc,EAAQ,YAC5B,KAAK,OAAO,kBACdd,EAAK,KAAK,OAASa,EAAY,OAC/Bb,EAAK,KAAK,UAAYa,EAAY,MAClCb,EAAK,KAAK,OAASa,EAAY,OAC/Bb,EAAK,KAAK,YAAca,EAAY,YACpCb,EAAK,KAAK,cAAgBa,EAAY,eAG5C,CACA,OAAK,KAAK,OAAO,eACf,KAAK,aAAa,MAAM,EAE1B,KAAK,aAAa,IAAIT,EAAUD,CAAI,EAC7BA,CACT,GAEQ,YAAYA,EAAqB,CACvC,IAAMa,EAAW,IAAIC,GAAM,KAAK,OAAO,EACvC,GAAI,CAACd,EAAK,OACR,MAAO,CAAE,SAAAa,EAAU,SAAU,CAAC,CAAE,EAElC,IAAME,EAAqB,IAAI,IACzBC,EAAW,CAAC,EAClB,QAAWnB,KAAQG,EACjB,GAAIH,EAAK,KAAK,QAAU,SACtBgB,EAAS,aAAahB,EAAK,IAAI,MAC1B,CACL,IAAMc,EAAUE,EAAS,WAAWhB,EAAK,IAAI,EAC7Cc,EAAQ,SAAS,KAAOd,EACxBkB,EAAmB,IAAIlB,EAAK,UAAWc,CAAO,EAC9CK,EAAS,KAAKL,CAAO,CACvB,CAGF,OAAAE,EAAS,SAAS,mBAAqBE,EAChC,CAAE,SAAAF,EAAU,SAAAG,CAAS,CAC9B,CAEA,YAAY,CACV,MAAA/B,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,GAAAC,EACA,mBAAAC,CACF,EAAc,CACZ,IAAMU,EAAW,KAAK,YAAY,CAChC,MAAAhB,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,GAAAC,EACA,mBAAAC,CACF,CAAC,EACK0B,EAAe,KAAK,aAAa,IAAIhB,CAAQ,EAEnD,GADA,KAAK,QAAQ,QAAQ,oBAAoB,SAAU,KAAK,eAAe,EACnEgB,EAAc,CAChB,IAAMC,EAAc,KAAK,eAAe,CACtC,MAAAjC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,CAAC,EACD,KAAK,mBAAqB,KAAK,kBAAkB,IAAI8B,CAAW,GAAK,KACrE,IAAMC,EAAe,KAAK,YAAYF,CAAY,EAC9CE,GACF,KAAK,QAAQ,YAAY,UAAU,EAAK,EACxC,KAAK,QAAQ,YAAYA,EAAa,QAAQ,EAE9C,KAAK,QAAQ,QAAQ,QAAU,EAC/B,KAAK,QAAQ,QAAQ,QAAU,IAC/B,KAAK,QAAQ,OAAO,KAAO,EAC3B,KAAK,QAAQ,kBAAkB,KAAK,OAAO,QAAQ,iBAAkB,CAAC,EACtE,KAAK,QAAQ,kBAAkB,OAAW,CAAC,EAC3C,KAAK,UAAY,KAAK,QAAQ,OAAO,KAErC,KAAK,QAAQ,QAAQ,QAAU,KAAK,UACpC,KAAK,QAAQ,QAAQ,QAAU,KAAK,UAAY,GAChD,KAAK,QAAQ,QAAQ,iBAAiB,SAAU,KAAK,eAAe,EAChE,KAAK,OAAS,MAChB,KAAK,QAAQ,kBAAkB,KAAK,OAAO,eAAgB,EAAG,EAAK,EAErE,KAAK,gBAAgB,EACrB,KAAK,QAAQ,YAAY,UAAU,EAAI,GAEvC,QAAQ,KAAK,wBAA0B9B,EAAQ,wCAAU,CAE7D,MACE,QAAQ,KACN,gIACF,CAEJ,CAiBA,SAASsB,EAAkBS,EAAuB,CA1WpD,IAAAC,EA4WI,GAAIV,EAAQ,QAAQ,SAAS,OAAS,UAAW,CAE/C,IAAMW,GAAQD,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,SAASE,GAAAC,EAAA,GAC7CJ,GAD6C,CAEhD,SAAUT,EAAQ,YAAY,EAAE,KAAK,EAAG,EACxC,GAAIA,EAAQ,QAAQ,EACtB,IACA,GAAIW,EAAO,CACT,GAAM,CACJ,cAAAG,EAAgB,EAChB,eAAAC,EAAiB,EACjB,eAAAC,EAAiB,CACnB,EAAIhB,EAAQ,QAAQ,SACpBW,EAAM,SAAU,IAAMG,GAAiB,IAAO,KAAK,EAAE,EACrDH,EAAM,MAAM,IAAII,EAAgBC,EAAgB,CAAC,CACnD,CACF,CACF,CAEA,WAAW3B,EAAwB,CA/XrC,IAAAqB,EAgYI,OAAOA,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,WAAWrB,EAC/C,CAEA,uBAA8C,CAnYhD,IAAAqB,EAoYI,QAAOA,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,SAAS,qBAAsB,IAAI,GACvE,CAMA,qBAAiC,CA3YnC,IAAAA,EA4YI,QACGA,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,aAAa,SAAS,OAC/CxB,GAASA,aAAgB+B,KACT,CAAC,CAExB,CAEA,iBAAiBjB,EAAkBS,EAA0B,CAC3D,GAAI,KAAK,QAAQ,aAAc,CACzBA,EAAQ,KAAO,SACjBA,EAAQ,GAAKT,EAAQ,QAAQ,IAE/B,IAAMkB,EAAWlB,EAAQ,UAAU,EAKnC,OAJY,KAAK,QAAQ,aAAa,OAAOY,GAAAC,EAAA,GACxCJ,GADwC,CAE3C,SAAUG,GAAAC,EAAA,GAAKK,GAAL,CAAe,EAAGA,EAAS,EAAIlB,EAAQ,QAAQ,OAAS,CAAE,EACtE,EAAC,CAEH,CACA,OAAO,IACT,CAEA,eAAgB,CAlalB,IAAAU,GAmaIA,EAAA,KAAK,QAAQ,eAAb,MAAAA,EAA2B,eAC7B,CAOA,yBACES,EACAC,EAAmB,IACnB,CACA,IAAMF,EAAWC,EAAI,YAAY,EACjC,OAAO,KAAK,QAAQ,kBAAkBD,EAAUE,CAAQ,CAC1D,CAOM,0BACJD,EACAC,EAAmB,IACnB,QAAA/C,EAAA,sBACA,OAAOgD,EAAe,IAAI,QAASC,GAAY,CAC7C,IAAMC,EAAS,KAAK,QAAQ,QAAQ,OAAO,MAAM,EAC3CL,EAAWC,EAAI,YAAY,EACjC,KAAK,MAAM,sBAAsB,IAAM,CACrC,GAAM,CACJ,WAAY,CAAE,MAAAK,EAAO,OAAAC,CAAO,EAC5B,OAAAC,CACF,EAAI,KAAK,QACT,QAAQ,IAAI,QAASF,EAAOC,CAAM,EAElC,IAAME,EADSC,EAAgBV,EAAUQ,EAAQF,EAAOC,CAAM,EACvC,EAAID,EAAQ,EAC7BK,EAAK,IAAI,WACfA,EAAG,oBAAoB,KAAK,QAAQ,OAAO,OAAQ,CAAC,EACpDA,EAAG,UAAU,EACbA,EAAG,eAAeF,EAAU,KAAK,QAAQ,OAAO,IAAI,EACpDJ,EAAO,IAAIM,CAAE,EACb,KAAK,QAAQ,kBAAkBN,EAAQH,CAAQ,EAAE,KAAKE,CAAO,CAC/D,CAAC,CACH,CAAC,EAAGF,EAAW,GAAG,CAEpB,GAKA,2BAA2BD,EAAe,CACxC,IAAMW,EAASX,EAAI,SAAS,MAAM,EAC5B,CAAE,YAAAY,EAAa,aAAAC,CAAa,EAAI,KAAK,UAC3C,OAAOJ,EACLE,EACA,KAAK,QAAQ,OACbC,EACAC,CACF,CACF,CAOA,cAAcC,EAAeb,EAAW,IAAK,CAE3C,OADA,KAAK,KAAOa,EACRA,IAAS,KACJ,KAAK,QAAQ,cAAc,EAAiBb,CAAQ,EAEpD,KAAK,QAAQ,cAAc,IAAiBA,CAAQ,CAE/D,CAEM,UAAUA,EAAW,IAAK,QAAA/C,EAAA,sBAC9B,IAAM6D,EAAOd,EAAW,EACxB,MAAM,KAAK,QAAQ,kBACjB,KAAK,OAAO,QAAQ,iBACpBc,CACF,EACA,MAAM,KAAK,cAAc,KAAK,KAAMA,CAAI,EACxC,MAAM,KAAK,QAAQ,kBACjB,KAAK,OAAO,eACZA,EACA,EACF,CACF,GAQA,UAAUrE,EAAO,GAAKuD,EAAW,IAAK,CACpC,IAAMe,EAAa,KAAK,QAAQ,OAAO,KACvC,OAAO,KAAK,QAAQ,QAClBA,EAAatE,EACb,KAAK,QAAQ,QAAQ,OACrBuD,CACF,CACF,CAQA,WAAWvD,EAAO,GAAKuD,EAAW,IAAK,CACrC,IAAMe,EAAa,KAAK,QAAQ,OAAO,KACvC,OAAO,KAAK,QAAQ,QAClBA,EAAatE,EACb,KAAK,QAAQ,QAAQ,OACrBuD,CACF,CACF,CA0BA,eAAgB,CAGd,GAFA,OAAO,iBAAiB,UAAW,KAAK,SAAS,EACjD,OAAO,iBAAiB,QAAS,KAAK,OAAO,EACzC,KAAK,OAAO,eAAgB,CAC9B,IAAMgB,EAAU,IAAI,kBAAe,aAAS,KAAK,OAAQ,CAAC,CAAC,EAC3DA,EAAQ,QAAQ,KAAK,SAAS,EAC9B,KAAK,QAAUA,CACjB,CACF,CAEA,iBAAkB,CA5jBpB,IAAA1B,EA6jBI,OAAO,oBAAoB,UAAW,KAAK,SAAS,EACpD,OAAO,oBAAoB,QAAS,KAAK,OAAO,GAChDA,EAAA,KAAK,UAAL,MAAAA,EAAc,aACd,KAAK,QAAU,IACjB,CAMA,2BAA2B2B,EAAgB,CACzC,KAAK,UAAYA,CACnB,CAEA,+BAA+BA,EAAgB,CAC7C,KAAK,cAAgBA,CACvB,CAEA,UAAUC,EAAS,GAAK,CACtB,IAAMtE,EAAY,KAAK,QAAQ,QAAQ,kBAAkB,EACzD,KAAK,QAAQ,QAAQ,gBAAkBA,EAAYsE,EACnD,KAAK,QAAQ,QAAQ,gBAAkBtE,EAAYsE,EACnD,KAAK,QAAQ,QAAQ,OAAO,CAC9B,CAMM,iBAAkB,QAAAjE,EAAA,sBACtB,YAAK,eAAe,EACb,IAAI,QAAQ,CAACiD,EAASiB,IAAW,CACtC,KAAK,cAAc,KAAM,CAAC,EAC1B,KAAK,QAAQ,QAAQ,aAAe,GACpC,KAAK,QAAU,IAAIC,GAAQ,KAAK,OAAO,EACvC,IAAMC,EAAU,KAAK,QAAQ,QAAQ,KAAK,KAAK,OAAO,EACtD,KAAK,QAAQ,QAAU,UAAY,CACjCA,EAAQ,EACRF,EAAO,QAAQ,CACjB,EACA,KAAK,QAAQ,iBAAiB,WAAY,CAAC,CAAE,SAAAG,CAAS,IAAM,CAC1DpB,EAAQoB,CAAQ,CAClB,CAAC,CACH,CAAC,CACH,GAKA,gBAAiB,CACX,KAAK,UACP,KAAK,QAAQ,QAAQ,EACrB,KAAK,QAAU,OACf,KAAK,QAAQ,QAAQ,aAAe,GAExC,CAKA,aAAc,CACZ,YAAK,WAAW,EACT,IAAI,QAAQ,CAACpB,EAASiB,IAAW,CACtC,KAAK,cAAc,KAAM,CAAC,EAC1B,KAAK,QAAQ,QAAQ,aAAe,GACpC,KAAK,WAAa,IAAII,GAAW,KAAK,OAAO,EAC7C,IAAMF,EAAU,KAAK,WAAW,QAAQ,KAAK,KAAK,UAAU,EAC5D,KAAK,WAAW,QAAU,UAAY,CACpCA,EAAQ,EACRF,EAAO,QAAQ,CACjB,EACA,KAAK,WAAW,iBAAiB,OAAQ,CAAC,CAAE,KAAAK,CAAK,IAAM,CACrDtB,EAAQsB,CAAI,CACd,CAAC,CACH,CAAC,CACH,CAKA,YAAa,CACP,KAAK,aACP,KAAK,WAAW,QAAQ,EACxB,KAAK,WAAa,OAClB,KAAK,QAAQ,QAAQ,aAAe,GAExC,CAKA,mBAAmBC,EAAgB,CAxpBrC,IAAAnC,EAypBI,QACEA,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,aAAa,mBAAmBmC,KAAW,IAE1E,CAEA,cAAc7C,EAAkB,CA9pBlC,IAAAU,GA+pBIA,EAAA,KAAK,QAAQ,eAAb,MAAAA,EAA2B,aAAa,cAAcV,EACxD,CAEA,uBAAuBS,EAAyB,CAlqBlD,IAAAC,EAmqBI,GAAI,CAACD,EAAQ,2BACP,KAAK,mBAAoB,CAC3B,IAAMjB,EAASC,GACZ,KAAK,mBAAmB,KAAK,SAA6B,IAAI,CAAC,CAClE,EACA,GAAIgB,EAAQ,SAAS,OAAS,UAC5BA,EAAQ,SAAS,OAAS,KAAK,MAC7B,KAAK,UAAUA,EAAQ,SAAS,GAAG,CACrC,EACAA,EAAQ,SAAS,OAAO,IAAKf,GAAQ,CAC/B,MAAM,QAAQA,CAAG,GACnBA,EAAI,QAASC,GAAU,CACrBA,EAAM,CAAC,GAAKH,EAAO,CAAC,EACpBG,EAAM,CAAC,GAAKH,EAAO,CAAC,CACtB,CAAC,CAEL,CAAC,MACI,CAEL,GAAM,CAACI,EAAGC,CAAC,EAAIY,EAAQ,SAAS,IAChCA,EAAQ,SAAS,OAAS,CAACb,EAAIJ,EAAO,CAAC,EAAGK,EAAIL,EAAO,CAAC,CAAC,CACzD,CACF,CAEF,OAAOkB,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,aAAa,cAAcD,EAC/D,CAEA,cAAcqC,EAAY,CA9rB5B,IAAApC,EA+rBI,OAAOA,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,SAAS,cAAcoC,EAC3D,CAEA,WAAWA,EAAY,CAlsBzB,IAAApC,EAmsBI,OAAOA,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,SAAS,WAAWoC,EACxD,CAEA,SAAU,CAtsBZ,IAAApC,EAusBI,SAAQA,EAAA,KAAK,QAAQ,eAAb,YAAAA,EAA2B,SAAS,OAAQ,CAAC,GAAG,OACrDxB,GAAS,CAACA,EAAK,QAAQ,QAC1B,CACF,CAEA,UAAW,CACL,KAAK,QAAQ,cACf,KAAK,QAAQ,aAAa,SAAS,MAAM,CAE7C,CAEA,oBAAoBc,EAAkB,CACpC,KAAK,QAAQ,UAAU,OAAOA,CAAO,CACvC,CAuBA,SAAU,CACR,KAAK,MAAM,QAAQ,EACnB,KAAK,QAAQ,QAAQ,EACrB,KAAK,aAAa,MAAM,EACxB,KAAK,kBAAkB,MAAM,EAC7B+C,GAAiB,EACjBC,GAAY,EACZC,GAAc,EACd,KAAK,gBAAgB,CACvB,CACF",
6
+ "names": ["import_three", "Timer", "__publicField", "fn", "timer", "wait", "import_three", "import_MapControls", "initScene", "scene", "initRenderer", "renderer", "initCamera", "width", "height", "camera", "initLight", "lights", "ambientLight", "initControl", "domElement", "control", "initShape", "path", "holePath", "shape", "item", "cur", "hole", "initDirectionalLight", "color", "intensity", "directionalLight", "dispose", "o", "recursive", "_a", "child", "m", "mat", "hasChinese", "str", "import_three", "textTextureMap", "initCanvas", "canvas", "ctx", "createCanvas", "c", "t", "getTextureByText", "text", "y", "hasChinese", "width", "imageData", "texture", "clearTextTexture", "clearCanvas", "import_three", "import_turf", "vector3ToDevice", "vector", "camera", "w", "h", "_vector", "_w", "_h", "x", "y", "getCenter", "coordinates", "features", "item", "isContain", "point", "start", "end", "getLongestSideDir", "cds", "maxDistance", "dir", "i", "point_0", "point_1", "distance", "proxyOptions", "target", "master", "p", "receiver", "newValue", "oldValue", "res", "timeoutPromise", "promise", "timeout", "resolve", "reject", "createSvgElement", "tag", "createSvg", "w", "h", "svg", "createCircle", "radius", "fill", "circle", "createLine", "stroke", "line", "createRect", "rect", "setCirclePosition", "x", "y", "setLineStartEnd", "start", "end", "setRectPosition", "sleepOnePromise", "sleepOneRf", "resolve", "strToNumber", "str", "addAlphaToHexColor", "hexColor", "alpha", "r", "g", "b", "newR", "newG", "newB", "darkenColor", "factor", "numbers", "import_GLTFLoader", "createLoader", "loader", "modelMap", "loadModel", "url", "gltf", "p", "resolve", "reject", "disposeLoader", "isMac", "isControl", "key", "isMac", "import_three", "import_tween", "import_three", "import_three", "defaultOptions", "Graphic", "context", "options", "__publicField", "proxyOptions", "__spreadValues", "x", "y", "value", "_a", "center", "box", "size", "shape", "initShape", "material", "material1", "darkenColor", "pos", "dir", "minOrigin", "raycaster", "min", "maxOrigin", "raycaster2", "max", "_max", "maxValue", "__max", "_min", "dir2", "___max", "__min", "lineMaterial", "points", "height", "coords", "j", "curCds", "i", "cur", "next", "lineGeometry", "line", "intersects", "position", "distance", "import_three", "Shadow", "__publicField", "directionalLight", "initDirectionalLight", "size", "x", "y", "color", "position", "width", "height", "geometry", "material", "mesh", "target", "opacity", "dispose", "import_three", "import_three", "import_lodash", "defaultOptions", "Overlay", "context", "options", "__publicField", "__spreadValues", "observer", "max", "min", "centerX", "centerY", "width", "height", "positions", "obj", "key", "x", "y", "vector3ToDevice", "clientWidth", "clientHeight", "halfWidth", "halfHeight", "placements", "i", "placement", "position", "div", "element", "visible", "display", "opacity", "clientX", "clientY", "force", "vector", "_a", "_b", "defaultOptions", "Poi", "context", "options", "_a", "_b", "_c", "__publicField", "proxyOptions", "__spreadValues", "Overlay", "x", "y", "height", "value", "__async", "sleepOnePromise", "width", "div", "icon", "text", "textDiv", "f", "item", "key", "img", "visible", "boxScale", "w", "h", "box", "import_three", "import_three", "import_three", "Layer", "context", "dispose", "GraphicLayer", "Layer", "context", "__publicField", "options", "graphic", "Graphic", "id", "raycaster", "initData", "data", "res", "item", "pos", "distance", "import_lodash", "PoiLayer", "Layer", "context", "__publicField", "Timer", "force", "item", "options", "poi", "Poi", "index", "id", "i", "x", "y", "range", "left", "right", "top", "bottom", "valid", "box", "import_three", "import_heatmap", "import_turf", "HeatmapElement", "context", "__publicField", "data", "width", "height", "leftTop", "center", "__spreadValues", "geometry", "texture", "material", "x", "y", "matrix", "item", "vector", "features", "box", "getCenter", "import_three", "Model", "context", "options", "__publicField", "__async", "object", "loadModel", "_a", "poi", "dispose", "Floor", "context", "__publicField", "Shadow", "GraphicLayer", "PoiLayer", "options", "ground", "Graphic", "grounds", "model", "Model", "box", "center", "size", "graphicOptions", "poiOptions", "data", "HeatmapElement", "opacity", "visible", "_a", "import_three", "BaseSvg", "context", "__publicField", "width", "height", "createSvg", "enable", "e", "camera", "renderer", "x", "y", "clientWidth", "clientHeight", "nx", "ny", "vector", "container", "vector3ToDevice", "SvgLine", "BaseSvg", "context", "__publicField", "point1", "setCirclePosition", "setLineStartEnd", "point2", "e", "point", "x", "y", "circle", "line", "createCircle", "createLine", "enable", "vector", "distance", "x1", "y1", "x2", "y2", "__pow", "SvgPolygon", "BaseSvg", "context", "__publicField", "point", "index", "devicePoint", "setCirclePosition", "setLineStartEnd", "e", "x", "y", "fill", "radius", "stroke", "circle", "createCircle", "line", "createLine", "enable", "cx", "cy", "__pow", "vector", "area", "cds", "item", "numPoints", "i", "j", "import_three", "SelectBox", "BaseSvg", "context", "__publicField", "box", "camera", "w", "h", "min", "max", "leftBottom", "vector3ToDevice", "rightTop", "setRectPosition", "left", "bottom", "right", "top", "halfWidth", "corners", "i", "centerHalfWidth", "centerX", "centerY", "centers", "line", "createRect", "enable", "graphic", "import_three", "BoxSelection", "BaseSvg", "context", "__publicField", "e", "point", "startPoint", "endPoint", "__spreadValues", "leftTop", "width", "height", "setRectPosition", "fill", "stroke", "createRect", "enable", "camera", "w", "h", "startDevice", "vector3ToDevice", "endDevice", "rightBottom", "list", "_a", "item", "Graphic", "object", "position", "position2d", "isContain", "box", "min", "max", "minDevice", "maxDevice", "Selection", "context", "__publicField", "e", "offsetX", "offsetY", "x", "y", "__pow", "graphics", "graphicIdSet", "item", "_a", "graphic", "isMac", "isControl", "list", "BoxSelection", "import_three", "HoverHelper", "context", "__publicField", "Timer", "graphics", "pois", "e", "poiGraphics", "item", "_a", "graphic", "time", "allGraphics", "resGraphic", "distance", "poi", "x", "y", "curDistance", "__pow", "timer", "size", "import_three", "vectorToString", "vector", "MaterialFactory", "context", "__publicField", "color", "opacity", "key", "lineMaterial", "material", "gradualColor", "center", "maxValue", "direction", "max", "min", "vertexShader", "fragmentShader", "val", "_", "import_three", "CameraBound", "context", "__publicField", "enable", "box", "camera", "w", "h", "min", "max", "lb", "vector3ToDevice", "rt", "lt", "rb", "left", "right", "top", "bottom", "width", "height", "pt", "pr", "pb", "pl", "Context", "container", "config", "__publicField", "initScene", "initRenderer", "initLight", "Timer", "TweenGroup", "camera", "renderer", "w", "h", "e", "graphics", "position", "pois", "isMultipleSelect", "Selection", "HoverHelper", "MaterialFactory", "x", "y", "width", "height", "initCamera", "initControl", "_a", "polarAngle", "CameraBound", "point1", "point2", "clientWidth", "clientHeight", "device1", "vector3ToDevice", "device2", "__pow", "color", "item", "floor", "point", "raycaster", "polar", "duration", "timeoutPromise", "resolve", "start", "end", "tween", "azimuthal", "zoom", "center", "lookAtVector", "object", "padding", "force2DView", "top", "right", "bottom", "left", "boundingBox", "max", "min", "leftTop", "rightTop", "rightBottom", "leftBottom", "leftTop2d", "rightTop2d", "leftBottom2d", "rightBottom2d", "size", "xScale", "yScale", "scale", "light", "dispose", "import_lodash", "defaultConfig", "getConfig", "config", "import_lodash", "MapTypePolar", "BMap", "container", "config", "__publicField", "Timer", "zoom", "e", "polar", "azimuthal", "basicZoom", "getConfig", "Context", "_0", "__async", "brand", "project", "phase", "building", "floor", "ts", "resource_type_list", "apiDomain", "floorGraphic", "apiInfo", "url", "res", "item", "key", "floorRange", "data", "floorKey", "buildGround", "center", "getCenter", "cds", "coord", "x", "y", "ground", "markGraphic", "graphic", "i", "curFloor", "Floor", "legacyToGraphicMap", "graphics", "curFloorData", "buildingKey", "createdFloor", "options", "_a", "model", "__spreadProps", "__spreadValues", "facilityAngle", "facilityXScale", "facilityYScale", "Graphic", "position", "ele", "duration", "timeoutPromise", "resolve", "target", "width", "height", "camera", "offsetX", "vector3ToDevice", "v3", "vector", "clientWidth", "clientHeight", "type", "time", "cameraZoom", "observe", "keys", "radius", "reject", "SvgLine", "dispose", "distance", "SvgPolygon", "area", "nodeId", "id", "clearTextTexture", "clearCanvas", "disposeLoader"]
7
7
  }