@wenle_2523097/agri-map 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"marker.esm.js","sources":["../../node_modules/kdbush/index.js","../../node_modules/supercluster/index.js","../../src/hooks/useMapLifecycle.ts","../../src/context/MapContext.tsx","../../src/context/ConfigContext.tsx","../../src/utils/errorHandling.ts","../../src/components/Notification/index.tsx","../../src/components/shared/BaseEditToolbar.tsx","../../node_modules/dompurify/dist/purify.es.mjs","../../src/constants/icon.ts","../../src/utils/iconUtils.ts","../../src/utils/markerSvg.ts","../../src/utils/pulseIcon.ts","../../src/utils/LRUCache.ts","../../src/utils/svgUtils.ts","../../src/utils/icons/index.ts","../../src/utils/iconCache.ts","../../node_modules/style-inject/dist/style-inject.es.js","../../src/components/Icons/index.tsx","../../src/components/Marker/toolbar.tsx","../../src/components/Marker/MapClickHandler.tsx","../../src/constants/styles.ts","../../src/utils/clusterIcon.ts","../../src/components/Marker/ClusterView.tsx","../../src/hooks/useLatestRef.ts","../../src/context/ThemeContext.tsx","../../src/utils/darkThemeFilter.ts","../../src/components/TianDiTuLayer/index.tsx","../../src/components/DualScaleControl/index.tsx","../../src/components/MapSizeHandler/index.tsx","../../src/components/ZoomControl/index.tsx","../../src/components/FullscreenControl/index.tsx","../../src/components/Loading/index.tsx","../../src/components/MapContainer/index.tsx","../../src/hooks/useLifecycle.ts","../../src/hooks/useEditMode.ts","../../src/hooks/useLoadingOverlay.tsx","../../src/utils/geometry.ts","../../src/utils/rafThrottle.ts","../../src/hooks/useViewportDebounce.ts","../../src/hooks/useUnifiedFitBounds.ts","../../src/hooks/useNormalizedDataSource.ts","../../src/hooks/useAutoFit.ts","../../src/components/Marker/useIconConfig.ts","../../src/components/Marker/useEditHandlers.ts","../../src/utils/mapAnimation.ts","../../src/components/Marker/useMarkerCommands.ts","../../src/components/Marker/useMarkerIncrementalUpdate.ts","../../src/components/Marker/parseDisplayModeConfig.ts","../../src/components/Marker/index.tsx"],"sourcesContent":["\nconst ARRAY_TYPES = [\n Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n Int32Array, Uint32Array, Float32Array, Float64Array\n];\n\n/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor} TypedArrayConstructor */\n\nconst VERSION = 1; // serialized format version\nconst HEADER_SIZE = 8;\n\nexport default class KDBush {\n\n /**\n * Creates an index from raw `ArrayBuffer` data.\n * @param {ArrayBuffer} data\n */\n static from(data) {\n if (!(data instanceof ArrayBuffer)) {\n throw new Error('Data must be an instance of ArrayBuffer.');\n }\n const [magic, versionAndType] = new Uint8Array(data, 0, 2);\n if (magic !== 0xdb) {\n throw new Error('Data does not appear to be in a KDBush format.');\n }\n const version = versionAndType >> 4;\n if (version !== VERSION) {\n throw new Error(`Got v${version} data when expected v${VERSION}.`);\n }\n const ArrayType = ARRAY_TYPES[versionAndType & 0x0f];\n if (!ArrayType) {\n throw new Error('Unrecognized array type.');\n }\n const [nodeSize] = new Uint16Array(data, 2, 1);\n const [numItems] = new Uint32Array(data, 4, 1);\n\n return new KDBush(numItems, nodeSize, ArrayType, data);\n }\n\n /**\n * Creates an index that will hold a given number of items.\n * @param {number} numItems\n * @param {number} [nodeSize=64] Size of the KD-tree node (64 by default).\n * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n * @param {ArrayBuffer} [data] (For internal use only)\n */\n constructor(numItems, nodeSize = 64, ArrayType = Float64Array, data) {\n if (isNaN(numItems) || numItems < 0) throw new Error(`Unpexpected numItems value: ${numItems}.`);\n\n this.numItems = +numItems;\n this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n this.ArrayType = ArrayType;\n this.IndexArrayType = numItems < 65536 ? Uint16Array : Uint32Array;\n\n const arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n const coordsByteSize = numItems * 2 * this.ArrayType.BYTES_PER_ELEMENT;\n const idsByteSize = numItems * this.IndexArrayType.BYTES_PER_ELEMENT;\n const padCoords = (8 - idsByteSize % 8) % 8;\n\n if (arrayTypeIndex < 0) {\n throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n }\n\n if (data && (data instanceof ArrayBuffer)) { // reconstruct an index from a buffer\n this.data = data;\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = numItems * 2;\n this._finished = true;\n } else { // initialize a new index\n this.data = new ArrayBuffer(HEADER_SIZE + coordsByteSize + idsByteSize + padCoords);\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = 0;\n this._finished = false;\n\n // set header\n new Uint8Array(this.data, 0, 2).set([0xdb, (VERSION << 4) + arrayTypeIndex]);\n new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n new Uint32Array(this.data, 4, 1)[0] = numItems;\n }\n }\n\n /**\n * Add a point to the index.\n * @param {number} x\n * @param {number} y\n * @returns {number} An incremental index associated with the added item (starting from `0`).\n */\n add(x, y) {\n const index = this._pos >> 1;\n this.ids[index] = index;\n this.coords[this._pos++] = x;\n this.coords[this._pos++] = y;\n return index;\n }\n\n /**\n * Perform indexing of the added points.\n */\n finish() {\n const numAdded = this._pos >> 1;\n if (numAdded !== this.numItems) {\n throw new Error(`Added ${numAdded} items when expected ${this.numItems}.`);\n }\n // kd-sort both arrays for efficient search\n sort(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0);\n\n this._finished = true;\n return this;\n }\n\n /**\n * Search the index for items within a given bounding box.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @returns {number[]} An array of indices correponding to the found items.\n */\n range(minX, minY, maxX, maxY) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n\n // recursively search for items in range in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n\n /**\n * Search the index for items within a given radius.\n * @param {number} qx\n * @param {number} qy\n * @param {number} r Query radius.\n * @returns {number[]} An array of indices correponding to the found items.\n */\n within(qx, qy, r) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n const r2 = r * r;\n\n // recursively search for items within radius in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (sqDist(x, y, qx, qy) <= r2) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} nodeSize\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction sort(ids, coords, nodeSize, left, right, axis) {\n if (right - left <= nodeSize) return;\n\n const m = (left + right) >> 1; // middle index\n\n // sort ids and coords around the middle index so that the halves lie\n // either left/right or top/bottom correspondingly (taking turns)\n select(ids, coords, m, left, right, axis);\n\n // recursively kd-sort first half and second half on the opposite axis\n sort(ids, coords, nodeSize, left, m - 1, 1 - axis);\n sort(ids, coords, nodeSize, m + 1, right, 1 - axis);\n}\n\n/**\n * Custom Floyd-Rivest selection algorithm: sort ids and coords so that\n * [left..k-1] items are smaller than k-th item (on either x or y axis)\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} k\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction select(ids, coords, k, left, right, axis) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, axis);\n }\n\n const t = coords[2 * k + axis];\n let i = left;\n let j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + axis] > t) swapItem(ids, coords, left, right);\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + axis] < t) i++;\n while (coords[2 * j + axis] > t) j--;\n }\n\n if (coords[2 * left + axis] === t) swapItem(ids, coords, left, j);\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} i\n * @param {number} j\n */\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\n/**\n * @param {InstanceType<TypedArrayConstructor>} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction sqDist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n","\nimport KDBush from 'kdbush';\n\nconst defaultOptions = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n minPoints: 2, // minimum points to form a cluster\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // whether to generate numeric ids for input features (in vector tiles)\n generateId: false,\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: props => props // props => ({sum: props.my_value})\n};\n\nconst fround = Math.fround || (tmp => ((x) => { tmp[0] = +x; return tmp[0]; }))(new Float32Array(1));\n\nconst OFFSET_ZOOM = 2;\nconst OFFSET_ID = 3;\nconst OFFSET_PARENT = 4;\nconst OFFSET_NUM = 5;\nconst OFFSET_PROP = 6;\n\nexport default class Supercluster {\n constructor(options) {\n this.options = Object.assign(Object.create(defaultOptions), options);\n this.trees = new Array(this.options.maxZoom + 1);\n this.stride = this.options.reduce ? 7 : 6;\n this.clusterProps = [];\n }\n\n load(points) {\n const {log, minZoom, maxZoom} = this.options;\n\n if (log) console.time('total time');\n\n const timerId = `prepare ${ points.length } points`;\n if (log) console.time(timerId);\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n const data = [];\n\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n if (!p.geometry) continue;\n\n const [lng, lat] = p.geometry.coordinates;\n const x = fround(lngX(lng));\n const y = fround(latY(lat));\n // store internal point/cluster data in flat numeric arrays for performance\n data.push(\n x, y, // projected point coordinates\n Infinity, // the last zoom the point was processed at\n i, // index of the source feature in the original input array\n -1, // parent cluster id\n 1 // number of points in a cluster\n );\n if (this.options.reduce) data.push(0); // noop\n }\n let tree = this.trees[maxZoom + 1] = this._createTree(data);\n\n if (log) console.timeEnd(timerId);\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (let z = maxZoom; z >= minZoom; z--) {\n const now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n tree = this.trees[z] = this._createTree(this._cluster(tree, z));\n\n if (log) console.log('z%d: %d clusters in %dms', z, tree.numItems, +Date.now() - now);\n }\n\n if (log) console.timeEnd('total time');\n\n return this;\n }\n\n getClusters(bbox, zoom) {\n let minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n const minLat = Math.max(-90, Math.min(90, bbox[1]));\n let maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n const maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n const easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n const westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n const tree = this.trees[this._limitZoom(zoom)];\n const ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n const data = tree.data;\n const clusters = [];\n for (const id of ids) {\n const k = this.stride * id;\n clusters.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n return clusters;\n }\n\n getChildren(clusterId) {\n const originId = this._getOriginId(clusterId);\n const originZoom = this._getOriginZoom(clusterId);\n const errorMsg = 'No cluster with the specified id.';\n\n const tree = this.trees[originZoom];\n if (!tree) throw new Error(errorMsg);\n\n const data = tree.data;\n if (originId * this.stride >= data.length) throw new Error(errorMsg);\n\n const r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n const x = data[originId * this.stride];\n const y = data[originId * this.stride + 1];\n const ids = tree.within(x, y, r);\n const children = [];\n for (const id of ids) {\n const k = id * this.stride;\n if (data[k + OFFSET_PARENT] === clusterId) {\n children.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n }\n\n if (children.length === 0) throw new Error(errorMsg);\n\n return children;\n }\n\n getLeaves(clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n const leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n }\n\n getTile(z, x, y) {\n const tree = this.trees[this._limitZoom(z)];\n const z2 = Math.pow(2, z);\n const {extent, radius} = this.options;\n const p = radius / extent;\n const top = (y - p) / z2;\n const bottom = (y + 1 + p) / z2;\n\n const tile = {\n features: []\n };\n\n this._addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.data, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.data, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.data, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n }\n\n getClusterExpansionZoom(clusterId) {\n let expansionZoom = this._getOriginZoom(clusterId) - 1;\n while (expansionZoom <= this.options.maxZoom) {\n const children = this.getChildren(clusterId);\n expansionZoom++;\n if (children.length !== 1) break;\n clusterId = children[0].properties.cluster_id;\n }\n return expansionZoom;\n }\n\n _appendLeaves(result, clusterId, limit, offset, skipped) {\n const children = this.getChildren(clusterId);\n\n for (const child of children) {\n const props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) break;\n }\n\n return skipped;\n }\n\n _createTree(data) {\n const tree = new KDBush(data.length / this.stride | 0, this.options.nodeSize, Float32Array);\n for (let i = 0; i < data.length; i += this.stride) tree.add(data[i], data[i + 1]);\n tree.finish();\n tree.data = data;\n return tree;\n }\n\n _addTileFeatures(ids, data, x, y, z2, tile) {\n for (const i of ids) {\n const k = i * this.stride;\n const isCluster = data[k + OFFSET_NUM] > 1;\n\n let tags, px, py;\n if (isCluster) {\n tags = getClusterProperties(data, k, this.clusterProps);\n px = data[k];\n py = data[k + 1];\n } else {\n const p = this.points[data[k + OFFSET_ID]];\n tags = p.properties;\n const [lng, lat] = p.geometry.coordinates;\n px = lngX(lng);\n py = latY(lat);\n }\n\n const f = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags\n };\n\n // assign id\n let id;\n if (isCluster || this.options.generateId) {\n // optionally generate id for points\n id = data[k + OFFSET_ID];\n } else {\n // keep id if already assigned\n id = this.points[data[k + OFFSET_ID]].id;\n }\n\n if (id !== undefined) f.id = id;\n\n tile.features.push(f);\n }\n }\n\n _limitZoom(z) {\n return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n }\n\n _cluster(tree, zoom) {\n const {radius, extent, reduce, minPoints} = this.options;\n const r = radius / (extent * Math.pow(2, zoom));\n const data = tree.data;\n const nextData = [];\n const stride = this.stride;\n\n // loop through each point\n for (let i = 0; i < data.length; i += stride) {\n // if we've already visited the point at this zoom level, skip it\n if (data[i + OFFSET_ZOOM] <= zoom) continue;\n data[i + OFFSET_ZOOM] = zoom;\n\n // find all nearby points\n const x = data[i];\n const y = data[i + 1];\n const neighborIds = tree.within(data[i], data[i + 1], r);\n\n const numPointsOrigin = data[i + OFFSET_NUM];\n let numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n // filter out neighbors that are already processed\n if (data[k + OFFSET_ZOOM] > zoom) numPoints += data[k + OFFSET_NUM];\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n let wx = x * numPointsOrigin;\n let wy = y * numPointsOrigin;\n\n let clusterProperties;\n let clusterPropIndex = -1;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n const id = ((i / stride | 0) << 5) + (zoom + 1) + this.points.length;\n\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom; // save the zoom (so it doesn't get processed twice)\n\n const numPoints2 = data[k + OFFSET_NUM];\n wx += data[k] * numPoints2; // accumulate coordinates for calculating weighted center\n wy += data[k + 1] * numPoints2;\n\n data[k + OFFSET_PARENT] = id;\n\n if (reduce) {\n if (!clusterProperties) {\n clusterProperties = this._map(data, i, true);\n clusterPropIndex = this.clusterProps.length;\n this.clusterProps.push(clusterProperties);\n }\n reduce(clusterProperties, this._map(data, k));\n }\n }\n\n data[i + OFFSET_PARENT] = id;\n nextData.push(wx / numPoints, wy / numPoints, Infinity, id, -1, numPoints);\n if (reduce) nextData.push(clusterPropIndex);\n\n } else { // left points as unclustered\n for (let j = 0; j < stride; j++) nextData.push(data[i + j]);\n\n if (numPoints > 1) {\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom;\n for (let j = 0; j < stride; j++) nextData.push(data[k + j]);\n }\n }\n }\n }\n\n return nextData;\n }\n\n // get index of the point from which the cluster originated\n _getOriginId(clusterId) {\n return (clusterId - this.points.length) >> 5;\n }\n\n // get zoom of the point from which the cluster originated\n _getOriginZoom(clusterId) {\n return (clusterId - this.points.length) % 32;\n }\n\n _map(data, i, clone) {\n if (data[i + OFFSET_NUM] > 1) {\n const props = this.clusterProps[data[i + OFFSET_PROP]];\n return clone ? Object.assign({}, props) : props;\n }\n const original = this.points[data[i + OFFSET_ID]].properties;\n const result = this.options.map(original);\n return clone && result === original ? Object.assign({}, result) : result;\n }\n}\n\nfunction getClusterJSON(data, i, clusterProps) {\n return {\n type: 'Feature',\n id: data[i + OFFSET_ID],\n properties: getClusterProperties(data, i, clusterProps),\n geometry: {\n type: 'Point',\n coordinates: [xLng(data[i]), yLat(data[i + 1])]\n }\n };\n}\n\nfunction getClusterProperties(data, i, clusterProps) {\n const count = data[i + OFFSET_NUM];\n const abbrev =\n count >= 10000 ? `${Math.round(count / 1000) }k` :\n count >= 1000 ? `${Math.round(count / 100) / 10 }k` : count;\n const propIndex = data[i + OFFSET_PROP];\n const properties = propIndex === -1 ? {} : Object.assign({}, clusterProps[propIndex]);\n return Object.assign(properties, {\n cluster: true,\n cluster_id: data[i + OFFSET_ID],\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n const sin = Math.sin(lat * Math.PI / 180);\n const y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n const y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n","/**\n * @fileoverview 地图生命周期管理 Hook(极简方案)\n * @description 为 MapContainer 提供极简的生命周期管理\n * @since 1.4.0\n * @module hooks/useMapLifecycle\n *\n * @example\n * ```tsx\n * useMapLifecycle({\n * map,\n * lifecycle: {\n * onMapReady: ({ map }) => console.log('地图就绪'),\n * onViewportChange: (data) => saveViewport(data),\n * },\n * isReady: true,\n * });\n * ```\n */\n\n/* eslint-disable react-hooks/exhaustive-deps -- ref 回调稳定 */\n\nimport { useEffect, useRef } from 'react';\nimport type L from 'leaflet';\nimport type { MapLifecycleConfig } from '../types/mapLifecycle';\n\n/**\n * useMapLifecycle 配置选项\n */\nexport interface UseMapLifecycleOptions {\n /** 地图实例 */\n map: L.Map | null;\n /** 生命周期配置 */\n lifecycle?: MapLifecycleConfig;\n /** 地图是否已就绪 */\n isReady: boolean;\n}\n\n/**\n * 地图生命周期管理 Hook(极简方案)\n * @description 只管理两个核心生命周期事件:onMapReady 和 onViewportChange\n *\n * @param options - 配置选项\n *\n * @example\n * ```tsx\n * function MapProvider({ lifecycle, children }) {\n * const [map, setMap] = useState(null);\n * const [isReady, setIsReady] = useState(false);\n *\n * // 初始化地图\n * useEffect(() => {\n * const newMap = L.map(containerRef.current);\n * setMap(newMap);\n * setIsReady(true);\n * }, []);\n *\n * // 生命周期管理\n * useMapLifecycle({ map, lifecycle, isReady });\n *\n * return <div>{children}</div>;\n * }\n * ```\n */\nexport function useMapLifecycle(options: UseMapLifecycleOptions): void {\n const { map, lifecycle, isReady } = options;\n const hasReadyFired = useRef(false);\n const prevViewportRef = useRef<{ center: L.LatLng; zoom: number } | null>(null);\n const rafIdRef = useRef<number | null>(null);\n\n // ========== MOUNT: onMapReady ==========\n useEffect(() => {\n // 必须地图实例存在且已就绪\n if (!map || !isReady) {\n return;\n }\n\n // 防止重复触发\n if (hasReadyFired.current) {\n return;\n }\n\n hasReadyFired.current = true;\n\n // 触发 onMapReady 回调\n lifecycle?.onMapReady?.({ map });\n\n // 注意:不在这里监听 'load' 事件\n // 因为现代浏览器和 Leaflet 版本中,'load' 事件可能不会触发\n // 如果需要知道瓦片加载完成,应该在 TileLayer 中监听\n }, [map, isReady]);\n\n // ========== UPDATE: onViewportChange ==========\n useEffect(() => {\n // 必须地图实例存在且已就绪\n if (!map || !isReady || !lifecycle?.onViewportChange) {\n return;\n }\n\n /**\n * 视口变化处理函数\n * @description 使用 RAF 防抖,避免高频触发\n */\n const handleViewportChange = (_triggerEvent: 'moveend' | 'zoomend') => {\n // 如果已有 RAF 待执行,跳过\n if (rafIdRef.current !== null) {\n return;\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n const center = map.getCenter();\n const zoom = map.getZoom();\n const bounds = map.getBounds();\n\n // 检测是否真的发生了变化(避免重复触发)\n const prev = prevViewportRef.current;\n const hasChanged =\n !prev ||\n Math.abs(prev.center.lat - center.lat) > 0.0001 ||\n Math.abs(prev.center.lng - center.lng) > 0.0001 ||\n Math.abs(prev.zoom - zoom) > 0.001;\n\n if (hasChanged) {\n // 触发回调\n lifecycle.onViewportChange?.({\n center,\n zoom,\n bounds,\n });\n\n // 更新上一个视口引用\n prevViewportRef.current = { center, zoom };\n }\n\n // 清除 RAF ID\n rafIdRef.current = null;\n });\n };\n\n // 监听移动和缩放事件\n map.on('moveend', () => handleViewportChange('moveend'));\n map.on('zoomend', () => handleViewportChange('zoomend'));\n\n // 清理函数\n return () => {\n // 清除待执行的 RAF\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n\n // 移除事件监听\n map.off('moveend');\n map.off('zoomend');\n };\n }, [map, isReady, lifecycle?.onMapReady, lifecycle?.onViewportChange]);\n\n // ========== UNMOUNT: 清理 ==========\n useEffect(() => {\n return () => {\n // 清除待执行的 RAF\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n };\n }, []);\n}\n\nexport default useMapLifecycle;\n","/**\n * @fileoverview 地图上下文 - 替代 react-leaflet 的 MapContainer 和 useMap\n * @description 提供地图实例的上下文管理和访问 Hook,API 与 react-leaflet 保持一致\n * @module context/MapContext\n * @since 2.0.0\n * @since 1.4.0 添加极简生命周期管理支持\n */\n\n/* eslint-disable react-hooks/exhaustive-deps -- 地图配置选项变更频率低 */\n\nimport React, { createContext, useContext, useRef, useEffect, useState, useMemo } from 'react';\nimport L from 'leaflet';\nimport { useMapLifecycle } from '../hooks/useMapLifecycle';\nimport type { MapLifecycleConfig } from '../types/mapLifecycle';\n\n// ========== 类型定义 ==========\n\n/**\n * 地图上下文值\n */\nexport interface MapContextValue {\n /** Leaflet 地图实例 */\n map: L.Map | null;\n /** 地图实例 ref(用于命令式访问) */\n mapRef: React.MutableRefObject<L.Map | null>;\n /** 地图是否已初始化完成 */\n isReady: boolean;\n}\n\n/**\n * MapProvider 组件属性\n */\nexport interface MapProviderProps {\n /** 子组件 */\n children: React.ReactNode;\n /** 初始中心点 */\n center: [number, number];\n /** 初始缩放级别 */\n zoom: number;\n /** Leaflet 地图选项 */\n options?: L.MapOptions;\n /** 地图初始化完成回调 */\n onReady?: (map: L.Map) => void;\n /** 容器样式 */\n style?: React.CSSProperties;\n /** 容器类名 */\n className?: string;\n /** 是否在组件卸载时销毁地图 */\n destroyOnUnmount?: boolean;\n /**\n * 地图生命周期回调配置\n * @since 1.4.0\n * @description 极简方案:只保留 onMapReady 和 onViewportChange\n * @example\n * ```tsx\n * lifecycle={{\n * onMapReady: ({ map }) => console.log('地图就绪'),\n * onViewportChange: (data) => saveViewport(data),\n * }}\n * ```\n */\n lifecycle?: MapLifecycleConfig;\n}\n\n// ========== Context 创建 ==========\n\nconst MapContext = createContext<MapContextValue>({\n map: null,\n mapRef: { current: null },\n isReady: false,\n});\n\nMapContext.displayName = 'MapContext';\n\n// ========== Hook 导出 ==========\n\n/**\n * 获取地图实例的 Hook\n * @description 与 react-leaflet 的 useMap API 保持一致,方便迁移\n * @returns Leaflet 地图实例,如果地图未初始化则返回 null\n * @example\n * ```tsx\n * const map = useMap();\n *\n * useEffect(() => {\n * if (!map) return;\n * // 使用地图实例\n * map.fitBounds(bounds);\n * }, [map]);\n * ```\n */\nexport const useMap = (): L.Map | null => {\n const { map } = useContext(MapContext);\n return map;\n};\n\n/**\n * 获取地图实例(保证非空)\n * @description 如果地图未初始化则抛出错误,用于确定地图一定存在的场景\n * @returns 地图实例\n * @throws 如果地图未初始化\n * @example\n * ```tsx\n * function MyComponent() {\n * // 组件在 MapProvider 内部,map 一定存在\n * const map = useMapGuaranteed();\n * // TypeScript 知道 map 不是 null\n * map.fitBounds(bounds);\n * }\n * ```\n */\nexport const useMapGuaranteed = (): L.Map => {\n const map = useMap();\n if (!map) {\n throw new Error(\n 'Map is not available. Make sure you are inside a MapProvider and the map has been initialized.'\n );\n }\n return map;\n};\n\n/**\n * 获取地图实例 ref 的 Hook\n * @description 用于在事件处理器中获取最新地图实例(避免闭包问题)\n * @returns 地图实例 ref\n */\nexport const useMapRef = (): React.MutableRefObject<L.Map | null> => {\n const { mapRef } = useContext(MapContext);\n return mapRef;\n};\n\n/**\n * 判断地图是否就绪的 Hook\n * @returns 地图是否已初始化完成\n */\nexport const useMapReady = (): boolean => {\n const { isReady } = useContext(MapContext);\n return isReady;\n};\n\n/**\n * 获取完整上下文值的 Hook\n * @description 用于需要同时访问 map、mapRef、isReady 的场景\n * @returns 地图上下文值\n */\nexport const useMapContext = (): MapContextValue => {\n return useContext(MapContext);\n};\n\n// ========== Provider 组件 ==========\n\n/**\n * 地图容器 Provider 组件\n * @description 替代 react-leaflet 的 MapContainer,提供地图实例上下文\n * @example\n * ```tsx\n * import { MapProvider, useMapInstance } from 'agri-map-components';\n *\n * function MyMapComponent() {\n * return (\n * <MapProvider center={[30, 120]} zoom={10}>\n * <MyLayer />\n * </MapProvider>\n * );\n * }\n *\n * function MyLayer() {\n * const map = useMapInstance();\n * // 使用 map...\n * return null;\n * }\n * ```\n */\nexport const MapProvider: React.FC<MapProviderProps> = ({\n children,\n center,\n zoom,\n options = {},\n onReady,\n style,\n className,\n destroyOnUnmount = true,\n lifecycle,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const mapRef = useRef<L.Map | null>(null);\n const [isReady, setIsReady] = useState(false);\n const onReadyRef = useRef(onReady);\n const lifecycleRef = useRef(lifecycle);\n\n // 保持 lifecycle 最新\n useEffect(() => {\n lifecycleRef.current = lifecycle;\n }, [lifecycle]);\n\n // 给 zoom 添加默认值\n const effectiveZoom = zoom ?? 12;\n\n // 保持 onReady 回调最新\n useEffect(() => {\n onReadyRef.current = onReady;\n }, [onReady]);\n\n // 初始化地图\n useEffect(() => {\n if (!containerRef.current) return;\n\n // 防止重复初始化\n if (mapRef.current) return;\n\n // 地图选项 - 必须包含 center 和 zoom 用于初始化\n // 注意:不要使用 ...options 展开,因为 undefined 值会覆盖默认值\n const mapOptions: L.MapOptions = {\n center,\n zoom: effectiveZoom,\n zoomControl: options.zoomControl ?? true,\n attributionControl: options.attributionControl ?? true,\n };\n\n // 只添加有值的选项,避免 undefined 覆盖默认值\n if (options.crs !== undefined) mapOptions.crs = options.crs;\n if (options.maxZoom !== undefined) mapOptions.maxZoom = options.maxZoom;\n if (options.minZoom !== undefined) mapOptions.minZoom = options.minZoom;\n if (options.scrollWheelZoom !== undefined) mapOptions.scrollWheelZoom = options.scrollWheelZoom;\n if (options.maxBounds !== undefined) mapOptions.maxBounds = options.maxBounds;\n if (options.layers !== undefined) mapOptions.layers = options.layers;\n if (options.preferCanvas !== undefined) mapOptions.preferCanvas = options.preferCanvas;\n\n // 创建地图\n const map = L.map(containerRef.current, mapOptions);\n\n mapRef.current = map;\n setIsReady(true);\n\n // 触发 onReady 回调\n if (onReadyRef.current) {\n // 使用 RAF 确保地图渲染完成\n requestAnimationFrame(() => {\n onReadyRef.current?.(map);\n });\n }\n\n // 清理函数\n return () => {\n if (destroyOnUnmount && mapRef.current) {\n mapRef.current.remove();\n mapRef.current = null;\n setIsReady(false);\n }\n };\n }, []); // 只在挂载时执行一次\n\n // ========== 生命周期管理 ==========\n useMapLifecycle({\n map: mapRef.current,\n lifecycle: lifecycleRef.current,\n isReady,\n });\n\n // 更新 center 和 zoom(如果需要)\n // 如果需要受控模式,可以取消注释以下代码\n // const updateCenterZoom = useCallback(() => {\n // if (!mapRef.current || !isReady) return;\n // const currentCenter = mapRef.current.getCenter();\n // const currentZoom = mapRef.current.getZoom();\n // if (currentCenter.lat !== center[0] || currentCenter.lng !== center[1] || currentZoom !== zoom) {\n // mapRef.current.setView(center, zoom, { animate: false });\n // }\n // }, [center, zoom, isReady]);\n\n // 响应 center/zoom 变化(可选行为,默认不响应)\n // 如果需要受控模式,可以取消注释以下代码\n // useEffect(() => {\n // updateCenterZoom();\n // }, [updateCenterZoom]);\n\n const contextValue: MapContextValue = useMemo(\n () => ({\n map: mapRef.current,\n mapRef,\n isReady,\n }),\n // 只依赖 isReady,因为 mapRef 是稳定的 ref 对象\n // 修复记录 (2024-06-08): 使用 useMemo 缓存 contextValue,避免每次渲染创建新对象\n // 问题:原始代码在每次渲染时创建新对象 { map: mapRef.current, mapRef, isReady },\n // 导致使用 useContext(MapContext) 的组件重新渲染\n [isReady]\n );\n\n return (\n <MapContext.Provider value={contextValue}>\n <div\n ref={containerRef}\n className={className}\n style={{\n position: 'relative',\n ...(style || {}),\n }}\n data-map-container-style={JSON.stringify(style)}\n >\n {isReady && children}\n </div>\n </MapContext.Provider>\n );\n};\n\nMapProvider.displayName = 'MapProvider';\n\n// ========== 工具 Hook ==========\n\n/**\n * 地图事件监听 Hook\n * @description 简化地图事件的绑定和解绑\n * @param eventType 事件类型\n * @param handler 事件处理函数\n * @example\n * ```tsx\n * useMapEvent('click', (e) => {\n * console.log('点击位置:', e.latlng);\n * });\n * ```\n */\nexport const useMapEvent = <K extends keyof L.LeafletEventHandlerFnMap>(\n eventType: K,\n handler: L.LeafletEventHandlerFnMap[K]\n): void => {\n const map = useMap();\n const handlerRef = useRef(handler);\n\n useEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (!map) return;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wrappedHandler = (e: any) => {\n handlerRef.current?.(e);\n };\n\n map.on(eventType, wrappedHandler as L.LeafletEventHandlerFn);\n\n return () => {\n map.off(eventType, wrappedHandler as L.LeafletEventHandlerFn);\n };\n }, [map, eventType]);\n};\n\n/**\n * 多事件监听 Hook\n * @description 同时监听多个地图事件,与 react-leaflet 的 useMapEvents API 一致\n * @param events 事件处理函数映射对象\n * @returns 地图实例\n * @example\n * ```tsx\n * const map = useMapEvents({\n * click: (e) => {\n * console.log('点击位置:', e.latlng);\n * },\n * zoomend: (e) => {\n * console.log('缩放结束:', map.getZoom());\n * },\n * moveend: (e) => {\n * console.log('移动结束:', map.getCenter());\n * },\n * });\n * ```\n */\nexport const useMapEvents = <K extends keyof L.LeafletEventHandlerFnMap>(\n events: Partial<L.LeafletEventHandlerFnMap>\n): L.Map | null => {\n const map = useMap();\n const eventsRef = useRef(events);\n\n // 保持 events 最新\n useEffect(() => {\n eventsRef.current = events;\n }, [events]);\n\n useEffect(() => {\n if (!map) return;\n\n // 为每个事件类型注册监听器\n const registeredEvents: K[] = [];\n\n for (const eventType in eventsRef.current) {\n if (eventsRef.current[eventType as K]) {\n const handler = eventsRef.current[eventType as K]!;\n const wrappedHandler = (e: L.LeafletEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (handler as any)(e);\n };\n map.on(eventType, wrappedHandler as L.LeafletEventHandlerFn);\n registeredEvents.push(eventType as K);\n }\n }\n\n return () => {\n // 清理所有注册的事件\n for (const eventType of registeredEvents) {\n map.off(eventType);\n }\n };\n }, [map]);\n\n return map;\n};\n\n/**\n * 地图视口变化监听 Hook\n * @description 监听地图 zoom 和 move 事件\n * @param callback 视口变化回调\n * @example\n * ```tsx\n * useMapViewportChange(({ center, zoom, bounds }) => {\n * console.log('视口变化:', center, zoom);\n * });\n * ```\n */\nexport const useMapViewportChange = (\n callback: (viewport: { center: L.LatLng; zoom: number; bounds: L.LatLngBounds }) => void\n): void => {\n const map = useMap();\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!map) return;\n\n const handleChange = () => {\n callbackRef.current({\n center: map.getCenter(),\n zoom: map.getZoom(),\n bounds: map.getBounds(),\n });\n };\n\n map.on('zoomend', handleChange);\n map.on('moveend', handleChange);\n\n return () => {\n map.off('zoomend', handleChange);\n map.off('moveend', handleChange);\n };\n }, [map]);\n};\n\nexport { MapContext };\n","/**\n * 配置上下文\n * @description 用于在子组件中获取 MapContainer 的配置\n * @module context/ConfigContext\n * @since 2.0.0\n */\n\nimport { createContext, useContext } from 'react';\nimport type {\n DualScaleControlConfig,\n MapSizeHandlerConfig,\n TianDiTuLayerConfig,\n PathOptions,\n IconConfig,\n AntPathConfig,\n TrackStyle,\n ClusterIconConfig,\n} from '../types';\n\n// ========== 类型定义 ==========\n\n/**\n * PlotLayer 配置\n */\nexport interface PlotLayerConfig {\n /** 编辑模式样式 */\n editing?: PathOptions | null | false;\n}\n\n/**\n * Marker 配置\n */\nexport interface MarkerConfig {\n /** 编辑中状态图标配置 */\n editing?: IconConfig | null | false;\n /** 聚合气泡图标 - undefined|null|false|{} → 使用 CLUSTER_DEFAULT_ICON */\n cluster?: ClusterIconConfig | null | false;\n}\n\n/**\n * Road 配置\n */\nexport interface RoadConfig {\n /** 编辑态样式配置 */\n editing?: PathOptions | null | false;\n /** 蚁行路径配置 */\n antPath?: AntPathConfig | null | false;\n}\n\n/**\n * Irrigation 配置\n */\nexport interface IrrigationConfig {\n /** 编辑态样式配置 */\n editing?: PathOptions | null | false;\n /** 蚁行路径配置 */\n antPath?: AntPathConfig | null | false;\n /** 进水口图标配置 */\n inlet?: IconConfig | null | false;\n /** 出水口图标配置 */\n outlet?: IconConfig | null | false;\n}\n\n/**\n * Track 配置\n * @since 2.0.0 使用 TRACK_STYLE.default 替代 working,使用 TRACK_STYLE.nonWorking 替代 nonWorking\n */\nexport interface TrackConfig {\n /** 作业中轨迹样式 - undefined|null|false|{} → 使用 TRACK_STYLE.default */\n default?: TrackStyle | null | false;\n /** 非作业/路上轨迹样式 - undefined|null|false|{} → 使用 TRACK_STYLE.nonWorking */\n nonWorking?: TrackStyle | null | false;\n /** 选中轨迹样式 - undefined|null|false|{} → 使用 TRACK_STYLE.selected */\n selected?: TrackStyle | null | false;\n /** 起点图标 - undefined|null|false|{} → 使用 TRACK_DEFAULT_START_ICON */\n start?: IconConfig | null | false;\n /** 终点图标 - undefined|null|false|{} → 使用 TRACK_DEFAULT_END_ICON */\n end?: IconConfig | null | false;\n /** 聚合气泡图标 - undefined|null|false|{} → 使用 CLUSTER_DEFAULT_ICON */\n cluster?: ClusterIconConfig | null | false;\n}\n\n/**\n * 配置上下文值\n */\nexport interface ConfigContextValue {\n /** 主题模式 */\n theme: 'light' | 'dark';\n /** 双向标尺配置 */\n dualScaleControl?: DualScaleControlConfig | false;\n /** 天地图图层配置 */\n tianDiTuLayer?: TianDiTuLayerConfig | false;\n /** 地图尺寸处理器配置 */\n mapSizeHandler?: MapSizeHandlerConfig | false;\n /** PlotLayer 配置 */\n plotLayer?: PlotLayerConfig;\n /** Marker 配置 */\n marker?: MarkerConfig;\n /** Road 配置 */\n road?: RoadConfig;\n /** Irrigation 配置 */\n irrigation?: IrrigationConfig;\n /** Track 配置 */\n track?: TrackConfig;\n}\n\n// ========== Context 创建 ==========\n\n/**\n * 配置上下文\n */\nconst ConfigContext = createContext<ConfigContextValue>({\n theme: 'light',\n});\n\nConfigContext.displayName = 'ConfigContext';\n\n// ========== Hook 导出 ==========\n\n/**\n * 获取配置上下文的 Hook\n * @returns 配置对象\n * @example\n * ```tsx\n * const { theme, tianDiTuLayer } = useConfig();\n * ```\n */\nexport const useConfig = (): ConfigContextValue => {\n return useContext(ConfigContext);\n};\n\nexport { ConfigContext };\n","/**\n * @fileoverview 统一错误处理工具\n * @description 提供统一的错误处理、日志记录和错误边界包装器\n * @module utils/errorHandling\n * @since 2.1.0 统一优化\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any -- 错误处理需要 */\n\n/** 组件名称映射 */\nexport const COMPONENT_NAMES = {\n PLOT_LAYER: 'PlotLayer',\n MARKER: 'Marker',\n TRACK: 'Track',\n ROAD: 'Road',\n IRRIGATION: 'Irrigation',\n TIAN_DI_TU: 'TianDiTuLayer',\n MINI_MAP: 'MiniMap',\n CLUSTER_VIEW: 'ClusterView',\n} as const;\n\nexport type ComponentName = (typeof COMPONENT_NAMES)[keyof typeof COMPONENT_NAMES];\n\n/** 日志级别 */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\n/** 日志配置 */\ninterface LogConfig {\n enabled: boolean;\n minLevel: LogLevel;\n prefix: string;\n}\n\n/** 默认日志配置 */\nconst defaultLogConfig: LogConfig = {\n enabled: process.env.NODE_ENV === 'development',\n minLevel: 'warn',\n prefix: '[AgriMap]',\n};\n\n/** 当前日志配置 */\nlet currentLogConfig = { ...defaultLogConfig };\n\n/**\n * 配置日志\n */\nexport function configureLog(config: Partial<LogConfig>) {\n currentLogConfig = { ...currentLogConfig, ...config };\n}\n\n/**\n * 日志输出\n */\nfunction log(level: LogLevel, componentName: string, message: string, ...args: unknown[]) {\n if (!currentLogConfig.enabled) return;\n\n const levels: LogLevel[] = ['debug', 'info', 'warn', 'error'];\n const minLevelIndex = levels.indexOf(currentLogConfig.minLevel);\n const currentLevelIndex = levels.indexOf(level);\n\n if (currentLevelIndex < minLevelIndex) return;\n\n const prefix = `${currentLogConfig.prefix}[${componentName}]`;\n\n switch (level) {\n case 'debug':\n console.debug(prefix, message, ...args);\n break;\n case 'info':\n console.info(prefix, message, ...args);\n break;\n case 'warn':\n console.warn(prefix, message, ...args);\n break;\n case 'error':\n console.error(prefix, message, ...args);\n break;\n }\n}\n\n/** 日志工具 */\nexport const logger = {\n debug: (component: string, message: string, ...args: unknown[]) =>\n log('debug', component, message, ...args),\n info: (component: string, message: string, ...args: unknown[]) =>\n log('info', component, message, ...args),\n warn: (component: string, message: string, ...args: unknown[]) =>\n log('warn', component, message, ...args),\n error: (component: string, message: string, ...args: unknown[]) =>\n log('error', component, message, ...args),\n};\n\n/**\n * 安全执行函数\n * @description 包裹函数执行,添加错误处理和日志记录\n *\n * @example\n * ```tsx\n * // 简单使用\n * const result = safeCall(\n * () => JSON.parse(data),\n * 'Marker',\n * 'parseData'\n * );\n *\n * // 带默认值\n * const result = safeCall(\n * () => riskyOperation(),\n * 'PlotLayer',\n * 'riskyOperation',\n * { defaultValue: [] }\n * );\n * ```\n */\nexport function safeCall<T>(\n fn: () => T,\n componentName: ComponentName | string,\n operationName: string,\n options?: {\n defaultValue?: T;\n onError?: (error: Error) => void;\n rethrow?: boolean;\n }\n): T | undefined {\n const { defaultValue, onError, rethrow = false } = options || {};\n\n try {\n return fn();\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n logger.error(componentName, `${operationName} 失败:`, err.message);\n\n if (onError) {\n try {\n onError(err);\n } catch (handlerError) {\n logger.error(componentName, '错误处理函数执行失败:', handlerError);\n }\n }\n\n if (rethrow) {\n throw err;\n }\n\n return defaultValue as T;\n }\n}\n\n/**\n * 安全执行异步函数\n */\nexport async function safeCallAsync<T>(\n fn: () => Promise<T>,\n componentName: ComponentName | string,\n operationName: string,\n options?: {\n defaultValue?: T;\n onError?: (error: Error) => void;\n rethrow?: boolean;\n }\n): Promise<T | undefined> {\n const { defaultValue, onError, rethrow = false } = options || {};\n\n try {\n return await fn();\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n logger.error(componentName, `${operationName} 失败:`, err.message);\n\n if (onError) {\n try {\n onError(err);\n } catch (handlerError) {\n logger.error(componentName, '错误处理函数执行失败:', handlerError);\n }\n }\n\n if (rethrow) {\n throw err;\n }\n\n return defaultValue as T;\n }\n}\n\n/**\n * 创建带上下文的安全执行器\n * @description 为特定组件创建预配置的安全执行函数\n *\n * @example\n * ```tsx\n * // 在组件中使用\n * const safeExec = createSafeExecutor('Marker');\n *\n * // 使用\n * const result = safeExec(() => riskyOperation(), 'riskyOperation');\n * ```\n */\nexport function createSafeExecutor(componentName: ComponentName | string) {\n return <T>(\n fn: () => T,\n operationName: string,\n options?: {\n defaultValue?: T;\n onError?: (error: Error) => void;\n rethrow?: boolean;\n }\n ) => safeCall(fn, componentName, operationName, options);\n}\n\n/**\n * 创建带上下文的异步安全执行器\n */\nexport function createAsyncSafeExecutor(componentName: ComponentName | string) {\n return <T>(\n fn: () => Promise<T>,\n operationName: string,\n options?: {\n defaultValue?: T;\n onError?: (error: Error) => void;\n rethrow?: boolean;\n }\n ) => safeCallAsync(fn, componentName, operationName, options);\n}\n\n/**\n * 安全回调执行\n * @description 用于安全执行用户提供的回调函数\n */\nexport function safeCallback<T extends (...args: any[]) => any>(\n callback: T | undefined,\n componentName: ComponentName | string,\n callbackName: string,\n ...args: Parameters<T>\n): ReturnType<T> | undefined {\n if (!callback) return undefined;\n\n return safeCall(() => callback(...args), componentName, `callback:${callbackName}`);\n}\n\n/**\n * 批量安全执行\n * @description 安全执行多个操作,收集所有错误\n */\nexport function safeBatch(\n componentName: ComponentName | string,\n operations: { name: string; fn: () => void }[]\n): { success: number; failed: number; errors: Error[] } {\n const result = { success: 0, failed: 0, errors: [] as Error[] };\n\n for (const { name, fn } of operations) {\n try {\n fn();\n result.success++;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n logger.error(componentName, `${name} 失败:`, err.message);\n result.failed++;\n result.errors.push(err);\n }\n }\n\n return result;\n}\n\n/**\n * 条件断言\n * @description 断言条件为真,否则记录错误\n */\nexport function assert(\n condition: boolean,\n componentName: ComponentName | string,\n message: string\n): asserts condition {\n if (!condition) {\n const error = new Error(`Assertion failed: ${message}`);\n logger.error(componentName, message);\n throw error;\n }\n}\n\n/**\n * 软断言\n * @description 断言条件为真,仅记录警告不抛出错误\n */\nexport function softAssert(\n condition: boolean,\n componentName: ComponentName | string,\n message: string\n): boolean {\n if (!condition) {\n logger.warn(componentName, `Assertion warning: ${message}`);\n }\n return condition;\n}\n\nexport default {\n logger,\n safeCall,\n safeCallAsync,\n createSafeExecutor,\n createAsyncSafeExecutor,\n safeCallback,\n safeBatch,\n assert,\n softAssert,\n configureLog,\n COMPONENT_NAMES,\n};\n","/**\n * 通知提醒组件\n * @description 类似 antd Notification 的通知提醒框,显示在地图右下角\n */\n\nimport {\n useState,\n useEffect,\n useCallback,\n forwardRef,\n useImperativeHandle,\n type MouseEvent,\n} from 'react';\nimport type {\n NotificationType,\n NotificationOptions,\n NotificationInstance,\n NotificationProps,\n} from '../../types';\n\n/** 模块级自增计数器,确保通知 ID 全局唯一 */\nlet notificationIdCounter = 0;\n\n/** 通知项数据 */\ninterface NotificationItem extends NotificationOptions {\n id: number;\n isClosing: boolean;\n}\n\n/**\n * 单个通知项组件属性\n */\ninterface NotificationItemProps {\n id: number;\n type: NotificationType;\n title?: string;\n message?: string;\n duration?: number | false;\n isClosing: boolean;\n onClose: (id: number) => void;\n}\n\n/**\n * 单个通知项组件\n */\nconst NotificationItem = ({\n id,\n type,\n title,\n message,\n duration,\n isClosing,\n onClose,\n}: NotificationItemProps): JSX.Element => {\n useEffect(() => {\n // duration 为 0 或 false 时不自动关闭\n if (duration !== 0 && duration !== false && !isClosing) {\n const actualDuration = duration || 3500;\n const timer = setTimeout(() => {\n onClose(id);\n }, actualDuration);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [id, duration, isClosing, onClose]);\n\n const getIcon = (): string => {\n switch (type) {\n case 'success':\n return '✓';\n case 'error':\n return '✕';\n case 'warning':\n return '!';\n case 'info':\n default:\n return 'i';\n }\n };\n\n return (\n <div\n className={`notification notification--${type}${isClosing ? ' notification--closing' : ''}`}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n >\n <div className=\"notification__icon\">{getIcon()}</div>\n <div className=\"notification__content\">\n {title && <div className=\"notification__title\">{title}</div>}\n {message && <div className=\"notification__message\">{message}</div>}\n </div>\n </div>\n );\n};\n\n/**\n * 通知容器组件\n * @param onClose - 通知关闭时的回调\n * @param ref - ref 引用,暴露 open/close 方法\n */\nconst Notification = forwardRef<NotificationInstance, NotificationProps>(\n ({ onClose: onCloseCallback }, ref) => {\n const [notifications, setNotifications] = useState<NotificationItem[]>([]);\n\n const open = useCallback((options: NotificationOptions): number => {\n const { type = 'info', title, message, duration = 3500 } = options;\n\n const id = ++notificationIdCounter;\n\n // 新通知添加到数组末尾,实现从下往上堆叠\n setNotifications(prev => [...prev, { id, type, title, message, duration, isClosing: false }]);\n\n return id;\n }, []);\n\n const close = useCallback(\n (id: number): void => {\n // 先设置关闭动画状态\n setNotifications(prev => prev.map(n => (n.id === id ? { ...n, isClosing: true } : n)));\n // 触发关闭回调\n if (onCloseCallback) {\n onCloseCallback(id);\n }\n // 动画结束后移除\n setTimeout(() => {\n setNotifications(prev => prev.filter(n => n.id !== id));\n }, 300);\n },\n [onCloseCallback]\n );\n\n const clear = useCallback((): void => {\n setNotifications([]);\n }, []);\n\n // 暴露方法给父组件\n useImperativeHandle(ref, () => ({\n open,\n close,\n clear,\n // 快捷方法:支持 (message, duration) 或 ({ title, message, duration })\n info: (messageOrOptions: string | NotificationOptions, duration?: number): number => {\n if (typeof messageOrOptions === 'object') {\n return open({ type: 'info', ...messageOrOptions });\n }\n return open({ type: 'info', message: messageOrOptions, duration });\n },\n success: (messageOrOptions: string | NotificationOptions, duration?: number): number => {\n if (typeof messageOrOptions === 'object') {\n return open({ type: 'success', ...messageOrOptions });\n }\n return open({ type: 'success', message: messageOrOptions, duration });\n },\n warning: (messageOrOptions: string | NotificationOptions, duration?: number): number => {\n if (typeof messageOrOptions === 'object') {\n return open({ type: 'warning', ...messageOrOptions });\n }\n return open({ type: 'warning', message: messageOrOptions, duration });\n },\n error: (messageOrOptions: string | NotificationOptions, duration?: number): number => {\n if (typeof messageOrOptions === 'object') {\n return open({ type: 'error', ...messageOrOptions });\n }\n return open({ type: 'error', message: messageOrOptions, duration });\n },\n }));\n\n if (notifications.length === 0) return null;\n\n return (\n <div className=\"notification-container\">\n {notifications.map(notification => (\n <NotificationItem\n key={notification.id}\n id={notification.id}\n type={notification.type || 'info'}\n title={notification.title}\n message={notification.message}\n duration={notification.duration}\n isClosing={notification.isClosing}\n onClose={close}\n />\n ))}\n </div>\n );\n }\n);\n\nNotification.displayName = 'Notification';\n\nexport default Notification;\n","/**\n * 通用编辑工具栏组件\n * @description 用于统一各编辑组件的工具栏实现\n */\n\nimport {\n useState,\n useEffect,\n useRef,\n forwardRef,\n useImperativeHandle,\n useCallback,\n createContext,\n useContext,\n} from 'react';\nimport Notification from '../Notification';\nimport type { ReactNode } from 'react';\nimport type { NotificationInstance } from '../../types';\n\n/** 按钮样式变体 */\nexport type ButtonVariant = 'default' | 'primary' | 'danger';\n\n/** 预设色板(参照 Ant Design 5.x PresetColors) */\nexport type ToolbarPresetColors =\n | 'success'\n | 'warning'\n | 'error'\n | 'magenta'\n | 'volcano'\n | 'gold'\n | 'orange'\n | 'cyan'\n | 'geekblue'\n | 'purple';\n\n/** 按钮 color 属性类型(支持预设色和自定义颜色如 #ff0000、rgba(255,0,0,0.5)) */\nexport type ToolbarColor = 'default' | 'primary' | 'danger' | ToolbarPresetColors | string;\n\n/** 预设颜色集合(用于区分预设色和自定义颜色) */\nexport const PRESET_COLOR_SET = new Set<string>([\n 'default',\n 'primary',\n 'danger',\n 'success',\n 'warning',\n 'error',\n 'magenta',\n 'volcano',\n 'gold',\n 'orange',\n 'cyan',\n 'geekblue',\n 'purple',\n]);\n\n/** 单个按钮配置 */\nexport interface ToolbarButton<T extends string> {\n /** 按钮操作类型 */\n action: T;\n /** 显示文本 */\n label: string;\n /** 图标组件 */\n icon?: ReactNode;\n /** 提示文本 */\n tooltip?: string;\n /** 按钮样式变体(兼容,优先使用 color) */\n variant?: ButtonVariant;\n /** 按钮颜色 */\n color?: ToolbarColor;\n /** 是否需要选中项才能点击 */\n needsSelection?: boolean;\n /** 编辑模式下是否显示 */\n showInEdit?: boolean;\n /** 是否禁用 */\n disabled?: boolean;\n}\n\n/** 工具栏尺寸(支持预设尺寸和自定义数字,单位 px) */\nexport type ToolbarSize = 'large' | 'middle' | 'small' | number;\n\n/** 工具栏属性 */\nexport interface BaseEditToolbarProps<T extends string> {\n /** 是否可见 */\n visible: boolean;\n /** 工具栏尺寸 */\n size?: ToolbarSize;\n /** 当前选中ID */\n selectedId: string | number | null;\n /** 当前模式 */\n currentMode: string;\n /** 启用的按钮 */\n enabledButtons: T[];\n /** 按钮配置 */\n buttons: ToolbarButton<T>[];\n /** 编辑模式判断函数(默认 mode !== 'idle') */\n isEditingFn?: (mode: string) => boolean;\n /** 模式提示信息 */\n modeHints?: Record<string, string>;\n /** 类名前缀 */\n classPrefix: string;\n /** 保存按钮是否禁用 */\n saveDisabled?: boolean;\n /** 是否显示编辑模式提示 */\n showHint?: boolean;\n /** 警告提示信息(不受 showHint 控制,始终显示) */\n warningHint?: string;\n /** 内置按钮的统一颜色(覆盖各按钮自身的 variant/color),支持预设色和自定义颜色 */\n color?: ToolbarColor;\n /** 是否仅显示图标(不显示文字) */\n iconOnly?: boolean;\n /** 额外内容(自定义工具栏按钮) */\n children?: ReactNode;\n /** 标准动作:取消 */\n onCancel?: () => void;\n /** 标准动作:保存(自动传入 selectedId) */\n onSave?: (id?: string | number | null) => void;\n /** 标准动作:新建 */\n onCreate?: () => void;\n /** 标准动作:删除(自动传入 selectedId) */\n onDelete?: (id?: string | number | null) => void;\n /** 自定义动作映射表,key 为 action 名称,value 为回调(自动传入 selectedId) */\n actionHandlers?: Partial<Record<T, (id?: string | number | null) => void>>;\n}\n\n/** 工具栏上下文 */\nexport interface ToolbarContextValue {\n /** 类名前缀 */\n classPrefix: string;\n}\n\n/** 工具栏上下文 */\nexport const ToolbarContext = createContext<ToolbarContextValue | null>(null);\n\n/**\n * 获取工具栏上下文\n */\nexport function useToolbarContext(): ToolbarContextValue {\n const context = useContext(ToolbarContext);\n if (!context) {\n // 返回默认值,避免在 ToolbarButton 外部使用时报错\n return { classPrefix: 'marker-edit-toolbar' };\n }\n return context;\n}\n\n/** 工具栏 ref 方法 */\nexport interface BaseEditToolbarRef {\n showNotification: (message: string, title?: string) => void;\n clearNotification: () => void;\n}\n\n/**\n * 通用编辑工具栏\n */\nconst BaseEditToolbar = forwardRef<BaseEditToolbarRef, BaseEditToolbarProps<string>>(\n (\n {\n visible,\n selectedId,\n currentMode = 'idle',\n enabledButtons = [],\n buttons,\n isEditingFn,\n modeHints = {},\n classPrefix,\n size = 'middle',\n saveDisabled = false,\n showHint = true,\n warningHint,\n color,\n iconOnly = false,\n children,\n onCancel,\n onSave,\n onCreate,\n onDelete,\n actionHandlers,\n },\n ref\n ) => {\n const [notificationClosed, setNotificationClosed] = useState(false);\n const notificationRef = useRef<NotificationInstance>(null);\n\n const isEditing = isEditingFn ? isEditingFn(currentMode) : currentMode !== 'idle';\n\n useImperativeHandle(ref, () => ({\n showNotification: (message: string, title?: string) => {\n setNotificationClosed(false);\n notificationRef.current?.info({ title, message });\n },\n clearNotification: () => {\n notificationRef.current?.clear();\n },\n }));\n\n // 编辑模式提示\n useEffect(() => {\n if (warningHint && visible && isEditing) {\n notificationRef.current?.info({\n title: '提示',\n message: warningHint,\n });\n } else if (\n showHint &&\n visible &&\n isEditing &&\n !notificationClosed &&\n modeHints[currentMode]\n ) {\n notificationRef.current?.info({\n title: '提示',\n message: modeHints[currentMode],\n });\n } else if (!isEditing) {\n notificationRef.current?.clear();\n }\n }, [showHint, visible, currentMode, modeHints, isEditing, notificationClosed, warningHint]);\n\n // 模式切换时重置通知状态\n useEffect(() => {\n setNotificationClosed(false);\n }, [currentMode]);\n\n const handleNotificationClose = useCallback(() => {\n setNotificationClosed(true);\n }, []);\n\n const getButtonClassName = (\n variant: ButtonVariant | undefined,\n btnColor: ToolbarColor | undefined,\n disabled: boolean\n ): string => {\n const classes = [`${classPrefix}__button`];\n const effectiveColor = color || btnColor || variant || 'default';\n if (disabled) classes.push(`${classPrefix}__button--disabled`);\n if (\n typeof effectiveColor === 'string' &&\n PRESET_COLOR_SET.has(effectiveColor) &&\n effectiveColor !== 'default'\n ) {\n classes.push(`${classPrefix}__button--${effectiveColor}`);\n }\n return classes.join(' ');\n };\n\n const getButtonStyle = (btnColor: ToolbarColor | undefined): React.CSSProperties => {\n const style: React.CSSProperties = {};\n const effectiveColor = color || btnColor;\n if (\n effectiveColor &&\n typeof effectiveColor === 'string' &&\n !PRESET_COLOR_SET.has(effectiveColor)\n ) {\n style.backgroundColor = effectiveColor;\n style.borderColor = effectiveColor;\n style.color = '#fff';\n }\n if (typeof size === 'number') {\n const s = size;\n style.height = s;\n style.lineHeight = `${s}px`;\n const scale = s / 32;\n style.padding = `0 ${Math.round(12 * scale)}px`;\n style.fontSize = `${Math.round(14 * scale)}px`;\n }\n return style;\n };\n\n const handleClick = useCallback(\n (e: React.MouseEvent, action: string, disabled: boolean) => {\n e.stopPropagation();\n e.preventDefault();\n if (!disabled) {\n switch (action) {\n case 'cancel':\n onCancel?.();\n break;\n case 'save':\n onSave?.(selectedId);\n break;\n case 'create':\n onCreate?.();\n break;\n case 'delete':\n onDelete?.(selectedId);\n break;\n default:\n actionHandlers?.[action as keyof typeof actionHandlers]?.(selectedId);\n break;\n }\n }\n },\n [onCancel, onSave, onCreate, onDelete, actionHandlers, selectedId]\n );\n\n if (!visible) return null;\n\n // 编辑模式下只显示取消和保存\n const editModeButtons = buttons.filter(btn => btn.action === 'cancel' || btn.action === 'save');\n\n // 非编辑模式下的按钮 - 只显示 enabledButtons 中指定的按钮\n const normalButtons = buttons.filter(\n btn => btn.action !== 'cancel' && btn.action !== 'save' && enabledButtons.includes(btn.action)\n );\n\n const buttonsToRender = isEditing ? editModeButtons : normalButtons;\n\n // Context 值\n const contextValue: ToolbarContextValue = {\n classPrefix,\n };\n\n return (\n <ToolbarContext.Provider value={contextValue}>\n <div\n className={[\n classPrefix,\n typeof size === 'string' && size !== 'middle' ? `${classPrefix}--${size}` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${classPrefix}__button-group`}>\n {buttonsToRender.map(btn => {\n // 编辑模式下的取消和保存按钮不受 enabledButtons 限制\n const isEditButton = btn.action === 'cancel' || btn.action === 'save';\n const isEnabled = isEditButton ? true : enabledButtons.includes(btn.action);\n\n // 按钮可用性逻辑:\n // - 未选中地块时:只有 create 按钮可用,其他 needsSelection 按钮禁用\n // - 选中地块时:create 按钮禁用,其他按钮可用\n const isCreateButton = btn.action === 'create';\n const hasSelection = !!selectedId;\n const needsSelection = btn.needsSelection && !hasSelection;\n const createDisabled = isCreateButton && hasSelection;\n const isDisabled =\n !isEnabled || needsSelection || createDisabled || btn.disabled || false;\n\n // 编辑模式下保存按钮的特殊禁用逻辑\n const actualDisabled = btn.action === 'save' ? saveDisabled : isDisabled;\n\n // 自定义显示逻辑\n if (btn.showInEdit === false && isEditing) return null;\n\n const tooltipText = btn.tooltip || (iconOnly ? btn.label : undefined);\n\n return (\n <button\n key={btn.action}\n className={getButtonClassName(btn.variant, btn.color, actualDisabled)}\n style={getButtonStyle(btn.color)}\n onClick={e => handleClick(e, btn.action, actualDisabled)}\n disabled={actualDisabled}\n data-tooltip={tooltipText}\n >\n {btn.icon && <span className={`${classPrefix}__icon`}>{btn.icon}</span>}\n {!iconOnly && <span className={`${classPrefix}__label`}>{btn.label}</span>}\n </button>\n );\n })}\n </div>\n {!isEditing && children && (\n <div className={`${classPrefix}__button-group ${classPrefix}__button-group--custom`}>\n {children}\n </div>\n )}\n </div>\n <Notification ref={notificationRef} onClose={handleNotificationClose} />\n </ToolbarContext.Provider>\n );\n }\n);\n\nBaseEditToolbar.displayName = 'BaseEditToolbar';\n\nexport default BaseEditToolbar;\n","/*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.3';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = create(null);\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Prevent function-based ADD_ATTR / ADD_TAGS from leaking across calls */\n if (!objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n EXTRA_ELEMENT_HANDLING.tagCheck = null;\n }\n if (!objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */\n if (FORBID_ATTR[lcName]) {\n return false;\n }\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/**\n * 图标常量集中管理\n * @description 所有图标相关的常量统一在此文件定义\n */\n\nimport type { IconConfig, ClusterIconConfig } from '../types/icon';\n\n// ==================== 预设图标 ====================\n\n/**\n * 所有预设图标名称列表\n */\nexport const PRESET_ICONS = [\n 'marker',\n 'marker-red',\n 'marker-blue',\n 'marker-green',\n 'marker-orange',\n 'marker-yellow',\n 'pulse',\n 'pulse-red',\n 'pulse-blue',\n 'pulse-green',\n 'pulse-orange',\n 'pulse-purple',\n 'pulse-arrow',\n 'point',\n 'position',\n 'position-red',\n 'drone',\n 'down',\n 'tractor',\n 'tractor-2',\n 'tractorTopdown',\n 'truck',\n 'truck-2',\n 'agri-drone',\n 'agri-drone-side',\n 'loading-spinner',\n 'loading-dots',\n 'monitor',\n 'alert',\n 'flag',\n 'target',\n 'wind',\n 'flag-double',\n] as const;\n\n/** SVG 彩色图标(水滴形 pin) */\nexport const SVG_MARKER_ICONS = [\n 'marker-red',\n 'marker-blue',\n 'marker-green',\n 'marker-orange',\n 'marker-yellow',\n] as const;\n\n/** SVG 脉冲图标(带扩散动画) */\nexport const PULSE_ICONS = [\n 'pulse',\n 'pulse-red',\n 'pulse-blue',\n 'pulse-green',\n 'pulse-orange',\n 'pulse-purple',\n 'pulse-arrow',\n] as const;\n\n/** Loading 加载图标 */\nexport const LOADING_ICONS = ['loading-spinner', 'loading-dots'] as const;\n\n/**\n * SelectIcon 组件中支持自定义颜色的图标\n * @description 用于控制哪些图标在 SelectIcon 中显示颜色选择器\n */\nexport const COLOR_ENABLED_ICONS = [\n 'marker',\n 'pulse',\n 'monitor',\n 'alert',\n 'flag',\n 'target',\n 'wind',\n 'flag-double',\n] as const;\n\n/** 支持自定义颜色的图标(全量) */\nexport const COLOR_SUPPORTED_ICONS = [\n 'marker',\n 'pulse',\n 'tractor',\n 'tractor-2',\n 'truck',\n 'truck-2',\n 'agri-drone',\n 'agri-drone-side',\n 'monitor',\n 'alert',\n 'flag',\n 'target',\n 'wind',\n 'flag-double',\n] as const;\n\n// ==================== 图标分组 ====================\n\n/** 图标分组类型 */\nexport type IconGroupType = 'color' | 'sprite' | 'vehicle';\n\n/** 图标分组项 */\nexport interface IconGroupItem {\n type: string;\n name: string;\n}\n\n/** 图标分组 */\nexport interface IconGroup {\n label: string;\n icons: IconGroupItem[];\n}\n\n/** 默认图标分组 */\nexport const DEFAULT_ICON_GROUPS: IconGroup[] = [\n {\n label: '颜色标记',\n icons: [\n { type: 'marker', name: '颜色位置' },\n { type: 'pulse', name: '颜色脉冲' },\n { type: 'monitor', name: '监测站' },\n { type: 'alert', name: '警示警报' },\n { type: 'flag', name: '旗帜' },\n { type: 'target', name: '靶心' },\n { type: 'wind', name: '风向' },\n { type: 'flag-double', name: '双旗帜' },\n ],\n },\n {\n label: '精灵图',\n icons: [\n { type: 'point', name: '圆点' },\n { type: 'position', name: '定位' },\n { type: 'position-red', name: '红点' },\n { type: 'drone', name: '无人机' },\n { type: 'down', name: '下行' },\n ],\n },\n {\n label: '农机设备',\n icons: [\n { type: 'tractor', name: '拖拉机' },\n { type: 'tractor-2', name: '收割机' },\n { type: 'tractorTopdown', name: '农机(俯视)' },\n { type: 'truck', name: '货车' },\n { type: 'truck-2', name: '三轮货车' },\n { type: 'agri-drone', name: '农业无人机' },\n { type: 'agri-drone-side', name: '无人机(侧视)' },\n ],\n },\n];\n\n/** 所有预设图标的名称映射 */\nexport const ICON_NAME_MAP: Record<string, string> = (() => {\n const map: Record<string, string> = {};\n for (const group of DEFAULT_ICON_GROUPS) {\n for (const icon of group.icons) {\n map[icon.type] = icon.name;\n }\n }\n return map;\n})();\n\n// ==================== 预设尺寸 ====================\n\n/** 预设尺寸列表 - 12的倍数 */\nexport const PRESET_SIZES = [24, 36, 48, 60, 72, 84, 96, 108] as const;\n\n// ==================== 预设颜色 ====================\n\n/** DOMPurify 配置:允许 SVG 动画元素 */\nexport const DOMPURIFY_CONFIG = {\n ADD_TAGS: ['animate', 'animateTransform', 'animateMotion', 'set', 'mpath'],\n ADD_ATTR: [\n 'attributeName',\n 'type',\n 'from',\n 'to',\n 'dur',\n 'repeatCount',\n 'begin',\n 'values',\n 'keyTimes',\n 'keySplines',\n 'calcMode',\n ],\n};\n\n// ==================== 默认图标配置 ====================\n\n/** 标注点默认图标 */\nexport const MARKER_DEFAULT_ICON: IconConfig = {\n icon: 'marker-blue',\n iconSize: [48, 48],\n animated: true,\n};\n\n/** 标注点选中图标 */\nexport const MARKER_DEFAULT_SELECTED_ICON: IconConfig = {\n icon: 'marker-red',\n iconSize: [48, 48],\n animated: true,\n};\n\n/** 标注点编辑中图标 */\nexport const MARKER_DEFAULT_EDIT_ICON: IconConfig = {\n icon: 'marker-yellow',\n iconSize: [48, 48],\n animated: true,\n};\n\n/** 聚合气泡图标 */\nexport const CLUSTER_DEFAULT_ICON: ClusterIconConfig = {\n icon: 'pulse-red',\n iconSize: [48, 48],\n animated: true,\n showCount: false,\n};\n\n/** 轨迹起点图标 */\nexport const TRACK_DEFAULT_START_ICON: IconConfig = {\n icon: 'pulse',\n iconSize: 48,\n iconAnchor: [24, 24],\n animated: true,\n};\n\n/** 轨迹终点图标 */\nexport const TRACK_DEFAULT_END_ICON: IconConfig = {\n icon: 'pulse',\n iconSize: 48,\n iconAnchor: [24, 24],\n animated: true,\n};\n\n/** 轨迹播放图标 */\nexport const TRACKPLAYER_DEFAULT_ICON: IconConfig = {\n icon: 'tractorTopdown',\n iconSize: [48, 48],\n};\n\n/** 灌溉渠进水口图标 */\nexport const DEFAULT_INLET_ICON: IconConfig = {\n icon: 'pulse-green',\n iconSize: [48, 48],\n animated: true,\n};\n\n/** 灌溉渠出水口图标 */\nexport const DEFAULT_OUTLET_ICON: IconConfig = {\n icon: 'pulse-orange',\n iconSize: [48, 48],\n animated: true,\n};\n","/**\n * 图标工具函数\n * @description 统一的图标检测和生成工具,供 Marker、Track、iconCache 等模块使用\n */\n\nimport type { SvgIconConfig, PresetIconName, DetectedIconResult } from '../types/icon';\nimport { PRESET_ICONS, SVG_MARKER_ICONS, PULSE_ICONS, LOADING_ICONS } from '../constants/icon';\n\nconst PRESET_ICONS_SET = new Set(PRESET_ICONS);\n\nfunction isValidUrl(str: string): boolean {\n try {\n // 支持 protocol-relative URLs like \"//cdn.com/img.svg\"\n const url = new URL(str, str.startsWith('//') ? 'https:' : undefined);\n return url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'blob:';\n } catch {\n return false;\n }\n}\n\n/** 判断是否为 Data URL (Base64) */\nfunction isDataUrl(str: string): boolean {\n return str.startsWith('data:');\n}\n\n/**\n * 检测图标类型\n * @description 根据传入的值自动识别图标类型(预设名称、SVG字符串、图片URL)\n * @param value - 图标值,可以是预设名称、SVG字符串、图片URL或SVG配置对象\n * @returns 检测结果,结构符合 DetectedIconResult 判别联合\n * @example\n * detectIconType('point') // { type: 'preset', name: 'point' }\n * detectIconType('marker-red') // { type: 'preset', name: 'marker-red' }\n * detectIconType('<svg>...</svg>') // { type: 'svg', config: '<svg>...</svg>' }\n * detectIconType('https://...') // { type: 'url', src: 'https://...' }\n */\nexport function detectIconType(\n value: string | SvgIconConfig | undefined | null\n): DetectedIconResult {\n if (!value) return { type: 'preset', name: 'point' };\n\n // 预设图标名称\n if (typeof value === 'string' && PRESET_ICONS_SET.has(value as PresetIconName)) {\n return { type: 'preset', name: value as PresetIconName };\n }\n\n // Base64 Data URL\n if (typeof value === 'string' && isDataUrl(value)) {\n return { type: 'url', src: value };\n }\n\n // 图片 URL\n if (typeof value === 'string' && (isValidUrl(value) || isUrlByExtension(value))) {\n return { type: 'url', src: value };\n }\n\n // SVG 字符串\n if (typeof value === 'string' && value.trim().toLowerCase().startsWith('<svg')) {\n return { type: 'svg', config: value };\n }\n\n // SVG 配置对象\n if (typeof value === 'object' && value !== null && value.path) {\n return { type: 'svg', config: value };\n }\n\n // 默认作为预设名称处理\n if (typeof value === 'string') {\n return { type: 'preset', name: value as PresetIconName };\n }\n\n return { type: 'preset', name: 'point' };\n}\n\nfunction isUrlByExtension(value: string): boolean {\n return /\\.(svg|png|jpg|jpeg|gif|webp)$/i.test(value);\n}\n\n/**\n * 判断是否为 URL 图标(兼容旧代码,内部基于 isValidUrl + 后缀)\n */\nexport function isUrlIcon(value: string): boolean {\n return isValidUrl(value) || isUrlByExtension(value);\n}\n\n/** 判断是否为预设图标 */\nexport function isPresetIcon(value: string): boolean {\n return PRESET_ICONS_SET.has(value as PresetIconName);\n}\n\n/**\n * 生成 SVG HTML\n * @description 将 SVG 配置对象转换为 HTML 字符串\n */\nexport function generateSvgHtml(\n svgIcon: string | SvgIconConfig,\n options: {\n iconSize?: [number, number];\n svgColor?: string;\n svgStrokeColor?: string;\n svgStrokeWidth?: number;\n } = {}\n): string {\n const {\n iconSize = [48, 48],\n svgColor = '#e53935',\n svgStrokeColor = '#ffffff',\n svgStrokeWidth = 2,\n } = options;\n\n if (typeof svgIcon === 'string') {\n return svgIcon;\n }\n\n if (typeof svgIcon === 'object' && svgIcon !== null) {\n const {\n path,\n viewBox = '0 0 1024 1024',\n fill = svgColor,\n stroke = svgStrokeColor,\n strokeWidth = svgStrokeWidth,\n } = svgIcon;\n\n if (!path) return '';\n\n // 防 XSS:转义 SVG 属性值中的特殊字符\n const escape = (s: string) =>\n s\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/'/g, '&#39;');\n\n return `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"${escape(viewBox)}\"\n width=\"${iconSize[0]}\"\n height=\"${iconSize[1]}\"\n style=\"overflow: hidden;\"\n >\n <path d=\"${escape(path)}\" fill=\"${escape(fill)}\" stroke=\"${escape(stroke)}\" stroke-width=\"${strokeWidth}\" />\n </svg>\n `;\n }\n\n return '';\n}\n\n/** SVG 配置转字符串键(用于缓存) */\nexport function svgIconToKey(svgIcon: string | SvgIconConfig | null | undefined): string {\n if (!svgIcon) return '';\n if (typeof svgIcon === 'string') return `svg:${svgIcon.slice(0, 50)}`;\n return `svg:${svgIcon.path}:${svgIcon.viewBox || ''}:${svgIcon.fill || ''}:${svgIcon.stroke || ''}`;\n}\n\n/** 重新导出常量供外部使用 */\nexport { SVG_MARKER_ICONS, PULSE_ICONS, LOADING_ICONS };\n","/**\n * 彩色标记 SVG 生成器\n * @description 生成水滴形地图标记 SVG,替代 CSS 绘制方案\n */\n\nimport type { PresetIconName } from '../types/icon';\n\n/** 标记颜色配置 */\nconst MARKER_COLORS: Record<string, string> = {\n 'marker-red': '#e53935',\n 'marker-blue': '#1e88e5',\n 'marker-green': '#43a047',\n 'marker-orange': '#fb8c00',\n 'marker-yellow': '#fdd835',\n};\n\n/** SVG 路径常量 - 水滴形标记 */\nconst PIN_BODY_PATH =\n 'M844.137412 302.742588C844.137412 135.529412 685.778824 0 509.831529 0 333.824 0 179.862588 135.529412 179.862588 302.742588c0 155.045647 326.294588 526.275765 326.294588 526.275765s337.92-366.049882 337.92-526.275765z';\n\n/** 中心镂空圆点路径(与 PIN_BODY_PATH 合并使用 evenodd 实现镂空) */\nconst PIN_DOT_PATH =\n 'M404.660706 313.464471c0-57.223529 49.633882-103.604706 110.71247-103.604706 61.199059 0 110.772706 46.381176 110.772706 103.604706s-49.633882 103.604706-110.772706 103.604705c-61.078588 0-110.712471-46.381176-110.71247-103.604705z';\n\n/** 底部阴影路径 */\nconst PIN_SHADOW_PATH =\n 'M621.447529 838.113882a25.298824 25.298824 0 0 1 1.445647 8.252236c0 28.611765-49.633882 51.802353-110.772705 51.802353-61.078588 0-110.712471-23.190588-110.712471-51.802353 0-2.831059 0.481882-5.601882 1.445647-8.312471-67.041882 11.926588-112.158118 34.334118-112.158118 60.114824 0 38.249412 99.147294 69.089882 221.424942 69.089882 122.277647 0 221.485176-30.840471 221.485176-69.089882-0.060235-25.780706-45.176471-48.188235-112.158118-60.114824z';\n\n/**\n * 获取 SVG 标记的锚点(针尖位置)\n * @description viewBox 0 0 1024 1024 中针尖约在 (512, 829)\n */\nexport function getMarkerAnchor(width: number, height: number): [number, number] {\n return [width * 0.5, height * 0.81];\n}\n\n/**\n * 生成彩色标记 SVG\n * @param iconType - 标记类型(marker/marker-red/blue/green/orange/yellow)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用脉冲动画\n * @param color - 可选的自定义颜色,当 iconType 为 'marker' 时使用此颜色\n * @returns SVG HTML 字符串,非标记类型返回空字符串\n */\nexport function generateMarkerSvg(\n iconType: PresetIconName,\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n // 'marker' 类型使用传入的 color,否则使用预设颜色\n const fillColor = iconType === 'marker' ? color || '#1e88e5' : MARKER_COLORS[iconType];\n if (!fillColor) return '';\n\n // 阴影呼吸动画:以阴影中心 (512, 845) 为缩放原点,独立控制 opacity\n // opacity 0.5→0.15→0.5,scale 1→1.25→1,周期与水滴同步\n const shadowAnim = animated\n ? `<g transform=\"translate(512, 845)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -845)\">`\n : '';\n const shadowAnimClose = animated ? '</g></g></g>' : '';\n\n // 脉冲动画:以水滴中心 (512, 313) 为缩放原点,幅度从 1.06 调大到 1.12\n const bodyAnimOpen = animated\n ? '<g transform=\"translate(512, 313)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.12;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -313)\">'\n : '';\n const bodyAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${shadowAnim}\n <path d=\"${PIN_SHADOW_PATH}\" fill=\"${fillColor}\"/>\n ${shadowAnimClose}\n ${bodyAnimOpen}\n <path d=\"${PIN_BODY_PATH} ${PIN_DOT_PATH}\" fill=\"${fillColor}\" fill-rule=\"evenodd\"/>\n ${bodyAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成位置标记 SVG(简单的圆点标记)\n * @param iconType - 标记类型(position/position-red)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用脉冲动画\n * @returns SVG HTML 字符串\n */\nexport function generatePositionSvg(\n iconType: 'position' | 'position-red',\n width: number,\n height: number,\n animated: boolean\n): string {\n const color = MARKER_COLORS[iconType] || '#1890ff';\n\n // 脉冲动画\n const pulseAnim = animated\n ? `<circle cx=\"50%\" cy=\"50%\" r=\"40%\">\n <animate attributeName=\"r\" values=\"40%;60%;40%\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.6;0.2;0.6\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\n </circle>`\n : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${pulseAnim}\n <circle cx=\"512\" cy=\"512\" r=\"400\" fill=\"${color}\" fill-opacity=\"0.3\"/>\n <circle cx=\"512\" cy=\"512\" r=\"250\" fill=\"${color}\"/>\n <circle cx=\"512\" cy=\"512\" r=\"100\" fill=\"#ffffff\"/>\n </svg>\n `;\n}\n\n/**\n * 生成监测站图标 SVG(气象/环境监测设备)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色(用于主体颜色)\n * @returns SVG HTML 字符串\n */\nexport function generateMonitorSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#009F72';\n // 底座使用稍微深一点的同色系颜色\n const baseColor = adjustColor(mainColor, -20);\n\n // 主体脉冲动画(参照 marker 图标)\n const bodyAnimOpen = animated\n ? '<g transform=\"translate(512, 500)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.12;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -500)\">'\n : '';\n const bodyAnimClose = animated ? '</g></g></g>' : '';\n\n // 底座呼吸动画(参照 marker 阴影动画)\n const baseAnimOpen = animated\n ? '<g transform=\"translate(512, 800)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -800)\">'\n : '';\n const baseAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 底座 -->\n ${baseAnimOpen}\n <path d=\"M624.3 730.9l-0.5 1.2-31.3 73.1-5.1 11.9c-13.3 30.4-42.1 49.3-74.9 49.3-33.6 0-62.5-19.2-75-49.5l-5.2-11.9-31.3-72.8-0.6-1.5c-52.8 20.5-87.5 55-87.5 94.2 0 62.8 89.1 113.8 199.1 113.8s199.1-50.9 199.1-113.8c0-39-34.4-73.5-86.8-94z\" fill=\"${baseColor}\"/>\n ${baseAnimClose}\n\n <!-- 温度计主体 -->\n ${bodyAnimOpen}\n <path d=\"M793.5 87.4c-4.3 0-8.6 0.4-12.9 1.9l-256.1 85.4c-4.3 1.6-8.2 1.9-12.5 1.9-4.3 0-8.2-0.4-12.5-1.9L243.4 89.3c-4.3-1.6-8.6-1.9-12.5-1.9-26.5 0-47.2 27.7-35.9 54.2l245.2 573.8 31.2 72.9 5.1 11.7c6.6 16 21 23.8 35.9 23.8 14.4 0 28.8-7.8 35.9-23.8l5.1-11.7 31.2-72.9L829 141.6c11.2-26.9-9.4-54.2-35.5-54.2z\" fill=\"${mainColor}\"/>\n ${bodyAnimClose}\n </svg>\n `;\n}\n\n/**\n * 调整颜色亮度\n * @param color - 十六进制颜色值\n * @param amount - 调整量(正数变亮,负数变暗)\n */\nfunction adjustColor(color: string, amount: number): string {\n const hex = color.replace('#', '');\n const r = Math.max(0, Math.min(255, parseInt(hex.slice(0, 2), 16) + amount));\n const g = Math.max(0, Math.min(255, parseInt(hex.slice(2, 4), 16) + amount));\n const b = Math.max(0, Math.min(255, parseInt(hex.slice(4, 6), 16) + amount));\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\n/**\n * 生成警示警报图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateAlertSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#d81e06';\n\n // 主体脉冲动画(参照 marker 图标)\n const bodyAnimOpen = animated\n ? '<g transform=\"translate(512, 512)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.12;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -512)\">'\n : '';\n const bodyAnimClose = animated ? '</g></g></g>' : '';\n\n // 底座呼吸动画(参照 marker 阴影动画)\n const baseAnimOpen = animated\n ? '<g transform=\"translate(512, 885)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -885)\">'\n : '';\n const baseAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 顶部圆环 -->\n ${bodyAnimOpen}\n <path d=\"M512 0c-168.821622 0-304.432432 135.610811-304.432432 304.432432s135.610811 304.432432 304.432432 304.432433 304.432432-135.610811 304.432432-304.432433-135.610811-304.432432-304.432432-304.432432z m0 359.783784c-30.443243 0-55.351351-24.908108-55.351351-55.351352s24.908108-55.351351 55.351351-55.351351 55.351351 24.908108 55.351351 55.351351-24.908108 55.351351-55.351351 55.351352z\" fill=\"${mainColor}\"/>\n ${bodyAnimClose}\n\n <!-- 支柱 -->\n <path d=\"M512 553.513514c16.605405 0 27.675676 11.07027 27.675676 27.675675v276.756757c0 16.605405-11.07027 27.675676-27.675676 27.675676s-27.675676-11.07027-27.675676-27.675676v-276.756757c0-16.605405 11.07027-27.675676 27.675676-27.675675z\" fill=\"${mainColor}\"/>\n\n <!-- 底座 -->\n ${baseAnimOpen}\n <path d=\"M747.243243 885.621622c0-71.956757-105.167568-124.540541-235.243243-124.540541s-235.243243 52.583784-235.243243 124.540541 105.167568 124.540541 235.243243 124.54054 235.243243-52.583784 235.243243-124.54054z m-442.810811 0c0-49.816216 91.32973-96.864865 207.567568-96.864865s207.567568 47.048649 207.567568 96.864865-91.32973 96.864865-207.567568 96.864864-207.567568-47.048649-207.567568-96.864864z\" fill=\"${mainColor}\"/>\n <!-- 底座中心实心圆 -->\n <ellipse cx=\"512\" cy=\"885.6\" rx=\"110.7\" ry=\"55.35\" fill=\"${mainColor}\"/>\n ${baseAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成旗帜图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateFlagSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#666666';\n\n // 旗帜飘动动画\n const flagAnimOpen = animated\n ? '<g><animateTransform attributeName=\"transform\" type=\"rotate\" values=\"-5 355 103;5 355 103;-5 355 103\" dur=\"1s\" repeatCount=\"indefinite\"/>'\n : '';\n const flagAnimClose = animated ? '</g>' : '';\n\n // 底座呼吸动画(参照 marker 阴影动画)\n const baseAnimOpen = animated\n ? '<g transform=\"translate(512, 880)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -880)\">'\n : '';\n const baseAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 旗杆 -->\n <path d=\"M268.528941 77.673412a24.094118 24.094118 0 1 1 48.188235 0v805.044706a24.094118 24.094118 0 1 1-48.188235 0V77.703529z\" fill=\"${mainColor}\"/>\n\n <!-- 旗帜主体 -->\n ${flagAnimOpen}\n <path d=\"M355.990588 103.785412v502.362353s100.442353-122.789647 256.783059-55.777883c61.409882 33.430588 117.187765 83.727059 212.118588 83.727059 94.870588 0 156.310588-55.838118 156.310589-55.838117V92.611765s-139.565176 139.535059-312.621177 22.317176c-44.664471-33.490824-122.819765-66.981647-184.229647-50.236235-66.981647 16.745412-128.391529 39.092706-128.391529 39.092706\" fill=\"${mainColor}\"/>\n ${flagAnimClose}\n\n <!-- 底座 -->\n ${baseAnimOpen}\n <path d=\"M374.964706 818.356706a24.094118 24.094118 0 1 1 8.372706-47.465412c97.671529 17.317647 165.797647 60.988235 165.797647 119.055059 0 75.414588-116.284235 126.795294-256.512 126.795294-140.197647 0-256.481882-51.380706-256.481883-126.795294 0-52.976941 56.560941-93.876706 141.101177-113.935059a24.094118 24.094118 0 0 1 11.143529 46.893177c-65.234824 15.450353-104.056471 43.550118-104.05647 67.041882 0 38.038588 91.798588 78.607059 208.293647 78.607059 116.525176 0 208.323765-40.568471 208.323765-78.607059 0-26.593882-48.880941-57.916235-126.012236-71.589647z\" fill=\"${mainColor}\"/>\n ${baseAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成靶心图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateTargetSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#F13F3F';\n\n // 主体脉冲动画(参照 marker 图标)\n const bodyAnimOpen = animated\n ? '<g transform=\"translate(512, 512)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.12;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -512)\">'\n : '';\n const bodyAnimClose = animated ? '</g></g></g>' : '';\n\n // 底座脉冲动画\n const baseAnimOpen = animated\n ? '<g transform=\"translate(512, 1008)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -1008)\">'\n : '';\n const baseAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 底座 -->\n ${baseAnimOpen}\n <path d=\"M462.665 1012.569a49.335 7.821 0 1 0 98.67 0 49.335 7.821 0 1 0-98.67 0z\" fill=\"#8E8E8E\"/>\n <path d=\"M515.61 1008.357h-7.22c-10.228 0-18.05-8.423-18.05-18.05V543.287c0-10.228 8.424-18.05 18.05-18.05h7.22c10.228 0 18.05 8.423 18.05 18.05v447.022c0 10.228-7.822 18.05-18.05 18.05z\" fill=\"#B7B7B7\"/>\n ${baseAnimClose}\n\n <!-- 靶心主体 -->\n ${bodyAnimOpen}\n <path d=\"M237.048 274.952a274.952 274.952 0 1 0 549.904 0 274.952 274.952 0 1 0-549.904 0z\" fill=\"${mainColor}\"/>\n <!-- 中心白点 -->\n <path d=\"M367.004 179.29a48.132 48.132 0 1 0 96.263 0 48.132 48.132 0 1 0-96.263 0z\" fill=\"#FFFFFF\"/>\n ${bodyAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成风向图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateWindSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#CA2F2F';\n\n // 风向标整体上下移动动画\n const arrowAnimOpen = animated\n ? '<g><animateTransform attributeName=\"transform\" type=\"translate\" values=\"0,0;0,-120;0,0\" dur=\"0.8s\" repeatCount=\"indefinite\"/>'\n : '';\n const arrowAnimClose = animated ? '</g>' : '';\n\n // 三角形颜色(基于 mainColor 生成不同深浅)\n const arrowColor1 = adjustColor(mainColor, 40); // 最亮\n const arrowColor2 = adjustColor(mainColor, -20); // 稍暗\n const arrowColor3 = mainColor; // 主色\n\n // 外圈脉冲动画\n const outerAnim = animated\n ? '<g transform=\"translate(512, 800)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.1;1\" dur=\"2s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.3;0.15;0.3\" dur=\"2s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -800)\">'\n : '';\n const outerAnimClose = animated ? '</g></g></g>' : '';\n\n // 内圈脉冲动画\n const innerAnimOpen = animated\n ? '<g transform=\"translate(512, 800)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.15;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.2;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -800)\">'\n : '';\n const innerAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 外圈 -->\n ${outerAnim}\n <path d=\"M97.52381 799.695238a409.6 214.552381 0 1 0 819.2 0 409.6 214.552381 0 1 0-819.2 0Z\" fill=\"${mainColor}\" opacity=\"0.3\"/>\n ${outerAnimClose}\n\n <!-- 中圈 -->\n ${innerAnimOpen}\n <path d=\"M273.066667 799.695238a234.057143 136.533333 0 1 0 468.114285 0 234.057143 136.533333 0 1 0-468.114285 0Z\" fill=\"${mainColor}\" opacity=\"0.5\"/>\n ${innerAnimClose}\n\n <!-- 内圈 -->\n <path d=\"M409.6 799.695238a97.52381 39.009524 0 1 0 195.047619 0 97.52381 39.009524 0 1 0-195.047619 0Z\" fill=\"${mainColor}\"/>\n\n <!-- 风向标整体(上下移动) -->\n ${arrowAnimOpen}\n <path d=\"M504.734476 655.36L500.297143 97.889524 781.165714 0z\" fill=\"${arrowColor1}\"/>\n <path d=\"M504.734476 655.36L500.297143 97.889524 219.428571 0z\" fill=\"${arrowColor2}\"/>\n <path d=\"M500.297143 97.889524L781.165714 0H219.428571z\" fill=\"${arrowColor3}\"/>\n ${arrowAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成双旗帜图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateFlagDoubleSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#5CE68F';\n const secondaryColor = adjustColor(mainColor, 30); // 浅一点的颜色\n\n // 左侧旗帜上下移动动画\n const leftFlagAnimOpen = animated\n ? '<g><animateTransform attributeName=\"transform\" type=\"translate\" values=\"0,0;0,-50;0,0\" dur=\"1.5s\" repeatCount=\"indefinite\"/>'\n : '';\n const leftFlagAnimClose = animated ? '</g>' : '';\n\n // 右侧旗帜上下移动动画(错开相位)\n const rightFlagAnimOpen = animated\n ? '<g><animateTransform attributeName=\"transform\" type=\"translate\" values=\"0,-50;0,0;0,-50\" dur=\"1.5s\" repeatCount=\"indefinite\" begin=\"0.3s\"/>'\n : '';\n const rightFlagAnimClose = animated ? '</g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1032 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 左侧旗帜 -->\n ${leftFlagAnimOpen}\n <path d=\"M557.967771 161.749158H151.200657L57.682634 306.078735l93.518023 134.252539H557.967771\" fill=\"${secondaryColor}\" stroke=\"#6E6E96\" stroke-width=\"3\"/>\n <path d=\"M557.967771 471.078947H151.196557a30.743573 30.743573 0 0 1-25.229491-13.172303L32.453144 323.654105a30.747673 30.747673 0 0 1-0.573957-34.293905l93.518022-144.329576a30.747673 30.747673 0 0 1 25.803448-14.029139h406.771214c16.985015 0 30.747673 13.766758 30.747673 30.747673s-13.762658 30.747673-30.747673 30.747673H167.915092L94.723331 305.459682l72.531711 104.123919H557.967771c16.985015 0 30.747673 13.766758 30.747673 30.747673s-13.762658 30.747673-30.747673 30.747673z\" fill=\"#6E6E96\" stroke=\"#6E6E96\" stroke-width=\"3\"/>\n ${leftFlagAnimClose}\n\n <!-- 右侧旗帜 -->\n ${rightFlagAnimOpen}\n <path d=\"M577.084624 439.449841h304.270772l93.513922 144.395172-93.513922 134.334533h-304.270772\" fill=\"${mainColor}\" stroke=\"#6E6E96\" stroke-width=\"3\"/>\n <path d=\"M881.355396 748.927218h-304.270772c-16.985015 0-30.747673-13.762658-30.747673-30.747672s13.762658-30.747673 30.747673-30.747673h288.212287l72.53581-104.205914-73.19586-113.028445h-287.552237c-16.985015 0-30.747673-13.766758-30.747673-30.747673s13.762658-30.747673 30.747673-30.747673h304.270772a30.747673 30.747673 0 0 1 25.807547 14.033238l93.513922 144.395172a30.747673 30.747673 0 0 1-0.573956 34.281605l-93.513923 134.334533a30.747673 30.747673 0 0 1-25.23359 13.180502z\" fill=\"#6E6E96\" stroke=\"#6E6E96\" stroke-width=\"3\"/>\n ${rightFlagAnimClose}\n\n <!-- 旗杆 -->\n <path d=\"M577.084624 1012.311785h-106.546836a30.747673 30.747673 0 0 1-30.747673-30.747673V409.739389a30.747673 30.747673 0 0 1 61.495346 0v541.07705h45.05149V78.504958h-45.05149v52.656415a30.747673 30.747673 0 0 1-61.495346 0V47.757286a30.747673 30.747673 0 0 1 30.747673-30.747673h106.546836a30.747673 30.747673 0 0 1 30.747673 30.747673v933.806826c0 16.985015-13.762658 30.747673-30.747673 30.747673z\" fill=\"#6E6E96\"/>\n </svg>\n `;\n}\n","/**\n * 同心圆脉冲图标 SVG 生成器\n * @description 生成带扩散/收缩脉冲动画的同心圆地图标记 SVG\n */\n\nimport type { PresetIconName } from '../types/icon';\n\n/** 脉冲图标颜色配置 */\nconst PULSE_COLORS: Record<string, { outer: string; inner: string }> = {\n 'pulse-blue': { outer: '#D7EDFE', inner: '#409FFF' },\n 'pulse-green': { outer: '#D4EDDA', inner: '#52C41A' },\n 'pulse-red': { outer: '#F8D7DA', inner: '#E53935' },\n 'pulse-orange': { outer: '#FFE0B2', inner: '#FB8C00' },\n 'pulse-purple': { outer: '#E8DAEF', inner: '#7C4DFF' },\n 'pulse-arrow': { outer: '#FFB199', inner: '#FF6C35' },\n};\n\n/**\n * 生成同心圆脉冲图标 SVG\n * @param iconType - 标记类型(pulse/pulse-blue/green/red/orange/purple/arrow)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用脉冲动画\n * @param color - 可选的自定义颜色,当 iconType 为 'pulse' 时使用此颜色\n * @returns SVG HTML 字符串,非脉冲图标返回空字符串\n */\nexport function generatePulseSvg(\n iconType: PresetIconName,\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n // 'pulse' 类型使用传入的 color 生成双色脉冲\n if (iconType === 'pulse') {\n const pulseColor = color || '#52c41a';\n return generateUniversalPulseSvg(width, height, animated, pulseColor);\n }\n\n const colors = PULSE_COLORS[iconType];\n if (!colors) return '';\n\n // pulse-arrow 特殊处理:带箭头的脉冲图标\n if (iconType === 'pulse-arrow') {\n return generatePulseArrowSvg(width, height, animated, colors);\n }\n\n // 外圈扩散动画:从 r=256 放大到 r=384 同时 opacity 从 1→0,模拟波纹\n const outerAnim = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${colors.outer}\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"1;0;1\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>\n <circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${colors.outer}\" opacity=\"0.6\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"2s\" begin=\"0.7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"0.6;0;0.6\" dur=\"2s\" begin=\"0.7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"320\" fill=\"${colors.outer}\"/>`;\n\n // 内圈收缩动画:从 r=160 缩小到 r=120 再恢复\n const innerAnim = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${colors.inner}\">\n <animate attributeName=\"r\" values=\"160;120;160\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${colors.inner}\"/>`;\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${outerAnim}\n ${innerAnim}\n </svg>\n `;\n}\n\n/**\n * 生成通用脉冲图标 SVG(使用自定义颜色)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用脉冲动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nfunction generateUniversalPulseSvg(\n width: number,\n height: number,\n animated: boolean,\n color: string\n): string {\n // 将颜色转换为外圈浅色版本(添加透明度)\n const outerColor = `${color}30`; // 约 20% 透明度\n\n // 外圈扩散动画\n const outerAnim = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${outerColor}\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"1;0;1\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>\n <circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${outerColor}\" opacity=\"0.6\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"2s\" begin=\"0.7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"0.6;0;0.6\" dur=\"2s\" begin=\"0.7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"320\" fill=\"${outerColor}\"/>`;\n\n // 内圈收缩动画\n const innerAnim = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${color}\">\n <animate attributeName=\"r\" values=\"160;120;160\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${color}\"/>`;\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${outerAnim}\n ${innerAnim}\n </svg>\n `;\n}\n\n/**\n * 生成带箭头的脉冲图标 SVG\n * @description 圆形脉冲 + 中间箭头向前动画\n */\nfunction generatePulseArrowSvg(\n width: number,\n height: number,\n animated: boolean,\n colors: { outer: string; inner: string }\n): string {\n // 外圈脉冲动画:与普通脉冲图标保持一致(r=256)\n const outerPulse = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${colors.outer}\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"1.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"1;0;1\" dur=\"1.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>\n <circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${colors.outer}\" opacity=\"0.6\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"1.5s\" begin=\"0.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"0.6;0;0.6\" dur=\"1.5s\" begin=\"0.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"320\" fill=\"${colors.outer}\"/>`;\n\n // 内圈脉冲动画:与普通脉冲图标保持一致(r=160)\n const innerPulse = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${colors.inner}\">\n <animate attributeName=\"r\" values=\"160;120;160\" dur=\"1.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${colors.inner}\"/>`;\n\n // 箭头向前动画:向右平移(三角形箭头,适配内圈 r=160)\n const arrowAnim = animated\n ? `<g>\n <animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0;18 0;0 0\" dur=\"0.8s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <path d=\"M460 440 L580 512 L460 584 Z\" fill=\"#FFFFFF\"/>\n </g>`\n : `<path d=\"M460 440 L580 512 L460 584 Z\" fill=\"#FFFFFF\"/>`;\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${outerPulse}\n ${innerPulse}\n ${arrowAnim}\n </svg>\n `;\n}\n\n/** 所有脉冲图标名称列表 */\nexport const PULSE_ICONS: PresetIconName[] = [\n 'pulse',\n 'pulse-blue',\n 'pulse-green',\n 'pulse-red',\n 'pulse-orange',\n 'pulse-purple',\n 'pulse-arrow',\n];\n\n/**\n * 生成 Loading Spinner 图标 SVG\n * @description 旋转圆环加载动画\n */\nexport function generateLoadingSpinnerSvg(\n width: number,\n height: number,\n animated: boolean\n): string {\n const rotateAnim = animated\n ? '<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 512 512\" to=\"360 512 512\" dur=\"1s\" repeatCount=\"indefinite\"/>'\n : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <g>${rotateAnim}\n <circle cx=\"512\" cy=\"512\" r=\"360\" fill=\"none\" stroke=\"#E0E0E0\" stroke-width=\"40\"/>\n <path d=\"M512 152 A360 360 0 0 1 872 512\" fill=\"none\" stroke=\"#1890FF\" stroke-width=\"40\" stroke-linecap=\"round\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成 Loading Dots 图标 SVG\n * @description 跳动圆点加载动画\n */\nexport function generateLoadingDotsSvg(width: number, height: number, animated: boolean): string {\n const dotRadius = 60;\n const spacing = 180;\n const centerX = 512 - spacing;\n const centerY = 512;\n const colors = ['#1890FF', '#52C41A', '#FAAD14'];\n const dots: string[] = [];\n\n for (let i = 0; i < 3; i++) {\n const x = centerX + i * spacing;\n const bounceAnim = animated\n ? `<animate attributeName=\"cy\" values=\"${centerY};${centerY - 80};${centerY}\" dur=\"0.6s\" begin=\"${i * 0.15}s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>`\n : '';\n dots.push(\n `<circle cx=\"${x}\" cy=\"${centerY}\" r=\"${dotRadius}\" fill=\"${colors[i]}\" opacity=\"0.9\">${bounceAnim}</circle>`\n );\n }\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${dots.join('\\n ')}\n </svg>\n `;\n}\n\n/** 所有 Loading 图标名称列表 */\nexport const LOADING_ICONS: PresetIconName[] = ['loading-spinner', 'loading-dots'];\n","/**\n * LRU 缓存工具类\n * @description 实现最近最少使用(Least Recently Used)缓存策略\n * @template K - 缓存键类型\n * @template V - 缓存值类型\n */\n\nexport class LRUCache<K, V> {\n private cache = new Map<K, V>();\n private maxSize_: number;\n\n constructor(maxSize = 200) {\n if (maxSize <= 0) {\n throw new Error('LRUCache: maxSize must be greater than 0');\n }\n this.maxSize_ = maxSize;\n }\n\n /**\n * 获取缓存值\n * @description 访问缓存时会将被访问元素移到末尾(最近使用位置)\n * @param key - 缓存键\n * @returns 缓存值,不存在返回 undefined\n */\n get(key: K): V | undefined {\n if (!this.cache.has(key)) {\n return undefined;\n }\n // 将访问的元素移到末尾(标记为最近使用)\n const value = this.cache.get(key)!;\n this.cache.delete(key);\n this.cache.set(key, value);\n return value;\n }\n\n /**\n * 设置缓存值\n * @description 如果缓存已满,删除最久未使用的元素\n * @param key - 缓存键\n * @param value - 缓存值\n */\n set(key: K, value: V): void {\n // 如果已存在,先删除(稍后会添加到末尾)\n if (this.cache.has(key)) {\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize_) {\n // 缓存已满,删除最久未使用的元素(第一个元素)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n // 添加到末尾(最近使用位置)\n this.cache.set(key, value);\n }\n\n /**\n * 检查键是否存在\n */\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n /**\n * 删除指定键\n */\n delete(key: K): boolean {\n return this.cache.delete(key);\n }\n\n /**\n * 清空缓存\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * 获取缓存大小\n */\n get size(): number {\n return this.cache.size;\n }\n\n /**\n * 获取最大缓存容量\n */\n get maxSize(): number {\n return this.maxSize_;\n }\n\n /**\n * 获取所有缓存键(按访问时间排序,从最早到最近)\n */\n keys(): IterableIterator<K> {\n return this.cache.keys();\n }\n\n /**\n * 获取所有缓存值(按访问时间排序,从最早到最近)\n */\n values(): IterableIterator<V> {\n return this.cache.values();\n }\n\n /**\n * 获取缓存统计信息\n */\n getStats(): { size: number; maxSize: number; utilization: number } {\n return {\n size: this.cache.size,\n maxSize: this.maxSize,\n utilization: this.cache.size / this.maxSize,\n };\n }\n}\n\nexport default LRUCache;\n","/**\n * SVG 安全处理工具\n * @description 统一的 SVG 清理、解析、生成工具,防止 XSS 注入\n *\n * ## 核心功能\n *\n * - SVG 安全清理:移除 script 标签和危险事件属性\n * - HTML 转义:防止 XSS 注入攻击\n * - 容器构建:统一的 SVG 容器 HTML 生成\n *\n * @packageDocumentation\n */\n\n/**\n * 使用 DOMParser 安全解析并清理 SVG 字符串,防止 XSS 注入\n * @description 移除 script 标签和危险事件属性 (onload, onerror, onmouseover, onclick)\n * @param svgString - 原始 SVG 字符串\n * @returns 清理后的 SVG 字符串\n */\nexport function sanitizeSvg(svgString: string): string {\n if (typeof DOMParser === 'undefined') return svgString;\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgString, 'image/svg+xml');\n const parseError = doc.querySelector('parsererror');\n if (parseError) return '';\n\n // 移除 script 标签\n doc.querySelectorAll('script').forEach(el => el.remove());\n\n // 移除危险事件属性\n const dangerousAttrs = ['onload', 'onerror', 'onmouseover', 'onclick'];\n doc.querySelectorAll('*').forEach(el => {\n dangerousAttrs.forEach(attr => el.removeAttribute(attr));\n });\n\n return new XMLSerializer().serializeToString(doc.documentElement);\n}\n\n/**\n * 防 XSS:转义 SVG 属性值中的特殊字符\n * @param s - 需要转义的字符串\n * @returns 转义后的字符串\n */\nexport function escapeSvgAttr(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/'/g, '&#39;');\n}\n\n/**\n * SVG 容器配置选项\n */\nexport interface SvgContainerOptions {\n /** CSS 类名 */\n className?: string;\n /** 是否启用动画 */\n animated?: boolean;\n /** 额外内联样式 */\n extraStyle?: string;\n /** 是否居中内容 */\n centerContent?: boolean;\n}\n\n/**\n * 构建 SVG 容器 HTML\n * @param content - 容器内部 HTML 内容\n * @param size - 容器尺寸 [width, height]\n * @param options - 容器配置选项\n * @returns 容器 HTML 字符串\n */\nexport function buildSvgContainer(\n content: string,\n size: [number, number],\n options: SvgContainerOptions = {}\n): string {\n const { className = '', animated = false, extraStyle = '', centerContent = false } = options;\n\n const animatedClass = animated ? 'animated' : '';\n const centerStyle = centerContent\n ? `\n display: flex;\n align-items: center;\n justify-content: center;\n `\n : '';\n\n return `<div class=\"${className} ${animatedClass}\" style=\"\n width: ${size[0]}px;\n height: ${size[1]}px;\n ${centerStyle}\n filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n ${extraStyle}\n \">${content}</div>`;\n}\n","/**\n * @fileoverview 农机/载具 SVG 图标生成器\n * @description 从 iconCache.ts 提取的大型内联 SVG 生成函数\n * @module utils/icons\n */\n\n/**\n * 生成拖拉机 SVG(内联,带车轮旋转动画)\n */\nexport function generateTractorSvg(width: number, height: number, animated: boolean): string {\n const animateFront = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 833.6 845.92\" to=\"360 833.6 845.92\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateRear = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 255.704 780.616\" to=\"360 255.704 780.616\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -14; 0 3; 0 -10; 0 0\" dur=\"0.4s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n return `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 1024 950\"\n width=\"${width}\"\n height=\"${height}\"\n style=\"overflow: hidden; display: block;\"\n >\n <!-- 车身 -->\n <g class=\"tractor-body\">${animateBody}\n <path d=\"M744.624 247.944m30 0l4.72 0q30 0 30 30l0 165.592q0 30-30 30l-4.72 0q-30 0-30-30l0-165.592q0-30 30-30Z\" fill=\"#EEBB4D\"/>\n <path d=\"M124.144 369.432h657.144a168 168 0 0 1 168 168v270.792H84.144V409.432a40 40 0 0 1 40-40z\" fill=\"#80BC50\"/>\n <path d=\"M176.392 186.16h72.52v183.264h-72.52z\" fill=\"#E0AA3D\"/>\n <path d=\"M541.296 186.16h72.52v183.264h-72.52z\" fill=\"#EEBB4D\"/>\n <path d=\"M96.936 47.48m40 0l516.344 0q40 0 40 40l0 58.68q0 40-40 40l-516.344 0q-40 0-40-40l0-58.68q0-40 40-40Z\" fill=\"#184D47\"/>\n <path d=\"M512 369.432H124.144a40 40 0 0 0-40 40v398.792H512z\" fill=\"#75B23F\"/>\n <path d=\"M868 591.432h81.272v55.728H868a26.48 26.48 0 0 1-26.48-26.48v-2.76a26.48 26.48 0 0 1 26.48-26.48z\" fill=\"#D6EFC7\"/>\n <path d=\"M84.144 497.6h389.712a16 16 0 0 0 0-32H84.144z\" fill=\"#E0AA3D\"/>\n <path d=\"M512 47.48H136.936a40 40 0 0 0-40 40v58.68a40 40 0 0 0 40 40H512z\" fill=\"#0E3D36\"/>\n </g>\n <!-- 前轮(小轮,中心 833.6,845.92,半径130.6) -->\n <g class=\"tractor-frontend-wheel\">\n ${animateFront}\n <path d=\"M833.6 845.92m-130.6 0a130.6 130.6 0 1 0 261.2 0 130.6 130.6 0 1 0-261.2 0Z\" fill=\"#184D47\"/>\n <path d=\"M833.6 892.36a46.4 46.4 0 1 1 46.4-46.44 46.496 46.496 0 0 1-46.4 46.44z\" fill=\"#D6EFC7\"/>\n <line x1=\"833.6\" y1=\"745.92\" x2=\"833.6\" y2=\"945.92\" stroke=\"#D6EFC7\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n <line x1=\"733.6\" y1=\"845.92\" x2=\"933.6\" y2=\"845.92\" stroke=\"#D6EFC7\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n <line x1=\"763\" y1=\"775.32\" x2=\"904.2\" y2=\"916.52\" stroke=\"#D6EFC7\" stroke-width=\"8\" stroke-linecap=\"round\"/>\n <line x1=\"904.2\" y1=\"775.32\" x2=\"763\" y2=\"916.52\" stroke=\"#D6EFC7\" stroke-width=\"8\" stroke-linecap=\"round\"/>\n </g>\n <!-- 后轮(大轮,中心 255.704,780.616,半径195.904) -->\n <g class=\"tractor-rear-wheel\">\n ${animateRear}\n <path d=\"M255.704 780.616m-195.904 0a195.904 195.904 0 1 0 391.808 0 195.904 195.904 0 1 0-391.808 0Z\" fill=\"#0E3D36\"/>\n <path d=\"M255.704 850.28a69.664 69.664 0 1 1 69.656-69.664 69.736 69.736 0 0 1-69.656 69.664z\" fill=\"#C2DDB1\"/>\n <line x1=\"255.704\" y1=\"634.72\" x2=\"255.704\" y2=\"926.52\" stroke=\"#C2DDB1\" stroke-width=\"12\" stroke-linecap=\"round\"/>\n <line x1=\"110\" y1=\"780.616\" x2=\"401.408\" y2=\"780.616\" stroke=\"#C2DDB1\" stroke-width=\"12\" stroke-linecap=\"round\"/>\n <line x1=\"152.1\" y1=\"677\" x2=\"359.3\" y2=\"884.2\" stroke=\"#C2DDB1\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n <line x1=\"359.3\" y1=\"677\" x2=\"152.1\" y2=\"884.2\" stroke=\"#C2DDB1\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成收割机 SVG(内联,带车轮旋转动画)\n * 红色收割机/工程车图标\n */\nexport function generateTractor2Svg(width: number, height: number, animated: boolean): string {\n const animateFront = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 195.2 794.8\" to=\"360 195.2 794.8\" dur=\"0.8s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateRear = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 1059.7 697.2\" to=\"360 1059.7 697.2\" dur=\"0.8s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -12; 0 4; 0 -8; 0 2; 0 0\" dur=\"0.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.6 1;0.5 0 0.5 1;0.3 0 0.7 1;0.4 0 0.2 1\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1422 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 车身结构 -->\n <g class=\"tractor2-body\">${animateBody}\n <path d=\"M1171.228444 394.268444l64.711112 24.035556 18.972444-59.619556-64.711111-24.035555-18.972445 59.619555\" fill=\"#85A7BD\"/>\n <path d=\"M1171.228444 330.012444l77.169778 32.512 6.513778-23.239111-77.169778-32.540444-6.513778 23.267555\" fill=\"#051013\"/>\n <path d=\"M278.869333 446.179556l83.655111-18.289778-25.486222-37.489778-44.942222 9.870222-13.226667 45.909334\" fill=\"#141E25\"/>\n <path d=\"M286.435556 418.304l48.213333-9.500444-7.594667-46.279112-48.184889 9.415112 7.566223 46.364444\" fill=\"#010C13\"/>\n <path d=\"M281.059556 395.064889l53.589333-4.096-2.218667-5.205333-53.560889 4.096 2.190223 5.205333\" fill=\"#69858E\"/>\n <path d=\"M276.309333 358.115556c0.341333 2.901333 2.275556 4.835556 4.266667 4.323555 1.991111-0.540444 3.299556-3.328 2.958222-6.257778l-2.104889-17.095111c-0.369778-2.929778-2.275556-4.892444-4.266666-4.352-1.991111 0.540444-3.299556 3.299556-2.958223 6.257778l2.104889 17.095111\" fill=\"#1D2C36\"/>\n <path d=\"M254.520889 362.524444l80.128-11.719111-3.555556-16.156444-80.099555 11.719111 3.527111 16.156444\" fill=\"#1D2C36\"/>\n <path d=\"M259.982222 362.524444l73.614222-10.183111 1.052445-17.692444-83.655111 11.52 8.96 16.355555\" fill=\"#FFFFFE\"/>\n <path d=\"M251.022222 334.648889c-0.512-7.111111 3.498667-13.653333 9.614222-14.904889l60.586667-12.771556c6.087111-1.28 11.776 3.242667 13.425778 10.097778l-83.626667 17.578667\" fill=\"#1D2C36\"/>\n <path d=\"M439.381333 390.4h34.702223V229.745778c0-26.624-14.506667-57.031111-33.763556-70.712889l-27.591111-19.598222-22.328889 22.471111 27.591111 19.569778c10.097778 7.168 21.390222 29.354667 21.390222 48.270222v160.654222\" fill=\"#6E8FA1\"/>\n <path d=\"M474.083556 390.4h-55.779556v-83.626667h55.751111z\" fill=\"#85A7BD\"/>\n <!-- 主车身(红色) -->\n <path d=\"M139.434667 781.511111c0 14.961778 12.231111 27.192889 27.136 27.192889h893.895111c14.904889 0 27.107556-12.231111 27.107555-27.192889v-479.857778c0-14.961778-12.003556-25.031111-26.680889-22.357333L166.144 449.479111c-14.705778 2.673778-26.709333 17.066667-26.709333 32.028445v300.003555\" fill=\"#CC3539\"/>\n <path d=\"M139.434667 501.959111v-10.979555c0-15.644444 12.003556-30.748444 26.709333-33.564445L1060.892444 279.324444c14.677333-2.787556 26.680889 7.736889 26.680889 23.381334v28.529778L139.434667 501.959111\" fill=\"#E05755\"/>\n <path d=\"M1087.573333 669.297778v88.945778c0 12.430222-12.202667 22.584889-27.107555 22.584888H166.570667c-14.933333 0-27.136-10.154667-27.136-22.584888V669.297778h948.138666\" fill=\"#B02A2F\"/>\n <path d=\"M1087.573333 725.048889v53.077333c0 16.839111-12.202667 30.577778-27.107555 30.577778H166.570667c-14.933333 0-27.136-13.738667-27.136-30.577778V725.048889h948.138666\" fill=\"#8B2225\"/>\n <path d=\"M780.828444 808.704h-139.434666v-27.875556h139.434666z\" fill=\"#85A7BD\"/>\n <path d=\"M641.393778 725.048889h-278.869334v-27.875556h278.869334z\" fill=\"#85A7BD\"/>\n <path d=\"M780.828444 780.828444h-167.310222v-27.875555h167.310222z\" fill=\"#1B1A1C\"/>\n <path d=\"M780.828444 641.393778h-167.310222v-27.875556h167.310222z\" fill=\"#1B1A1C\"/>\n <path d=\"M836.608 864.483556h-250.993778v-27.875556h250.993778z\" fill=\"#1B1A1C\"/>\n <path d=\"M1059.697778 529.834667H613.518222v-27.875556h446.179556z\" fill=\"#1B1A1C\"/>\n <path d=\"M139.434667 696.718222v-166.4a5.831111 5.831111 0 0 1 2.247111-0.483555h74.695111c3.697778 0 6.712889 3.498667 6.712889 7.822222v151.694222c0 4.323556-3.015111 7.822222-6.712889 7.822222H141.653333a5.831111 5.831111 0 0 1-2.247111-0.455111\" fill=\"#051013\"/>\n <path d=\"M139.434667 531.712c0 1.536 1.336889 2.787556 2.986666 2.787556h77.653334c1.678222 0 3.015111-1.251556 3.015111-2.787556v-3.726222c0-1.536-1.336889-2.787556-2.986667-2.787556h-77.653333c-1.678222 0-3.015111 1.251556-3.015111 2.787556v3.726222M139.434667 559.616c0 1.536 1.336889 2.759111 2.986666 2.759111h77.653334c1.678222 0 3.015111-1.223111 3.015111-2.759111v-3.754667c0-1.536-1.336889-2.787556-2.986667-2.787555h-77.653333c-1.678222 0-3.015111 1.251556-3.015111 2.787555v3.754667M139.434667 587.491556c0 1.536 1.336889 2.787556 2.986666 2.787555h77.653334c1.678222 0 3.015111-1.251556 3.015111-2.787555v-3.726223c0-1.536-1.336889-2.787556-2.986667-2.787555h-77.653333c-1.678222 0-3.015111 1.251556-3.015111 2.787555v3.697778\" fill=\"#85A7BD\"/>\n <path d=\"M139.434667 587.491556c0 1.536 1.336889 2.787556 2.986666 2.787555h77.653334c1.678222 0 3.015111-1.251556 3.015111-2.787555v-3.754667c0-1.507556-1.336889-2.759111-2.986667-2.759111h-77.653333c-1.678222 0-3.015111 1.251556-3.015111 2.759111v3.754667\" fill=\"#85A7BD\"/>\n <!-- 驾驶室 -->\n <path d=\"M613.518222 501.959111h557.710222L1107.512889 0H668.387556l-54.897778 501.959111\" fill=\"#CC3539\"/>\n <path d=\"M641.393778 501.959111h474.083555L1061.262222 0H688.071111l-46.648889 501.959111\" fill=\"#56ABBF\"/>\n <path d=\"M669.297778 83.655111h191.374222l72.362667-55.751111h121.400889-380.131556l-5.034667 55.751111m350.577778 0h32.625778l7.224889-5.575111-2.446222-23.239111-37.404445 28.814222\" fill=\"#3C7381\"/>\n <path d=\"M948.138667 278.869333h140.060444l27.278222 250.965334h-167.338666V278.869333\" fill=\"#1F4550\"/>\n <path d=\"M1003.918222 501.959111H613.546667l17.92-195.214222h372.48v195.214222\" fill=\"#1F4550\"/>\n <path d=\"M636.672 446.179556l9.443556-55.751112-9.443556 55.751112\" fill=\"#97C4C3\"/>\n <path d=\"M1064.391111 111.559111l-9.386667-55.779555 9.386667 55.751111\" fill=\"#DC8063\"/>\n <path d=\"M697.173333 334.648889h75.207111l287.288889-202.040889-5.575111-48.924444 0.568889 5.063111h-7.822222L697.173333 334.648889\" fill=\"#97C4C3\"/>\n <path d=\"M1055.004444 88.32h9.386667l-0.682667-9.301333-8.732444 9.301333\" fill=\"#7E9B9B\"/>\n <path d=\"M641.393778 418.304l139.434666-83.655111h-72.817777l-61.155556 36.693333-5.461333 46.933334\" fill=\"#667777\"/>\n <path d=\"M641.393778 334.648889h27.136L1031.822222 83.626667h-165.831111l-214.243555 148.024889-10.353778 102.968888\" fill=\"#97C4C3\"/>\n <path d=\"M1061.12 55.751111l-2.844444-27.875555 2.844444 27.875555\" fill=\"#DC8063\"/>\n <path d=\"M1061.12 55.751111l-2.844444-27.875555 2.844444 27.875555\" fill=\"#97C4C3\"/>\n <path d=\"M864.483556 83.655111h158.065777l37.148445-28.814222-2.787556-26.965333h-120.547555l-71.879111 55.779555\" fill=\"#7E9B9B\"/>\n <path d=\"M641.393778 362.524444l27.875555-27.875555h-25.941333l-1.934222 27.875555\" fill=\"#667777\"/>\n <path d=\"M892.387556 529.834667h-27.875556V27.875556h27.875556z\" fill=\"#CC3539\"/>\n <!-- 挡泥板 -->\n <path d=\"M697.201778 709.774222c0.113778-51.768889 10.325333-101.148444 28.728889-146.033778a374.613333 374.613333 0 0 1 131.328-165.034666 351.772444 351.772444 0 0 1 343.324444-34.588445c65.024 28.472889 120.291556 76.003556 159.402667 135.879111a384.369778 384.369778 0 0 1 62.208 209.777778l0.028444 15.189334-29.297778 0.085333v-15.189333a355.669333 355.669333 0 0 0-26.453333-134.257778 344.547556 344.547556 0 0 0-120.718222-151.722667A323.185778 323.185778 0 0 0 930.133333 392.106667c-59.704889 26.168889-110.563556 69.888-146.488889 124.928a353.109333 353.109333 0 0 0-57.173333 192.853333l-0.056889 15.160889-29.297778-0.085333 0.056889-15.189334\" fill=\"#962427\"/>\n <!-- 顶部栏杆 -->\n <path d=\"M641.393778 42.752c0 7.196444 3.612444 13.027556 8.049778 13.027556h457.955555c4.465778 0 8.078222-5.831111 8.078222-13.027556V13.027556c0-7.196444-3.612444-13.027556-8.049777-13.027556h-457.955556c-4.465778 0-8.078222 5.831111-8.078222 13.027556v29.724444\" fill=\"#CC3539\"/>\n <path d=\"M1115.477333 27.875556v15.388444c0 6.912-3.612444 12.515556-8.049777 12.515556h-457.955556c-4.465778 0-8.078222-5.603556-8.078222-12.515556v-15.36h474.083555\" fill=\"#852124\"/>\n <!-- 前结构 -->\n <path d=\"M641.393778 864.483556h-27.875556V557.738667h27.875556z\" fill=\"#1B1A1C\"/>\n <path d=\"M529.834667 641.393778h-139.434667v-111.559111h139.434667z\" fill=\"#141E25\"/>\n <path d=\"M529.834667 669.297778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n <path d=\"M501.959111 669.297778h-27.875555v-111.559111h27.875555z\" fill=\"#4F656A\"/>\n <path d=\"M474.083556 669.297778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n <path d=\"M446.179556 641.393778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n <path d=\"M446.179556 641.393778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n <path d=\"M418.304 641.393778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n </g>\n <!-- 前轮组(齿轮+轮胎,中心 195.2,794.8) -->\n <g class=\"tractor2-front-wheel\">\n ${animateFront}\n <path d=\"M11.292444 781.312h5.518223c1.251556-17.038222 4.835556-33.479111 10.467555-49.009778l-5.006222-1.991111a10.382222 10.382222 0 0 1-6.058667-13.880889l2.360889-5.262222a11.605333 11.605333 0 0 1 14.791111-5.660444l5.063111 1.991111a194.332444 194.332444 0 0 1 28.672-39.964445l-3.925333-3.640889a10.126222 10.126222 0 0 1 0-14.990222l4.323556-4.039111a11.861333 11.861333 0 0 1 15.985777 0l3.896889 3.640889c13.084444-10.695111 27.676444-19.854222 43.377778-27.221333l-2.104889-4.750223a10.382222 10.382222 0 0 1 6.115556-13.824l5.603555-2.190222a11.576889 11.576889 0 0 1 14.791111 5.717333l2.076445 4.721778a217.827556 217.827556 0 0 1 51.484444-9.557333v-5.176889c0-5.859556 5.091556-10.609778 11.320889-10.609778h6.087111c6.257778 0 11.320889 4.750222 11.320889 10.609778v5.176889c17.976889 1.137778 35.356444 4.437333 51.797334 9.671111l2.104888-4.721778a11.605333 11.605333 0 0 1 14.791112-5.688889l5.603555 2.161778c5.774222 2.275556 8.504889 8.476444 6.087111 13.880889l-2.104889 4.721778a208.327111 208.327111 0 0 1 43.064889 27.079111l3.896889-3.640889a11.832889 11.832889 0 0 1 15.985778 0l4.323555 4.039111a10.154667 10.154667 0 0 1 0 14.990222l-3.896888 3.640889c11.320889 12.231111 21.048889 25.742222 28.871111 40.334222l5.034666-1.962666a11.605333 11.605333 0 0 1 14.791111 5.688889l2.332445 5.290666a10.382222 10.382222 0 0 1-6.058667 13.852445l-5.034666 1.991111c5.575111 15.388444 9.102222 31.687111 10.325333 48.583111h5.518222c6.257778 0 11.292444 4.750222 11.292445 10.609778v5.688889c0 5.859556-5.063111 10.609778-11.292445 10.609777h-5.518222c-1.251556 17.066667-4.835556 33.479111-10.467556 49.038223l5.034667 1.991111c5.745778 2.275556 8.448 8.476444 6.030222 13.852444l-2.360889 5.262222a11.576889 11.576889 0 0 1-14.791111 5.688889l-5.034666-1.991111c-7.793778 14.449778-17.436444 27.875556-28.672 39.936l3.896888 3.669334a10.154667 10.154667 0 0 1 0 14.990222l-4.323555 4.010666a11.832889 11.832889 0 0 1-15.985778 0l-3.896889-3.640888c-13.084444 10.695111-27.676444 19.882667-43.349333 27.249777l2.076444 4.721778a10.382222 10.382222 0 0 1-6.115555 13.852445l-5.603556 2.190222a11.576889 11.576889 0 0 1-14.791111-5.717334l-2.076444-4.721777a217.969778 217.969778 0 0 1-51.484445 9.557333v5.176889c0 5.859556-5.063111 10.581333-11.320889 10.581333h-6.087111c-6.257778 0-11.292444-4.721778-11.292444-10.581333v-5.176889a218.112 218.112 0 0 1-51.825778-9.671111l-2.104889 4.721778a11.605333 11.605333 0 0 1-14.791111 5.688889l-5.603556-2.190223a10.353778 10.353778 0 0 1-6.087111-13.852444l2.104889-4.721778a209.038222 209.038222 0 0 1-43.064889-27.107555l-3.896889 3.640888a11.861333 11.861333 0 0 1-15.985777 0l-4.323556-4.010666a10.126222 10.126222 0 0 1 0-14.990222l3.925333-3.669334a193.052444 193.052444 0 0 1-28.899555-40.334222l-5.034667 1.991111a11.576889 11.576889 0 0 1-14.791111-5.688889l-2.360889-5.290666a10.382222 10.382222 0 0 1 6.087111-13.852445l5.034667-1.991111a182.186667 182.186667 0 0 1-10.325333-48.611556H11.292444c-6.229333 0-11.292444-4.750222-11.292444-10.581333v-5.717333c0-5.859556 5.063111-10.609778 11.292444-10.609778\" fill=\"#323F43\"/>\n <path d=\"M55.751111 794.766222c0 69.319111 62.464 125.496889 139.463111 125.496889 76.999111 0 139.434667-56.177778 139.434667-125.496889 0-69.290667-62.435556-125.496889-139.434667-125.496889-76.999111 0-139.434667 56.206222-139.434666 125.496889\" fill=\"#1D2B2F\"/>\n <path d=\"M83.655111 808.704a111.559111 111.559111 0 1 0 223.089778 0 111.559111 111.559111 0 0 0-223.089778 0\" fill=\"#97B6B6\"/>\n <path d=\"M139.434667 794.766222a69.717333 69.717333 0 1 0 139.434666 0 69.717333 69.717333 0 0 0-139.434666 0\" fill=\"#7B9294\"/>\n <path d=\"M139.434667 808.704a55.779556 55.779556 0 1 0 111.559111 0 55.779556 55.779556 0 0 0-111.559111 0\" fill=\"#97B6B6\"/>\n <line x1=\"195.2\" y1=\"669\" x2=\"195.2\" y2=\"920\" stroke=\"#97B6B6\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"69\" y1=\"794.8\" x2=\"321\" y2=\"794.8\" stroke=\"#97B6B6\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"107\" y1=\"706.6\" x2=\"283.4\" y2=\"883\" stroke=\"#97B6B6\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"283.4\" y1=\"706.6\" x2=\"107\" y2=\"883\" stroke=\"#97B6B6\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n </g>\n <!-- 后轮组(齿轮+轮胎,中心 1059.7,697.2) -->\n <g class=\"tractor2-rear-wheel\">\n ${animateRear}\n <path d=\"M768.483556 692.280889h7.566222c1.706667-23.893333 6.656-46.876444 14.392889-68.636445l-6.883556-2.787555a14.592 14.592 0 0 1-8.334222-19.399111l3.242667-7.395556a15.815111 15.815111 0 0 1 20.366222-7.936l6.912 2.787556a271.274667 271.274667 0 0 1 39.424-55.921778l-5.347556-5.12a14.392889 14.392889 0 0 1 0-20.992l5.916445-5.660444a16.071111 16.071111 0 0 1 21.987555 0l5.347556 5.12a285.866667 285.866667 0 0 1 59.648-38.115556l-2.872889-6.627556a14.620444 14.620444 0 0 1 8.391111-19.399111l7.736889-3.072a15.815111 15.815111 0 0 1 20.309333 8.021334l2.872889 6.627555c22.471111-7.224889 46.222222-11.804444 70.826667-13.397333v-7.224889c0-8.220444 6.940444-14.848 15.530666-14.848h8.362667c8.590222 0 15.559111 6.627556 15.559111 14.848v7.224889c24.746667 1.621333 48.64 6.257778 71.224889 13.511111l2.872889-6.599111a15.815111 15.815111 0 0 1 20.337778-7.964445l7.736889 3.072c7.907556 3.128889 11.662222 11.832889 8.362666 19.399112l-2.901333 6.627555c21.447111 10.24 41.329778 23.04 59.221333 37.916445l5.347556-5.12a16.071111 16.071111 0 0 1 22.016 0l5.916444 5.688888a14.364444 14.364444 0 0 1 0 20.963556l-5.347555 5.12a271.246222 271.246222 0 0 1 39.68 56.462222l6.940444-2.759111a15.843556 15.843556 0 0 1 20.337778 7.964445l3.214222 7.395555a14.620444 14.620444 0 0 1-8.362666 19.399111l-6.912 2.759111c7.651556 21.617778 12.515556 44.401778 14.222222 68.067556h7.566222c8.590222 0 15.530667 6.655 15.530667 14.819555v8.021334a15.217778 15.217778 0 0 1-15.530667 14.819555h-7.566222a259.868444 259.868444 0 0 1-14.421334 68.636445l6.912 2.787555c7.907556 3.157333 11.662222 11.861333 8.305778 19.427556l-3.242666 7.338667a15.815111 15.815111 0 0 1-20.337778 7.964444l-6.940445-2.787556a271.701333 271.701333 0 0 1-39.395555 55.950223l5.347555 5.091555a14.364444 14.364444 0 0 1 0 20.992l-5.916444 5.660445a16.099556 16.099556 0 0 1-22.016 0l-5.347556-5.12c-18.005333 14.990222-38.030222 27.818667-59.619555 38.115555l2.872889 6.627556a14.620444 14.620444 0 0 1-8.391111 19.399111l-7.736889 3.072a15.843556 15.843556 0 0 1-20.337778-8.021333l-2.844445-6.627556c-22.471111 7.224889-46.222222 11.804444-70.826666 13.425778v7.224889a15.217778 15.217778 0 0 1-15.530667 14.819555h-8.362667a15.217778 15.217778 0 0 1-15.559111-14.819555v-7.224889c-24.746667-1.621333-48.64-6.257778-71.224889-13.539556l-2.901333 6.599111a15.815111 15.815111 0 0 1-20.337778 7.964445l-7.708444-3.072a14.592 14.592 0 0 1-8.362667-19.399111l2.872889-6.627556a285.667556 285.667556 0 0 1-59.221333-37.916444l-5.347556 5.12a16.071111 16.071111 0 0 1-21.987555 0l-5.916445-5.688889a14.364444 14.364444 0 0 1 0-20.963556l5.347556-5.12a271.160889 271.160889 0 0 1-39.68-56.462222l-6.940445 2.759111a15.815111 15.815111 0 0 1-20.337777-7.964444l-3.214223-7.395556a14.592 14.592 0 0 1 8.334223-19.399111l6.912-2.759111a259.527111 259.527111 0 0 1-14.193778-68.067556h-7.566222a15.217778 15.217778 0 0 1-15.530667-14.819555v-8.021334c0-8.163556 6.940444-14.819556 15.530667-14.819555\" fill=\"#323F43\"/>\n <path d=\"M864.483556 697.173333a195.214222 195.214222 0 1 0 390.428444 0 195.214222 195.214222 0 0 0-390.428444 0\" fill=\"#1D2B2F\"/>\n <path d=\"M892.387556 711.111111a153.372444 153.372444 0 1 0 306.744888 0 153.372444 153.372444 0 0 0-306.744888 0\" fill=\"#97B6B6\"/>\n <path d=\"M976.042667 697.173333c0 46.193778 43.690667 83.655111 97.592889 83.655111s97.592889-37.461333 97.592888-83.655111c0-46.222222-43.690667-83.655111-97.592888-83.655111s-97.592889 37.432889-97.592889 83.626667\" fill=\"#7B9294\"/>\n <path d=\"M1003.918222 697.173333a55.751111 55.751111 0 1 0 111.559111 0 55.751111 55.751111 0 0 0-111.559111 0\" fill=\"#97B6B6\"/>\n <line x1=\"1059.7\" y1=\"532\" x2=\"1059.7\" y2=\"862\" stroke=\"#97B6B6\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"894\" y1=\"697.2\" x2=\"1225\" y2=\"697.2\" stroke=\"#97B6B6\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"941\" y1=\"578.5\" x2=\"1178.4\" y2=\"815.9\" stroke=\"#97B6B6\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"1178.4\" y1=\"578.5\" x2=\"941\" y2=\"815.9\" stroke=\"#97B6B6\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成货车 SVG(内联,带车轮旋转和车身颠簸动画)\n */\nexport function generateTruckSvg(width: number, height: number, animated: boolean): string {\n const animateHub = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 172 773\" to=\"360 172 773\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateHub2 = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 745 773\" to=\"360 745 773\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -12; 0 3; 0 -8; 0 0\" dur=\"0.45s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 车身 -->\n <g class=\"truck-body\">${animateBody}\n <path d=\"M1007.2 744.7h-1c-6.5 0-11.8-5.3-11.8-11.8v-12.4c0-6.5 5.3-11.8 11.8-11.8h1c6.5 0 11.8 5.3 11.8 11.8v12.4c0 6.5-5.3 11.8-11.8 11.8z\" fill=\"#FF0600\"/>\n <path d=\"M634 225.6H48.3c-20.8 0-37.7 16.9-37.7 37.7v358h661.1v-358c0-20.9-16.9-37.7-37.7-37.7z\" fill=\"#FBB138\"/>\n <path d=\"M896.6 681.3h97.8v-111c0-43.7-14.7-58.5-41.6-104.3-30.4-51.8-37.6-84.5-66.9-84.5H698.4c-8.3 0-15 6.7-15 15v225.3h90.8c49.7-0.1 93.9 23.2 122.4 59.5z\" fill=\"#E84E2F\"/>\n <path d=\"M989.4 689.9h-98.3l-1.6-2.1 2.1 2.1c-28.5-36.2-72.7-59.5-122.4-59.5h-715c-7.6 0-13.8 6.2-13.8 13.8v96.4c0 7.6 6.2 13.7 13.7 13.7h35.5c4-57.5 51.7-102.9 110.2-102.9S306 696.8 310 754.3h349c4-57.5 51.7-102.9 110.2-102.9s106.2 45.4 110.2 102.9h114.9c4.6 0 8.4-3.8 8.4-8.4V705c0-7.8-5.8-14.1-13.3-15.1z\" fill=\"#4D4D4D\"/>\n <path d=\"M964.4 544.2H843.3c-3.5 0-6.4-2.9-6.4-6.4V412.9c0-3.5 2.9-6.4 6.4-6.4h45.4c2.2 0 4.3 1.2 5.5 3.1l75.7 124.9c2.6 4.2-0.5 9.7-5.5 9.7z\" fill=\"#A5E0EF\"/>\n <path d=\"M813.9 544.2h-96c-6.5 0-11.8-5.3-11.8-11.8V418.2c0-6.5 5.3-11.8 11.8-11.8h96c6.5 0 11.8 5.3 11.8 11.8v114.2c0 6.5-5.3 11.8-11.8 11.8z\" fill=\"#A5E0EF\"/>\n <path d=\"M165.9 544.2H163c-18.2 0-33.1-14.9-33.1-33.1V345c0-18.2 14.9-33.1 33.1-33.1h2.9c18.2 0 33.1 14.9 33.1 33.1v166c0 18.3-14.9 33.2-33.1 33.2z\" fill=\"#683E00\"/>\n <path d=\"M342.3 544.2h-2.9c-18.2 0-33.1-14.9-33.1-33.1V345c0-18.2 14.9-33.1 33.1-33.1h2.9c18.2 0 33.1 14.9 33.1 33.1v166c0 18.3-14.9 33.2-33.1 33.2z\" fill=\"#683E00\"/>\n <path d=\"M516.6 544.2h-2.9c-18.2 0-33.1-14.9-33.1-33.1V345c0-18.2 14.9-33.1 33.1-33.1h2.9c18.2 0 33.1 14.9 33.1 33.1v166c0 18.3-14.9 33.2-33.1 33.2z\" fill=\"#683E00\"/>\n </g>\n <!-- 左轮 -->\n <g class=\"truck-left-wheel\">\n <path d=\"M289.2 751.1c2.9-1 4.6-4 3.8-7l-3.2-11.9c-0.8-3-3.8-4.7-6.8-4.2 2.5-1.7 3.4-5 1.9-7.6l-6.2-10.7c-1.6-2.7-4.9-3.5-7.6-2.2 2-2.3 2.1-5.8-0.1-8l-8.7-8.7c-2.2-2.2-5.7-2.2-8-0.1 1.3-2.7 0.5-6.1-2.2-7.6l-10.7-6.2c-2.7-1.5-5.9-0.6-7.6 1.9 0.6-3-1.2-6-4.2-6.8l-11.9-3.2c-3-0.8-6 0.9-7 3.8-0.3-3-2.6-5.4-5.7-5.4h-12.4c-3.1 0-5.4 2.4-5.7 5.4-1-2.9-4-4.6-7-3.8L168 672c-3 0.8-4.7 3.8-4.2 6.8-1.7-2.5-5-3.4-7.6-1.9l-10.7 6.2c-2.7 1.6-3.5 4.9-2.2 7.6-2.3-2-5.8-2.1-8 0.1l-8.7 8.7c-2.2 2.2-2.2 5.7-0.1 8-2.7-1.3-6.1-0.5-7.6 2.2l-6.2 10.7c-1.5 2.7-0.6 5.9 1.9 7.6-3-0.6-6 1.2-6.8 4.2l-3.2 11.9c-0.8 3 0.9 6 3.8 7-3 0.3-5.4 2.6-5.4 5.7v12.4c0 3.1 2.4 5.4 5.4 5.7-2.9 1-4.6 4-3.8 7l3.2 11.9c0.8 3 3.8 4.7 6.8 4.2-2.5 1.7-3.4 5-1.9 7.6l6.2 10.7c1.6 2.7 4.9 3.5 7.6 2.2-2 2.3-2.1 5.8 0.1 8l8.7 8.7c2.2 2.2 5.6 2.2 8 0.1-1.3 2.7-0.5 6.1 2.2 7.6l10.7 6.2c2.7 1.5 5.9 0.6 7.6-1.9-0.6 3 1.2 6 4.2 6.8l11.9 3.2c3 0.8 6-0.9 7-3.8 0.3 3 2.6 5.4 5.7 5.4H205c3.1 0 5.4-2.4 5.7-5.4 1 2.9 4 4.6 7 3.8l11.9-3.2c3-0.8 4.7-3.8 4.2-6.8 1.7 2.5 5 3.4 7.6 1.9L252 843c2.7-1.6 3.5-4.9 2.2-7.6 2.3 2 5.8 2.1 8-0.1l8.7-8.7c2.2-2.2 2.2-5.6 0.1-8 2.7 1.3 6.1 0.5 7.6-2.2l6.2-10.7c1.5-2.7 0.6-5.9-1.9-7.6 3 0.6 6-1.2 6.8-4.2l3.2-11.9c0.8-3-0.9-6-3.8-7 3-0.3 5.4-2.6 5.4-5.7v-12.4c0.1-3.1-2.3-5.5-5.3-5.8z\" fill=\"#363636\"/>\n <g class=\"truck-left-hub\">${animateHub}\n <circle cx=\"172\" cy=\"773\" r=\"80\" fill=\"none\" stroke=\"#4D4D4D\" stroke-width=\"18\"/>\n <circle cx=\"172\" cy=\"773\" r=\"54\" fill=\"#4D4D4D\"/>\n <circle cx=\"172\" cy=\"773\" r=\"30\" fill=\"#FFFFFF\"/>\n <line x1=\"172\" y1=\"719\" x2=\"172\" y2=\"827\" stroke=\"#FFFFFF\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.85\"/>\n <line x1=\"118\" y1=\"773\" x2=\"226\" y2=\"773\" stroke=\"#FFFFFF\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.85\"/>\n <line x1=\"134\" y1=\"735\" x2=\"210\" y2=\"811\" stroke=\"#FFFFFF\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"210\" y1=\"735\" x2=\"134\" y2=\"811\" stroke=\"#FFFFFF\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n </g>\n </g>\n <!-- 右轮 -->\n <g class=\"truck-right-wheel\">\n <path d=\"M861.3 751.1c2.9-1 4.6-4 3.8-7l-3.2-11.9c-0.8-3-3.8-4.7-6.8-4.2 2.5-1.7 3.4-5 1.9-7.6l-6.2-10.7c-1.6-2.7-4.9-3.5-7.6-2.2 2-2.3 2.1-5.8-0.1-8l-8.7-8.7c-2.2-2.2-5.7-2.2-8-0.1 1.3-2.7 0.5-6.1-2.2-7.6l-10.7-6.2c-2.7-1.5-5.9-0.6-7.6 1.9 0.6-3-1.2-6-4.2-6.8l-11.9-3.2c-3-0.8-6 0.9-7 3.8-0.3-3-2.6-5.4-5.7-5.4h-12.4c-3.1 0-5.4 2.4-5.7 5.4-1-2.9-4-4.6-7-3.8l-11.9 3.2c-3 0.8-4.7 3.8-4.2 6.8-1.7-2.5-5-3.4-7.6-1.9l-10.7 6.2c-2.7 1.6-3.5 4.9-2.2 7.6-2.3-2-5.8-2.1-8 0.1l-8.7 8.7c-2.2 2.2-2.2 5.7-0.1 8-2.7-1.3-6.1-0.5-7.6 2.2l-6.2 10.7c-1.5 2.7-0.6 5.9 1.9 7.6-3-0.6-6 1.2-6.8 4.2l-3.2 11.9c-0.8 3 0.9 6 3.8 7-3 0.3-5.4 2.6-5.4 5.7v12.4c0 3.1 2.4 5.4 5.4 5.7-2.9 1-4.6 4-3.8 7l3.2 11.9c0.8 3 3.8 4.7 6.8 4.2-2.5 1.7-3.4 5-1.9 7.6l6.2 10.7c1.6 2.7 4.9 3.5 7.6 2.2-2 2.3-2.1 5.8 0.1 8l8.7 8.7c2.2 2.2 5.6 2.2 8 0.1-1.3 2.7-0.5 6.1 2.2 7.6l10.7 6.2c2.7 1.5 5.9 0.6 7.6-1.9-0.6 3 1.2 6 4.2 6.8l11.9 3.2c3 0.8 6-0.9 7-3.8 0.3 3 2.6 5.4 5.7 5.4H777c3.1 0 5.4-2.4 5.7-5.4 1 2.9 4 4.6 7 3.8l11.9-3.2c3-0.8 4.7-3.8 4.2-6.8 1.7 2.5 5 3.4 7.6 1.9l10.7-6.2c2.7-1.6 3.5-4.9 2.2-7.6 2.3 2 5.8 2.1 8-0.1l8.7-8.7c2.2-2.2 2.2-5.6 0.1-8 2.7 1.3 6.1 0.5 7.6-2.2l6.2-10.7c1.5-2.7 0.6-5.9-1.9-7.6 3 0.6 6-1.2 6.8-4.2l3.2-11.9c0.8-3-0.9-6-3.8-7 3-0.3 5.4-2.6 5.4-5.7v-12.4c0.2-3-2.3-5.4-5.3-5.7z\" fill=\"#363636\"/>\n <g class=\"truck-right-hub\">${animateHub2}\n <circle cx=\"745\" cy=\"773\" r=\"80\" fill=\"none\" stroke=\"#4D4D4D\" stroke-width=\"18\"/>\n <circle cx=\"745\" cy=\"773\" r=\"54\" fill=\"#4D4D4D\"/>\n <circle cx=\"745\" cy=\"773\" r=\"30\" fill=\"#FFFFFF\"/>\n <line x1=\"745\" y1=\"719\" x2=\"745\" y2=\"827\" stroke=\"#FFFFFF\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.85\"/>\n <line x1=\"691\" y1=\"773\" x2=\"799\" y2=\"773\" stroke=\"#FFFFFF\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.85\"/>\n <line x1=\"707\" y1=\"735\" x2=\"783\" y2=\"811\" stroke=\"#FFFFFF\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"783\" y1=\"735\" x2=\"707\" y2=\"811\" stroke=\"#FFFFFF\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n </g>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成货车2 SVG(内联,三轮货车,带车轮旋转和车身颠簸动画)\n */\nexport function generateTruck2Svg(width: number, height: number, animated: boolean): string {\n const animateWheelL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 160 735\" to=\"360 160 735\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelC = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 639 761\" to=\"360 639 761\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 864 735\" to=\"360 864 735\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -10; 0 3; 0 -7; 0 0\" dur=\"0.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 车身 -->\n <g class=\"truck2-body\">${animateBody}\n <path d=\"M351.14974 632.9c0.1-144.4 0.2-288.7-0.1-433.1 0-11 2.5-14.2 13.9-14.2 215.5 0.4 430.9 0.3 646.4 0.2 8 0 12.7 0.2 12.7 10.8-0.4 143.3-0.2 286.5-0.3 429.8 0 2.2-0.3 4.4-0.4 6.6-6.1 5.1-13.4 3.4-20.3 3.4-165.1 0.1-330.2 0.1-495.3 0.1-26.2 0-23.9-1.6-24 24.1 0 7-0.3 14.1 0 21.1 0.4 9.9-3 16.5-13.6 17.8-22 2.5-44.1 0.6-66.2 0.6-11.8 0-23.5 1.5-35.3 0.6-6.6-0.5-13.4-0.4-18.5-5.8-3.3-20.7-5-41.4 1-62z\" fill=\"#EAAC52\"/>\n <path d=\"M0.64974 568.7c-2.3-20.7 1.5-39.5 11.5-58.4C39.44974 458.6 65.04974 406 90.84974 353.7c3.3-6.6 7.1-9 14.4-9 67.7 0.3 135.4 0.3 203.1-0.1 9.9-0.1 11.3 3.7 11.3 12.3-0.3 86.6-0.2 173.2-0.1 259.7 0 5.2 0.4 10.3 0.5 15.5 2 18.4 0.7 36.8 0.8 55.2 0 8.9-6.1 11-13.4 11.1-24.3 0.1-48.6 0.8-72.9-0.4-5.8-0.7-9.8-4.7-14.2-8-38.7-30-81-30.4-120.1-1.4-4.4 3.3-8.4 7.3-13.9 8.9-25.7 2-51.5 0.7-77.3 0.7-3 0-5.9-0.6-8.2-2.7-0.1-10.4-0.2-20.8-0.2-31.2 4.6-5.1 10.9-3.8 16.6-3.8 7.4 0 10.7-2.9 10.7-10.5-0.1-22.5-0.1-45 0-67.5 0.1-8.3-3.8-11-11.5-10.9-5.3 0.3-11.1 1.2-15.8-2.9z\" fill=\"#27A0DC\"/>\n <path d=\"M468.74974 697.1c9.4-1 12.1-6.3 11.4-15.5-0.9-12.1 0.4-24.4-0.4-36.6-0.6-9.6 2.2-12.6 12.2-12.5 54 0.5 108 0.2 162 0.2h360.6c3 0 5.9 0.2 8.9 0.2 0.1 40.2 0.2 80.3 0.4 120.4 0 4.6-1.6 6.8-6.4 6.7-19.1-0.3-38.3-0.5-57.4-0.7-3.8-4.1-4-9.4-5-14.4-9.4-51-48.7-77.3-92.7-77.7-46.6-0.4-84.1 34.1-90.7 79.8-0.7 4.7-0.9 9.7-5.3 12.8-10.1 1.2-20.5-2-30.5 2-4.5-4.7-4.3-11.1-4.6-16.7-2.5-36.2-39.4-69.1-73.7-76.2C607.04974 658.4 555.04974 695.7 547.04974 745.5c-0.8 4.9-0.5 10.5-4.9 14.3l-81.8-0.3c-3.1-5.3 2.2-6.8 4.4-9.7 3.8-5 13.5-10.9 8.6-15.5-5.2-4.8-9.6 5.9-14.6 9.4-5.6 3.9-7 11.1-11.7 15.8-8.9 0-17.8-0.1-26.7-0.1-3-4.8 1.1-6.7 3.8-8.6 14.3-10.4 25.6-24 38.1-36.3 4.7-4.5 8.4-10 6.5-17.4z\" fill=\"#808384\"/>\n <path d=\"M256.14974 760c-1.5-24.1-9.5-45.6-25.3-64.1 24.6-0.1 49.3-1 73.9-0.1 11.7 0.4 14.5-3.6 13.7-14.3-0.9-12.8-0.3-25.7-0.2-38.6 0-3.6-0.8-7.4 1.9-10.6l0.1 0.7c3.7 4.3 3.2 9.7 3.3 14.8 0.1 10.7 0.3 21.4 0 32.1-0.2 8.3 2.8 12.3 11.6 12 5.4-0.2 11.2-1 15.9 3 25.2 4.3 50.6 0.8 75.9 1.8 13.9 0.5 27.9 0.4 41.8 0.5 4.6 0.7 5.4 3.2 3.5 7-2.2 4.6-4.4 9.2-8.4 12.8-13.8 12.6-25.2 27.9-41.2 38.1-1.8 1.1-2.3 2.7-2.5 4.6l-164 0.3z\" fill=\"#808384\"/>\n <path d=\"M88.94974 695.4c-17.7 17.9-23.4 40.7-26.7 64.6-18 0.1-36 0-54 0.2-5.3 0.1-8.1-1.1-7.9-7.3 0.5-19.1 0.5-38.2 0.7-57.3 29.2 0 58.6-0.1 87.9-0.2z\" fill=\"#818485\"/>\n <path d=\"M0.64974 568.7c7.7 0 15.5 0.3 23.2-0.1 5.9-0.3 7.6 2 7.6 7.7-0.2 26.9-0.2 53.7 0 80.6 0 5.7-1.8 7.9-7.6 7.7-7.7-0.3-15.4 0-23.2 0 0.1-32 0-64 0-95.9z\" fill=\"#FCBD5C\"/>\n <path d=\"M351.04974 694.8c-30.8 1.5-30.8 1.5-30.8-29 0-11 0-22 0.1-32.9h30.9c-0.1 20.6-0.1 41.3-0.2 61.9z\" fill=\"#474849\"/>\n <path d=\"M446.84974 759.8c1.4-14 13.4-20.3 21.6-29.3 2.1-2.3 5.8-3.2 7.9-0.7 2.8 3.2 2.7 7.8 0 11.2-3.6 4.6-7.7 8.8-11.9 12.9-1.8 1.8-4.3 2.8-4.3 5.9-4.4-0.1-8.9-0.1-13.3 0z\" fill=\"#808384\"/>\n <path d=\"M606.44974 540.4c5.2-19.9 1-40.2 1.3-60.2 0.3-19.8-0.2-40.2-0.2-60.2 0-18.9-0.2-38 0.1-56.9 0.2-16.5 1.1-33.4-0.4-50.2-1.6-18.5 1.1-37.3-0.4-56-0.5-5.5 2.5-8.3 8-8.2 16.1 0.3 32.2 2.2 48.3 0.1 5.4-0.7 8.1 2.3 7.8 8-1.3 28.8-0.5 57.6-0.8 86.4-0.2 20.4 0.7 41.1 0.6 61.5-0.1 32.2 0.2 64.5-0.3 96.8-0.3 18.9-1.6 38.1 0.7 57.1 1 7.9-2.5 10.3-10.1 10-13.9-0.5-27.9-0.5-41.8 0-7.3 0.2-10.4-1.6-10.8-9.7-0.2-6-2-12.2-2-18.5z\" fill=\"#FCBD5B\"/>\n <path d=\"M458.54974 568.5c-9.3-1.9-21.4-0.3-33.4 0.1-7.3 0.2-9.6-2.2-9.5-9.5 0.4-19.7-0.5-39.5 0.3-59.2 0.9-22.7 0.5-45.6 0.5-68.2 0-19-0.3-38.1-0.3-57.1 0-34.4-1.7-68.9 0.9-103.4 0.5-7-4.6-15.5 1.6-20.9 5.7-4.9 13.4 0.1 20.3 0.3 8.1 0.2 16-2 24.1-2.3 9.4-0.4 13.5 4.1 16.1 11.7 0.6 1.7 1.3 3.7 1 5.4-3.4 21.1 2.6 42.4-1.5 63.6-1.2 6.2 2.3 13.2 1.4 19.6-2.9 20.8-0.4 41.7-0.7 62.5-0.3 16.8 0.2 34.3 0.2 51.3 0 22.2 3 44.6-0.9 66.9-1.2 6.6 1.5 13.8 1.6 20.7 0.1 18.5-0.1 18.5-21.7 18.5z\" fill=\"#FCBD5B\"/>\n <path d=\"M800.04974 408.3V264.6c0-13.6 2.4-15.5 16.2-16.2 12.4-0.6 24.6 4.2 37.3 0.4 5.5-1.7 11.9 2.6 10.3 8.2-2.8 9.9 1.9 19.2 0.4 28.4-3.3 20.4-0.3 41-0.7 61.4-0.4 17.2-2.4 35 0.6 52.4 1.3 7.4 1.8 15.6-1 23.1-2.8 7.6 2.5 14.5 1.3 21.8-3.4 20.7-0.6 41.7-1 62.5-0.3 16.9-2.4 34.3 0.7 51.3 1.2 6.7-1 10.7-8.7 10.6-13.9-0.2-27.9 0-41.8-0.1-9.3-0.1-13.9-3.9-13.8-14.2 0.4-48.6 0.2-97.2 0.2-145.9z\" fill=\"#FCBD5B\"/>\n <path d=\"M938.34974 568.5c-9.8-1.7-22.3 0-34.7 0.1-5.3 0-8.2-1.2-8.2-7.4 0.2-23 0.1-45.9 0.1-68.9v-78.9-82.2c0-23.7 0.2-47.4-0.1-71.1-0.1-7.7 2.1-13.4 10.5-11.1 13 3.5 25.6-0.5 38.3-0.5 10.7 0.1 15.9 6.5 15.3 14.8-1.7 21.9 2.7 43.9-1.2 65.8-1.1 6.2 2.3 13.3 1.4 19.6-3 20.8-0.5 41.8-0.7 62.5-0.2 17.6 0 35.8 0.1 53.5 0.1 21.8 3.2 43.9-1 65.8-1.1 5.8 1.6 12.3 1.7 18.5 0.4 19.5 0.2 19.5-21.5 19.5z\" fill=\"#FCBD5B\"/>\n <path d=\"M511.24974 554.5v-78.7-80-80-43.9c0-15.9 4.1-21.2 19.3-22.8 7.6-0.8 15.5-1.3 23.2 0.8 2.4 0.7 5.1 1.1 7.6 1 14.7-0.6 14.5-0.7 14.4 14-0.2 25.2 1.2 50.4-0.5 75.5-1.3 19.4-0.5 38.9-0.5 58 0 20.3 0.2 41 0.2 61.3 0 18.9 0.7 37.9-0.2 57-0.7 14.9-1 30.6 0.2 45.8 0.4 4.7-0.8 5.9-5.1 5.9-17.1-0.1-34.3 0.1-51.4 0.1-12.5-0.1-4.7-10.1-7.2-14z\" fill=\"#FCBD5B\"/>\n <path d=\"M766.74974 388.9V507c0 16.1-0.2 32.3 0.1 48.4 0.2 9.5-4 13.4-13.3 13.2-13.9-0.3-27.8-0.2-41.8 0-6.5 0.1-11.1-2.8-9.1-9 3.9-12.6-2.6-25 0-37.2 4-18.9 0.8-38.1 0.9-56.8 0.1-16.4 4.1-33.6-0.9-50.3-1.3-4.4-0.9-9.7-0.1-14.3 1.6-9.7-0.1-19.5 0.6-28.8 1.5-21.2-0.6-42.4 0.3-63.6 0.7-16.4 1.7-33.5-0.4-50.1-0.7-5.5 2.9-10.3 6.9-9 11 3.6 21.2-1.3 31.7-1 25.3 0.7 25.2 0.3 25.2 25.6-0.1 38.2-0.1 76.5-0.1 114.8z\" fill=\"#FCBD5B\"/>\n <path d=\"M143.54974 537c-33.3 0-66.5-0.2-99.8 0.1-8.9 0.1-12.3-1.1-7.4-10.7 24-47.1 47.7-94.3 71.1-141.6 3-6 6.7-7.6 12.9-7.6 41.8 0.2 83.5 0.3 125.3-0.1 8-0.1 9.8 2.6 9.8 10.1-0.3 46.2-0.3 92.4 0 138.6 0.1 8.6-2.1 11.5-11.1 11.3-33.5-0.4-67.1-0.1-100.8-0.1z\" fill=\"#E8EDEF\"/>\n <path d=\"M223.14974 568.5h11.1c22 0 26.2 5.2 21.5 27.1-0.8 3.8-3 7-6.5 5.9-16.6-5.4-33.5 1.9-50.2-1.5-6.3-1.3-7.9-3.4-7.8-9.1 0.4-27.4-3.1-21.8 21.9-22.4 3.4-0.1 6.7 0 10 0z\" fill=\"#218ABE\"/>\n </g>\n <!-- 左轮(中心 160,735) -->\n <g class=\"truck2-left-wheel\">\n ${animateWheelL}\n <circle cx=\"160\" cy=\"735\" r=\"55\" fill=\"#464748\"/>\n <circle cx=\"160\" cy=\"735\" r=\"35\" fill=\"#D0D4D6\"/>\n <circle cx=\"160\" cy=\"753\" r=\"16\" fill=\"#818485\"/>\n <line x1=\"160\" y1=\"680\" x2=\"160\" y2=\"790\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"105\" y1=\"735\" x2=\"215\" y2=\"735\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"121\" y1=\"696\" x2=\"199\" y2=\"774\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n <line x1=\"199\" y1=\"696\" x2=\"121\" y2=\"774\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n </g>\n <!-- 中轮(中心 639,761) -->\n <g class=\"truck2-center-wheel\">\n ${animateWheelC}\n <circle cx=\"639\" cy=\"761\" r=\"55\" fill=\"#464748\"/>\n <circle cx=\"639\" cy=\"761\" r=\"35\" fill=\"#D1D5D6\"/>\n <circle cx=\"639\" cy=\"760\" r=\"16\" fill=\"#818485\"/>\n <line x1=\"639\" y1=\"706\" x2=\"639\" y2=\"816\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"584\" y1=\"761\" x2=\"694\" y2=\"761\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"600\" y1=\"722\" x2=\"678\" y2=\"800\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n <line x1=\"678\" y1=\"722\" x2=\"600\" y2=\"800\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n </g>\n <!-- 右轮(中心 864,735) -->\n <g class=\"truck2-right-wheel\">\n ${animateWheelR}\n <circle cx=\"864\" cy=\"735\" r=\"55\" fill=\"#464748\"/>\n <circle cx=\"864\" cy=\"735\" r=\"35\" fill=\"#D0D4D6\"/>\n <circle cx=\"864\" cy=\"760\" r=\"16\" fill=\"#828586\"/>\n <line x1=\"864\" y1=\"680\" x2=\"864\" y2=\"790\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"809\" y1=\"735\" x2=\"919\" y2=\"735\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"825\" y1=\"696\" x2=\"903\" y2=\"774\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n <line x1=\"903\" y1=\"696\" x2=\"825\" y2=\"774\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成农业无人机 SVG(内联,四旋翼俯视图,带螺旋桨旋转和浮动动画)\n */\nexport function generateAgriDroneSvg(width: number, height: number, animated: boolean): string {\n const animateFloat = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -6; 0 2; 0 -4; 0 0\" dur=\"0.8s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n const animatePropTL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 220 220\" to=\"360 220 220\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n const animatePropTR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 804 220\" to=\"360 804 220\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n const animatePropBL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 220 804\" to=\"360 220 804\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n const animatePropBR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 804 804\" to=\"360 804 804\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <g class=\"agri-drone\">${animateFloat}\n <!-- 中心机身 -->\n <rect x=\"440\" y=\"440\" width=\"144\" height=\"144\" rx=\"20\" fill=\"#E2E8F0\"/>\n <rect x=\"460\" y=\"460\" width=\"104\" height=\"104\" rx=\"12\" fill=\"#A0AEC0\"/>\n <!-- 机臂(X 形) -->\n <line x1=\"512\" y1=\"512\" x2=\"220\" y2=\"220\" stroke=\"#CBD5E0\" stroke-width=\"28\" stroke-linecap=\"round\"/>\n <line x1=\"512\" y1=\"512\" x2=\"804\" y2=\"220\" stroke=\"#CBD5E0\" stroke-width=\"28\" stroke-linecap=\"round\"/>\n <line x1=\"512\" y1=\"512\" x2=\"220\" y2=\"804\" stroke=\"#CBD5E0\" stroke-width=\"28\" stroke-linecap=\"round\"/>\n <line x1=\"512\" y1=\"512\" x2=\"804\" y2=\"804\" stroke=\"#CBD5E0\" stroke-width=\"28\" stroke-linecap=\"round\"/>\n <!-- 左上电机座 -->\n <circle cx=\"220\" cy=\"220\" r=\"28\" fill=\"#CBD5E0\"/><circle cx=\"220\" cy=\"220\" r=\"16\" fill=\"#A0AEC0\"/>\n <!-- 右上电机座 -->\n <circle cx=\"804\" cy=\"220\" r=\"28\" fill=\"#CBD5E0\"/><circle cx=\"804\" cy=\"220\" r=\"16\" fill=\"#A0AEC0\"/>\n <!-- 左下电机座 -->\n <circle cx=\"220\" cy=\"804\" r=\"28\" fill=\"#CBD5E0\"/><circle cx=\"220\" cy=\"804\" r=\"16\" fill=\"#A0AEC0\"/>\n <!-- 右下电机座 -->\n <circle cx=\"804\" cy=\"804\" r=\"28\" fill=\"#CBD5E0\"/><circle cx=\"804\" cy=\"804\" r=\"16\" fill=\"#A0AEC0\"/>\n <!-- 前方指示灯 -->\n <circle cx=\"512\" cy=\"340\" r=\"8\" fill=\"#48BB78\"/>\n <!-- 左上螺旋桨 -->\n <g class=\"agri-drone-prop-tl\">${animatePropTL}\n <ellipse cx=\"220\" cy=\"220\" rx=\"110\" ry=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"220\" cy=\"220\" rx=\"8\" ry=\"110\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 右上螺旋桨 -->\n <g class=\"agri-drone-prop-tr\">${animatePropTR}\n <ellipse cx=\"804\" cy=\"220\" rx=\"110\" ry=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"804\" cy=\"220\" rx=\"8\" ry=\"110\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 左下螺旋桨 -->\n <g class=\"agri-drone-prop-bl\">${animatePropBL}\n <ellipse cx=\"220\" cy=\"804\" rx=\"110\" ry=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"220\" cy=\"804\" rx=\"8\" ry=\"110\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 右下螺旋桨 -->\n <g class=\"agri-drone-prop-br\">${animatePropBR}\n <ellipse cx=\"804\" cy=\"804\" rx=\"110\" ry=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"804\" cy=\"804\" rx=\"8\" ry=\"110\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 下方喷洒口 -->\n <rect x=\"492\" y=\"580\" width=\"40\" height=\"16\" rx=\"4\" fill=\"#A0AEC0\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成农业无人机侧身 SVG(内联,带螺旋桨旋转和浮动动画)\n */\nexport function generateAgriDroneSideSvg(width: number, height: number, animated: boolean): string {\n const animateFloat = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -6; 0 2; 0 -4; 0 0\" dur=\"0.8s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n const animatePropL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 260 410\" to=\"360 260 410\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n const animatePropR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 764 410\" to=\"360 764 410\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <g class=\"agri-drone-side\">${animateFloat}\n <!-- 左机臂 -->\n <line x1=\"512\" y1=\"540\" x2=\"260\" y2=\"410\" stroke=\"#CBD5E0\" stroke-width=\"24\" stroke-linecap=\"round\"/>\n <!-- 右机臂 -->\n <line x1=\"512\" y1=\"540\" x2=\"764\" y2=\"410\" stroke=\"#CBD5E0\" stroke-width=\"24\" stroke-linecap=\"round\"/>\n <!-- 机身(椭圆,侧视呈水滴形) -->\n <ellipse cx=\"512\" cy=\"540\" rx=\"90\" ry=\"60\" fill=\"#E2E8F0\"/>\n <ellipse cx=\"512\" cy=\"540\" rx=\"60\" ry=\"40\" fill=\"#A0AEC0\"/>\n <!-- 左电机座 -->\n <circle cx=\"260\" cy=\"410\" r=\"22\" fill=\"#CBD5E0\"/>\n <circle cx=\"260\" cy=\"410\" r=\"12\" fill=\"#A0AEC0\"/>\n <!-- 右电机座 -->\n <circle cx=\"764\" cy=\"410\" r=\"22\" fill=\"#CBD5E0\"/>\n <circle cx=\"764\" cy=\"410\" r=\"12\" fill=\"#A0AEC0\"/>\n <!-- 前方指示灯 -->\n <circle cx=\"602\" cy=\"540\" r=\"7\" fill=\"#48BB78\"/>\n <!-- 左螺旋桨 -->\n <g class=\"agri-drone-side-prop-l\">${animatePropL}\n <ellipse cx=\"260\" cy=\"410\" rx=\"100\" ry=\"7\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"260\" cy=\"410\" rx=\"7\" ry=\"100\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 右螺旋桨 -->\n <g class=\"agri-drone-side-prop-r\">${animatePropR}\n <ellipse cx=\"764\" cy=\"410\" rx=\"100\" ry=\"7\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"764\" cy=\"410\" rx=\"7\" ry=\"100\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 起落架 -->\n <line x1=\"440\" y1=\"600\" x2=\"420\" y2=\"680\" stroke=\"#A0AEC0\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <line x1=\"584\" y1=\"600\" x2=\"604\" y2=\"680\" stroke=\"#A0AEC0\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <!-- 起落架横杆 -->\n <line x1=\"380\" y1=\"680\" x2=\"644\" y2=\"680\" stroke=\"#A0AEC0\" stroke-width=\"12\" stroke-linecap=\"round\"/>\n <!-- 下方喷洒口 -->\n <rect x=\"496\" y=\"600\" width=\"32\" height=\"14\" rx=\"4\" fill=\"#A0AEC0\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成农机俯视 SVG(顶视图,农机颜色为橙色)\n * @description 农业机械俯视图,橙色车身,深灰色轮胎\n */\nexport function generateTractorTopdownSvg(\n width: number,\n height: number,\n animated: boolean\n): string {\n // 四个轮胎的中心点(根据 SVG 路径分析)\n // 左侧轮胎组(约 x=18 到 x=398)\n // 右侧轮胎组(约 x=2380 到 x=2544)\n // 前轮胎:y≈174 附近,后轮胎:y≈799 附近\n const animateWheelFL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 143 174\" to=\"360 143 174\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelFR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 2451 174\" to=\"360 2451 174\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelBL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 143 799\" to=\"360 143 799\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelBR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 2451 799\" to=\"360 2451 799\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -5; 0 2; 0 -3; 0 0\" dur=\"0.6s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2605 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 车身整体(带微小颠簸动画) -->\n <g class=\"tractor-topdown-body\">${animateBody}\n <!-- 左侧竖条结构 -->\n <path d=\"M73.322301 2.514872h327.97095v1013.199145H73.322301V2.514872z\" fill=\"#3C3D3C\"/>\n <path d=\"M142.523296 20.083416h8.016557c4.043836 0 4.848724 2.172229 4.848725 4.848725v970.384909c0 2.679728-0.804888 4.848724-4.848725 4.848724h-8.016557a4.848724 4.848724 0 0 1-4.848725-4.848724V24.932141a4.848724 4.848724 0 0 1 4.848725-4.848725z\" fill=\"#1D1D1C\"/>\n <!-- 左侧横条 -->\n <path d=\"M18.596365 16.970535h109.451872c5.356224 0 9.697449 3.613916 9.697449 9.697449v15.018116a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449V26.667984c0-6.083533 4.341225-9.697449 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 174.373059h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697449v15.745424a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449v-15.745424a9.697449 9.697449 0 0 1 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 332.502891h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697449v15.745424a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449v-15.745424a9.697449 9.697449 0 0 1 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 490.632723h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697449v15.745424a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449v-15.745424a9.697449 9.697449 0 0 1 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 648.762556h109.451872c5.356224 0 9.697449 5.621288 9.697449 9.697448v15.745425a9.697449 9.697449 0 0 1-9.697449 9.697448H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697448v-15.745425c0-4.076161 4.341225-9.697449 9.697449-9.697448z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 806.892388h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697449v15.742191a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449v-15.742191a9.697449 9.697449 0 0 1 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 965.018988h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697448v15.745425c0 7.276319-4.341225 9.697449-9.697449 9.697448H18.596365c-5.356224 0-9.697449-2.42113-9.697449-9.697448v-15.745425a9.697449 9.697449 0 0 1 9.697449-9.697448z\" fill=\"#1D1D1C\"/>\n <!-- 中间主体区域 -->\n <path d=\"M401.254461 260.208411h569.030132v35.137089H401.254461v-35.137089z\" fill=\"#F5822D\"/>\n <path d=\"M612.658845 283.634214h99.036812v445.103202H612.658845V283.634214z\" fill=\"#F5822D\"/>\n <path d=\"M398.671707 705.311612h596.768068a3.232483 3.232483 0 0 1 3.232483 3.232483v30.595451c0-0.135764-1.448152 3.232483-3.232483 3.232483H398.671707c-1.787563 0-3.232483-3.368247-3.232482-3.232483v-30.595451a3.232483 3.232483 0 0 1 3.232482-3.232483z\" fill=\"#F5822D\"/>\n <!-- 驾驶室/操作台 -->\n <path d=\"M1566.768202 96.221319h210.838699v837.500769h-210.838699V96.221319z\" fill=\"#F5822D\"/>\n <path d=\"M1771.749642 78.649542h113.738144l108.815073 120.911024V799.974874l-106.452128 151.315759h-116.101089V78.649542z\" fill=\"#FF9D55\"/>\n <!-- 主车身区域 -->\n <path d=\"M910.82307 72.795515h351.399986v866.783832H910.82307V72.795515z\" fill=\"#FF9D55\"/>\n <path d=\"M1127.519028 72.795515h134.704028v866.783832h-134.704028V72.795515z\" fill=\"#F5822D\"/>\n <!-- 顶部结构 -->\n <path d=\"M834.895278 131.361641h28.866073a17.778656 17.778656 0 0 1 17.778656 17.778656v708.237009a17.778656 17.778656 0 0 1-17.778656 17.778656h-28.866073a17.778656 17.778656 0 0 1-17.778656-17.778656v-708.237009a17.778656 17.778656 0 0 1 17.778656-17.778656z\" fill=\"#1D1D1C\"/>\n <!-- 右顶部 -->\n <path d=\"M2012.081515 154.787445h29.884305c10.893467 0 16.760424 7.958373 16.760424 17.778656v708.237009c0 9.817051-5.866957 17.778656-16.760424 17.778656h-29.884305c-7.871096 0-17.778656-7.961605-17.778656-17.778656v-708.237009c0-9.820283 9.90756-17.778656 17.778656-17.778656z\" fill=\"#1D1D1C\"/>\n <!-- 右下竖条 -->\n <path d=\"M2380.843167 72.795515h40.994349v856.349377h-40.994349V72.795515z\" fill=\"#F5822D\"/>\n <!-- 左侧驾驶室 -->\n <path d=\"M1584.944454 26.667984h151.057159c3.571894 0 6.464966 2.168996 6.464966 6.464966v964.404816a6.464966 6.464966 0 0 1-6.464966 6.464966h-151.057159a6.464966 6.464966 0 0 1-6.464966-6.464966V33.13295c0-4.29597 2.896305-6.464966 6.464966-6.464966z\" fill=\"#595956\"/>\n <!-- 右侧料斗 -->\n <path d=\"M1445.411096 230.922115h459.406938c26.781121 0 48.487244 21.709355 48.487244 48.487244v459.410171c0 26.777889-21.706123 48.487244-48.487244 48.487244H1445.411096c-26.777889 0-48.487244-21.709355-48.487244-48.487244V279.409359c0-26.777889 21.709355-48.487244 48.487244-48.487244z\" fill=\"#93654A\"/>\n <!-- 右下小料斗 -->\n <path d=\"M2393.773099 344.291756h114.698192c7.140555 0 12.929932 4.305667 12.929931 12.929932v306.484636a12.929932 12.929932 0 0 1-12.929931 12.929932h-114.698192a12.929932 12.929932 0 0 1-12.929932-12.929932V357.221688c0-8.624264 5.786144-12.929932 12.929932-12.929932z\" fill=\"#FF9D55\"/>\n <!-- 中心指示灯 -->\n <path d=\"M2451.120579 471.654816c22.643543 0 40.997581 18.354038 40.99758 40.997581 0 22.64031-18.354038 40.994348-40.99758 40.994349-22.64031 0-40.994348-18.354038-40.994349-40.994349 0-22.643543 18.354038-40.997581 40.994349-40.997581z\" fill=\"#FFED76\"/>\n </g>\n <!-- 左前轮胎 -->\n <g class=\"tractor-topdown-wheel-fl\">${animateWheelFL}\n <circle cx=\"143\" cy=\"174\" r=\"72\" fill=\"#1D1D1C\"/>\n <circle cx=\"143\" cy=\"174\" r=\"45\" fill=\"#3C3D3C\"/>\n <circle cx=\"143\" cy=\"174\" r=\"20\" fill=\"#1D1D1C\"/>\n <line x1=\"143\" y1=\"102\" x2=\"143\" y2=\"246\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"71\" y1=\"174\" x2=\"215\" y2=\"174\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"89\" y1=\"120\" x2=\"197\" y2=\"228\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n <line x1=\"197\" y1=\"120\" x2=\"89\" y2=\"228\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n </g>\n <!-- 右前轮胎 -->\n <g class=\"tractor-topdown-wheel-fr\">${animateWheelFR}\n <circle cx=\"2451\" cy=\"174\" r=\"72\" fill=\"#1D1D1C\"/>\n <circle cx=\"2451\" cy=\"174\" r=\"45\" fill=\"#3C3D3C\"/>\n <circle cx=\"2451\" cy=\"174\" r=\"20\" fill=\"#1D1D1C\"/>\n <line x1=\"2451\" y1=\"102\" x2=\"2451\" y2=\"246\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"2379\" y1=\"174\" x2=\"2523\" y2=\"174\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"2397\" y1=\"120\" x2=\"2505\" y2=\"228\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n <line x1=\"2505\" y1=\"120\" x2=\"2397\" y2=\"228\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n </g>\n <!-- 左后轮胎 -->\n <g class=\"tractor-topdown-wheel-bl\">${animateWheelBL}\n <circle cx=\"143\" cy=\"799\" r=\"72\" fill=\"#1D1D1C\"/>\n <circle cx=\"143\" cy=\"799\" r=\"45\" fill=\"#3C3D3C\"/>\n <circle cx=\"143\" cy=\"799\" r=\"20\" fill=\"#1D1D1C\"/>\n <line x1=\"143\" y1=\"727\" x2=\"143\" y2=\"871\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"71\" y1=\"799\" x2=\"215\" y2=\"799\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"89\" y1=\"745\" x2=\"197\" y2=\"853\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n <line x1=\"197\" y1=\"745\" x2=\"89\" y2=\"853\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n </g>\n <!-- 右后轮胎 -->\n <g class=\"tractor-topdown-wheel-br\">${animateWheelBR}\n <circle cx=\"2451\" cy=\"799\" r=\"72\" fill=\"#1D1D1C\"/>\n <circle cx=\"2451\" cy=\"799\" r=\"45\" fill=\"#3C3D3C\"/>\n <circle cx=\"2451\" cy=\"799\" r=\"20\" fill=\"#1D1D1C\"/>\n <line x1=\"2451\" y1=\"727\" x2=\"2451\" y2=\"871\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"2379\" y1=\"799\" x2=\"2523\" y2=\"799\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"2397\" y1=\"745\" x2=\"2505\" y2=\"853\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n <line x1=\"2505\" y1=\"745\" x2=\"2397\" y2=\"853\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n </g>\n </svg>\n `;\n}\n","/**\n * 图标缓存工具\n * @description 缓存 Leaflet DivIcon 实例,避免重复创建,使用双层缓存策略\n *\n * ## 双层缓存架构\n *\n * - **静态缓存**: 永久缓存预设图标,永不淘汰\n * - **动态缓存**: LRU 策略缓存动态生成的图标\n *\n * ## 性能优势\n *\n * - 预设图标命中率 100%\n * - 动态图标缓存容量提升 150%\n * - 减少重复创建开销\n */\n\nimport L from 'leaflet';\nimport type { SvgIconConfig, PresetIconName } from '../types/icon';\nimport { generateSvgHtml, svgIconToKey, isPresetIcon } from './iconUtils';\nimport { PULSE_ICONS, LOADING_ICONS } from '../constants/icon';\nimport {\n generateMarkerSvg,\n generateMonitorSvg,\n generateAlertSvg,\n generateFlagSvg,\n generateTargetSvg,\n generateWindSvg,\n generateFlagDoubleSvg,\n getMarkerAnchor,\n} from './markerSvg';\nimport { generatePulseSvg, generateLoadingSpinnerSvg, generateLoadingDotsSvg } from './pulseIcon';\nimport { LRUCache } from './LRUCache';\nimport { sanitizeSvg } from './svgUtils';\nimport {\n generateTractorSvg,\n generateTractor2Svg,\n generateTractorTopdownSvg,\n generateTruckSvg,\n generateTruck2Svg,\n generateAgriDroneSvg,\n generateAgriDroneSideSvg,\n} from './icons';\n\n// 重新导出供外部使用\nexport {\n generateTractorSvg,\n generateTractor2Svg,\n generateTractorTopdownSvg,\n generateTruckSvg,\n generateTruck2Svg,\n generateAgriDroneSvg,\n generateAgriDroneSideSvg,\n} from './icons';\nexport { generateSvgHtml } from './iconUtils';\nexport { PRESET_ICONS as validIcons } from '../constants/icon';\nexport { LRUCache };\n\n/** 非精灵图类图标(不走 steps(23) 动画) */\nconst NON_SPRITE_ICONS: readonly string[] = [\n 'tractor',\n 'tractor-2',\n 'tractorTopdown',\n 'truck',\n 'truck-2',\n 'agri-drone',\n 'agri-drone-side',\n ...PULSE_ICONS,\n ...LOADING_ICONS,\n 'monitor',\n 'alert',\n 'flag',\n 'target',\n 'wind',\n 'flag-double',\n];\n\n/** 缓存键类型 */\ninterface IconCacheKey {\n iconType: string;\n iconSize: string;\n className: string;\n animated: boolean;\n svgIconKey: string;\n customIconKey: string;\n extraClassName: string;\n iconAnchor: string;\n popupAnchor: string;\n color?: string;\n}\n\n/** 静态缓存最大数量(预设图标) */\nconst MAX_STATIC_CACHE_SIZE = 100;\n/** 动态缓存最大数量 */\nconst MAX_DYNAMIC_CACHE_SIZE = 500;\n\n/**\n * 双层图标缓存管理器\n * @description 静态缓存 + 动态 LRU 缓存组合\n */\nclass TwoLevelIconCache {\n /** 静态缓存 - 永久缓存预设图标 */\n private staticCache = new Map<string, L.DivIcon>();\n /** 动态缓存 - LRU 策略缓存动态图标 */\n private dynamicCache: LRUCache<string, L.DivIcon>;\n\n constructor(_maxStaticSize = MAX_STATIC_CACHE_SIZE, maxDynamicSize = MAX_DYNAMIC_CACHE_SIZE) {\n this.dynamicCache = new LRUCache(maxDynamicSize);\n }\n\n setStatic(key: string, icon: L.DivIcon): void {\n if (this.staticCache.size >= MAX_STATIC_CACHE_SIZE) {\n const firstKey = this.staticCache.keys().next().value;\n if (firstKey) {\n this.staticCache.delete(firstKey);\n }\n }\n this.staticCache.set(key, icon);\n }\n\n setDynamic(key: string, icon: L.DivIcon): void {\n this.dynamicCache.set(key, icon);\n }\n\n get(key: string): L.DivIcon | undefined {\n const staticIcon = this.staticCache.get(key);\n if (staticIcon) return staticIcon;\n return this.dynamicCache.get(key);\n }\n\n has(key: string): boolean {\n return this.staticCache.has(key) || this.dynamicCache.has(key);\n }\n\n delete(key: string): boolean {\n return this.staticCache.delete(key) || this.dynamicCache.delete(key);\n }\n\n clear(): void {\n this.staticCache.clear();\n this.dynamicCache.clear();\n }\n\n clearDynamic(): void {\n this.dynamicCache.clear();\n }\n\n getStats(): {\n staticSize: number;\n dynamicSize: number;\n totalSize: number;\n staticMaxSize: number;\n dynamicMaxSize: number;\n staticUtilization: number;\n dynamicUtilization: number;\n } {\n const staticSize = this.staticCache.size;\n const dynamicSize = this.dynamicCache.size;\n return {\n staticSize,\n dynamicSize,\n totalSize: staticSize + dynamicSize,\n staticMaxSize: MAX_STATIC_CACHE_SIZE,\n dynamicMaxSize: MAX_DYNAMIC_CACHE_SIZE,\n staticUtilization: staticSize / MAX_STATIC_CACHE_SIZE,\n dynamicUtilization: dynamicSize / MAX_DYNAMIC_CACHE_SIZE,\n };\n }\n}\n\n/** 图标缓存实例 - 双层缓存策略 */\nconst iconCache = new TwoLevelIconCache();\n\n/**\n * 生成图标容器 HTML\n */\nfunction wrapInContainer(\n content: string,\n iconSize: [number, number],\n className: string,\n animated: boolean,\n extraStyle?: string\n): string {\n const animatedClass = animated ? 'animated' : '';\n return `<div class=\"marker-icon-inner ${className} ${animatedClass}\" style=\"\n width: ${iconSize[0]}px;\n height: ${iconSize[1]}px;\n display: flex;\n align-items: center;\n justify-content: center;\n filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n ${extraStyle ?? ''}\n \">${content}</div>`;\n}\n\n/**\n * 构建 DivIcon 实例\n */\nfunction buildDivIcon(\n html: string,\n iconSize: [number, number],\n className: string,\n extraClassName: string,\n options: L.DivIconOptions\n): L.DivIcon {\n const iconAnchor = options.iconAnchor ?? [iconSize[0] / 2, iconSize[1]];\n const popupAnchor = options.popupAnchor ?? [0, -iconSize[1] * 1.1];\n return L.divIcon({\n html,\n iconSize,\n iconAnchor,\n popupAnchor,\n className: `marker-icon-wrapper ${className} ${extraClassName}`.trim(),\n });\n}\n\n/**\n * 生成缓存键\n */\nfunction createCacheKey(config: IconCacheKey): string {\n return `${config.iconType}|${config.iconSize}|${config.className}|${config.animated}|${config.svgIconKey}|${config.customIconKey}|${config.extraClassName}|${config.iconAnchor}|${config.popupAnchor}|${config.color || ''}`;\n}\n\n/**\n * 创建图标(带缓存)\n */\nexport function createCachedIcon(\n iconType: string,\n options: L.DivIconOptions = {},\n animated = false,\n svgIcon: string | SvgIconConfig | null | undefined = null,\n customIcon: string | null | undefined = null,\n extraClassName = '',\n color?: string\n): L.DivIcon {\n const { iconSize: rawIconSize = [48, 48], className = '' } = options;\n const iconSize: [number, number] = Array.isArray(rawIconSize)\n ? [rawIconSize[0], rawIconSize[1]]\n : [rawIconSize.x, rawIconSize.y];\n\n const cacheKey = createCacheKey({\n iconType,\n iconSize: `${iconSize[0]}x${iconSize[1]}`,\n className,\n animated,\n svgIconKey: svgIconToKey(svgIcon),\n customIconKey: customIcon || '',\n extraClassName,\n iconAnchor: options.iconAnchor\n ? `${(options.iconAnchor as [number, number])[0]},${(options.iconAnchor as [number, number])[1]}`\n : '',\n popupAnchor: options.popupAnchor\n ? `${(options.popupAnchor as [number, number])[0]},${(options.popupAnchor as [number, number])[1]}`\n : '',\n color,\n });\n\n const cached = iconCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const icon = createIconInternal(\n iconType,\n iconSize,\n className,\n animated,\n svgIcon,\n customIcon,\n extraClassName,\n options,\n color\n );\n\n if (isPresetIcon(iconType)) {\n iconCache.setStatic(cacheKey, icon);\n } else {\n iconCache.setDynamic(cacheKey, icon);\n }\n return icon;\n}\n\n/**\n * 内部图标创建函数\n */\nfunction createIconInternal(\n iconType: string,\n iconSize: [number, number],\n className: string,\n animated: boolean,\n svgIcon: string | SvgIconConfig | null | undefined,\n customIcon: string | null | undefined,\n extraClassName: string,\n options: L.DivIconOptions,\n color?: string\n): L.DivIcon {\n const iconAnchor = options.iconAnchor ?? [iconSize[0] / 2, iconSize[1]];\n\n if (customIcon) {\n const safeCustomIcon = customIcon\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n const isDataUrl = customIcon.startsWith('data:');\n const isSvgString = customIcon.trim().startsWith('<svg');\n const isHttpUrl = customIcon.startsWith('http://') || customIcon.startsWith('https://');\n const isRelativePath =\n customIcon.startsWith('/') || customIcon.startsWith('./') || customIcon.startsWith('../');\n\n if (isSvgString) {\n const sanitized = sanitizeSvg(customIcon);\n return buildDivIcon(\n wrapInContainer(sanitized, iconSize, 'marker-custom-icon', animated),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n if (isDataUrl || isHttpUrl || isRelativePath) {\n return buildDivIcon(\n wrapInContainer(\n `<img src=\"${safeCustomIcon}\" style=\"width: 100%; height: 100%; object-fit: contain;\" />`,\n iconSize,\n 'marker-custom-icon',\n animated\n ),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n return buildDivIcon(\n wrapInContainer(\n '',\n iconSize,\n 'marker-custom-icon',\n animated,\n `background-image: url('${safeCustomIcon}');background-size: contain;background-repeat: no-repeat;background-position: center;`\n ),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n if (svgIcon) {\n const svgHtml = generateSvgHtml(svgIcon, { ...options, iconSize });\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, 'marker-svg-icon', animated),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 农机/载具图标(SVG 已提取到 ./icons/index.ts)\n const vehicleIconGenerators: Record<string, (w: number, h: number, a: boolean) => string> = {\n tractor: generateTractorSvg,\n 'tractor-2': generateTractor2Svg,\n tractorTopdown: generateTractorTopdownSvg,\n truck: generateTruckSvg,\n 'truck-2': generateTruck2Svg,\n 'agri-drone': generateAgriDroneSvg,\n 'agri-drone-side': generateAgriDroneSideSvg,\n };\n\n // 优先检查是否为农机/载具图标(使用原始 iconType)\n const vehicleGenerator = vehicleIconGenerators[iconType];\n if (vehicleGenerator) {\n const svgHtml = vehicleGenerator(iconSize[0], iconSize[1], animated);\n const cssClass = `icon-${iconType}`;\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n const safeIconType = isPresetIcon(iconType) ? iconType : 'point';\n\n // 彩色标记图标(水滴形 pin)\n const markerSvgHtml = generateMarkerSvg(\n safeIconType as PresetIconName,\n iconSize[0],\n iconSize[1],\n animated,\n iconType === 'marker' ? color : undefined\n );\n if (markerSvgHtml) {\n const markerAnchor = getMarkerAnchor(iconSize[0], iconSize[1]);\n const html = wrapInContainer(markerSvgHtml, iconSize, 'marker-pin-icon', animated);\n return L.divIcon({\n html,\n iconSize,\n iconAnchor: options.iconAnchor ?? markerAnchor,\n popupAnchor: options.popupAnchor ?? [0, -markerAnchor[1]],\n className: `marker-icon-wrapper ${className} ${extraClassName}`.trim(),\n });\n }\n\n // 脉冲同心圆图标\n if ((PULSE_ICONS as readonly string[]).includes(safeIconType)) {\n const svgHtml = generatePulseSvg(\n safeIconType as PresetIconName,\n iconSize[0],\n iconSize[1],\n animated,\n safeIconType === 'pulse' ? color : undefined\n );\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, 'marker-pulse-icon', animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // Loading 图标\n if (safeIconType === 'loading-spinner') {\n const svgHtml = generateLoadingSpinnerSvg(iconSize[0], iconSize[1], animated);\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, 'marker-loading-icon', animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n if (safeIconType === 'loading-dots') {\n const svgHtml = generateLoadingDotsSvg(iconSize[0], iconSize[1], animated);\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, 'marker-loading-icon', animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 监测站图标\n if (safeIconType === 'monitor') {\n const svgHtml = generateMonitorSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-monitor-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 警示警报图标\n if (safeIconType === 'alert') {\n const svgHtml = generateAlertSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-alert-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 旗帜图标\n if (safeIconType === 'flag') {\n const svgHtml = generateFlagSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-flag-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 靶心图标\n if (safeIconType === 'target') {\n const svgHtml = generateTargetSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-target-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 风向图标\n if (safeIconType === 'wind') {\n const svgHtml = generateWindSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-wind-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 双旗帜图标\n if (safeIconType === 'flag-double') {\n const svgHtml = generateFlagDoubleSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-flag-double-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 默认:精灵图图标\n const animatedClass = animated ? 'animated' : '';\n const isSpriteIcon = !NON_SPRITE_ICONS.includes(safeIconType);\n const timingStyle = animated && isSpriteIcon ? 'animation-timing-function: steps(23);' : '';\n\n return L.divIcon({\n html: `<div class=\"marker-icon-inner icon-${safeIconType} ${animatedClass}\" style=\"\n width: ${iconSize[0]}px;\n height: ${iconSize[1]}px;\n ${timingStyle}\n \"></div>`,\n iconSize,\n iconAnchor,\n popupAnchor: options.popupAnchor ?? [0, -iconSize[1] * 1.1],\n className: `marker-icon-wrapper ${className} ${extraClassName}`.trim(),\n });\n}\n\n/**\n * 清空图标缓存\n */\nexport function clearIconCache(): void {\n iconCache.clear();\n}\n\n/**\n * 清空动态缓存(保留静态缓存)\n */\nexport function clearDynamicIconCache(): void {\n iconCache.clearDynamic();\n}\n\n/**\n * 获取缓存统计信息\n */\nexport function getIconCacheStats(): {\n size: number;\n maxSize: number;\n utilization: number;\n staticSize: number;\n dynamicSize: number;\n staticMaxSize: number;\n dynamicMaxSize: number;\n staticUtilization: number;\n dynamicUtilization: number;\n} {\n const stats = iconCache.getStats();\n return {\n size: stats.totalSize,\n maxSize: stats.staticMaxSize + stats.dynamicMaxSize,\n utilization: (stats.staticUtilization + stats.dynamicUtilization) / 2,\n staticSize: stats.staticSize,\n dynamicSize: stats.dynamicSize,\n staticMaxSize: stats.staticMaxSize,\n dynamicMaxSize: stats.dynamicMaxSize,\n staticUtilization: stats.staticUtilization,\n dynamicUtilization: stats.dynamicUtilization,\n };\n}\n\nexport default createCachedIcon;\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/**\n * SVG 图标组件库\n * @description 统一的 SVG 图标组件,用于工具栏等场景\n */\n\n/** 图标组件属性 */\nexport interface IconProps {\n size?: number;\n color?: string;\n /** 无障碍标签文本 */\n ariaLabel?: string;\n /** 是否对屏幕阅读器隐藏,默认 true */\n ariaHidden?: boolean;\n}\n\n// 标注点移动图标 - 地图定位(用于 Marker 组件)\nexport const MarkerRedrawIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M655.488 0.64c-105.984 0-191.552 89.216-191.552 199.168 0 110.08 191.552 358.976 191.552 358.976s191.36-248.64 191.36-359.04C846.976 89.92 761.216 0.64 655.424 0.64z m5.696 323.84c-69.056 0-125.248-58.304-125.248-130.432 0-72.064 56-130.368 125.248-130.368s125.248 58.24 125.248 130.368c0 72.128-56.192 130.368-125.248 130.368zM423.232 91.328a269.248 269.248 0 0 0-19.2 101.568c0 16.704 3.328 36.032 9.28 56.96L283.648 606.464 64 499.2V187.264C64 134.4 105.408 91.392 156.16 91.392h267.136z m468.992 3.776c38.592 11.392 67.136 48.32 66.944 92.096v740.352c0 3.072-0.256 5.952-0.448 9.024L375.488 651.52l96.512-265.792c74.944 139.2 184.96 281.856 184.96 281.856s253.184-328.896 253.184-474.624c0-34.56-6.336-67.456-17.92-97.792zM64 615.68l183.68 89.728-114.496 315.008C93.568 1009.6 64 971.776 64 927.36V615.68z m803.2 407.808H240.32l99.264-273.024 551.744 269.696a88.448 88.448 0 0 1-24.064 3.328z\"\n fill={color}\n />\n </svg>\n);\n\n// 地块重绘图标(用于 PlotLayer 组件)\nexport const PlotRedrawIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M387.2 889.6l464-492.8c16-16 28.8-32 44.8-48v-128h57.6c12.8 0 22.4-9.6 22.4-22.4V25.6c0-12.8-9.6-22.4-22.4-22.4h-160c-12.8-3.2-25.6 9.6-25.6 22.4v60.8h-108.8-3.2H224V25.6c0-12.8-9.6-25.6-22.4-25.6h-160C28.8 0 16 12.8 16 25.6v172.8c0 12.8 9.6 22.4 22.4 22.4H96v582.4H38.4c-12.8 0-22.4 9.6-22.4 22.4v172.8c0 12.8 9.6 22.4 22.4 22.4h160c16 3.2 25.6-9.6 25.6-22.4v-64h118.4c16-12.8 28.8-28.8 44.8-44.8zM812.8 48H928v124.8h-115.2V48z m-211.2 86.4L140.8 627.2v-172.8l3.2-3.2 3.2-3.2 291.2-313.6h163.2zM224 195.2V134.4h156.8l-236.8 252.8V220.8h57.6c12.8 0 22.4-12.8 22.4-25.6z m-163.2-22.4V48h115.2v124.8H60.8z m118.4 803.2H60.8v-124.8h115.2v124.8z m12.8-172.8H140.8v-115.2h3.2L665.6 134.4H768v51.2L192 803.2z m32 86.4v-51.2L800 220.8h48v108.8L323.2 889.6H224zM998.4 576l-115.2-115.2c-6.4-6.4-12.8-9.6-22.4-9.6s-16 3.2-22.4 9.6L480 812.8c-3.2 3.2-6.4 9.6-9.6 16l-22.4 150.4-3.2 16v3.2c0 3.2 3.2 9.6 9.6 9.6h3.2l163.2-28.8c6.4 0 12.8-3.2 16-9.6l358.4-352c16-12.8 16-32 3.2-41.6zM601.6 915.2l-73.6 12.8 9.6-76.8L864 534.4l64 60.8-326.4 320z m-112 89.6h400v19.2H489.6v-19.2z\"\n fill={color}\n />\n </svg>\n);\n\n// 道路重绘图标 - 曲线绘制(用于 Road 组件)\nexport const RoadRedrawIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1106 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M419.820561 758.846617a24.737158 24.737158 0 0 1-24.127619-30.070632l44.140843-199.624296a24.737158 24.737158 0 0 1 40.635989-12.851131l150.556339 138.111567a24.737158 24.737158 0 0 1-9.244687 41.804274l-194.747977 61.512728a24.584773 24.584773 0 0 1-7.212888 1.11749z m59.023774-177.172912l-25.397493 115.964953 113.120434-35.55649z m195.001952 52.522015a52.318836 52.318836 0 0 1-35.556491-13.917826l-124.396921-114.034744a52.928376 52.928376 0 0 1-3.301674-74.617834L880.27711 27.398816a52.725196 52.725196 0 0 1 74.56704-3.25088l124.346126 114.085539a52.877581 52.877581 0 0 1 3.301674 74.56704l-369.685909 404.277295a52.369631 52.369631 0 0 1-36.57239 17.067115h-2.387364zM921.421049 60.567942h-4.673138L547.062001 464.743647a3.403264 3.403264 0 0 0 0 4.774728l124.346126 114.034744a3.657239 3.657239 0 0 0 2.33657 0.863515l372.073273-405.191605a3.352469 3.352469 0 0 0 0-4.774728z m0 0\"\n fill={color}\n />\n <path\n d=\"M419.871356 769.005614a34.896156 34.896156 0 0 1-34.032641-42.413814l44.140843-199.624295a34.896156 34.896156 0 0 1 57.652309-18.13381l150.556339 138.111567a34.896156 34.896156 0 0 1-13.054311 58.972979l-194.747977 61.512728a34.642181 34.642181 0 0 1-10.514562 1.574645z m44.090048-248.895433a14.578161 14.578161 0 0 0-14.222596 11.428872l-44.140843 199.624296a14.578161 14.578161 0 0 0 14.222596 17.72745 14.374981 14.374981 0 0 0 4.368369-0.660335l194.747977-61.512728a14.578161 14.578161 0 0 0 5.435063-24.635568l-150.556339-138.111568a14.527366 14.527366 0 0 0-9.854227-4.012803z m-24.432389 192.716178l33.219921-150.353159 113.475999 104.028132z m45.461513-111.74897l-18.03222 81.576748 79.595743-25.143518z m188.906554 43.277329a62.325448 62.325448 0 0 1-42.413814-16.609961l-124.396921-113.983949a63.188963 63.188963 0 0 1-3.911214-88.942021L872.911837 20.541492a62.884193 62.884193 0 0 1 88.942021-3.911214l124.346126 114.085539a63.188963 63.188963 0 0 1 3.911214 88.891226l-369.685909 404.277295a62.884193 62.884193 0 0 1-43.632893 20.317995h-2.793724zM919.236865 20.389107h-1.879415a42.312223 42.312223 0 0 0-29.562682 13.816237L518.108859 438.431844a42.870968 42.870968 0 0 0 2.692134 60.293648l124.396921 113.983949a42.058249 42.058249 0 0 0 27.937243 11.225692h2.946109a42.464608 42.464608 0 0 0 29.308707-13.765441l369.635114-404.378885a42.820173 42.820173 0 0 0-2.692134-60.242854L947.986827 31.513209A42.464608 42.464608 0 0 0 919.236865 20.439902zM674.049467 594.829606a13.867031 13.867031 0 0 1-8.889123-3.200084l-0.355565-0.30477-124.346126-114.034744a13.663851 13.663851 0 0 1-0.91431-19.04812l372.581224-407.375789 13.105106-0.558745 127.495416 116.828469a13.562261 13.562261 0 0 1 0.863514 19.098914l-375.070178 408.493279z m-114.898259-128.003365l113.577589 104.180517 361.253942-393.407168-114.339514-104.891647z\"\n fill={color}\n />\n <path\n d=\"M194.697182 1013.786652a134.251148 134.251148 0 0 1-88.637251-30.019837 137.908387 137.908387 0 0 1-51.201346-95.799344 246.304888 246.304888 0 0 1 19.708455-111.241019 1362.778684 1362.778684 0 0 1 139.076672-239.59995c98.593068-147.30546 200.538605-299.995188 126.987465-376.390848-36.4708-37.79147-95.088214-43.988458-174.328392-18.387785a541.017398 541.017398 0 0 0-115.355414 54.29984 26.210213 26.210213 0 0 1-28.749962-43.886868 585.767781 585.767781 0 0 1 128.003365-60.344443c98.440683-31.797661 177.376092-20.724354 228.171078 31.899251a142.225961 142.225961 0 0 1 40.229629 97.780349 274.902465 274.902465 0 0 1-23.822848 109.71717 1438.767983 1438.767983 0 0 1-137.146463 234.317271 1330.828638 1330.828638 0 0 0-133.743199 229.288568c-34.794566 90.36428-9.752637 126.530311 16.051216 147.914999 47.594902 39.670884 132.066964 6.349373 194.849567-28.648372a888.251923 888.251923 0 0 0 134.098763-94.072314 26.210213 26.210213 0 1 1 34.591386 39.416909 929.091092 929.091092 0 0 1-143.191066 100.472483 424.239725 424.239725 0 0 1-127.597005 49.728291 212.881787 212.881787 0 0 1-37.99465 3.555649z\"\n fill={color}\n />\n <path\n d=\"M194.747977 1023.945649a144.308556 144.308556 0 0 1-95.139009-32.407201 147.71182 147.71182 0 0 1-54.80779-102.656667 256.00673 256.00673 0 0 1 20.317994-115.863363A1368.924877 1368.924877 0 0 1 205.211744 531.437463c96.510474-144.257761 195.967057-293.239455 127.95257-363.742896a108.244116 108.244116 0 0 0-81.271978-30.730966 273.988155 273.988155 0 0 0-82.541852 14.984521 533.347355 533.347355 0 0 0-112.917254 53.131555 36.420005 36.420005 0 0 1-39.874065-60.953983 599.076067 599.076067 0 0 1 130.49232-61.512728 343.932851 343.932851 0 0 1 104.688466-18.235401 178.493581 178.493581 0 0 1 133.895584 52.725196 152.384959 152.384959 0 0 1 43.074148 104.586877 284.451923 284.451923 0 0 1-24.584773 113.831564 1444.457022 1444.457022 0 0 1-138.162362 236.0443 1325.190394 1325.190394 0 0 0-132.778094 227.459949c-32.305611 83.913317-11.530462 116.066543 13.054311 136.486127a74.516245 74.516245 0 0 0 49.118752 15.644856 299.690418 299.690418 0 0 0 134.251148-45.309127 872.403888 872.403888 0 0 0 132.066964-92.80244 36.36921 36.36921 0 1 1 48.052057 54.60461 947.072517 947.072517 0 0 1-144.918095 101.589972 434.144747 434.144747 0 0 1-130.746295 50.794986 223.497939 223.497939 0 0 1-39.315319 3.911214zM251.790746 116.645606a127.698595 127.698595 0 0 1 96.002524 36.97875c79.392563 82.237083-24.787953 238.17769-125.565205 388.937209a1357.394416 1357.394416 0 0 0-138.111568 237.771331 236.603046 236.603046 0 0 0-19.098915 106.669471 128.05416 128.05416 0 0 0 47.594902 88.94202 124.549306 124.549306 0 0 0 82.084698 27.683268 203.179945 203.179945 0 0 0 35.912055-3.403264 414.385497 414.385497 0 0 0 124.498511-48.610802 924.113184 924.113184 0 0 0 141.413242-99.202608 16.051216 16.051216 0 0 0-21.181509-24.127618 900.899875 900.899875 0 0 1-135.876588 95.291394 314.0654 314.0654 0 0 1-144.156171 47.899672 94.173904 94.173904 0 0 1-62.122268-20.317995c-28.343602-23.518079-56.179255-62.934988-18.997325-159.394666a1336.263701 1336.263701 0 0 1 134.759098-231.320368 1432.41861 1432.41861 0 0 0 136.333743-232.488651 265.099033 265.099033 0 0 0 23.060924-105.653571 132.422529 132.422529 0 0 0-37.38511-91.024616 158.886717 158.886717 0 0 0-119.266627-46.528207 323.868832 323.868832 0 0 0-98.440684 17.270295A576.269118 576.269118 0 0 0 27.683267 161.192809a16.102011 16.102011 0 1 0 17.625861 26.921343 556.408279 556.408279 0 0 1 117.793573-55.468125 293.950585 293.950585 0 0 1 88.688045-15.949626z\"\n fill={color}\n />\n </svg>\n);\n\n// 灌溉渠重绘图标 - 水渠绘制(用于 Irrigation 组件)\nexport const IrrigationRedrawIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M611.693714 648.923429l86.820572-69.046858a25.307429 25.307429 0 0 0-3.364572-41.691428L255.268571 295.497143a23.917714 23.917714 0 0 0-26.404571 2.267428 25.6 25.6 0 0 0-8.777143 25.673143l119.003429 497.371429a24.649143 24.649143 0 0 0 15.652571 17.554286c7.753143 2.852571 16.384 1.462857 22.820572-3.730286l86.893714-69.046857 187.977143 248.905143a24.210286 24.210286 0 0 0 19.163428 9.508571 24.429714 24.429714 0 0 0 14.921143-5.193143l108.617143-86.308571a25.380571 25.380571 0 0 0 4.388571-34.889143l-187.830857-248.685714z\"\n fill={color}\n />\n <path\n d=\"M397.458286 200.411429c40.082286 9.728 79.36 23.405714 117.394285 36.571428 137.362286 47.542857 279.405714 96.621714 509.147429 0l-10.24-16.676571c-220.452571 92.745143-357.595429 45.275429-490.276571-0.585143-38.619429-13.385143-78.482286-27.209143-119.661715-37.302857C278.893714 151.844571 13.897143 271.286857 2.56 276.260571L13.385143 292.571429c2.779429-1.024 268.068571-120.539429 384.073143-92.16z m36.278857-122.88c253.586286 59.830857 439.808-7.314286 539.794286-43.300572 19.456-7.021714 36.205714-13.019429 49.005714-16.457143L1015.369143 0c-13.677714 3.657143-31.012571 9.874286-50.980572 17.115429-97.426286 35.108571-278.820571 100.425143-524.507428 42.422857-93.330286-22.016-199.168-7.241143-305.883429 42.715428C53.906286 139.776 2.194286 183.149714 0 184.905143l16.091429 13.019428C18.285714 196.242286 221.476571 27.428571 433.737143 77.531429z m452.169143 58.514285l13.897143 35.474286c28.525714-7.68 58.221714-16.018286 87.771428-24.722286l-15.067428-35.108571c-29.403429 8.557714-58.514286 16.749714-86.601143 24.283428z\"\n fill={color}\n />\n <path\n d=\"M714.825143 168.594286c-2.194286 0-4.242286 0-6.290286-0.146286l-1.389714 52.004571a190.317714 190.317714 0 0 0 58.368-6.582857c12.434286-3.510857 25.526857-7.606857 39.058286-11.849143l-12.141715-50.176c-13.165714 4.096-25.892571 8.045714-37.888 11.556572-12.288 3.437714-25.307429 5.12-39.716571 5.12zM350.281143 73.142857h-1.682286l0.365714 52.004572h1.462858c4.534857 0 8.923429 0.292571 12.946285 0.731428 21.869714 2.852571 45.129143 7.68 71.021715 15.140572l10.825142-50.468572a511.707429 511.707429 0 0 0-76.946285-16.237714A140.434286 140.434286 0 0 0 350.281143 73.142857zM26.038857 287.451429c13.165714-10.093714 40.594286-30.793143 76.507429-54.564572l-22.674286-44.982857c-37.083429 24.649143-65.462857 45.860571-79.140571 56.466286L0 244.955429l12.434286 21.796571V292.571429c6.948571 0 11.410286-3.510857 13.604571-5.12z m156.672-103.643429c29.915429-16.530286 57.782857-29.769143 82.724572-39.497143l-14.409143-49.152c-26.770286 10.24-56.539429 24.429714-88.064 41.910857l19.748571 46.738286z m338.870857-13.458286l11.702857 4.242286c26.916571 9.947429 52.297143 19.309714 77.677715 27.062857l11.776-50.249143c-24.356571-7.460571-49.298286-16.676571-75.702857-26.331428l-11.702858-4.315429-13.751432 49.590928z\"\n fill={color}\n />\n </svg>\n);\n\n// 剪切图标 - 剪刀\nexport const ClipIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <circle cx=\"6\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <line x1=\"20\" y1=\"4\" x2=\"8.12\" y2=\"15.88\" />\n <line x1=\"14.47\" y1=\"14.48\" x2=\"20\" y2=\"20\" />\n <line x1=\"8.12\" y1=\"8.12\" x2=\"12\" y2=\"12\" />\n </svg>\n);\n\n// 移动图标 - 四向箭头\nexport const MoveIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <polyline points=\"5 9 2 12 5 15\" />\n <polyline points=\"9 5 12 2 15 5\" />\n <polyline points=\"15 19 12 22 9 19\" />\n <polyline points=\"19 9 22 12 19 15\" />\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\" />\n </svg>\n);\n\n// 删除图标 - 垃圾桶\nexport const DeleteIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" />\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" />\n </svg>\n);\n\n// 取消图标 - X\nexport const CancelIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\n// 保存图标 - 勾选\nexport const SaveIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" />\n <polyline points=\"17 21 17 13 7 13 7 21\" />\n <polyline points=\"7 3 7 8 15 8\" />\n </svg>\n);\n\n// 新建图标 - 加号\nexport const CreateIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n);\n\n// 编辑图标 - 文档编辑\nexport const EditIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n);\n\n// 反转图标 - 双向箭头\nexport const ReverseIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path d=\"M17 1l4 4-4 4\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <path d=\"M7 23l-4-4 4-4\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </svg>\n);\n\n// 全屏图标\nexport interface FullscreenIconProps extends Omit<IconProps, 'ariaLabel' | 'ariaHidden'> {\n /** 是否处于全屏状态 */\n isFullscreen?: boolean;\n}\n\nexport const FullscreenIcon = ({\n size = 20,\n color = 'currentColor',\n isFullscreen = false,\n}: FullscreenIconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {isFullscreen ? (\n // 退出全屏图标\n <path d=\"M8 3v3a2 2 0 0 1-2 2H3m13 0h3a2 2 0 0 1 2 2v3m0 13v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\" />\n ) : (\n // 进入全屏图标\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\" />\n )}\n </svg>\n);\n\n// ========== 测量工具栏图标(UI 操作) ==========\n\n// 测量长度图标 - 直尺(UI 操作)\nexport const MeasureLengthUIIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M254.4 82.624L82.624 254.4a60.704 60.704 0 0 0 0 85.92L254.4 512l128.8-128.8-42.88-42.88-85.92 85.888-42.88-42.88 85.888-85.92-42.88-42.88-85.92 85.888-42.88-42.88 171.776-171.84 171.584 171.616L512 254.4l-171.776-171.84a60.576 60.576 0 0 0-85.76 0z m644.096 644.064l-171.808 171.808-42.88-42.912 85.888-85.888-42.88-42.88-85.92 85.856-42.88-42.88 85.888-85.888-42.912-42.912L512 769.6l171.776 171.776a60.704 60.704 0 0 0 85.92 0l171.776-171.776a60.704 60.704 0 0 0 0-85.92L769.6 512l-42.912 42.88 171.808 171.808zM680.8 211.328l131.968 131.872-43.968 44L636.8 255.2l44-43.872zM240.96 650.976l131.968 131.872-44 44-131.968-131.872 44-44zM680.704 123.424a124.544 124.544 0 0 1 176.288 0.096l43.584 43.52a124.704 124.704 0 0 1 0.096 176.16L355.264 888.416l-268.352 48.384 48.384-268.288L680.704 123.424zM334.4 821.344L857.472 298.656c23.84-23.872 23.552-63.264-0.8-87.52L813.12 167.616c-24.544-24.544-63.552-24.832-87.584-0.8L202.432 689.6l-27.52 159.424 159.52-27.616z\"\n fill={color}\n />\n </svg>\n);\n\n// 测量面积图标 - 多边形(UI 操作)\nexport const MeasureAreaUIIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M387.2 889.6l464-492.8c16-16 28.8-32 44.8-48v-128h57.6c12.8 0 22.4-9.6 22.4-22.4V25.6c0-12.8-9.6-22.4-22.4-22.4h-160c-12.8-3.2-25.6 9.6-25.6 22.4v60.8h-108.8-3.2H224V25.6c0-12.8-9.6-25.6-22.4-25.6h-160C28.8 0 16 12.8 16 25.6v172.8c0 12.8 9.6 22.4 22.4 22.4H96v582.4H38.4c-12.8 0-22.4 9.6-22.4 22.4v172.8c0 12.8 9.6 22.4 22.4 22.4h160c16 3.2 25.6-9.6 25.6-22.4v-64h118.4c16-12.8 28.8-28.8 44.8-44.8zM812.8 48H928v124.8h-115.2V48z m-211.2 86.4L140.8 627.2v-172.8l3.2-3.2 3.2-3.2 291.2-313.6h163.2zM224 195.2V134.4h156.8l-236.8 252.8V220.8h57.6c12.8 0 22.4-12.8 22.4-25.6z m-163.2-22.4V48h115.2v124.8H60.8z m118.4 803.2H60.8v-124.8h115.2v124.8z m12.8-172.8H140.8v-115.2h3.2L665.6 134.4H768v51.2L192 803.2z m32 86.4v-51.2L800 220.8h48v108.8L323.2 889.6H224zM998.4 576l-115.2-115.2c-6.4-6.4-12.8-9.6-22.4-9.6s-16 3.2-22.4 9.6L480 812.8c-3.2 3.2-6.4 9.6-9.6 16l-22.4 150.4-3.2 16v3.2c0 3.2 3.2 9.6 9.6 9.6h3.2l163.2-28.8c6.4 0 12.8-3.2 16-9.6l358.4-352c16-12.8 16-32 3.2-41.6zM601.6 915.2l-73.6 12.8 9.6-76.8L864 534.4l64 60.8-326.4 320z m-112 89.6h400v19.2H489.6v-19.2z\"\n fill={color}\n />\n </svg>\n);\n\n// 清空测量图标 - 垃圾桶(UI 操作)\nexport const ClearMeasureUIIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M740.266667 869.546667H256a62.72 62.72 0 0 1-51.2-23.466667 59.52 59.52 0 0 1-4.693333-66.773333A564.906667 564.906667 0 0 0 274.133333 554.666667l64 3.626666a610.986667 610.986667 0 0 1-67.626666 225.706667 14.933333 14.933333 0 0 0 13.44 21.333333h442.666666a14.506667 14.506667 0 0 0 14.293334-11.093333 512 512 0 0 0-14.293334-237.226667l62.72-17.066666c36.48 130.773333 26.026667 250.666667 7.04 293.973333a59.733333 59.733333 0 0 1-56.106666 35.626667z\"\n fill={color}\n />\n <path\n d=\"M384 869.546667a31.146667 31.146667 0 0 1-21.333333-8.533334 31.786667 31.786667 0 0 1-1.706667-45.226666A192 192 0 0 0 414.08 704a32.213333 32.213333 0 0 1 32-31.573333c17.493333 0 31.786667 14.08 32 31.573333a253.013333 253.013333 0 0 1-71.04 155.306667 32 32 0 0 1-23.04 10.24zM571.093333 869.546667a32 32 0 0 1-23.466666-53.76A192 192 0 0 0 601.6 704a32.213333 32.213333 0 0 1 32-31.573333c17.493333 0 31.786667 14.08 32 31.573333a253.013333 253.013333 0 0 1-71.04 155.306667 32 32 0 0 1-23.466667 10.24zM827.306667 496l-55.68-114.986667a80.64 80.64 0 0 0-72.96-45.866666H605.866667V202.666667A53.333333 53.333333 0 0 0 552.533333 149.333333h-49.92a53.76 53.76 0 0 0-53.546666 53.333334v132.48H356.266667a81.066667 81.066667 0 0 0-72.96 45.866666l-57.173334 118.4a53.12 53.12 0 0 0 7.253334 57.813334A56.746667 56.746667 0 0 0 277.333333 576h503.68a53.333333 53.333333 0 0 0 48.426667-31.146667 57.813333 57.813333 0 0 0-2.133333-48.853333z m-77.013334 16H304.853333a8.533333 8.533333 0 0 1-7.68-12.373333L341.333333 408.746667a17.066667 17.066667 0 0 1 15.36-9.6h103.68a53.12 53.12 0 0 0 53.12-53.12v-128c0-2.346667 1.92-4.266667 4.266667-4.266667h20.266667c2.346667 0 4.266667 1.92 4.266666 4.266667v128a53.333333 53.333333 0 0 0 53.333334 53.12h103.466666a17.706667 17.706667 0 0 1 15.573334 9.6l43.733333 90.88a8.533333 8.533333 0 0 1-8.106667 12.373333z\"\n fill={color}\n />\n </svg>\n);\n\n/** 图标组件映射 */\nconst Icons = {\n MarkerRedraw: MarkerRedrawIcon,\n PlotRedraw: PlotRedrawIcon,\n RoadRedraw: RoadRedrawIcon,\n IrrigationRedraw: IrrigationRedrawIcon,\n Clip: ClipIcon,\n Move: MoveIcon,\n Delete: DeleteIcon,\n Cancel: CancelIcon,\n Save: SaveIcon,\n Create: CreateIcon,\n Edit: EditIcon,\n Reverse: ReverseIcon,\n // 测量工具栏图标(UI 操作)\n MeasureLengthUI: MeasureLengthUIIcon,\n MeasureAreaUI: MeasureAreaUIIcon,\n ClearMeasureUI: ClearMeasureUIIcon,\n};\n\nexport default Icons;\n\nexport { SelectIcon } from '../SelectIcon';\nexport type { SelectIconProps } from '../SelectIcon';\n","/**\n * 标注点编辑工具栏组件\n */\n\nimport { useMemo } from 'react';\n\nimport BaseEditToolbar from '../shared/BaseEditToolbar';\nimport { CreateIcon, EditIcon, MarkerRedrawIcon, DeleteIcon, CancelIcon, SaveIcon } from '../Icons';\nimport type { ToolbarButton } from '../shared/BaseEditToolbar';\nimport type { MarkerEditToolbarProps } from '../../types';\n\nconst MARKER_BUTTONS: ToolbarButton<string>[] = [\n {\n action: 'create',\n label: '新建',\n icon: <CreateIcon />,\n tooltip: '在地图上添加新标注点',\n variant: 'primary',\n },\n {\n action: 'edit',\n label: '编辑',\n icon: <EditIcon />,\n tooltip: '编辑选中标注点的信息',\n needsSelection: true,\n },\n {\n action: 'move',\n label: '移动',\n icon: <MarkerRedrawIcon />,\n tooltip: '拖动标注点移动位置',\n needsSelection: true,\n },\n {\n action: 'delete',\n label: '删除',\n icon: <DeleteIcon />,\n tooltip: '删除标注点',\n variant: 'danger',\n needsSelection: true,\n },\n { action: 'cancel', label: '取消', icon: <CancelIcon />, tooltip: '取消本次操作' },\n {\n action: 'save',\n label: '保存',\n icon: <SaveIcon />,\n tooltip: '保存操作结果',\n variant: 'primary',\n },\n];\n\nconst MarkerEditToolbar = ({\n visible,\n selectedMarkerId,\n currentMode = 'idle',\n enabledButtons = ['create', 'edit', 'move', 'delete'],\n hintMessage,\n showHint = true,\n color,\n size,\n iconOnly,\n children,\n onEdit,\n onMove,\n onCreate,\n onCancel,\n onSave,\n onDelete,\n}: MarkerEditToolbarProps) => {\n const modeHints = useMemo(\n () => ({\n create: hintMessage || '点击地图放置新标注点,完成后点击保存',\n move: hintMessage || '拖动标注点到目标位置,完成后点击保存',\n }),\n [hintMessage]\n );\n\n const actionHandlers = useMemo(\n () => ({\n edit: () => onEdit?.(selectedMarkerId),\n move: () => onMove?.(selectedMarkerId),\n }),\n [onEdit, onMove, selectedMarkerId]\n );\n\n return (\n <BaseEditToolbar\n visible={visible}\n selectedId={selectedMarkerId}\n currentMode={currentMode}\n enabledButtons={enabledButtons}\n buttons={MARKER_BUTTONS}\n modeHints={modeHints}\n classPrefix=\"marker-edit-toolbar\"\n showHint={showHint}\n color={color}\n size={size}\n iconOnly={iconOnly}\n onCancel={onCancel}\n onSave={onSave}\n onCreate={onCreate}\n onDelete={onDelete}\n actionHandlers={actionHandlers}\n >\n {children}\n </BaseEditToolbar>\n );\n};\n\nexport default MarkerEditToolbar;\n","/**\n * @fileoverview 地图点击处理器组件\n * @description 处理地图点击事件,用于创建模式下的标注点创建和 Tooltip 关闭\n * @module components/Marker/MapClickHandler\n * @since 2.0.0 已移除 react-leaflet 依赖\n */\n\nimport { useEffect } from 'react';\nimport type L from 'leaflet';\nimport { useMap, useMapEvent } from '../../context/MapContext';\n\n/**\n * 地图点击处理器属性\n */\ninterface MapClickHandlerProps {\n /** 是否启用点击处理 */\n enabled: boolean;\n /** 是否存在临时标注点 */\n hasTempMarker: boolean;\n /** 地图点击回调 */\n onMapClick: (latlng: L.LatLng) => void;\n /** 点击非标注区域时的回调(用于关闭 Tooltip) */\n onMapClickWithoutMarker?: () => void;\n}\n\n/**\n * 地图点击处理器\n * @description 处理地图点击事件,用于创建模式下的标注点创建和 Tooltip 关闭\n */\nfunction MapClickHandler({\n enabled,\n hasTempMarker,\n onMapClick,\n onMapClickWithoutMarker,\n}: MapClickHandlerProps) {\n const map = useMap();\n\n // 处理地图点击事件\n useMapEvent('click', (e: L.LeafletMouseEvent) => {\n // 检查点击目标是否是工具栏按钮或其子元素\n const target = e.originalEvent?.target as HTMLElement;\n if (target) {\n const isToolbarElement = target.closest('.marker-edit-toolbar, .leaflet-control-container');\n const isMarkerElement = target.closest('.leaflet-marker-icon');\n if (isToolbarElement) {\n return;\n }\n // 点击非 marker 区域时关闭 Tooltip\n if (!isMarkerElement && onMapClickWithoutMarker) {\n onMapClickWithoutMarker();\n }\n }\n\n if (enabled) {\n onMapClick(e.latlng);\n }\n });\n\n useEffect(() => {\n if (!map) return;\n const container = map.getContainer();\n if (enabled && !hasTempMarker) {\n container.style.cursor = 'crosshair';\n container.classList.add('marker-create-mode');\n } else {\n container.style.cursor = '';\n container.classList.remove('marker-create-mode');\n }\n return () => {\n if (container) {\n container.style.cursor = '';\n container.classList.remove('marker-create-mode');\n }\n };\n }, [map, enabled, hasTempMarker]);\n\n return null;\n}\n\nexport default MapClickHandler;\n","/**\n * 默认 PathOptions 样式常量\n * @description 集中管理各组件的默认视觉样式,便于全局统一调整\n *\n * ⚠️ 颜色值必须与 src/styles/_variables.scss 中的语义色变量保持同步:\n * PLOT_DEFAULT_PATH.color/fillColor → $color-plot (#1668dc)\n * PLOT_DEFAULT_SELECTED_PATH.color/fillColor → $color-plot-selected (#d32029)\n * PLOT_DEFAULT_EDIT_PATH.color/fillColor → $color-plot-edit (#faad14)\n * PLOT_DEFAULT_HIGHLIGHT_PATH.color/fillColor → $color-plot-highlight (#fa8c16)\n * PLOT_CLIP_FRAGMENT_*.color → $color-success (#52c41a)\n *\n * @since 2.0.0 线段组件样式(Road、Irrigation、Track、TrackPlayer)已迁移到 constants/polylineStyles.ts\n * @since 2.0.0 TrackStyle 类型已迁移到 types/polyline.ts\n * @since 2.1.0 图标常量已迁移到 constants/icon.ts\n */\n\nimport type { PathOptions } from '../types';\n\n// ==================== 图标常量(从 constants/icon.ts 导入)===================\nexport {\n MARKER_DEFAULT_ICON,\n MARKER_DEFAULT_SELECTED_ICON,\n MARKER_DEFAULT_EDIT_ICON,\n CLUSTER_DEFAULT_ICON,\n TRACK_DEFAULT_START_ICON,\n TRACK_DEFAULT_END_ICON,\n TRACKPLAYER_DEFAULT_ICON,\n DEFAULT_INLET_ICON,\n DEFAULT_OUTLET_ICON,\n} from './icon';\nexport type { IconConfig, ClusterIconConfig } from '../types/icon';\n\n// ==================== 地块 PlotLayer ====================\n\n/** 地块默认样式 */\nexport const PLOT_DEFAULT_PATH: PathOptions = {\n color: '#1668dc',\n opacity: 1,\n weight: 2,\n fillColor: '#1668dc',\n fillOpacity: 0.2,\n};\n\n/** 地块选中样式 */\nexport const PLOT_DEFAULT_SELECTED_PATH: PathOptions = {\n color: '#d32029',\n opacity: 1,\n weight: 2,\n fillColor: '#d32029',\n fillOpacity: 0.2,\n};\n\n/** 地块编辑样式 */\nexport const PLOT_DEFAULT_EDIT_PATH: PathOptions = {\n color: '#faad14',\n opacity: 1,\n weight: 2,\n fillColor: '#faad14',\n fillOpacity: 0.2,\n dashArray: '5, 5',\n // 顶点样式默认值\n vertexBorderColor: '#ffffff',\n vertexFillColor: '#d32029',\n vertexFillOpacity: 0.5,\n};\n\n/** 地块高亮样式(分组高亮) */\nexport const PLOT_DEFAULT_HIGHLIGHT_PATH: PathOptions = {\n color: '#fa8c16',\n fillColor: '#fa8c16',\n fillOpacity: 0.4,\n weight: 2,\n};\n\n/** 地块无类型时的回退样式 */\nexport const PLOT_FALLBACK_PATH: PathOptions = {\n fillColor: '#ccc',\n color: '#999',\n weight: 2,\n opacity: 0.8,\n fillOpacity: 0.5,\n};\n\n/** 地块新建绘制时的 PM 样式 */\nexport const PLOT_PM_CREATE_OPTIONS: PathOptions = {\n color: '#1890ff',\n fillColor: '#1890ff',\n fillOpacity: 0.3,\n weight: 2,\n};\n\n/** 地块剪切碎片默认样式 */\nexport const PLOT_CLIP_FRAGMENT_DEFAULT: PathOptions = {\n color: '#52c41a',\n weight: 2,\n fillColor: '#52c41a',\n fillOpacity: 0.3,\n dashArray: '8, 6',\n};\n\n/** 地块剪切碎片选中样式 */\nexport const PLOT_CLIP_FRAGMENT_SELECTED: PathOptions = {\n color: '#52c41a',\n weight: 3,\n fillColor: '#52c41a',\n fillOpacity: 0.4,\n dashArray: '',\n};\n\n// ==================== 公共 PM 绘制样式 ====================\n\n/** PM 绘制时的临时线样式(templineStyle) */\nexport const PM_TEMPLATE_LINE_STYLE: PathOptions = {\n color: '#1677ff',\n weight: 4,\n dashArray: '10, 10',\n};\n\n/** PM 绘制时的提示线样式(hintlineStyle) */\nexport const PM_HINT_LINE_STYLE: PathOptions = {\n color: '#1677ff',\n weight: 2,\n dashArray: '5, 5',\n};\n\n/** 灌溉渠 PM 编辑器全局样式 */\nexport const IRRIGATION_PM_PATH_OPTIONS: PathOptions = {\n color: '#1E90FF',\n weight: 4,\n};\n\n// ==================== Loading 加载组件 ====================\n\n/** Loading 遮罩默认背景色 */\nexport const LOADING_DEFAULT_MASK_BACKGROUND = 'rgba(0, 0, 0, 0.5)';\n\n/** Loading 遮罩默认层级 */\nexport const LOADING_DEFAULT_MASK_ZINDEX = 1000;\n\n/** Loading 遮罩默认配置 */\nexport const LOADING_DEFAULT_MASK = {\n background: LOADING_DEFAULT_MASK_BACKGROUND,\n zIndex: LOADING_DEFAULT_MASK_ZINDEX,\n} as const;\n","/**\n * @fileoverview 聚合气泡图标生成工具\n * @description 用于创建地图聚合气泡的 DivIcon,支持预设图标、URL 图片、SVG 三种类型\n * @module utils/clusterIcon\n */\n\nimport L from 'leaflet';\nimport type { ClusterIconConfig, SvgIconConfig } from '../types';\nimport { detectIconType, SVG_MARKER_ICONS, PULSE_ICONS } from './iconUtils';\nimport { generateMarkerSvg, generatePositionSvg } from './markerSvg';\nimport {\n generateTractorSvg,\n generateTractor2Svg,\n generateTruckSvg,\n generateTruck2Svg,\n generateAgriDroneSvg,\n generateAgriDroneSideSvg,\n} from './iconCache';\nimport { generatePulseSvg } from './pulseIcon';\nimport { sanitizeSvg } from './svgUtils';\nimport { CLUSTER_DEFAULT_ICON } from '../constants/styles';\n\n/** 默认聚合颜色分级 */\nfunction getDefaultClusterColor(count: number): string {\n if (count < 10) return '#1890ff';\n if (count < 50) return '#faad14';\n return '#ff4d4f';\n}\n\n/** countSpan 样式变体 */\ntype CountSpanVariant = 'svg-marker' | 'default';\n\n/**\n * 渲染聚合数量气泡\n * @param count - 聚合数量\n * @param color - 气泡背景色\n * @param variant - 样式变体:'svg-marker' 顶部居中(大字描边),'default' 右下角圆形气泡\n */\nfunction renderCountSpan(\n count: number,\n color: string,\n variant: CountSpanVariant,\n size: number\n): string {\n if (variant === 'svg-marker') {\n return `<span style=\"\n position:absolute;\n top:${Math.round(size * 0.145)}px;\n left:50%;\n transform:translateX(-50%);\n color:#fff;\n font-size:${Math.max(13, Math.round(size * 0.24))}px;\n font-weight:800;\n line-height:1;\n -webkit-text-stroke:2px ${color};\n paint-order:stroke fill;\n font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;\n pointer-events:none;\n \">${count}</span>`;\n }\n return `<span style=\"\n position:absolute;\n bottom:-4px;right:-4px;\n min-width:20px;height:20px;\n background:${color};color:#fff;\n border-radius:10px;\n display:flex;align-items:center;justify-content:center;\n font-size:11px;font-weight:700;\n padding:0 4px;\n box-shadow:0 1px 3px rgba(0,0,0,0.3);\n border:2px solid #fff;\n font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;\n \">${count}</span>`;\n}\n\n/** 生成预设图标的 HTML */\nfunction getPresetIconHtml(iconType: string, size: number, animated: boolean): string {\n const animatedClass = animated ? 'animated' : '';\n\n // 彩色水滴形标记 - 使用内联 SVG\n if ((SVG_MARKER_ICONS as readonly string[]).includes(iconType)) {\n const svgHtml = generateMarkerSvg(iconType as never, size, size, animated);\n return `<div class=\"marker-icon-inner marker-pin-icon ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n \">${svgHtml}</div>`;\n }\n\n // 脉冲同心圆图标 - 使用内联 SVG\n if ((PULSE_ICONS as readonly string[]).includes(iconType)) {\n const svgHtml = generatePulseSvg(iconType as never, size, size, animated);\n return `<div class=\"marker-icon-inner marker-pulse-icon ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n // 农机图标使用内联 SVG\n if (iconType === 'tractor') {\n const svgHtml = generateTractorSvg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-tractor ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n // 位置标记图标(简单的圆点标记)\n if (iconType === 'position' || iconType === 'position-red') {\n const svgHtml = generatePositionSvg(iconType, size, size, animated);\n return `<div class=\"marker-icon-inner marker-pin-icon ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'tractor-2') {\n const svgHtml = generateTractor2Svg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-tractor-2 ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'truck') {\n const svgHtml = generateTruckSvg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-truck ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'truck-2') {\n const svgHtml = generateTruck2Svg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-truck-2 ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'agri-drone') {\n const svgHtml = generateAgriDroneSvg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-agri-drone ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'agri-drone-side') {\n const svgHtml = generateAgriDroneSideSvg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-agri-drone-side ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n return `<div class=\"marker-icon-inner icon-${iconType} ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n animation-timing-function: steps(23);\n \"></div>`;\n}\n\n/**\n * 创建聚合气泡图标\n * @param count - 聚合数量\n * @param config - 图标配置\n */\nexport function createClusterIcon(count: number, config?: ClusterIconConfig): L.DivIcon {\n // 如果有自定义渲染函数,优先使用\n if (config?.render) {\n const size = Math.max(36, Math.min(56, 36 + Math.floor(Math.log2(Math.max(count, 2))) * 4));\n const color =\n typeof config.colors === 'function'\n ? config.colors(count)\n : Array.isArray(config.colors)\n ? config.colors[Math.min(Math.floor(count / 50), config.colors.length - 1)]\n : getDefaultClusterColor(count);\n const fontSize = Math.max(12, Math.floor(size * 0.38));\n const html = config.render(count, { size, color, fontSize });\n return L.divIcon({\n html,\n className: config.animated ? 'cluster-icon animated' : '',\n iconSize: [size, size],\n iconAnchor: [size / 2, size / 2],\n });\n }\n\n // 检查是否显示数量数字,默认使用常量值\n const showCount = config?.showCount ?? CLUSTER_DEFAULT_ICON.showCount;\n\n // 计算尺寸\n let size: number;\n if (config?.iconSize) {\n if (Array.isArray(config.iconSize)) {\n size = config.iconSize[0];\n } else if (typeof config.iconSize === 'object') {\n // 动态范围 { min, max }\n const min = config.iconSize.min ?? 36;\n const max = config.iconSize.max ?? 56;\n size = Math.max(min, Math.min(max, min + Math.floor(Math.log2(Math.max(count, 2))) * 4));\n } else {\n // 固定数值大小\n size = config.iconSize;\n }\n } else {\n size = Math.max(36, Math.min(56, 36 + Math.floor(Math.log2(Math.max(count, 2))) * 4));\n }\n\n // 计算颜色\n let color: string;\n if (config?.colors) {\n if (typeof config.colors === 'function') {\n color = config.colors(count);\n } else {\n // 数组分级:<10 用第一个,<50 用第二个,>=50 用第三个...\n const thresholds = [10, 50, 100, 200, 500];\n let colorIndex = 0;\n for (let i = 0; i < thresholds.length; i++) {\n if (count >= thresholds[i]) colorIndex = i + 1;\n }\n color = config.colors[Math.min(colorIndex, config.colors.length - 1)];\n }\n } else {\n color = getDefaultClusterColor(count);\n }\n\n const fontSize = Math.max(12, Math.floor(size * 0.38));\n\n // 如果配置了自定义图标,否则使用默认常量\n const iconSource = config?.icon ?? CLUSTER_DEFAULT_ICON.icon;\n const detected = detectIconType(iconSource);\n\n // 预设图标 - 直接生成 HTML\n if (detected.type === 'preset') {\n const iconType = detected.name;\n const isSvgMarker = (SVG_MARKER_ICONS as readonly string[]).includes(iconType);\n const isPulseIcon = (PULSE_ICONS as readonly string[]).includes(iconType);\n\n const iconHtml = getPresetIconHtml(\n iconType,\n size,\n !!(config?.animated ?? CLUSTER_DEFAULT_ICON.animated)\n );\n\n const countSpan = showCount\n ? renderCountSpan(count, color, isSvgMarker || isPulseIcon ? 'svg-marker' : 'default', size)\n : '';\n\n return L.divIcon({\n html: `<div style=\"position:relative;width:${size}px;height:${size}px;\">\n ${iconHtml}\n ${countSpan}\n </div>`,\n className:\n (config?.animated ?? CLUSTER_DEFAULT_ICON.animated)\n ? 'cluster-icon animated'\n : 'cluster-icon',\n iconSize: [size, size],\n iconAnchor: [size / 2, size / 2],\n });\n }\n\n if (detected.type === 'url') {\n // 防御 XSS:转义 HTML 特殊字符\n const safeUrl = detected.src\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n const url = safeUrl;\n const countSpan = showCount ? renderCountSpan(count, color, 'default', size) : '';\n return L.divIcon({\n html: `<div style=\"\n width:${size}px;height:${size}px;\n position:relative;\n display:flex;align-items:center;justify-content:center;\n \">\n <img src=\"${url}\" style=\"width:100%;height:100%;object-fit:contain;\" />\n ${countSpan}\n </div>`,\n className: (config?.animated ?? CLUSTER_DEFAULT_ICON.animated) ? 'cluster-icon animated' : '',\n iconSize: [size, size],\n iconAnchor: [size / 2, size / 2],\n });\n }\n\n if (detected.type === 'svg') {\n // 使用 DOMParser 安全解析 SVG,移除 script 标签和事件属性\n let svgContent: string;\n if (typeof detected.config === 'string') {\n svgContent = sanitizeSvg(detected.config);\n } else {\n const svgConfig = detected.config as SvgIconConfig;\n svgContent = `<svg viewBox=\"${svgConfig.viewBox || '0 0 24 24'}\" width=\"${size}\" height=\"${size}\" fill=\"${svgConfig.fill || color}\" stroke=\"${svgConfig.stroke || ''}\" stroke-width=\"${svgConfig.strokeWidth || 0}\">\n <path d=\"${svgConfig.path}\" />\n </svg>`;\n svgContent = sanitizeSvg(svgContent);\n }\n const countSpan = showCount ? renderCountSpan(count, color, 'default', size) : '';\n const svgIconSize: [number, number] = (config?.iconSize as [number, number]) || [\n size + 8,\n size + 12,\n ];\n const svgIconAnchor: [number, number] = config?.iconAnchor || [\n svgIconSize[0] / 2,\n svgIconSize[1],\n ];\n return L.divIcon({\n html: `<div style=\"\n width:${size}px;height:${size}px;\n position:relative;\n display:flex;align-items:center;justify-content:center;\n \">\n ${svgContent}\n ${countSpan}\n </div>`,\n className: (config?.animated ?? CLUSTER_DEFAULT_ICON.animated) ? 'cluster-icon animated' : '',\n iconSize: svgIconSize,\n iconAnchor: svgIconAnchor,\n popupAnchor: config?.popupAnchor,\n });\n }\n\n // 兜底:圆形数字气泡\n const countDiv = showCount ? `${count}` : '';\n return L.divIcon({\n html: `<div style=\"\n width:${size}px;height:${size}px;border-radius:50%;\n background:${color};color:#fff;\n display:flex;align-items:center;justify-content:center;\n font-size:${fontSize}px;font-weight:700;\n box-shadow:0 2px 8px rgba(0,0,0,0.3);border:2.5px solid #fff;\n cursor:pointer;user-select:none;\n font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;\n line-height:1;\n \">${countDiv}</div>`,\n className: (config?.animated ?? CLUSTER_DEFAULT_ICON.animated) ? 'cluster-icon animated' : '',\n iconSize: [size, size],\n iconAnchor: [size / 2, size / 2],\n });\n}\n\nexport { getPresetIconHtml };\n","/**\n * @fileoverview Marker 聚合模式渲染子组件\n * @module components/Marker/ClusterView\n * @since 2.0.0 已移除 react-leaflet 依赖\n * @since 2.1.0 性能优化:增量渲染、边界检查\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any -- Supercluster 库类型定义需要 */\n\nimport React, { useEffect, useRef, useCallback } from 'react';\nimport L from 'leaflet';\nimport type Supercluster from 'supercluster';\nimport { useMap } from '../../context/MapContext';\nimport { createClusterIcon } from '../../utils/clusterIcon';\nimport { logger } from '../../utils/errorHandling';\nimport type { MarkerData, ClusterIconConfig } from '../../types';\n\ninterface ClusterViewProps {\n /** 聚合结果数组(包含聚合气泡和单独点) */\n clusterResults: Supercluster.ClusterFeature<any>[];\n /** 单独 Marker 的图标 */\n markerIcon: L.DivIcon;\n /** 聚合气泡图标配置 */\n clusterIconConfig?: ClusterIconConfig;\n /** 是否永久显示 Tooltip,false 时悬停显示 */\n showTooltip: boolean;\n /** 聚合气泡点击处理 */\n onClusterClick: (feature: Supercluster.ClusterFeature<Supercluster.AnyProps>) => void;\n /** 单独 Marker 点击处理 */\n onMarkerClick: (markerId: string | number) => void;\n /** 获取 Marker 的 Tooltip 内容 */\n getTooltipContent: (marker: MarkerData) => { title?: string; description?: string };\n}\n\n/** Marker 实例与元数据映射 */\ninterface MarkerEntry {\n marker: L.Marker;\n id: string | number;\n isCluster: boolean;\n featureId: number | string;\n}\n\n/**\n * 计算聚合结果的唯一标识\n * @description 用于增量更新的 diff 比较\n */\nfunction getFeatureId(feature: Supercluster.ClusterFeature<any>): string | number {\n const props = feature.properties;\n // 聚合使用 cluster_id,单独点使用 id\n if (props.cluster) {\n return `cluster-${props.cluster_id}`;\n }\n return props.id;\n}\n\n/**\n * 比较两个 feature 是否相同\n */\nfunction isFeatureEqual(\n a: Supercluster.ClusterFeature<any>,\n b: Supercluster.ClusterFeature<any>\n): boolean {\n const [lngA, latA] = a.geometry.coordinates;\n const [lngB, latB] = b.geometry.coordinates;\n\n // 坐标相同且类型相同\n if (lngA !== lngB || latA !== latB) return false;\n\n const propsA = a.properties;\n const propsB = b.properties;\n\n // 聚合比较数量\n if (propsA.cluster && propsB.cluster) {\n return propsA.point_count === propsB.point_count;\n }\n\n // 单独点比较 id\n return propsA.id === propsB.id;\n}\n\nconst ClusterView: React.FC<ClusterViewProps> = ({\n clusterResults,\n markerIcon,\n clusterIconConfig,\n showTooltip,\n onClusterClick,\n onMarkerClick,\n getTooltipContent,\n}) => {\n const map = useMap();\n const markersMapRef = useRef<Map<string | number, MarkerEntry>>(new Map());\n\n /**\n * 创建聚合 Marker\n */\n const createClusterMarker = useCallback(\n (feature: Supercluster.ClusterFeature<any>): L.Marker | null => {\n if (!map) return null;\n\n try {\n const clusterProps = feature.properties as Supercluster.ClusterProperties;\n const count = clusterProps.point_count;\n const [lng, lat] = feature.geometry.coordinates;\n\n const icon = createClusterIcon(count, clusterIconConfig);\n const size = (icon.options?.iconSize as [number, number]) || [40, 40];\n\n const marker = L.marker([lat, lng], { icon }).addTo(map);\n\n marker.on('click', () => {\n try {\n onClusterClick(feature as Supercluster.ClusterFeature<Supercluster.AnyProps>);\n } catch (error) {\n logger.error('ClusterView', '聚合点击回调执行失败:', error);\n }\n });\n\n // 绑定 Tooltip\n marker.bindTooltip(`<div class=\"marker-popup\"><strong>${count} 个标注点</strong></div>`, {\n permanent: showTooltip,\n direction: 'top',\n offset: [0, -size[1] / 2] as L.PointTuple,\n });\n\n return marker;\n } catch (error) {\n logger.error('ClusterView', '创建聚合 Marker 失败:', error);\n return null;\n }\n },\n [map, clusterIconConfig, showTooltip, onClusterClick]\n );\n\n /**\n * 创建单独点 Marker\n */\n const createSingleMarker = useCallback(\n (feature: Supercluster.ClusterFeature<any>): L.Marker | null => {\n if (!map) return null;\n\n try {\n const markerId = feature.properties.id;\n const markerData = feature.properties.markerData as MarkerData;\n\n // 数据验证\n if (!markerId) {\n logger.warn('ClusterView', '跳过缺少 id 的单独点');\n return null;\n }\n if (!markerData) {\n logger.warn('ClusterView', '跳过缺少 markerData 的单独点', feature);\n return null;\n }\n\n const [lng, lat] = feature.geometry.coordinates;\n const tooltipContent = getTooltipContent(markerData);\n const iconHeight =\n (markerIcon.options?.iconSize as [number, number] | undefined)?.[1] ?? 48;\n\n const marker = L.marker([lat, lng], { icon: markerIcon }).addTo(map);\n\n marker.on('click', () => {\n try {\n onMarkerClick(markerId);\n } catch (error) {\n logger.error('ClusterView', 'Marker 点击回调执行失败:', error);\n }\n });\n\n // 绑定 Tooltip\n const tooltipHtml = `<div class=\"marker-popup\">\n <strong>${tooltipContent.title ?? markerData.title ?? ''}</strong>\n ${(tooltipContent.description ?? markerData.description) ? `<p>${tooltipContent.description ?? markerData.description}</p>` : ''}\n </div>`;\n\n marker.bindTooltip(tooltipHtml, {\n permanent: showTooltip,\n direction: 'top',\n offset: [0, -iconHeight] as L.PointTuple,\n });\n\n return marker;\n } catch (error) {\n logger.error('ClusterView', '创建单独 Marker 失败:', error);\n return null;\n }\n },\n [map, markerIcon, showTooltip, getTooltipContent, onMarkerClick]\n );\n\n /**\n * 更新 Marker Tooltip\n */\n const updateMarkerTooltip = useCallback(\n (entry: MarkerEntry, feature: Supercluster.ClusterFeature<any>) => {\n const { marker, isCluster } = entry;\n\n try {\n if (isCluster) {\n const clusterProps = feature.properties as Supercluster.ClusterProperties;\n marker.setTooltipContent(\n `<div class=\"marker-popup\"><strong>${clusterProps.point_count} 个标注点</strong></div>`\n );\n } else {\n const markerData = feature.properties.markerData as MarkerData;\n const tooltipContent = getTooltipContent(markerData);\n const tooltipHtml = `<div class=\"marker-popup\">\n <strong>${tooltipContent.title ?? markerData.title ?? ''}</strong>\n ${(tooltipContent.description ?? markerData.description) ? `<p>${tooltipContent.description ?? markerData.description}</p>` : ''}\n </div>`;\n marker.setTooltipContent(tooltipHtml);\n }\n } catch (error) {\n logger.error('ClusterView', '更新 Tooltip 失败:', error);\n }\n },\n [getTooltipContent]\n );\n\n /**\n * 增量更新渲染\n * @description 通过 diff 算法只更新变化的 Marker\n */\n useEffect(() => {\n if (!map) return;\n\n // 边界检查\n if (!Array.isArray(clusterResults)) {\n logger.warn('ClusterView', 'clusterResults 不是有效数组');\n markersMapRef.current.forEach(entry => entry.marker.remove());\n markersMapRef.current.clear();\n return;\n }\n\n // 计算当前 ID 集合\n const currentIds = new Set<string | number>();\n const currentFeatureMap = new Map<string | number, Supercluster.ClusterFeature<any>>();\n\n clusterResults.forEach(feature => {\n const id = getFeatureId(feature);\n currentIds.add(id);\n currentFeatureMap.set(id, feature);\n });\n\n // 1. 删除不再存在的 Marker\n markersMapRef.current.forEach((entry, id) => {\n if (!currentIds.has(id)) {\n try {\n entry.marker.remove();\n } catch (error) {\n logger.error('ClusterView', '移除 Marker 失败:', error, id);\n }\n markersMapRef.current.delete(id);\n }\n });\n\n // 2. 创建或更新 Marker\n clusterResults.forEach(feature => {\n const id = getFeatureId(feature);\n const existing = markersMapRef.current.get(id);\n const isCluster = feature.properties.cluster;\n\n if (existing) {\n // 检查是否需要更新(位置、数量变化)\n const oldFeature = currentFeatureMap.get(id);\n if (oldFeature && !isFeatureEqual(oldFeature, feature)) {\n // 位置变化,更新 marker\n const [lng, lat] = feature.geometry.coordinates;\n existing.marker.setLatLng([lat, lng]);\n\n // 更新 Tooltip\n updateMarkerTooltip(existing, feature);\n }\n } else {\n // 创建新 Marker\n let newMarker: L.Marker | null = null;\n\n if (isCluster) {\n newMarker = createClusterMarker(feature);\n } else {\n newMarker = createSingleMarker(feature);\n }\n\n if (newMarker) {\n markersMapRef.current.set(id, {\n marker: newMarker,\n id,\n isCluster,\n featureId: isCluster ? feature.properties.cluster_id : feature.properties.id,\n });\n }\n }\n });\n }, [map, clusterResults, createClusterMarker, createSingleMarker, updateMarkerTooltip]);\n\n // Tooltip 模式变化时更新\n useEffect(() => {\n if (!map) return;\n\n markersMapRef.current.forEach(entry => {\n try {\n if (entry.marker.getTooltip()) {\n // Leaflet 不支持直接改变 permanent,需要重新绑定\n // 这里暂时只更新样式,实际 permanent 变化需要重建\n }\n } catch (error) {\n logger.error('ClusterView', '更新 Tooltip 模式失败:', error);\n }\n });\n }, [showTooltip, map]);\n\n // 组件卸载时清理\n useEffect(() => {\n return () => {\n markersMapRef.current.forEach(entry => {\n try {\n entry.marker.remove();\n } catch (error) {\n logger.error('ClusterView', '卸载清理失败:', error);\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 组件卸载时清理\n markersMapRef.current.clear();\n };\n }, []);\n\n return null;\n};\n\nexport default React.memo(ClusterView);\n","/**\n * 保持 ref 始终指向最新值的 Hook\n * @description 用于在回调中访问最新值,避免闭包陷阱\n */\n\nimport { useRef, useEffect } from 'react';\n\n/**\n * 返回一个 ref,其 current 始终指向传入的最新值\n * @param value 需要保持引用的值\n * @returns React.MutableRefObject<T>\n *\n * @example\n * ```ts\n * const onClickRef = useLatestRef(onClick);\n * // 在回调中使用 onClickRef.current\n * ```\n */\nexport function useLatestRef<T>(value: T) {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref;\n}\n\nexport default useLatestRef;\n","/**\n * 主题上下文\n * @description 提供全局主题状态管理,支持 MapContainer 等组件自动同步主题\n * @since 2.0.0\n */\n\n/* eslint-disable @typescript-eslint/no-empty-function */\nimport React, { createContext, useContext, useState, useEffect, useCallback, useMemo } from 'react';\n\n// ========== 类型定义 ==========\n\nexport type ThemeMode = 'light' | 'dark';\n\nexport interface ThemeContextValue {\n /** 当前主题 */\n theme: ThemeMode;\n /** 设置主题 */\n setTheme: (theme: ThemeMode) => void;\n /** 是否为深色主题 */\n isDark: boolean;\n}\n\n// ========== 上下文 ==========\n\nconst ThemeContext = createContext<ThemeContextValue>({\n theme: 'light',\n setTheme: () => {},\n isDark: false,\n});\n\n/**\n * 获取主题上下文的 Hook\n * @returns 主题上下文值\n */\nexport const useTheme = (): ThemeContextValue => {\n return useContext(ThemeContext);\n};\n\n// ========== Provider 组件 ==========\n\nexport interface ThemeProviderProps {\n /** 子组件 */\n children: React.ReactNode;\n /** 初始主题,默认从 localStorage 读取或使用 'light' */\n defaultTheme?: ThemeMode;\n /** 主题变化回调 */\n onThemeChange?: (theme: ThemeMode) => void;\n}\n\n/**\n * 主题 Provider 组件\n * @description 提供全局主题状态,自动同步 localStorage 和 DOM 属性\n *\n * @example\n * ```tsx\n * // 在应用入口包裹\n * <ThemeProvider defaultTheme=\"dark\">\n * <App />\n * </ThemeProvider>\n *\n * // 在组件中使用\n * const { theme, setTheme, isDark } = useTheme();\n * ```\n */\nexport function ThemeProvider({\n children,\n defaultTheme,\n onThemeChange,\n}: ThemeProviderProps): JSX.Element {\n // 初始化主题:优先使用 props,其次 localStorage,最后默认 'light'\n const [theme, setThemeState] = useState<ThemeMode>(() => {\n if (defaultTheme) return defaultTheme;\n // 检查是否在浏览器环境中\n if (typeof window !== 'undefined' && window.localStorage) {\n const stored = localStorage.getItem('theme');\n if (stored === 'light' || stored === 'dark') return stored;\n }\n return 'light';\n });\n\n // 同步到 DOM 和 localStorage\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', theme);\n document.body.setAttribute('data-theme', theme);\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem('theme', theme);\n }\n }, [theme]);\n\n // 设置主题\n const setTheme = useCallback(\n (newTheme: ThemeMode) => {\n setThemeState(newTheme);\n onThemeChange?.(newTheme);\n },\n [onThemeChange]\n );\n\n const value = useMemo(\n () => ({\n theme,\n setTheme,\n isDark: theme === 'dark',\n }),\n [theme, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport default ThemeProvider;\n","/**\n * 深色主题 SVG 滤镜工具\n * @description 为 Leaflet 地图组件提供深色主题支持\n */\n\nexport const FILTER_CONTAINER_ID = 'map-theme-filters';\nexport const DARK_FILTER_ID = 'tianditu-dark-filter';\n\nlet svgFilterInjected = false;\n\n/**\n * 确保深色滤镜已注入 DOM\n * 仅在首次调用时注入,全局只注入一次\n */\nexport function ensureDarkFilterInjected(): void {\n if (svgFilterInjected) return;\n if (document.getElementById(FILTER_CONTAINER_ID)) {\n svgFilterInjected = true;\n return;\n }\n\n const svgFilters = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFilters.setAttribute('id', FILTER_CONTAINER_ID);\n svgFilters.setAttribute('aria-hidden', 'true');\n svgFilters.setAttribute('style', 'position: absolute; width: 0; height: 0; overflow: hidden;');\n svgFilters.setAttribute('version', '1.1');\n\n const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n\n const darkFilter = document.createElementNS('http://www.w3.org/2000/svg', 'filter');\n darkFilter.setAttribute('id', DARK_FILTER_ID);\n darkFilter.setAttribute('x', '-20%');\n darkFilter.setAttribute('y', '-20%');\n darkFilter.setAttribute('width', '140%');\n darkFilter.setAttribute('height', '140%');\n darkFilter.setAttribute('filterUnits', 'objectBoundingBox');\n darkFilter.setAttribute('primitiveUnits', 'userSpaceOnUse');\n darkFilter.setAttribute('color-interpolation-filters', 'sRGB');\n\n const colorMatrix = document.createElementNS('http://www.w3.org/2000/svg', 'feColorMatrix');\n colorMatrix.setAttribute('type', 'matrix');\n colorMatrix.setAttribute('values', '1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0');\n colorMatrix.setAttribute('in', 'SourceGraphic');\n colorMatrix.setAttribute('result', 'colormatrix');\n\n const componentTransfer = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'feComponentTransfer'\n );\n componentTransfer.setAttribute('in', 'colormatrix');\n componentTransfer.setAttribute('result', 'componentTransfer');\n\n const feFuncR = document.createElementNS('http://www.w3.org/2000/svg', 'feFuncR');\n feFuncR.setAttribute('type', 'table');\n feFuncR.setAttribute('tableValues', '0.12 0.18 0.35');\n\n const feFuncG = document.createElementNS('http://www.w3.org/2000/svg', 'feFuncG');\n feFuncG.setAttribute('type', 'table');\n feFuncG.setAttribute('tableValues', '0.12 0.18 0.35');\n\n const feFuncB = document.createElementNS('http://www.w3.org/2000/svg', 'feFuncB');\n feFuncB.setAttribute('type', 'table');\n feFuncB.setAttribute('tableValues', '0.2 0.25 0.45');\n\n const feFuncA = document.createElementNS('http://www.w3.org/2000/svg', 'feFuncA');\n feFuncA.setAttribute('type', 'table');\n feFuncA.setAttribute('tableValues', '0 0.3 1');\n\n componentTransfer.appendChild(feFuncR);\n componentTransfer.appendChild(feFuncG);\n componentTransfer.appendChild(feFuncB);\n componentTransfer.appendChild(feFuncA);\n\n darkFilter.appendChild(colorMatrix);\n darkFilter.appendChild(componentTransfer);\n defs.appendChild(darkFilter);\n svgFilters.appendChild(defs);\n\n document.body.appendChild(svgFilters);\n svgFilterInjected = true;\n}\n","/**\n * 天地图图层组件\n * @description 封装天地图的矢量图层和标注图层,支持多种图层风格和自定义瓦片 URL\n * @since 2.0.0 已移除 react-leaflet 依赖,改用原生 Leaflet API\n * @since 2.1.0 重构:分离图层创建和 URL 更新逻辑,学习 react-leaflet 的设计模式\n *\n * ## 重构说明 (2024-06-08)\n *\n * **问题**: 原始实现在单个 useEffect 中处理图层创建和更新,导致任何 props 变化都会删除并重建图层,\n * 触发大量瓦片请求。\n *\n * **解决方案**: 学习 react-leaflet 的设计模式,分离关注点:\n * 1. 图层创建 useEffect - 只依赖 `map`,只执行一次\n * 2. URL 更新 useEffect - 依赖 URL 相关 props,使用 `layer.setUrl()` 更新\n * 3. 选项更新 useEffect - 依赖选项 props,使用 `layer.setOptions()` 更新\n *\n * **优势**:\n * - URL 变化时不会删除重建图层,只调用 `setUrl()` 更新\n * - 减少不必要的瓦片请求\n * - 代码更清晰,每个 useEffect 职责单一\n *\n * ## 使用示例\n *\n * ```tsx\n * <MapContainer center={[30, 120]} zoom={12}>\n * <TianDiTuLayer apiKey=\"your-api-key\" />\n * <Marker dataSource={markers} />\n * </MapContainer>\n * ```\n *\n * ## 性能优化要点\n *\n * 1. **图层实例复用** - 图层一旦创建,就通过 ref 存储,避免重复创建\n * 2. **setUrl() 更新** - URL 变化时调用 setUrl() 而非删除重建\n * 3. **缩小依赖范围** - 每个 useEffect 只依赖必要的 props\n */\n\nimport { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport { ensureDarkFilterInjected } from '../../utils/darkThemeFilter';\nimport type { LayerType, TianDiTuLayerProps } from '../../types';\n\n// ========== 图层配置 ==========\n\n// 图层类型配置\nexport const LAYER_TYPES = {\n VECTOR: 'vector', // 矢量图层(默认)\n SATELLITE: 'satellite', // 卫星影像图层\n TERRAIN: 'terrain', // 地形图层\n} as const;\n\n// 图层类型标签\nconst LAYER_LABELS: Record<LayerType, string> = {\n [LAYER_TYPES.VECTOR]: '矢量',\n [LAYER_TYPES.SATELLITE]: '影像',\n [LAYER_TYPES.TERRAIN]: '地形',\n};\n\n// 天地图图层 URL 配置\nconst LAYER_URLS: Record<LayerType, { base: string; annotation: string }> = {\n // 矢量图层(浅色)\n [LAYER_TYPES.VECTOR]: {\n base: 'https://t{s}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n annotation:\n 'https://t{s}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n },\n // 卫星影像图层\n [LAYER_TYPES.SATELLITE]: {\n base: 'https://t{s}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n annotation:\n 'https://t{s}.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n },\n // 地形图层\n [LAYER_TYPES.TERRAIN]: {\n base: 'https://t{s}.tianditu.gov.cn/ter_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ter&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n annotation:\n 'https://t{s}.tianditu.gov.cn/cta_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cta&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n },\n};\n\n// ========== TianDiTuLayer 组件 ==========\n\n/**\n * 天地图图层组件\n */\nexport const TianDiTuLayer = memo<TianDiTuLayerProps>(function TianDiTuLayer({\n apiKey,\n showAnnotation = true,\n layerType: layerTypeProp = LAYER_TYPES.VECTOR,\n tileUrl,\n annotationUrl,\n overlayUrl,\n // subdomains, maxZoom, minZoom 在当前实现中未使用,保留用于未来扩展或 API 兼容\n subdomains: _subdomains = ['0', '1', '2', '3', '4', '5', '6', '7'],\n maxZoom: _maxZoom = 18,\n minZoom: _minZoom = 0,\n attribution = null,\n theme: themeProp,\n showLayerSelector = false,\n onLayerTypeChange,\n}: TianDiTuLayerProps): JSX.Element | null {\n // 从 ConfigProvider 获取 theme,优先使用 props 传入的 theme\n const config = useConfig();\n const theme = themeProp || config.theme || 'light';\n const map = useMap();\n const [currentLayerType, setCurrentLayerType] = useState<LayerType>(layerTypeProp as LayerType);\n const [selectorVisible, setSelectorVisible] = useState(false);\n\n // 同步外部传入的 layerType prop\n useEffect(() => {\n setCurrentLayerType(layerTypeProp as LayerType);\n }, [layerTypeProp]);\n\n // 图层引用\n const baseLayerRef = useRef<L.TileLayer | null>(null);\n const annotationLayerRef = useRef<L.TileLayer | null>(null);\n const overlayLayerRef = useRef<L.TileLayer | null>(null);\n\n // 图层类型切换\n const handleLayerChange = useCallback(\n (type: LayerType) => {\n setCurrentLayerType(type);\n setSelectorVisible(false);\n onLayerTypeChange?.(type);\n },\n [onLayerTypeChange]\n );\n\n // 深色模式:仅对矢量图应用滤镜\n const isDarkTheme = theme === 'dark' && currentLayerType === LAYER_TYPES.VECTOR;\n\n // 根据主题切换地图容器的 data-theme 属性\n useEffect(() => {\n if (!map) return;\n\n const mapContainer = map.getContainer();\n\n if (isDarkTheme) {\n ensureDarkFilterInjected();\n mapContainer.setAttribute('data-theme', 'dark');\n } else {\n mapContainer.removeAttribute('data-theme');\n }\n }, [map, isDarkTheme]);\n\n // ============================================================================\n // 图层管理(学习 react-leaflet 的设计模式:分离创建和更新)\n // ============================================================================\n\n // ========== 1. 图层创建(只在 map 变化时执行,只执行一次) ==========\n // 设计思想:图层实例一旦创建,就应该尽可能复用,避免频繁创建/销毁\n // 依赖项:只依赖 [map, showAnnotation, attribution],确保只在地图实例初始化时执行一次\n useEffect(() => {\n if (!map) return;\n\n // 创建底图图层(初始为空 URL,URL 由后续的 useEffect 更新)\n const baseLayer = L.tileLayer('', {\n subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],\n maxZoom: 18,\n minZoom: 0,\n attribution: attribution === null ? undefined : attribution,\n }).addTo(map);\n baseLayerRef.current = baseLayer;\n\n // 创建标注图层\n if (showAnnotation) {\n const annotationLayer = L.tileLayer('', {\n subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],\n maxZoom: 18,\n minZoom: 0,\n attribution: attribution === null ? undefined : attribution,\n }).addTo(map);\n annotationLayerRef.current = annotationLayer;\n }\n\n // 清理函数:只在组件卸载时执行\n return () => {\n if (baseLayerRef.current) {\n baseLayerRef.current.remove();\n baseLayerRef.current = null;\n }\n if (annotationLayerRef.current) {\n annotationLayerRef.current.remove();\n annotationLayerRef.current = null;\n }\n if (overlayLayerRef.current) {\n overlayLayerRef.current.remove();\n overlayLayerRef.current = null;\n }\n };\n }, [map, showAnnotation, attribution]); // 依赖 map, showAnnotation, attribution\n\n // ========== 2. 底图 URL 更新(独立于创建逻辑) ==========\n // 设计思想:URL 变化时,使用 layer.setUrl() 更新,而不是删除重建图层\n // 优势:避免触发大量瓦片请求,提升性能\n // 依赖项:只依赖 URL 相关的 props [tileUrl, currentLayerType, apiKey]\n useEffect(() => {\n if (!baseLayerRef.current) return;\n\n const useCustomUrl = !!tileUrl;\n const layerConfig = LAYER_URLS[currentLayerType] || LAYER_URLS[LAYER_TYPES.VECTOR];\n const url = useCustomUrl && tileUrl ? tileUrl : layerConfig.base.replace('{key}', apiKey || '');\n\n // 使用 setUrl() 更新图层 URL,Leaflet 会自动处理瓦片过渡\n baseLayerRef.current.setUrl(url);\n }, [tileUrl, currentLayerType, apiKey]); // 只依赖 URL 相关的 props\n\n // ========== 3. 标注 URL 更新 ==========\n // 设计思想:与底图 URL 更新相同,使用 setUrl() 而非重建\n // 依赖项:[annotationUrl, tileUrl, currentLayerType, apiKey, showAnnotation]\n useEffect(() => {\n if (!annotationLayerRef.current || !showAnnotation) return;\n\n const useCustomUrl = !!tileUrl;\n const layerConfig = LAYER_URLS[currentLayerType] || LAYER_URLS[LAYER_TYPES.VECTOR];\n const url =\n useCustomUrl && annotationUrl\n ? annotationUrl\n : layerConfig.annotation.replace('{key}', apiKey || '');\n\n if (url) {\n annotationLayerRef.current.setUrl(url);\n } else if (annotationLayerRef.current) {\n // 如果没有标注 URL,移除标注图层\n annotationLayerRef.current.remove();\n annotationLayerRef.current = null;\n }\n }, [annotationUrl, tileUrl, currentLayerType, apiKey, showAnnotation]);\n\n // ========== 4. 叠加图层处理 ==========\n // 设计思想:叠加图层(overlay)独立管理,因为它的 URL 模式不同\n // 依赖项:[map, overlayUrl]\n useEffect(() => {\n if (!map) return;\n\n // 清理旧的叠加图层\n if (overlayLayerRef.current) {\n overlayLayerRef.current.remove();\n overlayLayerRef.current = null;\n }\n\n // 创建新的叠加图层\n if (overlayUrl) {\n const overlayLayer = L.tileLayer(`${overlayUrl}/{z}/{x}/{y}.webp`, {\n subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],\n maxZoom: 18,\n minZoom: 0,\n }).addTo(map);\n overlayLayerRef.current = overlayLayer;\n }\n }, [map, overlayUrl]);\n\n // 图层选择器组件\n const LayerSelector = showLayerSelector && map && (\n <div className=\"tianditu-layer-selector\" data-theme={theme}>\n <div\n className=\"tianditu-layer-selector-btn\"\n onClick={() => setSelectorVisible(!selectorVisible)}\n >\n <div className=\"tianditu-layer-selector-preview\" data-type={currentLayerType} />\n <span className=\"tianditu-layer-selector-label\">{LAYER_LABELS[currentLayerType]}</span>\n </div>\n {selectorVisible && (\n <div className=\"tianditu-layer-selector-dropdown\">\n {([LAYER_TYPES.VECTOR, LAYER_TYPES.SATELLITE, LAYER_TYPES.TERRAIN] as LayerType[]).map(\n type => (\n <div\n key={type}\n className={`tianditu-layer-selector-item ${currentLayerType === type ? 'active' : ''}`}\n onClick={() => handleLayerChange(type)}\n >\n <div className=\"tianditu-layer-selector-preview\" data-type={type} />\n <span className=\"tianditu-layer-selector-label\">{LAYER_LABELS[type]}</span>\n </div>\n )\n )}\n </div>\n )}\n </div>\n );\n\n // 如果地图未初始化,返回 null\n if (!map) return null;\n\n return <>{LayerSelector && createPortal(LayerSelector, map.getContainer())}</>;\n});\n\nTianDiTuLayer.displayName = 'TianDiTuLayer';\n\nexport default TianDiTuLayer;\n\n// 重新导出深色滤镜工具函数供其他组件使用\nexport { ensureDarkFilterInjected } from '../../utils/darkThemeFilter';\n","/**\n * 双向标尺组件\n * @description 在地图上同时显示水平和垂直两个标尺,覆盖整个地图窗口\n * @since 2.0.0 已移除 react-leaflet 依赖\n * @since 2.0.0 缩放控件已独立为 ZoomControl 组件\n */\n\nimport { useEffect, useRef, type MutableRefObject } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport type { DualScaleControlProps, DualScaleControlConfig } from '../../types';\nimport { LAYER_TYPES } from '../TianDiTuLayer';\n\n// 将十六进制颜色转换为 rgba 字符串\nconst hexToRgba = (hex: string): string => {\n // 处理 #rrggbb 格式\n if (hex.length === 7) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, 1)`;\n }\n // 处理 #rrggbbaa 格式(带透明度)\n if (hex.length === 9) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n const a = parseInt(hex.slice(7, 9), 16) / 255;\n return `rgba(${r}, ${g}, ${b}, ${a.toFixed(2)})`;\n }\n // 如果是 rgba 或 rgb 格式,直接返回\n return hex;\n};\n\n/**\n * 双向标尺组件\n */\nconst DualScaleControl = ({\n config: configProp,\n theme: themeProp,\n layerType,\n scaleColor: scaleColorProp,\n controlBg: controlBgProp,\n controlText: controlTextProp,\n}: DualScaleControlProps): null => {\n // 从 ConfigProvider 获取配置\n const configContext = useConfig();\n\n // 获取 map 实例\n const map = useMap();\n\n // 解析配置:优先使用 props,其次使用 ConfigProvider\n const getConfig = (config: DualScaleControlConfig | undefined): DualScaleControlConfig => {\n return {\n metric: config?.metric ?? true,\n imperial: config?.imperial ?? false,\n scaleColor: config?.scaleColor,\n controlBg: config?.controlBg,\n controlText: config?.controlText,\n };\n };\n\n // 判断是否显示\n // - 如果 props 传了 config,则按 props 显示(包括空对象 {} 也会显示默认配置)\n // - 如果 props 没传 config,则看 ConfigProvider 的 dualScaleControl\n // - 如果 dualScaleControl 为 false,不显示\n // - 如果 dualScaleControl 为 undefined(没配置),显示默认\n // - 如果 dualScaleControl 为对象,使用该配置\n const shouldShow = () => {\n if (configProp !== undefined) {\n return true; // props 传了配置就显示\n }\n const contextConfig = configContext.dualScaleControl;\n return contextConfig !== false; // undefined 或对象都显示\n };\n\n // 如果不显示,返回 null\n if (!shouldShow()) {\n return null;\n }\n\n // 获取最终配置\n const finalConfig =\n configProp !== undefined\n ? configProp\n : configContext.dualScaleControl === false\n ? undefined\n : configContext.dualScaleControl;\n\n const { metric, imperial } = getConfig(finalConfig);\n\n // 主题:优先使用 props,其次使用 ConfigProvider\n const theme = themeProp || configContext.theme || 'light';\n\n // 提前初始化 refs,避免条件调用\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const containerRef: MutableRefObject<HTMLElement | null> = useRef(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scaleRef: MutableRefObject<HTMLElement | null> = useRef(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const textRef: MutableRefObject<HTMLElement | null> = useRef(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // null 检查\n if (!map) return;\n\n // 使用局部变量避免闭包中的 null 检查问题\n const mapInstance = map;\n let animationFrameId: number | null = null;\n let isCleanup = false;\n\n // 获取地图容器\n const mapContainer = mapInstance.getContainer();\n\n // 清理所有已存在的旧 container(防止重复)\n const existingContainers = mapContainer.querySelectorAll('.leaflet-control-dual-scale');\n existingContainers.forEach(el => {\n el.remove();\n });\n\n // 创建覆盖层容器,添加主题类名\n const container = L.DomUtil.create(\n 'div',\n `leaflet-control-dual-scale${theme === 'dark' ? ' dark' : ''}`\n );\n containerRef.current = container;\n\n // 创建 scale 容器(覆盖整个地图窗口)\n const scale = L.DomUtil.create('div', 'scale', container);\n scaleRef.current = scale;\n\n // 创建文本显示\n const textEl = L.DomUtil.create('div', 'scale-text', container);\n textRef.current = textEl;\n\n // 直接设置样式确保生效(避免 CSS 缓存问题)\n // 根据图层类型和主题组合确定颜色\n // satellite 在 light 主题下需要深色(卫星影像较暗)\n // terrain 在 dark 主题下需要浅色(地形图层较亮)\n // 优先级:props > config > 自动计算\n const getControlColors = () => {\n // 如果用户配置了颜色,直接使用\n if (scaleColorProp || controlBgProp || controlTextProp) {\n return {\n bg:\n controlBgProp ||\n (theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)'),\n text: controlTextProp || (theme === 'dark' ? '#fff' : '#333'),\n scaleColor: scaleColorProp\n ? hexToRgba(scaleColorProp)\n : theme === 'dark'\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(51, 51, 51, 0.7)',\n };\n }\n\n // 如果 config 中配置了颜色,使用 config\n if (finalConfig?.scaleColor || finalConfig?.controlBg || finalConfig?.controlText) {\n return {\n bg:\n finalConfig.controlBg ||\n (theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)'),\n text: finalConfig.controlText || (theme === 'dark' ? '#fff' : '#333'),\n scaleColor: finalConfig.scaleColor\n ? hexToRgba(finalConfig.scaleColor)\n : theme === 'dark'\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(51, 51, 51, 0.7)',\n };\n }\n\n // 否则根据图层类型和主题自动计算\n const isSatelliteLight = layerType === LAYER_TYPES.SATELLITE && theme === 'light';\n const isTerrainDark = layerType === LAYER_TYPES.TERRAIN && theme === 'dark';\n\n // 需要深色控件的情况:dark 主题 或 satellite + light(但 terrain + dark 除外)\n const needDarkControl = (theme === 'dark' || isSatelliteLight) && !isTerrainDark;\n\n if (needDarkControl) {\n return {\n bg: 'rgba(0, 0, 0, 0.7)',\n text: '#fff',\n scaleColor: 'rgba(255, 255, 255, 0.7)',\n };\n } else {\n return {\n bg: 'rgba(255, 255, 255, 0.85)',\n text: '#333',\n scaleColor: 'rgba(51, 51, 51, 0.7)',\n };\n }\n };\n\n const { bg: controlBg, text: controlText, scaleColor } = getControlColors();\n textEl.style.backgroundColor = controlBg;\n textEl.style.color = controlText;\n // 直接设置 scale 元素的颜色变量\n scale.style.setProperty('--scale-color', scaleColor);\n\n // 添加到地图容器\n mapContainer.appendChild(container);\n\n // 获取合适的刻度距离值(1, 2, 5 的倍数)\n const getRoundNum = (distance: number): number => {\n if (distance <= 0 || !isFinite(distance)) return 1;\n\n const exponent = Math.floor(Math.log(distance) / Math.LN10);\n const fraction = distance / Math.pow(10, exponent);\n let roundedFraction: number;\n\n if (fraction < 1.5) {\n roundedFraction = 1;\n } else if (fraction < 3.5) {\n roundedFraction = 2;\n } else if (fraction < 7.5) {\n roundedFraction = 5;\n } else {\n roundedFraction = 10;\n }\n\n return roundedFraction * Math.pow(10, exponent);\n };\n\n // 获取所有候选的 Nice Meters\n const getCandidateMeters = (targetMeters: number): number[] => {\n if (targetMeters <= 0 || !isFinite(targetMeters)) return [1];\n\n const exponent = Math.floor(Math.log(targetMeters) / Math.LN10);\n const base = Math.pow(10, exponent);\n\n // 返回 1, 2, 5 倍数的候选值\n return [\n base * 0.5, // 小一级的 5\n base * 1, // 当前级的 1\n base * 2, // 当前级的 2\n base * 5, // 当前级的 5\n base * 10, // 大一级的 1\n ].filter(m => m > 0);\n };\n\n // 更新函数\n const update = (): void => {\n // 检查是否已清理或销毁\n if (isCleanup || isDestroyed) return;\n\n // 检查地图是否已完全初始化\n const mapAny = mapInstance as L.Map & { _loaded?: boolean; _mapPane?: HTMLElement };\n if (!mapAny._loaded || !mapAny._mapPane) return;\n\n // 检查地图容器是否存在(防止在销毁后调用)\n try {\n const mapContainer = mapInstance.getContainer();\n if (!mapContainer || !document.contains(mapContainer)) return;\n } catch {\n // 如果获取容器失败,说明地图可能已被销毁\n return;\n }\n\n const mapSize = mapInstance.getSize();\n const bounds = mapInstance.getBounds();\n\n // 计算地图可视范围的实际距离\n const west = bounds.getWest();\n const east = bounds.getEast();\n const centerLat = bounds.getCenter().lat;\n const point1 = L.latLng(centerLat, west);\n const point2 = L.latLng(centerLat, east);\n const maxMeters = mapInstance.distance(point1, point2);\n\n // 计算每像素对应的米数\n const metersPerPixel = maxMeters / mapSize.x;\n\n // 计算合适的刻度间隔(像素)\n // 目标:每个刻度间隔在 40-80 像素之间\n const targetPixels = 60;\n const targetMeters = metersPerPixel * targetPixels;\n\n // 获取候选值并选择最接近目标的\n const candidates = getCandidateMeters(targetMeters);\n let bestMeters = candidates[0];\n let bestDiff = Infinity;\n\n candidates.forEach(meters => {\n const pixels = meters / metersPerPixel;\n const diff = Math.abs(pixels - targetPixels);\n if (diff < bestDiff) {\n bestDiff = diff;\n bestMeters = meters;\n }\n });\n\n const tickInterval = Math.max(30, Math.min(100, Math.round(bestMeters / metersPerPixel)));\n\n // 设置 CSS 变量到 scale 和 textEl\n if (scaleRef.current) {\n scaleRef.current.style.setProperty('--tick-interval', tickInterval + 'px');\n }\n if (textRef.current) {\n textRef.current.style.setProperty('--tick-interval', tickInterval + 'px');\n }\n\n // 计算显示距离\n const displayDistance = getRoundNum(maxMeters * 0.1); // 显示约 1/10 地图宽度的距离\n\n let displayText = '';\n if (metric) {\n displayText = getMetricText(displayDistance);\n }\n if (imperial) {\n if (displayText) displayText += ' / ';\n displayText += getImperialText(displayDistance);\n }\n if (textRef.current) {\n textRef.current.textContent = displayText;\n }\n };\n\n const getMetricText = (distance: number): string => {\n if (distance >= 1000) {\n return (distance / 1000).toFixed(1) + ' km';\n }\n if (distance < 1) {\n return (distance * 100).toFixed(0) + ' cm';\n }\n if (distance < 10) {\n return distance.toFixed(1) + ' m';\n }\n return distance.toFixed(0) + ' m';\n };\n\n const getImperialText = (distance: number): string => {\n const feet = distance * 3.28084;\n if (feet >= 5280) {\n return (feet / 5280).toFixed(1) + ' mi';\n }\n if (feet < 1) {\n return (feet * 12).toFixed(0) + ' in';\n }\n return feet.toFixed(0) + ' ft';\n };\n\n // 标记是否已销毁\n let isDestroyed = false;\n\n // 包装 update 函数,在调用前检查是否已销毁\n const safeUpdate = () => {\n if (!isDestroyed && !isCleanup) {\n update();\n }\n };\n\n // 初始化 - 使用 RAF 确保地图已完全渲染\n animationFrameId = requestAnimationFrame(() => {\n if (!isDestroyed && !isCleanup) {\n const mapAny = mapInstance as L.Map & { _loaded?: boolean; _mapPane?: HTMLElement };\n if (mapAny._loaded && mapAny._mapPane) {\n update();\n }\n }\n });\n\n // 监听地图事件\n mapInstance.on('moveend', safeUpdate);\n mapInstance.on('zoomend', safeUpdate);\n mapInstance.on('resize', safeUpdate);\n\n // 清理函数\n return () => {\n isCleanup = true;\n isDestroyed = true;\n if (animationFrameId) {\n cancelAnimationFrame(animationFrameId);\n }\n mapInstance.off('moveend', safeUpdate);\n mapInstance.off('zoomend', safeUpdate);\n mapInstance.off('resize', safeUpdate);\n if (container && mapContainer.contains(container)) {\n mapContainer.removeChild(container);\n }\n };\n }, [\n map,\n metric,\n imperial,\n theme,\n layerType,\n scaleColorProp,\n controlBgProp,\n controlTextProp,\n finalConfig,\n ]);\n\n return null;\n};\n\nexport default DualScaleControl;\n","/**\n * 地图尺寸处理器组件\n * @description 解决地图容器尺寸变化后(如抽屉/对话框打开),地图不自动刷新的问题\n * @module components/MapSizeHandler\n * @since 2.0.0 已移除 react-leaflet 依赖\n *\n * ## 解决的问题\n *\n * 当地图容器的 DOM 尺寸发生变化时,Leaflet 地图**不会自动重新计算和渲染**,\n * 导致地图显示异常(如:瓦片缺失、只显示一部分、标尺位置错误等)。\n *\n * 常见触发场景:\n * - 抽屉/侧边栏打开或关闭\n * - 对话框弹出\n * - 窗口大小调整\n * - Tab 切换导致容器从隐藏变为显示\n * - 父容器动态改变尺寸\n *\n * ## 核心原理\n *\n * 调用 Leaflet 的 `map.invalidateSize()` 方法,通知地图重新计算容器尺寸并刷新视图。\n *\n * ## 配置参数\n *\n * | 参数 | 说明 | 类型 | 默认值 |\n * |------|------|------|--------|\n * | enabled | 是否启用尺寸处理 | boolean | true |\n * | delay | 每次刷新的间隔时间(毫秒) | number | 100 |\n * | retries | 调用 invalidateSize 的次数 | number | 3 |\n *\n * ## 工作流程\n *\n * 组件挂载后会多次调用 invalidateSize:\n * - 延迟 100ms → invalidateSize()\n * - 延迟 200ms → invalidateSize()\n * - 延迟 300ms → invalidateSize()\n * - (共重试 retries 次,确保容器完全渲染)\n *\n * **为什么需要多次重试?**\n * 因为某些 CSS 动画或布局变化需要时间完成,单次调用可能无法捕获最终尺寸。\n *\n * @example\n * // 方式1:通过 MapContainer 的 mapSizeHandler 属性(推荐)\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * mapSizeHandler // 启用默认配置\n * />\n *\n * // 方式2:自定义配置\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * mapSizeHandler={{ delay: 200, retries: 5 }}\n * />\n *\n * // 方式3:禁用\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * mapSizeHandler={false}\n * />\n *\n * // 方式4:在 ConfigProvider 中配置(用于 MapProvider + MapContent 模式)\n * <ConfigProvider mapSizeHandler={{ delay: 200, retries: 5 }}>\n * <MapProvider center={[30, 120]} zoom={10}>\n * <MapContent />\n * </MapProvider>\n * </ConfigProvider>\n */\n\nimport { useEffect, useRef } from 'react';\nimport { useMap } from '../../context/MapContext';\nimport type { MapSizeHandlerConfig } from '../../types';\n\n/**\n * 地图尺寸处理器组件\n * @description 通过多次调用 invalidateSize 确保地图在容器尺寸变化后正确渲染\n *\n * @example\n * // 在 MapContent 中自动使用,通过 ConfigProvider 配置\n * <ConfigProvider mapSizeHandler>\n * <MapProvider center={[30, 120]} zoom={10}>\n * <MapContent />\n * </MapProvider>\n * </ConfigProvider>\n *\n * // 自定义配置\n * <ConfigProvider mapSizeHandler={{ delay: 200, retries: 5 }}>\n * ...\n * </ConfigProvider>\n */\nconst MapSizeHandler = ({\n enabled = true,\n delay = 100,\n retries = 3,\n}: MapSizeHandlerConfig = {}): null => {\n const map = useMap();\n const initialized = useRef(false);\n\n useEffect(() => {\n if (!enabled || !map || initialized.current) return;\n initialized.current = true;\n\n // 多次调用 invalidateSize 以确保容器已完全渲染\n const timers = Array.from({ length: retries }, (_, i) =>\n setTimeout(() => map!.invalidateSize(), delay * (i + 1))\n );\n\n return () => timers.forEach(clearTimeout);\n }, [map, enabled, delay, retries]);\n\n return null;\n};\n\nexport default MapSizeHandler;\n","/**\n * 缩放控件组件\n * @description 提供放大、缩小按钮和缩放级别显示\n * @module components/ZoomControl\n * @since 2.0.0\n */\n\nimport { useEffect, useMemo, useRef, type MutableRefObject } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport type { ZoomControlPosition } from '../../types';\n\n/**\n * 缩放控件配置\n */\nexport interface ZoomControlConfig {\n /** 控件位置 */\n position?: ZoomControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n}\n\n/**\n * 缩放控件属性\n */\nexport interface ZoomControlProps {\n /** 控件位置,默认 'bottomleft' */\n position?: ZoomControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n /** 主题模式 */\n theme?: 'light' | 'dark';\n}\n\n/**\n * ZoomControl 缩放控件组件\n *\n * @description\n * 提供地图缩放控制功能:\n * - 放大/缩小按钮\n * - 当前缩放级别显示\n * - 支持四个位置:topleft、topright、bottomleft、bottomright\n * - 自动适配主题(light/dark)\n *\n * @example\n * ```tsx\n * import { ZoomControl } from 'agri-map-components';\n *\n * // 基础用法\n * <ZoomControl />\n *\n * // 自定义位置\n * <ZoomControl position=\"topright\" />\n *\n * // 自定义颜色\n * <ZoomControl controlBg=\"rgba(0, 0, 0, 0.8)\" controlText=\"#fff\" />\n * ```\n */\nconst ZoomControl: React.FC<ZoomControlProps> = ({\n position = 'bottomleft',\n controlBg: controlBgProp,\n controlText: controlTextProp,\n theme: themeProp,\n}): null => {\n const map = useMap();\n const configContext = useConfig();\n const zoomControlRef: MutableRefObject<HTMLElement | null> = useRef(null);\n const zoomLevelRef: MutableRefObject<HTMLElement | null> = useRef(null);\n\n // 主题:优先使用 props,其次使用 ConfigProvider\n const theme = themeProp || configContext.theme || 'light';\n\n // 获取控件颜色\n const controlColors = useMemo(() => {\n if (controlBgProp || controlTextProp) {\n return {\n bg:\n controlBgProp || (theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)'),\n text: controlTextProp || (theme === 'dark' ? '#fff' : '#333'),\n };\n }\n return {\n bg: theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)',\n text: theme === 'dark' ? '#fff' : '#333',\n };\n }, [theme, controlBgProp, controlTextProp]);\n\n useEffect(() => {\n // 确保 map 实例已准备好\n if (!map) return;\n\n const mapContainer = map.getContainer();\n const { bg: controlBg, text: controlText } = controlColors;\n\n // 清理已存在的旧控件(防止重复)\n const existingControls = mapContainer.querySelectorAll('.agri-zoom-control');\n existingControls.forEach(el => el.remove());\n\n // 创建缩放控件容器\n const zoomControl = L.DomUtil.create(\n 'div',\n `agri-zoom-control${theme === 'dark' ? ' dark' : ''}`\n );\n zoomControlRef.current = zoomControl;\n\n // 检测图层选择器是否可见(在右下角)\n const layerSelector = mapContainer.querySelector('.tianditu-layer-selector');\n const hasLayerSelector = layerSelector && layerSelector.checkVisibility();\n\n // 根据位置设置样式\n // 注意:左侧位置(topleft、bottomleft)需要为垂直标尺留出空间(30px)\n // bottomright 位置如果有图层选择器,需要向上移动避免遮挡(100px)\n const positionStyles: Record<ZoomControlPosition, React.CSSProperties> = {\n topleft: {\n top: '10px',\n left: '30px',\n bottom: 'auto',\n right: 'auto',\n },\n topright: {\n top: '10px',\n right: '10px',\n bottom: 'auto',\n left: 'auto',\n },\n bottomleft: {\n bottom: '50px', // 为底部水平标尺留出空间\n left: '30px', // 为左侧垂直标尺留出空间\n top: 'auto',\n right: 'auto',\n },\n bottomright: {\n bottom: hasLayerSelector ? '100px' : '10px',\n right: '10px',\n top: 'auto',\n left: 'auto',\n },\n };\n\n Object.assign(zoomControl.style, positionStyles[position]);\n\n // 放大按钮\n const zoomIn = L.DomUtil.create('button', 'zoom-btn zoom-in', zoomControl);\n zoomIn.innerHTML = '+';\n zoomIn.title = '放大';\n zoomIn.style.backgroundColor = controlBg;\n zoomIn.style.color = controlText;\n\n // 缩放级别显示\n const zoomLevel = L.DomUtil.create('div', 'zoom-level', zoomControl);\n zoomLevelRef.current = zoomLevel;\n zoomLevel.style.backgroundColor = controlBg;\n zoomLevel.style.color = controlText;\n\n // 缩小按钮\n const zoomOut = L.DomUtil.create('button', 'zoom-btn zoom-out', zoomControl);\n zoomOut.innerHTML = '−';\n zoomOut.title = '缩小';\n zoomOut.style.backgroundColor = controlBg;\n zoomOut.style.color = controlText;\n\n // 绑定事件\n L.DomEvent.on(zoomIn, 'click', e => {\n L.DomEvent.stopPropagation(e);\n L.DomEvent.preventDefault(e);\n map.zoomIn();\n });\n\n L.DomEvent.on(zoomOut, 'click', e => {\n L.DomEvent.stopPropagation(e);\n L.DomEvent.preventDefault(e);\n map.zoomOut();\n });\n\n // 更新缩放级别显示\n const updateZoomLevel = (): void => {\n if (zoomLevelRef.current) {\n zoomLevelRef.current.textContent = String(map.getZoom());\n }\n };\n updateZoomLevel();\n map.on('zoomend', updateZoomLevel);\n\n // 添加到地图容器\n mapContainer.appendChild(zoomControl);\n\n // 监听图层选择器的可见性变化,动态调整位置\n let layerSelectorObserver: MutationObserver | null = null;\n if (layerSelector) {\n layerSelectorObserver = new MutationObserver(() => {\n const isVisible = layerSelector.checkVisibility();\n if (zoomControlRef.current && position === 'bottomright') {\n zoomControlRef.current.style.bottom = isVisible ? '100px' : '10px';\n }\n });\n\n layerSelectorObserver.observe(layerSelector, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n subtree: true,\n });\n }\n\n // 清理函数\n return () => {\n map.off('zoomend', updateZoomLevel);\n if (layerSelectorObserver) {\n layerSelectorObserver.disconnect();\n }\n if (zoomControl && mapContainer.contains(zoomControl)) {\n mapContainer.removeChild(zoomControl);\n }\n };\n }, [map, position, theme, controlColors]);\n\n return null;\n};\n\nexport default ZoomControl;\n","/**\n * 全屏控件组件\n * @description 提供地图全屏切换功能\n * @module components/FullscreenControl\n * @since 2.1.0\n */\n\nimport { useEffect, useRef, type MutableRefObject } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport type { FullscreenControlPosition } from '../../types';\n\n// 空函数,用于清理事件监听器\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\n/**\n * 全屏控件属性\n */\nexport interface FullscreenControlProps {\n /** 控件位置,默认 'topleft' */\n position?: FullscreenControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n /** 主题模式 */\n theme?: 'light' | 'dark';\n}\n\n/**\n * FullscreenControl 全屏控件组件\n *\n * @description\n * 提供地图全屏切换功能:\n * - 点击按钮进入/退出全屏\n * - 支持四个位置:topleft、topright、bottomleft、bottomright\n * - 自动适配主题(light/dark)\n * - 全屏状态自动更新按钮图标\n *\n * @example\n * ```tsx\n * import { FullscreenControl } from 'agri-map-components';\n *\n * // 基础用法\n * <FullscreenControl />\n *\n * // 自定义位置\n * <FullscreenControl position=\"topright\" />\n *\n * // 自定义颜色\n * <FullscreenControl controlBg=\"rgba(0, 0, 0, 0.8)\" controlText=\"#fff\" />\n * ```\n */\nconst FullscreenControl: React.FC<FullscreenControlProps> = ({\n position = 'topleft',\n controlBg: controlBgProp,\n controlText: controlTextProp,\n theme: themeProp,\n}): null => {\n const map = useMap();\n const configContext = useConfig();\n const fullscreenControlRef: MutableRefObject<HTMLElement | null> = useRef(null);\n\n // 主题:优先使用 props,其次使用 ConfigProvider\n const theme = themeProp || configContext.theme || 'light';\n\n // 计算控件颜色\n const controlBg =\n controlBgProp || (theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)');\n const controlText = controlTextProp || (theme === 'dark' ? '#fff' : '#333');\n\n useEffect(() => {\n // 确保 map 实例已准备好\n if (!map) return;\n\n const mapContainer = map.getContainer();\n\n // 清理已存在的旧控件(防止重复)\n const existingControls = mapContainer.querySelectorAll('.agri-fullscreen-control');\n existingControls.forEach(el => el.remove());\n\n // 创建全屏控件容器\n const fullscreenControl = L.DomUtil.create('div', 'agri-fullscreen-control');\n fullscreenControlRef.current = fullscreenControl;\n\n // 检测图层选择器是否可见(在右下角)\n const layerSelector = mapContainer.querySelector('.tianditu-layer-selector');\n const hasLayerSelector = layerSelector && layerSelector.checkVisibility();\n\n // 根据位置设置样式\n const positionStyles: Record<FullscreenControlPosition, React.CSSProperties> = {\n topleft: {\n position: 'absolute',\n top: '10px',\n left: '10px',\n bottom: 'auto',\n right: 'auto',\n zIndex: 1000,\n },\n topright: {\n position: 'absolute',\n top: '10px',\n right: '10px',\n bottom: 'auto',\n left: 'auto',\n zIndex: 1000,\n },\n bottomleft: {\n position: 'absolute',\n bottom: '10px',\n left: '10px',\n top: 'auto',\n right: 'auto',\n zIndex: 1000,\n },\n bottomright: {\n position: 'absolute',\n bottom: hasLayerSelector ? '100px' : '10px',\n right: '10px',\n top: 'auto',\n left: 'auto',\n zIndex: 1000,\n },\n };\n\n Object.assign(fullscreenControl.style, positionStyles[position]);\n\n // 设置控件基础样式\n Object.assign(fullscreenControl.style, {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n backgroundColor: controlBg,\n borderRadius: '4px',\n cursor: 'pointer',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.3)',\n transition: 'background-color 0.2s',\n });\n\n // 鼠标悬停效果\n fullscreenControl.addEventListener('mouseenter', () => {\n fullscreenControl.style.backgroundColor =\n theme === 'dark' ? 'rgba(0, 0, 0, 0.9)' : 'rgba(255, 255, 255, 0.95)';\n });\n\n fullscreenControl.addEventListener('mouseleave', () => {\n fullscreenControl.style.backgroundColor = controlBg;\n });\n\n // 创建图标容器\n const iconContainer = L.DomUtil.create('div', 'agri-fullscreen-icon', fullscreenControl);\n Object.assign(iconContainer.style, {\n width: '20px',\n height: '20px',\n color: controlText,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n });\n\n // 渲染图标\n const renderIcon = (isFullscreen: boolean) => {\n iconContainer.innerHTML = isFullscreen\n ? `<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"${controlText}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m13 0h3a2 2 0 0 1 2 2v3m0 13v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"/></svg>`\n : `<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"${controlText}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>`;\n };\n\n // 初始渲染图标\n const isCurrentlyFullscreen = !!document.fullscreenElement;\n renderIcon(isCurrentlyFullscreen);\n\n // 监听全屏状态变化\n const handleFullscreenChange = () => {\n const isFullscreen = !!document.fullscreenElement;\n renderIcon(isFullscreen);\n };\n\n document.addEventListener('fullscreenchange', handleFullscreenChange);\n\n // 点击事件\n const handleClick = (e: Event) => {\n L.DomEvent.stopPropagation(e);\n L.DomEvent.preventDefault(e);\n\n if (!document.fullscreenElement) {\n // 进入全屏\n mapContainer.requestFullscreen?.().catch(err => {\n console.error('全屏模式启用失败:', err);\n });\n } else {\n // 退出全屏\n document.exitFullscreen?.().catch(err => {\n console.error('全屏模式退出失败:', err);\n });\n }\n };\n\n fullscreenControl.addEventListener('click', handleClick);\n\n // 添加到地图容器\n mapContainer.appendChild(fullscreenControl);\n\n // 监听图层选择器的可见性变化,动态调整位置\n let layerSelectorObserver: MutationObserver | null = null;\n if (layerSelector) {\n layerSelectorObserver = new MutationObserver(() => {\n const isVisible = layerSelector.checkVisibility();\n if (fullscreenControlRef.current && position === 'bottomright') {\n fullscreenControlRef.current.style.bottom = isVisible ? '100px' : '10px';\n }\n });\n\n layerSelectorObserver.observe(layerSelector, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n subtree: true,\n });\n }\n\n // 清理函数\n return () => {\n document.removeEventListener('fullscreenchange', handleFullscreenChange);\n fullscreenControl.removeEventListener('click', handleClick);\n fullscreenControl.removeEventListener('mouseenter', noop);\n fullscreenControl.removeEventListener('mouseleave', noop);\n if (layerSelectorObserver) {\n layerSelectorObserver.disconnect();\n }\n if (fullscreenControl && mapContainer.contains(fullscreenControl)) {\n mapContainer.removeChild(fullscreenControl);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, position, theme, controlBgProp, controlTextProp]);\n\n return null;\n};\n\nexport default FullscreenControl;\n","/**\n * @fileoverview Loading 加载组件\n * @description 显示加载状态的组件,支持多种加载图标和自定义配置\n * @module components/Loading\n */\n\nimport { useMemo } from 'react';\nimport type { LoadingProps, LoadingMaskConfig } from '../../types';\nimport { generateLoadingSpinnerSvg, generateLoadingDotsSvg } from '../../utils/pulseIcon';\nimport {\n LOADING_DEFAULT_MASK_BACKGROUND,\n LOADING_DEFAULT_MASK_ZINDEX,\n} from '../../constants/styles';\n\n/**\n * Loading 加载组件\n *\n * @description\n * 显示加载状态,支持以下功能:\n * - 多种加载图标:loading-spinner(旋转圆圈)、loading-dots(跳动圆点)\n * - 自定义尺寸:small、default、large 或数字\n * - 描述文案:可选的加载提示文字\n * - 遮罩配置:支持自定义背景色、层级等\n *\n * @example\n * ```tsx\n * import { Loading } from 'agri-map-components';\n *\n * // 基础用法\n * <Loading />\n *\n * // 自定义图标和描述\n * <Loading icon=\"loading-dots\" description=\"加载中...\" />\n *\n * // 自定义尺寸\n * <Loading size=\"large\" />\n * <Loading size={64} />\n *\n * // 带遮罩\n * <Loading mask />\n * <Loading mask={{ background: 'rgba(0, 0, 0, 0.5)', zIndex: 999 }} />\n *\n * // 在 Marker 中使用\n * <Marker loading={true} />\n * ```\n */\nconst Loading: React.FC<LoadingProps> = ({\n icon = 'loading-spinner',\n description,\n size = 'default',\n mask,\n className,\n style,\n}) => {\n // 计算图标尺寸\n const iconSize = useMemo(() => {\n const sizeMap: Record<string, number> = {\n small: 24,\n default: 32,\n large: 48,\n };\n\n if (typeof size === 'number') {\n return size;\n }\n return sizeMap[size] || sizeMap.default;\n }, [size]);\n\n // 解析遮罩配置\n const maskConfig = useMemo((): LoadingMaskConfig => {\n // 明确禁用遮罩\n if (mask === false || mask === null) {\n return { enabled: false };\n }\n // mask 为 true 或未设置时,默认启用遮罩\n if (mask === true || mask === undefined) {\n return { enabled: true };\n }\n // 传入对象时,除非明确设置 enabled: false,否则启用\n return {\n enabled: mask.enabled ?? true,\n background: mask.background,\n zIndex: mask.zIndex,\n };\n }, [mask]);\n\n // 生成 SVG\n const svgContent = useMemo(() => {\n switch (icon) {\n case 'loading-dots':\n return generateLoadingDotsSvg(iconSize, iconSize, true);\n case 'loading-spinner':\n default:\n return generateLoadingSpinnerSvg(iconSize, iconSize, true);\n }\n }, [icon, iconSize]);\n\n const content = (\n <div\n className={`agri-loading ${className || ''}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: description ? 8 : 0,\n ...style,\n }}\n >\n <div\n className=\"agri-loading-icon\"\n dangerouslySetInnerHTML={{ __html: svgContent }}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n />\n {description && (\n <span className=\"agri-loading-description\" style={{ color: '#666', fontSize: 14 }}>\n {description}\n </span>\n )}\n </div>\n );\n\n // 如果启用遮罩,包裹遮罩层\n if (maskConfig.enabled) {\n return (\n <div\n className=\"agri-loading-mask\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: maskConfig.background || LOADING_DEFAULT_MASK_BACKGROUND,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: maskConfig.zIndex ?? LOADING_DEFAULT_MASK_ZINDEX,\n pointerEvents: 'none',\n }}\n >\n {content}\n </div>\n );\n }\n\n return content;\n};\n\nexport default Loading;\n","/**\n * 地图容器组件\n * @description 集成 MapProvider 和自动渲染功能,提供一站式地图容器\n * @since 2.0.0\n * @since 2.0.0 使用自定义 ZoomControl 替代 Leaflet 原生缩放控件\n * @since 2.1.0 使用 memo 包装,避免父组件状态变化导致不必要的重新渲染\n *\n * ## 修复记录 (2024-06-08)\n *\n * **问题**: 当父组件状态变化时(如修改 Marker 图标配置),MapContainer 会重新渲染,\n * 导致 TianDiTuLayer 的 useEffect 重新执行,瓦片图层被删除并重新创建,触发大量瓦片请求。\n *\n * **原因**: MapContainer 没有使用 memo 包装,即使 props 没有变化,也会在父组件重新渲染时重新渲染。\n *\n * **修复方案**: 使用 `memo<MapContainerProps>(function MapContainer(...) {...})` 包装组件,\n * 只有当 props 变化时才重新渲染。\n */\n\nimport React, { useMemo, memo } from 'react';\nimport type L from 'leaflet';\nimport { MapProvider } from '../../context/MapContext';\nimport { useTheme } from '../../context/ThemeContext';\nimport { ConfigContext, type ConfigContextValue } from '../../context/ConfigContext';\nimport DualScaleControl from '../DualScaleControl';\nimport TianDiTuLayer from '../TianDiTuLayer';\nimport MapSizeHandler from '../MapSizeHandler';\nimport ZoomControl from '../ZoomControl';\nimport FullscreenControl from '../FullscreenControl';\nimport Loading from '../Loading';\nimport type {\n DualScaleControlConfig,\n MapSizeHandlerConfig,\n TianDiTuLayerConfig,\n LoadingProps,\n ZoomControlPosition,\n FullscreenControlPosition,\n MapLifecycleConfig,\n PathOptions,\n PolylineStyle,\n IconConfig,\n AntPathConfig,\n ClusterIconConfig,\n} from '../../types';\n\n// 重导出 useConfig,保持 API 兼容\nexport { useConfig } from '../../context/ConfigContext';\n\n// ========== 类型定义 ==========\n\n/**\n * 缩放控件配置\n */\nexport interface ZoomControlConfig {\n /** 控件位置 */\n position?: ZoomControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n}\n\n/**\n * 全屏控件配置\n * @since 2.1.0\n */\nexport interface FullscreenControlConfig {\n /** 控件位置,默认 'topleft' */\n position?: FullscreenControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n}\n\n/**\n * 地图容器属性\n */\nexport interface MapContainerProps {\n /** 子组件 */\n children?: React.ReactNode;\n // ========== 地图基础配置 ==========\n /** 中心点 */\n center: [number, number];\n /**\n * 缩放级别\n * @default 12\n */\n zoom?: number;\n /** 样式 */\n style?: React.CSSProperties;\n /** 类名 */\n className?: string;\n /**\n * 容器宽度\n * @description 支持数字(默认单位 px)或字符串(如 '100%', '800px')\n * @default '100%'\n */\n width?: string | number;\n /**\n * 容器高度\n * @description 支持数字(默认单位 px)或字符串(如 '480px', '100vh')\n * @default 480\n */\n height?: string | number;\n /**\n * 容器圆角\n * @description 支持数字(默认单位 px)或字符串(如 '8px', '50%')\n * @default 8\n */\n radius?: string | number;\n /** CRS 坐标系 */\n crs?: L.CRS;\n /** 最大缩放 */\n maxZoom?: number;\n /** 最小缩放 */\n minZoom?: number;\n /** 是否启用滚轮缩放 */\n scrollWheelZoom?: boolean;\n /**\n * 缩放控件配置\n * @description 传入 true 显示默认自定义缩放控件,传入对象自定义配置,false 不显示\n * @since 2.0.0 使用自定义 ZoomControl 替代 Leaflet 原生\n */\n zoomControl?: boolean | ZoomControlConfig;\n /** 是否显示归属控件 */\n attributionControl?: boolean;\n /** 地图就绪回调 */\n whenReady?: (map: L.Map) => void;\n // ========== 配置 ==========\n /** 主题模式 */\n theme?: 'light' | 'dark';\n /**\n * 双向标尺配置\n * @description 传入 true 显示默认配置,传入对象自定义配置,不传或 false 不显示\n */\n dualScaleControl?: boolean | DualScaleControlConfig;\n /**\n * 天地图图层配置\n * @description 配置后自动渲染 TianDiTuLayer\n */\n tianDiTuLayer?: TianDiTuLayerConfig | false;\n /**\n * 地图尺寸处理器配置\n * @description 传入 true 启用默认配置,传入对象自定义配置,不传或 false 不启用\n */\n mapSizeHandler?: boolean | MapSizeHandlerConfig;\n /**\n * 加载状态配置\n * @description 传入 true 显示默认加载动画,传入对象自定义配置,不传或 false 不显示\n * @example\n * // 显示默认加载\n * <MapContainer loading />\n *\n * // 自定义加载\n * <MapContainer loading={{ description: '加载中...', icon: 'loading-dots' }} />\n */\n loading?: boolean | LoadingProps;\n /**\n * 全屏控件\n * @description 传入 true 显示默认全屏按钮,传入对象自定义配置,传入字符串指定位置,不传或 false 不显示\n * @since 2.1.0\n * @example\n * // 显示默认全屏按钮(左上角)\n * <MapContainer fullscreen />\n *\n * // 指定位置\n * <MapContainer fullscreen=\"topright\" />\n *\n * // 自定义配置\n * <MapContainer fullscreen={{ position: 'topright', controlBg: 'rgba(0, 0, 0, 0.8)' }} />\n */\n fullscreen?: boolean | FullscreenControlConfig | FullscreenControlPosition;\n /**\n * 地图生命周期回调配置\n * @description 极简方案:只保留 onMapReady 和 onViewportChange\n * @since 1.4.0\n * @example\n * ```tsx\n * lifecycle={{\n * onMapReady: ({ map }) => console.log('地图就绪'),\n * onViewportChange: (data) => saveViewport(data),\n * }}\n * ```\n */\n lifecycle?: MapLifecycleConfig;\n /**\n * 组件默认配置\n * @description 统一配置各组件的默认属性\n * @example\n * ```tsx\n * config={{\n * plotLayer: {\n * editing: { color: '#faad14', fillColor: '#faad14' },\n * },\n * }}\n * ```\n */\n config?: {\n plotLayer?: {\n editing?: PathOptions | null | false;\n };\n marker?: {\n editing?: IconConfig | null | false;\n };\n road?: {\n default?: PolylineStyle | null | false;\n selected?: PolylineStyle | null | false;\n editing?: PolylineStyle | null | false;\n antPath?: AntPathConfig | null | false;\n };\n irrigation?: {\n default?: PolylineStyle | null | false;\n selected?: PolylineStyle | null | false;\n editing?: PolylineStyle | null | false;\n antPath?: AntPathConfig | null | false;\n inlet?: IconConfig | null | false;\n outlet?: IconConfig | null | false;\n };\n track?: {\n default?: PolylineStyle | null | false;\n nonWorking?: PolylineStyle | null | false;\n selected?: PolylineStyle | null | false;\n start?: IconConfig | null | false;\n end?: IconConfig | null | false;\n cluster?: ClusterIconConfig | null | false;\n };\n };\n}\n\n// ========== 辅助函数 ==========\n\n/** 解析 dualScaleControl 配置 */\nconst getDualScaleControlConfig = (\n config: boolean | DualScaleControlConfig | undefined\n): DualScaleControlConfig | false | undefined => {\n if (config === undefined || config === false) {\n return false;\n }\n return config === true ? {} : config;\n};\n\n/** 解析 mapSizeHandler 配置 */\nconst getMapSizeHandlerConfig = (\n config: boolean | MapSizeHandlerConfig | undefined\n): MapSizeHandlerConfig | false => {\n if (config === undefined || config === false) {\n return false;\n }\n return config === true ? {} : config;\n};\n\n/** 解析 zoomControl 配置 */\nconst getZoomControlConfig = (\n config: boolean | ZoomControlConfig | undefined\n): ZoomControlConfig | false => {\n if (config === undefined || config === false) {\n return false;\n }\n return config === true ? {} : config;\n};\n\n/** 解析 fullscreen 配置 */\nconst getFullscreenControlConfig = (\n config: boolean | FullscreenControlConfig | FullscreenControlPosition | undefined\n): FullscreenControlConfig | false => {\n if (config === undefined || config === false) {\n return false;\n }\n // 如果是字符串(位置),转换为配置对象\n if (typeof config === 'string') {\n return { position: config };\n }\n return config === true ? {} : config;\n};\n\n// ========== 组件 ==========\n\n/**\n * 地图容器组件\n * 集成地图实例上下文、配置上下文和自动渲染功能\n *\n * @example\n * ```tsx\n * // 基础用法(默认 width: 100%, height: 480px)\n * <MapContainer center={[30, 120]} zoom={10}>\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 自定义尺寸(数字,单位 px)\n * <MapContainer center={[30, 120]} zoom={10} width={800} height={600}>\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 自定义尺寸(字符串,支持 px、%、vh 等单位)\n * <MapContainer center={[30, 120]} zoom={10} width=\"100%\" height=\"800px\">\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 使用 style 覆盖尺寸\n * <MapContainer center={[30, 120]} zoom={10} style={{ height: '100vh' }}>\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 自定义圆角\n * <MapContainer center={[30, 120]} zoom={10} radius={12}>\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 带天地图和标尺\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * tianDiTuLayer={{ apiKey: 'your-key' }}\n * dualScaleControl\n * >\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 深色主题\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * theme=\"dark\"\n * tianDiTuLayer={{ apiKey: 'your-key', layerType: 'satellite' }}\n * dualScaleControl={{ showZoomControl: true }}\n * mapSizeHandler\n * >\n * <PlotLayer dataSource={plots} />\n * </MapContainer>\n * ```\n */\nexport const MapContainer = memo<MapContainerProps>(function MapContainer({\n children,\n center,\n zoom = 12,\n style,\n className,\n width,\n height,\n radius = 8,\n crs,\n maxZoom = 22,\n minZoom,\n scrollWheelZoom = true,\n zoomControl = false,\n attributionControl = true,\n whenReady,\n theme: themeProp,\n dualScaleControl,\n tianDiTuLayer,\n mapSizeHandler,\n loading,\n fullscreen,\n lifecycle,\n config,\n}: MapContainerProps) {\n // 从全局 ThemeContext 读取主题,props.theme 优先\n const { theme: globalTheme } = useTheme();\n const theme = themeProp ?? globalTheme;\n\n // 合并尺寸样式:默认 width: '100%', height: 480\n const mergedStyle = useMemo((): React.CSSProperties => {\n const defaultStyle: React.CSSProperties = {\n width: '100%',\n height: 480,\n borderRadius: typeof radius === 'number' ? `${radius}px` : radius,\n };\n\n // 处理 width 和 height 属性\n if (width !== undefined) {\n defaultStyle.width = typeof width === 'number' ? `${width}px` : width;\n }\n if (height !== undefined) {\n defaultStyle.height = typeof height === 'number' ? `${height}px` : height;\n }\n\n // 合并用户传入的 style,用户 style 优先\n return { ...defaultStyle, ...style };\n }, [width, height, style, radius]);\n\n // 解析后的配置\n const dualScaleConfig = getDualScaleControlConfig(dualScaleControl);\n const mapSizeConfig = getMapSizeHandlerConfig(mapSizeHandler);\n const zoomControlConfig = getZoomControlConfig(zoomControl);\n const fullscreenConfig = getFullscreenControlConfig(fullscreen);\n\n // 地图选项:当使用自定义 ZoomControl 时,禁用 Leaflet 原生 zoomControl\n const mapOptions: L.MapOptions = useMemo(\n () => ({\n crs,\n maxZoom,\n minZoom,\n scrollWheelZoom,\n zoomControl: zoomControlConfig !== false ? false : false, // 始终禁用原生,使用自定义\n attributionControl,\n }),\n [crs, maxZoom, minZoom, scrollWheelZoom, zoomControlConfig, attributionControl]\n );\n\n // 配置上下文值\n const configValue = useMemo((): ConfigContextValue => {\n const tianDiTuLayerValue: TianDiTuLayerConfig | false =\n tianDiTuLayer === false || !tianDiTuLayer ? false : tianDiTuLayer;\n\n return {\n theme,\n dualScaleControl: dualScaleConfig,\n tianDiTuLayer: tianDiTuLayerValue,\n mapSizeHandler: mapSizeConfig,\n ...config,\n };\n }, [theme, dualScaleConfig, tianDiTuLayer, mapSizeConfig, config]);\n\n return (\n <ConfigContext.Provider value={configValue}>\n <MapProvider\n center={center}\n zoom={zoom}\n style={mergedStyle}\n className={className}\n options={mapOptions}\n onReady={whenReady}\n lifecycle={lifecycle}\n >\n {/* 自动渲染地图尺寸处理器 */}\n {mapSizeConfig !== false && (\n <MapSizeHandler\n enabled={mapSizeConfig?.enabled}\n delay={mapSizeConfig?.delay}\n retries={mapSizeConfig?.retries}\n />\n )}\n\n {/* 自动渲染天地图图层 */}\n {tianDiTuLayer !== false && tianDiTuLayer && (\n <TianDiTuLayer\n apiKey={tianDiTuLayer.apiKey}\n layerType={tianDiTuLayer.layerType}\n showAnnotation={tianDiTuLayer.showAnnotation}\n overlayUrl={tianDiTuLayer.overlayUrl}\n subdomains={tianDiTuLayer.subdomains}\n maxZoom={tianDiTuLayer.maxZoom}\n minZoom={tianDiTuLayer.minZoom}\n showLayerSelector={tianDiTuLayer.showLayerSelector}\n />\n )}\n\n {/* 自动渲染双向标尺 */}\n {dualScaleConfig !== false && <DualScaleControl />}\n\n {/* 自动渲染缩放控件 */}\n {zoomControlConfig !== false && (\n <ZoomControl\n position={zoomControlConfig?.position}\n controlBg={zoomControlConfig?.controlBg}\n controlText={zoomControlConfig?.controlText}\n />\n )}\n\n {/* 自动渲染全屏控件 */}\n {fullscreenConfig !== false && (\n <FullscreenControl\n position={fullscreenConfig?.position}\n controlBg={fullscreenConfig?.controlBg}\n controlText={fullscreenConfig?.controlText}\n />\n )}\n\n {/* 用户子组件 */}\n {children}\n\n {/* 加载状态 */}\n {loading && <Loading mask {...(typeof loading === 'object' ? loading : {})} />}\n </MapProvider>\n </ConfigContext.Provider>\n );\n});\n\nMapContainer.displayName = 'MapContainer';\n\nexport default MapContainer;\n","/**\n * @fileoverview 农业图层统一生命周期管理 Hook\n * @description 为 PlotLayer、Road、Irrigation、Marker 提供统一的生命周期管理\n * @since 1.4.0\n * @module hooks/useLifecycle\n *\n * @example\n * ```tsx\n * // 在组件中使用\n * useLifecycle<'PlotLayer'>({\n * componentType: 'PlotLayer',\n * lifecycle,\n * dataSource: normalizedDataSource,\n * currentState: { mode: editMode, prevMode, plotId: selectedPlotId },\n * isRendered: layersReady,\n * renderStats: { totalCount, renderedCount, virtualized },\n * });\n * ```\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any, react-hooks/exhaustive-deps -- 状态机需要 */\n\nimport { useEffect, useRef } from 'react';\nimport type {\n AgriculturalComponentType,\n LifecycleConfig,\n LifecycleRenderStats,\n StateChangeMap,\n} from '../types/lifecycle';\n\n/**\n * useLifecycle 配置选项\n * @template T - 组件类型\n */\nexport interface UseLifecycleOptions<T extends AgriculturalComponentType> {\n /** 组件类型标识 */\n componentType: T;\n /** 生命周期回调配置 */\n lifecycle?: LifecycleConfig<T>;\n /** 标准化后的数据源 */\n dataSource: any[];\n /** 当前状态对象(不同组件类型有不同的状态结构) */\n currentState: T extends keyof StateChangeMap ? StateChangeMap[T] : any;\n /** 上一个状态对象 */\n prevState?: T extends keyof StateChangeMap ? StateChangeMap[T] : any;\n /** 是否已完成首次渲染 */\n isRendered: boolean;\n /** 渲染统计信息 */\n renderStats?: Omit<LifecycleRenderStats, 'componentType'>;\n}\n\n/**\n * 农业图层统一生命周期管理 Hook\n * @description 管理组件的挂载、渲染、状态变化、卸载四个关键生命周期节点\n *\n * @param options - 配置选项\n * @returns void\n *\n * @example\n * ```tsx\n * function PlotLayer({ dataSource, editMode, lifecycle }) {\n * const selectedPlotId = useSelectedPlotId();\n * const layersReady = useLayersReady();\n *\n * useLifecycle<'PlotLayer'>({\n * componentType: 'PlotLayer',\n * lifecycle,\n * dataSource,\n * currentState: {\n * mode: editMode,\n * prevMode: prevEditModeRef.current,\n * plotId: selectedPlotId,\n * },\n * isRendered: layersReady,\n * renderStats: {\n * totalCount: dataSource.length,\n * renderedCount: visiblePlots.length,\n * virtualized: isVirtualized,\n * },\n * });\n *\n * return ...;\n * }\n * ```\n */\nexport function useLifecycle<T extends AgriculturalComponentType>(\n options: UseLifecycleOptions<T>\n): void {\n const {\n componentType,\n lifecycle,\n dataSource,\n currentState,\n prevState: _prevState,\n isRendered,\n renderStats,\n } = options;\n\n const isMounted = useRef(false);\n const hasRendered = useRef(false);\n const prevStatusRef = useRef<any>(null);\n const dataLengthRef = useRef<number>(0);\n\n // 使用 ref 存储 lifecycle 和 dataSource,避免依赖数组变化导致循环\n const lifecycleRef = useRef(lifecycle);\n const dataSourceRef = useRef(dataSource);\n const renderStatsRef = useRef(renderStats);\n\n // 更新 ref\n lifecycleRef.current = lifecycle;\n dataSourceRef.current = dataSource;\n renderStatsRef.current = renderStats;\n\n // ========== MOUNT: 第一次数据挂载之前 ==========\n useEffect(() => {\n // 检测数据源变化(重新挂载的情况)\n if (dataLengthRef.current !== dataSource.length) {\n dataLengthRef.current = dataSource.length;\n // 数据变化时重置状态,允许重新触发生命周期\n isMounted.current = false;\n hasRendered.current = false;\n }\n\n // 防止重复执行\n if (isMounted.current) {\n return;\n }\n\n // 调用 onBeforeMount 回调,可进行数据验证\n const shouldContinue = lifecycleRef.current?.onBeforeMount?.(dataSourceRef.current);\n\n // 如果返回 false,阻止组件挂载\n if (shouldContinue === false) {\n console.warn(`[${componentType}] Mount aborted by onBeforeMount`);\n return;\n }\n\n // 标记为已挂载\n isMounted.current = true;\n }, [dataSource.length]);\n\n // ========== MOUNT: 第一次渲染完成 ==========\n useEffect(() => {\n // 修复:如果 isRendered=true 但 isMounted=false,说明是重新挂载\n // 需要先触发 onBeforeMount,然后标记为已挂载\n if (!isMounted.current && isRendered && renderStats) {\n const shouldContinue = lifecycleRef.current?.onBeforeMount?.(dataSourceRef.current);\n if (shouldContinue === false) {\n console.warn(`[${componentType}] Mount aborted by onBeforeMount`);\n return;\n }\n isMounted.current = true;\n }\n\n // 必须满足以下条件才触发:\n // 1. 组件已挂载\n // 2. 图层已渲染完成\n // 3. 尚未触发过 firstRender(防止重复触发)\n // 4. 有渲染统计数据\n if (!isMounted.current || !isRendered || hasRendered.current || !renderStats) {\n return;\n }\n\n // 标记为已渲染\n hasRendered.current = true;\n\n // 调用 onFirstRender 回调,直接使用当前 renderStats 参数\n lifecycleRef.current?.onFirstRender?.({\n totalCount: renderStats.totalCount,\n renderedCount: renderStats.renderedCount,\n virtualized: renderStats.virtualized,\n componentType,\n });\n }, [\n isRendered,\n renderStats?.totalCount,\n renderStats?.renderedCount,\n renderStats?.virtualized,\n componentType,\n ]);\n\n // ========== UPDATE: 状态变化 ==========\n useEffect(() => {\n // 必须当前状态有效才处理\n if (!currentState) {\n return;\n }\n\n // 获取上一个状态\n const prevStatus = prevStatusRef.current;\n\n // 比较状态是否发生变化(根据具体状态结构比较)\n const stateChanged =\n !prevStatus ||\n ('mode' in prevStatus && 'mode' in currentState && prevStatus.mode !== currentState.mode) ||\n ('plotId' in prevStatus &&\n 'plotId' in currentState &&\n prevStatus.plotId !== currentState.plotId) ||\n ('action' in prevStatus &&\n 'action' in currentState &&\n prevStatus.action !== currentState.action) ||\n ('roadId' in prevStatus &&\n 'roadId' in currentState &&\n prevStatus.roadId !== currentState.roadId) ||\n ('irrigationId' in prevStatus &&\n 'irrigationId' in currentState &&\n prevStatus.irrigationId !== currentState.irrigationId) ||\n ('markerId' in prevStatus &&\n 'markerId' in currentState &&\n prevStatus.markerId !== currentState.markerId);\n\n if (stateChanged) {\n // 调用 onStateChange 回调,传入新旧状态\n lifecycleRef.current?.onStateChange?.({\n ...currentState,\n prevStatus,\n });\n\n // 更新上一个状态引用\n prevStatusRef.current = currentState;\n }\n }, [currentState, componentType]);\n\n // ========== UNMOUNT: 组件卸载前 ==========\n useEffect(() => {\n // 返回清理函数,在组件卸载时执行\n return () => {\n // 只有已挂载的组件才需要清理\n if (!isMounted.current) {\n return;\n }\n\n // 调用 onBeforeUnmount 回调,可进行异步保存等操作\n lifecycleRef.current?.onBeforeUnmount?.();\n\n // 标记为已卸载\n isMounted.current = false;\n };\n }, []);\n}\n\nexport default useLifecycle;\n","/**\n * 解析编辑模式的 Hook\n * @description 统一处理各组件的 editMode 属性解析逻辑\n */\n\nimport { useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport type { ToolbarColor, ToolbarSize } from '../components/shared/BaseEditToolbar';\n\n/**\n * 编辑模式对象配置\n */\nexport interface EditModeObjectConfig<T extends string> {\n /** 启用的编辑按钮 */\n enabled?: boolean | T[];\n /** 自定义工具栏内容 */\n toolbar?: ReactNode;\n /** 内置按钮的统一颜色(支持预设色和自定义颜色) */\n color?: ToolbarColor;\n /** 内置按钮的统一尺寸(支持预设尺寸和自定义数字) */\n size?: ToolbarSize;\n /** 是否仅显示图标(不显示文字) */\n iconOnly?: boolean;\n}\n\n/**\n * 编辑模式类型\n * - `false`: 禁用编辑\n * - `true`: 启用全部编辑功能\n * - `T[]`: 启用指定的编辑按钮\n * - `EditModeObjectConfig<T>`: 对象配置,支持自定义工具栏\n */\nexport type EditModeConfig<T extends string> = boolean | T[] | EditModeObjectConfig<T>;\n\n/**\n * 编辑模式解析结果\n */\nexport interface EditModeResult<T extends string> {\n /** 是否启用编辑模式 */\n editEnabled: boolean;\n /** 启用的按钮列表 */\n enabledButtons: T[];\n /** 自定义工具栏内容 */\n customToolbar?: ReactNode;\n /** 内置按钮的统一颜色 */\n color?: ToolbarColor;\n /** 内置按钮的统一尺寸 */\n size?: ToolbarSize;\n /** 是否仅显示图标 */\n iconOnly?: boolean;\n}\n\n/**\n * 解析编辑模式配置\n * @param editModeProp 编辑模式属性值\n * @param defaultButtons 当 editMode 为 true 时默认启用的按钮\n * @returns EditModeResult\n *\n * @example\n * ```ts\n * // PlotLayer\n * const { editEnabled, enabledButtons } = useEditMode(\n * editModeProp,\n * ['redraw', 'clip', 'move', 'create', 'delete'] as const\n * );\n *\n * // Marker\n * const { editEnabled, enabledButtons } = useEditMode(\n * editModeProp,\n * ['create', 'move', 'delete'] as const\n * );\n *\n * // 使用对象配置\n * const { editEnabled, enabledButtons, customToolbar } = useEditMode(\n * { enabled: ['create', 'move'], toolbar: <Button>自定义</Button> },\n * ['create', 'move', 'delete'] as const\n * );\n * ```\n */\nexport function useEditMode<T extends string>(\n editModeProp: EditModeConfig<T> | undefined,\n defaultButtons: readonly T[]\n): EditModeResult<T> {\n return useMemo(() => {\n // 处理 undefined 或 false\n if (editModeProp === undefined || editModeProp === false) {\n return { editEnabled: false, enabledButtons: [] };\n }\n\n // 处理 true\n if (editModeProp === true) {\n return { editEnabled: true, enabledButtons: [...defaultButtons] };\n }\n\n // 处理数组\n if (Array.isArray(editModeProp)) {\n return { editEnabled: true, enabledButtons: editModeProp };\n }\n\n // 处理对象配置\n if (typeof editModeProp === 'object') {\n const { enabled, toolbar, color, size, iconOnly } = editModeProp;\n\n if (enabled === false) {\n return {\n editEnabled: false,\n enabledButtons: [],\n customToolbar: toolbar,\n color,\n size,\n iconOnly,\n };\n }\n\n if (enabled === true || enabled === undefined) {\n return {\n editEnabled: true,\n enabledButtons: [...defaultButtons],\n customToolbar: toolbar,\n color,\n size,\n iconOnly,\n };\n }\n\n if (Array.isArray(enabled)) {\n return {\n editEnabled: true,\n enabledButtons: enabled,\n customToolbar: toolbar,\n color,\n size,\n iconOnly,\n };\n }\n }\n\n return { editEnabled: false, enabledButtons: [] };\n }, [editModeProp, defaultButtons]);\n}\n\nexport default useEditMode;\n","/**\n * @fileoverview Loading 覆盖层 Hook\n * @description 提取各组件中重复的 Loading 覆盖层逻辑\n */\n\nimport { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport type L from 'leaflet';\nimport Loading from '../components/Loading';\nimport type { LoadingMaskConfig } from '../types';\nimport type { LoadingIconName, LoadingSize } from '../types/loading';\nimport { LOADING_DEFAULT_MASK_BACKGROUND, LOADING_DEFAULT_MASK_ZINDEX } from '../constants/styles';\n\nexport interface UseLoadingOverlayOptions {\n /** 是否显示加载状态 */\n loading: boolean;\n /** Loading 遮罩配置 */\n loadingMask?: LoadingMaskConfig;\n /** Leaflet 地图实例 */\n map: L.Map | null;\n /** Loading 覆盖层的 CSS 类名 */\n className: string;\n /** 自定义 Loading 图标名称,默认为 'loading-spinner' */\n icon?: LoadingIconName;\n /** 自定义 Loading 尺寸,默认为 'large' */\n size?: LoadingSize;\n}\n\n/**\n * Loading 覆盖层 Hook\n *\n * @description\n * 提取各图层组件中重复的 Loading 覆盖层逻辑,包括:\n * - PlotLayer / PlotGroupLayer\n * - Road / Irrigation\n * - Marker\n *\n * @example\n * ```tsx\n * const loadingOverlay = useLoadingOverlay({\n * loading,\n * loadingMask,\n * map,\n * className: 'agri-plot-loading-overlay',\n * });\n *\n * return (\n * <>\n * {/* 其他内容 *}\n * {loadingOverlay}\n * </>\n * );\n * ```\n */\nexport function useLoadingOverlay(options: UseLoadingOverlayOptions): React.ReactNode | null {\n const {\n loading,\n loadingMask,\n map,\n className,\n icon = 'loading-spinner',\n size = 'large',\n } = options;\n\n return useMemo(() => {\n if (!loading || !map) return null;\n\n const container = map.getContainer();\n if (!container) return null;\n\n const maskEnabled = loadingMask?.enabled !== false;\n const maskBackground = loadingMask?.background || LOADING_DEFAULT_MASK_BACKGROUND;\n const maskZIndex = loadingMask?.zIndex ?? LOADING_DEFAULT_MASK_ZINDEX;\n\n return createPortal(\n <div\n className={className}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: maskEnabled ? maskBackground : 'transparent',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: maskZIndex,\n pointerEvents: 'none',\n }}\n >\n <Loading icon={icon} size={size} />\n </div>,\n container\n );\n }, [loading, loadingMask, map, className, icon, size]);\n}\n","/**\n * 几何计算工具函数\n */\n\nimport L from 'leaflet';\nimport type { Coordinate } from '../types';\n\n/**\n * 计算两点之间的距离(米)\n * @param point1 - 点1 [lat, lng]\n * @param point2 - 点2 [lat, lng]\n * @returns 距离(米)\n */\nexport const getDistance = (point1: Coordinate, point2: Coordinate): number => {\n const latlng1 = L.latLng(point1[0], point1[1]);\n const latlng2 = L.latLng(point2[0], point2[1]);\n return latlng1.distanceTo(latlng2);\n};\n\n/**\n * 计算两点之间的中点\n * @param point1 - 点1 [lat, lng]\n * @param point2 - 点2 [lat, lng]\n * @returns 中点 [lat, lng]\n */\nexport const getMiddlePoint = (point1: Coordinate, point2: Coordinate): Coordinate => {\n return [(point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2];\n};\n\n/**\n * 格式化距离显示\n * @param distance - 距离(米)\n * @returns 格式化后的距离字符串\n */\nexport const formatDistance = (distance: number): string => {\n if (distance < 1000) {\n return `${Math.round(distance)}m`;\n }\n return `${(distance / 1000).toFixed(2)}km`;\n};\n\n/** 角度输出模式 */\ntype AngleMode = 'text' | 'compass';\n\n/**\n * 计算两点之间的原始角度(弧度→度数),供 getAngle / getLineAngle 复用\n * @param map - Leaflet地图实例\n * @param point1 - 点1 [lat, lng]\n * @param point2 - 点2 [lat, lng]\n * @param mode - 输出模式:'text' 钳制到 [-90,90](文字可读),'compass' 标准化到 [0,360]\n */\nfunction calcAngle(map: L.Map, point1: Coordinate, point2: Coordinate, mode: AngleMode): number {\n const p1 = map.latLngToContainerPoint(L.latLng(point1[0], point1[1]));\n const p2 = map.latLngToContainerPoint(L.latLng(point2[0], point2[1]));\n const dx = p2.x - p1.x;\n const dy = p2.y - p1.y;\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI;\n\n if (mode === 'text') {\n // 调整角度,使文字始终正向可读\n if (angle > 90) angle -= 180;\n else if (angle < -90) angle += 180;\n } else {\n // 标准化到 0-360\n if (angle < 0) angle += 360;\n }\n\n return angle;\n}\n\n/**\n * 计算两点之间的角度(度),用于文字旋转\n * @param map - Leaflet地图实例\n * @param point1 - 点1 [lat, lng]\n * @param point2 - 点2 [lat, lng]\n * @returns 角度(度)\n */\nexport const getAngle = (map: L.Map, point1: Coordinate, point2: Coordinate): number =>\n calcAngle(map, point1, point2, 'text');\n\n/**\n * 计算线段角度(用于图标旋转)\n * @param map - Leaflet地图实例\n * @param point1 - 起点 [lat, lng]\n * @param point2 - 终点 [lat, lng]\n * @returns 角度(度,0-360)\n */\nexport const getLineAngle = (\n map: L.Map | null | undefined,\n point1: Coordinate,\n point2: Coordinate\n): number => {\n if (!map) return 0;\n return calcAngle(map, point1, point2, 'compass');\n};\n","/**\n * RAF 节流工具\n * @description 使用 requestAnimationFrame 实现节流,优化频繁触发的回调\n * @since 1.4.0\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any -- 泛型约束需要 */\n\nimport { useRef, useEffect, useMemo } from 'react';\n\n/**\n * RAF 节流函数\n * @description 使用 requestAnimationFrame 节流,确保回调在每一帧最多执行一次\n * @param callback 要节流的回调函数\n * @returns 节流后的函数\n *\n * @example\n * ```ts\n * const handleMapMove = useRafThrottle(() => {\n * // 地图移动时的处理逻辑\n * updateViewport();\n * });\n *\n * map.on('move', handleMapMove);\n * ```\n */\nexport function useRafThrottle<T extends (...args: any[]) => any>(callback: T): T {\n const rafRef = useRef<number | null>(null);\n const lastArgsRef = useRef<unknown[]>([]);\n const callbackRef = useRef(callback);\n\n // 更新回调引用\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n // 清理\n useEffect(() => {\n return () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, []);\n\n return useMemo(() => {\n const throttledFn = (...args: unknown[]) => {\n lastArgsRef.current = args;\n\n if (rafRef.current === null) {\n rafRef.current = requestAnimationFrame(() => {\n callbackRef.current(...lastArgsRef.current);\n rafRef.current = null;\n });\n }\n };\n\n return throttledFn as T;\n }, []);\n}\n\n/**\n * 延迟执行函数\n * @description 在指定延迟后执行函数,支持取消\n * @param callback 要执行的函数\n * @param delay 延迟时间(ms)\n * @returns 执行函数(可取消)\n *\n * @example\n * ```ts\n * const debouncedUpdate = useDebouncedCallback(() => {\n * updateData();\n * }, 300);\n *\n * // 调用\n * debouncedUpdate();\n *\n * // 取消\n * debouncedUpdate.cancel();\n * ```\n */\nexport function useDebouncedCallback<T extends (...args: any[]) => any>(\n callback: T,\n delay: number\n): T & { cancel: () => void } {\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const debouncedFn = useMemo(() => {\n const fn = (...args: unknown[]) => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n callbackRef.current(...args);\n timerRef.current = null;\n }, delay);\n };\n\n fn.cancel = () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n\n return fn as T & { cancel: () => void };\n }, [delay]);\n\n return debouncedFn;\n}\n\n/**\n * 批量更新工具\n * @description 将多次更新合并为一次,适用于频繁状态更新场景\n * @param callback 更新函数\n * @param interval 合并间隔(ms),默认 100ms\n * @returns 批量更新函数\n *\n * @example\n * ```ts\n * const batchUpdate = useBatchedUpdate((updates) => {\n * setData(prev => [...prev, ...updates]);\n * }, 100);\n *\n * // 多次调用会合并为一次\n * batchUpdate(item1);\n * batchUpdate(item2);\n * batchUpdate(item3);\n * // 100ms 后一次性更新 [item1, item2, item3]\n * ```\n */\nexport function useBatchedUpdate<T>(callback: (items: T[]) => void, interval = 100) {\n const itemsRef = useRef<T[]>([]);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const batchedUpdate = (item: T) => {\n itemsRef.current.push(item);\n\n if (timerRef.current === null) {\n timerRef.current = setTimeout(() => {\n const items = itemsRef.current;\n itemsRef.current = [];\n callbackRef.current(items);\n timerRef.current = null;\n }, interval);\n }\n };\n\n // 立即执行批量更新\n const flush = () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n\n if (itemsRef.current.length > 0) {\n callbackRef.current(itemsRef.current);\n itemsRef.current = [];\n }\n };\n\n return { batchedUpdate, flush };\n}\n","/**\n * @fileoverview 统一视口防抖 Hook\n * @description 优化地图视口变化时的性能,减少频繁触发更新,适用于所有图层组件\n * @module hooks/useViewportDebounce\n * @since 2.1.0 统一优化\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type L from 'leaflet';\nimport { useRafThrottle, useDebouncedCallback } from '../utils/rafThrottle';\n\n/** 视口状态 */\nexport interface ViewportState {\n /** 当前缩放级别 */\n zoom: number;\n /** 视口版本号(每次变化递增) */\n viewVersion: number;\n /** 当前视口边界 */\n bounds: L.LatLngBounds | null;\n /** 地图中心点 */\n center: L.LatLng | null;\n}\n\n/** 防抖配置 */\nexport interface ViewportDebounceOptions {\n /** 地图实例 */\n map: L.Map | null;\n /** zoom 变化防抖延迟(ms),默认 100 */\n zoomDebounceDelay?: number;\n /** move 变化防抖延迟(ms),默认 150 */\n moveDebounceDelay?: number;\n /** 是否启用 RAF 节流,默认 true */\n useRaf?: boolean;\n /** 是否监听 resize 事件,默认 false */\n listenResize?: boolean;\n}\n\n/** 防抖结果 */\nexport interface ViewportDebounceResult extends ViewportState {\n /** 防抖后的缩放级别 */\n debouncedZoom: number;\n /** 防抖后的视口版本 */\n debouncedViewVersion: number;\n /** 防抖后的视口边界 */\n debouncedBounds: L.LatLngBounds | null;\n /** 防抖后的地图中心 */\n debouncedCenter: L.LatLng | null;\n /** 强制刷新(跳过防抖) */\n forceUpdate: () => void;\n /** 实时状态(无防抖) */\n realtime: ViewportState;\n}\n\n/**\n * 统一视口防抖 Hook\n * @description 通过防抖和 RAF 节流减少视口变化触发频率,适用于 PlotLayer、Marker、Track 等组件\n *\n * @example\n * ```tsx\n * // 在 PlotLayer 中使用\n * const { debouncedZoom, debouncedBounds, debouncedViewVersion } = useViewportDebounce({\n * map,\n * zoomDebounceDelay: 100,\n * moveDebounceDelay: 150,\n * });\n *\n * // 使用防抖后的值进行视口过滤\n * const visiblePlots = useMemo(() => {\n * if (!spatialIndex || !debouncedBounds) return [];\n * return spatialIndex.query(debouncedBounds);\n * }, [spatialIndex, debouncedViewVersion]);\n *\n * // 在 Marker 中使用(聚合)\n * const clusterResults = useMemo(() => {\n * if (!clusterIndex || !debouncedBounds) return [];\n * return clusterIndex.getClusters([...bounds], Math.floor(debouncedZoom));\n * }, [clusterIndex, debouncedViewVersion, debouncedZoom]);\n * ```\n */\nexport function useViewportDebounce(options: ViewportDebounceOptions): ViewportDebounceResult {\n const {\n map,\n zoomDebounceDelay = 100,\n moveDebounceDelay = 150,\n useRaf = true,\n listenResize = false,\n } = options;\n\n // 实时状态(用于事件监听)\n const [realtimeZoom, setRealtimeZoom] = useState(0);\n const [realtimeViewVersion, setRealtimeViewVersion] = useState(0);\n const realtimeBoundsRef = useRef<L.LatLngBounds | null>(null);\n const realtimeCenterRef = useRef<L.LatLng | null>(null);\n\n // 防抖后状态(用于渲染和计算)\n const [debouncedZoom, setDebouncedZoom] = useState(0);\n const [debouncedViewVersion, setDebouncedViewVersion] = useState(0);\n const [debouncedBounds, setDebouncedBounds] = useState<L.LatLngBounds | null>(null);\n const [debouncedCenter, setDebouncedCenter] = useState<L.LatLng | null>(null);\n\n // 防抖回调\n const debouncedSetZoom = useDebouncedCallback(\n useCallback((zoom: number) => {\n setDebouncedZoom(zoom);\n }, []),\n zoomDebounceDelay\n );\n\n const debouncedSetViewVersion = useDebouncedCallback(\n useCallback((version: number) => {\n setDebouncedViewVersion(version);\n setDebouncedBounds(realtimeBoundsRef.current);\n setDebouncedCenter(realtimeCenterRef.current);\n }, []),\n moveDebounceDelay\n );\n\n // RAF 节流版本\n const throttledSetViewVersion = useRafThrottle(\n useCallback((version: number) => {\n setDebouncedViewVersion(version);\n setDebouncedBounds(realtimeBoundsRef.current);\n setDebouncedCenter(realtimeCenterRef.current);\n }, [])\n );\n\n // 强制刷新(跳过防抖)\n const forceUpdate = useCallback(() => {\n if (!map) return;\n const zoom = map.getZoom();\n const bounds = map.getBounds();\n const center = map.getCenter();\n setDebouncedZoom(zoom);\n setDebouncedBounds(bounds);\n setDebouncedCenter(center);\n setDebouncedViewVersion(v => v + 1);\n setRealtimeZoom(zoom);\n realtimeBoundsRef.current = bounds;\n realtimeCenterRef.current = center;\n setRealtimeViewVersion(v => v + 1);\n }, [map]);\n\n // 监听地图事件\n useEffect(() => {\n if (!map) return;\n\n // 初始化状态\n const initialZoom = map.getZoom();\n const initialBounds = map.getBounds();\n const initialCenter = map.getCenter();\n\n setRealtimeZoom(initialZoom);\n setDebouncedZoom(initialZoom);\n realtimeBoundsRef.current = initialBounds;\n setDebouncedBounds(initialBounds);\n realtimeCenterRef.current = initialCenter;\n setDebouncedCenter(initialCenter);\n\n const handleZoomEnd = () => {\n const zoom = map.getZoom();\n setRealtimeZoom(zoom);\n debouncedSetZoom(zoom);\n };\n\n const handleMoveEnd = () => {\n realtimeBoundsRef.current = map.getBounds();\n realtimeCenterRef.current = map.getCenter();\n setRealtimeViewVersion(v => {\n const newVersion = v + 1;\n if (useRaf) {\n throttledSetViewVersion(newVersion);\n } else {\n debouncedSetViewVersion(newVersion);\n }\n return newVersion;\n });\n };\n\n const handleResize = () => {\n // resize 时强制更新\n forceUpdate();\n };\n\n map.on('zoomend', handleZoomEnd);\n map.on('moveend', handleMoveEnd);\n if (listenResize) {\n map.on('resize', handleResize);\n }\n\n return () => {\n map.off('zoomend', handleZoomEnd);\n map.off('moveend', handleMoveEnd);\n if (listenResize) {\n map.off('resize', handleResize);\n }\n debouncedSetZoom.cancel();\n debouncedSetViewVersion.cancel();\n };\n }, [\n map,\n debouncedSetZoom,\n debouncedSetViewVersion,\n throttledSetViewVersion,\n useRaf,\n listenResize,\n forceUpdate,\n ]);\n\n return {\n // 防抖后状态\n debouncedZoom,\n debouncedViewVersion,\n debouncedBounds,\n debouncedCenter,\n // 实时状态\n realtime: {\n zoom: realtimeZoom,\n viewVersion: realtimeViewVersion,\n bounds: realtimeBoundsRef.current,\n center: realtimeCenterRef.current,\n },\n // 实时状态别名(兼容旧代码)\n zoom: realtimeZoom,\n viewVersion: realtimeViewVersion,\n bounds: realtimeBoundsRef.current,\n center: realtimeCenterRef.current,\n // 方法\n forceUpdate,\n };\n}\n\nexport default useViewportDebounce;\n","/**\n * 统一地图边界适配 Hook\n * @description 提供统一的 fitBounds 方法,自动适配所有图层或指定图层数据\n * @since 2.1.0\n *\n * @example\n * ```tsx\n * // 基础用法:适配所有已注册图层\n * const { fitBounds } = useUnifiedFitBounds();\n * <button onClick={() => fitBounds()}>适配全部</button>\n *\n * // 指定图层类型\n * <button onClick={() => fitBounds({ include: ['marker', 'plot'] })}>\n * 只适配标注和地块\n * </button>\n *\n * // 直接传入数据源\n * <button onClick={() => fitBounds({ data: { markers: markerData } })}>\n * 适配指定数据\n * </button>\n * ```\n */\n\nimport { useCallback } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../context/MapContext';\nimport { computeDataBounds } from '../utils/area';\nimport { MAP_FIT_BOUNDS_DEFAULT_PADDING } from '../constants/common';\n\n// ========== 类型定义 ==========\n\n/** 支持的图层类型 */\nexport type FitBoundsLayerType = 'marker' | 'plot' | 'road' | 'irrigation' | 'track';\n\n/** fitBounds 选项 */\nexport interface UnifiedFitBoundsOptions {\n /** 要包含的图层类型(默认全部) */\n include?: FitBoundsLayerType[];\n /** 要排除的图层类型 */\n exclude?: FitBoundsLayerType[];\n /** 直接传入数据源(优先级高于自动收集) */\n data?: {\n markers?: { position: [number, number] }[];\n plots?: { positions: [number, number][] | [number, number][][] }[];\n roads?: { points: [number, number][] }[];\n irrigations?: { points: [number, number][] }[];\n tracks?: { segments: { coordinates: [number, number][] }[] }[];\n };\n /** 最大缩放级别 */\n maxZoom?: number;\n /** 边距 */\n padding?: number | [number, number];\n /** 是否启用动画 */\n animate?: boolean;\n}\n\n/** 数据获取器类型 */\ntype DataGetter<T = unknown> = () => T[] | null;\n\n/** 图层注册接口 */\nexport interface LayerRegistry {\n /** 注册图层数据获取函数(返回注销函数) */\n register: <T = unknown>(type: FitBoundsLayerType, getData: DataGetter<T>) => () => void;\n /** 注销指定类型的所有数据获取器 */\n unregister: (type: FitBoundsLayerType) => void;\n}\n\n// ========== 全局注册表 ==========\n\nlet nextRegistryId = 0;\nconst layerRegistry = new Map<FitBoundsLayerType, Map<string, DataGetter>>();\n\nexport const registry: LayerRegistry = {\n register: (type, getData) => {\n const id = `${type}_${nextRegistryId++}`;\n if (!layerRegistry.has(type)) {\n layerRegistry.set(type, new Map());\n }\n layerRegistry.get(type)!.set(id, getData);\n // 返回注销函数\n return () => {\n layerRegistry.get(type)?.delete(id);\n };\n },\n unregister: type => {\n layerRegistry.delete(type);\n },\n};\n\n// ========== Hook 实现 ==========\n\n/**\n * 统一地图边界适配 Hook\n * @returns fitBounds 函数和图层注册工具\n */\nexport function useUnifiedFitBounds() {\n const map = useMap();\n\n const fitBounds = useCallback(\n (options?: UnifiedFitBoundsOptions) => {\n if (!map) return;\n\n const allPoints: L.LatLng[] = [];\n\n // 如果传入了自定义数据,直接使用\n if (options?.data) {\n const { data } = options;\n\n // 处理标注点\n if (data.markers?.length) {\n data.markers.forEach(m => {\n if (m.position) {\n allPoints.push(L.latLng(m.position[0], m.position[1]));\n }\n });\n }\n\n // 处理地块\n if (data.plots?.length) {\n const boundsResult = computeDataBounds(\n data.plots as unknown as Record<string, unknown>[],\n 'positions'\n );\n if (boundsResult) {\n allPoints.push(\n L.latLng(boundsResult.southWest[0], boundsResult.southWest[1]),\n L.latLng(boundsResult.northEast[0], boundsResult.northEast[1])\n );\n }\n }\n\n // 处理道路\n if (data.roads?.length) {\n data.roads.forEach(road => {\n road.points.forEach(p => {\n allPoints.push(L.latLng(p[0], p[1]));\n });\n });\n }\n\n // 处理灌溉渠\n if (data.irrigations?.length) {\n data.irrigations.forEach(ch => {\n ch.points.forEach(p => {\n allPoints.push(L.latLng(p[0], p[1]));\n });\n });\n }\n\n // 处理轨迹\n if (data.tracks?.length) {\n data.tracks.forEach(track => {\n track.segments?.forEach(seg => {\n seg.coordinates?.forEach(c => {\n allPoints.push(L.latLng(c[0], c[1]));\n });\n });\n });\n }\n } else {\n // 否则从全局注册表收集数据\n const include = options?.include || ['marker', 'plot', 'road', 'irrigation', 'track'];\n const exclude = options?.exclude || [];\n\n const activeTypes = include.filter(t => !exclude.includes(t)) as FitBoundsLayerType[];\n\n activeTypes.forEach(type => {\n const getters = layerRegistry.get(type);\n if (!getters) return;\n\n getters.forEach(getData => {\n const data = getData();\n if (!data || data.length === 0) return;\n\n switch (type) {\n case 'marker': {\n (data as { position: [number, number] }[]).forEach(m => {\n if (m.position) {\n allPoints.push(L.latLng(m.position[0], m.position[1]));\n }\n });\n break;\n }\n case 'plot': {\n const boundsResult = computeDataBounds(\n data as unknown as Record<string, unknown>[],\n 'positions'\n );\n if (boundsResult) {\n allPoints.push(\n L.latLng(boundsResult.southWest[0], boundsResult.southWest[1]),\n L.latLng(boundsResult.northEast[0], boundsResult.northEast[1])\n );\n }\n break;\n }\n case 'road': {\n (data as { points: [number, number][] }[]).forEach(road => {\n road.points.forEach(p => {\n allPoints.push(L.latLng(p[0], p[1]));\n });\n });\n break;\n }\n case 'irrigation': {\n (data as { points: [number, number][] }[]).forEach(ch => {\n ch.points.forEach(p => {\n allPoints.push(L.latLng(p[0], p[1]));\n });\n });\n break;\n }\n case 'track': {\n // 支持 ParsedTrack[] 格式(Track 组件的实际数据格式)\n (\n data as {\n allPoints?: { position: [number, number] }[];\n segments?: Record<string, [number, number, number, number, number][]>;\n }[]\n ).forEach(track => {\n // 优先使用 allPoints(已解析的坐标数组)\n if (track.allPoints?.length) {\n track.allPoints.forEach(p => {\n allPoints.push(L.latLng(p.position[0], p.position[1]));\n });\n } else if (track.segments) {\n // 否则从 segments 中提取\n Object.values(track.segments).forEach(segment => {\n segment.forEach(point => {\n allPoints.push(L.latLng(point[0], point[1]));\n });\n });\n }\n });\n break;\n }\n }\n });\n });\n }\n\n // 执行 fitBounds\n if (allPoints.length > 0) {\n const bounds = L.latLngBounds(allPoints);\n map.fitBounds(bounds, {\n maxZoom: options?.maxZoom ?? 18,\n padding:\n typeof options?.padding === 'number'\n ? [options.padding, options.padding]\n : (options?.padding ?? MAP_FIT_BOUNDS_DEFAULT_PADDING),\n animate: options?.animate ?? true,\n });\n }\n },\n [map]\n );\n\n return {\n fitBounds,\n registry,\n };\n}\n\nexport default useUnifiedFitBounds;\n","/**\n * @fileoverview 统一数据源标准化 Hook\n * @description 提供 fieldNames 合并、数据验证、fitBoundsRegistry 注册等公共逻辑\n * @module hooks/useNormalizedDataSource\n */\n\nimport { useMemo, useEffect } from 'react';\nimport type {\n DataSourceValidationConfig,\n ValidationStats,\n MapComponentType,\n} from '../types/dataSource';\nimport type { FitBoundsLayerType } from './useUnifiedFitBounds';\nimport { registry as fitBoundsRegistry } from './useUnifiedFitBounds';\n\n/**\n * 动态数据项类型\n * @description 内部使用,通过 fieldNames 动态访问\n */\nexport type DynamicDataItem = Record<string, unknown>;\n\ninterface UseNormalizedDataSourceOptions<TOutput = unknown> {\n /** 数据源 */\n dataSource: DynamicDataItem[] | undefined;\n /** 默认字段名映射 */\n defaultFieldNames: Record<string, string>;\n /** 自定义字段名映射 */\n fieldNames?: Partial<Record<string, string>>;\n /** 验证配置 */\n validation?: DataSourceValidationConfig;\n /** 组件类型(用于日志和注册) */\n componentType: MapComponentType | string;\n /** 可选的数据映射函数,用于直接输出目标类型 */\n mapper?: (item: DynamicDataItem, fieldNames: Record<string, string>) => TOutput;\n}\n\ninterface UseNormalizedDataSourceResult<TOutput = unknown> {\n /** 标准化后的数据数组(如果提供了 mapper,则为映射后的 TOutput[]) */\n data: TOutput[];\n /** 合并后的字段名映射(默认 + 自定义) */\n fieldNames: Record<string, string>;\n /** 验证结果统计 */\n validation: ValidationStats;\n}\n\n/**\n * 统一的 dataSource 标准化 Hook\n *\n * 功能:\n * 1. 合并 fieldNames(默认 + 自定义)\n * 2. 数据验证(必需字段、坐标范围)\n * 3. 注册到 fitBoundsRegistry\n * 4. 可选的 mapper 进行类型转换\n *\n * 注意:\n * - autoFit 逻辑由各组件自行处理(使用 useAutoFit hook)\n * - dataSource 需要是 DynamicDataItem[](即 Record<string, unknown>[]),由调用方保证\n *\n * @example\n * ```tsx\n * const { data, fieldNames, validation } = useNormalizedDataSource({\n * dataSource: dataSource as DynamicDataItem[],\n * defaultFieldNames: { id: 'id', position: 'position' },\n * fieldNames: { id: 'markerId' },\n * validation: { requiredFields: ['id', 'position'] },\n * componentType: 'Marker',\n * mapper: (item, fn) => ({\n * id: item[fn.id] as string,\n * position: item[fn.position] as [number, number],\n * }),\n * });\n * ```\n */\nexport function useNormalizedDataSource<TOutput = unknown>({\n dataSource,\n defaultFieldNames,\n fieldNames,\n validation,\n componentType,\n mapper,\n}: UseNormalizedDataSourceOptions<TOutput>): UseNormalizedDataSourceResult<TOutput> {\n // 1. 合并 fieldNames\n const mergedFieldNames = useMemo((): Record<string, string> => {\n const result: Record<string, string> = { ...defaultFieldNames };\n // 过滤掉 undefined 值\n if (fieldNames) {\n for (const [key, value] of Object.entries(fieldNames)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n }\n return result;\n }, [defaultFieldNames, fieldNames]);\n\n // 2. 数据验证\n const { validatedData, validationResult } = useMemo(() => {\n if (!Array.isArray(dataSource)) {\n return {\n validatedData: [] as DynamicDataItem[],\n validationResult: {\n total: 0,\n valid: 0,\n invalid: 0,\n errors: ['dataSource 不是数组'],\n } as ValidationStats,\n };\n }\n\n const errors: string[] = [];\n const validItems: DynamicDataItem[] = [];\n\n dataSource.forEach((item, index) => {\n // 假设数据项有效\n let isValid = true;\n\n // 空值检查\n if (!item) {\n errors.push(`[${index}] 数据项为空`);\n isValid = false;\n }\n\n // 必需字段验证\n if (isValid && validation?.requiredFields) {\n for (const field of validation.requiredFields) {\n // 直接从 item 获取字段值(简单字段名)\n const fieldValue = (item as Record<string, unknown>)[field as string];\n if (fieldValue === undefined || fieldValue === null) {\n errors.push(`[${index}] 缺少必需字段: ${field}`);\n isValid = false;\n break;\n }\n }\n }\n\n // 坐标验证\n if (isValid && validation?.coordinateFields && validation?.coordinateBounds) {\n for (const field of validation.coordinateFields) {\n const coord = (item as Record<string, unknown>)[field as string] as\n | [number, number]\n | undefined;\n if (coord && Array.isArray(coord) && coord.length >= 2) {\n const [lat, lng] = coord;\n const bounds = validation.coordinateBounds;\n\n if (bounds.lat && (lat < bounds.lat.min || lat > bounds.lat.max)) {\n errors.push(`[${index}] ${field}[0] 超出范围 [${bounds.lat.min}, ${bounds.lat.max}]`);\n isValid = false;\n }\n if (bounds.lng && (lng < bounds.lng.min || lng > bounds.lng.max)) {\n errors.push(`[${index}] ${field}[1] 超出范围 [${bounds.lng.min}, ${bounds.lng.max}]`);\n isValid = false;\n }\n }\n }\n }\n\n // 自定义验证函数\n if (isValid && validation?.customValidator) {\n const customResult = validation.customValidator(item as Record<string, unknown>, index);\n if (!customResult.valid && customResult.errors) {\n errors.push(...customResult.errors);\n isValid = false;\n }\n }\n\n // 只有通过所有验证才添加到有效列表\n if (isValid) {\n validItems.push(item as DynamicDataItem);\n }\n });\n\n return {\n validatedData: validItems,\n validationResult: {\n total: dataSource.length,\n valid: validItems.length,\n invalid: dataSource.length - validItems.length,\n errors,\n },\n };\n }, [dataSource, validation]);\n\n // 3. 如果提供了 mapper,对数据进行映射\n const mappedData = useMemo((): TOutput[] => {\n if (!mapper) {\n return validatedData as unknown as TOutput[];\n }\n return validatedData.map(item => mapper(item, mergedFieldNames));\n }, [validatedData, mergedFieldNames, mapper]);\n\n // 4. 注册到 fitBoundsRegistry\n useEffect(() => {\n if (!componentType) return;\n // 安全的类型转换:确保 componentType 是有效的 FitBoundsLayerType\n const layerType = componentType as FitBoundsLayerType;\n const unregister = fitBoundsRegistry.register(layerType, () => mappedData);\n return unregister;\n }, [componentType, mappedData]);\n\n return {\n data: mappedData,\n fieldNames: mergedFieldNames,\n validation: validationResult,\n };\n}\n\n/**\n * 快速创建 Marker 数据源标准化配置的辅助函数\n */\nexport function createMarkerValidationConfig() {\n return {\n requiredFields: ['id', 'position'],\n coordinateFields: ['position'],\n coordinateBounds: {\n lat: { min: -90, max: 90 },\n lng: { min: -180, max: 180 },\n },\n };\n}\n\n/**\n * 快速创建 Road 数据源标准化配置的辅助函数\n */\nexport function createRoadValidationConfig() {\n return {\n requiredFields: ['id', 'points'],\n coordinateFields: ['points'],\n coordinateBounds: {\n lat: { min: -90, max: 90 },\n lng: { min: -180, max: 180 },\n },\n };\n}\n\n/**\n * 快速创建 Irrigation 数据源标准化配置的辅助函数\n */\nexport function createIrrigationValidationConfig() {\n return {\n requiredFields: ['id', 'points'],\n coordinateFields: ['points'],\n coordinateBounds: {\n lat: { min: -90, max: 90 },\n lng: { min: -180, max: 180 },\n },\n };\n}\n\n/**\n * 快速创建 Plot 数据源标准化配置的辅助函数\n */\nexport function createPlotValidationConfig() {\n return {\n requiredFields: ['id'],\n // Plot 的 positions 验证较复杂,由各组件自行处理\n };\n}\n","/**\n * @fileoverview 自动适配地图视野 Hook\n * @description 统一处理 autoFit 逻辑,消除组件内重复代码\n * @module hooks/useAutoFit\n */\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport L from 'leaflet';\nimport type { Coordinate } from '../types';\n\nexport interface AutoFitOptions {\n maxZoom?: number;\n padding?: number | [number, number];\n}\n\nexport type AutoFitConfig = boolean | AutoFitOptions;\n\nexport interface UseAutoFitOptions<T> {\n /** 数据数组 */\n data: T[];\n /** Leaflet 地图实例 */\n map: L.Map | null;\n /** autoFit 配置:false=禁用,true=启用,object=带选项 */\n autoFit?: AutoFitConfig;\n /** 从数据项提取坐标的函数 */\n getCoordinates: (item: T) => Coordinate[];\n}\n\ninterface UseAutoFitResult {\n /** 手动触发 fitBounds(重置后执行) */\n triggerFit: () => void;\n /** 是否已执行过 fitBounds */\n hasFitted: boolean;\n}\n\n/**\n * 自动适配地图视野 Hook\n *\n * 统一处理 autoFit 逻辑,支持不同的数据结构和坐标提取方式。\n *\n * @example\n * ```tsx\n * // Marker 场景\n * const { triggerFit } = useAutoFit({\n * data: normalizedData,\n * map,\n * autoFit,\n * getCoordinates: (item) => [item.position],\n * });\n *\n * // Road/Irrigation 场景\n * const { triggerFit } = useAutoFit({\n * data: normalizedData,\n * map,\n * autoFit,\n * getCoordinates: (item) => item.points,\n * });\n * ```\n */\nexport function useAutoFit<T>({\n data,\n map,\n autoFit,\n getCoordinates,\n}: UseAutoFitOptions<T>): UseAutoFitResult {\n const hasFittedRef = useRef(false);\n\n useEffect(() => {\n if (autoFit === false || hasFittedRef.current || !map || data.length === 0) {\n return;\n }\n\n hasFittedRef.current = true;\n\n // 提取所有坐标\n const allCoords: L.LatLngExpression[] = [];\n for (const item of data) {\n const coords = getCoordinates(item);\n for (const coord of coords) {\n allCoords.push([coord[0], coord[1]]);\n }\n }\n\n if (allCoords.length === 0) return;\n\n const bounds = L.latLngBounds(allCoords);\n if (!bounds.isValid()) return;\n\n const options = typeof autoFit === 'object' ? autoFit : {};\n const padding: [number, number] = Array.isArray(options.padding)\n ? options.padding\n : ((options.padding ?? [50, 50]) as [number, number]);\n const maxZoom = options.maxZoom ?? 18;\n\n map.fitBounds(bounds, { padding, maxZoom });\n }, [map, data, autoFit, getCoordinates]);\n\n const triggerFit = useCallback(() => {\n hasFittedRef.current = false;\n }, []);\n\n return {\n triggerFit,\n hasFitted: hasFittedRef.current,\n };\n}\n\n/**\n * 快捷创建 Marker 坐标提取函数\n */\nexport function createMarkerCoordinateGetter<T extends { position: Coordinate }>() {\n return function getMarkerCoords(item: T): Coordinate[] {\n return [item.position];\n };\n}\n\n/**\n * 快捷创建 Polyline(Road/Irrigation)坐标提取函数\n */\nexport function createPolylineCoordinateGetter<T extends { points: Coordinate[] }>() {\n return function getPolylineCoords(item: T): Coordinate[] {\n return item.points;\n };\n}\n","/**\n * @fileoverview Marker 图标配置 hook\n * @description 将图标解析、合并、生成逻辑抽取为独立 hook\n * @module components/Marker/useIconConfig\n * @since 2.1.0 添加边界检查和错误处理\n */\n\nimport { useMemo, useCallback } from 'react';\nimport type L from 'leaflet';\nimport type { MarkerData, IconConfig, SvgIconConfig } from '../../types';\nimport { createCachedIcon } from '../../utils/iconCache';\nimport { detectIconType } from '../../utils/iconUtils';\nimport { SVG_MARKER_ICONS } from '../../constants/icon';\nimport { getMarkerAnchor } from '../../utils/markerSvg';\nimport { logger, COMPONENT_NAMES } from '../../utils/errorHandling';\nimport { useConfig } from '../../context/ConfigContext';\nimport {\n MARKER_DEFAULT_ICON,\n MARKER_DEFAULT_SELECTED_ICON,\n MARKER_DEFAULT_EDIT_ICON,\n} from '../../constants/styles';\n\n/** 判断是否为有效的图标配置 */\nconst isValidIconConfig = (val: unknown): val is IconConfig => {\n return typeof val === 'object' && val !== null && Object.keys(val).length > 0;\n};\n\ninterface UseIconConfigOptions {\n editEnabled: boolean;\n currentMode: 'idle' | 'create' | 'move';\n permanent: boolean;\n style?: (data: MarkerData) => IconConfig;\n /** 组件级默认图标配置 */\n icon?: IconConfig;\n /** 组件级选中图标配置 */\n selectedIcon?: IconConfig;\n}\n\ninterface ParsedIconConfig {\n icon: string | null;\n svgIcon: string | SvgIconConfig | null;\n customIcon: string | null;\n iconSize?: number | [number, number];\n iconAnchor?: [number, number];\n popupAnchor?: [number, number];\n animated?: boolean;\n color?: string;\n}\n\n/**\n * 解析单个图标配置\n * @description 安全解析图标配置,处理无效输入\n */\nfunction parseIconConfig(iconConfig?: {\n icon?: string | SvgIconConfig;\n iconSize?: number | [number, number];\n iconAnchor?: [number, number];\n popupAnchor?: [number, number];\n animated?: boolean;\n color?: string;\n}): ParsedIconConfig {\n // 边界检查:空配置返回默认值\n if (!iconConfig) {\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n\n // 边界检查:空字符串图标\n if (!iconConfig.icon || typeof iconConfig.icon !== 'string') {\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n\n try {\n const detected = detectIconType(iconConfig.icon);\n\n if (detected.type === 'url') {\n return {\n ...iconConfig,\n icon: 'point',\n svgIcon: null,\n customIcon: detected.src || null,\n };\n }\n if (detected.type === 'svg') {\n return {\n ...iconConfig,\n icon: 'point',\n svgIcon: (detected.config as string | SvgIconConfig) || null,\n customIcon: null,\n };\n }\n return {\n ...iconConfig,\n icon: detected.name || null,\n svgIcon: null,\n customIcon: null,\n };\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '解析图标配置失败', error);\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n}\n\n/**\n * 规范化图标尺寸\n * @description 确保尺寸格式为 [number, number]\n */\nfunction normalizeIconSize(size: number | [number, number] | undefined): [number, number] {\n if (size === undefined) return [48, 48];\n\n if (typeof size === 'number') {\n // 边界检查:负数或零\n if (size <= 0) {\n logger.warn(COMPONENT_NAMES.MARKER, 'iconSize 为负数或零,使用默认值 48');\n return [48, 48];\n }\n return [size, size];\n }\n\n if (Array.isArray(size) && size.length >= 2) {\n const [width, height] = size;\n // 边界检查:无效数值\n if (typeof width !== 'number' || typeof height !== 'number' || width <= 0 || height <= 0) {\n logger.warn(COMPONENT_NAMES.MARKER, 'iconSize 包含无效值,使用默认值 [48, 48]');\n return [48, 48];\n }\n return [width, height];\n }\n\n logger.warn(COMPONENT_NAMES.MARKER, 'iconSize 格式无效,使用默认值 [48, 48]');\n return [48, 48];\n}\n\n/**\n * Marker 图标配置 hook\n * @description 管理图标配置的解析、合并和生成,添加完整的边界检查\n */\nexport function useIconConfig({\n editEnabled,\n currentMode,\n permanent,\n style,\n icon: iconProp,\n selectedIcon: selectedIconProp,\n}: UseIconConfigOptions) {\n // 从 ConfigContext 获取配置\n const config = useConfig();\n const configEditingIcon = config?.marker?.editing;\n\n /** 合并后的默认图标配置 */\n const mergedDefaultIconConfig = useMemo(() => {\n try {\n // props icon 优先级高于 MARKER_DEFAULT_ICON\n const source = isValidIconConfig(iconProp) ? iconProp : MARKER_DEFAULT_ICON;\n const parsed = parseIconConfig(source);\n return {\n icon: parsed.icon ?? 'marker-blue',\n svgIcon: parsed.svgIcon,\n customIcon: parsed.customIcon,\n iconSize: normalizeIconSize(source.iconSize),\n iconAnchor: source.iconAnchor,\n popupAnchor: source.popupAnchor,\n animated: source.animated,\n color: 'color' in source ? source.color : undefined,\n };\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '合并默认图标配置失败', error);\n return {\n icon: 'marker-blue',\n svgIcon: null,\n customIcon: null,\n iconSize: [48, 48] as [number, number],\n iconAnchor: undefined,\n popupAnchor: undefined,\n animated: false,\n color: undefined,\n };\n }\n }, [iconProp]);\n\n /** 合并后的选中图标配置 */\n const mergedSelectedIconConfig = useMemo(() => {\n try {\n // props selectedIcon 优先级高于 MARKER_DEFAULT_SELECTED_ICON\n const source = isValidIconConfig(selectedIconProp)\n ? selectedIconProp\n : MARKER_DEFAULT_SELECTED_ICON;\n return parseIconConfig(source);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '合并选中图标配置失败', error);\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n }, [selectedIconProp]);\n\n /** 合并后的编辑中图标配置 */\n const mergedEditingIconConfig = useMemo(() => {\n try {\n // 1. 如果 ConfigContext 有有效配置,合并到默认配置\n if (isValidIconConfig(configEditingIcon)) {\n return parseIconConfig({ ...MARKER_DEFAULT_EDIT_ICON, ...configEditingIcon });\n }\n // 2. 否则使用默认配置 MARKER_DEFAULT_EDIT_ICON\n return parseIconConfig(MARKER_DEFAULT_EDIT_ICON);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '合并编辑中图标配置失败', error);\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n }, [configEditingIcon]);\n\n /** 图标尺寸规范化 */\n const iconSize: [number, number] = useMemo(() => {\n return mergedDefaultIconConfig.iconSize;\n }, [mergedDefaultIconConfig.iconSize]);\n\n // 解析后的图标(基于合并后的配置)\n const resolvedIcon = mergedDefaultIconConfig.icon;\n const resolvedSvgIcon = mergedDefaultIconConfig.svgIcon;\n const resolvedCustomIcon = mergedDefaultIconConfig.customIcon;\n\n /**\n * 获取标注点图标\n * @description 根据标注数据、选中状态、编辑状态生成对应的图标,添加完整的边界检查\n */\n const getItemIcon = useCallback(\n (item: MarkerData, isSelected: boolean, isEditing: boolean, isTemp = false): L.DivIcon => {\n try {\n // 边界检查:确保 item 有效\n if (!item) {\n logger.warn(COMPONENT_NAMES.MARKER, 'item 为空,返回默认图标');\n return createCachedIcon('point', { iconSize: [48, 48] }, false);\n }\n\n // 优先级:数据项 > config.marker.editing > MARKER_DEFAULT_SELECTED > MARKER_DEFAULT\n let itemIconType: string = resolvedIcon || 'point';\n let itemSvgIcon: string | SvgIconConfig | null = resolvedSvgIcon;\n let itemCustomIcon: string | null = resolvedCustomIcon;\n let itemAnimated = mergedDefaultIconConfig.animated;\n let itemIconSize: [number, number] = iconSize;\n let itemIconAnchor: [number, number] | undefined = mergedDefaultIconConfig.iconAnchor;\n let itemPopupAnchor: [number, number] | undefined = mergedDefaultIconConfig.popupAnchor;\n let itemColor: string | undefined = mergedDefaultIconConfig.color;\n\n // 1. 应用数据项级别的 icon 配置(最高优先级)\n if (isValidIconConfig(item.icon)) {\n try {\n const parsed = parseIconConfig({ ...MARKER_DEFAULT_ICON, ...item.icon });\n if (parsed.icon) itemIconType = parsed.icon;\n if (parsed.svgIcon) itemSvgIcon = parsed.svgIcon;\n if (parsed.customIcon) itemCustomIcon = parsed.customIcon;\n if (parsed.iconSize) itemIconSize = normalizeIconSize(parsed.iconSize);\n if (parsed.iconAnchor) itemIconAnchor = parsed.iconAnchor;\n if (parsed.popupAnchor) itemPopupAnchor = parsed.popupAnchor;\n if (parsed.animated !== undefined) itemAnimated = parsed.animated;\n if (parsed.color) itemColor = parsed.color;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '解析 item.icon 失败', error);\n }\n }\n\n // 1.5 应用 style 动态样式函数(优先级高于 Props 级 icon)\n if (style) {\n try {\n const styleConfig = style(item);\n if (isValidIconConfig(styleConfig)) {\n const parsed = parseIconConfig({ ...MARKER_DEFAULT_ICON, ...styleConfig });\n if (parsed.icon) itemIconType = parsed.icon;\n if (parsed.svgIcon) itemSvgIcon = parsed.svgIcon;\n if (parsed.customIcon) itemCustomIcon = parsed.customIcon;\n if (parsed.iconSize) itemIconSize = normalizeIconSize(parsed.iconSize);\n if (parsed.iconAnchor) itemIconAnchor = parsed.iconAnchor;\n if (parsed.popupAnchor) itemPopupAnchor = parsed.popupAnchor;\n if (parsed.animated !== undefined) itemAnimated = parsed.animated;\n if (parsed.color) itemColor = parsed.color;\n }\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '解析 style 函数返回值失败', error);\n }\n }\n\n // 2. 应用选中图标配置(数据项 selectedIcon 优先)\n if ((isSelected || isTemp) && !isValidIconConfig(item.selectedIcon)) {\n if (mergedSelectedIconConfig.icon) {\n itemIconType = mergedSelectedIconConfig.icon;\n itemSvgIcon = mergedSelectedIconConfig.svgIcon;\n itemCustomIcon = mergedSelectedIconConfig.customIcon;\n }\n if (mergedSelectedIconConfig.iconSize !== undefined) {\n itemIconSize = normalizeIconSize(mergedSelectedIconConfig.iconSize);\n }\n if (mergedSelectedIconConfig.iconAnchor !== undefined) {\n itemIconAnchor = mergedSelectedIconConfig.iconAnchor;\n }\n if (mergedSelectedIconConfig.popupAnchor !== undefined) {\n itemPopupAnchor = mergedSelectedIconConfig.popupAnchor;\n }\n if (mergedSelectedIconConfig.animated !== undefined) {\n itemAnimated = mergedSelectedIconConfig.animated;\n }\n if (mergedSelectedIconConfig.color) {\n itemColor = mergedSelectedIconConfig.color;\n }\n }\n\n // 3. 应用数据项 selectedIcon 配置(优先级高于选中图标配置)\n if ((isSelected || isTemp) && isValidIconConfig(item.selectedIcon)) {\n try {\n const parsed = parseIconConfig({\n ...MARKER_DEFAULT_SELECTED_ICON,\n ...item.selectedIcon,\n });\n if (parsed.icon) itemIconType = parsed.icon;\n if (parsed.svgIcon) itemSvgIcon = parsed.svgIcon;\n if (parsed.customIcon) itemCustomIcon = parsed.customIcon;\n if (parsed.iconSize) itemIconSize = normalizeIconSize(parsed.iconSize);\n if (parsed.iconAnchor) itemIconAnchor = parsed.iconAnchor;\n if (parsed.popupAnchor) itemPopupAnchor = parsed.popupAnchor;\n if (parsed.animated !== undefined) itemAnimated = parsed.animated;\n if (parsed.color) itemColor = parsed.color;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '解析 item.selectedIcon 失败', error);\n }\n }\n\n // 4. 应用编辑中图标配置(优先级低于数据项配置)\n if (isEditing && currentMode === 'move') {\n if (mergedEditingIconConfig.icon) {\n itemIconType = mergedEditingIconConfig.icon;\n itemSvgIcon = mergedEditingIconConfig.svgIcon;\n itemCustomIcon = mergedEditingIconConfig.customIcon;\n }\n if (mergedEditingIconConfig.iconSize !== undefined) {\n itemIconSize = normalizeIconSize(mergedEditingIconConfig.iconSize);\n }\n if (mergedEditingIconConfig.iconAnchor !== undefined) {\n itemIconAnchor = mergedEditingIconConfig.iconAnchor;\n }\n if (mergedEditingIconConfig.popupAnchor !== undefined) {\n itemPopupAnchor = mergedEditingIconConfig.popupAnchor;\n }\n if (mergedEditingIconConfig.animated !== undefined) {\n itemAnimated = mergedEditingIconConfig.animated;\n }\n if (mergedEditingIconConfig.color) {\n itemColor = mergedEditingIconConfig.color;\n }\n }\n\n const effectiveSelected = isSelected || isTemp;\n\n let extraClassName = '';\n if (isEditing && currentMode === 'move') {\n extraClassName = 'marker-icon-wrapper--editing marker-icon-wrapper--movable';\n } else if (isTemp) {\n extraClassName = 'marker-icon-wrapper--temp marker-icon-wrapper--selected';\n } else if (effectiveSelected && editEnabled) {\n extraClassName = 'marker-icon-wrapper--editing';\n } else if (effectiveSelected) {\n extraClassName = 'marker-icon-wrapper--selected';\n }\n\n // SVG 标记需要使用针尖锚点\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- 类型转换需要\n const isItemSvgMarker = SVG_MARKER_ICONS.includes(itemIconType as any);\n const defaultItemAnchor = isItemSvgMarker\n ? getMarkerAnchor(itemIconSize[0], itemIconSize[1])\n : ([itemIconSize[0] / 2, itemIconSize[1]] as [number, number]);\n const effectiveItemIconAnchor = itemIconAnchor || defaultItemAnchor;\n const effectiveItemPopupAnchor =\n itemPopupAnchor || ([0, -effectiveItemIconAnchor[1]] as [number, number]);\n\n const itemIconOptions: L.DivIconOptions = {\n iconSize: itemIconSize,\n iconAnchor: effectiveItemIconAnchor,\n popupAnchor: effectiveItemPopupAnchor,\n };\n\n const icon = createCachedIcon(\n itemIconType,\n itemIconOptions,\n itemAnimated,\n itemSvgIcon,\n itemCustomIcon,\n extraClassName,\n itemColor\n );\n\n // 修复:如果自定义图标没有 animated 类,手动添加\n if (\n itemAnimated &&\n itemCustomIcon &&\n icon.options.html &&\n typeof icon.options.html === 'string'\n ) {\n const html = icon.options.html;\n if (html.includes('marker-custom-icon') && !html.includes('animated')) {\n icon.options.html = html.replace('marker-custom-icon\"', 'marker-custom-icon animated\"');\n }\n }\n\n return icon;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '创建图标失败', error);\n // 返回安全的默认图标\n return createCachedIcon('point', { iconSize: [48, 48] }, false);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps -- style 是函数类型,变更频率低\n [\n resolvedIcon,\n resolvedSvgIcon,\n resolvedCustomIcon,\n iconSize,\n mergedDefaultIconConfig,\n mergedSelectedIconConfig,\n mergedEditingIconConfig,\n editEnabled,\n currentMode,\n ]\n );\n\n /**\n * 获取标注点的永久显示状态\n */\n const getItemPermanent = useCallback(\n (item: MarkerData) => {\n // 边界检查:permanent 只通过组件级 permanent prop 控制\n if (!item) return permanent;\n return permanent;\n },\n [permanent]\n );\n\n /**\n * 获取 Tooltip 偏移量\n * @description 根据图标配置计算 Tooltip 的显示位置偏移,优先使用选中图标的 popupAnchor\n */\n const getTooltipOffset = useCallback(\n (item: MarkerData, isSelected?: boolean, isTemp?: boolean): [number, number] => {\n try {\n const effectiveSelected = isSelected || isTemp;\n\n // 优先使用选中图标的 popupAnchor\n if (\n effectiveSelected &&\n item.selectedIcon &&\n typeof item.selectedIcon === 'object' &&\n item.selectedIcon.popupAnchor\n ) {\n return item.selectedIcon.popupAnchor;\n }\n // 其次使用默认图标的 popupAnchor\n if (item.icon && typeof item.icon === 'object' && item.icon.popupAnchor) {\n return item.icon.popupAnchor;\n }\n // 使用组件级 iconSize 计算偏移量\n return [0, -iconSize[1] * 1.1];\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '计算 Tooltip 偏移量失败', error);\n return [0, -48 * 1.1];\n }\n },\n [iconSize]\n );\n\n return { getItemIcon, getItemPermanent, getTooltipOffset };\n}\n\nexport default useIconConfig;\n","/**\n * @fileoverview Marker 编辑事件处理 hook\n * @description 将编辑模式的状态管理和事件处理提取为独立 hook\n * @module components/Marker/useEditHandlers\n * @since 2.1.0 添加边界检查和错误处理\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any, react-hooks/exhaustive-deps -- 编辑事件处理需要 */\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport type L from 'leaflet';\nimport type { MarkerData, MarkerCreateResult, MarkerMoveResult, Coordinate } from '../../types';\nimport { useLatestRef } from '../../hooks';\nimport { logger, COMPONENT_NAMES } from '../../utils/errorHandling';\n\ninterface EditHandlersOptions {\n enabledButtonsRef: React.MutableRefObject<('create' | 'edit' | 'move' | 'delete')[]>;\n value: string | number | null;\n dataSource: MarkerData[];\n handleSelect: (id: string | number | null) => void;\n onCreateRef: React.MutableRefObject<((result: MarkerCreateResult) => void) | undefined>;\n onEditRef: React.MutableRefObject<\n ((result: { markerId: string | number; marker: MarkerData }) => void) | undefined\n >;\n onMoveRef: React.MutableRefObject<((result: MarkerMoveResult) => void) | undefined>;\n onDeleteRef: React.MutableRefObject<\n ((result: { markerId: string | number }) => void) | undefined\n >;\n onSaveRef: React.MutableRefObject<\n ((result: { mode: string } & (MarkerCreateResult | MarkerMoveResult)) => void) | undefined\n >;\n closeTooltip: () => void;\n}\n\n/**\n * 安全执行回调\n * @description 包裹回调执行,添加错误处理\n */\nfunction safeCall<T extends (...args: any[]) => any>(\n callback: T | undefined,\n ...args: Parameters<T>\n): void {\n if (!callback) return;\n\n try {\n callback(...args);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '回调执行失败', error);\n }\n}\n\n/**\n * Marker 编辑事件处理 hook\n * @description 管理编辑模式的状态和事件处理,添加完整的边界检查和错误处理\n */\nexport function useEditHandlers({\n enabledButtonsRef,\n value,\n dataSource,\n handleSelect,\n onCreateRef,\n onEditRef,\n onMoveRef: _onMoveRef,\n onDeleteRef,\n onSaveRef,\n closeTooltip,\n}: EditHandlersOptions) {\n const [currentMode, setCurrentMode] = useState<'idle' | 'create' | 'move'>('idle');\n const [tempMarker, setTempMarker] = useState<MarkerData | null>(null);\n const [dragPosition, setDragPosition] = useState<Coordinate | null>(null);\n const dragStartPosRef = useRef<Coordinate | null>(null);\n\n /**\n * 进入创建模式\n */\n const handleCreate = useCallback(() => {\n try {\n if (!enabledButtonsRef.current?.includes('create')) {\n logger.warn(COMPONENT_NAMES.MARKER, 'create 按钮未启用');\n return;\n }\n setCurrentMode('create');\n setTempMarker(null);\n closeTooltip();\n handleSelect(null);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '进入创建模式失败', error);\n setCurrentMode('idle');\n }\n }, [handleSelect, closeTooltip]);\n\n /**\n * 编辑选中的标注\n */\n const handleEdit = useCallback(() => {\n try {\n if (!enabledButtonsRef.current?.includes('edit')) {\n logger.warn(COMPONENT_NAMES.MARKER, 'edit 按钮未启用');\n return;\n }\n if (!value) {\n logger.warn(COMPONENT_NAMES.MARKER, '无选中的标注,无法编辑');\n return;\n }\n\n // 边界检查:确保 dataSource 有效\n if (!Array.isArray(dataSource)) {\n logger.warn(COMPONENT_NAMES.MARKER, 'dataSource 无效');\n return;\n }\n\n const marker = dataSource.find(m => m?.id === value);\n if (!marker) {\n logger.warn(COMPONENT_NAMES.MARKER, '未找到选中的标注');\n return;\n }\n\n safeCall(onEditRef.current, { markerId: value, marker });\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '编辑标注失败', error);\n }\n }, [value, dataSource]);\n\n /**\n * 进入移动模式\n */\n const handleMove = useCallback(() => {\n try {\n if (!enabledButtonsRef.current?.includes('move')) {\n logger.warn(COMPONENT_NAMES.MARKER, 'move 按钮未启用');\n return;\n }\n if (!value) {\n logger.warn(COMPONENT_NAMES.MARKER, '无选中的标注,无法移动');\n return;\n }\n\n // 边界检查:确保 dataSource 有效\n if (!Array.isArray(dataSource)) {\n logger.warn(COMPONENT_NAMES.MARKER, 'dataSource 无效');\n return;\n }\n\n const marker = dataSource.find(m => m?.id === value);\n if (!marker) {\n logger.warn(COMPONENT_NAMES.MARKER, '未找到选中的标注');\n return;\n }\n\n // 边界检查:确保 position 有效\n if (!marker.position || !Array.isArray(marker.position) || marker.position.length < 2) {\n logger.warn(COMPONENT_NAMES.MARKER, '标注位置无效');\n return;\n }\n\n setCurrentMode('move');\n dragStartPosRef.current = [...marker.position] as Coordinate;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '进入移动模式失败', error);\n setCurrentMode('idle');\n }\n }, [value, dataSource]);\n\n /**\n * 删除选中的标注\n */\n const handleDelete = useCallback(() => {\n try {\n if (!enabledButtonsRef.current?.includes('delete')) {\n logger.warn(COMPONENT_NAMES.MARKER, 'delete 按钮未启用');\n return;\n }\n if (!value) {\n logger.warn(COMPONENT_NAMES.MARKER, '无选中的标注,无法删除');\n return;\n }\n\n safeCall(onDeleteRef.current, { markerId: value });\n handleSelect(null);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '删除标注失败', error);\n }\n }, [value, handleSelect]);\n\n /**\n * 取消当前操作\n */\n const handleCancel = useCallback(() => {\n try {\n // 移动模式下取消时恢复 marker 原始位置\n if (currentMode === 'move' && value) {\n // 从 dataSource 中找到原始位置\n const originalMarker = dataSource.find(m => m?.id === value);\n if (originalMarker?.position) {\n restorePositionRef.current?.(value, originalMarker.position);\n }\n }\n\n setCurrentMode('idle');\n setTempMarker(null);\n setDragPosition(null);\n dragStartPosRef.current = null;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '取消操作失败', error);\n // 强制重置状态\n setCurrentMode('idle');\n }\n }, [currentMode, value, dataSource]);\n\n const handleCancelRef = useLatestRef(handleCancel);\n\n // ESC 键监听\n useEffect(() => {\n if (currentMode !== 'create' && currentMode !== 'move') return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n try {\n handleCancelRef.current();\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, 'ESC 取消失败', error);\n }\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [currentMode]);\n\n /**\n * 退出创建模式(供 ref 调用)\n */\n const exitCreateMode = useCallback(() => {\n try {\n setCurrentMode('idle');\n setTempMarker(null);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '退出创建模式失败', error);\n setCurrentMode('idle');\n }\n }, []);\n\n /**\n * 退出编辑模式(供 ref 调用,退出所有编辑状态)\n */\n const exitEditMode = useCallback(() => {\n try {\n setCurrentMode('idle');\n setTempMarker(null);\n setDragPosition(null);\n dragStartPosRef.current = null;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '退出编辑模式失败', error);\n setCurrentMode('idle');\n }\n }, []);\n\n /**\n * 处理地图点击(创建模式下)\n */\n const handleMapClick = useCallback(\n (latlng: L.LatLng) => {\n try {\n // 边界检查:确保 latlng 有效\n if (!latlng || typeof latlng.lat !== 'number' || typeof latlng.lng !== 'number') {\n logger.warn(COMPONENT_NAMES.MARKER, '点击位置无效');\n return;\n }\n\n if (currentMode === 'create') {\n const newMarker: MarkerData = {\n id: `temp-${Date.now()}`,\n position: [latlng.lat, latlng.lng],\n title: '新建标注点',\n description: '点击保存确认',\n };\n setTempMarker(newMarker);\n }\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '处理地图点击失败', error);\n }\n },\n [currentMode]\n );\n\n /**\n * 保存操作\n */\n const handleSave = useCallback(() => {\n try {\n if (currentMode === 'create' && tempMarker) {\n // 边界检查:确保 tempMarker 有效\n if (!tempMarker.position || !Array.isArray(tempMarker.position)) {\n logger.warn(COMPONENT_NAMES.MARKER, '临时标注位置无效');\n return;\n }\n\n const result: MarkerCreateResult = {\n position: [...tempMarker.position] as Coordinate,\n title: tempMarker.title || '',\n description: tempMarker.description || '',\n };\n\n safeCall(onCreateRef.current, result);\n safeCall(onSaveRef.current, { mode: 'create', ...result });\n\n // ============================================================\n // 【重要】此处绝不能清空 tempMarker!\n // ============================================================\n // 原因:点击保存后,父组件通常会打开表单让用户填写标注信息。\n // 如果此时清空 tempMarker,临时标注会立即消失,用户在填写表单时\n // 将无法看到标注的实际位置,体验极差。\n //\n // 正确流程:\n // 1. 用户点击保存 → 触发 onCreate 回调\n // 2. 父组件打开表单,tempMarker 保持显示\n // 3. 用户填写完成提交 → 父组件调用 exitCreateMode()\n // 4. exitCreateMode() 会清空 tempMarker 并退出创建模式\n // ============================================================\n } else if (currentMode === 'move' && value) {\n // 移动模式下没有实际拖动,直接退出移动模式\n setCurrentMode('idle');\n setDragPosition(null);\n dragStartPosRef.current = null;\n } else {\n logger.warn(COMPONENT_NAMES.MARKER, '无法保存:状态不匹配');\n }\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '保存操作失败', error);\n }\n }, [currentMode, tempMarker, value]);\n\n /**\n * 拖拽结束处理\n */\n const handleDragEnd = useCallback(\n (id: string | number, e: L.DragEndEvent) => {\n try {\n // 边界检查:确保事件和目标有效\n if (!e || !e.target) {\n logger.warn(COMPONENT_NAMES.MARKER, '拖拽事件无效');\n return;\n }\n\n const target = e.target as L.Marker;\n const latLng = target.getLatLng();\n\n // 边界检查:确保坐标有效\n if (!latLng || typeof latLng.lat !== 'number' || typeof latLng.lng !== 'number') {\n logger.warn(COMPONENT_NAMES.MARKER, '拖拽后坐标无效');\n return;\n }\n\n const newPos: Coordinate = [latLng.lat, latLng.lng];\n\n if (String(id).startsWith('temp-') && tempMarker) {\n setTempMarker(prev => {\n if (!prev) return null;\n return { ...prev, position: newPos };\n });\n } else {\n setDragPosition(newPos);\n }\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '处理拖拽结束失败', error);\n }\n },\n [tempMarker]\n );\n\n /**\n * 设置拖拽起始位置(供 ref 方法使用)\n */\n const setDragStartPos = (position: Coordinate) => {\n dragStartPosRef.current = position;\n };\n\n /** 恢复 marker 位置的函数引用(由 MarkerRenderer 设置) */\n const restorePositionRef = useRef<\n ((markerId: string | number, originalPosition?: Coordinate) => void) | null\n >(null);\n\n /**\n * 设置恢复 marker 位置的函数\n * @description 由 MarkerRenderer 调用,传入 restoreMarkerPosition 方法\n */\n const setRestorePosition = (\n fn: (markerId: string | number, originalPosition?: Coordinate) => void\n ) => {\n restorePositionRef.current = fn;\n };\n\n return {\n currentMode,\n tempMarker,\n dragPosition,\n setCurrentMode,\n setTempMarker,\n setDragPosition,\n setDragStartPos,\n setRestorePosition,\n handleCreate,\n handleEdit,\n handleMove,\n handleDelete,\n handleCancel,\n handleSave,\n handleDragEnd,\n handleMapClick,\n exitCreateMode,\n exitEditMode,\n };\n}\n\nexport default useEditHandlers;\n","/**\n * @fileoverview 地图飞行动画工具函数\n * @description 根据飞行距离动态计算动画时长等通用工具\n * @module utils/mapAnimation\n */\n\nimport { getDistance } from './geometry';\n\n/**\n * 根据飞行距离动态计算 flyTo/flyToBounds 的 duration\n * 对数缩放:<100m → 0.2s, ~10km → 0.45s, ~1000km → 0.75s, 上限 1s\n * @param from - 起点坐标 [lat, lng]\n * @param to - 终点坐标 [lat, lng]\n * @param minDuration - 最小时长(秒),默认 0.2\n * @param maxDuration - 最大时长(秒),默认 1\n */\nexport function calcFlyDuration(\n from: [number, number],\n to: [number, number],\n minDuration = 0.2,\n maxDuration = 1\n): number {\n const distance = getDistance(from, to);\n return Math.max(\n minDuration,\n Math.min(\n maxDuration,\n minDuration +\n (Math.log10(Math.max(distance, 100)) / Math.log10(1000000)) * (maxDuration - minDuration)\n )\n );\n}\n","/**\n * @fileoverview Marker 命令式方法 hook\n * @description 将 useImperativeHandle 中的方法逻辑提取为独立 hook,便于维护\n * @module components/Marker/useMarkerCommands\n */\n\nimport { useCallback, useRef, useImperativeHandle } from 'react';\nimport L from 'leaflet';\nimport type { MarkerRef, MarkerData, MarkerEvents, Coordinate } from '../../types';\nimport { calcFlyDuration } from '../../utils/mapAnimation';\n\ninterface UseMarkerCommandsOptions {\n map: L.Map | null;\n value: string | number | null;\n dataSource: MarkerData[];\n handleSelect: (id: string | number | null, index?: number) => void;\n onClickRef: React.MutableRefObject<((item: MarkerData) => void) | undefined>;\n onRowRef: React.MutableRefObject<((item: MarkerData, index: number) => MarkerEvents) | undefined>;\n setActiveTooltipId: (id: string | number | null) => void;\n setTooltipContentMap: React.Dispatch<\n React.SetStateAction<Map<string | number, { title?: string; description?: string }>>\n >;\n exitCreateMode: () => void;\n exitEditMode: () => void;\n closeTooltip: () => void;\n // 编辑模式相关\n currentMode: 'idle' | 'create' | 'move';\n tempMarker: MarkerData | null;\n _dragPosition: Coordinate | null;\n setCurrentMode: (mode: 'idle' | 'create' | 'move') => void;\n setTempMarker: (marker: MarkerData | null) => void;\n _setDragPosition: (position: Coordinate | null) => void;\n /** 设置拖拽起始位置(用于 ref 方法进入移动模式) */\n setDragStartPos: (position: Coordinate) => void;\n}\n\n/**\n * Marker 命令式方法 hook\n * @description activeTooltipId 和 tooltipContentMap 的状态由调用方管理,\n * 本 hook 只负责将方法绑定到 ref 上\n */\nexport function useMarkerCommands(\n ref: React.Ref<MarkerRef>,\n options: UseMarkerCommandsOptions\n): void {\n const {\n map,\n value,\n dataSource,\n handleSelect,\n onClickRef,\n onRowRef,\n setActiveTooltipId,\n setTooltipContentMap,\n exitCreateMode,\n exitEditMode,\n closeTooltip,\n currentMode,\n tempMarker,\n _dragPosition,\n setCurrentMode,\n setTempMarker,\n _setDragPosition,\n setDragStartPos,\n } = options;\n\n // 用于存储编辑模式下的本地数据\n const localDataRef = useRef<MarkerData | null>(null);\n\n const openTooltip = useCallback(\n (markerId: string | number) => {\n setActiveTooltipId(markerId);\n },\n [setActiveTooltipId]\n );\n\n const openAllTooltips = useCallback(() => {\n setActiveTooltipId('all');\n }, [setActiveTooltipId]);\n\n const updateTooltipContent = useCallback(\n (markerId: string | number, content: { title?: string; description?: string }) => {\n setTooltipContentMap(prev => {\n const newMap = new Map(prev);\n const existing = newMap.get(markerId) || {};\n newMap.set(markerId, { ...existing, ...content });\n return newMap;\n });\n },\n [setTooltipContentMap]\n );\n\n const getSelected = useCallback((): { value: (string | number)[]; data: MarkerData[] } | null => {\n if (!value) return null;\n const marker = dataSource.find(m => m.id === value);\n if (!marker) return null;\n return { value: [value], data: [marker] };\n }, [value, dataSource]);\n\n const setSelected = useCallback(\n (markerId: string | number) => {\n const index = dataSource.findIndex(m => m.id === markerId);\n if (index < 0) return;\n const marker = dataSource[index];\n handleSelect(marker.id, index);\n onClickRef.current?.(marker);\n const rowEvents = onRowRef.current?.(marker, index);\n rowEvents?.onClick?.(marker);\n },\n [dataSource, handleSelect, onClickRef, onRowRef]\n );\n\n const clearSelection = useCallback(() => {\n handleSelect(null);\n }, [handleSelect]);\n\n const fitBounds = useCallback(\n (filter?: (string | number)[], options?: { callback?: () => void }) => {\n if (!map) return;\n let targetData = dataSource;\n if (filter && filter.length > 0) {\n targetData = dataSource.filter(m => filter.includes(m.id));\n }\n if (targetData.length === 0) return;\n const bounds = L.latLngBounds(targetData.map(m => m.position as L.LatLngExpression));\n map.fitBounds(bounds);\n if (options?.callback) map.once('moveend', options.callback);\n },\n [dataSource, map]\n );\n\n const flyTo = useCallback(\n (markerId?: string | number, options?: { zoom?: number; callback?: () => void }) => {\n if (!map) return;\n if (markerId === undefined) {\n if (dataSource.length === 0) return;\n const bounds = L.latLngBounds(dataSource.map(m => m.position as L.LatLngExpression));\n const currentCenter = map.getCenter();\n const targetCenter = bounds.getCenter();\n const duration = calcFlyDuration(\n [currentCenter.lat, currentCenter.lng],\n [targetCenter.lat, targetCenter.lng],\n 0.5,\n 1.5\n );\n map.flyToBounds(bounds, { duration, maxZoom: options?.zoom });\n if (options?.callback) map.once('moveend', options.callback);\n return;\n }\n const marker = dataSource.find(m => m.id === markerId);\n if (marker) {\n const currentCenter = map.getCenter();\n const duration = calcFlyDuration(\n [currentCenter.lat, currentCenter.lng],\n marker.position as [number, number],\n 0.3,\n 1.2\n );\n const targetZoom = options?.zoom ?? map.getZoom();\n map.flyTo(marker.position as L.LatLngExpression, targetZoom, { duration });\n if (options?.callback) map.once('moveend', options.callback);\n }\n },\n [dataSource, map]\n );\n\n const edit = useCallback(\n (editType: 'move', markerId?: string | number) => {\n try {\n const targetId = markerId ?? value;\n if (!targetId) {\n console.warn('无选中的标注,无法移动');\n return false;\n }\n\n if (!Array.isArray(dataSource)) {\n console.warn('dataSource 无效');\n return false;\n }\n\n const marker = dataSource.find(m => m?.id === targetId);\n if (!marker) {\n console.warn('未找到选中的标注');\n return false;\n }\n\n if (!marker.position || !Array.isArray(marker.position) || marker.position.length < 2) {\n console.warn('标注位置无效');\n return false;\n }\n\n // 保存到本地数据副本\n localDataRef.current = { ...marker };\n\n // 设置拖拽起始位置\n setDragStartPos(marker.position as Coordinate);\n\n // 进入移动模式\n setCurrentMode('move');\n return true;\n } catch (error) {\n console.error('进入编辑模式失败', error);\n setCurrentMode('idle');\n return false;\n }\n },\n [value, dataSource, setCurrentMode, setDragStartPos]\n );\n\n const create = useCallback(() => {\n setCurrentMode('create');\n setTempMarker(null);\n closeTooltip();\n handleSelect(null);\n }, [setCurrentMode, setTempMarker, closeTooltip, handleSelect]);\n\n const getLocalData = useCallback((): MarkerData | null => {\n if (currentMode === 'idle') return null;\n\n if (currentMode === 'create' && tempMarker) {\n return { ...tempMarker };\n }\n\n if (currentMode === 'move' && value) {\n const marker = dataSource.find(m => m.id === value);\n if (marker) {\n return { ...marker };\n }\n }\n\n return localDataRef.current ? { ...localDataRef.current } : null;\n }, [currentMode, tempMarker, value, dataSource]);\n\n useImperativeHandle(\n ref,\n () => ({\n exitCreateMode,\n exitEditMode,\n openTooltip,\n openAllTooltips,\n closeTooltip,\n getSelected,\n setSelected,\n clearSelection,\n flyTo,\n fitBounds,\n updateTooltipContent,\n edit,\n create,\n getLocalData,\n }),\n [\n exitCreateMode,\n exitEditMode,\n openTooltip,\n openAllTooltips,\n closeTooltip,\n getSelected,\n setSelected,\n clearSelection,\n flyTo,\n fitBounds,\n updateTooltipContent,\n edit,\n create,\n getLocalData,\n ]\n );\n}\n","/**\n * @fileoverview Marker 增量更新 hook\n * @description 优化 Marker 渲染,通过增量更新避免全量销毁重建\n * @module components/Marker/useMarkerIncrementalUpdate\n * @since 2.1.0 性能优化\n */\n\nimport { useRef, useCallback, useEffect } from 'react';\nimport L from 'leaflet';\nimport type { MarkerData, MarkerEvents, Coordinate } from '../../types';\nimport { logger, COMPONENT_NAMES } from '../../utils/errorHandling';\n\n/** 扩展 Leaflet Marker 类型以支持自定义属性 */\ninterface MarkerWithRestore extends L.Marker {\n /** 存储移动前的原始位置 */\n _originalPosition?: Coordinate;\n /** 恢复原始位置的方法 */\n restoreOriginalPosition?: () => void;\n}\n\n/** Marker 实例与元数据映射 */\ninterface MarkerEntry {\n marker: MarkerWithRestore;\n data: MarkerData;\n hasTooltip: boolean;\n /** 上次生成的图标实例,用于检测图标配置变化 */\n lastIcon: L.DivIcon | null;\n /** 上次的 popupAnchor,用于检测弹窗锚点变化 */\n lastPopupAnchor: [number, number] | null;\n}\n\n/** 增量更新配置 */\ninterface IncrementalUpdateOptions {\n map: L.Map | null;\n /** 获取 Marker 图标 */\n getIcon: (\n item: MarkerData,\n isSelected: boolean,\n isEditing: boolean,\n isTemp: boolean\n ) => L.DivIcon;\n /** 获取永久 Tooltip 状态 */\n getPermanent: (item: MarkerData) => boolean;\n /** 获取 Tooltip 偏移 */\n getTooltipOffset: (item: MarkerData, isSelected?: boolean, isTemp?: boolean) => [number, number];\n /** 当前选中的 ID */\n selectedId: string | number | null;\n /** 当前编辑模式 */\n editMode: 'idle' | 'create' | 'move';\n /** 活动的 Tooltip ID */\n activeTooltipId: string | number | null;\n /** Tooltip 内容映射 */\n tooltipContentMap: Map<string | number, { title?: string; description?: string }>;\n /** 点击处理 */\n onClick: (item: MarkerData, index: number, events: MarkerEvents) => void;\n /** 右键处理 */\n onContextMenu: (item: MarkerData, e: L.LeafletMouseEvent, events: MarkerEvents) => void;\n /** 拖拽结束处理 */\n onDragEnd: (id: string | number, e: L.DragEndEvent) => void;\n /** 获取行事件 */\n onRow?: (item: MarkerData, index: number) => MarkerEvents;\n}\n\n/** 增量更新结果 */\ninterface IncrementalUpdateResult {\n /** 更新渲染 */\n updateMarkers: (displayMarkers: MarkerData[]) => void;\n /** 清理所有 Marker */\n clearMarkers: () => void;\n /** 获取当前 Marker 数量 */\n getMarkerCount: () => number;\n /** 恢复指定 marker 到原始位置 */\n restoreMarkerPosition: (markerId: string | number, originalPosition?: Coordinate) => void;\n}\n\n/**\n * Marker 增量更新 hook\n * @description 通过 diff 算法只更新变化的 Marker,避免全量重建\n *\n * ## 图标更新机制\n *\n * `updateMarker` 函数通过比较 `lastIcon !== getIcon()` 来检测图标配置变化,\n * 确保编辑状态、选中状态等变化时图标能正确更新。\n *\n * @example\n * ```tsx\n * const { updateMarkers, clearMarkers } = useMarkerIncrementalUpdate({\n * map,\n * getIcon: getItemIcon,\n * selectedId: value,\n * editMode: edit.currentMode,\n * ...\n * });\n *\n * // 数据变化时调用\n * updateMarkers(displayMarkers);\n * ```\n */\nexport function useMarkerIncrementalUpdate(\n options: IncrementalUpdateOptions\n): IncrementalUpdateResult {\n const {\n map,\n getIcon,\n getPermanent,\n getTooltipOffset,\n selectedId,\n editMode,\n activeTooltipId,\n tooltipContentMap,\n onClick,\n onContextMenu,\n onDragEnd,\n onRow,\n } = options;\n\n // Marker 实例映射 (id -> MarkerEntry)\n const markersMapRef = useRef<Map<string | number, MarkerEntry>>(new Map());\n\n /**\n * 创建单个 Marker\n */\n const createMarker = useCallback(\n (item: MarkerData, index: number): L.Marker | null => {\n if (!map) return null;\n\n try {\n const isSelected = item.id === selectedId;\n const isEditing = editMode === 'move' && isSelected;\n const isTemp = String(item.id).startsWith('temp-');\n const isDraggable = isEditing || (editMode === 'create' && isTemp);\n const showTooltip =\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all';\n const rowEvents = onRow?.(item, index) ?? {};\n\n const icon = getIcon(item, isSelected, isEditing, isTemp);\n const marker = L.marker(item.position, {\n icon,\n draggable: isDraggable,\n }).addTo(map) as MarkerWithRestore;\n\n // 移动模式下保存原始位置和恢复方法到 marker 实例\n if (isEditing) {\n marker._originalPosition = [...item.position];\n marker.restoreOriginalPosition = () => {\n if (marker._originalPosition) {\n marker.setLatLng(marker._originalPosition as L.LatLngExpression);\n delete marker._originalPosition;\n delete marker.restoreOriginalPosition;\n }\n };\n }\n\n // 绑定事件\n if (!isTemp) {\n marker.on('click', () => onClick(item, index, rowEvents));\n marker.on('contextmenu', (e: L.LeafletMouseEvent) => onContextMenu(item, e, rowEvents));\n }\n marker.on('dragend', (e: L.DragEndEvent) => onDragEnd(item.id, e));\n\n // 绑定 Tooltip\n if (showTooltip) {\n const tooltipContent = tooltipContentMap.get(item.id);\n const tooltipHtml = `<div class=\"marker-popup\">\n <strong>${tooltipContent?.title ?? item.title ?? 'No Title'}</strong>\n ${(tooltipContent?.description ?? item.description) ? `<p>${tooltipContent?.description ?? item.description}</p>` : ''}\n </div>`;\n marker.bindTooltip(tooltipHtml, {\n permanent: true,\n direction: 'top',\n offset: getTooltipOffset(item, isSelected, isTemp),\n });\n }\n\n return marker;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '创建 Marker 失败', error);\n return null;\n }\n },\n [\n map,\n getIcon,\n getPermanent,\n activeTooltipId,\n tooltipContentMap,\n getTooltipOffset,\n selectedId,\n editMode,\n onClick,\n onContextMenu,\n onDragEnd,\n onRow,\n ]\n );\n\n /**\n * 更新单个 Marker(位置、图标、Tooltip)\n */\n const updateMarker = useCallback(\n (entry: MarkerEntry, item: MarkerData, index: number): boolean => {\n const { marker, data: oldData, hasTooltip: oldHasTooltip, lastIcon } = entry;\n\n try {\n const isSelected = item.id === selectedId;\n const isEditing = editMode === 'move' && isSelected;\n const isTemp = String(item.id).startsWith('temp-');\n const isDraggable = isEditing || (editMode === 'create' && isTemp);\n const showTooltip =\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all';\n const rowEvents = onRow?.(item, index) ?? {};\n\n // 位置变化\n if (oldData.position[0] !== item.position[0] || oldData.position[1] !== item.position[1]) {\n marker.setLatLng(item.position as L.LatLngExpression);\n }\n\n // ========== 图标变化检测 ==========\n const wasSelected = entry.data.id === selectedId;\n\n // 检测选中状态变化(独立于数据项属性)\n const selectionChanged = wasSelected !== isSelected;\n\n // 始终调用 getIcon 获取最新图标\n const icon = getIcon(item, isSelected, isEditing, isTemp);\n // 比较当前生成的图标与上次存储的图标实例\n const iconInstanceChanged = lastIcon !== icon;\n\n // 选中状态变化或图标变化时更新\n if (selectionChanged || iconInstanceChanged || editMode !== 'idle') {\n marker.setIcon(icon);\n // 更新存储的图标实例,用于下次比较\n entry.lastIcon = icon;\n }\n\n // 拖拽状态变化\n if (marker.options.draggable !== isDraggable) {\n marker.options.draggable = isDraggable;\n if (isDraggable) {\n marker.dragging?.enable();\n } else {\n marker.dragging?.disable();\n }\n }\n\n // Tooltip 变化\n // 选中状态时优先使用 selectedIcon 的 popupAnchor\n const currentPopupAnchor =\n isSelected || isTemp\n ? item.selectedIcon && typeof item.selectedIcon === 'object'\n ? item.selectedIcon.popupAnchor\n : undefined\n : item.icon && typeof item.icon === 'object'\n ? item.icon.popupAnchor\n : undefined;\n const popupAnchorChanged =\n JSON.stringify(currentPopupAnchor) !== JSON.stringify(entry.lastPopupAnchor);\n\n if (showTooltip !== oldHasTooltip || popupAnchorChanged) {\n if (showTooltip) {\n const tooltipContent = tooltipContentMap.get(item.id);\n const tooltipHtml = `<div class=\"marker-popup\">\n <strong>${tooltipContent?.title ?? item.title ?? 'No Title'}</strong>\n ${(tooltipContent?.description ?? item.description) ? `<p>${tooltipContent?.description ?? item.description}</p>` : ''}\n </div>`;\n // 重新绑定 tooltip 以应用新的 popupAnchor\n marker.unbindTooltip();\n marker.bindTooltip(tooltipHtml, {\n permanent: true,\n direction: 'top',\n offset: getTooltipOffset(item, isSelected, isTemp),\n });\n entry.lastPopupAnchor = currentPopupAnchor ?? null;\n } else {\n marker.unbindTooltip();\n entry.lastPopupAnchor = null;\n }\n }\n\n // 更新事件绑定\n marker.off('click');\n marker.off('contextmenu');\n marker.off('dragend');\n\n if (!isTemp) {\n marker.on('click', () => onClick(item, index, rowEvents));\n marker.on('contextmenu', (e: L.LeafletMouseEvent) => onContextMenu(item, e, rowEvents));\n }\n marker.on('dragend', (e: L.DragEndEvent) => onDragEnd(item.id, e));\n\n return true;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '更新 Marker 失败', error);\n return false;\n }\n },\n [\n selectedId,\n editMode,\n getIcon,\n getPermanent,\n activeTooltipId,\n tooltipContentMap,\n getTooltipOffset,\n onClick,\n onContextMenu,\n onDragEnd,\n onRow,\n ]\n );\n\n /**\n * 增量更新 Markers\n * @description 通过 diff 算法只处理变化的 Marker\n */\n const updateMarkers = useCallback(\n (displayMarkers: MarkerData[]) => {\n if (!map) return;\n\n const currentIds = new Set(displayMarkers.map(m => m.id));\n const existingIds = new Set(markersMapRef.current.keys());\n\n // 1. 删除不再存在的 Marker\n existingIds.forEach(id => {\n if (!currentIds.has(id)) {\n const entry = markersMapRef.current.get(id);\n if (entry) {\n entry.marker.remove();\n markersMapRef.current.delete(id);\n }\n }\n });\n\n // 2. 创建或更新 Marker\n displayMarkers.forEach((item, index) => {\n const existing = markersMapRef.current.get(item.id);\n\n if (existing) {\n // 更新现有 Marker\n const success = updateMarker(existing, item, index);\n if (success) {\n markersMapRef.current.set(item.id, {\n marker: existing.marker,\n data: item,\n hasTooltip:\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all',\n lastIcon: existing.lastIcon, // 保留上次生成的图标实例\n lastPopupAnchor: existing.lastPopupAnchor, // 保留上次的 popupAnchor\n });\n } else {\n // 更新失败,尝试重建\n existing.marker.remove();\n markersMapRef.current.delete(item.id);\n const newMarker = createMarker(item, index);\n if (newMarker) {\n markersMapRef.current.set(item.id, {\n marker: newMarker,\n data: item,\n hasTooltip:\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all',\n lastIcon: newMarker.getIcon(), // 从 marker 获取图标实例\n lastPopupAnchor:\n item.icon && typeof item.icon === 'object'\n ? (item.icon.popupAnchor ?? null)\n : null,\n });\n }\n }\n } else {\n // 创建新 Marker\n const newMarker = createMarker(item, index);\n if (newMarker) {\n markersMapRef.current.set(item.id, {\n marker: newMarker,\n data: item,\n hasTooltip:\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all',\n lastIcon: newMarker.getIcon(), // 从 marker 获取图标实例\n lastPopupAnchor:\n item.icon && typeof item.icon === 'object' ? (item.icon.popupAnchor ?? null) : null,\n });\n }\n }\n });\n },\n [map, createMarker, updateMarker, getPermanent, activeTooltipId]\n );\n\n /**\n * 清理所有 Markers\n */\n const clearMarkers = useCallback(() => {\n markersMapRef.current.forEach(entry => entry.marker.remove());\n markersMapRef.current.clear();\n }, []);\n\n /**\n * 获取当前 Marker 数量\n */\n const getMarkerCount = useCallback(() => markersMapRef.current.size, []);\n\n /**\n * 恢复指定 marker 到原始位置\n * @description 通过 marker 实例上的 restoreOriginalPosition 方法恢复\n * @param markerId 要恢复的 marker ID\n * @param originalPosition 可选:原始位置。如果提供,直接使用此位置恢复;否则使用 marker 上的 _originalPosition\n */\n const restoreMarkerPosition = useCallback(\n (markerId: string | number, originalPosition?: Coordinate) => {\n const entry = markersMapRef.current.get(markerId);\n const marker = entry?.marker as MarkerWithRestore | undefined;\n if (originalPosition) {\n // 直接使用传入的原始位置恢复\n marker?.setLatLng(originalPosition as L.LatLngExpression);\n // 清除 marker 上的原始位置信息\n delete marker?._originalPosition;\n delete marker?.restoreOriginalPosition;\n } else if (marker?.restoreOriginalPosition) {\n // 使用 marker 实例上存储的原始位置\n marker.restoreOriginalPosition();\n }\n },\n []\n );\n\n // 组件卸载时清理\n useEffect(() => {\n return () => clearMarkers();\n }, [clearMarkers]);\n\n return {\n updateMarkers,\n clearMarkers,\n getMarkerCount,\n restoreMarkerPosition,\n };\n}\n\nexport default useMarkerIncrementalUpdate;\n","/**\n * @fileoverview Marker 显示模式配置解析\n * @description 将 boolean | MarkerDisplayModeConfig 三态配置解析为统一的配置对象\n * @module components/Marker/parseDisplayModeConfig\n */\n\nimport type { MarkerDisplayModeConfig } from '../../types';\n\n/** 解析后的显示模式配置 */\nexport interface ParsedDisplayModeConfig {\n /** 是否启用显示模式 */\n enabled: boolean;\n /** 聚合半径(像素) */\n radius: number;\n /** 聚合生效的最大缩放级别 */\n maxZoom: number;\n /** 最小聚合数量 */\n minPoints: number;\n /** 点击聚合气泡后的行为 */\n onClickBehavior: 'zoom' | 'expand';\n}\n\n/**\n * 解析 displayMode 配置\n * - undefined / false → 关闭显示模式\n * - true → 启用默认配置\n * - object → 自定义参数\n */\nexport function parseDisplayModeConfig(\n displayModeConfig: boolean | MarkerDisplayModeConfig | undefined\n): ParsedDisplayModeConfig {\n if (displayModeConfig === undefined || displayModeConfig === false) {\n return {\n enabled: false,\n radius: 40,\n maxZoom: 18,\n minPoints: 2,\n onClickBehavior: 'zoom',\n };\n }\n\n if (displayModeConfig === true) {\n return {\n enabled: true,\n radius: 40,\n maxZoom: 18,\n minPoints: 2,\n onClickBehavior: 'zoom',\n };\n }\n\n const config = displayModeConfig;\n return {\n enabled: true,\n radius: config.radius ?? 40,\n maxZoom: config.maxZoom ?? 18,\n minPoints: config.minPoints ?? 2,\n onClickBehavior: config.onClickBehavior ?? 'zoom',\n };\n}\n","/**\n * @fileoverview Marker 标注组件\n * @description 用于在地图上显示标注点,支持自定义图标、动画效果、编辑模式、聚合和 Tooltip 控制\n * @module components/Marker\n * @since 2.0.0 已移除 react-leaflet 依赖\n * @since 2.1.0 性能优化:增量更新、视口防抖、边界检查\n */\n\n/* eslint-disable react-hooks/exhaustive-deps -- ref 回调依赖由调用方保证 */\n\nimport { useMemo, useState, useCallback, useRef, useEffect, forwardRef, memo } from 'react';\nimport L from 'leaflet';\nimport Supercluster from 'supercluster';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport { logger } from '../../utils/errorHandling';\n\nimport MarkerEditToolbar from './toolbar';\nimport MapClickHandler from './MapClickHandler';\nimport ClusterView from './ClusterView';\nimport {\n useLatestRef,\n useEditMode,\n useLoadingOverlay,\n useViewportDebounce,\n useLifecycle,\n useNormalizedDataSource,\n useAutoFit,\n} from '../../hooks';\nimport { useIconConfig } from './useIconConfig';\nimport { useEditHandlers } from './useEditHandlers';\nimport { useMarkerCommands } from './useMarkerCommands';\nimport { useMarkerIncrementalUpdate } from './useMarkerIncrementalUpdate';\nimport { parseDisplayModeConfig } from './parseDisplayModeConfig';\nimport { createCachedIcon } from '../../utils/iconCache';\nimport { MARKER_DEFAULT_ICON } from '../../constants/styles';\nimport type {\n MarkerData,\n MarkerProps,\n MarkerRef,\n MarkerEvents,\n ClusterIconConfig,\n MarkerFieldNames,\n Coordinate,\n} from '../../types';\n\nconst DEFAULT_FIELD_NAMES: Required<MarkerFieldNames> = {\n id: 'id',\n title: 'title',\n position: 'position',\n description: 'description',\n};\n\n/** Marker 点属性 */\ninterface MarkerPointProperties {\n id: string | number;\n markerData: MarkerData;\n}\n\n/** supercluster 索引类型 */\ntype MarkerClusterIndex = Supercluster<MarkerPointProperties>;\n\n/**\n * Marker 标注组件\n *\n * @description\n * 用于在地图上显示标注点,支持以下功能:\n * - 自定义图标:预设名称、SVG字符串、图片URL\n * - 动画效果:脉冲动画\n * - 编辑模式:创建、移动、删除标注点\n * - Tooltip 控制:打开/关闭指定或所有标注点的 Tooltip\n * - 选中状态:支持受控和非受控模式\n * - 聚合显示:支持 supercluster 聚合算法\n *\n * @example\n * ```tsx\n * import { Marker } from 'agri-map-components';\n * import { useRef } from 'react';\n *\n * // 基础用法\n * <Marker\n * icon=\"marker-blue\"\n * dataSource={[\n * { id: 1, position: [29.95, 117.98], title: '标注点A' },\n * { id: 2, position: [29.96, 117.99], title: '标注点B' },\n * ]}\n * onClick={(item) => console.log('点击:', item)}\n * />\n *\n * // 使用 ref 控制方法\n * const markerRef = useRef(null);\n * <Marker\n * ref={markerRef}\n * dataSource={data}\n * value={value}\n * onSelect={setValue}\n * />\n * <button onClick={() => markerRef.current?.openAllTooltips()}>显示所有 Tooltip</button>\n *\n * // 编辑模式\n * <Marker\n * editMode={['create', 'move', 'delete']}\n * dataSource={data}\n * onCreate={(result) => console.log('新建:', result)}\n * onMove={(result) => console.log('移动:', result)}\n * onDelete={(result) => console.log('删除:', result)}\n * />\n * ```\n */\n\n/**\n * Marker 渲染器组件(内部使用)\n * 使用原生 Leaflet API 渲染标记点,采用增量更新优化\n */\ninterface MarkerRendererProps {\n map: L.Map | null;\n displayMarkers: MarkerData[];\n value: string | number | null;\n edit: ReturnType<typeof useEditHandlers>;\n getItemIcon: (\n item: MarkerData,\n isSelected: boolean,\n isEditing: boolean,\n isTemp: boolean\n ) => L.DivIcon;\n getItemPermanent: (item: MarkerData) => boolean;\n activeTooltipId: string | number | null;\n tooltipContentMap: Map<string | number, { title?: string; description?: string }>;\n getTooltipOffset: (item: MarkerData) => [number, number];\n handleClick: (item: MarkerData, index: number, events: MarkerEvents) => void;\n handleContextMenu: (item: MarkerData, e: L.LeafletMouseEvent, events: MarkerEvents) => void;\n onRowRef: React.MutableRefObject<((item: MarkerData, index: number) => MarkerEvents) | undefined>;\n}\n\nconst MarkerRenderer = memo(function MarkerRenderer({\n map,\n displayMarkers,\n value,\n edit,\n getItemIcon,\n getItemPermanent,\n activeTooltipId,\n tooltipContentMap,\n getTooltipOffset,\n handleClick,\n handleContextMenu,\n onRowRef,\n}: MarkerRendererProps) {\n // 使用增量更新 hook\n const { updateMarkers, clearMarkers, restoreMarkerPosition } = useMarkerIncrementalUpdate({\n map,\n getIcon: getItemIcon,\n getPermanent: getItemPermanent,\n getTooltipOffset,\n selectedId: value,\n editMode: edit.currentMode,\n activeTooltipId,\n tooltipContentMap,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n onDragEnd: edit.handleDragEnd,\n onRow: onRowRef.current,\n });\n\n // 暴露 restoreMarkerPosition 方法给父组件\n // 用于取消移动时恢复 marker 原始位置\n if (edit && typeof edit.setRestorePosition === 'function') {\n edit.setRestorePosition(restoreMarkerPosition);\n }\n\n // 增量更新 markers\n useEffect(() => {\n if (!map) return;\n\n // 边界检查:确保 displayMarkers 有效\n if (!Array.isArray(displayMarkers)) {\n logger.warn('MarkerRenderer', 'displayMarkers 不是有效数组');\n clearMarkers();\n return;\n }\n\n // 数据验证:过滤无效数据\n const validMarkers = displayMarkers.filter(item => {\n if (!item) {\n logger.warn('MarkerRenderer', '跳过空数据项');\n return false;\n }\n if (!item.id) {\n logger.warn('MarkerRenderer', '跳过缺少 id 的数据项', item);\n return false;\n }\n if (!item.position || !Array.isArray(item.position) || item.position.length < 2) {\n logger.warn('MarkerRenderer', '跳过无效坐标的数据项', item);\n return false;\n }\n return true;\n });\n\n try {\n updateMarkers(validMarkers);\n } catch (error) {\n logger.error('MarkerRenderer', '更新 markers 失败:', error);\n // 尝试清理后重建\n clearMarkers();\n }\n }, [\n map,\n displayMarkers,\n value,\n edit.currentMode,\n activeTooltipId,\n tooltipContentMap,\n updateMarkers,\n clearMarkers,\n getItemIcon,\n getItemPermanent,\n getTooltipOffset,\n handleClick,\n handleContextMenu,\n onRowRef,\n ]);\n\n return null;\n});\n\nconst Marker = forwardRef<MarkerRef, MarkerProps>(\n (\n {\n dataSource = [],\n fieldNames,\n onClick,\n onContextMenu,\n permanent = false,\n style: styleProp,\n /** 默认图标配置 */\n icon: iconProp,\n /** 选中状态图标配置 */\n selectedIcon: selectedIconProp,\n editMode: editModeProp = false,\n onCreate,\n onEdit,\n onMove,\n onDelete,\n onSave,\n onSelect,\n value: valueProp,\n defaultValue,\n showEditHint = false,\n onLoaded,\n /** 显示模式配置 */\n displayMode,\n onClusterClick,\n onRow,\n loading = false,\n loadingMask,\n lifecycle,\n /** 是否在首次加载数据后自动 fitBounds 适配地图视图 */\n autoFit = false,\n },\n ref\n ) => {\n // ========== 字段映射和数据验证(使用公共 Hook)==========\n const { data: normalizedData, validation } = useNormalizedDataSource<MarkerData>({\n dataSource: dataSource as unknown as Record<string, unknown>[],\n defaultFieldNames: DEFAULT_FIELD_NAMES,\n fieldNames: fieldNames as Partial<Record<string, string>>,\n validation: {\n requiredFields: ['id', 'position'],\n coordinateFields: ['position'],\n coordinateBounds: { lat: { min: -90, max: 90 }, lng: { min: -180, max: 180 } },\n },\n componentType: 'marker',\n mapper: (item, fn) => {\n const position = item[fn.position] as [number, number];\n const [lat, lng] = position;\n return {\n id: item[fn.id] as string | number,\n position: [lat, lng] as Coordinate,\n title: item[fn.title] as string | undefined,\n description: item[fn.description] as string | undefined,\n icon: item.icon as MarkerData['icon'],\n selectedIcon: item.selectedIcon as MarkerData['selectedIcon'],\n } as MarkerData;\n },\n });\n\n // 记录验证错误日志\n if (validation.invalid > 0) {\n logger.warn('Marker', `数据验证失败: ${validation.errors.slice(0, 3).join('; ')}`);\n }\n\n // ========== 数据加载回调 ==========\n const dataSourceRef = useLatestRef(normalizedData);\n const prevDataSourceLengthRef = useRef(0);\n useEffect(() => {\n const len = dataSourceRef.current.length;\n if (onLoaded && len > 0 && len !== prevDataSourceLengthRef.current) {\n prevDataSourceLengthRef.current = len;\n try {\n onLoaded(dataSourceRef.current);\n } catch (error) {\n logger.error('Marker', 'onLoaded 回调执行失败:', error);\n }\n }\n }, [dataSourceRef, onLoaded]);\n\n // ========== 编辑模式 ==========\n const { editEnabled, enabledButtons, customToolbar, color, size, iconOnly } = useEditMode(\n editModeProp,\n ['create', 'edit', 'move', 'delete'] as const\n );\n\n // ========== Map 实例 ==========\n const map = useMap();\n\n // ========== 自动 fitBounds(使用公共 Hook)==========\n useAutoFit({\n data: normalizedData,\n map,\n autoFit,\n getCoordinates: item => [item.position],\n });\n\n // ========== 状态管理 ==========\n const [internalValue, setInternalValue] = useState<string | number | null>(\n defaultValue ?? null\n );\n const [activeTooltipId, setActiveTooltipId] = useState<string | number | null>(null);\n const [tooltipContentMap, setTooltipContentMap] = useState<\n Map<string | number, { title?: string; description?: string }>\n >(new Map());\n\n const isControlled = valueProp !== undefined;\n const value = isControlled ? valueProp : internalValue;\n\n // ========== 聚合配置解析 ==========\n const {\n enabled: displayModeEnabled,\n radius,\n maxZoom,\n minPoints,\n onClickBehavior,\n } = useMemo(() => parseDisplayModeConfig(displayMode), [displayMode]);\n\n // ========== 聚合图标配置 ==========\n /** 从 ConfigContext 获取聚合气泡图标配置 */\n const config = useConfig();\n\n /** 判断是否为有效的 ClusterIconConfig */\n const isValidClusterIconConfig = (val: unknown): val is ClusterIconConfig => {\n return typeof val === 'object' && val !== null && Object.keys(val).length > 0;\n };\n\n const clusterIconConfig = useMemo(() => {\n // 优先级:config.marker.cluster > 默认 CLUSTER_DEFAULT_ICON\n const clusterConfig = config?.marker?.cluster;\n return isValidClusterIconConfig(clusterConfig) ? clusterConfig : undefined;\n }, [config?.marker?.cluster]);\n\n // ========== 视口防抖优化 ==========\n const {\n debouncedZoom,\n debouncedViewVersion: _debouncedViewVersion,\n debouncedBounds,\n } = useViewportDebounce({\n map,\n zoomDebounceDelay: 100,\n moveDebounceDelay: 150,\n useRaf: true,\n });\n\n // ========== 聚合索引构建 ==========\n const clusterIndex = useMemo<MarkerClusterIndex | null>(() => {\n if (!displayModeEnabled || !normalizedData.length) {\n return null;\n }\n\n try {\n const features: Supercluster.PointFeature<MarkerPointProperties>[] = normalizedData.map(\n marker => ({\n type: 'Feature',\n geometry: {\n type: 'Point',\n coordinates: [marker.position[1], marker.position[0]], // [lng, lat]\n },\n properties: {\n id: marker.id,\n markerData: marker,\n },\n })\n );\n\n const index = new Supercluster<MarkerPointProperties>({\n radius,\n maxZoom,\n minPoints,\n });\n index.load(features);\n return index;\n } catch (error) {\n logger.error('Marker', '聚合索引构建失败:', error);\n return null;\n }\n }, [normalizedData, displayModeEnabled, radius, maxZoom, minPoints]);\n\n // ========== 聚合结果获取(使用防抖后的值) ==========\n const clusterResults = useMemo(() => {\n if (!clusterIndex || !map || !debouncedBounds) {\n return [];\n }\n\n try {\n const zoom = Math.floor(debouncedZoom);\n return clusterIndex.getClusters(\n [\n debouncedBounds.getWest(),\n debouncedBounds.getSouth(),\n debouncedBounds.getEast(),\n debouncedBounds.getNorth(),\n ],\n zoom\n );\n } catch (error) {\n logger.error('Marker', '获取聚合结果失败:', error);\n return [];\n }\n }, [clusterIndex, debouncedBounds, debouncedZoom, map]);\n\n // ========== 聚合气泡点击处理 ==========\n const onClusterClickRef = useLatestRef(onClusterClick);\n const clusterIndexRef = useRef<MarkerClusterIndex | null>(null);\n useEffect(() => {\n clusterIndexRef.current = clusterIndex;\n }, [clusterIndex]);\n\n const handleClusterClick = useCallback(\n (feature: Supercluster.ClusterFeature<Supercluster.AnyProps>) => {\n if (!clusterIndexRef.current || !map) {\n logger.warn('Marker', '无法处理聚合点击:地图或索引未初始化');\n return;\n }\n\n try {\n const clusterProps = feature.properties as Supercluster.ClusterProperties;\n const [lng, lat] = feature.geometry.coordinates;\n\n if (onClickBehavior === 'zoom') {\n // 获取聚合内所有点\n const leaves = clusterIndexRef.current.getLeaves(clusterProps.cluster_id, Infinity);\n const markers = leaves.map(l => l.properties.markerData as MarkerData);\n\n // 计算边界并 zoom in\n const leafBounds = L.latLngBounds(\n leaves.map(l => [l.geometry.coordinates[1], l.geometry.coordinates[0]])\n );\n const targetZoom = Math.min(map.getZoom() + 2, maxZoom + 1);\n map.fitBounds(leafBounds, { maxZoom: targetZoom });\n\n onClusterClickRef.current?.(clusterProps.point_count, markers);\n } else {\n // expand 模式:展开聚合\n const expansionZoom = clusterIndexRef.current.getClusterExpansionZoom(\n clusterProps.cluster_id\n );\n map.setView([lat, lng], expansionZoom, { animate: true });\n }\n } catch (error) {\n logger.error('Marker', '处理聚合点击失败:', error);\n }\n },\n [map, onClickBehavior, maxZoom]\n );\n\n // ========== 默认 Marker 图标(聚合模式下单独点使用) ==========\n const defaultMarkerIcon = useMemo(() => {\n try {\n const iconConfig = MARKER_DEFAULT_ICON;\n const iconValue = iconConfig.icon;\n const iconType = typeof iconValue === 'string' ? iconValue : 'point';\n const iconSize = iconConfig.iconSize ?? [48, 48];\n const iconAnchor = iconConfig.iconAnchor;\n const popupAnchor = iconConfig.popupAnchor;\n const animated = iconConfig.animated ?? false;\n const svgIcon = typeof iconValue === 'string' ? undefined : iconValue;\n\n const options: L.DivIconOptions = {\n iconSize: typeof iconSize === 'number' ? [iconSize, iconSize] : iconSize,\n };\n if (iconAnchor) options.iconAnchor = iconAnchor;\n if (popupAnchor) options.popupAnchor = popupAnchor;\n\n return createCachedIcon(iconType, options, animated, svgIcon);\n } catch (error) {\n logger.error('Marker', '创建默认图标失败:', error);\n // 返回基础图标作为 fallback\n return createCachedIcon('point', { iconSize: [48, 48] }, false);\n }\n }, []);\n\n // ========== 回调函数引用 ==========\n const onClickRef = useLatestRef(onClick);\n const onContextMenuRef = useLatestRef(onContextMenu);\n const onSelectRef = useLatestRef(onSelect);\n const onCreateRef = useLatestRef(onCreate);\n const onEditRef = useLatestRef(onEdit);\n const onMoveRef = useLatestRef(onMove);\n const onDeleteRef = useLatestRef(onDelete);\n const onSaveRef = useLatestRef(onSave);\n const onRowRef = useLatestRef(onRow);\n const enabledButtonsRef = useLatestRef(enabledButtons) as React.MutableRefObject<\n ('create' | 'edit' | 'move' | 'delete')[]\n >;\n\n // ========== Tooltip 控制 ==========\n const closeTooltip = useCallback(() => setActiveTooltipId(null), []);\n\n // ========== 编辑事件处理 ==========\n const edit = useEditHandlers({\n enabledButtonsRef,\n value,\n dataSource: normalizedData,\n handleSelect: id => {\n if (!isControlled) setInternalValue(id);\n onSelectRef.current?.(id);\n },\n onCreateRef,\n onEditRef,\n onMoveRef,\n onDeleteRef,\n onSaveRef,\n closeTooltip,\n });\n\n // ========== 判断是否使用聚合渲染 ==========\n const useClusterRender = useMemo(() => {\n return displayModeEnabled && debouncedZoom <= maxZoom && edit.currentMode === 'idle';\n }, [displayModeEnabled, debouncedZoom, maxZoom, edit.currentMode]);\n\n // ========== 图标配置 ==========\n const { getItemIcon, getItemPermanent, getTooltipOffset } = useIconConfig({\n editEnabled,\n currentMode: edit.currentMode,\n permanent,\n style: styleProp,\n icon: iconProp,\n selectedIcon: selectedIconProp,\n });\n\n // ========== 事件处理 ==========\n const handleSelect = useCallback(\n (id: string | number | null, index = -1) => {\n if (!isControlled) {\n setInternalValue(id);\n }\n if (onSelectRef.current) {\n try {\n onSelectRef.current(id);\n } catch (error) {\n logger.error('Marker', 'onSelect 回调执行失败:', error);\n }\n }\n if (id !== null && index >= 0) {\n const item = normalizedData[index];\n if (item) {\n const rowEvents = onRowRef.current?.(item, index);\n if (rowEvents?.onSelect) {\n try {\n rowEvents.onSelect(id);\n } catch (error) {\n logger.error('Marker', 'row.onSelect 回调执行失败:', error);\n }\n }\n }\n }\n },\n [isControlled, normalizedData]\n );\n\n const handleClick = useCallback(\n (item: MarkerData, index: number, events: MarkerEvents) => {\n if (edit.currentMode === 'create') return;\n\n if (edit.currentMode === 'idle') {\n // 再次点击取消选中\n const isCurrentSelected = value === item.id;\n const newSelectedId = isCurrentSelected ? null : item.id;\n\n handleSelect(newSelectedId, index);\n setActiveTooltipId(prev => (prev === item.id ? null : item.id));\n try {\n onClickRef.current?.(item);\n events.onClick?.(item);\n } catch (error) {\n logger.error('Marker', 'onClick 回调执行失败:', error);\n }\n }\n },\n [edit.currentMode, handleSelect, value]\n );\n\n const handleContextMenu = useCallback(\n (item: MarkerData, e: L.LeafletMouseEvent, events: MarkerEvents) => {\n L.DomEvent.preventDefault(e.originalEvent);\n try {\n onContextMenuRef.current?.(item, e);\n events.onContextMenu?.(item, e);\n } catch (error) {\n logger.error('Marker', 'onContextMenu 回调执行失败:', error);\n }\n },\n []\n );\n\n // ========== 命令式方法 ==========\n useMarkerCommands(ref, {\n map,\n value,\n dataSource: normalizedData,\n handleSelect,\n onClickRef,\n onRowRef,\n setActiveTooltipId,\n setTooltipContentMap,\n exitCreateMode: edit.exitCreateMode,\n exitEditMode: edit.exitEditMode,\n closeTooltip,\n currentMode: edit.currentMode,\n tempMarker: edit.tempMarker,\n _dragPosition: edit.dragPosition,\n setCurrentMode: edit.setCurrentMode,\n setTempMarker: edit.setTempMarker,\n _setDragPosition: edit.setDragPosition,\n setDragStartPos: edit.setDragStartPos,\n });\n\n // ========== 渲染数据 ==========\n const displayMarkers = useMemo(() => {\n if (edit.currentMode === 'create') {\n return edit.tempMarker ? [edit.tempMarker] : [];\n }\n if (edit.currentMode === 'move') {\n return normalizedData.filter(m => m.id === value);\n }\n return normalizedData;\n }, [normalizedData, edit.currentMode, edit.tempMarker, value]);\n\n // ========== Loading 覆盖层 ==========\n const loadingOverlay = useLoadingOverlay({\n loading,\n loadingMask,\n map,\n className: 'agri-marker-loading-overlay',\n });\n\n // ========== 生命周期管理 ==========\n const prevEditModeRef = useRef<typeof edit.currentMode>('idle');\n const currentMarkerData = normalizedData.find(m => m.id === value) || null;\n\n useLifecycle<'Marker'>({\n componentType: 'Marker',\n lifecycle,\n dataSource: normalizedData || [],\n currentState: {\n mode: edit.currentMode as 'idle' | 'create' | 'move' | 'delete',\n prevMode: prevEditModeRef.current as 'idle' | 'create' | 'move' | 'delete',\n markerId: value,\n marker: currentMarkerData as Record<string, unknown> | null,\n },\n isRendered: true, // Marker 组件没有虚拟化,渲染完成标志简化处理\n renderStats: {\n totalCount: normalizedData?.length || 0,\n renderedCount: displayMarkers.length,\n virtualized: false,\n },\n });\n\n // 更新上一个编辑模式引用\n useEffect(() => {\n prevEditModeRef.current = edit.currentMode;\n }, [edit.currentMode]);\n\n // ========== 渲染 ==========\n if (!normalizedData || normalizedData.length === 0) {\n return editEnabled || edit.currentMode !== 'idle' ? (\n <>\n <MapClickHandler\n enabled={edit.currentMode === 'create'}\n hasTempMarker={!!edit.tempMarker}\n onMapClick={edit.handleMapClick}\n onMapClickWithoutMarker={closeTooltip}\n />\n <MarkerEditToolbar\n visible={true}\n selectedMarkerId={value}\n currentMode={edit.currentMode}\n enabledButtons={enabledButtons as ('create' | 'edit' | 'move' | 'delete')[]}\n showHint={showEditHint}\n color={color}\n size={size}\n iconOnly={iconOnly}\n onCreate={edit.handleCreate}\n onEdit={edit.handleEdit}\n onMove={edit.handleMove}\n onDelete={edit.handleDelete}\n onCancel={edit.handleCancel}\n onSave={edit.handleSave}\n >\n {customToolbar}\n </MarkerEditToolbar>\n {loadingOverlay}\n </>\n ) : loading ? (\n loadingOverlay\n ) : null;\n }\n\n return (\n <>\n <MapClickHandler\n enabled={edit.currentMode === 'create'}\n hasTempMarker={!!edit.tempMarker}\n onMapClick={edit.handleMapClick}\n onMapClickWithoutMarker={closeTooltip}\n />\n\n {/* 聚合模式渲染 */}\n {useClusterRender && (\n <ClusterView\n clusterResults={clusterResults}\n markerIcon={defaultMarkerIcon}\n clusterIconConfig={clusterIconConfig}\n showTooltip={permanent}\n onClusterClick={handleClusterClick}\n onMarkerClick={markerId => {\n const marker = normalizedData.find(m => m.id === markerId);\n if (marker) {\n const index = normalizedData.findIndex(m => m.id === markerId);\n handleSelect(markerId, index);\n try {\n onClickRef.current?.(marker);\n } catch (error) {\n logger.error('Marker', 'onMarkerClick 回调执行失败:', error);\n }\n }\n }}\n getTooltipContent={marker => ({\n title: tooltipContentMap.get(marker.id)?.title ?? marker.title,\n description: tooltipContentMap.get(marker.id)?.description ?? marker.description,\n })}\n />\n )}\n\n {/* 非聚合模式渲染(原生 Leaflet + 增量更新) */}\n {!useClusterRender && (\n <MarkerRenderer\n map={map}\n displayMarkers={displayMarkers}\n value={value}\n edit={edit}\n getItemIcon={getItemIcon}\n getItemPermanent={getItemPermanent}\n activeTooltipId={activeTooltipId}\n tooltipContentMap={tooltipContentMap}\n getTooltipOffset={getTooltipOffset}\n handleClick={handleClick}\n handleContextMenu={handleContextMenu}\n onRowRef={onRowRef}\n />\n )}\n\n {(editEnabled || edit.currentMode !== 'idle') && (\n <MarkerEditToolbar\n visible={true}\n selectedMarkerId={value}\n currentMode={edit.currentMode}\n enabledButtons={enabledButtons as ('create' | 'edit' | 'move' | 'delete')[]}\n showHint={showEditHint}\n color={color}\n size={size}\n iconOnly={iconOnly}\n onCreate={edit.handleCreate}\n onEdit={edit.handleEdit}\n onMove={edit.handleMove}\n onDelete={edit.handleDelete}\n onCancel={edit.handleCancel}\n onSave={edit.handleSave}\n >\n {customToolbar}\n </MarkerEditToolbar>\n )}\n {loadingOverlay}\n </>\n );\n }\n);\n\nexport default Marker;\n"],"names":["useMapLifecycle","options","map","lifecycle","isReady","hasReadyFired","useRef","prevViewportRef","rafIdRef","useEffect","_lifecycle$onMapReady","current","onMapReady","call","onViewportChange","handleViewportChange","_triggerEvent","requestAnimationFrame","center","getCenter","zoom","getZoom","bounds","getBounds","prev","hasChanged","Math","abs","lat","lng","_lifecycle$onViewport","on","cancelAnimationFrame","off","MapContext","createContext","mapRef","displayName","useMap","_useContext","useContext","MapProvider","_ref","children","_ref$options","onReady","style","className","_ref$destroyOnUnmount","destroyOnUnmount","containerRef","_useState","useState","_useState2","_slicedToArray","setIsReady","onReadyRef","lifecycleRef","effectiveZoom","_options$zoomControl","_options$attributionC","mapOptions","zoomControl","attributionControl","crs","undefined","maxZoom","minZoom","scrollWheelZoom","maxBounds","layers","preferCanvas","L","_onReadyRef$current","remove","contextValue","useMemo","_jsx","Provider","value","ref","_objectSpread","position","JSON","stringify","useMapEvent","eventType","handler","handlerRef","wrappedHandler","e","_handlerRef$current","ConfigContext","theme","useConfig","COMPONENT_NAMES","PLOT_LAYER","MARKER","TRACK","ROAD","IRRIGATION","TIAN_DI_TU","MINI_MAP","CLUSTER_VIEW","defaultLogConfig","enabled","process","minLevel","prefix","currentLogConfig","log","level","componentName","message","_console","_console2","_console3","_console4","levels","minLevelIndex","indexOf","currentLevelIndex","concat","_len","arguments","length","args","Array","_key","console","debug","apply","info","warn","error","logger","component","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","notificationIdCounter","NotificationItem","id","type","title","duration","isClosing","onClose","actualDuration","timer","setTimeout","clearTimeout","getIcon","_jsxs","onClick","stopPropagation","Notification","forwardRef","_ref2","onCloseCallback","notifications","setNotifications","open","useCallback","_options$type","_options$duration","_toConsumableArray","close","n","filter","clear","useImperativeHandle","messageOrOptions","_typeof","success","warning","notification","PRESET_COLOR_SET","Set","ToolbarContext","BaseEditToolbar","visible","selectedId","_ref$currentMode","currentMode","_ref$enabledButtons","enabledButtons","buttons","isEditingFn","_ref$modeHints","modeHints","classPrefix","_ref$size","size","_ref$saveDisabled","saveDisabled","_ref$showHint","showHint","warningHint","color","_ref$iconOnly","iconOnly","onCancel","onSave","onCreate","onDelete","actionHandlers","notificationClosed","setNotificationClosed","notificationRef","isEditing","showNotification","_notificationRef$curr","clearNotification","_notificationRef$curr2","_notificationRef$curr3","_notificationRef$curr4","_notificationRef$curr5","handleNotificationClose","getButtonClassName","variant","btnColor","disabled","classes","effectiveColor","push","has","join","getButtonStyle","backgroundColor","borderColor","s","height","lineHeight","scale","padding","round","fontSize","handleClick","action","_actionHandlers$actio","preventDefault","editModeButtons","btn","normalButtons","includes","buttonsToRender","Boolean","isEditButton","isEnabled","isCreateButton","hasSelection","needsSelection","createDisabled","isDisabled","actualDisabled","showInEdit","tooltipText","tooltip","label","icon","PRESET_ICONS","SVG_MARKER_ICONS","PULSE_ICONS","LOADING_ICONS","DEFAULT_ICON_GROUPS","icons","name","_i","_DEFAULT_ICON_GROUPS","group","_iterator","_createForOfIteratorHelper","_step","done","err","f","MARKER_DEFAULT_ICON","iconSize","animated","MARKER_DEFAULT_SELECTED_ICON","MARKER_DEFAULT_EDIT_ICON","CLUSTER_DEFAULT_ICON","showCount","PRESET_ICONS_SET","isValidUrl","str","url","URL","startsWith","protocol","_unused","isDataUrl","detectIconType","src","isUrlByExtension","trim","toLowerCase","config","path","test","isPresetIcon","generateSvgHtml","svgIcon","_options$iconSize","_options$svgColor","svgColor","_options$svgStrokeCol","svgStrokeColor","_options$svgStrokeWid","svgStrokeWidth","_svgIcon$viewBox","viewBox","_svgIcon$fill","fill","_svgIcon$stroke","stroke","_svgIcon$strokeWidth","strokeWidth","escape","replace","svgIconToKey","slice","MARKER_COLORS","PIN_BODY_PATH","PIN_DOT_PATH","PIN_SHADOW_PATH","getMarkerAnchor","width","generateMarkerSvg","iconType","fillColor","shadowAnim","shadowAnimClose","bodyAnimOpen","bodyAnimClose","generatePositionSvg","pulseAnim","generateMonitorSvg","mainColor","baseColor","adjustColor","baseAnimOpen","baseAnimClose","amount","hex","r","max","min","parseInt","g","b","toString","padStart","generateAlertSvg","generateFlagSvg","flagAnimOpen","flagAnimClose","generateTargetSvg","generateWindSvg","arrowAnimOpen","arrowAnimClose","arrowColor1","arrowColor2","arrowColor3","outerAnim","outerAnimClose","innerAnimOpen","innerAnimClose","generateFlagDoubleSvg","secondaryColor","leftFlagAnimOpen","leftFlagAnimClose","rightFlagAnimOpen","rightFlagAnimClose","PULSE_COLORS","outer","inner","generatePulseSvg","pulseColor","generateUniversalPulseSvg","colors","generatePulseArrowSvg","innerAnim","outerColor","outerPulse","innerPulse","arrowAnim","generateLoadingSpinnerSvg","rotateAnim","generateLoadingDotsSvg","dotRadius","spacing","centerX","centerY","dots","i","x","bounceAnim","LRUCache","maxSize","_classCallCheck","Object","defineProperty","Map","Error","maxSize_","_createClass","key","get","cache","delete","set","firstKey","keys","next","values","getStats","utilization","sanitizeSvg","svgString","DOMParser","parser","doc","parseFromString","parseError","querySelector","querySelectorAll","forEach","el","dangerousAttrs","attr","removeAttribute","XMLSerializer","serializeToString","documentElement","generateTractorSvg","animateFront","animateRear","animateBody","generateTractor2Svg","generateTruckSvg","animateHub","animateHub2","generateTruck2Svg","animateWheelL","animateWheelC","animateWheelR","generateAgriDroneSvg","animateFloat","animatePropTL","animatePropTR","animatePropBL","animatePropBR","generateAgriDroneSideSvg","animatePropL","animatePropR","generateTractorTopdownSvg","animateWheelFL","animateWheelFR","animateWheelBL","animateWheelBR","NON_SPRITE_ICONS","MAX_STATIC_CACHE_SIZE","MAX_DYNAMIC_CACHE_SIZE","TwoLevelIconCache","maxDynamicSize","dynamicCache","setStatic","staticCache","setDynamic","staticIcon","clearDynamic","staticSize","dynamicSize","totalSize","staticMaxSize","dynamicMaxSize","staticUtilization","dynamicUtilization","iconCache","wrapInContainer","content","extraStyle","animatedClass","buildDivIcon","html","extraClassName","_options$iconAnchor","_options$popupAnchor","iconAnchor","popupAnchor","divIcon","createCacheKey","svgIconKey","customIconKey","createCachedIcon","customIcon","rawIconSize","_options$className","isArray","y","cacheKey","cached","createIconInternal","_options$iconAnchor2","_options$popupAnchor3","safeCustomIcon","isSvgString","isHttpUrl","isRelativePath","sanitized","svgHtml","vehicleIconGenerators","tractor","tractorTopdown","truck","vehicleGenerator","cssClass","safeIconType","markerSvgHtml","_options$iconAnchor3","_options$popupAnchor2","markerAnchor","isSpriteIcon","timingStyle","MarkerRedrawIcon","_ref$color","ariaLabel","_ref$ariaHidden","ariaHidden","d","DeleteIcon","_ref7","_ref7$size","_ref7$color","_ref7$ariaHidden","strokeLinecap","strokeLinejoin","points","x1","y1","x2","y2","CancelIcon","_ref8","_ref8$size","_ref8$color","_ref8$ariaHidden","SaveIcon","_ref9","_ref9$size","_ref9$color","_ref9$ariaHidden","CreateIcon","_ref0","_ref0$size","_ref0$color","_ref0$ariaHidden","EditIcon","_ref1","_ref1$size","_ref1$color","_ref1$ariaHidden","MARKER_BUTTONS","MarkerEditToolbar","selectedMarkerId","hintMessage","onEdit","onMove","create","move","edit","MapClickHandler","hasTempMarker","onMapClick","onMapClickWithoutMarker","_e$originalEvent","target","originalEvent","isToolbarElement","closest","isMarkerElement","latlng","container","getContainer","cursor","classList","add","LOADING_DEFAULT_MASK_BACKGROUND","LOADING_DEFAULT_MASK_ZINDEX","getDefaultClusterColor","count","renderCountSpan","getPresetIconHtml","createClusterIcon","_config$showCount","_config$icon","_config$animated5","render","floor","log2","_config$iconSize$min","_config$iconSize$max","thresholds","colorIndex","iconSource","detected","_config$animated","_config$animated2","isSvgMarker","isPulseIcon","iconHtml","countSpan","_config$animated3","safeUrl","_config$animated4","svgContent","svgConfig","svgIconSize","svgIconAnchor","countDiv","getFeatureId","feature","props","properties","cluster","cluster_id","isFeatureEqual","a","_a$geometry$coordinat","geometry","coordinates","lngA","latA","_b$geometry$coordinat","lngB","latB","propsA","propsB","point_count","ClusterView","clusterResults","markerIcon","clusterIconConfig","showTooltip","onClusterClick","onMarkerClick","getTooltipContent","markersMapRef","createClusterMarker","_icon$options","clusterProps","_feature$geometry$coo","marker","addTo","bindTooltip","permanent","direction","offset","createSingleMarker","_markerIcon$options$i","_markerIcon$options","_tooltipContent$title","_tooltipContent$descr","_tooltipContent$descr2","markerId","markerData","_feature$geometry$coo2","tooltipContent","iconHeight","tooltipHtml","description","updateMarkerTooltip","entry","isCluster","setTooltipContent","_ref3","_tooltipContent$title2","_tooltipContent$descr3","_tooltipContent$descr4","currentIds","currentFeatureMap","existing","oldFeature","_feature$geometry$coo3","setLatLng","newMarker","featureId","getTooltip","React","memo","useLatestRef","ThemeContext","setTheme","isDark","useTheme","FILTER_CONTAINER_ID","DARK_FILTER_ID","svgFilterInjected","ensureDarkFilterInjected","document","getElementById","svgFilters","createElementNS","setAttribute","defs","darkFilter","colorMatrix","componentTransfer","feFuncR","feFuncG","feFuncB","feFuncA","appendChild","body","LAYER_TYPES","VECTOR","SATELLITE","TERRAIN","LAYER_LABELS","_defineProperty","LAYER_URLS","base","annotation","TianDiTuLayer","apiKey","_ref$showAnnotation","showAnnotation","_ref$layerType","layerType","layerTypeProp","tileUrl","annotationUrl","overlayUrl","subdomains","_maxZoom","_minZoom","_ref$attribution","attribution","themeProp","_ref$showLayerSelecto","showLayerSelector","onLayerTypeChange","currentLayerType","setCurrentLayerType","_useState3","_useState4","selectorVisible","setSelectorVisible","baseLayerRef","annotationLayerRef","overlayLayerRef","handleLayerChange","isDarkTheme","mapContainer","baseLayer","tileLayer","annotationLayer","useCustomUrl","layerConfig","setUrl","overlayLayer","LayerSelector","_Fragment","createPortal","hexToRgba","toFixed","DualScaleControl","configProp","scaleColorProp","scaleColor","controlBgProp","controlBg","controlTextProp","controlText","configContext","getConfig","_config$metric","_config$imperial","metric","imperial","shouldShow","contextConfig","dualScaleControl","finalConfig","_getConfig","scaleRef","textRef","mapInstance","animationFrameId","isCleanup","existingContainers","DomUtil","textEl","getControlColors","bg","text","isSatelliteLight","isTerrainDark","needDarkControl","_getControlColors","setProperty","getRoundNum","distance","isFinite","exponent","LN10","fraction","pow","roundedFraction","getCandidateMeters","targetMeters","m","update","isDestroyed","mapAny","_loaded","_mapPane","contains","mapSize","getSize","west","getWest","east","getEast","centerLat","point1","latLng","point2","maxMeters","metersPerPixel","targetPixels","candidates","bestMeters","bestDiff","Infinity","meters","pixels","diff","tickInterval","displayDistance","displayText","getMetricText","getImperialText","textContent","feet","safeUpdate","removeChild","MapSizeHandler","_ref$enabled","_ref$delay","delay","_ref$retries","retries","initialized","timers","from","_","invalidateSize","ZoomControl","_ref$position","zoomControlRef","zoomLevelRef","controlColors","existingControls","layerSelector","hasLayerSelector","checkVisibility","positionStyles","topleft","top","left","bottom","right","topright","bottomleft","bottomright","assign","zoomIn","innerHTML","zoomLevel","zoomOut","DomEvent","updateZoomLevel","String","layerSelectorObserver","MutationObserver","isVisible","observe","attributes","attributeFilter","subtree","disconnect","noop","FullscreenControl","fullscreenControlRef","fullscreenControl","zIndex","display","alignItems","justifyContent","borderRadius","boxShadow","transition","addEventListener","iconContainer","renderIcon","isFullscreen","isCurrentlyFullscreen","fullscreenElement","handleFullscreenChange","_mapContainer$request","requestFullscreen","catch","_document$exitFullscr","_document","exitFullscreen","removeEventListener","Loading","_ref$icon","mask","sizeMap","small","default","large","maskConfig","_mask$enabled","background","flexDirection","gap","dangerouslySetInnerHTML","__html","_maskConfig$zIndex","pointerEvents","getDualScaleControlConfig","getMapSizeHandlerConfig","getZoomControlConfig","getFullscreenControlConfig","MapContainer","_ref$zoom","_ref$radius","radius","_ref$maxZoom","_ref$scrollWheelZoom","_ref$zoomControl","_ref$attributionContr","whenReady","tianDiTuLayer","mapSizeHandler","loading","fullscreen","_useTheme","globalTheme","mergedStyle","defaultStyle","dualScaleConfig","mapSizeConfig","zoomControlConfig","fullscreenConfig","configValue","tianDiTuLayerValue","useLifecycle","componentType","dataSource","currentState","isRendered","renderStats","isMounted","hasRendered","prevStatusRef","dataLengthRef","dataSourceRef","renderStatsRef","_lifecycleRef$current","_lifecycleRef$current2","shouldContinue","onBeforeMount","_lifecycleRef$current5","_lifecycleRef$current6","_lifecycleRef$current3","_lifecycleRef$current4","onFirstRender","totalCount","renderedCount","virtualized","prevStatus","stateChanged","mode","plotId","roadId","irrigationId","_lifecycleRef$current7","_lifecycleRef$current8","onStateChange","_lifecycleRef$current9","_lifecycleRef$current0","onBeforeUnmount","useEditMode","editModeProp","defaultButtons","editEnabled","toolbar","customToolbar","useLoadingOverlay","loadingMask","_options$icon","_options$size","_loadingMask$zIndex","maskEnabled","maskBackground","maskZIndex","getDistance","latlng1","latlng2","distanceTo","useRafThrottle","callback","rafRef","lastArgsRef","callbackRef","throttledFn","useDebouncedCallback","timerRef","debouncedFn","fn","cancel","useViewportDebounce","_options$zoomDebounce","zoomDebounceDelay","_options$moveDebounce","moveDebounceDelay","_options$useRaf","useRaf","_options$listenResize","listenResize","realtimeZoom","setRealtimeZoom","realtimeViewVersion","setRealtimeViewVersion","realtimeBoundsRef","realtimeCenterRef","_useState5","_useState6","debouncedZoom","setDebouncedZoom","_useState7","_useState8","debouncedViewVersion","setDebouncedViewVersion","_useState9","_useState0","debouncedBounds","setDebouncedBounds","_useState1","_useState10","debouncedCenter","setDebouncedCenter","debouncedSetZoom","debouncedSetViewVersion","version","throttledSetViewVersion","forceUpdate","v","initialZoom","initialBounds","initialCenter","handleZoomEnd","handleMoveEnd","newVersion","handleResize","realtime","viewVersion","nextRegistryId","layerRegistry","registry","register","getData","_layerRegistry$get","unregister","useNormalizedDataSource","defaultFieldNames","fieldNames","validation","mapper","mergedFieldNames","result","_Object$entries","entries","_Object$entries$_i","_useMemo","validatedData","validationResult","total","valid","invalid","errors","validItems","item","index","isValid","requiredFields","field","fieldValue","coordinateFields","coordinateBounds","_iterator2","_step2","coord","_coord","customValidator","customResult","mappedData","fitBoundsRegistry","data","useAutoFit","autoFit","getCoordinates","hasFittedRef","_options$padding","_options$maxZoom","allCoords","coords","latLngBounds","fitBounds","triggerFit","hasFitted","isValidIconConfig","val","parseIconConfig","iconConfig","normalizeIconSize","_size","useIconConfig","_config$marker","iconProp","selectedIconProp","selectedIcon","configEditingIcon","editing","mergedDefaultIconConfig","_parsed$icon","source","parsed","mergedSelectedIconConfig","mergedEditingIconConfig","resolvedIcon","resolvedSvgIcon","resolvedCustomIcon","getItemIcon","isSelected","isTemp","itemIconType","itemSvgIcon","itemCustomIcon","itemAnimated","itemIconSize","itemIconAnchor","itemPopupAnchor","itemColor","styleConfig","effectiveSelected","isItemSvgMarker","defaultItemAnchor","effectiveItemIconAnchor","effectiveItemPopupAnchor","itemIconOptions","getItemPermanent","getTooltipOffset","safeCall","useEditHandlers","enabledButtonsRef","handleSelect","onCreateRef","onEditRef","onDeleteRef","onSaveRef","closeTooltip","setCurrentMode","tempMarker","setTempMarker","dragPosition","setDragPosition","dragStartPosRef","handleCreate","_enabledButtonsRef$cu","handleEdit","_enabledButtonsRef$cu2","find","handleMove","_enabledButtonsRef$cu3","handleDelete","_enabledButtonsRef$cu4","handleCancel","originalMarker","_restorePositionRef$c","restorePositionRef","handleCancelRef","handleKeyDown","window","exitCreateMode","exitEditMode","handleMapClick","Date","now","handleSave","handleDragEnd","getLatLng","newPos","setDragStartPos","setRestorePosition","calcFlyDuration","to","minDuration","maxDuration","log10","useMarkerCommands","onClickRef","onRowRef","setActiveTooltipId","setTooltipContentMap","localDataRef","openTooltip","openAllTooltips","updateTooltipContent","newMap","getSelected","setSelected","_onClickRef$current","_onRowRef$current","_rowEvents$onClick","findIndex","rowEvents","clearSelection","targetData","once","flyTo","currentCenter","targetCenter","flyToBounds","_options$zoom","targetZoom","editType","targetId","getLocalData","useMarkerIncrementalUpdate","getPermanent","editMode","activeTooltipId","tooltipContentMap","onContextMenu","onDragEnd","onRow","createMarker","_onRow","isDraggable","draggable","_originalPosition","restoreOriginalPosition","updateMarker","oldData","oldHasTooltip","hasTooltip","lastIcon","_onRow2","wasSelected","selectionChanged","iconInstanceChanged","setIcon","_marker$dragging","dragging","enable","_marker$dragging2","disable","currentPopupAnchor","popupAnchorChanged","lastPopupAnchor","unbindTooltip","updateMarkers","displayMarkers","existingIds","_item$icon$popupAncho","_item$icon$popupAncho2","clearMarkers","getMarkerCount","restoreMarkerPosition","originalPosition","parseDisplayModeConfig","displayModeConfig","_config$radius","_config$maxZoom","_config$minPoints","_config$onClickBehavi","minPoints","onClickBehavior","DEFAULT_FIELD_NAMES","MarkerRenderer","handleContextMenu","_useMarkerIncremental","validMarkers","Marker","_config$marker2","_ref2$dataSource","_ref2$permanent","styleProp","_ref2$editMode","onSelect","valueProp","defaultValue","_ref2$showEditHint","showEditHint","onLoaded","displayMode","_ref2$loading","_ref2$autoFit","_useNormalizedDataSou","_position","normalizedData","prevDataSourceLengthRef","len","_useEditMode","internalValue","setInternalValue","isControlled","displayModeEnabled","isValidClusterIconConfig","clusterConfig","_useViewportDebounce","clusterIndex","features","Supercluster","load","getClusters","getSouth","getNorth","onClusterClickRef","clusterIndexRef","handleClusterClick","_onClusterClickRef$cu","leaves","getLeaves","markers","l","leafBounds","expansionZoom","getClusterExpansionZoom","setView","animate","defaultMarkerIcon","_iconConfig$iconSize","_iconConfig$animated","iconValue","onContextMenuRef","onSelectRef","_onSelectRef$current","onMoveRef","useClusterRender","_useIconConfig","events","isCurrentSelected","newSelectedId","_events$onClick","_onContextMenuRef$cur","_events$onContextMenu","_dragPosition","_setDragPosition","loadingOverlay","prevEditModeRef","currentMarkerData","prevMode","_onClickRef$current2","_tooltipContentMap$ge","_tooltipContentMap$ge2","_tooltipContentMap$ge3","_tooltipContentMap$ge4"],"mappings":"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","x_google_ignoreList":[0,1,8,17]}
1
+ {"version":3,"file":"marker.esm.js","sources":["../../node_modules/kdbush/index.js","../../node_modules/supercluster/index.js","../../src/hooks/useMapLifecycle.ts","../../src/context/MapContext.tsx","../../src/context/ConfigContext.tsx","../../src/utils/errorHandling.ts","../../src/components/Notification/index.tsx","../../src/components/shared/BaseEditToolbar.tsx","../../node_modules/dompurify/dist/purify.es.mjs","../../src/constants/icon.ts","../../src/utils/iconUtils.ts","../../src/utils/markerSvg.ts","../../src/utils/pulseIcon.ts","../../src/utils/LRUCache.ts","../../src/utils/svgUtils.ts","../../src/utils/icons/index.ts","../../src/utils/iconCache.ts","../../node_modules/style-inject/dist/style-inject.es.js","../../src/components/Icons/index.tsx","../../src/components/Marker/toolbar.tsx","../../src/components/Marker/MapClickHandler.tsx","../../src/constants/styles.ts","../../src/utils/clusterIcon.ts","../../src/components/Marker/ClusterView.tsx","../../src/components/shared/Label3D.tsx","../../src/hooks/useLatestRef.ts","../../src/context/ThemeContext.tsx","../../src/utils/darkThemeFilter.ts","../../src/components/TianDiTuLayer/index.tsx","../../src/components/DualScaleControl/index.tsx","../../src/components/MapSizeHandler/index.tsx","../../src/components/ZoomControl/index.tsx","../../src/components/FullscreenControl/index.tsx","../../src/components/Loading/index.tsx","../../src/components/MapContainer/index.tsx","../../src/hooks/useLifecycle.ts","../../src/hooks/useEditMode.ts","../../src/hooks/useLoadingOverlay.tsx","../../src/utils/geometry.ts","../../src/utils/rafThrottle.ts","../../src/hooks/useViewportDebounce.ts","../../src/hooks/useUnifiedFitBounds.ts","../../src/hooks/useNormalizedDataSource.ts","../../src/hooks/useAutoFit.ts","../../src/components/Marker/useIconConfig.ts","../../src/components/Marker/useEditHandlers.ts","../../src/utils/mapAnimation.ts","../../src/components/Marker/useMarkerCommands.ts","../../src/components/Marker/useMarkerIncrementalUpdate.ts","../../src/components/Marker/parseDisplayModeConfig.ts","../../src/components/Marker/index.tsx"],"sourcesContent":["\nconst ARRAY_TYPES = [\n Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n Int32Array, Uint32Array, Float32Array, Float64Array\n];\n\n/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor} TypedArrayConstructor */\n\nconst VERSION = 1; // serialized format version\nconst HEADER_SIZE = 8;\n\nexport default class KDBush {\n\n /**\n * Creates an index from raw `ArrayBuffer` data.\n * @param {ArrayBuffer} data\n */\n static from(data) {\n if (!(data instanceof ArrayBuffer)) {\n throw new Error('Data must be an instance of ArrayBuffer.');\n }\n const [magic, versionAndType] = new Uint8Array(data, 0, 2);\n if (magic !== 0xdb) {\n throw new Error('Data does not appear to be in a KDBush format.');\n }\n const version = versionAndType >> 4;\n if (version !== VERSION) {\n throw new Error(`Got v${version} data when expected v${VERSION}.`);\n }\n const ArrayType = ARRAY_TYPES[versionAndType & 0x0f];\n if (!ArrayType) {\n throw new Error('Unrecognized array type.');\n }\n const [nodeSize] = new Uint16Array(data, 2, 1);\n const [numItems] = new Uint32Array(data, 4, 1);\n\n return new KDBush(numItems, nodeSize, ArrayType, data);\n }\n\n /**\n * Creates an index that will hold a given number of items.\n * @param {number} numItems\n * @param {number} [nodeSize=64] Size of the KD-tree node (64 by default).\n * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n * @param {ArrayBuffer} [data] (For internal use only)\n */\n constructor(numItems, nodeSize = 64, ArrayType = Float64Array, data) {\n if (isNaN(numItems) || numItems < 0) throw new Error(`Unpexpected numItems value: ${numItems}.`);\n\n this.numItems = +numItems;\n this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n this.ArrayType = ArrayType;\n this.IndexArrayType = numItems < 65536 ? Uint16Array : Uint32Array;\n\n const arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n const coordsByteSize = numItems * 2 * this.ArrayType.BYTES_PER_ELEMENT;\n const idsByteSize = numItems * this.IndexArrayType.BYTES_PER_ELEMENT;\n const padCoords = (8 - idsByteSize % 8) % 8;\n\n if (arrayTypeIndex < 0) {\n throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n }\n\n if (data && (data instanceof ArrayBuffer)) { // reconstruct an index from a buffer\n this.data = data;\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = numItems * 2;\n this._finished = true;\n } else { // initialize a new index\n this.data = new ArrayBuffer(HEADER_SIZE + coordsByteSize + idsByteSize + padCoords);\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = 0;\n this._finished = false;\n\n // set header\n new Uint8Array(this.data, 0, 2).set([0xdb, (VERSION << 4) + arrayTypeIndex]);\n new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n new Uint32Array(this.data, 4, 1)[0] = numItems;\n }\n }\n\n /**\n * Add a point to the index.\n * @param {number} x\n * @param {number} y\n * @returns {number} An incremental index associated with the added item (starting from `0`).\n */\n add(x, y) {\n const index = this._pos >> 1;\n this.ids[index] = index;\n this.coords[this._pos++] = x;\n this.coords[this._pos++] = y;\n return index;\n }\n\n /**\n * Perform indexing of the added points.\n */\n finish() {\n const numAdded = this._pos >> 1;\n if (numAdded !== this.numItems) {\n throw new Error(`Added ${numAdded} items when expected ${this.numItems}.`);\n }\n // kd-sort both arrays for efficient search\n sort(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0);\n\n this._finished = true;\n return this;\n }\n\n /**\n * Search the index for items within a given bounding box.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @returns {number[]} An array of indices correponding to the found items.\n */\n range(minX, minY, maxX, maxY) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n\n // recursively search for items in range in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n\n /**\n * Search the index for items within a given radius.\n * @param {number} qx\n * @param {number} qy\n * @param {number} r Query radius.\n * @returns {number[]} An array of indices correponding to the found items.\n */\n within(qx, qy, r) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n const r2 = r * r;\n\n // recursively search for items within radius in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (sqDist(x, y, qx, qy) <= r2) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} nodeSize\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction sort(ids, coords, nodeSize, left, right, axis) {\n if (right - left <= nodeSize) return;\n\n const m = (left + right) >> 1; // middle index\n\n // sort ids and coords around the middle index so that the halves lie\n // either left/right or top/bottom correspondingly (taking turns)\n select(ids, coords, m, left, right, axis);\n\n // recursively kd-sort first half and second half on the opposite axis\n sort(ids, coords, nodeSize, left, m - 1, 1 - axis);\n sort(ids, coords, nodeSize, m + 1, right, 1 - axis);\n}\n\n/**\n * Custom Floyd-Rivest selection algorithm: sort ids and coords so that\n * [left..k-1] items are smaller than k-th item (on either x or y axis)\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} k\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction select(ids, coords, k, left, right, axis) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, axis);\n }\n\n const t = coords[2 * k + axis];\n let i = left;\n let j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + axis] > t) swapItem(ids, coords, left, right);\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + axis] < t) i++;\n while (coords[2 * j + axis] > t) j--;\n }\n\n if (coords[2 * left + axis] === t) swapItem(ids, coords, left, j);\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} i\n * @param {number} j\n */\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\n/**\n * @param {InstanceType<TypedArrayConstructor>} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction sqDist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n","\nimport KDBush from 'kdbush';\n\nconst defaultOptions = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n minPoints: 2, // minimum points to form a cluster\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // whether to generate numeric ids for input features (in vector tiles)\n generateId: false,\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: props => props // props => ({sum: props.my_value})\n};\n\nconst fround = Math.fround || (tmp => ((x) => { tmp[0] = +x; return tmp[0]; }))(new Float32Array(1));\n\nconst OFFSET_ZOOM = 2;\nconst OFFSET_ID = 3;\nconst OFFSET_PARENT = 4;\nconst OFFSET_NUM = 5;\nconst OFFSET_PROP = 6;\n\nexport default class Supercluster {\n constructor(options) {\n this.options = Object.assign(Object.create(defaultOptions), options);\n this.trees = new Array(this.options.maxZoom + 1);\n this.stride = this.options.reduce ? 7 : 6;\n this.clusterProps = [];\n }\n\n load(points) {\n const {log, minZoom, maxZoom} = this.options;\n\n if (log) console.time('total time');\n\n const timerId = `prepare ${ points.length } points`;\n if (log) console.time(timerId);\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n const data = [];\n\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n if (!p.geometry) continue;\n\n const [lng, lat] = p.geometry.coordinates;\n const x = fround(lngX(lng));\n const y = fround(latY(lat));\n // store internal point/cluster data in flat numeric arrays for performance\n data.push(\n x, y, // projected point coordinates\n Infinity, // the last zoom the point was processed at\n i, // index of the source feature in the original input array\n -1, // parent cluster id\n 1 // number of points in a cluster\n );\n if (this.options.reduce) data.push(0); // noop\n }\n let tree = this.trees[maxZoom + 1] = this._createTree(data);\n\n if (log) console.timeEnd(timerId);\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (let z = maxZoom; z >= minZoom; z--) {\n const now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n tree = this.trees[z] = this._createTree(this._cluster(tree, z));\n\n if (log) console.log('z%d: %d clusters in %dms', z, tree.numItems, +Date.now() - now);\n }\n\n if (log) console.timeEnd('total time');\n\n return this;\n }\n\n getClusters(bbox, zoom) {\n let minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n const minLat = Math.max(-90, Math.min(90, bbox[1]));\n let maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n const maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n const easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n const westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n const tree = this.trees[this._limitZoom(zoom)];\n const ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n const data = tree.data;\n const clusters = [];\n for (const id of ids) {\n const k = this.stride * id;\n clusters.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n return clusters;\n }\n\n getChildren(clusterId) {\n const originId = this._getOriginId(clusterId);\n const originZoom = this._getOriginZoom(clusterId);\n const errorMsg = 'No cluster with the specified id.';\n\n const tree = this.trees[originZoom];\n if (!tree) throw new Error(errorMsg);\n\n const data = tree.data;\n if (originId * this.stride >= data.length) throw new Error(errorMsg);\n\n const r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n const x = data[originId * this.stride];\n const y = data[originId * this.stride + 1];\n const ids = tree.within(x, y, r);\n const children = [];\n for (const id of ids) {\n const k = id * this.stride;\n if (data[k + OFFSET_PARENT] === clusterId) {\n children.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n }\n\n if (children.length === 0) throw new Error(errorMsg);\n\n return children;\n }\n\n getLeaves(clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n const leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n }\n\n getTile(z, x, y) {\n const tree = this.trees[this._limitZoom(z)];\n const z2 = Math.pow(2, z);\n const {extent, radius} = this.options;\n const p = radius / extent;\n const top = (y - p) / z2;\n const bottom = (y + 1 + p) / z2;\n\n const tile = {\n features: []\n };\n\n this._addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.data, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.data, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.data, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n }\n\n getClusterExpansionZoom(clusterId) {\n let expansionZoom = this._getOriginZoom(clusterId) - 1;\n while (expansionZoom <= this.options.maxZoom) {\n const children = this.getChildren(clusterId);\n expansionZoom++;\n if (children.length !== 1) break;\n clusterId = children[0].properties.cluster_id;\n }\n return expansionZoom;\n }\n\n _appendLeaves(result, clusterId, limit, offset, skipped) {\n const children = this.getChildren(clusterId);\n\n for (const child of children) {\n const props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) break;\n }\n\n return skipped;\n }\n\n _createTree(data) {\n const tree = new KDBush(data.length / this.stride | 0, this.options.nodeSize, Float32Array);\n for (let i = 0; i < data.length; i += this.stride) tree.add(data[i], data[i + 1]);\n tree.finish();\n tree.data = data;\n return tree;\n }\n\n _addTileFeatures(ids, data, x, y, z2, tile) {\n for (const i of ids) {\n const k = i * this.stride;\n const isCluster = data[k + OFFSET_NUM] > 1;\n\n let tags, px, py;\n if (isCluster) {\n tags = getClusterProperties(data, k, this.clusterProps);\n px = data[k];\n py = data[k + 1];\n } else {\n const p = this.points[data[k + OFFSET_ID]];\n tags = p.properties;\n const [lng, lat] = p.geometry.coordinates;\n px = lngX(lng);\n py = latY(lat);\n }\n\n const f = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags\n };\n\n // assign id\n let id;\n if (isCluster || this.options.generateId) {\n // optionally generate id for points\n id = data[k + OFFSET_ID];\n } else {\n // keep id if already assigned\n id = this.points[data[k + OFFSET_ID]].id;\n }\n\n if (id !== undefined) f.id = id;\n\n tile.features.push(f);\n }\n }\n\n _limitZoom(z) {\n return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n }\n\n _cluster(tree, zoom) {\n const {radius, extent, reduce, minPoints} = this.options;\n const r = radius / (extent * Math.pow(2, zoom));\n const data = tree.data;\n const nextData = [];\n const stride = this.stride;\n\n // loop through each point\n for (let i = 0; i < data.length; i += stride) {\n // if we've already visited the point at this zoom level, skip it\n if (data[i + OFFSET_ZOOM] <= zoom) continue;\n data[i + OFFSET_ZOOM] = zoom;\n\n // find all nearby points\n const x = data[i];\n const y = data[i + 1];\n const neighborIds = tree.within(data[i], data[i + 1], r);\n\n const numPointsOrigin = data[i + OFFSET_NUM];\n let numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n // filter out neighbors that are already processed\n if (data[k + OFFSET_ZOOM] > zoom) numPoints += data[k + OFFSET_NUM];\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n let wx = x * numPointsOrigin;\n let wy = y * numPointsOrigin;\n\n let clusterProperties;\n let clusterPropIndex = -1;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n const id = ((i / stride | 0) << 5) + (zoom + 1) + this.points.length;\n\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom; // save the zoom (so it doesn't get processed twice)\n\n const numPoints2 = data[k + OFFSET_NUM];\n wx += data[k] * numPoints2; // accumulate coordinates for calculating weighted center\n wy += data[k + 1] * numPoints2;\n\n data[k + OFFSET_PARENT] = id;\n\n if (reduce) {\n if (!clusterProperties) {\n clusterProperties = this._map(data, i, true);\n clusterPropIndex = this.clusterProps.length;\n this.clusterProps.push(clusterProperties);\n }\n reduce(clusterProperties, this._map(data, k));\n }\n }\n\n data[i + OFFSET_PARENT] = id;\n nextData.push(wx / numPoints, wy / numPoints, Infinity, id, -1, numPoints);\n if (reduce) nextData.push(clusterPropIndex);\n\n } else { // left points as unclustered\n for (let j = 0; j < stride; j++) nextData.push(data[i + j]);\n\n if (numPoints > 1) {\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom;\n for (let j = 0; j < stride; j++) nextData.push(data[k + j]);\n }\n }\n }\n }\n\n return nextData;\n }\n\n // get index of the point from which the cluster originated\n _getOriginId(clusterId) {\n return (clusterId - this.points.length) >> 5;\n }\n\n // get zoom of the point from which the cluster originated\n _getOriginZoom(clusterId) {\n return (clusterId - this.points.length) % 32;\n }\n\n _map(data, i, clone) {\n if (data[i + OFFSET_NUM] > 1) {\n const props = this.clusterProps[data[i + OFFSET_PROP]];\n return clone ? Object.assign({}, props) : props;\n }\n const original = this.points[data[i + OFFSET_ID]].properties;\n const result = this.options.map(original);\n return clone && result === original ? Object.assign({}, result) : result;\n }\n}\n\nfunction getClusterJSON(data, i, clusterProps) {\n return {\n type: 'Feature',\n id: data[i + OFFSET_ID],\n properties: getClusterProperties(data, i, clusterProps),\n geometry: {\n type: 'Point',\n coordinates: [xLng(data[i]), yLat(data[i + 1])]\n }\n };\n}\n\nfunction getClusterProperties(data, i, clusterProps) {\n const count = data[i + OFFSET_NUM];\n const abbrev =\n count >= 10000 ? `${Math.round(count / 1000) }k` :\n count >= 1000 ? `${Math.round(count / 100) / 10 }k` : count;\n const propIndex = data[i + OFFSET_PROP];\n const properties = propIndex === -1 ? {} : Object.assign({}, clusterProps[propIndex]);\n return Object.assign(properties, {\n cluster: true,\n cluster_id: data[i + OFFSET_ID],\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n const sin = Math.sin(lat * Math.PI / 180);\n const y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n const y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n","/**\n * @fileoverview 地图生命周期管理 Hook(极简方案)\n * @description 为 MapContainer 提供极简的生命周期管理\n * @since 1.4.0\n * @module hooks/useMapLifecycle\n *\n * @example\n * ```tsx\n * useMapLifecycle({\n * map,\n * lifecycle: {\n * onMapReady: ({ map }) => console.log('地图就绪'),\n * onViewportChange: (data) => saveViewport(data),\n * },\n * isReady: true,\n * });\n * ```\n */\n\n/* eslint-disable react-hooks/exhaustive-deps -- ref 回调稳定 */\n\nimport { useEffect, useRef } from 'react';\nimport type L from 'leaflet';\nimport type { MapLifecycleConfig } from '../types/mapLifecycle';\n\n/**\n * useMapLifecycle 配置选项\n */\nexport interface UseMapLifecycleOptions {\n /** 地图实例 */\n map: L.Map | null;\n /** 生命周期配置 */\n lifecycle?: MapLifecycleConfig;\n /** 地图是否已就绪 */\n isReady: boolean;\n}\n\n/**\n * 地图生命周期管理 Hook(极简方案)\n * @description 只管理两个核心生命周期事件:onMapReady 和 onViewportChange\n *\n * @param options - 配置选项\n *\n * @example\n * ```tsx\n * function MapProvider({ lifecycle, children }) {\n * const [map, setMap] = useState(null);\n * const [isReady, setIsReady] = useState(false);\n *\n * // 初始化地图\n * useEffect(() => {\n * const newMap = L.map(containerRef.current);\n * setMap(newMap);\n * setIsReady(true);\n * }, []);\n *\n * // 生命周期管理\n * useMapLifecycle({ map, lifecycle, isReady });\n *\n * return <div>{children}</div>;\n * }\n * ```\n */\nexport function useMapLifecycle(options: UseMapLifecycleOptions): void {\n const { map, lifecycle, isReady } = options;\n const hasReadyFired = useRef(false);\n const prevViewportRef = useRef<{ center: L.LatLng; zoom: number } | null>(null);\n const rafIdRef = useRef<number | null>(null);\n\n // ========== MOUNT: onMapReady ==========\n useEffect(() => {\n // 必须地图实例存在且已就绪\n if (!map || !isReady) {\n return;\n }\n\n // 防止重复触发\n if (hasReadyFired.current) {\n return;\n }\n\n hasReadyFired.current = true;\n\n // 触发 onMapReady 回调\n lifecycle?.onMapReady?.({ map });\n\n // 注意:不在这里监听 'load' 事件\n // 因为现代浏览器和 Leaflet 版本中,'load' 事件可能不会触发\n // 如果需要知道瓦片加载完成,应该在 TileLayer 中监听\n }, [map, isReady]);\n\n // ========== UPDATE: onViewportChange ==========\n useEffect(() => {\n // 必须地图实例存在且已就绪\n if (!map || !isReady || !lifecycle?.onViewportChange) {\n return;\n }\n\n /**\n * 视口变化处理函数\n * @description 使用 RAF 防抖,避免高频触发\n */\n const handleViewportChange = (_triggerEvent: 'moveend' | 'zoomend') => {\n // 如果已有 RAF 待执行,跳过\n if (rafIdRef.current !== null) {\n return;\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n const center = map.getCenter();\n const zoom = map.getZoom();\n const bounds = map.getBounds();\n\n // 检测是否真的发生了变化(避免重复触发)\n const prev = prevViewportRef.current;\n const hasChanged =\n !prev ||\n Math.abs(prev.center.lat - center.lat) > 0.0001 ||\n Math.abs(prev.center.lng - center.lng) > 0.0001 ||\n Math.abs(prev.zoom - zoom) > 0.001;\n\n if (hasChanged) {\n // 触发回调\n lifecycle.onViewportChange?.({\n center,\n zoom,\n bounds,\n });\n\n // 更新上一个视口引用\n prevViewportRef.current = { center, zoom };\n }\n\n // 清除 RAF ID\n rafIdRef.current = null;\n });\n };\n\n // 监听移动和缩放事件\n map.on('moveend', () => handleViewportChange('moveend'));\n map.on('zoomend', () => handleViewportChange('zoomend'));\n\n // 清理函数\n return () => {\n // 清除待执行的 RAF\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n\n // 移除事件监听\n map.off('moveend');\n map.off('zoomend');\n };\n }, [map, isReady, lifecycle?.onMapReady, lifecycle?.onViewportChange]);\n\n // ========== UNMOUNT: 清理 ==========\n useEffect(() => {\n return () => {\n // 清除待执行的 RAF\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n };\n }, []);\n}\n\nexport default useMapLifecycle;\n","/**\n * @fileoverview 地图上下文 - 替代 react-leaflet 的 MapContainer 和 useMap\n * @description 提供地图实例的上下文管理和访问 Hook,API 与 react-leaflet 保持一致\n * @module context/MapContext\n * @since 2.0.0\n * @since 1.4.0 添加极简生命周期管理支持\n */\n\n/* eslint-disable react-hooks/exhaustive-deps -- 地图配置选项变更频率低 */\n\nimport React, { createContext, useContext, useRef, useEffect, useState, useMemo } from 'react';\nimport L from 'leaflet';\nimport { useMapLifecycle } from '../hooks/useMapLifecycle';\nimport type { MapLifecycleConfig } from '../types/mapLifecycle';\n\n// ========== 类型定义 ==========\n\n/**\n * 地图上下文值\n */\nexport interface MapContextValue {\n /** Leaflet 地图实例 */\n map: L.Map | null;\n /** 地图实例 ref(用于命令式访问) */\n mapRef: React.MutableRefObject<L.Map | null>;\n /** 地图是否已初始化完成 */\n isReady: boolean;\n}\n\n/**\n * MapProvider 组件属性\n */\nexport interface MapProviderProps {\n /** 子组件 */\n children: React.ReactNode;\n /** 初始中心点 */\n center: [number, number];\n /** 初始缩放级别 */\n zoom: number;\n /** Leaflet 地图选项 */\n options?: L.MapOptions;\n /** 地图初始化完成回调 */\n onReady?: (map: L.Map) => void;\n /** 容器样式 */\n style?: React.CSSProperties;\n /** 容器类名 */\n className?: string;\n /** 是否在组件卸载时销毁地图 */\n destroyOnUnmount?: boolean;\n /**\n * 地图生命周期回调配置\n * @since 1.4.0\n * @description 极简方案:只保留 onMapReady 和 onViewportChange\n * @example\n * ```tsx\n * lifecycle={{\n * onMapReady: ({ map }) => console.log('地图就绪'),\n * onViewportChange: (data) => saveViewport(data),\n * }}\n * ```\n */\n lifecycle?: MapLifecycleConfig;\n}\n\n// ========== Context 创建 ==========\n\nconst MapContext = createContext<MapContextValue>({\n map: null,\n mapRef: { current: null },\n isReady: false,\n});\n\nMapContext.displayName = 'MapContext';\n\n// ========== Hook 导出 ==========\n\n/**\n * 获取地图实例的 Hook\n * @description 与 react-leaflet 的 useMap API 保持一致,方便迁移\n * @returns Leaflet 地图实例,如果地图未初始化则返回 null\n * @example\n * ```tsx\n * const map = useMap();\n *\n * useEffect(() => {\n * if (!map) return;\n * // 使用地图实例\n * map.fitBounds(bounds);\n * }, [map]);\n * ```\n */\nexport const useMap = (): L.Map | null => {\n const { map } = useContext(MapContext);\n return map;\n};\n\n/**\n * 获取地图实例(保证非空)\n * @description 如果地图未初始化则抛出错误,用于确定地图一定存在的场景\n * @returns 地图实例\n * @throws 如果地图未初始化\n * @example\n * ```tsx\n * function MyComponent() {\n * // 组件在 MapProvider 内部,map 一定存在\n * const map = useMapGuaranteed();\n * // TypeScript 知道 map 不是 null\n * map.fitBounds(bounds);\n * }\n * ```\n */\nexport const useMapGuaranteed = (): L.Map => {\n const map = useMap();\n if (!map) {\n throw new Error(\n 'Map is not available. Make sure you are inside a MapProvider and the map has been initialized.'\n );\n }\n return map;\n};\n\n/**\n * 获取地图实例 ref 的 Hook\n * @description 用于在事件处理器中获取最新地图实例(避免闭包问题)\n * @returns 地图实例 ref\n */\nexport const useMapRef = (): React.MutableRefObject<L.Map | null> => {\n const { mapRef } = useContext(MapContext);\n return mapRef;\n};\n\n/**\n * 判断地图是否就绪的 Hook\n * @returns 地图是否已初始化完成\n */\nexport const useMapReady = (): boolean => {\n const { isReady } = useContext(MapContext);\n return isReady;\n};\n\n/**\n * 获取完整上下文值的 Hook\n * @description 用于需要同时访问 map、mapRef、isReady 的场景\n * @returns 地图上下文值\n */\nexport const useMapContext = (): MapContextValue => {\n return useContext(MapContext);\n};\n\n// ========== Provider 组件 ==========\n\n/**\n * 地图容器 Provider 组件\n * @description 替代 react-leaflet 的 MapContainer,提供地图实例上下文\n * @example\n * ```tsx\n * import { MapProvider, useMapInstance } from 'agri-map-components';\n *\n * function MyMapComponent() {\n * return (\n * <MapProvider center={[30, 120]} zoom={10}>\n * <MyLayer />\n * </MapProvider>\n * );\n * }\n *\n * function MyLayer() {\n * const map = useMapInstance();\n * // 使用 map...\n * return null;\n * }\n * ```\n */\nexport const MapProvider: React.FC<MapProviderProps> = ({\n children,\n center,\n zoom,\n options = {},\n onReady,\n style,\n className,\n destroyOnUnmount = true,\n lifecycle,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const mapRef = useRef<L.Map | null>(null);\n const [isReady, setIsReady] = useState(false);\n const onReadyRef = useRef(onReady);\n const lifecycleRef = useRef(lifecycle);\n\n // 保持 lifecycle 最新\n useEffect(() => {\n lifecycleRef.current = lifecycle;\n }, [lifecycle]);\n\n // 给 zoom 添加默认值\n const effectiveZoom = zoom ?? 12;\n\n // 保持 onReady 回调最新\n useEffect(() => {\n onReadyRef.current = onReady;\n }, [onReady]);\n\n // 初始化地图\n useEffect(() => {\n if (!containerRef.current) return;\n\n // 防止重复初始化\n if (mapRef.current) return;\n\n // 地图选项 - 必须包含 center 和 zoom 用于初始化\n // 注意:不要使用 ...options 展开,因为 undefined 值会覆盖默认值\n const mapOptions: L.MapOptions = {\n center,\n zoom: effectiveZoom,\n zoomControl: options.zoomControl ?? true,\n attributionControl: options.attributionControl ?? true,\n };\n\n // 只添加有值的选项,避免 undefined 覆盖默认值\n if (options.crs !== undefined) mapOptions.crs = options.crs;\n if (options.maxZoom !== undefined) mapOptions.maxZoom = options.maxZoom;\n if (options.minZoom !== undefined) mapOptions.minZoom = options.minZoom;\n if (options.scrollWheelZoom !== undefined) mapOptions.scrollWheelZoom = options.scrollWheelZoom;\n if (options.maxBounds !== undefined) mapOptions.maxBounds = options.maxBounds;\n if (options.layers !== undefined) mapOptions.layers = options.layers;\n if (options.preferCanvas !== undefined) mapOptions.preferCanvas = options.preferCanvas;\n\n // 创建地图\n const map = L.map(containerRef.current, mapOptions);\n\n mapRef.current = map;\n setIsReady(true);\n\n // 触发 onReady 回调\n if (onReadyRef.current) {\n // 使用 RAF 确保地图渲染完成\n requestAnimationFrame(() => {\n onReadyRef.current?.(map);\n });\n }\n\n // 清理函数\n return () => {\n if (destroyOnUnmount && mapRef.current) {\n mapRef.current.remove();\n mapRef.current = null;\n setIsReady(false);\n }\n };\n }, []); // 只在挂载时执行一次\n\n // ========== 生命周期管理 ==========\n useMapLifecycle({\n map: mapRef.current,\n lifecycle: lifecycleRef.current,\n isReady,\n });\n\n // 更新 center 和 zoom(如果需要)\n // 如果需要受控模式,可以取消注释以下代码\n // const updateCenterZoom = useCallback(() => {\n // if (!mapRef.current || !isReady) return;\n // const currentCenter = mapRef.current.getCenter();\n // const currentZoom = mapRef.current.getZoom();\n // if (currentCenter.lat !== center[0] || currentCenter.lng !== center[1] || currentZoom !== zoom) {\n // mapRef.current.setView(center, zoom, { animate: false });\n // }\n // }, [center, zoom, isReady]);\n\n // 响应 center/zoom 变化(可选行为,默认不响应)\n // 如果需要受控模式,可以取消注释以下代码\n // useEffect(() => {\n // updateCenterZoom();\n // }, [updateCenterZoom]);\n\n const contextValue: MapContextValue = useMemo(\n () => ({\n map: mapRef.current,\n mapRef,\n isReady,\n }),\n // 只依赖 isReady,因为 mapRef 是稳定的 ref 对象\n // 修复记录 (2024-06-08): 使用 useMemo 缓存 contextValue,避免每次渲染创建新对象\n // 问题:原始代码在每次渲染时创建新对象 { map: mapRef.current, mapRef, isReady },\n // 导致使用 useContext(MapContext) 的组件重新渲染\n [isReady]\n );\n\n return (\n <MapContext.Provider value={contextValue}>\n <div\n ref={containerRef}\n className={className}\n style={{\n position: 'relative',\n ...(style || {}),\n }}\n data-map-container-style={JSON.stringify(style)}\n >\n {isReady && children}\n </div>\n </MapContext.Provider>\n );\n};\n\nMapProvider.displayName = 'MapProvider';\n\n// ========== 工具 Hook ==========\n\n/**\n * 地图事件监听 Hook\n * @description 简化地图事件的绑定和解绑\n * @param eventType 事件类型\n * @param handler 事件处理函数\n * @example\n * ```tsx\n * useMapEvent('click', (e) => {\n * console.log('点击位置:', e.latlng);\n * });\n * ```\n */\nexport const useMapEvent = <K extends keyof L.LeafletEventHandlerFnMap>(\n eventType: K,\n handler: L.LeafletEventHandlerFnMap[K]\n): void => {\n const map = useMap();\n const handlerRef = useRef(handler);\n\n useEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (!map) return;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wrappedHandler = (e: any) => {\n handlerRef.current?.(e);\n };\n\n map.on(eventType, wrappedHandler as L.LeafletEventHandlerFn);\n\n return () => {\n map.off(eventType, wrappedHandler as L.LeafletEventHandlerFn);\n };\n }, [map, eventType]);\n};\n\n/**\n * 多事件监听 Hook\n * @description 同时监听多个地图事件,与 react-leaflet 的 useMapEvents API 一致\n * @param events 事件处理函数映射对象\n * @returns 地图实例\n * @example\n * ```tsx\n * const map = useMapEvents({\n * click: (e) => {\n * console.log('点击位置:', e.latlng);\n * },\n * zoomend: (e) => {\n * console.log('缩放结束:', map.getZoom());\n * },\n * moveend: (e) => {\n * console.log('移动结束:', map.getCenter());\n * },\n * });\n * ```\n */\nexport const useMapEvents = <K extends keyof L.LeafletEventHandlerFnMap>(\n events: Partial<L.LeafletEventHandlerFnMap>\n): L.Map | null => {\n const map = useMap();\n const eventsRef = useRef(events);\n\n // 保持 events 最新\n useEffect(() => {\n eventsRef.current = events;\n }, [events]);\n\n useEffect(() => {\n if (!map) return;\n\n // 为每个事件类型注册监听器\n const registeredEvents: K[] = [];\n\n for (const eventType in eventsRef.current) {\n if (eventsRef.current[eventType as K]) {\n const handler = eventsRef.current[eventType as K]!;\n const wrappedHandler = (e: L.LeafletEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (handler as any)(e);\n };\n map.on(eventType, wrappedHandler as L.LeafletEventHandlerFn);\n registeredEvents.push(eventType as K);\n }\n }\n\n return () => {\n // 清理所有注册的事件\n for (const eventType of registeredEvents) {\n map.off(eventType);\n }\n };\n }, [map]);\n\n return map;\n};\n\n/**\n * 地图视口变化监听 Hook\n * @description 监听地图 zoom 和 move 事件\n * @param callback 视口变化回调\n * @example\n * ```tsx\n * useMapViewportChange(({ center, zoom, bounds }) => {\n * console.log('视口变化:', center, zoom);\n * });\n * ```\n */\nexport const useMapViewportChange = (\n callback: (viewport: { center: L.LatLng; zoom: number; bounds: L.LatLngBounds }) => void\n): void => {\n const map = useMap();\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!map) return;\n\n const handleChange = () => {\n callbackRef.current({\n center: map.getCenter(),\n zoom: map.getZoom(),\n bounds: map.getBounds(),\n });\n };\n\n map.on('zoomend', handleChange);\n map.on('moveend', handleChange);\n\n return () => {\n map.off('zoomend', handleChange);\n map.off('moveend', handleChange);\n };\n }, [map]);\n};\n\nexport { MapContext };\n","/**\n * 配置上下文\n * @description 用于在子组件中获取 MapContainer 的配置\n * @module context/ConfigContext\n * @since 2.0.0\n */\n\nimport { createContext, useContext } from 'react';\nimport type {\n DualScaleControlConfig,\n MapSizeHandlerConfig,\n TianDiTuLayerConfig,\n PathOptions,\n IconConfig,\n AntPathConfig,\n TrackStyle,\n ClusterIconConfig,\n} from '../types';\n\n// ========== 类型定义 ==========\n\n/**\n * PlotLayer 配置\n */\nexport interface PlotLayerConfig {\n /** 编辑模式样式 */\n editing?: PathOptions | null | false;\n}\n\n/**\n * Marker 配置\n */\nexport interface MarkerConfig {\n /** 编辑中状态图标配置 */\n editing?: IconConfig | null | false;\n /** 聚合气泡图标 - undefined|null|false|{} → 使用 CLUSTER_DEFAULT_ICON */\n cluster?: ClusterIconConfig | null | false;\n}\n\n/**\n * Road 配置\n */\nexport interface RoadConfig {\n /** 编辑态样式配置 */\n editing?: PathOptions | null | false;\n /** 蚁行路径配置 */\n antPath?: AntPathConfig | null | false;\n}\n\n/**\n * Irrigation 配置\n */\nexport interface IrrigationConfig {\n /** 编辑态样式配置 */\n editing?: PathOptions | null | false;\n /** 蚁行路径配置 */\n antPath?: AntPathConfig | null | false;\n /** 进水口图标配置 */\n inlet?: IconConfig | null | false;\n /** 出水口图标配置 */\n outlet?: IconConfig | null | false;\n}\n\n/**\n * Track 配置\n * @since 2.0.0 使用 TRACK_STYLE.default 替代 working,使用 TRACK_STYLE.nonWorking 替代 nonWorking\n */\nexport interface TrackConfig {\n /** 作业中轨迹样式 - undefined|null|false|{} → 使用 TRACK_STYLE.default */\n default?: TrackStyle | null | false;\n /** 非作业/路上轨迹样式 - undefined|null|false|{} → 使用 TRACK_STYLE.nonWorking */\n nonWorking?: TrackStyle | null | false;\n /** 选中轨迹样式 - undefined|null|false|{} → 使用 TRACK_STYLE.selected */\n selected?: TrackStyle | null | false;\n /** 起点图标 - undefined|null|false|{} → 使用 TRACK_DEFAULT_START_ICON */\n start?: IconConfig | null | false;\n /** 终点图标 - undefined|null|false|{} → 使用 TRACK_DEFAULT_END_ICON */\n end?: IconConfig | null | false;\n /** 聚合气泡图标 - undefined|null|false|{} → 使用 CLUSTER_DEFAULT_ICON */\n cluster?: ClusterIconConfig | null | false;\n}\n\n/**\n * 配置上下文值\n */\nexport interface ConfigContextValue {\n /** 主题模式 */\n theme: 'light' | 'dark';\n /** 双向标尺配置 */\n dualScaleControl?: DualScaleControlConfig | false;\n /** 天地图图层配置 */\n tianDiTuLayer?: TianDiTuLayerConfig | false;\n /** 地图尺寸处理器配置 */\n mapSizeHandler?: MapSizeHandlerConfig | false;\n /** PlotLayer 配置 */\n plotLayer?: PlotLayerConfig;\n /** Marker 配置 */\n marker?: MarkerConfig;\n /** Road 配置 */\n road?: RoadConfig;\n /** Irrigation 配置 */\n irrigation?: IrrigationConfig;\n /** Track 配置 */\n track?: TrackConfig;\n}\n\n// ========== Context 创建 ==========\n\n/**\n * 配置上下文\n */\nconst ConfigContext = createContext<ConfigContextValue>({\n theme: 'light',\n});\n\nConfigContext.displayName = 'ConfigContext';\n\n// ========== Hook 导出 ==========\n\n/**\n * 获取配置上下文的 Hook\n * @returns 配置对象\n * @example\n * ```tsx\n * const { theme, tianDiTuLayer } = useConfig();\n * ```\n */\nexport const useConfig = (): ConfigContextValue => {\n return useContext(ConfigContext);\n};\n\nexport { ConfigContext };\n","/**\n * @fileoverview 统一错误处理工具\n * @description 提供统一的错误处理、日志记录和错误边界包装器\n * @module utils/errorHandling\n * @since 2.1.0 统一优化\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any -- 错误处理需要 */\n\n/** 组件名称映射 */\nexport const COMPONENT_NAMES = {\n PLOT_LAYER: 'PlotLayer',\n MARKER: 'Marker',\n TRACK: 'Track',\n ROAD: 'Road',\n IRRIGATION: 'Irrigation',\n TIAN_DI_TU: 'TianDiTuLayer',\n MINI_MAP: 'MiniMap',\n CLUSTER_VIEW: 'ClusterView',\n} as const;\n\nexport type ComponentName = (typeof COMPONENT_NAMES)[keyof typeof COMPONENT_NAMES];\n\n/** 日志级别 */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\n/** 日志配置 */\ninterface LogConfig {\n enabled: boolean;\n minLevel: LogLevel;\n prefix: string;\n}\n\n/** 默认日志配置 */\nconst defaultLogConfig: LogConfig = {\n enabled: process.env.NODE_ENV === 'development',\n minLevel: 'warn',\n prefix: '[AgriMap]',\n};\n\n/** 当前日志配置 */\nlet currentLogConfig = { ...defaultLogConfig };\n\n/**\n * 配置日志\n */\nexport function configureLog(config: Partial<LogConfig>) {\n currentLogConfig = { ...currentLogConfig, ...config };\n}\n\n/**\n * 日志输出\n */\nfunction log(level: LogLevel, componentName: string, message: string, ...args: unknown[]) {\n if (!currentLogConfig.enabled) return;\n\n const levels: LogLevel[] = ['debug', 'info', 'warn', 'error'];\n const minLevelIndex = levels.indexOf(currentLogConfig.minLevel);\n const currentLevelIndex = levels.indexOf(level);\n\n if (currentLevelIndex < minLevelIndex) return;\n\n const prefix = `${currentLogConfig.prefix}[${componentName}]`;\n\n switch (level) {\n case 'debug':\n console.debug(prefix, message, ...args);\n break;\n case 'info':\n console.info(prefix, message, ...args);\n break;\n case 'warn':\n console.warn(prefix, message, ...args);\n break;\n case 'error':\n console.error(prefix, message, ...args);\n break;\n }\n}\n\n/** 日志工具 */\nexport const logger = {\n debug: (component: string, message: string, ...args: unknown[]) =>\n log('debug', component, message, ...args),\n info: (component: string, message: string, ...args: unknown[]) =>\n log('info', component, message, ...args),\n warn: (component: string, message: string, ...args: unknown[]) =>\n log('warn', component, message, ...args),\n error: (component: string, message: string, ...args: unknown[]) =>\n log('error', component, message, ...args),\n};\n\n/**\n * 安全执行函数\n * @description 包裹函数执行,添加错误处理和日志记录\n *\n * @example\n * ```tsx\n * // 简单使用\n * const result = safeCall(\n * () => JSON.parse(data),\n * 'Marker',\n * 'parseData'\n * );\n *\n * // 带默认值\n * const result = safeCall(\n * () => riskyOperation(),\n * 'PlotLayer',\n * 'riskyOperation',\n * { defaultValue: [] }\n * );\n * ```\n */\nexport function safeCall<T>(\n fn: () => T,\n componentName: ComponentName | string,\n operationName: string,\n options?: {\n defaultValue?: T;\n onError?: (error: Error) => void;\n rethrow?: boolean;\n }\n): T | undefined {\n const { defaultValue, onError, rethrow = false } = options || {};\n\n try {\n return fn();\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n logger.error(componentName, `${operationName} 失败:`, err.message);\n\n if (onError) {\n try {\n onError(err);\n } catch (handlerError) {\n logger.error(componentName, '错误处理函数执行失败:', handlerError);\n }\n }\n\n if (rethrow) {\n throw err;\n }\n\n return defaultValue as T;\n }\n}\n\n/**\n * 安全执行异步函数\n */\nexport async function safeCallAsync<T>(\n fn: () => Promise<T>,\n componentName: ComponentName | string,\n operationName: string,\n options?: {\n defaultValue?: T;\n onError?: (error: Error) => void;\n rethrow?: boolean;\n }\n): Promise<T | undefined> {\n const { defaultValue, onError, rethrow = false } = options || {};\n\n try {\n return await fn();\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n logger.error(componentName, `${operationName} 失败:`, err.message);\n\n if (onError) {\n try {\n onError(err);\n } catch (handlerError) {\n logger.error(componentName, '错误处理函数执行失败:', handlerError);\n }\n }\n\n if (rethrow) {\n throw err;\n }\n\n return defaultValue as T;\n }\n}\n\n/**\n * 创建带上下文的安全执行器\n * @description 为特定组件创建预配置的安全执行函数\n *\n * @example\n * ```tsx\n * // 在组件中使用\n * const safeExec = createSafeExecutor('Marker');\n *\n * // 使用\n * const result = safeExec(() => riskyOperation(), 'riskyOperation');\n * ```\n */\nexport function createSafeExecutor(componentName: ComponentName | string) {\n return <T>(\n fn: () => T,\n operationName: string,\n options?: {\n defaultValue?: T;\n onError?: (error: Error) => void;\n rethrow?: boolean;\n }\n ) => safeCall(fn, componentName, operationName, options);\n}\n\n/**\n * 创建带上下文的异步安全执行器\n */\nexport function createAsyncSafeExecutor(componentName: ComponentName | string) {\n return <T>(\n fn: () => Promise<T>,\n operationName: string,\n options?: {\n defaultValue?: T;\n onError?: (error: Error) => void;\n rethrow?: boolean;\n }\n ) => safeCallAsync(fn, componentName, operationName, options);\n}\n\n/**\n * 安全回调执行\n * @description 用于安全执行用户提供的回调函数\n */\nexport function safeCallback<T extends (...args: any[]) => any>(\n callback: T | undefined,\n componentName: ComponentName | string,\n callbackName: string,\n ...args: Parameters<T>\n): ReturnType<T> | undefined {\n if (!callback) return undefined;\n\n return safeCall(() => callback(...args), componentName, `callback:${callbackName}`);\n}\n\n/**\n * 批量安全执行\n * @description 安全执行多个操作,收集所有错误\n */\nexport function safeBatch(\n componentName: ComponentName | string,\n operations: { name: string; fn: () => void }[]\n): { success: number; failed: number; errors: Error[] } {\n const result = { success: 0, failed: 0, errors: [] as Error[] };\n\n for (const { name, fn } of operations) {\n try {\n fn();\n result.success++;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n logger.error(componentName, `${name} 失败:`, err.message);\n result.failed++;\n result.errors.push(err);\n }\n }\n\n return result;\n}\n\n/**\n * 条件断言\n * @description 断言条件为真,否则记录错误\n */\nexport function assert(\n condition: boolean,\n componentName: ComponentName | string,\n message: string\n): asserts condition {\n if (!condition) {\n const error = new Error(`Assertion failed: ${message}`);\n logger.error(componentName, message);\n throw error;\n }\n}\n\n/**\n * 软断言\n * @description 断言条件为真,仅记录警告不抛出错误\n */\nexport function softAssert(\n condition: boolean,\n componentName: ComponentName | string,\n message: string\n): boolean {\n if (!condition) {\n logger.warn(componentName, `Assertion warning: ${message}`);\n }\n return condition;\n}\n\nexport default {\n logger,\n safeCall,\n safeCallAsync,\n createSafeExecutor,\n createAsyncSafeExecutor,\n safeCallback,\n safeBatch,\n assert,\n softAssert,\n configureLog,\n COMPONENT_NAMES,\n};\n","/**\n * 通知提醒组件\n * @description 类似 antd Notification 的通知提醒框,显示在地图右下角\n */\n\nimport {\n useState,\n useEffect,\n useCallback,\n forwardRef,\n useImperativeHandle,\n type MouseEvent,\n} from 'react';\nimport type {\n NotificationType,\n NotificationOptions,\n NotificationInstance,\n NotificationProps,\n} from '../../types';\n\n/** 模块级自增计数器,确保通知 ID 全局唯一 */\nlet notificationIdCounter = 0;\n\n/** 通知项数据 */\ninterface NotificationItem extends NotificationOptions {\n id: number;\n isClosing: boolean;\n}\n\n/**\n * 单个通知项组件属性\n */\ninterface NotificationItemProps {\n id: number;\n type: NotificationType;\n title?: string;\n message?: string;\n duration?: number | false;\n isClosing: boolean;\n onClose: (id: number) => void;\n}\n\n/**\n * 单个通知项组件\n */\nconst NotificationItem = ({\n id,\n type,\n title,\n message,\n duration,\n isClosing,\n onClose,\n}: NotificationItemProps): JSX.Element => {\n useEffect(() => {\n // duration 为 0 或 false 时不自动关闭\n if (duration !== 0 && duration !== false && !isClosing) {\n const actualDuration = duration || 3500;\n const timer = setTimeout(() => {\n onClose(id);\n }, actualDuration);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [id, duration, isClosing, onClose]);\n\n const getIcon = (): string => {\n switch (type) {\n case 'success':\n return '✓';\n case 'error':\n return '✕';\n case 'warning':\n return '!';\n case 'info':\n default:\n return 'i';\n }\n };\n\n return (\n <div\n className={`notification notification--${type}${isClosing ? ' notification--closing' : ''}`}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n >\n <div className=\"notification__icon\">{getIcon()}</div>\n <div className=\"notification__content\">\n {title && <div className=\"notification__title\">{title}</div>}\n {message && <div className=\"notification__message\">{message}</div>}\n </div>\n </div>\n );\n};\n\n/**\n * 通知容器组件\n * @param onClose - 通知关闭时的回调\n * @param ref - ref 引用,暴露 open/close 方法\n */\nconst Notification = forwardRef<NotificationInstance, NotificationProps>(\n ({ onClose: onCloseCallback }, ref) => {\n const [notifications, setNotifications] = useState<NotificationItem[]>([]);\n\n const open = useCallback((options: NotificationOptions): number => {\n const { type = 'info', title, message, duration = 3500 } = options;\n\n const id = ++notificationIdCounter;\n\n // 新通知添加到数组末尾,实现从下往上堆叠\n setNotifications(prev => [...prev, { id, type, title, message, duration, isClosing: false }]);\n\n return id;\n }, []);\n\n const close = useCallback(\n (id: number): void => {\n // 先设置关闭动画状态\n setNotifications(prev => prev.map(n => (n.id === id ? { ...n, isClosing: true } : n)));\n // 触发关闭回调\n if (onCloseCallback) {\n onCloseCallback(id);\n }\n // 动画结束后移除\n setTimeout(() => {\n setNotifications(prev => prev.filter(n => n.id !== id));\n }, 300);\n },\n [onCloseCallback]\n );\n\n const clear = useCallback((): void => {\n setNotifications([]);\n }, []);\n\n // 暴露方法给父组件\n useImperativeHandle(ref, () => ({\n open,\n close,\n clear,\n // 快捷方法:支持 (message, duration) 或 ({ title, message, duration })\n info: (messageOrOptions: string | NotificationOptions, duration?: number): number => {\n if (typeof messageOrOptions === 'object') {\n return open({ type: 'info', ...messageOrOptions });\n }\n return open({ type: 'info', message: messageOrOptions, duration });\n },\n success: (messageOrOptions: string | NotificationOptions, duration?: number): number => {\n if (typeof messageOrOptions === 'object') {\n return open({ type: 'success', ...messageOrOptions });\n }\n return open({ type: 'success', message: messageOrOptions, duration });\n },\n warning: (messageOrOptions: string | NotificationOptions, duration?: number): number => {\n if (typeof messageOrOptions === 'object') {\n return open({ type: 'warning', ...messageOrOptions });\n }\n return open({ type: 'warning', message: messageOrOptions, duration });\n },\n error: (messageOrOptions: string | NotificationOptions, duration?: number): number => {\n if (typeof messageOrOptions === 'object') {\n return open({ type: 'error', ...messageOrOptions });\n }\n return open({ type: 'error', message: messageOrOptions, duration });\n },\n }));\n\n if (notifications.length === 0) return null;\n\n return (\n <div className=\"notification-container\">\n {notifications.map(notification => (\n <NotificationItem\n key={notification.id}\n id={notification.id}\n type={notification.type || 'info'}\n title={notification.title}\n message={notification.message}\n duration={notification.duration}\n isClosing={notification.isClosing}\n onClose={close}\n />\n ))}\n </div>\n );\n }\n);\n\nNotification.displayName = 'Notification';\n\nexport default Notification;\n","/**\n * 通用编辑工具栏组件\n * @description 用于统一各编辑组件的工具栏实现\n */\n\nimport {\n useState,\n useEffect,\n useRef,\n forwardRef,\n useImperativeHandle,\n useCallback,\n createContext,\n useContext,\n} from 'react';\nimport Notification from '../Notification';\nimport type { ReactNode } from 'react';\nimport type { NotificationInstance } from '../../types';\n\n/** 按钮样式变体 */\nexport type ButtonVariant = 'default' | 'primary' | 'danger';\n\n/** 预设色板(参照 Ant Design 5.x PresetColors) */\nexport type ToolbarPresetColors =\n | 'success'\n | 'warning'\n | 'error'\n | 'magenta'\n | 'volcano'\n | 'gold'\n | 'orange'\n | 'cyan'\n | 'geekblue'\n | 'purple';\n\n/** 按钮 color 属性类型(支持预设色和自定义颜色如 #ff0000、rgba(255,0,0,0.5)) */\nexport type ToolbarColor = 'default' | 'primary' | 'danger' | ToolbarPresetColors | string;\n\n/** 预设颜色集合(用于区分预设色和自定义颜色) */\nexport const PRESET_COLOR_SET = new Set<string>([\n 'default',\n 'primary',\n 'danger',\n 'success',\n 'warning',\n 'error',\n 'magenta',\n 'volcano',\n 'gold',\n 'orange',\n 'cyan',\n 'geekblue',\n 'purple',\n]);\n\n/** 单个按钮配置 */\nexport interface ToolbarButton<T extends string> {\n /** 按钮操作类型 */\n action: T;\n /** 显示文本 */\n label: string;\n /** 图标组件 */\n icon?: ReactNode;\n /** 提示文本 */\n tooltip?: string;\n /** 按钮样式变体(兼容,优先使用 color) */\n variant?: ButtonVariant;\n /** 按钮颜色 */\n color?: ToolbarColor;\n /** 是否需要选中项才能点击 */\n needsSelection?: boolean;\n /** 编辑模式下是否显示 */\n showInEdit?: boolean;\n /** 是否禁用 */\n disabled?: boolean;\n}\n\n/** 工具栏尺寸(支持预设尺寸和自定义数字,单位 px) */\nexport type ToolbarSize = 'large' | 'middle' | 'small' | number;\n\n/** 工具栏属性 */\nexport interface BaseEditToolbarProps<T extends string> {\n /** 是否可见 */\n visible: boolean;\n /** 工具栏尺寸 */\n size?: ToolbarSize;\n /** 当前选中ID */\n selectedId: string | number | null;\n /** 当前模式 */\n currentMode: string;\n /** 启用的按钮 */\n enabledButtons: T[];\n /** 按钮配置 */\n buttons: ToolbarButton<T>[];\n /** 编辑模式判断函数(默认 mode !== 'idle') */\n isEditingFn?: (mode: string) => boolean;\n /** 模式提示信息 */\n modeHints?: Record<string, string>;\n /** 类名前缀 */\n classPrefix: string;\n /** 保存按钮是否禁用 */\n saveDisabled?: boolean;\n /** 是否显示编辑模式提示 */\n showHint?: boolean;\n /** 警告提示信息(不受 showHint 控制,始终显示) */\n warningHint?: string;\n /** 内置按钮的统一颜色(覆盖各按钮自身的 variant/color),支持预设色和自定义颜色 */\n color?: ToolbarColor;\n /** 是否仅显示图标(不显示文字) */\n iconOnly?: boolean;\n /** 额外内容(自定义工具栏按钮) */\n children?: ReactNode;\n /** 标准动作:取消 */\n onCancel?: () => void;\n /** 标准动作:保存(自动传入 selectedId) */\n onSave?: (id?: string | number | null) => void;\n /** 标准动作:新建 */\n onCreate?: () => void;\n /** 标准动作:删除(自动传入 selectedId) */\n onDelete?: (id?: string | number | null) => void;\n /** 自定义动作映射表,key 为 action 名称,value 为回调(自动传入 selectedId) */\n actionHandlers?: Partial<Record<T, (id?: string | number | null) => void>>;\n}\n\n/** 工具栏上下文 */\nexport interface ToolbarContextValue {\n /** 类名前缀 */\n classPrefix: string;\n}\n\n/** 工具栏上下文 */\nexport const ToolbarContext = createContext<ToolbarContextValue | null>(null);\n\n/**\n * 获取工具栏上下文\n */\nexport function useToolbarContext(): ToolbarContextValue {\n const context = useContext(ToolbarContext);\n if (!context) {\n // 返回默认值,避免在 ToolbarButton 外部使用时报错\n return { classPrefix: 'marker-edit-toolbar' };\n }\n return context;\n}\n\n/** 工具栏 ref 方法 */\nexport interface BaseEditToolbarRef {\n showNotification: (message: string, title?: string) => void;\n clearNotification: () => void;\n}\n\n/**\n * 通用编辑工具栏\n */\nconst BaseEditToolbar = forwardRef<BaseEditToolbarRef, BaseEditToolbarProps<string>>(\n (\n {\n visible,\n selectedId,\n currentMode = 'idle',\n enabledButtons = [],\n buttons,\n isEditingFn,\n modeHints = {},\n classPrefix,\n size = 'middle',\n saveDisabled = false,\n showHint = true,\n warningHint,\n color,\n iconOnly = false,\n children,\n onCancel,\n onSave,\n onCreate,\n onDelete,\n actionHandlers,\n },\n ref\n ) => {\n const [notificationClosed, setNotificationClosed] = useState(false);\n const notificationRef = useRef<NotificationInstance>(null);\n\n const isEditing = isEditingFn ? isEditingFn(currentMode) : currentMode !== 'idle';\n\n useImperativeHandle(ref, () => ({\n showNotification: (message: string, title?: string) => {\n setNotificationClosed(false);\n notificationRef.current?.info({ title, message });\n },\n clearNotification: () => {\n notificationRef.current?.clear();\n },\n }));\n\n // 编辑模式提示\n useEffect(() => {\n if (warningHint && visible && isEditing) {\n notificationRef.current?.info({\n title: '提示',\n message: warningHint,\n });\n } else if (\n showHint &&\n visible &&\n isEditing &&\n !notificationClosed &&\n modeHints[currentMode]\n ) {\n notificationRef.current?.info({\n title: '提示',\n message: modeHints[currentMode],\n });\n } else if (!isEditing) {\n notificationRef.current?.clear();\n }\n }, [showHint, visible, currentMode, modeHints, isEditing, notificationClosed, warningHint]);\n\n // 模式切换时重置通知状态\n useEffect(() => {\n setNotificationClosed(false);\n }, [currentMode]);\n\n const handleNotificationClose = useCallback(() => {\n setNotificationClosed(true);\n }, []);\n\n const getButtonClassName = (\n variant: ButtonVariant | undefined,\n btnColor: ToolbarColor | undefined,\n disabled: boolean\n ): string => {\n const classes = [`${classPrefix}__button`];\n const effectiveColor = color || btnColor || variant || 'default';\n if (disabled) classes.push(`${classPrefix}__button--disabled`);\n if (\n typeof effectiveColor === 'string' &&\n PRESET_COLOR_SET.has(effectiveColor) &&\n effectiveColor !== 'default'\n ) {\n classes.push(`${classPrefix}__button--${effectiveColor}`);\n }\n return classes.join(' ');\n };\n\n const getButtonStyle = (btnColor: ToolbarColor | undefined): React.CSSProperties => {\n const style: React.CSSProperties = {};\n const effectiveColor = color || btnColor;\n if (\n effectiveColor &&\n typeof effectiveColor === 'string' &&\n !PRESET_COLOR_SET.has(effectiveColor)\n ) {\n style.backgroundColor = effectiveColor;\n style.borderColor = effectiveColor;\n style.color = '#fff';\n }\n if (typeof size === 'number') {\n const s = size;\n style.height = s;\n style.lineHeight = `${s}px`;\n const scale = s / 32;\n style.padding = `0 ${Math.round(12 * scale)}px`;\n style.fontSize = `${Math.round(14 * scale)}px`;\n }\n return style;\n };\n\n const handleClick = useCallback(\n (e: React.MouseEvent, action: string, disabled: boolean) => {\n e.stopPropagation();\n e.preventDefault();\n if (!disabled) {\n switch (action) {\n case 'cancel':\n onCancel?.();\n break;\n case 'save':\n onSave?.(selectedId);\n break;\n case 'create':\n onCreate?.();\n break;\n case 'delete':\n onDelete?.(selectedId);\n break;\n default:\n actionHandlers?.[action as keyof typeof actionHandlers]?.(selectedId);\n break;\n }\n }\n },\n [onCancel, onSave, onCreate, onDelete, actionHandlers, selectedId]\n );\n\n if (!visible) return null;\n\n // 编辑模式下只显示取消和保存\n const editModeButtons = buttons.filter(btn => btn.action === 'cancel' || btn.action === 'save');\n\n // 非编辑模式下的按钮 - 只显示 enabledButtons 中指定的按钮\n const normalButtons = buttons.filter(\n btn => btn.action !== 'cancel' && btn.action !== 'save' && enabledButtons.includes(btn.action)\n );\n\n const buttonsToRender = isEditing ? editModeButtons : normalButtons;\n\n // Context 值\n const contextValue: ToolbarContextValue = {\n classPrefix,\n };\n\n return (\n <ToolbarContext.Provider value={contextValue}>\n <div\n className={[\n classPrefix,\n typeof size === 'string' && size !== 'middle' ? `${classPrefix}--${size}` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${classPrefix}__button-group`}>\n {buttonsToRender.map(btn => {\n // 编辑模式下的取消和保存按钮不受 enabledButtons 限制\n const isEditButton = btn.action === 'cancel' || btn.action === 'save';\n const isEnabled = isEditButton ? true : enabledButtons.includes(btn.action);\n\n // 按钮可用性逻辑:\n // - 未选中地块时:只有 create 按钮可用,其他 needsSelection 按钮禁用\n // - 选中地块时:create 按钮禁用,其他按钮可用\n const isCreateButton = btn.action === 'create';\n const hasSelection = !!selectedId;\n const needsSelection = btn.needsSelection && !hasSelection;\n const createDisabled = isCreateButton && hasSelection;\n const isDisabled =\n !isEnabled || needsSelection || createDisabled || btn.disabled || false;\n\n // 编辑模式下保存按钮的特殊禁用逻辑\n const actualDisabled = btn.action === 'save' ? saveDisabled : isDisabled;\n\n // 自定义显示逻辑\n if (btn.showInEdit === false && isEditing) return null;\n\n const tooltipText = btn.tooltip || (iconOnly ? btn.label : undefined);\n\n return (\n <button\n key={btn.action}\n className={getButtonClassName(btn.variant, btn.color, actualDisabled)}\n style={getButtonStyle(btn.color)}\n onClick={e => handleClick(e, btn.action, actualDisabled)}\n disabled={actualDisabled}\n data-tooltip={tooltipText}\n >\n {btn.icon && <span className={`${classPrefix}__icon`}>{btn.icon}</span>}\n {!iconOnly && <span className={`${classPrefix}__label`}>{btn.label}</span>}\n </button>\n );\n })}\n </div>\n {!isEditing && children && (\n <div className={`${classPrefix}__button-group ${classPrefix}__button-group--custom`}>\n {children}\n </div>\n )}\n </div>\n <Notification ref={notificationRef} onClose={handleNotificationClose} />\n </ToolbarContext.Provider>\n );\n }\n);\n\nBaseEditToolbar.displayName = 'BaseEditToolbar';\n\nexport default BaseEditToolbar;\n","/*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.3';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = create(null);\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Prevent function-based ADD_ATTR / ADD_TAGS from leaking across calls */\n if (!objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n EXTRA_ELEMENT_HANDLING.tagCheck = null;\n }\n if (!objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */\n if (FORBID_ATTR[lcName]) {\n return false;\n }\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/**\n * 图标常量集中管理\n * @description 所有图标相关的常量统一在此文件定义\n */\n\nimport type { IconConfig, ClusterIconConfig } from '../types/icon';\n\n// ==================== 预设图标 ====================\n\n/**\n * 所有预设图标名称列表\n */\nexport const PRESET_ICONS = [\n 'marker',\n 'marker-red',\n 'marker-blue',\n 'marker-green',\n 'marker-orange',\n 'marker-yellow',\n 'pulse',\n 'pulse-red',\n 'pulse-blue',\n 'pulse-green',\n 'pulse-orange',\n 'pulse-purple',\n 'pulse-arrow',\n 'point',\n 'position',\n 'position-red',\n 'drone',\n 'down',\n 'tractor',\n 'tractor-2',\n 'tractorTopdown',\n 'truck',\n 'truck-2',\n 'agri-drone',\n 'agri-drone-side',\n 'loading-spinner',\n 'loading-dots',\n 'monitor',\n 'alert',\n 'flag',\n 'target',\n 'wind',\n 'flag-double',\n] as const;\n\n/** SVG 彩色图标(水滴形 pin) */\nexport const SVG_MARKER_ICONS = [\n 'marker-red',\n 'marker-blue',\n 'marker-green',\n 'marker-orange',\n 'marker-yellow',\n] as const;\n\n/** SVG 脉冲图标(带扩散动画) */\nexport const PULSE_ICONS = [\n 'pulse',\n 'pulse-red',\n 'pulse-blue',\n 'pulse-green',\n 'pulse-orange',\n 'pulse-purple',\n 'pulse-arrow',\n] as const;\n\n/** Loading 加载图标 */\nexport const LOADING_ICONS = ['loading-spinner', 'loading-dots'] as const;\n\n/**\n * SelectIcon 组件中支持自定义颜色的图标\n * @description 用于控制哪些图标在 SelectIcon 中显示颜色选择器\n */\nexport const COLOR_ENABLED_ICONS = [\n 'marker',\n 'pulse',\n 'monitor',\n 'alert',\n 'flag',\n 'target',\n 'wind',\n 'flag-double',\n] as const;\n\n/** 支持自定义颜色的图标(全量) */\nexport const COLOR_SUPPORTED_ICONS = [\n 'marker',\n 'pulse',\n 'tractor',\n 'tractor-2',\n 'truck',\n 'truck-2',\n 'agri-drone',\n 'agri-drone-side',\n 'monitor',\n 'alert',\n 'flag',\n 'target',\n 'wind',\n 'flag-double',\n] as const;\n\n// ==================== 图标分组 ====================\n\n/** 图标分组类型 */\nexport type IconGroupType = 'color' | 'sprite' | 'vehicle';\n\n/** 图标分组项 */\nexport interface IconGroupItem {\n type: string;\n name: string;\n}\n\n/** 图标分组 */\nexport interface IconGroup {\n label: string;\n icons: IconGroupItem[];\n}\n\n/** 默认图标分组 */\nexport const DEFAULT_ICON_GROUPS: IconGroup[] = [\n {\n label: '颜色标记',\n icons: [\n { type: 'marker', name: '颜色位置' },\n { type: 'pulse', name: '颜色脉冲' },\n { type: 'monitor', name: '监测站' },\n { type: 'alert', name: '警示警报' },\n { type: 'flag', name: '旗帜' },\n { type: 'target', name: '靶心' },\n { type: 'wind', name: '风向' },\n { type: 'flag-double', name: '双旗帜' },\n ],\n },\n {\n label: '精灵图',\n icons: [\n { type: 'point', name: '圆点' },\n { type: 'position', name: '定位' },\n { type: 'position-red', name: '红点' },\n { type: 'drone', name: '无人机' },\n { type: 'down', name: '下行' },\n ],\n },\n {\n label: '农机设备',\n icons: [\n { type: 'tractor', name: '拖拉机' },\n { type: 'tractor-2', name: '收割机' },\n { type: 'tractorTopdown', name: '农机(俯视)' },\n { type: 'truck', name: '货车' },\n { type: 'truck-2', name: '三轮货车' },\n { type: 'agri-drone', name: '农业无人机' },\n { type: 'agri-drone-side', name: '无人机(侧视)' },\n ],\n },\n];\n\n/** 所有预设图标的名称映射 */\nexport const ICON_NAME_MAP: Record<string, string> = (() => {\n const map: Record<string, string> = {};\n for (const group of DEFAULT_ICON_GROUPS) {\n for (const icon of group.icons) {\n map[icon.type] = icon.name;\n }\n }\n return map;\n})();\n\n// ==================== 预设尺寸 ====================\n\n/** 预设尺寸列表 - 12的倍数 */\nexport const PRESET_SIZES = [24, 36, 48, 60, 72, 84, 96, 108] as const;\n\n// ==================== 预设颜色 ====================\n\n/** DOMPurify 配置:允许 SVG 动画元素 */\nexport const DOMPURIFY_CONFIG = {\n ADD_TAGS: ['animate', 'animateTransform', 'animateMotion', 'set', 'mpath'],\n ADD_ATTR: [\n 'attributeName',\n 'type',\n 'from',\n 'to',\n 'dur',\n 'repeatCount',\n 'begin',\n 'values',\n 'keyTimes',\n 'keySplines',\n 'calcMode',\n ],\n};\n\n// ==================== 默认图标配置 ====================\n\n/** 标注点默认图标 */\nexport const MARKER_DEFAULT_ICON: IconConfig = {\n icon: 'marker-blue',\n iconSize: [48, 48],\n animated: true,\n};\n\n/** 标注点选中图标 */\nexport const MARKER_DEFAULT_SELECTED_ICON: IconConfig = {\n icon: 'marker-red',\n iconSize: [48, 48],\n animated: true,\n};\n\n/** 标注点编辑中图标 */\nexport const MARKER_DEFAULT_EDIT_ICON: IconConfig = {\n icon: 'marker-yellow',\n iconSize: [48, 48],\n animated: true,\n};\n\n/** 聚合气泡图标 */\nexport const CLUSTER_DEFAULT_ICON: ClusterIconConfig = {\n icon: 'pulse-red',\n iconSize: [48, 48],\n animated: true,\n showCount: false,\n};\n\n/** 轨迹起点图标 */\nexport const TRACK_DEFAULT_START_ICON: IconConfig = {\n icon: 'pulse',\n iconSize: 48,\n iconAnchor: [24, 24],\n animated: true,\n};\n\n/** 轨迹终点图标 */\nexport const TRACK_DEFAULT_END_ICON: IconConfig = {\n icon: 'pulse',\n iconSize: 48,\n iconAnchor: [24, 24],\n animated: true,\n};\n\n/** 轨迹播放图标 */\nexport const TRACKPLAYER_DEFAULT_ICON: IconConfig = {\n icon: 'tractorTopdown',\n iconSize: [48, 48],\n};\n\n/** 灌溉渠进水口图标 */\nexport const DEFAULT_INLET_ICON: IconConfig = {\n icon: 'pulse-green',\n iconSize: [48, 48],\n animated: true,\n};\n\n/** 灌溉渠出水口图标 */\nexport const DEFAULT_OUTLET_ICON: IconConfig = {\n icon: 'pulse-orange',\n iconSize: [48, 48],\n animated: true,\n};\n","/**\n * 图标工具函数\n * @description 统一的图标检测和生成工具,供 Marker、Track、iconCache 等模块使用\n */\n\nimport type { SvgIconConfig, PresetIconName, DetectedIconResult } from '../types/icon';\nimport { PRESET_ICONS, SVG_MARKER_ICONS, PULSE_ICONS, LOADING_ICONS } from '../constants/icon';\n\nconst PRESET_ICONS_SET = new Set(PRESET_ICONS);\n\nfunction isValidUrl(str: string): boolean {\n try {\n // 支持 protocol-relative URLs like \"//cdn.com/img.svg\"\n const url = new URL(str, str.startsWith('//') ? 'https:' : undefined);\n return url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'blob:';\n } catch {\n return false;\n }\n}\n\n/** 判断是否为 Data URL (Base64) */\nfunction isDataUrl(str: string): boolean {\n return str.startsWith('data:');\n}\n\n/**\n * 检测图标类型\n * @description 根据传入的值自动识别图标类型(预设名称、SVG字符串、图片URL)\n * @param value - 图标值,可以是预设名称、SVG字符串、图片URL或SVG配置对象\n * @returns 检测结果,结构符合 DetectedIconResult 判别联合\n * @example\n * detectIconType('point') // { type: 'preset', name: 'point' }\n * detectIconType('marker-red') // { type: 'preset', name: 'marker-red' }\n * detectIconType('<svg>...</svg>') // { type: 'svg', config: '<svg>...</svg>' }\n * detectIconType('https://...') // { type: 'url', src: 'https://...' }\n */\nexport function detectIconType(\n value: string | SvgIconConfig | undefined | null\n): DetectedIconResult {\n if (!value) return { type: 'preset', name: 'point' };\n\n // 预设图标名称\n if (typeof value === 'string' && PRESET_ICONS_SET.has(value as PresetIconName)) {\n return { type: 'preset', name: value as PresetIconName };\n }\n\n // Base64 Data URL\n if (typeof value === 'string' && isDataUrl(value)) {\n return { type: 'url', src: value };\n }\n\n // 图片 URL\n if (typeof value === 'string' && (isValidUrl(value) || isUrlByExtension(value))) {\n return { type: 'url', src: value };\n }\n\n // SVG 字符串\n if (typeof value === 'string' && value.trim().toLowerCase().startsWith('<svg')) {\n return { type: 'svg', config: value };\n }\n\n // SVG 配置对象\n if (typeof value === 'object' && value !== null && value.path) {\n return { type: 'svg', config: value };\n }\n\n // 默认作为预设名称处理\n if (typeof value === 'string') {\n return { type: 'preset', name: value as PresetIconName };\n }\n\n return { type: 'preset', name: 'point' };\n}\n\nfunction isUrlByExtension(value: string): boolean {\n return /\\.(svg|png|jpg|jpeg|gif|webp)$/i.test(value);\n}\n\n/**\n * 判断是否为 URL 图标(兼容旧代码,内部基于 isValidUrl + 后缀)\n */\nexport function isUrlIcon(value: string): boolean {\n return isValidUrl(value) || isUrlByExtension(value);\n}\n\n/** 判断是否为预设图标 */\nexport function isPresetIcon(value: string): boolean {\n return PRESET_ICONS_SET.has(value as PresetIconName);\n}\n\n/**\n * 生成 SVG HTML\n * @description 将 SVG 配置对象转换为 HTML 字符串\n */\nexport function generateSvgHtml(\n svgIcon: string | SvgIconConfig,\n options: {\n iconSize?: [number, number];\n svgColor?: string;\n svgStrokeColor?: string;\n svgStrokeWidth?: number;\n } = {}\n): string {\n const {\n iconSize = [48, 48],\n svgColor = '#e53935',\n svgStrokeColor = '#ffffff',\n svgStrokeWidth = 2,\n } = options;\n\n if (typeof svgIcon === 'string') {\n return svgIcon;\n }\n\n if (typeof svgIcon === 'object' && svgIcon !== null) {\n const {\n path,\n viewBox = '0 0 1024 1024',\n fill = svgColor,\n stroke = svgStrokeColor,\n strokeWidth = svgStrokeWidth,\n } = svgIcon;\n\n if (!path) return '';\n\n // 防 XSS:转义 SVG 属性值中的特殊字符\n const escape = (s: string) =>\n s\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/'/g, '&#39;');\n\n return `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"${escape(viewBox)}\"\n width=\"${iconSize[0]}\"\n height=\"${iconSize[1]}\"\n style=\"overflow: hidden;\"\n >\n <path d=\"${escape(path)}\" fill=\"${escape(fill)}\" stroke=\"${escape(stroke)}\" stroke-width=\"${strokeWidth}\" />\n </svg>\n `;\n }\n\n return '';\n}\n\n/** SVG 配置转字符串键(用于缓存) */\nexport function svgIconToKey(svgIcon: string | SvgIconConfig | null | undefined): string {\n if (!svgIcon) return '';\n if (typeof svgIcon === 'string') return `svg:${svgIcon.slice(0, 50)}`;\n return `svg:${svgIcon.path}:${svgIcon.viewBox || ''}:${svgIcon.fill || ''}:${svgIcon.stroke || ''}`;\n}\n\n/** 重新导出常量供外部使用 */\nexport { SVG_MARKER_ICONS, PULSE_ICONS, LOADING_ICONS };\n","/**\n * 彩色标记 SVG 生成器\n * @description 生成水滴形地图标记 SVG,替代 CSS 绘制方案\n */\n\nimport type { PresetIconName } from '../types/icon';\n\n/** 标记颜色配置 */\nconst MARKER_COLORS: Record<string, string> = {\n 'marker-red': '#e53935',\n 'marker-blue': '#1e88e5',\n 'marker-green': '#43a047',\n 'marker-orange': '#fb8c00',\n 'marker-yellow': '#fdd835',\n};\n\n/** SVG 路径常量 - 水滴形标记 */\nconst PIN_BODY_PATH =\n 'M844.137412 302.742588C844.137412 135.529412 685.778824 0 509.831529 0 333.824 0 179.862588 135.529412 179.862588 302.742588c0 155.045647 326.294588 526.275765 326.294588 526.275765s337.92-366.049882 337.92-526.275765z';\n\n/** 中心镂空圆点路径(与 PIN_BODY_PATH 合并使用 evenodd 实现镂空) */\nconst PIN_DOT_PATH =\n 'M404.660706 313.464471c0-57.223529 49.633882-103.604706 110.71247-103.604706 61.199059 0 110.772706 46.381176 110.772706 103.604706s-49.633882 103.604706-110.772706 103.604705c-61.078588 0-110.712471-46.381176-110.71247-103.604705z';\n\n/** 底部阴影路径 */\nconst PIN_SHADOW_PATH =\n 'M621.447529 838.113882a25.298824 25.298824 0 0 1 1.445647 8.252236c0 28.611765-49.633882 51.802353-110.772705 51.802353-61.078588 0-110.712471-23.190588-110.712471-51.802353 0-2.831059 0.481882-5.601882 1.445647-8.312471-67.041882 11.926588-112.158118 34.334118-112.158118 60.114824 0 38.249412 99.147294 69.089882 221.424942 69.089882 122.277647 0 221.485176-30.840471 221.485176-69.089882-0.060235-25.780706-45.176471-48.188235-112.158118-60.114824z';\n\n/**\n * 获取 SVG 标记的锚点(针尖位置)\n * @description viewBox 0 0 1024 1024 中针尖约在 (512, 829)\n */\nexport function getMarkerAnchor(width: number, height: number): [number, number] {\n return [width * 0.5, height * 0.81];\n}\n\n/**\n * 生成彩色标记 SVG\n * @param iconType - 标记类型(marker/marker-red/blue/green/orange/yellow)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用脉冲动画\n * @param color - 可选的自定义颜色,当 iconType 为 'marker' 时使用此颜色\n * @returns SVG HTML 字符串,非标记类型返回空字符串\n */\nexport function generateMarkerSvg(\n iconType: PresetIconName,\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n // 'marker' 类型使用传入的 color,否则使用预设颜色\n const fillColor = iconType === 'marker' ? color || '#1e88e5' : MARKER_COLORS[iconType];\n if (!fillColor) return '';\n\n // 阴影呼吸动画:以阴影中心 (512, 845) 为缩放原点,独立控制 opacity\n // opacity 0.5→0.15→0.5,scale 1→1.25→1,周期与水滴同步\n const shadowAnim = animated\n ? `<g transform=\"translate(512, 845)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -845)\">`\n : '';\n const shadowAnimClose = animated ? '</g></g></g>' : '';\n\n // 脉冲动画:以水滴中心 (512, 313) 为缩放原点,幅度从 1.06 调大到 1.12\n const bodyAnimOpen = animated\n ? '<g transform=\"translate(512, 313)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.12;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -313)\">'\n : '';\n const bodyAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${shadowAnim}\n <path d=\"${PIN_SHADOW_PATH}\" fill=\"${fillColor}\"/>\n ${shadowAnimClose}\n ${bodyAnimOpen}\n <path d=\"${PIN_BODY_PATH} ${PIN_DOT_PATH}\" fill=\"${fillColor}\" fill-rule=\"evenodd\"/>\n ${bodyAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成位置标记 SVG(简单的圆点标记)\n * @param iconType - 标记类型(position/position-red)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用脉冲动画\n * @returns SVG HTML 字符串\n */\nexport function generatePositionSvg(\n iconType: 'position' | 'position-red',\n width: number,\n height: number,\n animated: boolean\n): string {\n const color = MARKER_COLORS[iconType] || '#1890ff';\n\n // 脉冲动画\n const pulseAnim = animated\n ? `<circle cx=\"50%\" cy=\"50%\" r=\"40%\">\n <animate attributeName=\"r\" values=\"40%;60%;40%\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.6;0.2;0.6\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\n </circle>`\n : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${pulseAnim}\n <circle cx=\"512\" cy=\"512\" r=\"400\" fill=\"${color}\" fill-opacity=\"0.3\"/>\n <circle cx=\"512\" cy=\"512\" r=\"250\" fill=\"${color}\"/>\n <circle cx=\"512\" cy=\"512\" r=\"100\" fill=\"#ffffff\"/>\n </svg>\n `;\n}\n\n/**\n * 生成监测站图标 SVG(气象/环境监测设备)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色(用于主体颜色)\n * @returns SVG HTML 字符串\n */\nexport function generateMonitorSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#009F72';\n // 底座使用稍微深一点的同色系颜色\n const baseColor = adjustColor(mainColor, -20);\n\n // 主体脉冲动画(参照 marker 图标)\n const bodyAnimOpen = animated\n ? '<g transform=\"translate(512, 500)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.12;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -500)\">'\n : '';\n const bodyAnimClose = animated ? '</g></g></g>' : '';\n\n // 底座呼吸动画(参照 marker 阴影动画)\n const baseAnimOpen = animated\n ? '<g transform=\"translate(512, 800)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -800)\">'\n : '';\n const baseAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 底座 -->\n ${baseAnimOpen}\n <path d=\"M624.3 730.9l-0.5 1.2-31.3 73.1-5.1 11.9c-13.3 30.4-42.1 49.3-74.9 49.3-33.6 0-62.5-19.2-75-49.5l-5.2-11.9-31.3-72.8-0.6-1.5c-52.8 20.5-87.5 55-87.5 94.2 0 62.8 89.1 113.8 199.1 113.8s199.1-50.9 199.1-113.8c0-39-34.4-73.5-86.8-94z\" fill=\"${baseColor}\"/>\n ${baseAnimClose}\n\n <!-- 温度计主体 -->\n ${bodyAnimOpen}\n <path d=\"M793.5 87.4c-4.3 0-8.6 0.4-12.9 1.9l-256.1 85.4c-4.3 1.6-8.2 1.9-12.5 1.9-4.3 0-8.2-0.4-12.5-1.9L243.4 89.3c-4.3-1.6-8.6-1.9-12.5-1.9-26.5 0-47.2 27.7-35.9 54.2l245.2 573.8 31.2 72.9 5.1 11.7c6.6 16 21 23.8 35.9 23.8 14.4 0 28.8-7.8 35.9-23.8l5.1-11.7 31.2-72.9L829 141.6c11.2-26.9-9.4-54.2-35.5-54.2z\" fill=\"${mainColor}\"/>\n ${bodyAnimClose}\n </svg>\n `;\n}\n\n/**\n * 调整颜色亮度\n * @param color - 十六进制颜色值\n * @param amount - 调整量(正数变亮,负数变暗)\n */\nfunction adjustColor(color: string, amount: number): string {\n const hex = color.replace('#', '');\n const r = Math.max(0, Math.min(255, parseInt(hex.slice(0, 2), 16) + amount));\n const g = Math.max(0, Math.min(255, parseInt(hex.slice(2, 4), 16) + amount));\n const b = Math.max(0, Math.min(255, parseInt(hex.slice(4, 6), 16) + amount));\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\n/**\n * 生成警示警报图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateAlertSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#d81e06';\n\n // 主体脉冲动画(参照 marker 图标)\n const bodyAnimOpen = animated\n ? '<g transform=\"translate(512, 512)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.12;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -512)\">'\n : '';\n const bodyAnimClose = animated ? '</g></g></g>' : '';\n\n // 底座呼吸动画(参照 marker 阴影动画)\n const baseAnimOpen = animated\n ? '<g transform=\"translate(512, 885)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -885)\">'\n : '';\n const baseAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 顶部圆环 -->\n ${bodyAnimOpen}\n <path d=\"M512 0c-168.821622 0-304.432432 135.610811-304.432432 304.432432s135.610811 304.432432 304.432432 304.432433 304.432432-135.610811 304.432432-304.432433-135.610811-304.432432-304.432432-304.432432z m0 359.783784c-30.443243 0-55.351351-24.908108-55.351351-55.351352s24.908108-55.351351 55.351351-55.351351 55.351351 24.908108 55.351351 55.351351-24.908108 55.351351-55.351351 55.351352z\" fill=\"${mainColor}\"/>\n ${bodyAnimClose}\n\n <!-- 支柱 -->\n <path d=\"M512 553.513514c16.605405 0 27.675676 11.07027 27.675676 27.675675v276.756757c0 16.605405-11.07027 27.675676-27.675676 27.675676s-27.675676-11.07027-27.675676-27.675676v-276.756757c0-16.605405 11.07027-27.675676 27.675676-27.675675z\" fill=\"${mainColor}\"/>\n\n <!-- 底座 -->\n ${baseAnimOpen}\n <path d=\"M747.243243 885.621622c0-71.956757-105.167568-124.540541-235.243243-124.540541s-235.243243 52.583784-235.243243 124.540541 105.167568 124.540541 235.243243 124.54054 235.243243-52.583784 235.243243-124.54054z m-442.810811 0c0-49.816216 91.32973-96.864865 207.567568-96.864865s207.567568 47.048649 207.567568 96.864865-91.32973 96.864865-207.567568 96.864864-207.567568-47.048649-207.567568-96.864864z\" fill=\"${mainColor}\"/>\n <!-- 底座中心实心圆 -->\n <ellipse cx=\"512\" cy=\"885.6\" rx=\"110.7\" ry=\"55.35\" fill=\"${mainColor}\"/>\n ${baseAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成旗帜图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateFlagSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#666666';\n\n // 旗帜飘动动画\n const flagAnimOpen = animated\n ? '<g><animateTransform attributeName=\"transform\" type=\"rotate\" values=\"-5 355 103;5 355 103;-5 355 103\" dur=\"1s\" repeatCount=\"indefinite\"/>'\n : '';\n const flagAnimClose = animated ? '</g>' : '';\n\n // 底座呼吸动画(参照 marker 阴影动画)\n const baseAnimOpen = animated\n ? '<g transform=\"translate(512, 880)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -880)\">'\n : '';\n const baseAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 旗杆 -->\n <path d=\"M268.528941 77.673412a24.094118 24.094118 0 1 1 48.188235 0v805.044706a24.094118 24.094118 0 1 1-48.188235 0V77.703529z\" fill=\"${mainColor}\"/>\n\n <!-- 旗帜主体 -->\n ${flagAnimOpen}\n <path d=\"M355.990588 103.785412v502.362353s100.442353-122.789647 256.783059-55.777883c61.409882 33.430588 117.187765 83.727059 212.118588 83.727059 94.870588 0 156.310588-55.838118 156.310589-55.838117V92.611765s-139.565176 139.535059-312.621177 22.317176c-44.664471-33.490824-122.819765-66.981647-184.229647-50.236235-66.981647 16.745412-128.391529 39.092706-128.391529 39.092706\" fill=\"${mainColor}\"/>\n ${flagAnimClose}\n\n <!-- 底座 -->\n ${baseAnimOpen}\n <path d=\"M374.964706 818.356706a24.094118 24.094118 0 1 1 8.372706-47.465412c97.671529 17.317647 165.797647 60.988235 165.797647 119.055059 0 75.414588-116.284235 126.795294-256.512 126.795294-140.197647 0-256.481882-51.380706-256.481883-126.795294 0-52.976941 56.560941-93.876706 141.101177-113.935059a24.094118 24.094118 0 0 1 11.143529 46.893177c-65.234824 15.450353-104.056471 43.550118-104.05647 67.041882 0 38.038588 91.798588 78.607059 208.293647 78.607059 116.525176 0 208.323765-40.568471 208.323765-78.607059 0-26.593882-48.880941-57.916235-126.012236-71.589647z\" fill=\"${mainColor}\"/>\n ${baseAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成靶心图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateTargetSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#F13F3F';\n\n // 主体脉冲动画(参照 marker 图标)\n const bodyAnimOpen = animated\n ? '<g transform=\"translate(512, 512)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.12;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -512)\">'\n : '';\n const bodyAnimClose = animated ? '</g></g></g>' : '';\n\n // 底座脉冲动画\n const baseAnimOpen = animated\n ? '<g transform=\"translate(512, 1008)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.25;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.15;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -1008)\">'\n : '';\n const baseAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 底座 -->\n ${baseAnimOpen}\n <path d=\"M462.665 1012.569a49.335 7.821 0 1 0 98.67 0 49.335 7.821 0 1 0-98.67 0z\" fill=\"#8E8E8E\"/>\n <path d=\"M515.61 1008.357h-7.22c-10.228 0-18.05-8.423-18.05-18.05V543.287c0-10.228 8.424-18.05 18.05-18.05h7.22c10.228 0 18.05 8.423 18.05 18.05v447.022c0 10.228-7.822 18.05-18.05 18.05z\" fill=\"#B7B7B7\"/>\n ${baseAnimClose}\n\n <!-- 靶心主体 -->\n ${bodyAnimOpen}\n <path d=\"M237.048 274.952a274.952 274.952 0 1 0 549.904 0 274.952 274.952 0 1 0-549.904 0z\" fill=\"${mainColor}\"/>\n <!-- 中心白点 -->\n <path d=\"M367.004 179.29a48.132 48.132 0 1 0 96.263 0 48.132 48.132 0 1 0-96.263 0z\" fill=\"#FFFFFF\"/>\n ${bodyAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成风向图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateWindSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#CA2F2F';\n\n // 风向标整体上下移动动画\n const arrowAnimOpen = animated\n ? '<g><animateTransform attributeName=\"transform\" type=\"translate\" values=\"0,0;0,-120;0,0\" dur=\"0.8s\" repeatCount=\"indefinite\"/>'\n : '';\n const arrowAnimClose = animated ? '</g>' : '';\n\n // 三角形颜色(基于 mainColor 生成不同深浅)\n const arrowColor1 = adjustColor(mainColor, 40); // 最亮\n const arrowColor2 = adjustColor(mainColor, -20); // 稍暗\n const arrowColor3 = mainColor; // 主色\n\n // 外圈脉冲动画\n const outerAnim = animated\n ? '<g transform=\"translate(512, 800)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.1;1\" dur=\"2s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.3;0.15;0.3\" dur=\"2s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -800)\">'\n : '';\n const outerAnimClose = animated ? '</g></g></g>' : '';\n\n // 内圈脉冲动画\n const innerAnimOpen = animated\n ? '<g transform=\"translate(512, 800)\"><g><animateTransform attributeName=\"transform\" type=\"scale\" values=\"1;1.15;1\" dur=\"1.5s\" repeatCount=\"indefinite\"/><animate attributeName=\"opacity\" values=\"0.5;0.2;0.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/><g transform=\"translate(-512, -800)\">'\n : '';\n const innerAnimClose = animated ? '</g></g></g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 外圈 -->\n ${outerAnim}\n <path d=\"M97.52381 799.695238a409.6 214.552381 0 1 0 819.2 0 409.6 214.552381 0 1 0-819.2 0Z\" fill=\"${mainColor}\" opacity=\"0.3\"/>\n ${outerAnimClose}\n\n <!-- 中圈 -->\n ${innerAnimOpen}\n <path d=\"M273.066667 799.695238a234.057143 136.533333 0 1 0 468.114285 0 234.057143 136.533333 0 1 0-468.114285 0Z\" fill=\"${mainColor}\" opacity=\"0.5\"/>\n ${innerAnimClose}\n\n <!-- 内圈 -->\n <path d=\"M409.6 799.695238a97.52381 39.009524 0 1 0 195.047619 0 97.52381 39.009524 0 1 0-195.047619 0Z\" fill=\"${mainColor}\"/>\n\n <!-- 风向标整体(上下移动) -->\n ${arrowAnimOpen}\n <path d=\"M504.734476 655.36L500.297143 97.889524 781.165714 0z\" fill=\"${arrowColor1}\"/>\n <path d=\"M504.734476 655.36L500.297143 97.889524 219.428571 0z\" fill=\"${arrowColor2}\"/>\n <path d=\"M500.297143 97.889524L781.165714 0H219.428571z\" fill=\"${arrowColor3}\"/>\n ${arrowAnimClose}\n </svg>\n `;\n}\n\n/**\n * 生成双旗帜图标 SVG\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nexport function generateFlagDoubleSvg(\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n const mainColor = color || '#5CE68F';\n const secondaryColor = adjustColor(mainColor, 30); // 浅一点的颜色\n\n // 左侧旗帜上下移动动画\n const leftFlagAnimOpen = animated\n ? '<g><animateTransform attributeName=\"transform\" type=\"translate\" values=\"0,0;0,-50;0,0\" dur=\"1.5s\" repeatCount=\"indefinite\"/>'\n : '';\n const leftFlagAnimClose = animated ? '</g>' : '';\n\n // 右侧旗帜上下移动动画(错开相位)\n const rightFlagAnimOpen = animated\n ? '<g><animateTransform attributeName=\"transform\" type=\"translate\" values=\"0,-50;0,0;0,-50\" dur=\"1.5s\" repeatCount=\"indefinite\" begin=\"0.3s\"/>'\n : '';\n const rightFlagAnimClose = animated ? '</g>' : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1032 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 左侧旗帜 -->\n ${leftFlagAnimOpen}\n <path d=\"M557.967771 161.749158H151.200657L57.682634 306.078735l93.518023 134.252539H557.967771\" fill=\"${secondaryColor}\" stroke=\"#6E6E96\" stroke-width=\"3\"/>\n <path d=\"M557.967771 471.078947H151.196557a30.743573 30.743573 0 0 1-25.229491-13.172303L32.453144 323.654105a30.747673 30.747673 0 0 1-0.573957-34.293905l93.518022-144.329576a30.747673 30.747673 0 0 1 25.803448-14.029139h406.771214c16.985015 0 30.747673 13.766758 30.747673 30.747673s-13.762658 30.747673-30.747673 30.747673H167.915092L94.723331 305.459682l72.531711 104.123919H557.967771c16.985015 0 30.747673 13.766758 30.747673 30.747673s-13.762658 30.747673-30.747673 30.747673z\" fill=\"#6E6E96\" stroke=\"#6E6E96\" stroke-width=\"3\"/>\n ${leftFlagAnimClose}\n\n <!-- 右侧旗帜 -->\n ${rightFlagAnimOpen}\n <path d=\"M577.084624 439.449841h304.270772l93.513922 144.395172-93.513922 134.334533h-304.270772\" fill=\"${mainColor}\" stroke=\"#6E6E96\" stroke-width=\"3\"/>\n <path d=\"M881.355396 748.927218h-304.270772c-16.985015 0-30.747673-13.762658-30.747673-30.747672s13.762658-30.747673 30.747673-30.747673h288.212287l72.53581-104.205914-73.19586-113.028445h-287.552237c-16.985015 0-30.747673-13.766758-30.747673-30.747673s13.762658-30.747673 30.747673-30.747673h304.270772a30.747673 30.747673 0 0 1 25.807547 14.033238l93.513922 144.395172a30.747673 30.747673 0 0 1-0.573956 34.281605l-93.513923 134.334533a30.747673 30.747673 0 0 1-25.23359 13.180502z\" fill=\"#6E6E96\" stroke=\"#6E6E96\" stroke-width=\"3\"/>\n ${rightFlagAnimClose}\n\n <!-- 旗杆 -->\n <path d=\"M577.084624 1012.311785h-106.546836a30.747673 30.747673 0 0 1-30.747673-30.747673V409.739389a30.747673 30.747673 0 0 1 61.495346 0v541.07705h45.05149V78.504958h-45.05149v52.656415a30.747673 30.747673 0 0 1-61.495346 0V47.757286a30.747673 30.747673 0 0 1 30.747673-30.747673h106.546836a30.747673 30.747673 0 0 1 30.747673 30.747673v933.806826c0 16.985015-13.762658 30.747673-30.747673 30.747673z\" fill=\"#6E6E96\"/>\n </svg>\n `;\n}\n","/**\n * 同心圆脉冲图标 SVG 生成器\n * @description 生成带扩散/收缩脉冲动画的同心圆地图标记 SVG\n */\n\nimport type { PresetIconName } from '../types/icon';\n\n/** 脉冲图标颜色配置 */\nconst PULSE_COLORS: Record<string, { outer: string; inner: string }> = {\n 'pulse-blue': { outer: '#D7EDFE', inner: '#409FFF' },\n 'pulse-green': { outer: '#D4EDDA', inner: '#52C41A' },\n 'pulse-red': { outer: '#F8D7DA', inner: '#E53935' },\n 'pulse-orange': { outer: '#FFE0B2', inner: '#FB8C00' },\n 'pulse-purple': { outer: '#E8DAEF', inner: '#7C4DFF' },\n 'pulse-arrow': { outer: '#FFB199', inner: '#FF6C35' },\n};\n\n/**\n * 生成同心圆脉冲图标 SVG\n * @param iconType - 标记类型(pulse/pulse-blue/green/red/orange/purple/arrow)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用脉冲动画\n * @param color - 可选的自定义颜色,当 iconType 为 'pulse' 时使用此颜色\n * @returns SVG HTML 字符串,非脉冲图标返回空字符串\n */\nexport function generatePulseSvg(\n iconType: PresetIconName,\n width: number,\n height: number,\n animated: boolean,\n color?: string\n): string {\n // 'pulse' 类型使用传入的 color 生成双色脉冲\n if (iconType === 'pulse') {\n const pulseColor = color || '#52c41a';\n return generateUniversalPulseSvg(width, height, animated, pulseColor);\n }\n\n const colors = PULSE_COLORS[iconType];\n if (!colors) return '';\n\n // pulse-arrow 特殊处理:带箭头的脉冲图标\n if (iconType === 'pulse-arrow') {\n return generatePulseArrowSvg(width, height, animated, colors);\n }\n\n // 外圈扩散动画:从 r=256 放大到 r=384 同时 opacity 从 1→0,模拟波纹\n const outerAnim = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${colors.outer}\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"1;0;1\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>\n <circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${colors.outer}\" opacity=\"0.6\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"2s\" begin=\"0.7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"0.6;0;0.6\" dur=\"2s\" begin=\"0.7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"320\" fill=\"${colors.outer}\"/>`;\n\n // 内圈收缩动画:从 r=160 缩小到 r=120 再恢复\n const innerAnim = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${colors.inner}\">\n <animate attributeName=\"r\" values=\"160;120;160\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${colors.inner}\"/>`;\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${outerAnim}\n ${innerAnim}\n </svg>\n `;\n}\n\n/**\n * 生成通用脉冲图标 SVG(使用自定义颜色)\n * @param width - SVG 宽度\n * @param height - SVG 高度\n * @param animated - 是否启用脉冲动画\n * @param color - 自定义颜色\n * @returns SVG HTML 字符串\n */\nfunction generateUniversalPulseSvg(\n width: number,\n height: number,\n animated: boolean,\n color: string\n): string {\n // 将颜色转换为外圈浅色版本(添加透明度)\n const outerColor = `${color}30`; // 约 20% 透明度\n\n // 外圈扩散动画\n const outerAnim = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${outerColor}\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"1;0;1\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>\n <circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${outerColor}\" opacity=\"0.6\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"2s\" begin=\"0.7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"0.6;0;0.6\" dur=\"2s\" begin=\"0.7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"320\" fill=\"${outerColor}\"/>`;\n\n // 内圈收缩动画\n const innerAnim = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${color}\">\n <animate attributeName=\"r\" values=\"160;120;160\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${color}\"/>`;\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${outerAnim}\n ${innerAnim}\n </svg>\n `;\n}\n\n/**\n * 生成带箭头的脉冲图标 SVG\n * @description 圆形脉冲 + 中间箭头向前动画\n */\nfunction generatePulseArrowSvg(\n width: number,\n height: number,\n animated: boolean,\n colors: { outer: string; inner: string }\n): string {\n // 外圈脉冲动画:与普通脉冲图标保持一致(r=256)\n const outerPulse = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${colors.outer}\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"1.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"1;0;1\" dur=\"1.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>\n <circle cx=\"512\" cy=\"512\" r=\"256\" fill=\"${colors.outer}\" opacity=\"0.6\">\n <animate attributeName=\"r\" values=\"256;384;256\" dur=\"1.5s\" begin=\"0.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <animate attributeName=\"opacity\" values=\"0.6;0;0.6\" dur=\"1.5s\" begin=\"0.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"320\" fill=\"${colors.outer}\"/>`;\n\n // 内圈脉冲动画:与普通脉冲图标保持一致(r=160)\n const innerPulse = animated\n ? `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${colors.inner}\">\n <animate attributeName=\"r\" values=\"160;120;160\" dur=\"1.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n </circle>`\n : `<circle cx=\"512\" cy=\"512\" r=\"160\" fill=\"${colors.inner}\"/>`;\n\n // 箭头向前动画:向右平移(三角形箭头,适配内圈 r=160)\n const arrowAnim = animated\n ? `<g>\n <animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0;18 0;0 0\" dur=\"0.8s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>\n <path d=\"M460 440 L580 512 L460 584 Z\" fill=\"#FFFFFF\"/>\n </g>`\n : `<path d=\"M460 440 L580 512 L460 584 Z\" fill=\"#FFFFFF\"/>`;\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${outerPulse}\n ${innerPulse}\n ${arrowAnim}\n </svg>\n `;\n}\n\n/** 所有脉冲图标名称列表 */\nexport const PULSE_ICONS: PresetIconName[] = [\n 'pulse',\n 'pulse-blue',\n 'pulse-green',\n 'pulse-red',\n 'pulse-orange',\n 'pulse-purple',\n 'pulse-arrow',\n];\n\n/**\n * 生成 Loading Spinner 图标 SVG\n * @description 旋转圆环加载动画\n */\nexport function generateLoadingSpinnerSvg(\n width: number,\n height: number,\n animated: boolean\n): string {\n const rotateAnim = animated\n ? '<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 512 512\" to=\"360 512 512\" dur=\"1s\" repeatCount=\"indefinite\"/>'\n : '';\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <g>${rotateAnim}\n <circle cx=\"512\" cy=\"512\" r=\"360\" fill=\"none\" stroke=\"#E0E0E0\" stroke-width=\"40\"/>\n <path d=\"M512 152 A360 360 0 0 1 872 512\" fill=\"none\" stroke=\"#1890FF\" stroke-width=\"40\" stroke-linecap=\"round\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成 Loading Dots 图标 SVG\n * @description 跳动圆点加载动画\n */\nexport function generateLoadingDotsSvg(width: number, height: number, animated: boolean): string {\n const dotRadius = 60;\n const spacing = 180;\n const centerX = 512 - spacing;\n const centerY = 512;\n const colors = ['#1890FF', '#52C41A', '#FAAD14'];\n const dots: string[] = [];\n\n for (let i = 0; i < 3; i++) {\n const x = centerX + i * spacing;\n const bounceAnim = animated\n ? `<animate attributeName=\"cy\" values=\"${centerY};${centerY - 80};${centerY}\" dur=\"0.6s\" begin=\"${i * 0.15}s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.4 0 0.2 1\"/>`\n : '';\n dots.push(\n `<circle cx=\"${x}\" cy=\"${centerY}\" r=\"${dotRadius}\" fill=\"${colors[i]}\" opacity=\"0.9\">${bounceAnim}</circle>`\n );\n }\n\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n ${dots.join('\\n ')}\n </svg>\n `;\n}\n\n/** 所有 Loading 图标名称列表 */\nexport const LOADING_ICONS: PresetIconName[] = ['loading-spinner', 'loading-dots'];\n","/**\n * LRU 缓存工具类\n * @description 实现最近最少使用(Least Recently Used)缓存策略\n * @template K - 缓存键类型\n * @template V - 缓存值类型\n */\n\nexport class LRUCache<K, V> {\n private cache = new Map<K, V>();\n private maxSize_: number;\n\n constructor(maxSize = 200) {\n if (maxSize <= 0) {\n throw new Error('LRUCache: maxSize must be greater than 0');\n }\n this.maxSize_ = maxSize;\n }\n\n /**\n * 获取缓存值\n * @description 访问缓存时会将被访问元素移到末尾(最近使用位置)\n * @param key - 缓存键\n * @returns 缓存值,不存在返回 undefined\n */\n get(key: K): V | undefined {\n if (!this.cache.has(key)) {\n return undefined;\n }\n // 将访问的元素移到末尾(标记为最近使用)\n const value = this.cache.get(key)!;\n this.cache.delete(key);\n this.cache.set(key, value);\n return value;\n }\n\n /**\n * 设置缓存值\n * @description 如果缓存已满,删除最久未使用的元素\n * @param key - 缓存键\n * @param value - 缓存值\n */\n set(key: K, value: V): void {\n // 如果已存在,先删除(稍后会添加到末尾)\n if (this.cache.has(key)) {\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize_) {\n // 缓存已满,删除最久未使用的元素(第一个元素)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n // 添加到末尾(最近使用位置)\n this.cache.set(key, value);\n }\n\n /**\n * 检查键是否存在\n */\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n /**\n * 删除指定键\n */\n delete(key: K): boolean {\n return this.cache.delete(key);\n }\n\n /**\n * 清空缓存\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * 获取缓存大小\n */\n get size(): number {\n return this.cache.size;\n }\n\n /**\n * 获取最大缓存容量\n */\n get maxSize(): number {\n return this.maxSize_;\n }\n\n /**\n * 获取所有缓存键(按访问时间排序,从最早到最近)\n */\n keys(): IterableIterator<K> {\n return this.cache.keys();\n }\n\n /**\n * 获取所有缓存值(按访问时间排序,从最早到最近)\n */\n values(): IterableIterator<V> {\n return this.cache.values();\n }\n\n /**\n * 获取缓存统计信息\n */\n getStats(): { size: number; maxSize: number; utilization: number } {\n return {\n size: this.cache.size,\n maxSize: this.maxSize,\n utilization: this.cache.size / this.maxSize,\n };\n }\n}\n\nexport default LRUCache;\n","/**\n * SVG 安全处理工具\n * @description 统一的 SVG 清理、解析、生成工具,防止 XSS 注入\n *\n * ## 核心功能\n *\n * - SVG 安全清理:移除 script 标签和危险事件属性\n * - HTML 转义:防止 XSS 注入攻击\n * - 容器构建:统一的 SVG 容器 HTML 生成\n *\n * @packageDocumentation\n */\n\n/**\n * 使用 DOMParser 安全解析并清理 SVG 字符串,防止 XSS 注入\n * @description 移除 script 标签和危险事件属性 (onload, onerror, onmouseover, onclick)\n * @param svgString - 原始 SVG 字符串\n * @returns 清理后的 SVG 字符串\n */\nexport function sanitizeSvg(svgString: string): string {\n if (typeof DOMParser === 'undefined') return svgString;\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgString, 'image/svg+xml');\n const parseError = doc.querySelector('parsererror');\n if (parseError) return '';\n\n // 移除 script 标签\n doc.querySelectorAll('script').forEach(el => el.remove());\n\n // 移除危险事件属性\n const dangerousAttrs = ['onload', 'onerror', 'onmouseover', 'onclick'];\n doc.querySelectorAll('*').forEach(el => {\n dangerousAttrs.forEach(attr => el.removeAttribute(attr));\n });\n\n return new XMLSerializer().serializeToString(doc.documentElement);\n}\n\n/**\n * 防 XSS:转义 SVG 属性值中的特殊字符\n * @param s - 需要转义的字符串\n * @returns 转义后的字符串\n */\nexport function escapeSvgAttr(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/'/g, '&#39;');\n}\n\n/**\n * SVG 容器配置选项\n */\nexport interface SvgContainerOptions {\n /** CSS 类名 */\n className?: string;\n /** 是否启用动画 */\n animated?: boolean;\n /** 额外内联样式 */\n extraStyle?: string;\n /** 是否居中内容 */\n centerContent?: boolean;\n}\n\n/**\n * 构建 SVG 容器 HTML\n * @param content - 容器内部 HTML 内容\n * @param size - 容器尺寸 [width, height]\n * @param options - 容器配置选项\n * @returns 容器 HTML 字符串\n */\nexport function buildSvgContainer(\n content: string,\n size: [number, number],\n options: SvgContainerOptions = {}\n): string {\n const { className = '', animated = false, extraStyle = '', centerContent = false } = options;\n\n const animatedClass = animated ? 'animated' : '';\n const centerStyle = centerContent\n ? `\n display: flex;\n align-items: center;\n justify-content: center;\n `\n : '';\n\n return `<div class=\"${className} ${animatedClass}\" style=\"\n width: ${size[0]}px;\n height: ${size[1]}px;\n ${centerStyle}\n filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n ${extraStyle}\n \">${content}</div>`;\n}\n","/**\n * @fileoverview 农机/载具 SVG 图标生成器\n * @description 从 iconCache.ts 提取的大型内联 SVG 生成函数\n * @module utils/icons\n */\n\n/**\n * 生成拖拉机 SVG(内联,带车轮旋转动画)\n */\nexport function generateTractorSvg(width: number, height: number, animated: boolean): string {\n const animateFront = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 833.6 845.92\" to=\"360 833.6 845.92\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateRear = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 255.704 780.616\" to=\"360 255.704 780.616\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -14; 0 3; 0 -10; 0 0\" dur=\"0.4s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n return `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 1024 950\"\n width=\"${width}\"\n height=\"${height}\"\n style=\"overflow: hidden; display: block;\"\n >\n <!-- 车身 -->\n <g class=\"tractor-body\">${animateBody}\n <path d=\"M744.624 247.944m30 0l4.72 0q30 0 30 30l0 165.592q0 30-30 30l-4.72 0q-30 0-30-30l0-165.592q0-30 30-30Z\" fill=\"#EEBB4D\"/>\n <path d=\"M124.144 369.432h657.144a168 168 0 0 1 168 168v270.792H84.144V409.432a40 40 0 0 1 40-40z\" fill=\"#80BC50\"/>\n <path d=\"M176.392 186.16h72.52v183.264h-72.52z\" fill=\"#E0AA3D\"/>\n <path d=\"M541.296 186.16h72.52v183.264h-72.52z\" fill=\"#EEBB4D\"/>\n <path d=\"M96.936 47.48m40 0l516.344 0q40 0 40 40l0 58.68q0 40-40 40l-516.344 0q-40 0-40-40l0-58.68q0-40 40-40Z\" fill=\"#184D47\"/>\n <path d=\"M512 369.432H124.144a40 40 0 0 0-40 40v398.792H512z\" fill=\"#75B23F\"/>\n <path d=\"M868 591.432h81.272v55.728H868a26.48 26.48 0 0 1-26.48-26.48v-2.76a26.48 26.48 0 0 1 26.48-26.48z\" fill=\"#D6EFC7\"/>\n <path d=\"M84.144 497.6h389.712a16 16 0 0 0 0-32H84.144z\" fill=\"#E0AA3D\"/>\n <path d=\"M512 47.48H136.936a40 40 0 0 0-40 40v58.68a40 40 0 0 0 40 40H512z\" fill=\"#0E3D36\"/>\n </g>\n <!-- 前轮(小轮,中心 833.6,845.92,半径130.6) -->\n <g class=\"tractor-frontend-wheel\">\n ${animateFront}\n <path d=\"M833.6 845.92m-130.6 0a130.6 130.6 0 1 0 261.2 0 130.6 130.6 0 1 0-261.2 0Z\" fill=\"#184D47\"/>\n <path d=\"M833.6 892.36a46.4 46.4 0 1 1 46.4-46.44 46.496 46.496 0 0 1-46.4 46.44z\" fill=\"#D6EFC7\"/>\n <line x1=\"833.6\" y1=\"745.92\" x2=\"833.6\" y2=\"945.92\" stroke=\"#D6EFC7\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n <line x1=\"733.6\" y1=\"845.92\" x2=\"933.6\" y2=\"845.92\" stroke=\"#D6EFC7\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n <line x1=\"763\" y1=\"775.32\" x2=\"904.2\" y2=\"916.52\" stroke=\"#D6EFC7\" stroke-width=\"8\" stroke-linecap=\"round\"/>\n <line x1=\"904.2\" y1=\"775.32\" x2=\"763\" y2=\"916.52\" stroke=\"#D6EFC7\" stroke-width=\"8\" stroke-linecap=\"round\"/>\n </g>\n <!-- 后轮(大轮,中心 255.704,780.616,半径195.904) -->\n <g class=\"tractor-rear-wheel\">\n ${animateRear}\n <path d=\"M255.704 780.616m-195.904 0a195.904 195.904 0 1 0 391.808 0 195.904 195.904 0 1 0-391.808 0Z\" fill=\"#0E3D36\"/>\n <path d=\"M255.704 850.28a69.664 69.664 0 1 1 69.656-69.664 69.736 69.736 0 0 1-69.656 69.664z\" fill=\"#C2DDB1\"/>\n <line x1=\"255.704\" y1=\"634.72\" x2=\"255.704\" y2=\"926.52\" stroke=\"#C2DDB1\" stroke-width=\"12\" stroke-linecap=\"round\"/>\n <line x1=\"110\" y1=\"780.616\" x2=\"401.408\" y2=\"780.616\" stroke=\"#C2DDB1\" stroke-width=\"12\" stroke-linecap=\"round\"/>\n <line x1=\"152.1\" y1=\"677\" x2=\"359.3\" y2=\"884.2\" stroke=\"#C2DDB1\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n <line x1=\"359.3\" y1=\"677\" x2=\"152.1\" y2=\"884.2\" stroke=\"#C2DDB1\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成收割机 SVG(内联,带车轮旋转动画)\n * 红色收割机/工程车图标\n */\nexport function generateTractor2Svg(width: number, height: number, animated: boolean): string {\n const animateFront = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 195.2 794.8\" to=\"360 195.2 794.8\" dur=\"0.8s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateRear = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 1059.7 697.2\" to=\"360 1059.7 697.2\" dur=\"0.8s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -12; 0 4; 0 -8; 0 2; 0 0\" dur=\"0.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.6 1;0.5 0 0.5 1;0.3 0 0.7 1;0.4 0 0.2 1\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1422 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 车身结构 -->\n <g class=\"tractor2-body\">${animateBody}\n <path d=\"M1171.228444 394.268444l64.711112 24.035556 18.972444-59.619556-64.711111-24.035555-18.972445 59.619555\" fill=\"#85A7BD\"/>\n <path d=\"M1171.228444 330.012444l77.169778 32.512 6.513778-23.239111-77.169778-32.540444-6.513778 23.267555\" fill=\"#051013\"/>\n <path d=\"M278.869333 446.179556l83.655111-18.289778-25.486222-37.489778-44.942222 9.870222-13.226667 45.909334\" fill=\"#141E25\"/>\n <path d=\"M286.435556 418.304l48.213333-9.500444-7.594667-46.279112-48.184889 9.415112 7.566223 46.364444\" fill=\"#010C13\"/>\n <path d=\"M281.059556 395.064889l53.589333-4.096-2.218667-5.205333-53.560889 4.096 2.190223 5.205333\" fill=\"#69858E\"/>\n <path d=\"M276.309333 358.115556c0.341333 2.901333 2.275556 4.835556 4.266667 4.323555 1.991111-0.540444 3.299556-3.328 2.958222-6.257778l-2.104889-17.095111c-0.369778-2.929778-2.275556-4.892444-4.266666-4.352-1.991111 0.540444-3.299556 3.299556-2.958223 6.257778l2.104889 17.095111\" fill=\"#1D2C36\"/>\n <path d=\"M254.520889 362.524444l80.128-11.719111-3.555556-16.156444-80.099555 11.719111 3.527111 16.156444\" fill=\"#1D2C36\"/>\n <path d=\"M259.982222 362.524444l73.614222-10.183111 1.052445-17.692444-83.655111 11.52 8.96 16.355555\" fill=\"#FFFFFE\"/>\n <path d=\"M251.022222 334.648889c-0.512-7.111111 3.498667-13.653333 9.614222-14.904889l60.586667-12.771556c6.087111-1.28 11.776 3.242667 13.425778 10.097778l-83.626667 17.578667\" fill=\"#1D2C36\"/>\n <path d=\"M439.381333 390.4h34.702223V229.745778c0-26.624-14.506667-57.031111-33.763556-70.712889l-27.591111-19.598222-22.328889 22.471111 27.591111 19.569778c10.097778 7.168 21.390222 29.354667 21.390222 48.270222v160.654222\" fill=\"#6E8FA1\"/>\n <path d=\"M474.083556 390.4h-55.779556v-83.626667h55.751111z\" fill=\"#85A7BD\"/>\n <!-- 主车身(红色) -->\n <path d=\"M139.434667 781.511111c0 14.961778 12.231111 27.192889 27.136 27.192889h893.895111c14.904889 0 27.107556-12.231111 27.107555-27.192889v-479.857778c0-14.961778-12.003556-25.031111-26.680889-22.357333L166.144 449.479111c-14.705778 2.673778-26.709333 17.066667-26.709333 32.028445v300.003555\" fill=\"#CC3539\"/>\n <path d=\"M139.434667 501.959111v-10.979555c0-15.644444 12.003556-30.748444 26.709333-33.564445L1060.892444 279.324444c14.677333-2.787556 26.680889 7.736889 26.680889 23.381334v28.529778L139.434667 501.959111\" fill=\"#E05755\"/>\n <path d=\"M1087.573333 669.297778v88.945778c0 12.430222-12.202667 22.584889-27.107555 22.584888H166.570667c-14.933333 0-27.136-10.154667-27.136-22.584888V669.297778h948.138666\" fill=\"#B02A2F\"/>\n <path d=\"M1087.573333 725.048889v53.077333c0 16.839111-12.202667 30.577778-27.107555 30.577778H166.570667c-14.933333 0-27.136-13.738667-27.136-30.577778V725.048889h948.138666\" fill=\"#8B2225\"/>\n <path d=\"M780.828444 808.704h-139.434666v-27.875556h139.434666z\" fill=\"#85A7BD\"/>\n <path d=\"M641.393778 725.048889h-278.869334v-27.875556h278.869334z\" fill=\"#85A7BD\"/>\n <path d=\"M780.828444 780.828444h-167.310222v-27.875555h167.310222z\" fill=\"#1B1A1C\"/>\n <path d=\"M780.828444 641.393778h-167.310222v-27.875556h167.310222z\" fill=\"#1B1A1C\"/>\n <path d=\"M836.608 864.483556h-250.993778v-27.875556h250.993778z\" fill=\"#1B1A1C\"/>\n <path d=\"M1059.697778 529.834667H613.518222v-27.875556h446.179556z\" fill=\"#1B1A1C\"/>\n <path d=\"M139.434667 696.718222v-166.4a5.831111 5.831111 0 0 1 2.247111-0.483555h74.695111c3.697778 0 6.712889 3.498667 6.712889 7.822222v151.694222c0 4.323556-3.015111 7.822222-6.712889 7.822222H141.653333a5.831111 5.831111 0 0 1-2.247111-0.455111\" fill=\"#051013\"/>\n <path d=\"M139.434667 531.712c0 1.536 1.336889 2.787556 2.986666 2.787556h77.653334c1.678222 0 3.015111-1.251556 3.015111-2.787556v-3.726222c0-1.536-1.336889-2.787556-2.986667-2.787556h-77.653333c-1.678222 0-3.015111 1.251556-3.015111 2.787556v3.726222M139.434667 559.616c0 1.536 1.336889 2.759111 2.986666 2.759111h77.653334c1.678222 0 3.015111-1.223111 3.015111-2.759111v-3.754667c0-1.536-1.336889-2.787556-2.986667-2.787555h-77.653333c-1.678222 0-3.015111 1.251556-3.015111 2.787555v3.754667M139.434667 587.491556c0 1.536 1.336889 2.787556 2.986666 2.787555h77.653334c1.678222 0 3.015111-1.251556 3.015111-2.787555v-3.726223c0-1.536-1.336889-2.787556-2.986667-2.787555h-77.653333c-1.678222 0-3.015111 1.251556-3.015111 2.787555v3.697778\" fill=\"#85A7BD\"/>\n <path d=\"M139.434667 587.491556c0 1.536 1.336889 2.787556 2.986666 2.787555h77.653334c1.678222 0 3.015111-1.251556 3.015111-2.787555v-3.754667c0-1.507556-1.336889-2.759111-2.986667-2.759111h-77.653333c-1.678222 0-3.015111 1.251556-3.015111 2.759111v3.754667\" fill=\"#85A7BD\"/>\n <!-- 驾驶室 -->\n <path d=\"M613.518222 501.959111h557.710222L1107.512889 0H668.387556l-54.897778 501.959111\" fill=\"#CC3539\"/>\n <path d=\"M641.393778 501.959111h474.083555L1061.262222 0H688.071111l-46.648889 501.959111\" fill=\"#56ABBF\"/>\n <path d=\"M669.297778 83.655111h191.374222l72.362667-55.751111h121.400889-380.131556l-5.034667 55.751111m350.577778 0h32.625778l7.224889-5.575111-2.446222-23.239111-37.404445 28.814222\" fill=\"#3C7381\"/>\n <path d=\"M948.138667 278.869333h140.060444l27.278222 250.965334h-167.338666V278.869333\" fill=\"#1F4550\"/>\n <path d=\"M1003.918222 501.959111H613.546667l17.92-195.214222h372.48v195.214222\" fill=\"#1F4550\"/>\n <path d=\"M636.672 446.179556l9.443556-55.751112-9.443556 55.751112\" fill=\"#97C4C3\"/>\n <path d=\"M1064.391111 111.559111l-9.386667-55.779555 9.386667 55.751111\" fill=\"#DC8063\"/>\n <path d=\"M697.173333 334.648889h75.207111l287.288889-202.040889-5.575111-48.924444 0.568889 5.063111h-7.822222L697.173333 334.648889\" fill=\"#97C4C3\"/>\n <path d=\"M1055.004444 88.32h9.386667l-0.682667-9.301333-8.732444 9.301333\" fill=\"#7E9B9B\"/>\n <path d=\"M641.393778 418.304l139.434666-83.655111h-72.817777l-61.155556 36.693333-5.461333 46.933334\" fill=\"#667777\"/>\n <path d=\"M641.393778 334.648889h27.136L1031.822222 83.626667h-165.831111l-214.243555 148.024889-10.353778 102.968888\" fill=\"#97C4C3\"/>\n <path d=\"M1061.12 55.751111l-2.844444-27.875555 2.844444 27.875555\" fill=\"#DC8063\"/>\n <path d=\"M1061.12 55.751111l-2.844444-27.875555 2.844444 27.875555\" fill=\"#97C4C3\"/>\n <path d=\"M864.483556 83.655111h158.065777l37.148445-28.814222-2.787556-26.965333h-120.547555l-71.879111 55.779555\" fill=\"#7E9B9B\"/>\n <path d=\"M641.393778 362.524444l27.875555-27.875555h-25.941333l-1.934222 27.875555\" fill=\"#667777\"/>\n <path d=\"M892.387556 529.834667h-27.875556V27.875556h27.875556z\" fill=\"#CC3539\"/>\n <!-- 挡泥板 -->\n <path d=\"M697.201778 709.774222c0.113778-51.768889 10.325333-101.148444 28.728889-146.033778a374.613333 374.613333 0 0 1 131.328-165.034666 351.772444 351.772444 0 0 1 343.324444-34.588445c65.024 28.472889 120.291556 76.003556 159.402667 135.879111a384.369778 384.369778 0 0 1 62.208 209.777778l0.028444 15.189334-29.297778 0.085333v-15.189333a355.669333 355.669333 0 0 0-26.453333-134.257778 344.547556 344.547556 0 0 0-120.718222-151.722667A323.185778 323.185778 0 0 0 930.133333 392.106667c-59.704889 26.168889-110.563556 69.888-146.488889 124.928a353.109333 353.109333 0 0 0-57.173333 192.853333l-0.056889 15.160889-29.297778-0.085333 0.056889-15.189334\" fill=\"#962427\"/>\n <!-- 顶部栏杆 -->\n <path d=\"M641.393778 42.752c0 7.196444 3.612444 13.027556 8.049778 13.027556h457.955555c4.465778 0 8.078222-5.831111 8.078222-13.027556V13.027556c0-7.196444-3.612444-13.027556-8.049777-13.027556h-457.955556c-4.465778 0-8.078222 5.831111-8.078222 13.027556v29.724444\" fill=\"#CC3539\"/>\n <path d=\"M1115.477333 27.875556v15.388444c0 6.912-3.612444 12.515556-8.049777 12.515556h-457.955556c-4.465778 0-8.078222-5.603556-8.078222-12.515556v-15.36h474.083555\" fill=\"#852124\"/>\n <!-- 前结构 -->\n <path d=\"M641.393778 864.483556h-27.875556V557.738667h27.875556z\" fill=\"#1B1A1C\"/>\n <path d=\"M529.834667 641.393778h-139.434667v-111.559111h139.434667z\" fill=\"#141E25\"/>\n <path d=\"M529.834667 669.297778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n <path d=\"M501.959111 669.297778h-27.875555v-111.559111h27.875555z\" fill=\"#4F656A\"/>\n <path d=\"M474.083556 669.297778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n <path d=\"M446.179556 641.393778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n <path d=\"M446.179556 641.393778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n <path d=\"M418.304 641.393778h-27.875556v-111.559111h27.875556z\" fill=\"#4F656A\"/>\n </g>\n <!-- 前轮组(齿轮+轮胎,中心 195.2,794.8) -->\n <g class=\"tractor2-front-wheel\">\n ${animateFront}\n <path d=\"M11.292444 781.312h5.518223c1.251556-17.038222 4.835556-33.479111 10.467555-49.009778l-5.006222-1.991111a10.382222 10.382222 0 0 1-6.058667-13.880889l2.360889-5.262222a11.605333 11.605333 0 0 1 14.791111-5.660444l5.063111 1.991111a194.332444 194.332444 0 0 1 28.672-39.964445l-3.925333-3.640889a10.126222 10.126222 0 0 1 0-14.990222l4.323556-4.039111a11.861333 11.861333 0 0 1 15.985777 0l3.896889 3.640889c13.084444-10.695111 27.676444-19.854222 43.377778-27.221333l-2.104889-4.750223a10.382222 10.382222 0 0 1 6.115556-13.824l5.603555-2.190222a11.576889 11.576889 0 0 1 14.791111 5.717333l2.076445 4.721778a217.827556 217.827556 0 0 1 51.484444-9.557333v-5.176889c0-5.859556 5.091556-10.609778 11.320889-10.609778h6.087111c6.257778 0 11.320889 4.750222 11.320889 10.609778v5.176889c17.976889 1.137778 35.356444 4.437333 51.797334 9.671111l2.104888-4.721778a11.605333 11.605333 0 0 1 14.791112-5.688889l5.603555 2.161778c5.774222 2.275556 8.504889 8.476444 6.087111 13.880889l-2.104889 4.721778a208.327111 208.327111 0 0 1 43.064889 27.079111l3.896889-3.640889a11.832889 11.832889 0 0 1 15.985778 0l4.323555 4.039111a10.154667 10.154667 0 0 1 0 14.990222l-3.896888 3.640889c11.320889 12.231111 21.048889 25.742222 28.871111 40.334222l5.034666-1.962666a11.605333 11.605333 0 0 1 14.791111 5.688889l2.332445 5.290666a10.382222 10.382222 0 0 1-6.058667 13.852445l-5.034666 1.991111c5.575111 15.388444 9.102222 31.687111 10.325333 48.583111h5.518222c6.257778 0 11.292444 4.750222 11.292445 10.609778v5.688889c0 5.859556-5.063111 10.609778-11.292445 10.609777h-5.518222c-1.251556 17.066667-4.835556 33.479111-10.467556 49.038223l5.034667 1.991111c5.745778 2.275556 8.448 8.476444 6.030222 13.852444l-2.360889 5.262222a11.576889 11.576889 0 0 1-14.791111 5.688889l-5.034666-1.991111c-7.793778 14.449778-17.436444 27.875556-28.672 39.936l3.896888 3.669334a10.154667 10.154667 0 0 1 0 14.990222l-4.323555 4.010666a11.832889 11.832889 0 0 1-15.985778 0l-3.896889-3.640888c-13.084444 10.695111-27.676444 19.882667-43.349333 27.249777l2.076444 4.721778a10.382222 10.382222 0 0 1-6.115555 13.852445l-5.603556 2.190222a11.576889 11.576889 0 0 1-14.791111-5.717334l-2.076444-4.721777a217.969778 217.969778 0 0 1-51.484445 9.557333v5.176889c0 5.859556-5.063111 10.581333-11.320889 10.581333h-6.087111c-6.257778 0-11.292444-4.721778-11.292444-10.581333v-5.176889a218.112 218.112 0 0 1-51.825778-9.671111l-2.104889 4.721778a11.605333 11.605333 0 0 1-14.791111 5.688889l-5.603556-2.190223a10.353778 10.353778 0 0 1-6.087111-13.852444l2.104889-4.721778a209.038222 209.038222 0 0 1-43.064889-27.107555l-3.896889 3.640888a11.861333 11.861333 0 0 1-15.985777 0l-4.323556-4.010666a10.126222 10.126222 0 0 1 0-14.990222l3.925333-3.669334a193.052444 193.052444 0 0 1-28.899555-40.334222l-5.034667 1.991111a11.576889 11.576889 0 0 1-14.791111-5.688889l-2.360889-5.290666a10.382222 10.382222 0 0 1 6.087111-13.852445l5.034667-1.991111a182.186667 182.186667 0 0 1-10.325333-48.611556H11.292444c-6.229333 0-11.292444-4.750222-11.292444-10.581333v-5.717333c0-5.859556 5.063111-10.609778 11.292444-10.609778\" fill=\"#323F43\"/>\n <path d=\"M55.751111 794.766222c0 69.319111 62.464 125.496889 139.463111 125.496889 76.999111 0 139.434667-56.177778 139.434667-125.496889 0-69.290667-62.435556-125.496889-139.434667-125.496889-76.999111 0-139.434667 56.206222-139.434666 125.496889\" fill=\"#1D2B2F\"/>\n <path d=\"M83.655111 808.704a111.559111 111.559111 0 1 0 223.089778 0 111.559111 111.559111 0 0 0-223.089778 0\" fill=\"#97B6B6\"/>\n <path d=\"M139.434667 794.766222a69.717333 69.717333 0 1 0 139.434666 0 69.717333 69.717333 0 0 0-139.434666 0\" fill=\"#7B9294\"/>\n <path d=\"M139.434667 808.704a55.779556 55.779556 0 1 0 111.559111 0 55.779556 55.779556 0 0 0-111.559111 0\" fill=\"#97B6B6\"/>\n <line x1=\"195.2\" y1=\"669\" x2=\"195.2\" y2=\"920\" stroke=\"#97B6B6\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"69\" y1=\"794.8\" x2=\"321\" y2=\"794.8\" stroke=\"#97B6B6\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"107\" y1=\"706.6\" x2=\"283.4\" y2=\"883\" stroke=\"#97B6B6\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"283.4\" y1=\"706.6\" x2=\"107\" y2=\"883\" stroke=\"#97B6B6\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n </g>\n <!-- 后轮组(齿轮+轮胎,中心 1059.7,697.2) -->\n <g class=\"tractor2-rear-wheel\">\n ${animateRear}\n <path d=\"M768.483556 692.280889h7.566222c1.706667-23.893333 6.656-46.876444 14.392889-68.636445l-6.883556-2.787555a14.592 14.592 0 0 1-8.334222-19.399111l3.242667-7.395556a15.815111 15.815111 0 0 1 20.366222-7.936l6.912 2.787556a271.274667 271.274667 0 0 1 39.424-55.921778l-5.347556-5.12a14.392889 14.392889 0 0 1 0-20.992l5.916445-5.660444a16.071111 16.071111 0 0 1 21.987555 0l5.347556 5.12a285.866667 285.866667 0 0 1 59.648-38.115556l-2.872889-6.627556a14.620444 14.620444 0 0 1 8.391111-19.399111l7.736889-3.072a15.815111 15.815111 0 0 1 20.309333 8.021334l2.872889 6.627555c22.471111-7.224889 46.222222-11.804444 70.826667-13.397333v-7.224889c0-8.220444 6.940444-14.848 15.530666-14.848h8.362667c8.590222 0 15.559111 6.627556 15.559111 14.848v7.224889c24.746667 1.621333 48.64 6.257778 71.224889 13.511111l2.872889-6.599111a15.815111 15.815111 0 0 1 20.337778-7.964445l7.736889 3.072c7.907556 3.128889 11.662222 11.832889 8.362666 19.399112l-2.901333 6.627555c21.447111 10.24 41.329778 23.04 59.221333 37.916445l5.347556-5.12a16.071111 16.071111 0 0 1 22.016 0l5.916444 5.688888a14.364444 14.364444 0 0 1 0 20.963556l-5.347555 5.12a271.246222 271.246222 0 0 1 39.68 56.462222l6.940444-2.759111a15.843556 15.843556 0 0 1 20.337778 7.964445l3.214222 7.395555a14.620444 14.620444 0 0 1-8.362666 19.399111l-6.912 2.759111c7.651556 21.617778 12.515556 44.401778 14.222222 68.067556h7.566222c8.590222 0 15.530667 6.655 15.530667 14.819555v8.021334a15.217778 15.217778 0 0 1-15.530667 14.819555h-7.566222a259.868444 259.868444 0 0 1-14.421334 68.636445l6.912 2.787555c7.907556 3.157333 11.662222 11.861333 8.305778 19.427556l-3.242666 7.338667a15.815111 15.815111 0 0 1-20.337778 7.964444l-6.940445-2.787556a271.701333 271.701333 0 0 1-39.395555 55.950223l5.347555 5.091555a14.364444 14.364444 0 0 1 0 20.992l-5.916444 5.660445a16.099556 16.099556 0 0 1-22.016 0l-5.347556-5.12c-18.005333 14.990222-38.030222 27.818667-59.619555 38.115555l2.872889 6.627556a14.620444 14.620444 0 0 1-8.391111 19.399111l-7.736889 3.072a15.843556 15.843556 0 0 1-20.337778-8.021333l-2.844445-6.627556c-22.471111 7.224889-46.222222 11.804444-70.826666 13.425778v7.224889a15.217778 15.217778 0 0 1-15.530667 14.819555h-8.362667a15.217778 15.217778 0 0 1-15.559111-14.819555v-7.224889c-24.746667-1.621333-48.64-6.257778-71.224889-13.539556l-2.901333 6.599111a15.815111 15.815111 0 0 1-20.337778 7.964445l-7.708444-3.072a14.592 14.592 0 0 1-8.362667-19.399111l2.872889-6.627556a285.667556 285.667556 0 0 1-59.221333-37.916444l-5.347556 5.12a16.071111 16.071111 0 0 1-21.987555 0l-5.916445-5.688889a14.364444 14.364444 0 0 1 0-20.963556l5.347556-5.12a271.160889 271.160889 0 0 1-39.68-56.462222l-6.940445 2.759111a15.815111 15.815111 0 0 1-20.337777-7.964444l-3.214223-7.395556a14.592 14.592 0 0 1 8.334223-19.399111l6.912-2.759111a259.527111 259.527111 0 0 1-14.193778-68.067556h-7.566222a15.217778 15.217778 0 0 1-15.530667-14.819555v-8.021334c0-8.163556 6.940444-14.819556 15.530667-14.819555\" fill=\"#323F43\"/>\n <path d=\"M864.483556 697.173333a195.214222 195.214222 0 1 0 390.428444 0 195.214222 195.214222 0 0 0-390.428444 0\" fill=\"#1D2B2F\"/>\n <path d=\"M892.387556 711.111111a153.372444 153.372444 0 1 0 306.744888 0 153.372444 153.372444 0 0 0-306.744888 0\" fill=\"#97B6B6\"/>\n <path d=\"M976.042667 697.173333c0 46.193778 43.690667 83.655111 97.592889 83.655111s97.592889-37.461333 97.592888-83.655111c0-46.222222-43.690667-83.655111-97.592888-83.655111s-97.592889 37.432889-97.592889 83.626667\" fill=\"#7B9294\"/>\n <path d=\"M1003.918222 697.173333a55.751111 55.751111 0 1 0 111.559111 0 55.751111 55.751111 0 0 0-111.559111 0\" fill=\"#97B6B6\"/>\n <line x1=\"1059.7\" y1=\"532\" x2=\"1059.7\" y2=\"862\" stroke=\"#97B6B6\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"894\" y1=\"697.2\" x2=\"1225\" y2=\"697.2\" stroke=\"#97B6B6\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"941\" y1=\"578.5\" x2=\"1178.4\" y2=\"815.9\" stroke=\"#97B6B6\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"1178.4\" y1=\"578.5\" x2=\"941\" y2=\"815.9\" stroke=\"#97B6B6\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成货车 SVG(内联,带车轮旋转和车身颠簸动画)\n */\nexport function generateTruckSvg(width: number, height: number, animated: boolean): string {\n const animateHub = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 172 773\" to=\"360 172 773\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateHub2 = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 745 773\" to=\"360 745 773\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -12; 0 3; 0 -8; 0 0\" dur=\"0.45s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 车身 -->\n <g class=\"truck-body\">${animateBody}\n <path d=\"M1007.2 744.7h-1c-6.5 0-11.8-5.3-11.8-11.8v-12.4c0-6.5 5.3-11.8 11.8-11.8h1c6.5 0 11.8 5.3 11.8 11.8v12.4c0 6.5-5.3 11.8-11.8 11.8z\" fill=\"#FF0600\"/>\n <path d=\"M634 225.6H48.3c-20.8 0-37.7 16.9-37.7 37.7v358h661.1v-358c0-20.9-16.9-37.7-37.7-37.7z\" fill=\"#FBB138\"/>\n <path d=\"M896.6 681.3h97.8v-111c0-43.7-14.7-58.5-41.6-104.3-30.4-51.8-37.6-84.5-66.9-84.5H698.4c-8.3 0-15 6.7-15 15v225.3h90.8c49.7-0.1 93.9 23.2 122.4 59.5z\" fill=\"#E84E2F\"/>\n <path d=\"M989.4 689.9h-98.3l-1.6-2.1 2.1 2.1c-28.5-36.2-72.7-59.5-122.4-59.5h-715c-7.6 0-13.8 6.2-13.8 13.8v96.4c0 7.6 6.2 13.7 13.7 13.7h35.5c4-57.5 51.7-102.9 110.2-102.9S306 696.8 310 754.3h349c4-57.5 51.7-102.9 110.2-102.9s106.2 45.4 110.2 102.9h114.9c4.6 0 8.4-3.8 8.4-8.4V705c0-7.8-5.8-14.1-13.3-15.1z\" fill=\"#4D4D4D\"/>\n <path d=\"M964.4 544.2H843.3c-3.5 0-6.4-2.9-6.4-6.4V412.9c0-3.5 2.9-6.4 6.4-6.4h45.4c2.2 0 4.3 1.2 5.5 3.1l75.7 124.9c2.6 4.2-0.5 9.7-5.5 9.7z\" fill=\"#A5E0EF\"/>\n <path d=\"M813.9 544.2h-96c-6.5 0-11.8-5.3-11.8-11.8V418.2c0-6.5 5.3-11.8 11.8-11.8h96c6.5 0 11.8 5.3 11.8 11.8v114.2c0 6.5-5.3 11.8-11.8 11.8z\" fill=\"#A5E0EF\"/>\n <path d=\"M165.9 544.2H163c-18.2 0-33.1-14.9-33.1-33.1V345c0-18.2 14.9-33.1 33.1-33.1h2.9c18.2 0 33.1 14.9 33.1 33.1v166c0 18.3-14.9 33.2-33.1 33.2z\" fill=\"#683E00\"/>\n <path d=\"M342.3 544.2h-2.9c-18.2 0-33.1-14.9-33.1-33.1V345c0-18.2 14.9-33.1 33.1-33.1h2.9c18.2 0 33.1 14.9 33.1 33.1v166c0 18.3-14.9 33.2-33.1 33.2z\" fill=\"#683E00\"/>\n <path d=\"M516.6 544.2h-2.9c-18.2 0-33.1-14.9-33.1-33.1V345c0-18.2 14.9-33.1 33.1-33.1h2.9c18.2 0 33.1 14.9 33.1 33.1v166c0 18.3-14.9 33.2-33.1 33.2z\" fill=\"#683E00\"/>\n </g>\n <!-- 左轮 -->\n <g class=\"truck-left-wheel\">\n <path d=\"M289.2 751.1c2.9-1 4.6-4 3.8-7l-3.2-11.9c-0.8-3-3.8-4.7-6.8-4.2 2.5-1.7 3.4-5 1.9-7.6l-6.2-10.7c-1.6-2.7-4.9-3.5-7.6-2.2 2-2.3 2.1-5.8-0.1-8l-8.7-8.7c-2.2-2.2-5.7-2.2-8-0.1 1.3-2.7 0.5-6.1-2.2-7.6l-10.7-6.2c-2.7-1.5-5.9-0.6-7.6 1.9 0.6-3-1.2-6-4.2-6.8l-11.9-3.2c-3-0.8-6 0.9-7 3.8-0.3-3-2.6-5.4-5.7-5.4h-12.4c-3.1 0-5.4 2.4-5.7 5.4-1-2.9-4-4.6-7-3.8L168 672c-3 0.8-4.7 3.8-4.2 6.8-1.7-2.5-5-3.4-7.6-1.9l-10.7 6.2c-2.7 1.6-3.5 4.9-2.2 7.6-2.3-2-5.8-2.1-8 0.1l-8.7 8.7c-2.2 2.2-2.2 5.7-0.1 8-2.7-1.3-6.1-0.5-7.6 2.2l-6.2 10.7c-1.5 2.7-0.6 5.9 1.9 7.6-3-0.6-6 1.2-6.8 4.2l-3.2 11.9c-0.8 3 0.9 6 3.8 7-3 0.3-5.4 2.6-5.4 5.7v12.4c0 3.1 2.4 5.4 5.4 5.7-2.9 1-4.6 4-3.8 7l3.2 11.9c0.8 3 3.8 4.7 6.8 4.2-2.5 1.7-3.4 5-1.9 7.6l6.2 10.7c1.6 2.7 4.9 3.5 7.6 2.2-2 2.3-2.1 5.8 0.1 8l8.7 8.7c2.2 2.2 5.6 2.2 8 0.1-1.3 2.7-0.5 6.1 2.2 7.6l10.7 6.2c2.7 1.5 5.9 0.6 7.6-1.9-0.6 3 1.2 6 4.2 6.8l11.9 3.2c3 0.8 6-0.9 7-3.8 0.3 3 2.6 5.4 5.7 5.4H205c3.1 0 5.4-2.4 5.7-5.4 1 2.9 4 4.6 7 3.8l11.9-3.2c3-0.8 4.7-3.8 4.2-6.8 1.7 2.5 5 3.4 7.6 1.9L252 843c2.7-1.6 3.5-4.9 2.2-7.6 2.3 2 5.8 2.1 8-0.1l8.7-8.7c2.2-2.2 2.2-5.6 0.1-8 2.7 1.3 6.1 0.5 7.6-2.2l6.2-10.7c1.5-2.7 0.6-5.9-1.9-7.6 3 0.6 6-1.2 6.8-4.2l3.2-11.9c0.8-3-0.9-6-3.8-7 3-0.3 5.4-2.6 5.4-5.7v-12.4c0.1-3.1-2.3-5.5-5.3-5.8z\" fill=\"#363636\"/>\n <g class=\"truck-left-hub\">${animateHub}\n <circle cx=\"172\" cy=\"773\" r=\"80\" fill=\"none\" stroke=\"#4D4D4D\" stroke-width=\"18\"/>\n <circle cx=\"172\" cy=\"773\" r=\"54\" fill=\"#4D4D4D\"/>\n <circle cx=\"172\" cy=\"773\" r=\"30\" fill=\"#FFFFFF\"/>\n <line x1=\"172\" y1=\"719\" x2=\"172\" y2=\"827\" stroke=\"#FFFFFF\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.85\"/>\n <line x1=\"118\" y1=\"773\" x2=\"226\" y2=\"773\" stroke=\"#FFFFFF\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.85\"/>\n <line x1=\"134\" y1=\"735\" x2=\"210\" y2=\"811\" stroke=\"#FFFFFF\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"210\" y1=\"735\" x2=\"134\" y2=\"811\" stroke=\"#FFFFFF\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n </g>\n </g>\n <!-- 右轮 -->\n <g class=\"truck-right-wheel\">\n <path d=\"M861.3 751.1c2.9-1 4.6-4 3.8-7l-3.2-11.9c-0.8-3-3.8-4.7-6.8-4.2 2.5-1.7 3.4-5 1.9-7.6l-6.2-10.7c-1.6-2.7-4.9-3.5-7.6-2.2 2-2.3 2.1-5.8-0.1-8l-8.7-8.7c-2.2-2.2-5.7-2.2-8-0.1 1.3-2.7 0.5-6.1-2.2-7.6l-10.7-6.2c-2.7-1.5-5.9-0.6-7.6 1.9 0.6-3-1.2-6-4.2-6.8l-11.9-3.2c-3-0.8-6 0.9-7 3.8-0.3-3-2.6-5.4-5.7-5.4h-12.4c-3.1 0-5.4 2.4-5.7 5.4-1-2.9-4-4.6-7-3.8l-11.9 3.2c-3 0.8-4.7 3.8-4.2 6.8-1.7-2.5-5-3.4-7.6-1.9l-10.7 6.2c-2.7 1.6-3.5 4.9-2.2 7.6-2.3-2-5.8-2.1-8 0.1l-8.7 8.7c-2.2 2.2-2.2 5.7-0.1 8-2.7-1.3-6.1-0.5-7.6 2.2l-6.2 10.7c-1.5 2.7-0.6 5.9 1.9 7.6-3-0.6-6 1.2-6.8 4.2l-3.2 11.9c-0.8 3 0.9 6 3.8 7-3 0.3-5.4 2.6-5.4 5.7v12.4c0 3.1 2.4 5.4 5.4 5.7-2.9 1-4.6 4-3.8 7l3.2 11.9c0.8 3 3.8 4.7 6.8 4.2-2.5 1.7-3.4 5-1.9 7.6l6.2 10.7c1.6 2.7 4.9 3.5 7.6 2.2-2 2.3-2.1 5.8 0.1 8l8.7 8.7c2.2 2.2 5.6 2.2 8 0.1-1.3 2.7-0.5 6.1 2.2 7.6l10.7 6.2c2.7 1.5 5.9 0.6 7.6-1.9-0.6 3 1.2 6 4.2 6.8l11.9 3.2c3 0.8 6-0.9 7-3.8 0.3 3 2.6 5.4 5.7 5.4H777c3.1 0 5.4-2.4 5.7-5.4 1 2.9 4 4.6 7 3.8l11.9-3.2c3-0.8 4.7-3.8 4.2-6.8 1.7 2.5 5 3.4 7.6 1.9l10.7-6.2c2.7-1.6 3.5-4.9 2.2-7.6 2.3 2 5.8 2.1 8-0.1l8.7-8.7c2.2-2.2 2.2-5.6 0.1-8 2.7 1.3 6.1 0.5 7.6-2.2l6.2-10.7c1.5-2.7 0.6-5.9-1.9-7.6 3 0.6 6-1.2 6.8-4.2l3.2-11.9c0.8-3-0.9-6-3.8-7 3-0.3 5.4-2.6 5.4-5.7v-12.4c0.2-3-2.3-5.4-5.3-5.7z\" fill=\"#363636\"/>\n <g class=\"truck-right-hub\">${animateHub2}\n <circle cx=\"745\" cy=\"773\" r=\"80\" fill=\"none\" stroke=\"#4D4D4D\" stroke-width=\"18\"/>\n <circle cx=\"745\" cy=\"773\" r=\"54\" fill=\"#4D4D4D\"/>\n <circle cx=\"745\" cy=\"773\" r=\"30\" fill=\"#FFFFFF\"/>\n <line x1=\"745\" y1=\"719\" x2=\"745\" y2=\"827\" stroke=\"#FFFFFF\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.85\"/>\n <line x1=\"691\" y1=\"773\" x2=\"799\" y2=\"773\" stroke=\"#FFFFFF\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.85\"/>\n <line x1=\"707\" y1=\"735\" x2=\"783\" y2=\"811\" stroke=\"#FFFFFF\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n <line x1=\"783\" y1=\"735\" x2=\"707\" y2=\"811\" stroke=\"#FFFFFF\" stroke-width=\"6\" stroke-linecap=\"round\" opacity=\"0.7\"/>\n </g>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成货车2 SVG(内联,三轮货车,带车轮旋转和车身颠簸动画)\n */\nexport function generateTruck2Svg(width: number, height: number, animated: boolean): string {\n const animateWheelL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 160 735\" to=\"360 160 735\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelC = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 639 761\" to=\"360 639 761\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 864 735\" to=\"360 864 735\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -10; 0 3; 0 -7; 0 0\" dur=\"0.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 车身 -->\n <g class=\"truck2-body\">${animateBody}\n <path d=\"M351.14974 632.9c0.1-144.4 0.2-288.7-0.1-433.1 0-11 2.5-14.2 13.9-14.2 215.5 0.4 430.9 0.3 646.4 0.2 8 0 12.7 0.2 12.7 10.8-0.4 143.3-0.2 286.5-0.3 429.8 0 2.2-0.3 4.4-0.4 6.6-6.1 5.1-13.4 3.4-20.3 3.4-165.1 0.1-330.2 0.1-495.3 0.1-26.2 0-23.9-1.6-24 24.1 0 7-0.3 14.1 0 21.1 0.4 9.9-3 16.5-13.6 17.8-22 2.5-44.1 0.6-66.2 0.6-11.8 0-23.5 1.5-35.3 0.6-6.6-0.5-13.4-0.4-18.5-5.8-3.3-20.7-5-41.4 1-62z\" fill=\"#EAAC52\"/>\n <path d=\"M0.64974 568.7c-2.3-20.7 1.5-39.5 11.5-58.4C39.44974 458.6 65.04974 406 90.84974 353.7c3.3-6.6 7.1-9 14.4-9 67.7 0.3 135.4 0.3 203.1-0.1 9.9-0.1 11.3 3.7 11.3 12.3-0.3 86.6-0.2 173.2-0.1 259.7 0 5.2 0.4 10.3 0.5 15.5 2 18.4 0.7 36.8 0.8 55.2 0 8.9-6.1 11-13.4 11.1-24.3 0.1-48.6 0.8-72.9-0.4-5.8-0.7-9.8-4.7-14.2-8-38.7-30-81-30.4-120.1-1.4-4.4 3.3-8.4 7.3-13.9 8.9-25.7 2-51.5 0.7-77.3 0.7-3 0-5.9-0.6-8.2-2.7-0.1-10.4-0.2-20.8-0.2-31.2 4.6-5.1 10.9-3.8 16.6-3.8 7.4 0 10.7-2.9 10.7-10.5-0.1-22.5-0.1-45 0-67.5 0.1-8.3-3.8-11-11.5-10.9-5.3 0.3-11.1 1.2-15.8-2.9z\" fill=\"#27A0DC\"/>\n <path d=\"M468.74974 697.1c9.4-1 12.1-6.3 11.4-15.5-0.9-12.1 0.4-24.4-0.4-36.6-0.6-9.6 2.2-12.6 12.2-12.5 54 0.5 108 0.2 162 0.2h360.6c3 0 5.9 0.2 8.9 0.2 0.1 40.2 0.2 80.3 0.4 120.4 0 4.6-1.6 6.8-6.4 6.7-19.1-0.3-38.3-0.5-57.4-0.7-3.8-4.1-4-9.4-5-14.4-9.4-51-48.7-77.3-92.7-77.7-46.6-0.4-84.1 34.1-90.7 79.8-0.7 4.7-0.9 9.7-5.3 12.8-10.1 1.2-20.5-2-30.5 2-4.5-4.7-4.3-11.1-4.6-16.7-2.5-36.2-39.4-69.1-73.7-76.2C607.04974 658.4 555.04974 695.7 547.04974 745.5c-0.8 4.9-0.5 10.5-4.9 14.3l-81.8-0.3c-3.1-5.3 2.2-6.8 4.4-9.7 3.8-5 13.5-10.9 8.6-15.5-5.2-4.8-9.6 5.9-14.6 9.4-5.6 3.9-7 11.1-11.7 15.8-8.9 0-17.8-0.1-26.7-0.1-3-4.8 1.1-6.7 3.8-8.6 14.3-10.4 25.6-24 38.1-36.3 4.7-4.5 8.4-10 6.5-17.4z\" fill=\"#808384\"/>\n <path d=\"M256.14974 760c-1.5-24.1-9.5-45.6-25.3-64.1 24.6-0.1 49.3-1 73.9-0.1 11.7 0.4 14.5-3.6 13.7-14.3-0.9-12.8-0.3-25.7-0.2-38.6 0-3.6-0.8-7.4 1.9-10.6l0.1 0.7c3.7 4.3 3.2 9.7 3.3 14.8 0.1 10.7 0.3 21.4 0 32.1-0.2 8.3 2.8 12.3 11.6 12 5.4-0.2 11.2-1 15.9 3 25.2 4.3 50.6 0.8 75.9 1.8 13.9 0.5 27.9 0.4 41.8 0.5 4.6 0.7 5.4 3.2 3.5 7-2.2 4.6-4.4 9.2-8.4 12.8-13.8 12.6-25.2 27.9-41.2 38.1-1.8 1.1-2.3 2.7-2.5 4.6l-164 0.3z\" fill=\"#808384\"/>\n <path d=\"M88.94974 695.4c-17.7 17.9-23.4 40.7-26.7 64.6-18 0.1-36 0-54 0.2-5.3 0.1-8.1-1.1-7.9-7.3 0.5-19.1 0.5-38.2 0.7-57.3 29.2 0 58.6-0.1 87.9-0.2z\" fill=\"#818485\"/>\n <path d=\"M0.64974 568.7c7.7 0 15.5 0.3 23.2-0.1 5.9-0.3 7.6 2 7.6 7.7-0.2 26.9-0.2 53.7 0 80.6 0 5.7-1.8 7.9-7.6 7.7-7.7-0.3-15.4 0-23.2 0 0.1-32 0-64 0-95.9z\" fill=\"#FCBD5C\"/>\n <path d=\"M351.04974 694.8c-30.8 1.5-30.8 1.5-30.8-29 0-11 0-22 0.1-32.9h30.9c-0.1 20.6-0.1 41.3-0.2 61.9z\" fill=\"#474849\"/>\n <path d=\"M446.84974 759.8c1.4-14 13.4-20.3 21.6-29.3 2.1-2.3 5.8-3.2 7.9-0.7 2.8 3.2 2.7 7.8 0 11.2-3.6 4.6-7.7 8.8-11.9 12.9-1.8 1.8-4.3 2.8-4.3 5.9-4.4-0.1-8.9-0.1-13.3 0z\" fill=\"#808384\"/>\n <path d=\"M606.44974 540.4c5.2-19.9 1-40.2 1.3-60.2 0.3-19.8-0.2-40.2-0.2-60.2 0-18.9-0.2-38 0.1-56.9 0.2-16.5 1.1-33.4-0.4-50.2-1.6-18.5 1.1-37.3-0.4-56-0.5-5.5 2.5-8.3 8-8.2 16.1 0.3 32.2 2.2 48.3 0.1 5.4-0.7 8.1 2.3 7.8 8-1.3 28.8-0.5 57.6-0.8 86.4-0.2 20.4 0.7 41.1 0.6 61.5-0.1 32.2 0.2 64.5-0.3 96.8-0.3 18.9-1.6 38.1 0.7 57.1 1 7.9-2.5 10.3-10.1 10-13.9-0.5-27.9-0.5-41.8 0-7.3 0.2-10.4-1.6-10.8-9.7-0.2-6-2-12.2-2-18.5z\" fill=\"#FCBD5B\"/>\n <path d=\"M458.54974 568.5c-9.3-1.9-21.4-0.3-33.4 0.1-7.3 0.2-9.6-2.2-9.5-9.5 0.4-19.7-0.5-39.5 0.3-59.2 0.9-22.7 0.5-45.6 0.5-68.2 0-19-0.3-38.1-0.3-57.1 0-34.4-1.7-68.9 0.9-103.4 0.5-7-4.6-15.5 1.6-20.9 5.7-4.9 13.4 0.1 20.3 0.3 8.1 0.2 16-2 24.1-2.3 9.4-0.4 13.5 4.1 16.1 11.7 0.6 1.7 1.3 3.7 1 5.4-3.4 21.1 2.6 42.4-1.5 63.6-1.2 6.2 2.3 13.2 1.4 19.6-2.9 20.8-0.4 41.7-0.7 62.5-0.3 16.8 0.2 34.3 0.2 51.3 0 22.2 3 44.6-0.9 66.9-1.2 6.6 1.5 13.8 1.6 20.7 0.1 18.5-0.1 18.5-21.7 18.5z\" fill=\"#FCBD5B\"/>\n <path d=\"M800.04974 408.3V264.6c0-13.6 2.4-15.5 16.2-16.2 12.4-0.6 24.6 4.2 37.3 0.4 5.5-1.7 11.9 2.6 10.3 8.2-2.8 9.9 1.9 19.2 0.4 28.4-3.3 20.4-0.3 41-0.7 61.4-0.4 17.2-2.4 35 0.6 52.4 1.3 7.4 1.8 15.6-1 23.1-2.8 7.6 2.5 14.5 1.3 21.8-3.4 20.7-0.6 41.7-1 62.5-0.3 16.9-2.4 34.3 0.7 51.3 1.2 6.7-1 10.7-8.7 10.6-13.9-0.2-27.9 0-41.8-0.1-9.3-0.1-13.9-3.9-13.8-14.2 0.4-48.6 0.2-97.2 0.2-145.9z\" fill=\"#FCBD5B\"/>\n <path d=\"M938.34974 568.5c-9.8-1.7-22.3 0-34.7 0.1-5.3 0-8.2-1.2-8.2-7.4 0.2-23 0.1-45.9 0.1-68.9v-78.9-82.2c0-23.7 0.2-47.4-0.1-71.1-0.1-7.7 2.1-13.4 10.5-11.1 13 3.5 25.6-0.5 38.3-0.5 10.7 0.1 15.9 6.5 15.3 14.8-1.7 21.9 2.7 43.9-1.2 65.8-1.1 6.2 2.3 13.3 1.4 19.6-3 20.8-0.5 41.8-0.7 62.5-0.2 17.6 0 35.8 0.1 53.5 0.1 21.8 3.2 43.9-1 65.8-1.1 5.8 1.6 12.3 1.7 18.5 0.4 19.5 0.2 19.5-21.5 19.5z\" fill=\"#FCBD5B\"/>\n <path d=\"M511.24974 554.5v-78.7-80-80-43.9c0-15.9 4.1-21.2 19.3-22.8 7.6-0.8 15.5-1.3 23.2 0.8 2.4 0.7 5.1 1.1 7.6 1 14.7-0.6 14.5-0.7 14.4 14-0.2 25.2 1.2 50.4-0.5 75.5-1.3 19.4-0.5 38.9-0.5 58 0 20.3 0.2 41 0.2 61.3 0 18.9 0.7 37.9-0.2 57-0.7 14.9-1 30.6 0.2 45.8 0.4 4.7-0.8 5.9-5.1 5.9-17.1-0.1-34.3 0.1-51.4 0.1-12.5-0.1-4.7-10.1-7.2-14z\" fill=\"#FCBD5B\"/>\n <path d=\"M766.74974 388.9V507c0 16.1-0.2 32.3 0.1 48.4 0.2 9.5-4 13.4-13.3 13.2-13.9-0.3-27.8-0.2-41.8 0-6.5 0.1-11.1-2.8-9.1-9 3.9-12.6-2.6-25 0-37.2 4-18.9 0.8-38.1 0.9-56.8 0.1-16.4 4.1-33.6-0.9-50.3-1.3-4.4-0.9-9.7-0.1-14.3 1.6-9.7-0.1-19.5 0.6-28.8 1.5-21.2-0.6-42.4 0.3-63.6 0.7-16.4 1.7-33.5-0.4-50.1-0.7-5.5 2.9-10.3 6.9-9 11 3.6 21.2-1.3 31.7-1 25.3 0.7 25.2 0.3 25.2 25.6-0.1 38.2-0.1 76.5-0.1 114.8z\" fill=\"#FCBD5B\"/>\n <path d=\"M143.54974 537c-33.3 0-66.5-0.2-99.8 0.1-8.9 0.1-12.3-1.1-7.4-10.7 24-47.1 47.7-94.3 71.1-141.6 3-6 6.7-7.6 12.9-7.6 41.8 0.2 83.5 0.3 125.3-0.1 8-0.1 9.8 2.6 9.8 10.1-0.3 46.2-0.3 92.4 0 138.6 0.1 8.6-2.1 11.5-11.1 11.3-33.5-0.4-67.1-0.1-100.8-0.1z\" fill=\"#E8EDEF\"/>\n <path d=\"M223.14974 568.5h11.1c22 0 26.2 5.2 21.5 27.1-0.8 3.8-3 7-6.5 5.9-16.6-5.4-33.5 1.9-50.2-1.5-6.3-1.3-7.9-3.4-7.8-9.1 0.4-27.4-3.1-21.8 21.9-22.4 3.4-0.1 6.7 0 10 0z\" fill=\"#218ABE\"/>\n </g>\n <!-- 左轮(中心 160,735) -->\n <g class=\"truck2-left-wheel\">\n ${animateWheelL}\n <circle cx=\"160\" cy=\"735\" r=\"55\" fill=\"#464748\"/>\n <circle cx=\"160\" cy=\"735\" r=\"35\" fill=\"#D0D4D6\"/>\n <circle cx=\"160\" cy=\"753\" r=\"16\" fill=\"#818485\"/>\n <line x1=\"160\" y1=\"680\" x2=\"160\" y2=\"790\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"105\" y1=\"735\" x2=\"215\" y2=\"735\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"121\" y1=\"696\" x2=\"199\" y2=\"774\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n <line x1=\"199\" y1=\"696\" x2=\"121\" y2=\"774\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n </g>\n <!-- 中轮(中心 639,761) -->\n <g class=\"truck2-center-wheel\">\n ${animateWheelC}\n <circle cx=\"639\" cy=\"761\" r=\"55\" fill=\"#464748\"/>\n <circle cx=\"639\" cy=\"761\" r=\"35\" fill=\"#D1D5D6\"/>\n <circle cx=\"639\" cy=\"760\" r=\"16\" fill=\"#818485\"/>\n <line x1=\"639\" y1=\"706\" x2=\"639\" y2=\"816\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"584\" y1=\"761\" x2=\"694\" y2=\"761\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"600\" y1=\"722\" x2=\"678\" y2=\"800\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n <line x1=\"678\" y1=\"722\" x2=\"600\" y2=\"800\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n </g>\n <!-- 右轮(中心 864,735) -->\n <g class=\"truck2-right-wheel\">\n ${animateWheelR}\n <circle cx=\"864\" cy=\"735\" r=\"55\" fill=\"#464748\"/>\n <circle cx=\"864\" cy=\"735\" r=\"35\" fill=\"#D0D4D6\"/>\n <circle cx=\"864\" cy=\"760\" r=\"16\" fill=\"#828586\"/>\n <line x1=\"864\" y1=\"680\" x2=\"864\" y2=\"790\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"809\" y1=\"735\" x2=\"919\" y2=\"735\" stroke=\"#FFFFFF\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\"0.8\"/>\n <line x1=\"825\" y1=\"696\" x2=\"903\" y2=\"774\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n <line x1=\"903\" y1=\"696\" x2=\"825\" y2=\"774\" stroke=\"#FFFFFF\" stroke-width=\"4\" stroke-linecap=\"round\" opacity=\"0.65\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成农业无人机 SVG(内联,四旋翼俯视图,带螺旋桨旋转和浮动动画)\n */\nexport function generateAgriDroneSvg(width: number, height: number, animated: boolean): string {\n const animateFloat = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -6; 0 2; 0 -4; 0 0\" dur=\"0.8s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n const animatePropTL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 220 220\" to=\"360 220 220\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n const animatePropTR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 804 220\" to=\"360 804 220\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n const animatePropBL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 220 804\" to=\"360 220 804\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n const animatePropBR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 804 804\" to=\"360 804 804\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <g class=\"agri-drone\">${animateFloat}\n <!-- 中心机身 -->\n <rect x=\"440\" y=\"440\" width=\"144\" height=\"144\" rx=\"20\" fill=\"#E2E8F0\"/>\n <rect x=\"460\" y=\"460\" width=\"104\" height=\"104\" rx=\"12\" fill=\"#A0AEC0\"/>\n <!-- 机臂(X 形) -->\n <line x1=\"512\" y1=\"512\" x2=\"220\" y2=\"220\" stroke=\"#CBD5E0\" stroke-width=\"28\" stroke-linecap=\"round\"/>\n <line x1=\"512\" y1=\"512\" x2=\"804\" y2=\"220\" stroke=\"#CBD5E0\" stroke-width=\"28\" stroke-linecap=\"round\"/>\n <line x1=\"512\" y1=\"512\" x2=\"220\" y2=\"804\" stroke=\"#CBD5E0\" stroke-width=\"28\" stroke-linecap=\"round\"/>\n <line x1=\"512\" y1=\"512\" x2=\"804\" y2=\"804\" stroke=\"#CBD5E0\" stroke-width=\"28\" stroke-linecap=\"round\"/>\n <!-- 左上电机座 -->\n <circle cx=\"220\" cy=\"220\" r=\"28\" fill=\"#CBD5E0\"/><circle cx=\"220\" cy=\"220\" r=\"16\" fill=\"#A0AEC0\"/>\n <!-- 右上电机座 -->\n <circle cx=\"804\" cy=\"220\" r=\"28\" fill=\"#CBD5E0\"/><circle cx=\"804\" cy=\"220\" r=\"16\" fill=\"#A0AEC0\"/>\n <!-- 左下电机座 -->\n <circle cx=\"220\" cy=\"804\" r=\"28\" fill=\"#CBD5E0\"/><circle cx=\"220\" cy=\"804\" r=\"16\" fill=\"#A0AEC0\"/>\n <!-- 右下电机座 -->\n <circle cx=\"804\" cy=\"804\" r=\"28\" fill=\"#CBD5E0\"/><circle cx=\"804\" cy=\"804\" r=\"16\" fill=\"#A0AEC0\"/>\n <!-- 前方指示灯 -->\n <circle cx=\"512\" cy=\"340\" r=\"8\" fill=\"#48BB78\"/>\n <!-- 左上螺旋桨 -->\n <g class=\"agri-drone-prop-tl\">${animatePropTL}\n <ellipse cx=\"220\" cy=\"220\" rx=\"110\" ry=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"220\" cy=\"220\" rx=\"8\" ry=\"110\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 右上螺旋桨 -->\n <g class=\"agri-drone-prop-tr\">${animatePropTR}\n <ellipse cx=\"804\" cy=\"220\" rx=\"110\" ry=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"804\" cy=\"220\" rx=\"8\" ry=\"110\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 左下螺旋桨 -->\n <g class=\"agri-drone-prop-bl\">${animatePropBL}\n <ellipse cx=\"220\" cy=\"804\" rx=\"110\" ry=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"220\" cy=\"804\" rx=\"8\" ry=\"110\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 右下螺旋桨 -->\n <g class=\"agri-drone-prop-br\">${animatePropBR}\n <ellipse cx=\"804\" cy=\"804\" rx=\"110\" ry=\"8\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"804\" cy=\"804\" rx=\"8\" ry=\"110\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 下方喷洒口 -->\n <rect x=\"492\" y=\"580\" width=\"40\" height=\"16\" rx=\"4\" fill=\"#A0AEC0\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成农业无人机侧身 SVG(内联,带螺旋桨旋转和浮动动画)\n */\nexport function generateAgriDroneSideSvg(width: number, height: number, animated: boolean): string {\n const animateFloat = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -6; 0 2; 0 -4; 0 0\" dur=\"0.8s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n const animatePropL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 260 410\" to=\"360 260 410\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n const animatePropR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 764 410\" to=\"360 764 410\" dur=\"0.1s\" repeatCount=\"indefinite\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <g class=\"agri-drone-side\">${animateFloat}\n <!-- 左机臂 -->\n <line x1=\"512\" y1=\"540\" x2=\"260\" y2=\"410\" stroke=\"#CBD5E0\" stroke-width=\"24\" stroke-linecap=\"round\"/>\n <!-- 右机臂 -->\n <line x1=\"512\" y1=\"540\" x2=\"764\" y2=\"410\" stroke=\"#CBD5E0\" stroke-width=\"24\" stroke-linecap=\"round\"/>\n <!-- 机身(椭圆,侧视呈水滴形) -->\n <ellipse cx=\"512\" cy=\"540\" rx=\"90\" ry=\"60\" fill=\"#E2E8F0\"/>\n <ellipse cx=\"512\" cy=\"540\" rx=\"60\" ry=\"40\" fill=\"#A0AEC0\"/>\n <!-- 左电机座 -->\n <circle cx=\"260\" cy=\"410\" r=\"22\" fill=\"#CBD5E0\"/>\n <circle cx=\"260\" cy=\"410\" r=\"12\" fill=\"#A0AEC0\"/>\n <!-- 右电机座 -->\n <circle cx=\"764\" cy=\"410\" r=\"22\" fill=\"#CBD5E0\"/>\n <circle cx=\"764\" cy=\"410\" r=\"12\" fill=\"#A0AEC0\"/>\n <!-- 前方指示灯 -->\n <circle cx=\"602\" cy=\"540\" r=\"7\" fill=\"#48BB78\"/>\n <!-- 左螺旋桨 -->\n <g class=\"agri-drone-side-prop-l\">${animatePropL}\n <ellipse cx=\"260\" cy=\"410\" rx=\"100\" ry=\"7\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"260\" cy=\"410\" rx=\"7\" ry=\"100\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 右螺旋桨 -->\n <g class=\"agri-drone-side-prop-r\">${animatePropR}\n <ellipse cx=\"764\" cy=\"410\" rx=\"100\" ry=\"7\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n <ellipse cx=\"764\" cy=\"410\" rx=\"7\" ry=\"100\" fill=\"#FFFFFF\" opacity=\"0.7\"/>\n </g>\n <!-- 起落架 -->\n <line x1=\"440\" y1=\"600\" x2=\"420\" y2=\"680\" stroke=\"#A0AEC0\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <line x1=\"584\" y1=\"600\" x2=\"604\" y2=\"680\" stroke=\"#A0AEC0\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <!-- 起落架横杆 -->\n <line x1=\"380\" y1=\"680\" x2=\"644\" y2=\"680\" stroke=\"#A0AEC0\" stroke-width=\"12\" stroke-linecap=\"round\"/>\n <!-- 下方喷洒口 -->\n <rect x=\"496\" y=\"600\" width=\"32\" height=\"14\" rx=\"4\" fill=\"#A0AEC0\"/>\n </g>\n </svg>\n `;\n}\n\n/**\n * 生成农机俯视 SVG(顶视图,农机颜色为橙色)\n * @description 农业机械俯视图,橙色车身,深灰色轮胎\n */\nexport function generateTractorTopdownSvg(\n width: number,\n height: number,\n animated: boolean\n): string {\n // 四个轮胎的中心点(根据 SVG 路径分析)\n // 左侧轮胎组(约 x=18 到 x=398)\n // 右侧轮胎组(约 x=2380 到 x=2544)\n // 前轮胎:y≈174 附近,后轮胎:y≈799 附近\n const animateWheelFL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 143 174\" to=\"360 143 174\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelFR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 2451 174\" to=\"360 2451 174\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelBL = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 143 799\" to=\"360 143 799\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateWheelBR = animated\n ? `<animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 2451 799\" to=\"360 2451 799\" dur=\"0.6s\" repeatCount=\"indefinite\"/>`\n : '';\n const animateBody = animated\n ? `<animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0; 0 -5; 0 2; 0 -3; 0 0\" dur=\"0.6s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\"0.4 0 0.2 1;0.2 0 0.8 1;0.4 0 0.2 1;0.3 0 0.7 1\"/>`\n : '';\n return `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2605 1024\" width=\"${width}\" height=\"${height}\" style=\"overflow:visible;display:block;\">\n <!-- 车身整体(带微小颠簸动画) -->\n <g class=\"tractor-topdown-body\">${animateBody}\n <!-- 左侧竖条结构 -->\n <path d=\"M73.322301 2.514872h327.97095v1013.199145H73.322301V2.514872z\" fill=\"#3C3D3C\"/>\n <path d=\"M142.523296 20.083416h8.016557c4.043836 0 4.848724 2.172229 4.848725 4.848725v970.384909c0 2.679728-0.804888 4.848724-4.848725 4.848724h-8.016557a4.848724 4.848724 0 0 1-4.848725-4.848724V24.932141a4.848724 4.848724 0 0 1 4.848725-4.848725z\" fill=\"#1D1D1C\"/>\n <!-- 左侧横条 -->\n <path d=\"M18.596365 16.970535h109.451872c5.356224 0 9.697449 3.613916 9.697449 9.697449v15.018116a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449V26.667984c0-6.083533 4.341225-9.697449 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 174.373059h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697449v15.745424a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449v-15.745424a9.697449 9.697449 0 0 1 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 332.502891h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697449v15.745424a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449v-15.745424a9.697449 9.697449 0 0 1 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 490.632723h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697449v15.745424a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449v-15.745424a9.697449 9.697449 0 0 1 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 648.762556h109.451872c5.356224 0 9.697449 5.621288 9.697449 9.697448v15.745425a9.697449 9.697449 0 0 1-9.697449 9.697448H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697448v-15.745425c0-4.076161 4.341225-9.697449 9.697449-9.697448z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 806.892388h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697449v15.742191a9.697449 9.697449 0 0 1-9.697449 9.697449H18.596365a9.697449 9.697449 0 0 1-9.697449-9.697449v-15.742191a9.697449 9.697449 0 0 1 9.697449-9.697449z\" fill=\"#1D1D1C\"/>\n <path d=\"M18.596365 965.018988h109.451872a9.697449 9.697449 0 0 1 9.697449 9.697448v15.745425c0 7.276319-4.341225 9.697449-9.697449 9.697448H18.596365c-5.356224 0-9.697449-2.42113-9.697449-9.697448v-15.745425a9.697449 9.697449 0 0 1 9.697449-9.697448z\" fill=\"#1D1D1C\"/>\n <!-- 中间主体区域 -->\n <path d=\"M401.254461 260.208411h569.030132v35.137089H401.254461v-35.137089z\" fill=\"#F5822D\"/>\n <path d=\"M612.658845 283.634214h99.036812v445.103202H612.658845V283.634214z\" fill=\"#F5822D\"/>\n <path d=\"M398.671707 705.311612h596.768068a3.232483 3.232483 0 0 1 3.232483 3.232483v30.595451c0-0.135764-1.448152 3.232483-3.232483 3.232483H398.671707c-1.787563 0-3.232483-3.368247-3.232482-3.232483v-30.595451a3.232483 3.232483 0 0 1 3.232482-3.232483z\" fill=\"#F5822D\"/>\n <!-- 驾驶室/操作台 -->\n <path d=\"M1566.768202 96.221319h210.838699v837.500769h-210.838699V96.221319z\" fill=\"#F5822D\"/>\n <path d=\"M1771.749642 78.649542h113.738144l108.815073 120.911024V799.974874l-106.452128 151.315759h-116.101089V78.649542z\" fill=\"#FF9D55\"/>\n <!-- 主车身区域 -->\n <path d=\"M910.82307 72.795515h351.399986v866.783832H910.82307V72.795515z\" fill=\"#FF9D55\"/>\n <path d=\"M1127.519028 72.795515h134.704028v866.783832h-134.704028V72.795515z\" fill=\"#F5822D\"/>\n <!-- 顶部结构 -->\n <path d=\"M834.895278 131.361641h28.866073a17.778656 17.778656 0 0 1 17.778656 17.778656v708.237009a17.778656 17.778656 0 0 1-17.778656 17.778656h-28.866073a17.778656 17.778656 0 0 1-17.778656-17.778656v-708.237009a17.778656 17.778656 0 0 1 17.778656-17.778656z\" fill=\"#1D1D1C\"/>\n <!-- 右顶部 -->\n <path d=\"M2012.081515 154.787445h29.884305c10.893467 0 16.760424 7.958373 16.760424 17.778656v708.237009c0 9.817051-5.866957 17.778656-16.760424 17.778656h-29.884305c-7.871096 0-17.778656-7.961605-17.778656-17.778656v-708.237009c0-9.820283 9.90756-17.778656 17.778656-17.778656z\" fill=\"#1D1D1C\"/>\n <!-- 右下竖条 -->\n <path d=\"M2380.843167 72.795515h40.994349v856.349377h-40.994349V72.795515z\" fill=\"#F5822D\"/>\n <!-- 左侧驾驶室 -->\n <path d=\"M1584.944454 26.667984h151.057159c3.571894 0 6.464966 2.168996 6.464966 6.464966v964.404816a6.464966 6.464966 0 0 1-6.464966 6.464966h-151.057159a6.464966 6.464966 0 0 1-6.464966-6.464966V33.13295c0-4.29597 2.896305-6.464966 6.464966-6.464966z\" fill=\"#595956\"/>\n <!-- 右侧料斗 -->\n <path d=\"M1445.411096 230.922115h459.406938c26.781121 0 48.487244 21.709355 48.487244 48.487244v459.410171c0 26.777889-21.706123 48.487244-48.487244 48.487244H1445.411096c-26.777889 0-48.487244-21.709355-48.487244-48.487244V279.409359c0-26.777889 21.709355-48.487244 48.487244-48.487244z\" fill=\"#93654A\"/>\n <!-- 右下小料斗 -->\n <path d=\"M2393.773099 344.291756h114.698192c7.140555 0 12.929932 4.305667 12.929931 12.929932v306.484636a12.929932 12.929932 0 0 1-12.929931 12.929932h-114.698192a12.929932 12.929932 0 0 1-12.929932-12.929932V357.221688c0-8.624264 5.786144-12.929932 12.929932-12.929932z\" fill=\"#FF9D55\"/>\n <!-- 中心指示灯 -->\n <path d=\"M2451.120579 471.654816c22.643543 0 40.997581 18.354038 40.99758 40.997581 0 22.64031-18.354038 40.994348-40.99758 40.994349-22.64031 0-40.994348-18.354038-40.994349-40.994349 0-22.643543 18.354038-40.997581 40.994349-40.997581z\" fill=\"#FFED76\"/>\n </g>\n <!-- 左前轮胎 -->\n <g class=\"tractor-topdown-wheel-fl\">${animateWheelFL}\n <circle cx=\"143\" cy=\"174\" r=\"72\" fill=\"#1D1D1C\"/>\n <circle cx=\"143\" cy=\"174\" r=\"45\" fill=\"#3C3D3C\"/>\n <circle cx=\"143\" cy=\"174\" r=\"20\" fill=\"#1D1D1C\"/>\n <line x1=\"143\" y1=\"102\" x2=\"143\" y2=\"246\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"71\" y1=\"174\" x2=\"215\" y2=\"174\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"89\" y1=\"120\" x2=\"197\" y2=\"228\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n <line x1=\"197\" y1=\"120\" x2=\"89\" y2=\"228\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n </g>\n <!-- 右前轮胎 -->\n <g class=\"tractor-topdown-wheel-fr\">${animateWheelFR}\n <circle cx=\"2451\" cy=\"174\" r=\"72\" fill=\"#1D1D1C\"/>\n <circle cx=\"2451\" cy=\"174\" r=\"45\" fill=\"#3C3D3C\"/>\n <circle cx=\"2451\" cy=\"174\" r=\"20\" fill=\"#1D1D1C\"/>\n <line x1=\"2451\" y1=\"102\" x2=\"2451\" y2=\"246\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"2379\" y1=\"174\" x2=\"2523\" y2=\"174\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"2397\" y1=\"120\" x2=\"2505\" y2=\"228\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n <line x1=\"2505\" y1=\"120\" x2=\"2397\" y2=\"228\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n </g>\n <!-- 左后轮胎 -->\n <g class=\"tractor-topdown-wheel-bl\">${animateWheelBL}\n <circle cx=\"143\" cy=\"799\" r=\"72\" fill=\"#1D1D1C\"/>\n <circle cx=\"143\" cy=\"799\" r=\"45\" fill=\"#3C3D3C\"/>\n <circle cx=\"143\" cy=\"799\" r=\"20\" fill=\"#1D1D1C\"/>\n <line x1=\"143\" y1=\"727\" x2=\"143\" y2=\"871\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"71\" y1=\"799\" x2=\"215\" y2=\"799\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"89\" y1=\"745\" x2=\"197\" y2=\"853\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n <line x1=\"197\" y1=\"745\" x2=\"89\" y2=\"853\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n </g>\n <!-- 右后轮胎 -->\n <g class=\"tractor-topdown-wheel-br\">${animateWheelBR}\n <circle cx=\"2451\" cy=\"799\" r=\"72\" fill=\"#1D1D1C\"/>\n <circle cx=\"2451\" cy=\"799\" r=\"45\" fill=\"#3C3D3C\"/>\n <circle cx=\"2451\" cy=\"799\" r=\"20\" fill=\"#1D1D1C\"/>\n <line x1=\"2451\" y1=\"727\" x2=\"2451\" y2=\"871\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"2379\" y1=\"799\" x2=\"2523\" y2=\"799\" stroke=\"#1D1D1C\" stroke-width=\"10\" stroke-linecap=\"round\" opacity=\"0.6\"/>\n <line x1=\"2397\" y1=\"745\" x2=\"2505\" y2=\"853\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n <line x1=\"2505\" y1=\"745\" x2=\"2397\" y2=\"853\" stroke=\"#1D1D1C\" stroke-width=\"8\" stroke-linecap=\"round\" opacity=\"0.5\"/>\n </g>\n </svg>\n `;\n}\n","/**\n * 图标缓存工具\n * @description 缓存 Leaflet DivIcon 实例,避免重复创建,使用双层缓存策略\n *\n * ## 双层缓存架构\n *\n * - **静态缓存**: 永久缓存预设图标,永不淘汰\n * - **动态缓存**: LRU 策略缓存动态生成的图标\n *\n * ## 性能优势\n *\n * - 预设图标命中率 100%\n * - 动态图标缓存容量提升 150%\n * - 减少重复创建开销\n */\n\nimport L from 'leaflet';\nimport type { SvgIconConfig, PresetIconName } from '../types/icon';\nimport { generateSvgHtml, svgIconToKey, isPresetIcon } from './iconUtils';\nimport { PULSE_ICONS, LOADING_ICONS } from '../constants/icon';\nimport {\n generateMarkerSvg,\n generateMonitorSvg,\n generateAlertSvg,\n generateFlagSvg,\n generateTargetSvg,\n generateWindSvg,\n generateFlagDoubleSvg,\n getMarkerAnchor,\n} from './markerSvg';\nimport { generatePulseSvg, generateLoadingSpinnerSvg, generateLoadingDotsSvg } from './pulseIcon';\nimport { LRUCache } from './LRUCache';\nimport { sanitizeSvg } from './svgUtils';\nimport {\n generateTractorSvg,\n generateTractor2Svg,\n generateTractorTopdownSvg,\n generateTruckSvg,\n generateTruck2Svg,\n generateAgriDroneSvg,\n generateAgriDroneSideSvg,\n} from './icons';\n\n// 重新导出供外部使用\nexport {\n generateTractorSvg,\n generateTractor2Svg,\n generateTractorTopdownSvg,\n generateTruckSvg,\n generateTruck2Svg,\n generateAgriDroneSvg,\n generateAgriDroneSideSvg,\n} from './icons';\nexport { generateSvgHtml } from './iconUtils';\nexport { PRESET_ICONS as validIcons } from '../constants/icon';\nexport { LRUCache };\n\n/** 非精灵图类图标(不走 steps(23) 动画) */\nconst NON_SPRITE_ICONS: readonly string[] = [\n 'tractor',\n 'tractor-2',\n 'tractorTopdown',\n 'truck',\n 'truck-2',\n 'agri-drone',\n 'agri-drone-side',\n ...PULSE_ICONS,\n ...LOADING_ICONS,\n 'monitor',\n 'alert',\n 'flag',\n 'target',\n 'wind',\n 'flag-double',\n];\n\n/** 缓存键类型 */\ninterface IconCacheKey {\n iconType: string;\n iconSize: string;\n className: string;\n animated: boolean;\n svgIconKey: string;\n customIconKey: string;\n extraClassName: string;\n iconAnchor: string;\n popupAnchor: string;\n color?: string;\n}\n\n/** 静态缓存最大数量(预设图标) */\nconst MAX_STATIC_CACHE_SIZE = 100;\n/** 动态缓存最大数量 */\nconst MAX_DYNAMIC_CACHE_SIZE = 500;\n\n/**\n * 双层图标缓存管理器\n * @description 静态缓存 + 动态 LRU 缓存组合\n */\nclass TwoLevelIconCache {\n /** 静态缓存 - 永久缓存预设图标 */\n private staticCache = new Map<string, L.DivIcon>();\n /** 动态缓存 - LRU 策略缓存动态图标 */\n private dynamicCache: LRUCache<string, L.DivIcon>;\n\n constructor(_maxStaticSize = MAX_STATIC_CACHE_SIZE, maxDynamicSize = MAX_DYNAMIC_CACHE_SIZE) {\n this.dynamicCache = new LRUCache(maxDynamicSize);\n }\n\n setStatic(key: string, icon: L.DivIcon): void {\n if (this.staticCache.size >= MAX_STATIC_CACHE_SIZE) {\n const firstKey = this.staticCache.keys().next().value;\n if (firstKey) {\n this.staticCache.delete(firstKey);\n }\n }\n this.staticCache.set(key, icon);\n }\n\n setDynamic(key: string, icon: L.DivIcon): void {\n this.dynamicCache.set(key, icon);\n }\n\n get(key: string): L.DivIcon | undefined {\n const staticIcon = this.staticCache.get(key);\n if (staticIcon) return staticIcon;\n return this.dynamicCache.get(key);\n }\n\n has(key: string): boolean {\n return this.staticCache.has(key) || this.dynamicCache.has(key);\n }\n\n delete(key: string): boolean {\n return this.staticCache.delete(key) || this.dynamicCache.delete(key);\n }\n\n clear(): void {\n this.staticCache.clear();\n this.dynamicCache.clear();\n }\n\n clearDynamic(): void {\n this.dynamicCache.clear();\n }\n\n getStats(): {\n staticSize: number;\n dynamicSize: number;\n totalSize: number;\n staticMaxSize: number;\n dynamicMaxSize: number;\n staticUtilization: number;\n dynamicUtilization: number;\n } {\n const staticSize = this.staticCache.size;\n const dynamicSize = this.dynamicCache.size;\n return {\n staticSize,\n dynamicSize,\n totalSize: staticSize + dynamicSize,\n staticMaxSize: MAX_STATIC_CACHE_SIZE,\n dynamicMaxSize: MAX_DYNAMIC_CACHE_SIZE,\n staticUtilization: staticSize / MAX_STATIC_CACHE_SIZE,\n dynamicUtilization: dynamicSize / MAX_DYNAMIC_CACHE_SIZE,\n };\n }\n}\n\n/** 图标缓存实例 - 双层缓存策略 */\nconst iconCache = new TwoLevelIconCache();\n\n/**\n * 生成图标容器 HTML\n */\nfunction wrapInContainer(\n content: string,\n iconSize: [number, number],\n className: string,\n animated: boolean,\n extraStyle?: string\n): string {\n const animatedClass = animated ? 'animated' : '';\n return `<div class=\"marker-icon-inner ${className} ${animatedClass}\" style=\"\n width: ${iconSize[0]}px;\n height: ${iconSize[1]}px;\n display: flex;\n align-items: center;\n justify-content: center;\n filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n ${extraStyle ?? ''}\n \">${content}</div>`;\n}\n\n/**\n * 构建 DivIcon 实例\n */\nfunction buildDivIcon(\n html: string,\n iconSize: [number, number],\n className: string,\n extraClassName: string,\n options: L.DivIconOptions\n): L.DivIcon {\n const iconAnchor = options.iconAnchor ?? [iconSize[0] / 2, iconSize[1]];\n const popupAnchor = options.popupAnchor ?? [0, -iconSize[1] * 1.1];\n return L.divIcon({\n html,\n iconSize,\n iconAnchor,\n popupAnchor,\n className: `marker-icon-wrapper ${className} ${extraClassName}`.trim(),\n });\n}\n\n/**\n * 生成缓存键\n */\nfunction createCacheKey(config: IconCacheKey): string {\n return `${config.iconType}|${config.iconSize}|${config.className}|${config.animated}|${config.svgIconKey}|${config.customIconKey}|${config.extraClassName}|${config.iconAnchor}|${config.popupAnchor}|${config.color || ''}`;\n}\n\n/**\n * 创建图标(带缓存)\n */\nexport function createCachedIcon(\n iconType: string,\n options: L.DivIconOptions = {},\n animated = false,\n svgIcon: string | SvgIconConfig | null | undefined = null,\n customIcon: string | null | undefined = null,\n extraClassName = '',\n color?: string\n): L.DivIcon {\n const { iconSize: rawIconSize = [48, 48], className = '' } = options;\n const iconSize: [number, number] = Array.isArray(rawIconSize)\n ? [rawIconSize[0], rawIconSize[1]]\n : [rawIconSize.x, rawIconSize.y];\n\n const cacheKey = createCacheKey({\n iconType,\n iconSize: `${iconSize[0]}x${iconSize[1]}`,\n className,\n animated,\n svgIconKey: svgIconToKey(svgIcon),\n customIconKey: customIcon || '',\n extraClassName,\n iconAnchor: options.iconAnchor\n ? `${(options.iconAnchor as [number, number])[0]},${(options.iconAnchor as [number, number])[1]}`\n : '',\n popupAnchor: options.popupAnchor\n ? `${(options.popupAnchor as [number, number])[0]},${(options.popupAnchor as [number, number])[1]}`\n : '',\n color,\n });\n\n const cached = iconCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const icon = createIconInternal(\n iconType,\n iconSize,\n className,\n animated,\n svgIcon,\n customIcon,\n extraClassName,\n options,\n color\n );\n\n if (isPresetIcon(iconType)) {\n iconCache.setStatic(cacheKey, icon);\n } else {\n iconCache.setDynamic(cacheKey, icon);\n }\n return icon;\n}\n\n/**\n * 内部图标创建函数\n */\nfunction createIconInternal(\n iconType: string,\n iconSize: [number, number],\n className: string,\n animated: boolean,\n svgIcon: string | SvgIconConfig | null | undefined,\n customIcon: string | null | undefined,\n extraClassName: string,\n options: L.DivIconOptions,\n color?: string\n): L.DivIcon {\n const iconAnchor = options.iconAnchor ?? [iconSize[0] / 2, iconSize[1]];\n\n if (customIcon) {\n const safeCustomIcon = customIcon\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n const isDataUrl = customIcon.startsWith('data:');\n const isSvgString = customIcon.trim().startsWith('<svg');\n const isHttpUrl = customIcon.startsWith('http://') || customIcon.startsWith('https://');\n const isRelativePath =\n customIcon.startsWith('/') || customIcon.startsWith('./') || customIcon.startsWith('../');\n\n if (isSvgString) {\n const sanitized = sanitizeSvg(customIcon);\n return buildDivIcon(\n wrapInContainer(sanitized, iconSize, 'marker-custom-icon', animated),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n if (isDataUrl || isHttpUrl || isRelativePath) {\n return buildDivIcon(\n wrapInContainer(\n `<img src=\"${safeCustomIcon}\" style=\"width: 100%; height: 100%; object-fit: contain;\" />`,\n iconSize,\n 'marker-custom-icon',\n animated\n ),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n return buildDivIcon(\n wrapInContainer(\n '',\n iconSize,\n 'marker-custom-icon',\n animated,\n `background-image: url('${safeCustomIcon}');background-size: contain;background-repeat: no-repeat;background-position: center;`\n ),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n if (svgIcon) {\n const svgHtml = generateSvgHtml(svgIcon, { ...options, iconSize });\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, 'marker-svg-icon', animated),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 农机/载具图标(SVG 已提取到 ./icons/index.ts)\n const vehicleIconGenerators: Record<string, (w: number, h: number, a: boolean) => string> = {\n tractor: generateTractorSvg,\n 'tractor-2': generateTractor2Svg,\n tractorTopdown: generateTractorTopdownSvg,\n truck: generateTruckSvg,\n 'truck-2': generateTruck2Svg,\n 'agri-drone': generateAgriDroneSvg,\n 'agri-drone-side': generateAgriDroneSideSvg,\n };\n\n // 优先检查是否为农机/载具图标(使用原始 iconType)\n const vehicleGenerator = vehicleIconGenerators[iconType];\n if (vehicleGenerator) {\n const svgHtml = vehicleGenerator(iconSize[0], iconSize[1], animated);\n const cssClass = `icon-${iconType}`;\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n const safeIconType = isPresetIcon(iconType) ? iconType : 'point';\n\n // 彩色标记图标(水滴形 pin)\n const markerSvgHtml = generateMarkerSvg(\n safeIconType as PresetIconName,\n iconSize[0],\n iconSize[1],\n animated,\n iconType === 'marker' ? color : undefined\n );\n if (markerSvgHtml) {\n const markerAnchor = getMarkerAnchor(iconSize[0], iconSize[1]);\n const html = wrapInContainer(markerSvgHtml, iconSize, 'marker-pin-icon', animated);\n return L.divIcon({\n html,\n iconSize,\n iconAnchor: options.iconAnchor ?? markerAnchor,\n popupAnchor: options.popupAnchor ?? [0, -markerAnchor[1]],\n className: `marker-icon-wrapper ${className} ${extraClassName}`.trim(),\n });\n }\n\n // 脉冲同心圆图标\n if ((PULSE_ICONS as readonly string[]).includes(safeIconType)) {\n const svgHtml = generatePulseSvg(\n safeIconType as PresetIconName,\n iconSize[0],\n iconSize[1],\n animated,\n safeIconType === 'pulse' ? color : undefined\n );\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, 'marker-pulse-icon', animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // Loading 图标\n if (safeIconType === 'loading-spinner') {\n const svgHtml = generateLoadingSpinnerSvg(iconSize[0], iconSize[1], animated);\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, 'marker-loading-icon', animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n if (safeIconType === 'loading-dots') {\n const svgHtml = generateLoadingDotsSvg(iconSize[0], iconSize[1], animated);\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, 'marker-loading-icon', animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 监测站图标\n if (safeIconType === 'monitor') {\n const svgHtml = generateMonitorSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-monitor-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 警示警报图标\n if (safeIconType === 'alert') {\n const svgHtml = generateAlertSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-alert-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 旗帜图标\n if (safeIconType === 'flag') {\n const svgHtml = generateFlagSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-flag-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 靶心图标\n if (safeIconType === 'target') {\n const svgHtml = generateTargetSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-target-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 风向图标\n if (safeIconType === 'wind') {\n const svgHtml = generateWindSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-wind-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 双旗帜图标\n if (safeIconType === 'flag-double') {\n const svgHtml = generateFlagDoubleSvg(iconSize[0], iconSize[1], animated, color);\n const cssClass = 'marker-flag-double-icon';\n return buildDivIcon(\n wrapInContainer(svgHtml, iconSize, cssClass, animated, 'filter: none;'),\n iconSize,\n className,\n extraClassName,\n options\n );\n }\n\n // 默认:精灵图图标\n const animatedClass = animated ? 'animated' : '';\n const isSpriteIcon = !NON_SPRITE_ICONS.includes(safeIconType);\n const timingStyle = animated && isSpriteIcon ? 'animation-timing-function: steps(23);' : '';\n\n return L.divIcon({\n html: `<div class=\"marker-icon-inner icon-${safeIconType} ${animatedClass}\" style=\"\n width: ${iconSize[0]}px;\n height: ${iconSize[1]}px;\n ${timingStyle}\n \"></div>`,\n iconSize,\n iconAnchor,\n popupAnchor: options.popupAnchor ?? [0, -iconSize[1] * 1.1],\n className: `marker-icon-wrapper ${className} ${extraClassName}`.trim(),\n });\n}\n\n/**\n * 清空图标缓存\n */\nexport function clearIconCache(): void {\n iconCache.clear();\n}\n\n/**\n * 清空动态缓存(保留静态缓存)\n */\nexport function clearDynamicIconCache(): void {\n iconCache.clearDynamic();\n}\n\n/**\n * 获取缓存统计信息\n */\nexport function getIconCacheStats(): {\n size: number;\n maxSize: number;\n utilization: number;\n staticSize: number;\n dynamicSize: number;\n staticMaxSize: number;\n dynamicMaxSize: number;\n staticUtilization: number;\n dynamicUtilization: number;\n} {\n const stats = iconCache.getStats();\n return {\n size: stats.totalSize,\n maxSize: stats.staticMaxSize + stats.dynamicMaxSize,\n utilization: (stats.staticUtilization + stats.dynamicUtilization) / 2,\n staticSize: stats.staticSize,\n dynamicSize: stats.dynamicSize,\n staticMaxSize: stats.staticMaxSize,\n dynamicMaxSize: stats.dynamicMaxSize,\n staticUtilization: stats.staticUtilization,\n dynamicUtilization: stats.dynamicUtilization,\n };\n}\n\nexport default createCachedIcon;\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/**\n * SVG 图标组件库\n * @description 统一的 SVG 图标组件,用于工具栏等场景\n */\n\n/** 图标组件属性 */\nexport interface IconProps {\n size?: number;\n color?: string;\n /** 无障碍标签文本 */\n ariaLabel?: string;\n /** 是否对屏幕阅读器隐藏,默认 true */\n ariaHidden?: boolean;\n}\n\n// 标注点移动图标 - 地图定位(用于 Marker 组件)\nexport const MarkerRedrawIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M655.488 0.64c-105.984 0-191.552 89.216-191.552 199.168 0 110.08 191.552 358.976 191.552 358.976s191.36-248.64 191.36-359.04C846.976 89.92 761.216 0.64 655.424 0.64z m5.696 323.84c-69.056 0-125.248-58.304-125.248-130.432 0-72.064 56-130.368 125.248-130.368s125.248 58.24 125.248 130.368c0 72.128-56.192 130.368-125.248 130.368zM423.232 91.328a269.248 269.248 0 0 0-19.2 101.568c0 16.704 3.328 36.032 9.28 56.96L283.648 606.464 64 499.2V187.264C64 134.4 105.408 91.392 156.16 91.392h267.136z m468.992 3.776c38.592 11.392 67.136 48.32 66.944 92.096v740.352c0 3.072-0.256 5.952-0.448 9.024L375.488 651.52l96.512-265.792c74.944 139.2 184.96 281.856 184.96 281.856s253.184-328.896 253.184-474.624c0-34.56-6.336-67.456-17.92-97.792zM64 615.68l183.68 89.728-114.496 315.008C93.568 1009.6 64 971.776 64 927.36V615.68z m803.2 407.808H240.32l99.264-273.024 551.744 269.696a88.448 88.448 0 0 1-24.064 3.328z\"\n fill={color}\n />\n </svg>\n);\n\n// 地块重绘图标(用于 PlotLayer 组件)\nexport const PlotRedrawIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M387.2 889.6l464-492.8c16-16 28.8-32 44.8-48v-128h57.6c12.8 0 22.4-9.6 22.4-22.4V25.6c0-12.8-9.6-22.4-22.4-22.4h-160c-12.8-3.2-25.6 9.6-25.6 22.4v60.8h-108.8-3.2H224V25.6c0-12.8-9.6-25.6-22.4-25.6h-160C28.8 0 16 12.8 16 25.6v172.8c0 12.8 9.6 22.4 22.4 22.4H96v582.4H38.4c-12.8 0-22.4 9.6-22.4 22.4v172.8c0 12.8 9.6 22.4 22.4 22.4h160c16 3.2 25.6-9.6 25.6-22.4v-64h118.4c16-12.8 28.8-28.8 44.8-44.8zM812.8 48H928v124.8h-115.2V48z m-211.2 86.4L140.8 627.2v-172.8l3.2-3.2 3.2-3.2 291.2-313.6h163.2zM224 195.2V134.4h156.8l-236.8 252.8V220.8h57.6c12.8 0 22.4-12.8 22.4-25.6z m-163.2-22.4V48h115.2v124.8H60.8z m118.4 803.2H60.8v-124.8h115.2v124.8z m12.8-172.8H140.8v-115.2h3.2L665.6 134.4H768v51.2L192 803.2z m32 86.4v-51.2L800 220.8h48v108.8L323.2 889.6H224zM998.4 576l-115.2-115.2c-6.4-6.4-12.8-9.6-22.4-9.6s-16 3.2-22.4 9.6L480 812.8c-3.2 3.2-6.4 9.6-9.6 16l-22.4 150.4-3.2 16v3.2c0 3.2 3.2 9.6 9.6 9.6h3.2l163.2-28.8c6.4 0 12.8-3.2 16-9.6l358.4-352c16-12.8 16-32 3.2-41.6zM601.6 915.2l-73.6 12.8 9.6-76.8L864 534.4l64 60.8-326.4 320z m-112 89.6h400v19.2H489.6v-19.2z\"\n fill={color}\n />\n </svg>\n);\n\n// 道路重绘图标 - 曲线绘制(用于 Road 组件)\nexport const RoadRedrawIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1106 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M419.820561 758.846617a24.737158 24.737158 0 0 1-24.127619-30.070632l44.140843-199.624296a24.737158 24.737158 0 0 1 40.635989-12.851131l150.556339 138.111567a24.737158 24.737158 0 0 1-9.244687 41.804274l-194.747977 61.512728a24.584773 24.584773 0 0 1-7.212888 1.11749z m59.023774-177.172912l-25.397493 115.964953 113.120434-35.55649z m195.001952 52.522015a52.318836 52.318836 0 0 1-35.556491-13.917826l-124.396921-114.034744a52.928376 52.928376 0 0 1-3.301674-74.617834L880.27711 27.398816a52.725196 52.725196 0 0 1 74.56704-3.25088l124.346126 114.085539a52.877581 52.877581 0 0 1 3.301674 74.56704l-369.685909 404.277295a52.369631 52.369631 0 0 1-36.57239 17.067115h-2.387364zM921.421049 60.567942h-4.673138L547.062001 464.743647a3.403264 3.403264 0 0 0 0 4.774728l124.346126 114.034744a3.657239 3.657239 0 0 0 2.33657 0.863515l372.073273-405.191605a3.352469 3.352469 0 0 0 0-4.774728z m0 0\"\n fill={color}\n />\n <path\n d=\"M419.871356 769.005614a34.896156 34.896156 0 0 1-34.032641-42.413814l44.140843-199.624295a34.896156 34.896156 0 0 1 57.652309-18.13381l150.556339 138.111567a34.896156 34.896156 0 0 1-13.054311 58.972979l-194.747977 61.512728a34.642181 34.642181 0 0 1-10.514562 1.574645z m44.090048-248.895433a14.578161 14.578161 0 0 0-14.222596 11.428872l-44.140843 199.624296a14.578161 14.578161 0 0 0 14.222596 17.72745 14.374981 14.374981 0 0 0 4.368369-0.660335l194.747977-61.512728a14.578161 14.578161 0 0 0 5.435063-24.635568l-150.556339-138.111568a14.527366 14.527366 0 0 0-9.854227-4.012803z m-24.432389 192.716178l33.219921-150.353159 113.475999 104.028132z m45.461513-111.74897l-18.03222 81.576748 79.595743-25.143518z m188.906554 43.277329a62.325448 62.325448 0 0 1-42.413814-16.609961l-124.396921-113.983949a63.188963 63.188963 0 0 1-3.911214-88.942021L872.911837 20.541492a62.884193 62.884193 0 0 1 88.942021-3.911214l124.346126 114.085539a63.188963 63.188963 0 0 1 3.911214 88.891226l-369.685909 404.277295a62.884193 62.884193 0 0 1-43.632893 20.317995h-2.793724zM919.236865 20.389107h-1.879415a42.312223 42.312223 0 0 0-29.562682 13.816237L518.108859 438.431844a42.870968 42.870968 0 0 0 2.692134 60.293648l124.396921 113.983949a42.058249 42.058249 0 0 0 27.937243 11.225692h2.946109a42.464608 42.464608 0 0 0 29.308707-13.765441l369.635114-404.378885a42.820173 42.820173 0 0 0-2.692134-60.242854L947.986827 31.513209A42.464608 42.464608 0 0 0 919.236865 20.439902zM674.049467 594.829606a13.867031 13.867031 0 0 1-8.889123-3.200084l-0.355565-0.30477-124.346126-114.034744a13.663851 13.663851 0 0 1-0.91431-19.04812l372.581224-407.375789 13.105106-0.558745 127.495416 116.828469a13.562261 13.562261 0 0 1 0.863514 19.098914l-375.070178 408.493279z m-114.898259-128.003365l113.577589 104.180517 361.253942-393.407168-114.339514-104.891647z\"\n fill={color}\n />\n <path\n d=\"M194.697182 1013.786652a134.251148 134.251148 0 0 1-88.637251-30.019837 137.908387 137.908387 0 0 1-51.201346-95.799344 246.304888 246.304888 0 0 1 19.708455-111.241019 1362.778684 1362.778684 0 0 1 139.076672-239.59995c98.593068-147.30546 200.538605-299.995188 126.987465-376.390848-36.4708-37.79147-95.088214-43.988458-174.328392-18.387785a541.017398 541.017398 0 0 0-115.355414 54.29984 26.210213 26.210213 0 0 1-28.749962-43.886868 585.767781 585.767781 0 0 1 128.003365-60.344443c98.440683-31.797661 177.376092-20.724354 228.171078 31.899251a142.225961 142.225961 0 0 1 40.229629 97.780349 274.902465 274.902465 0 0 1-23.822848 109.71717 1438.767983 1438.767983 0 0 1-137.146463 234.317271 1330.828638 1330.828638 0 0 0-133.743199 229.288568c-34.794566 90.36428-9.752637 126.530311 16.051216 147.914999 47.594902 39.670884 132.066964 6.349373 194.849567-28.648372a888.251923 888.251923 0 0 0 134.098763-94.072314 26.210213 26.210213 0 1 1 34.591386 39.416909 929.091092 929.091092 0 0 1-143.191066 100.472483 424.239725 424.239725 0 0 1-127.597005 49.728291 212.881787 212.881787 0 0 1-37.99465 3.555649z\"\n fill={color}\n />\n <path\n d=\"M194.747977 1023.945649a144.308556 144.308556 0 0 1-95.139009-32.407201 147.71182 147.71182 0 0 1-54.80779-102.656667 256.00673 256.00673 0 0 1 20.317994-115.863363A1368.924877 1368.924877 0 0 1 205.211744 531.437463c96.510474-144.257761 195.967057-293.239455 127.95257-363.742896a108.244116 108.244116 0 0 0-81.271978-30.730966 273.988155 273.988155 0 0 0-82.541852 14.984521 533.347355 533.347355 0 0 0-112.917254 53.131555 36.420005 36.420005 0 0 1-39.874065-60.953983 599.076067 599.076067 0 0 1 130.49232-61.512728 343.932851 343.932851 0 0 1 104.688466-18.235401 178.493581 178.493581 0 0 1 133.895584 52.725196 152.384959 152.384959 0 0 1 43.074148 104.586877 284.451923 284.451923 0 0 1-24.584773 113.831564 1444.457022 1444.457022 0 0 1-138.162362 236.0443 1325.190394 1325.190394 0 0 0-132.778094 227.459949c-32.305611 83.913317-11.530462 116.066543 13.054311 136.486127a74.516245 74.516245 0 0 0 49.118752 15.644856 299.690418 299.690418 0 0 0 134.251148-45.309127 872.403888 872.403888 0 0 0 132.066964-92.80244 36.36921 36.36921 0 1 1 48.052057 54.60461 947.072517 947.072517 0 0 1-144.918095 101.589972 434.144747 434.144747 0 0 1-130.746295 50.794986 223.497939 223.497939 0 0 1-39.315319 3.911214zM251.790746 116.645606a127.698595 127.698595 0 0 1 96.002524 36.97875c79.392563 82.237083-24.787953 238.17769-125.565205 388.937209a1357.394416 1357.394416 0 0 0-138.111568 237.771331 236.603046 236.603046 0 0 0-19.098915 106.669471 128.05416 128.05416 0 0 0 47.594902 88.94202 124.549306 124.549306 0 0 0 82.084698 27.683268 203.179945 203.179945 0 0 0 35.912055-3.403264 414.385497 414.385497 0 0 0 124.498511-48.610802 924.113184 924.113184 0 0 0 141.413242-99.202608 16.051216 16.051216 0 0 0-21.181509-24.127618 900.899875 900.899875 0 0 1-135.876588 95.291394 314.0654 314.0654 0 0 1-144.156171 47.899672 94.173904 94.173904 0 0 1-62.122268-20.317995c-28.343602-23.518079-56.179255-62.934988-18.997325-159.394666a1336.263701 1336.263701 0 0 1 134.759098-231.320368 1432.41861 1432.41861 0 0 0 136.333743-232.488651 265.099033 265.099033 0 0 0 23.060924-105.653571 132.422529 132.422529 0 0 0-37.38511-91.024616 158.886717 158.886717 0 0 0-119.266627-46.528207 323.868832 323.868832 0 0 0-98.440684 17.270295A576.269118 576.269118 0 0 0 27.683267 161.192809a16.102011 16.102011 0 1 0 17.625861 26.921343 556.408279 556.408279 0 0 1 117.793573-55.468125 293.950585 293.950585 0 0 1 88.688045-15.949626z\"\n fill={color}\n />\n </svg>\n);\n\n// 灌溉渠重绘图标 - 水渠绘制(用于 Irrigation 组件)\nexport const IrrigationRedrawIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M611.693714 648.923429l86.820572-69.046858a25.307429 25.307429 0 0 0-3.364572-41.691428L255.268571 295.497143a23.917714 23.917714 0 0 0-26.404571 2.267428 25.6 25.6 0 0 0-8.777143 25.673143l119.003429 497.371429a24.649143 24.649143 0 0 0 15.652571 17.554286c7.753143 2.852571 16.384 1.462857 22.820572-3.730286l86.893714-69.046857 187.977143 248.905143a24.210286 24.210286 0 0 0 19.163428 9.508571 24.429714 24.429714 0 0 0 14.921143-5.193143l108.617143-86.308571a25.380571 25.380571 0 0 0 4.388571-34.889143l-187.830857-248.685714z\"\n fill={color}\n />\n <path\n d=\"M397.458286 200.411429c40.082286 9.728 79.36 23.405714 117.394285 36.571428 137.362286 47.542857 279.405714 96.621714 509.147429 0l-10.24-16.676571c-220.452571 92.745143-357.595429 45.275429-490.276571-0.585143-38.619429-13.385143-78.482286-27.209143-119.661715-37.302857C278.893714 151.844571 13.897143 271.286857 2.56 276.260571L13.385143 292.571429c2.779429-1.024 268.068571-120.539429 384.073143-92.16z m36.278857-122.88c253.586286 59.830857 439.808-7.314286 539.794286-43.300572 19.456-7.021714 36.205714-13.019429 49.005714-16.457143L1015.369143 0c-13.677714 3.657143-31.012571 9.874286-50.980572 17.115429-97.426286 35.108571-278.820571 100.425143-524.507428 42.422857-93.330286-22.016-199.168-7.241143-305.883429 42.715428C53.906286 139.776 2.194286 183.149714 0 184.905143l16.091429 13.019428C18.285714 196.242286 221.476571 27.428571 433.737143 77.531429z m452.169143 58.514285l13.897143 35.474286c28.525714-7.68 58.221714-16.018286 87.771428-24.722286l-15.067428-35.108571c-29.403429 8.557714-58.514286 16.749714-86.601143 24.283428z\"\n fill={color}\n />\n <path\n d=\"M714.825143 168.594286c-2.194286 0-4.242286 0-6.290286-0.146286l-1.389714 52.004571a190.317714 190.317714 0 0 0 58.368-6.582857c12.434286-3.510857 25.526857-7.606857 39.058286-11.849143l-12.141715-50.176c-13.165714 4.096-25.892571 8.045714-37.888 11.556572-12.288 3.437714-25.307429 5.12-39.716571 5.12zM350.281143 73.142857h-1.682286l0.365714 52.004572h1.462858c4.534857 0 8.923429 0.292571 12.946285 0.731428 21.869714 2.852571 45.129143 7.68 71.021715 15.140572l10.825142-50.468572a511.707429 511.707429 0 0 0-76.946285-16.237714A140.434286 140.434286 0 0 0 350.281143 73.142857zM26.038857 287.451429c13.165714-10.093714 40.594286-30.793143 76.507429-54.564572l-22.674286-44.982857c-37.083429 24.649143-65.462857 45.860571-79.140571 56.466286L0 244.955429l12.434286 21.796571V292.571429c6.948571 0 11.410286-3.510857 13.604571-5.12z m156.672-103.643429c29.915429-16.530286 57.782857-29.769143 82.724572-39.497143l-14.409143-49.152c-26.770286 10.24-56.539429 24.429714-88.064 41.910857l19.748571 46.738286z m338.870857-13.458286l11.702857 4.242286c26.916571 9.947429 52.297143 19.309714 77.677715 27.062857l11.776-50.249143c-24.356571-7.460571-49.298286-16.676571-75.702857-26.331428l-11.702858-4.315429-13.751432 49.590928z\"\n fill={color}\n />\n </svg>\n);\n\n// 剪切图标 - 剪刀\nexport const ClipIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <circle cx=\"6\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <line x1=\"20\" y1=\"4\" x2=\"8.12\" y2=\"15.88\" />\n <line x1=\"14.47\" y1=\"14.48\" x2=\"20\" y2=\"20\" />\n <line x1=\"8.12\" y1=\"8.12\" x2=\"12\" y2=\"12\" />\n </svg>\n);\n\n// 移动图标 - 四向箭头\nexport const MoveIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <polyline points=\"5 9 2 12 5 15\" />\n <polyline points=\"9 5 12 2 15 5\" />\n <polyline points=\"15 19 12 22 9 19\" />\n <polyline points=\"19 9 22 12 19 15\" />\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\" />\n </svg>\n);\n\n// 删除图标 - 垃圾桶\nexport const DeleteIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" />\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" />\n </svg>\n);\n\n// 取消图标 - X\nexport const CancelIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\n// 保存图标 - 勾选\nexport const SaveIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" />\n <polyline points=\"17 21 17 13 7 13 7 21\" />\n <polyline points=\"7 3 7 8 15 8\" />\n </svg>\n);\n\n// 新建图标 - 加号\nexport const CreateIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n);\n\n// 编辑图标 - 文档编辑\nexport const EditIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n);\n\n// 反转图标 - 双向箭头\nexport const ReverseIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path d=\"M17 1l4 4-4 4\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <path d=\"M7 23l-4-4 4-4\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </svg>\n);\n\n// 全屏图标\nexport interface FullscreenIconProps extends Omit<IconProps, 'ariaLabel' | 'ariaHidden'> {\n /** 是否处于全屏状态 */\n isFullscreen?: boolean;\n}\n\nexport const FullscreenIcon = ({\n size = 20,\n color = 'currentColor',\n isFullscreen = false,\n}: FullscreenIconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {isFullscreen ? (\n // 退出全屏图标\n <path d=\"M8 3v3a2 2 0 0 1-2 2H3m13 0h3a2 2 0 0 1 2 2v3m0 13v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\" />\n ) : (\n // 进入全屏图标\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\" />\n )}\n </svg>\n);\n\n// ========== 测量工具栏图标(UI 操作) ==========\n\n// 测量长度图标 - 直尺(UI 操作)\nexport const MeasureLengthUIIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M254.4 82.624L82.624 254.4a60.704 60.704 0 0 0 0 85.92L254.4 512l128.8-128.8-42.88-42.88-85.92 85.888-42.88-42.88 85.888-85.92-42.88-42.88-85.92 85.888-42.88-42.88 171.776-171.84 171.584 171.616L512 254.4l-171.776-171.84a60.576 60.576 0 0 0-85.76 0z m644.096 644.064l-171.808 171.808-42.88-42.912 85.888-85.888-42.88-42.88-85.92 85.856-42.88-42.88 85.888-85.888-42.912-42.912L512 769.6l171.776 171.776a60.704 60.704 0 0 0 85.92 0l171.776-171.776a60.704 60.704 0 0 0 0-85.92L769.6 512l-42.912 42.88 171.808 171.808zM680.8 211.328l131.968 131.872-43.968 44L636.8 255.2l44-43.872zM240.96 650.976l131.968 131.872-44 44-131.968-131.872 44-44zM680.704 123.424a124.544 124.544 0 0 1 176.288 0.096l43.584 43.52a124.704 124.704 0 0 1 0.096 176.16L355.264 888.416l-268.352 48.384 48.384-268.288L680.704 123.424zM334.4 821.344L857.472 298.656c23.84-23.872 23.552-63.264-0.8-87.52L813.12 167.616c-24.544-24.544-63.552-24.832-87.584-0.8L202.432 689.6l-27.52 159.424 159.52-27.616z\"\n fill={color}\n />\n </svg>\n);\n\n// 测量面积图标 - 多边形(UI 操作)\nexport const MeasureAreaUIIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M387.2 889.6l464-492.8c16-16 28.8-32 44.8-48v-128h57.6c12.8 0 22.4-9.6 22.4-22.4V25.6c0-12.8-9.6-22.4-22.4-22.4h-160c-12.8-3.2-25.6 9.6-25.6 22.4v60.8h-108.8-3.2H224V25.6c0-12.8-9.6-25.6-22.4-25.6h-160C28.8 0 16 12.8 16 25.6v172.8c0 12.8 9.6 22.4 22.4 22.4H96v582.4H38.4c-12.8 0-22.4 9.6-22.4 22.4v172.8c0 12.8 9.6 22.4 22.4 22.4h160c16 3.2 25.6-9.6 25.6-22.4v-64h118.4c16-12.8 28.8-28.8 44.8-44.8zM812.8 48H928v124.8h-115.2V48z m-211.2 86.4L140.8 627.2v-172.8l3.2-3.2 3.2-3.2 291.2-313.6h163.2zM224 195.2V134.4h156.8l-236.8 252.8V220.8h57.6c12.8 0 22.4-12.8 22.4-25.6z m-163.2-22.4V48h115.2v124.8H60.8z m118.4 803.2H60.8v-124.8h115.2v124.8z m12.8-172.8H140.8v-115.2h3.2L665.6 134.4H768v51.2L192 803.2z m32 86.4v-51.2L800 220.8h48v108.8L323.2 889.6H224zM998.4 576l-115.2-115.2c-6.4-6.4-12.8-9.6-22.4-9.6s-16 3.2-22.4 9.6L480 812.8c-3.2 3.2-6.4 9.6-9.6 16l-22.4 150.4-3.2 16v3.2c0 3.2 3.2 9.6 9.6 9.6h3.2l163.2-28.8c6.4 0 12.8-3.2 16-9.6l358.4-352c16-12.8 16-32 3.2-41.6zM601.6 915.2l-73.6 12.8 9.6-76.8L864 534.4l64 60.8-326.4 320z m-112 89.6h400v19.2H489.6v-19.2z\"\n fill={color}\n />\n </svg>\n);\n\n// 清空测量图标 - 垃圾桶(UI 操作)\nexport const ClearMeasureUIIcon = ({\n size = 16,\n color = 'currentColor',\n ariaLabel,\n ariaHidden = true,\n}: IconProps): JSX.Element => (\n <svg\n viewBox=\"0 0 1024 1024\"\n width={size}\n height={size}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M740.266667 869.546667H256a62.72 62.72 0 0 1-51.2-23.466667 59.52 59.52 0 0 1-4.693333-66.773333A564.906667 564.906667 0 0 0 274.133333 554.666667l64 3.626666a610.986667 610.986667 0 0 1-67.626666 225.706667 14.933333 14.933333 0 0 0 13.44 21.333333h442.666666a14.506667 14.506667 0 0 0 14.293334-11.093333 512 512 0 0 0-14.293334-237.226667l62.72-17.066666c36.48 130.773333 26.026667 250.666667 7.04 293.973333a59.733333 59.733333 0 0 1-56.106666 35.626667z\"\n fill={color}\n />\n <path\n d=\"M384 869.546667a31.146667 31.146667 0 0 1-21.333333-8.533334 31.786667 31.786667 0 0 1-1.706667-45.226666A192 192 0 0 0 414.08 704a32.213333 32.213333 0 0 1 32-31.573333c17.493333 0 31.786667 14.08 32 31.573333a253.013333 253.013333 0 0 1-71.04 155.306667 32 32 0 0 1-23.04 10.24zM571.093333 869.546667a32 32 0 0 1-23.466666-53.76A192 192 0 0 0 601.6 704a32.213333 32.213333 0 0 1 32-31.573333c17.493333 0 31.786667 14.08 32 31.573333a253.013333 253.013333 0 0 1-71.04 155.306667 32 32 0 0 1-23.466667 10.24zM827.306667 496l-55.68-114.986667a80.64 80.64 0 0 0-72.96-45.866666H605.866667V202.666667A53.333333 53.333333 0 0 0 552.533333 149.333333h-49.92a53.76 53.76 0 0 0-53.546666 53.333334v132.48H356.266667a81.066667 81.066667 0 0 0-72.96 45.866666l-57.173334 118.4a53.12 53.12 0 0 0 7.253334 57.813334A56.746667 56.746667 0 0 0 277.333333 576h503.68a53.333333 53.333333 0 0 0 48.426667-31.146667 57.813333 57.813333 0 0 0-2.133333-48.853333z m-77.013334 16H304.853333a8.533333 8.533333 0 0 1-7.68-12.373333L341.333333 408.746667a17.066667 17.066667 0 0 1 15.36-9.6h103.68a53.12 53.12 0 0 0 53.12-53.12v-128c0-2.346667 1.92-4.266667 4.266667-4.266667h20.266667c2.346667 0 4.266667 1.92 4.266666 4.266667v128a53.333333 53.333333 0 0 0 53.333334 53.12h103.466666a17.706667 17.706667 0 0 1 15.573334 9.6l43.733333 90.88a8.533333 8.533333 0 0 1-8.106667 12.373333z\"\n fill={color}\n />\n </svg>\n);\n\n/** 图标组件映射 */\nconst Icons = {\n MarkerRedraw: MarkerRedrawIcon,\n PlotRedraw: PlotRedrawIcon,\n RoadRedraw: RoadRedrawIcon,\n IrrigationRedraw: IrrigationRedrawIcon,\n Clip: ClipIcon,\n Move: MoveIcon,\n Delete: DeleteIcon,\n Cancel: CancelIcon,\n Save: SaveIcon,\n Create: CreateIcon,\n Edit: EditIcon,\n Reverse: ReverseIcon,\n // 测量工具栏图标(UI 操作)\n MeasureLengthUI: MeasureLengthUIIcon,\n MeasureAreaUI: MeasureAreaUIIcon,\n ClearMeasureUI: ClearMeasureUIIcon,\n};\n\nexport default Icons;\n\nexport { SelectIcon } from '../SelectIcon';\nexport type { SelectIconProps } from '../SelectIcon';\n","/**\n * 标注点编辑工具栏组件\n */\n\nimport { useMemo } from 'react';\n\nimport BaseEditToolbar from '../shared/BaseEditToolbar';\nimport { CreateIcon, EditIcon, MarkerRedrawIcon, DeleteIcon, CancelIcon, SaveIcon } from '../Icons';\nimport type { ToolbarButton } from '../shared/BaseEditToolbar';\nimport type { MarkerEditToolbarProps } from '../../types';\n\nconst MARKER_BUTTONS: ToolbarButton<string>[] = [\n {\n action: 'create',\n label: '新建',\n icon: <CreateIcon />,\n tooltip: '在地图上添加新标注点',\n variant: 'primary',\n },\n {\n action: 'edit',\n label: '编辑',\n icon: <EditIcon />,\n tooltip: '编辑选中标注点的信息',\n needsSelection: true,\n },\n {\n action: 'move',\n label: '移动',\n icon: <MarkerRedrawIcon />,\n tooltip: '拖动标注点移动位置',\n needsSelection: true,\n },\n {\n action: 'delete',\n label: '删除',\n icon: <DeleteIcon />,\n tooltip: '删除标注点',\n variant: 'danger',\n needsSelection: true,\n },\n { action: 'cancel', label: '取消', icon: <CancelIcon />, tooltip: '取消本次操作' },\n {\n action: 'save',\n label: '保存',\n icon: <SaveIcon />,\n tooltip: '保存操作结果',\n variant: 'primary',\n },\n];\n\nconst MarkerEditToolbar = ({\n visible,\n selectedMarkerId,\n currentMode = 'idle',\n enabledButtons = ['create', 'edit', 'move', 'delete'],\n hintMessage,\n showHint = true,\n color,\n size,\n iconOnly,\n children,\n onEdit,\n onMove,\n onCreate,\n onCancel,\n onSave,\n onDelete,\n}: MarkerEditToolbarProps) => {\n const modeHints = useMemo(\n () => ({\n create: hintMessage || '点击地图放置新标注点,完成后点击保存',\n move: hintMessage || '拖动标注点到目标位置,完成后点击保存',\n }),\n [hintMessage]\n );\n\n const actionHandlers = useMemo(\n () => ({\n edit: () => onEdit?.(selectedMarkerId),\n move: () => onMove?.(selectedMarkerId),\n }),\n [onEdit, onMove, selectedMarkerId]\n );\n\n return (\n <BaseEditToolbar\n visible={visible}\n selectedId={selectedMarkerId}\n currentMode={currentMode}\n enabledButtons={enabledButtons}\n buttons={MARKER_BUTTONS}\n modeHints={modeHints}\n classPrefix=\"marker-edit-toolbar\"\n showHint={showHint}\n color={color}\n size={size}\n iconOnly={iconOnly}\n onCancel={onCancel}\n onSave={onSave}\n onCreate={onCreate}\n onDelete={onDelete}\n actionHandlers={actionHandlers}\n >\n {children}\n </BaseEditToolbar>\n );\n};\n\nexport default MarkerEditToolbar;\n","/**\n * @fileoverview 地图点击处理器组件\n * @description 处理地图点击事件,用于创建模式下的标注点创建和 Tooltip 关闭\n * @module components/Marker/MapClickHandler\n * @since 2.0.0 已移除 react-leaflet 依赖\n */\n\nimport { useEffect } from 'react';\nimport type L from 'leaflet';\nimport { useMap, useMapEvent } from '../../context/MapContext';\n\n/**\n * 地图点击处理器属性\n */\ninterface MapClickHandlerProps {\n /** 是否启用点击处理 */\n enabled: boolean;\n /** 是否存在临时标注点 */\n hasTempMarker: boolean;\n /** 地图点击回调 */\n onMapClick: (latlng: L.LatLng) => void;\n /** 点击非标注区域时的回调(用于关闭 Tooltip) */\n onMapClickWithoutMarker?: () => void;\n}\n\n/**\n * 地图点击处理器\n * @description 处理地图点击事件,用于创建模式下的标注点创建和 Tooltip 关闭\n */\nfunction MapClickHandler({\n enabled,\n hasTempMarker,\n onMapClick,\n onMapClickWithoutMarker,\n}: MapClickHandlerProps) {\n const map = useMap();\n\n // 处理地图点击事件\n useMapEvent('click', (e: L.LeafletMouseEvent) => {\n // 检查点击目标是否是工具栏按钮或其子元素\n const target = e.originalEvent?.target as HTMLElement;\n if (target) {\n const isToolbarElement = target.closest('.marker-edit-toolbar, .leaflet-control-container');\n const isMarkerElement = target.closest('.leaflet-marker-icon');\n if (isToolbarElement) {\n return;\n }\n // 点击非 marker 区域时关闭 Tooltip\n if (!isMarkerElement && onMapClickWithoutMarker) {\n onMapClickWithoutMarker();\n }\n }\n\n if (enabled) {\n onMapClick(e.latlng);\n }\n });\n\n useEffect(() => {\n if (!map) return;\n const container = map.getContainer();\n if (enabled && !hasTempMarker) {\n container.style.cursor = 'crosshair';\n container.classList.add('marker-create-mode');\n } else {\n container.style.cursor = '';\n container.classList.remove('marker-create-mode');\n }\n return () => {\n if (container) {\n container.style.cursor = '';\n container.classList.remove('marker-create-mode');\n }\n };\n }, [map, enabled, hasTempMarker]);\n\n return null;\n}\n\nexport default MapClickHandler;\n","/**\n * 默认 PathOptions 样式常量\n * @description 集中管理各组件的默认视觉样式,便于全局统一调整\n *\n * ⚠️ 颜色值必须与 src/styles/_variables.scss 中的语义色变量保持同步:\n * PLOT_DEFAULT_PATH.color/fillColor → $color-plot (#1668dc)\n * PLOT_DEFAULT_SELECTED_PATH.color/fillColor → $color-plot-selected (#d32029)\n * PLOT_DEFAULT_EDIT_PATH.color/fillColor → $color-plot-edit (#faad14)\n * PLOT_DEFAULT_HIGHLIGHT_PATH.color/fillColor → $color-plot-highlight (#fa8c16)\n * PLOT_CLIP_FRAGMENT_*.color → $color-success (#52c41a)\n *\n * @since 2.0.0 线段组件样式(Road、Irrigation、Track、TrackPlayer)已迁移到 constants/polylineStyles.ts\n * @since 2.0.0 TrackStyle 类型已迁移到 types/polyline.ts\n * @since 2.1.0 图标常量已迁移到 constants/icon.ts\n */\n\nimport type { PathOptions } from '../types';\n\n// ==================== 图标常量(从 constants/icon.ts 导入)===================\nexport {\n MARKER_DEFAULT_ICON,\n MARKER_DEFAULT_SELECTED_ICON,\n MARKER_DEFAULT_EDIT_ICON,\n CLUSTER_DEFAULT_ICON,\n TRACK_DEFAULT_START_ICON,\n TRACK_DEFAULT_END_ICON,\n TRACKPLAYER_DEFAULT_ICON,\n DEFAULT_INLET_ICON,\n DEFAULT_OUTLET_ICON,\n} from './icon';\nexport type { IconConfig, ClusterIconConfig } from '../types/icon';\n\n// ==================== 地块 PlotLayer ====================\n\n/** 地块默认样式 */\nexport const PLOT_DEFAULT_PATH: PathOptions = {\n color: '#1668dc',\n opacity: 1,\n weight: 2,\n fillColor: '#1668dc',\n fillOpacity: 0.2,\n};\n\n/** 地块选中样式 */\nexport const PLOT_DEFAULT_SELECTED_PATH: PathOptions = {\n color: '#d32029',\n opacity: 1,\n weight: 2,\n fillColor: '#d32029',\n fillOpacity: 0.2,\n};\n\n/** 地块编辑样式 */\nexport const PLOT_DEFAULT_EDIT_PATH: PathOptions = {\n color: '#faad14',\n opacity: 1,\n weight: 2,\n fillColor: '#faad14',\n fillOpacity: 0.2,\n dashArray: '5, 5',\n // 顶点样式默认值\n vertexBorderColor: '#ffffff',\n vertexFillColor: '#d32029',\n vertexFillOpacity: 0.5,\n};\n\n/** 地块高亮样式(分组高亮) */\nexport const PLOT_DEFAULT_HIGHLIGHT_PATH: PathOptions = {\n color: '#fa8c16',\n fillColor: '#fa8c16',\n fillOpacity: 0.4,\n weight: 2,\n};\n\n/** 地块无类型时的回退样式 */\nexport const PLOT_FALLBACK_PATH: PathOptions = {\n fillColor: '#ccc',\n color: '#999',\n weight: 2,\n opacity: 0.8,\n fillOpacity: 0.5,\n};\n\n/** 地块新建绘制时的 PM 样式 */\nexport const PLOT_PM_CREATE_OPTIONS: PathOptions = {\n color: '#1890ff',\n fillColor: '#1890ff',\n fillOpacity: 0.3,\n weight: 2,\n};\n\n/** 地块剪切碎片默认样式 */\nexport const PLOT_CLIP_FRAGMENT_DEFAULT: PathOptions = {\n color: '#52c41a',\n weight: 2,\n fillColor: '#52c41a',\n fillOpacity: 0.3,\n dashArray: '8, 6',\n};\n\n/** 地块剪切碎片选中样式 */\nexport const PLOT_CLIP_FRAGMENT_SELECTED: PathOptions = {\n color: '#52c41a',\n weight: 3,\n fillColor: '#52c41a',\n fillOpacity: 0.4,\n dashArray: '',\n};\n\n// ==================== 公共 PM 绘制样式 ====================\n\n/** PM 绘制时的临时线样式(templineStyle) */\nexport const PM_TEMPLATE_LINE_STYLE: PathOptions = {\n color: '#1677ff',\n weight: 4,\n dashArray: '10, 10',\n};\n\n/** PM 绘制时的提示线样式(hintlineStyle) */\nexport const PM_HINT_LINE_STYLE: PathOptions = {\n color: '#1677ff',\n weight: 2,\n dashArray: '5, 5',\n};\n\n/** 灌溉渠 PM 编辑器全局样式 */\nexport const IRRIGATION_PM_PATH_OPTIONS: PathOptions = {\n color: '#1E90FF',\n weight: 4,\n};\n\n// ==================== Loading 加载组件 ====================\n\n/** Loading 遮罩默认背景色 */\nexport const LOADING_DEFAULT_MASK_BACKGROUND = 'rgba(0, 0, 0, 0.5)';\n\n/** Loading 遮罩默认层级 */\nexport const LOADING_DEFAULT_MASK_ZINDEX = 1000;\n\n/** Loading 遮罩默认配置 */\nexport const LOADING_DEFAULT_MASK = {\n background: LOADING_DEFAULT_MASK_BACKGROUND,\n zIndex: LOADING_DEFAULT_MASK_ZINDEX,\n} as const;\n","/**\n * @fileoverview 聚合气泡图标生成工具\n * @description 用于创建地图聚合气泡的 DivIcon,支持预设图标、URL 图片、SVG 三种类型\n * @module utils/clusterIcon\n */\n\nimport L from 'leaflet';\nimport type { ClusterIconConfig, SvgIconConfig } from '../types';\nimport { detectIconType, SVG_MARKER_ICONS, PULSE_ICONS } from './iconUtils';\nimport { generateMarkerSvg, generatePositionSvg } from './markerSvg';\nimport {\n generateTractorSvg,\n generateTractor2Svg,\n generateTruckSvg,\n generateTruck2Svg,\n generateAgriDroneSvg,\n generateAgriDroneSideSvg,\n} from './iconCache';\nimport { generatePulseSvg } from './pulseIcon';\nimport { sanitizeSvg } from './svgUtils';\nimport { CLUSTER_DEFAULT_ICON } from '../constants/styles';\n\n/** 默认聚合颜色分级 */\nfunction getDefaultClusterColor(count: number): string {\n if (count < 10) return '#1890ff';\n if (count < 50) return '#faad14';\n return '#ff4d4f';\n}\n\n/** countSpan 样式变体 */\ntype CountSpanVariant = 'svg-marker' | 'default';\n\n/**\n * 渲染聚合数量气泡\n * @param count - 聚合数量\n * @param color - 气泡背景色\n * @param variant - 样式变体:'svg-marker' 顶部居中(大字描边),'default' 右下角圆形气泡\n */\nfunction renderCountSpan(\n count: number,\n color: string,\n variant: CountSpanVariant,\n size: number\n): string {\n if (variant === 'svg-marker') {\n return `<span style=\"\n position:absolute;\n top:${Math.round(size * 0.145)}px;\n left:50%;\n transform:translateX(-50%);\n color:#fff;\n font-size:${Math.max(13, Math.round(size * 0.24))}px;\n font-weight:800;\n line-height:1;\n -webkit-text-stroke:2px ${color};\n paint-order:stroke fill;\n font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;\n pointer-events:none;\n \">${count}</span>`;\n }\n return `<span style=\"\n position:absolute;\n bottom:-4px;right:-4px;\n min-width:20px;height:20px;\n background:${color};color:#fff;\n border-radius:10px;\n display:flex;align-items:center;justify-content:center;\n font-size:11px;font-weight:700;\n padding:0 4px;\n box-shadow:0 1px 3px rgba(0,0,0,0.3);\n border:2px solid #fff;\n font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;\n \">${count}</span>`;\n}\n\n/** 生成预设图标的 HTML */\nfunction getPresetIconHtml(iconType: string, size: number, animated: boolean): string {\n const animatedClass = animated ? 'animated' : '';\n\n // 彩色水滴形标记 - 使用内联 SVG\n if ((SVG_MARKER_ICONS as readonly string[]).includes(iconType)) {\n const svgHtml = generateMarkerSvg(iconType as never, size, size, animated);\n return `<div class=\"marker-icon-inner marker-pin-icon ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n \">${svgHtml}</div>`;\n }\n\n // 脉冲同心圆图标 - 使用内联 SVG\n if ((PULSE_ICONS as readonly string[]).includes(iconType)) {\n const svgHtml = generatePulseSvg(iconType as never, size, size, animated);\n return `<div class=\"marker-icon-inner marker-pulse-icon ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n // 农机图标使用内联 SVG\n if (iconType === 'tractor') {\n const svgHtml = generateTractorSvg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-tractor ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n // 位置标记图标(简单的圆点标记)\n if (iconType === 'position' || iconType === 'position-red') {\n const svgHtml = generatePositionSvg(iconType, size, size, animated);\n return `<div class=\"marker-icon-inner marker-pin-icon ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'tractor-2') {\n const svgHtml = generateTractor2Svg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-tractor-2 ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'truck') {\n const svgHtml = generateTruckSvg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-truck ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'truck-2') {\n const svgHtml = generateTruck2Svg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-truck-2 ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'agri-drone') {\n const svgHtml = generateAgriDroneSvg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-agri-drone ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n if (iconType === 'agri-drone-side') {\n const svgHtml = generateAgriDroneSideSvg(size, size, animated);\n return `<div class=\"marker-icon-inner icon-agri-drone-side ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n display: flex;\n align-items: center;\n justify-content: center;\n \">${svgHtml}</div>`;\n }\n\n return `<div class=\"marker-icon-inner icon-${iconType} ${animatedClass}\" style=\"\n width: ${size}px;\n height: ${size}px;\n animation-timing-function: steps(23);\n \"></div>`;\n}\n\n/**\n * 创建聚合气泡图标\n * @param count - 聚合数量\n * @param config - 图标配置\n */\nexport function createClusterIcon(count: number, config?: ClusterIconConfig): L.DivIcon {\n // 如果有自定义渲染函数,优先使用\n if (config?.render) {\n const size = Math.max(36, Math.min(56, 36 + Math.floor(Math.log2(Math.max(count, 2))) * 4));\n const color =\n typeof config.colors === 'function'\n ? config.colors(count)\n : Array.isArray(config.colors)\n ? config.colors[Math.min(Math.floor(count / 50), config.colors.length - 1)]\n : getDefaultClusterColor(count);\n const fontSize = Math.max(12, Math.floor(size * 0.38));\n const html = config.render(count, { size, color, fontSize });\n return L.divIcon({\n html,\n className: config.animated ? 'cluster-icon animated' : '',\n iconSize: [size, size],\n iconAnchor: [size / 2, size / 2],\n });\n }\n\n // 检查是否显示数量数字,默认使用常量值\n const showCount = config?.showCount ?? CLUSTER_DEFAULT_ICON.showCount;\n\n // 计算尺寸\n let size: number;\n if (config?.iconSize) {\n if (Array.isArray(config.iconSize)) {\n size = config.iconSize[0];\n } else if (typeof config.iconSize === 'object') {\n // 动态范围 { min, max }\n const min = config.iconSize.min ?? 36;\n const max = config.iconSize.max ?? 56;\n size = Math.max(min, Math.min(max, min + Math.floor(Math.log2(Math.max(count, 2))) * 4));\n } else {\n // 固定数值大小\n size = config.iconSize;\n }\n } else {\n size = Math.max(36, Math.min(56, 36 + Math.floor(Math.log2(Math.max(count, 2))) * 4));\n }\n\n // 计算颜色\n let color: string;\n if (config?.colors) {\n if (typeof config.colors === 'function') {\n color = config.colors(count);\n } else {\n // 数组分级:<10 用第一个,<50 用第二个,>=50 用第三个...\n const thresholds = [10, 50, 100, 200, 500];\n let colorIndex = 0;\n for (let i = 0; i < thresholds.length; i++) {\n if (count >= thresholds[i]) colorIndex = i + 1;\n }\n color = config.colors[Math.min(colorIndex, config.colors.length - 1)];\n }\n } else {\n color = getDefaultClusterColor(count);\n }\n\n const fontSize = Math.max(12, Math.floor(size * 0.38));\n\n // 如果配置了自定义图标,否则使用默认常量\n const iconSource = config?.icon ?? CLUSTER_DEFAULT_ICON.icon;\n const detected = detectIconType(iconSource);\n\n // 预设图标 - 直接生成 HTML\n if (detected.type === 'preset') {\n const iconType = detected.name;\n const isSvgMarker = (SVG_MARKER_ICONS as readonly string[]).includes(iconType);\n const isPulseIcon = (PULSE_ICONS as readonly string[]).includes(iconType);\n\n const iconHtml = getPresetIconHtml(\n iconType,\n size,\n !!(config?.animated ?? CLUSTER_DEFAULT_ICON.animated)\n );\n\n const countSpan = showCount\n ? renderCountSpan(count, color, isSvgMarker || isPulseIcon ? 'svg-marker' : 'default', size)\n : '';\n\n return L.divIcon({\n html: `<div style=\"position:relative;width:${size}px;height:${size}px;\">\n ${iconHtml}\n ${countSpan}\n </div>`,\n className:\n (config?.animated ?? CLUSTER_DEFAULT_ICON.animated)\n ? 'cluster-icon animated'\n : 'cluster-icon',\n iconSize: [size, size],\n iconAnchor: [size / 2, size / 2],\n });\n }\n\n if (detected.type === 'url') {\n // 防御 XSS:转义 HTML 特殊字符\n const safeUrl = detected.src\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n const url = safeUrl;\n const countSpan = showCount ? renderCountSpan(count, color, 'default', size) : '';\n return L.divIcon({\n html: `<div style=\"\n width:${size}px;height:${size}px;\n position:relative;\n display:flex;align-items:center;justify-content:center;\n \">\n <img src=\"${url}\" style=\"width:100%;height:100%;object-fit:contain;\" />\n ${countSpan}\n </div>`,\n className: (config?.animated ?? CLUSTER_DEFAULT_ICON.animated) ? 'cluster-icon animated' : '',\n iconSize: [size, size],\n iconAnchor: [size / 2, size / 2],\n });\n }\n\n if (detected.type === 'svg') {\n // 使用 DOMParser 安全解析 SVG,移除 script 标签和事件属性\n let svgContent: string;\n if (typeof detected.config === 'string') {\n svgContent = sanitizeSvg(detected.config);\n } else {\n const svgConfig = detected.config as SvgIconConfig;\n svgContent = `<svg viewBox=\"${svgConfig.viewBox || '0 0 24 24'}\" width=\"${size}\" height=\"${size}\" fill=\"${svgConfig.fill || color}\" stroke=\"${svgConfig.stroke || ''}\" stroke-width=\"${svgConfig.strokeWidth || 0}\">\n <path d=\"${svgConfig.path}\" />\n </svg>`;\n svgContent = sanitizeSvg(svgContent);\n }\n const countSpan = showCount ? renderCountSpan(count, color, 'default', size) : '';\n const svgIconSize: [number, number] = (config?.iconSize as [number, number]) || [\n size + 8,\n size + 12,\n ];\n const svgIconAnchor: [number, number] = config?.iconAnchor || [\n svgIconSize[0] / 2,\n svgIconSize[1],\n ];\n return L.divIcon({\n html: `<div style=\"\n width:${size}px;height:${size}px;\n position:relative;\n display:flex;align-items:center;justify-content:center;\n \">\n ${svgContent}\n ${countSpan}\n </div>`,\n className: (config?.animated ?? CLUSTER_DEFAULT_ICON.animated) ? 'cluster-icon animated' : '',\n iconSize: svgIconSize,\n iconAnchor: svgIconAnchor,\n popupAnchor: config?.popupAnchor,\n });\n }\n\n // 兜底:圆形数字气泡\n const countDiv = showCount ? `${count}` : '';\n return L.divIcon({\n html: `<div style=\"\n width:${size}px;height:${size}px;border-radius:50%;\n background:${color};color:#fff;\n display:flex;align-items:center;justify-content:center;\n font-size:${fontSize}px;font-weight:700;\n box-shadow:0 2px 8px rgba(0,0,0,0.3);border:2.5px solid #fff;\n cursor:pointer;user-select:none;\n font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;\n line-height:1;\n \">${countDiv}</div>`,\n className: (config?.animated ?? CLUSTER_DEFAULT_ICON.animated) ? 'cluster-icon animated' : '',\n iconSize: [size, size],\n iconAnchor: [size / 2, size / 2],\n });\n}\n\nexport { getPresetIconHtml };\n","/**\n * @fileoverview Marker 聚合模式渲染子组件\n * @module components/Marker/ClusterView\n * @since 2.0.0 已移除 react-leaflet 依赖\n * @since 2.1.0 性能优化:增量渲染、边界检查\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any -- Supercluster 库类型定义需要 */\n\nimport React, { useEffect, useRef, useCallback } from 'react';\nimport L from 'leaflet';\nimport type Supercluster from 'supercluster';\nimport { useMap } from '../../context/MapContext';\nimport { createClusterIcon } from '../../utils/clusterIcon';\nimport { logger } from '../../utils/errorHandling';\nimport type { MarkerData, ClusterIconConfig } from '../../types';\n\ninterface ClusterViewProps {\n /** 聚合结果数组(包含聚合气泡和单独点) */\n clusterResults: Supercluster.ClusterFeature<any>[];\n /** 单独 Marker 的图标 */\n markerIcon: L.DivIcon;\n /** 聚合气泡图标配置 */\n clusterIconConfig?: ClusterIconConfig;\n /** 是否永久显示 Tooltip,false 时悬停显示 */\n showTooltip: boolean;\n /** 聚合气泡点击处理 */\n onClusterClick: (feature: Supercluster.ClusterFeature<Supercluster.AnyProps>) => void;\n /** 单独 Marker 点击处理 */\n onMarkerClick: (markerId: string | number) => void;\n /** 获取 Marker 的 Tooltip 内容 */\n getTooltipContent: (marker: MarkerData) => { title?: string; description?: string };\n}\n\n/** Marker 实例与元数据映射 */\ninterface MarkerEntry {\n marker: L.Marker;\n id: string | number;\n isCluster: boolean;\n featureId: number | string;\n}\n\n/**\n * 计算聚合结果的唯一标识\n * @description 用于增量更新的 diff 比较\n */\nfunction getFeatureId(feature: Supercluster.ClusterFeature<any>): string | number {\n const props = feature.properties;\n // 聚合使用 cluster_id,单独点使用 id\n if (props.cluster) {\n return `cluster-${props.cluster_id}`;\n }\n return props.id;\n}\n\n/**\n * 比较两个 feature 是否相同\n */\nfunction isFeatureEqual(\n a: Supercluster.ClusterFeature<any>,\n b: Supercluster.ClusterFeature<any>\n): boolean {\n const [lngA, latA] = a.geometry.coordinates;\n const [lngB, latB] = b.geometry.coordinates;\n\n // 坐标相同且类型相同\n if (lngA !== lngB || latA !== latB) return false;\n\n const propsA = a.properties;\n const propsB = b.properties;\n\n // 聚合比较数量\n if (propsA.cluster && propsB.cluster) {\n return propsA.point_count === propsB.point_count;\n }\n\n // 单独点比较 id\n return propsA.id === propsB.id;\n}\n\nconst ClusterView: React.FC<ClusterViewProps> = ({\n clusterResults,\n markerIcon,\n clusterIconConfig,\n showTooltip,\n onClusterClick,\n onMarkerClick,\n getTooltipContent,\n}) => {\n const map = useMap();\n const markersMapRef = useRef<Map<string | number, MarkerEntry>>(new Map());\n\n /**\n * 创建聚合 Marker\n */\n const createClusterMarker = useCallback(\n (feature: Supercluster.ClusterFeature<any>): L.Marker | null => {\n if (!map) return null;\n\n try {\n const clusterProps = feature.properties as Supercluster.ClusterProperties;\n const count = clusterProps.point_count;\n const [lng, lat] = feature.geometry.coordinates;\n\n const icon = createClusterIcon(count, clusterIconConfig);\n const size = (icon.options?.iconSize as [number, number]) || [40, 40];\n\n const marker = L.marker([lat, lng], { icon }).addTo(map);\n\n marker.on('click', () => {\n try {\n onClusterClick(feature as Supercluster.ClusterFeature<Supercluster.AnyProps>);\n } catch (error) {\n logger.error('ClusterView', '聚合点击回调执行失败:', error);\n }\n });\n\n // 绑定 Tooltip\n marker.bindTooltip(`<div class=\"marker-popup\"><strong>${count} 个标注点</strong></div>`, {\n permanent: showTooltip,\n direction: 'top',\n offset: [0, -size[1] / 2] as L.PointTuple,\n });\n\n return marker;\n } catch (error) {\n logger.error('ClusterView', '创建聚合 Marker 失败:', error);\n return null;\n }\n },\n [map, clusterIconConfig, showTooltip, onClusterClick]\n );\n\n /**\n * 创建单独点 Marker\n */\n const createSingleMarker = useCallback(\n (feature: Supercluster.ClusterFeature<any>): L.Marker | null => {\n if (!map) return null;\n\n try {\n const markerId = feature.properties.id;\n const markerData = feature.properties.markerData as MarkerData;\n\n // 数据验证\n if (!markerId) {\n logger.warn('ClusterView', '跳过缺少 id 的单独点');\n return null;\n }\n if (!markerData) {\n logger.warn('ClusterView', '跳过缺少 markerData 的单独点', feature);\n return null;\n }\n\n const [lng, lat] = feature.geometry.coordinates;\n const tooltipContent = getTooltipContent(markerData);\n const iconHeight =\n (markerIcon.options?.iconSize as [number, number] | undefined)?.[1] ?? 48;\n\n const marker = L.marker([lat, lng], { icon: markerIcon }).addTo(map);\n\n marker.on('click', () => {\n try {\n onMarkerClick(markerId);\n } catch (error) {\n logger.error('ClusterView', 'Marker 点击回调执行失败:', error);\n }\n });\n\n // 绑定 Tooltip\n const tooltipHtml = `<div class=\"marker-popup\">\n <strong>${tooltipContent.title ?? markerData.title ?? ''}</strong>\n ${(tooltipContent.description ?? markerData.description) ? `<p>${tooltipContent.description ?? markerData.description}</p>` : ''}\n </div>`;\n\n marker.bindTooltip(tooltipHtml, {\n permanent: showTooltip,\n direction: 'top',\n offset: [0, -iconHeight] as L.PointTuple,\n });\n\n return marker;\n } catch (error) {\n logger.error('ClusterView', '创建单独 Marker 失败:', error);\n return null;\n }\n },\n [map, markerIcon, showTooltip, getTooltipContent, onMarkerClick]\n );\n\n /**\n * 更新 Marker Tooltip\n */\n const updateMarkerTooltip = useCallback(\n (entry: MarkerEntry, feature: Supercluster.ClusterFeature<any>) => {\n const { marker, isCluster } = entry;\n\n try {\n if (isCluster) {\n const clusterProps = feature.properties as Supercluster.ClusterProperties;\n marker.setTooltipContent(\n `<div class=\"marker-popup\"><strong>${clusterProps.point_count} 个标注点</strong></div>`\n );\n } else {\n const markerData = feature.properties.markerData as MarkerData;\n const tooltipContent = getTooltipContent(markerData);\n const tooltipHtml = `<div class=\"marker-popup\">\n <strong>${tooltipContent.title ?? markerData.title ?? ''}</strong>\n ${(tooltipContent.description ?? markerData.description) ? `<p>${tooltipContent.description ?? markerData.description}</p>` : ''}\n </div>`;\n marker.setTooltipContent(tooltipHtml);\n }\n } catch (error) {\n logger.error('ClusterView', '更新 Tooltip 失败:', error);\n }\n },\n [getTooltipContent]\n );\n\n /**\n * 增量更新渲染\n * @description 通过 diff 算法只更新变化的 Marker\n */\n useEffect(() => {\n if (!map) return;\n\n // 边界检查\n if (!Array.isArray(clusterResults)) {\n logger.warn('ClusterView', 'clusterResults 不是有效数组');\n markersMapRef.current.forEach(entry => entry.marker.remove());\n markersMapRef.current.clear();\n return;\n }\n\n // 计算当前 ID 集合\n const currentIds = new Set<string | number>();\n const currentFeatureMap = new Map<string | number, Supercluster.ClusterFeature<any>>();\n\n clusterResults.forEach(feature => {\n const id = getFeatureId(feature);\n currentIds.add(id);\n currentFeatureMap.set(id, feature);\n });\n\n // 1. 删除不再存在的 Marker\n markersMapRef.current.forEach((entry, id) => {\n if (!currentIds.has(id)) {\n try {\n entry.marker.remove();\n } catch (error) {\n logger.error('ClusterView', '移除 Marker 失败:', error, id);\n }\n markersMapRef.current.delete(id);\n }\n });\n\n // 2. 创建或更新 Marker\n clusterResults.forEach(feature => {\n const id = getFeatureId(feature);\n const existing = markersMapRef.current.get(id);\n const isCluster = feature.properties.cluster;\n\n if (existing) {\n // 检查是否需要更新(位置、数量变化)\n const oldFeature = currentFeatureMap.get(id);\n if (oldFeature && !isFeatureEqual(oldFeature, feature)) {\n // 位置变化,更新 marker\n const [lng, lat] = feature.geometry.coordinates;\n existing.marker.setLatLng([lat, lng]);\n\n // 更新 Tooltip\n updateMarkerTooltip(existing, feature);\n }\n } else {\n // 创建新 Marker\n let newMarker: L.Marker | null = null;\n\n if (isCluster) {\n newMarker = createClusterMarker(feature);\n } else {\n newMarker = createSingleMarker(feature);\n }\n\n if (newMarker) {\n markersMapRef.current.set(id, {\n marker: newMarker,\n id,\n isCluster,\n featureId: isCluster ? feature.properties.cluster_id : feature.properties.id,\n });\n }\n }\n });\n }, [map, clusterResults, createClusterMarker, createSingleMarker, updateMarkerTooltip]);\n\n // Tooltip 模式变化时更新\n useEffect(() => {\n if (!map) return;\n\n markersMapRef.current.forEach(entry => {\n try {\n if (entry.marker.getTooltip()) {\n // Leaflet 不支持直接改变 permanent,需要重新绑定\n // 这里暂时只更新样式,实际 permanent 变化需要重建\n }\n } catch (error) {\n logger.error('ClusterView', '更新 Tooltip 模式失败:', error);\n }\n });\n }, [showTooltip, map]);\n\n // 组件卸载时清理\n useEffect(() => {\n return () => {\n markersMapRef.current.forEach(entry => {\n try {\n entry.marker.remove();\n } catch (error) {\n logger.error('ClusterView', '卸载清理失败:', error);\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 组件卸载时清理\n markersMapRef.current.clear();\n };\n }, []);\n\n return null;\n};\n\nexport default React.memo(ClusterView);\n","/**\n * @fileoverview 3D 标签组件\n * @description 为 Marker 提供带 3D 立体效果的文字标签\n * @module components/shared/Label3D\n */\n\nimport { useEffect, useRef, useCallback, useMemo } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport type { MarkerData, MarkerLabelConfig } from '../../types';\n\nexport interface Label3DProps {\n /** 标签配置 */\n labelConfig?: MarkerLabelConfig;\n /** 标签字段名,默认 'title' */\n labelField?: string;\n /** 显示标签的数据 */\n data: MarkerData[];\n /** 当前选中的 ID(用于高亮) */\n selectedId?: string | number | null;\n}\n\nconst DEFAULT_LABEL_CONFIG: Required<MarkerLabelConfig> = {\n show: false,\n field: 'title',\n color: '#2c3e50',\n fontSize: 14,\n fontWeight: 'bold',\n offset: [0, 40],\n className: '',\n animation: false,\n animationDuration: 2,\n};\n\n/**\n * Label3D - 3D 立体文字标签组件\n * 使用原生 Leaflet SVG 渲染,支持竖排立体字效果\n */\nconst Label3D: React.FC<Label3DProps> = ({ labelConfig, labelField = 'title', data }) => {\n const map = useMap();\n const markersRef = useRef<L.Marker[]>([]);\n const retryRafRef = useRef<number | null>(null);\n\n // 合并配置\n const config = useMemo(\n () => ({\n ...DEFAULT_LABEL_CONFIG,\n ...labelConfig,\n }),\n [labelConfig]\n );\n\n // 获取标签文本\n const getLabelText = useCallback(\n (item: MarkerData): string | null => {\n const field = config.field || labelField;\n const value = item[field as keyof MarkerData];\n if (!value && value !== 0) return null;\n return String(value);\n },\n [config.field, labelField]\n );\n\n // 创建标签\n const createLabels = useCallback(() => {\n // 清理旧的标签\n markersRef.current.forEach(marker => marker.remove());\n markersRef.current = [];\n\n if (!map || !config.show || !data?.length) return;\n\n // 过滤有效数据并获取标签文本\n const labelsToCreate = data\n .map(item => ({\n item,\n text: getLabelText(item),\n }))\n .filter(label => label.text);\n\n if (labelsToCreate.length === 0) return;\n\n // 创建标签\n labelsToCreate.forEach(({ item, text }) => {\n const [offsetX, offsetY] = config.offset;\n\n // 处理颜色(支持单色或渐变数组)\n const isGradient = Array.isArray(config.color);\n const gradientColors: string[] = isGradient\n ? (config.color as string[])\n : [config.color as string];\n const firstColor = gradientColors[0];\n\n // 动画样式\n const getAnimationClass = () => {\n if (config.animation === 'pulse') return 'label-animated-pulse';\n if (config.animation === 'gradient') return 'label-animated-gradient';\n if (config.animation === 'scale') return 'label-animated-scale';\n if (config.animation === 'flip') return 'label-animated-flip';\n if (config.animation === 'flicker') return 'label-animated-flicker';\n if (config.animation === 'rotate') return 'label-animated-rotate';\n if (config.animation === 'wobble') return 'label-animated-wobble';\n if (config.animation === 'bounce') return 'label-animated-bounce';\n if (config.animation === 'float') return 'label-animated-float';\n if (config.animation === 'neon') return 'label-animated-neon';\n if (config.animation === 'rainbow') return 'label-animated-rainbow';\n if (config.animation === 'shadow') return 'label-animated-shadow';\n return '';\n };\n const isShadow = config.animation === 'shadow';\n const animationDurationVar = config.animation\n ? `--label-animation-duration: ${config.animationDuration}s;`\n : '';\n // 渐变颜色 CSS 变量\n const gradientColorsVar =\n isGradient && config.animation === 'gradient'\n ? `--label-gradient-colors: ${gradientColors.join(', ')};`\n : '';\n\n // 竖起立体字样式 - 参照 CSND 示例的 transform 效果\n const labelHtml = `\n <div class=\"marker-label-3d ${config.className} ${getAnimationClass()}\" style=\"\n position: relative;\n display: inline-block;\n transform: translate(-50%, 0);\n font-size: ${config.fontSize}px;\n font-weight: bold;\n color: ${firstColor};\n letter-spacing: 3px;\n margin: 0;\n ${animationDurationVar}\n ${gradientColorsVar}\n ${\n isShadow\n ? ''\n : `\n text-shadow:\n -1px 0 0 #000,\n -2px 0 0 #000,\n -3px 0 0 #000,\n -4px 0 0 #000,\n -5px 0 0 #000;\n `\n }\n \">${text}\n <span class=\"${isShadow ? 'label-shadow-anim' : ''}\" style=\"\n position: absolute;\n top: 0;\n left: 0;\n color: #000;\n font-weight: bolder;\n transform: translateX(-15px) translateY(4px) scaleY(.5) skew(55deg);\n z-index: -1;\n filter: blur(1px);\n mask: linear-gradient(transparent, #000);\n pointer-events: none;\n ${isShadow ? `animation: label-shadow-move var(--label-animation-duration, 2s) ease-in-out infinite;` : ''}\n \">${text}</span>\n </div>\n `;\n\n const labelIcon = L.divIcon({\n className: 'marker-label-container',\n html: labelHtml,\n iconSize: [100, 100],\n iconAnchor: [50 + offsetX, offsetY],\n });\n\n // item.position 格式为 [lat, lng]\n const marker = L.marker(item.position, {\n icon: labelIcon,\n interactive: false,\n zIndexOffset: 1000,\n }).addTo(map);\n\n markersRef.current.push(marker);\n });\n }, [map, config, data, getLabelText]);\n\n // 初始化创建标签(带 RAF 重试)\n useEffect(() => {\n if (!map) {\n // 地图未准备好,延迟重试\n retryRafRef.current = requestAnimationFrame(() => {\n createLabels();\n });\n return;\n }\n\n createLabels();\n\n return () => {\n if (retryRafRef.current) {\n cancelAnimationFrame(retryRafRef.current);\n retryRafRef.current = null;\n }\n };\n }, [map, createLabels]);\n\n // 清理\n useEffect(() => {\n return () => {\n markersRef.current.forEach(marker => marker.remove());\n markersRef.current = [];\n };\n }, []);\n\n // 地图移动/缩放时重建标签\n useEffect(() => {\n if (!map || !config.show) return;\n\n const handleMapChange = () => {\n createLabels();\n };\n\n map.on('moveend', handleMapChange);\n map.on('zoomend', handleMapChange);\n\n return () => {\n map.off('moveend', handleMapChange);\n map.off('zoomend', handleMapChange);\n };\n }, [map, config.show, createLabels]);\n\n return null;\n};\n\nexport default Label3D;\n","/**\n * 保持 ref 始终指向最新值的 Hook\n * @description 用于在回调中访问最新值,避免闭包陷阱\n */\n\nimport { useRef, useEffect } from 'react';\n\n/**\n * 返回一个 ref,其 current 始终指向传入的最新值\n * @param value 需要保持引用的值\n * @returns React.MutableRefObject<T>\n *\n * @example\n * ```ts\n * const onClickRef = useLatestRef(onClick);\n * // 在回调中使用 onClickRef.current\n * ```\n */\nexport function useLatestRef<T>(value: T) {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref;\n}\n\nexport default useLatestRef;\n","/**\n * 主题上下文\n * @description 提供全局主题状态管理,支持 MapContainer 等组件自动同步主题\n * @since 2.0.0\n */\n\n/* eslint-disable @typescript-eslint/no-empty-function */\nimport React, { createContext, useContext, useState, useEffect, useCallback, useMemo } from 'react';\n\n// ========== 类型定义 ==========\n\nexport type ThemeMode = 'light' | 'dark';\n\nexport interface ThemeContextValue {\n /** 当前主题 */\n theme: ThemeMode;\n /** 设置主题 */\n setTheme: (theme: ThemeMode) => void;\n /** 是否为深色主题 */\n isDark: boolean;\n}\n\n// ========== 上下文 ==========\n\nconst ThemeContext = createContext<ThemeContextValue>({\n theme: 'light',\n setTheme: () => {},\n isDark: false,\n});\n\n/**\n * 获取主题上下文的 Hook\n * @returns 主题上下文值\n */\nexport const useTheme = (): ThemeContextValue => {\n return useContext(ThemeContext);\n};\n\n// ========== Provider 组件 ==========\n\nexport interface ThemeProviderProps {\n /** 子组件 */\n children: React.ReactNode;\n /** 初始主题,默认从 localStorage 读取或使用 'light' */\n defaultTheme?: ThemeMode;\n /** 主题变化回调 */\n onThemeChange?: (theme: ThemeMode) => void;\n}\n\n/**\n * 主题 Provider 组件\n * @description 提供全局主题状态,自动同步 localStorage 和 DOM 属性\n *\n * @example\n * ```tsx\n * // 在应用入口包裹\n * <ThemeProvider defaultTheme=\"dark\">\n * <App />\n * </ThemeProvider>\n *\n * // 在组件中使用\n * const { theme, setTheme, isDark } = useTheme();\n * ```\n */\nexport function ThemeProvider({\n children,\n defaultTheme,\n onThemeChange,\n}: ThemeProviderProps): JSX.Element {\n // 初始化主题:优先使用 props,其次 localStorage,最后默认 'light'\n const [theme, setThemeState] = useState<ThemeMode>(() => {\n if (defaultTheme) return defaultTheme;\n // 检查是否在浏览器环境中\n if (typeof window !== 'undefined' && window.localStorage) {\n const stored = localStorage.getItem('theme');\n if (stored === 'light' || stored === 'dark') return stored;\n }\n return 'light';\n });\n\n // 同步到 DOM 和 localStorage\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', theme);\n document.body.setAttribute('data-theme', theme);\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem('theme', theme);\n }\n }, [theme]);\n\n // 设置主题\n const setTheme = useCallback(\n (newTheme: ThemeMode) => {\n setThemeState(newTheme);\n onThemeChange?.(newTheme);\n },\n [onThemeChange]\n );\n\n const value = useMemo(\n () => ({\n theme,\n setTheme,\n isDark: theme === 'dark',\n }),\n [theme, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport default ThemeProvider;\n","/**\n * 深色主题 SVG 滤镜工具\n * @description 为 Leaflet 地图组件提供深色主题支持\n */\n\nexport const FILTER_CONTAINER_ID = 'map-theme-filters';\nexport const DARK_FILTER_ID = 'tianditu-dark-filter';\n\nlet svgFilterInjected = false;\n\n/**\n * 确保深色滤镜已注入 DOM\n * 仅在首次调用时注入,全局只注入一次\n */\nexport function ensureDarkFilterInjected(): void {\n if (svgFilterInjected) return;\n if (document.getElementById(FILTER_CONTAINER_ID)) {\n svgFilterInjected = true;\n return;\n }\n\n const svgFilters = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFilters.setAttribute('id', FILTER_CONTAINER_ID);\n svgFilters.setAttribute('aria-hidden', 'true');\n svgFilters.setAttribute('style', 'position: absolute; width: 0; height: 0; overflow: hidden;');\n svgFilters.setAttribute('version', '1.1');\n\n const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n\n const darkFilter = document.createElementNS('http://www.w3.org/2000/svg', 'filter');\n darkFilter.setAttribute('id', DARK_FILTER_ID);\n darkFilter.setAttribute('x', '-20%');\n darkFilter.setAttribute('y', '-20%');\n darkFilter.setAttribute('width', '140%');\n darkFilter.setAttribute('height', '140%');\n darkFilter.setAttribute('filterUnits', 'objectBoundingBox');\n darkFilter.setAttribute('primitiveUnits', 'userSpaceOnUse');\n darkFilter.setAttribute('color-interpolation-filters', 'sRGB');\n\n const colorMatrix = document.createElementNS('http://www.w3.org/2000/svg', 'feColorMatrix');\n colorMatrix.setAttribute('type', 'matrix');\n colorMatrix.setAttribute('values', '1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0');\n colorMatrix.setAttribute('in', 'SourceGraphic');\n colorMatrix.setAttribute('result', 'colormatrix');\n\n const componentTransfer = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'feComponentTransfer'\n );\n componentTransfer.setAttribute('in', 'colormatrix');\n componentTransfer.setAttribute('result', 'componentTransfer');\n\n const feFuncR = document.createElementNS('http://www.w3.org/2000/svg', 'feFuncR');\n feFuncR.setAttribute('type', 'table');\n feFuncR.setAttribute('tableValues', '0.12 0.18 0.35');\n\n const feFuncG = document.createElementNS('http://www.w3.org/2000/svg', 'feFuncG');\n feFuncG.setAttribute('type', 'table');\n feFuncG.setAttribute('tableValues', '0.12 0.18 0.35');\n\n const feFuncB = document.createElementNS('http://www.w3.org/2000/svg', 'feFuncB');\n feFuncB.setAttribute('type', 'table');\n feFuncB.setAttribute('tableValues', '0.2 0.25 0.45');\n\n const feFuncA = document.createElementNS('http://www.w3.org/2000/svg', 'feFuncA');\n feFuncA.setAttribute('type', 'table');\n feFuncA.setAttribute('tableValues', '0 0.3 1');\n\n componentTransfer.appendChild(feFuncR);\n componentTransfer.appendChild(feFuncG);\n componentTransfer.appendChild(feFuncB);\n componentTransfer.appendChild(feFuncA);\n\n darkFilter.appendChild(colorMatrix);\n darkFilter.appendChild(componentTransfer);\n defs.appendChild(darkFilter);\n svgFilters.appendChild(defs);\n\n document.body.appendChild(svgFilters);\n svgFilterInjected = true;\n}\n","/**\n * 天地图图层组件\n * @description 封装天地图的矢量图层和标注图层,支持多种图层风格和自定义瓦片 URL\n * @since 2.0.0 已移除 react-leaflet 依赖,改用原生 Leaflet API\n * @since 2.1.0 重构:分离图层创建和 URL 更新逻辑,学习 react-leaflet 的设计模式\n *\n * ## 重构说明 (2024-06-08)\n *\n * **问题**: 原始实现在单个 useEffect 中处理图层创建和更新,导致任何 props 变化都会删除并重建图层,\n * 触发大量瓦片请求。\n *\n * **解决方案**: 学习 react-leaflet 的设计模式,分离关注点:\n * 1. 图层创建 useEffect - 只依赖 `map`,只执行一次\n * 2. URL 更新 useEffect - 依赖 URL 相关 props,使用 `layer.setUrl()` 更新\n * 3. 选项更新 useEffect - 依赖选项 props,使用 `layer.setOptions()` 更新\n *\n * **优势**:\n * - URL 变化时不会删除重建图层,只调用 `setUrl()` 更新\n * - 减少不必要的瓦片请求\n * - 代码更清晰,每个 useEffect 职责单一\n *\n * ## 使用示例\n *\n * ```tsx\n * <MapContainer center={[30, 120]} zoom={12}>\n * <TianDiTuLayer apiKey=\"your-api-key\" />\n * <Marker dataSource={markers} />\n * </MapContainer>\n * ```\n *\n * ## 性能优化要点\n *\n * 1. **图层实例复用** - 图层一旦创建,就通过 ref 存储,避免重复创建\n * 2. **setUrl() 更新** - URL 变化时调用 setUrl() 而非删除重建\n * 3. **缩小依赖范围** - 每个 useEffect 只依赖必要的 props\n */\n\nimport { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport { ensureDarkFilterInjected } from '../../utils/darkThemeFilter';\nimport type { LayerType, TianDiTuLayerProps } from '../../types';\n\n// ========== 图层配置 ==========\n\n// 图层类型配置\nexport const LAYER_TYPES = {\n VECTOR: 'vector', // 矢量图层(默认)\n SATELLITE: 'satellite', // 卫星影像图层\n TERRAIN: 'terrain', // 地形图层\n} as const;\n\n// 图层类型标签\nconst LAYER_LABELS: Record<LayerType, string> = {\n [LAYER_TYPES.VECTOR]: '矢量',\n [LAYER_TYPES.SATELLITE]: '影像',\n [LAYER_TYPES.TERRAIN]: '地形',\n};\n\n// 天地图图层 URL 配置\nconst LAYER_URLS: Record<LayerType, { base: string; annotation: string }> = {\n // 矢量图层(浅色)\n [LAYER_TYPES.VECTOR]: {\n base: 'https://t{s}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n annotation:\n 'https://t{s}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n },\n // 卫星影像图层\n [LAYER_TYPES.SATELLITE]: {\n base: 'https://t{s}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n annotation:\n 'https://t{s}.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n },\n // 地形图层\n [LAYER_TYPES.TERRAIN]: {\n base: 'https://t{s}.tianditu.gov.cn/ter_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ter&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n annotation:\n 'https://t{s}.tianditu.gov.cn/cta_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cta&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk={key}',\n },\n};\n\n// ========== TianDiTuLayer 组件 ==========\n\n/**\n * 天地图图层组件\n */\nexport const TianDiTuLayer = memo<TianDiTuLayerProps>(function TianDiTuLayer({\n apiKey,\n showAnnotation = true,\n layerType: layerTypeProp = LAYER_TYPES.VECTOR,\n tileUrl,\n annotationUrl,\n overlayUrl,\n // subdomains, maxZoom, minZoom 在当前实现中未使用,保留用于未来扩展或 API 兼容\n subdomains: _subdomains = ['0', '1', '2', '3', '4', '5', '6', '7'],\n maxZoom: _maxZoom = 18,\n minZoom: _minZoom = 0,\n attribution = null,\n theme: themeProp,\n showLayerSelector = false,\n onLayerTypeChange,\n}: TianDiTuLayerProps): JSX.Element | null {\n // 从 ConfigProvider 获取 theme,优先使用 props 传入的 theme\n const config = useConfig();\n const theme = themeProp || config.theme || 'light';\n const map = useMap();\n const [currentLayerType, setCurrentLayerType] = useState<LayerType>(layerTypeProp as LayerType);\n const [selectorVisible, setSelectorVisible] = useState(false);\n\n // 同步外部传入的 layerType prop\n useEffect(() => {\n setCurrentLayerType(layerTypeProp as LayerType);\n }, [layerTypeProp]);\n\n // 图层引用\n const baseLayerRef = useRef<L.TileLayer | null>(null);\n const annotationLayerRef = useRef<L.TileLayer | null>(null);\n const overlayLayerRef = useRef<L.TileLayer | null>(null);\n\n // 图层类型切换\n const handleLayerChange = useCallback(\n (type: LayerType) => {\n setCurrentLayerType(type);\n setSelectorVisible(false);\n onLayerTypeChange?.(type);\n },\n [onLayerTypeChange]\n );\n\n // 深色模式:仅对矢量图应用滤镜\n const isDarkTheme = theme === 'dark' && currentLayerType === LAYER_TYPES.VECTOR;\n\n // 根据主题切换地图容器的 data-theme 属性\n useEffect(() => {\n if (!map) return;\n\n const mapContainer = map.getContainer();\n\n if (isDarkTheme) {\n ensureDarkFilterInjected();\n mapContainer.setAttribute('data-theme', 'dark');\n } else {\n mapContainer.removeAttribute('data-theme');\n }\n }, [map, isDarkTheme]);\n\n // ============================================================================\n // 图层管理(学习 react-leaflet 的设计模式:分离创建和更新)\n // ============================================================================\n\n // ========== 1. 图层创建(只在 map 变化时执行,只执行一次) ==========\n // 设计思想:图层实例一旦创建,就应该尽可能复用,避免频繁创建/销毁\n // 依赖项:只依赖 [map, showAnnotation, attribution],确保只在地图实例初始化时执行一次\n useEffect(() => {\n if (!map) return;\n\n // 创建底图图层(初始为空 URL,URL 由后续的 useEffect 更新)\n const baseLayer = L.tileLayer('', {\n subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],\n maxZoom: 18,\n minZoom: 0,\n attribution: attribution === null ? undefined : attribution,\n }).addTo(map);\n baseLayerRef.current = baseLayer;\n\n // 创建标注图层\n if (showAnnotation) {\n const annotationLayer = L.tileLayer('', {\n subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],\n maxZoom: 18,\n minZoom: 0,\n attribution: attribution === null ? undefined : attribution,\n }).addTo(map);\n annotationLayerRef.current = annotationLayer;\n }\n\n // 清理函数:只在组件卸载时执行\n return () => {\n if (baseLayerRef.current) {\n baseLayerRef.current.remove();\n baseLayerRef.current = null;\n }\n if (annotationLayerRef.current) {\n annotationLayerRef.current.remove();\n annotationLayerRef.current = null;\n }\n if (overlayLayerRef.current) {\n overlayLayerRef.current.remove();\n overlayLayerRef.current = null;\n }\n };\n }, [map, showAnnotation, attribution]); // 依赖 map, showAnnotation, attribution\n\n // ========== 2. 底图 URL 更新(独立于创建逻辑) ==========\n // 设计思想:URL 变化时,使用 layer.setUrl() 更新,而不是删除重建图层\n // 优势:避免触发大量瓦片请求,提升性能\n // 依赖项:只依赖 URL 相关的 props [tileUrl, currentLayerType, apiKey]\n useEffect(() => {\n if (!baseLayerRef.current) return;\n\n const useCustomUrl = !!tileUrl;\n const layerConfig = LAYER_URLS[currentLayerType] || LAYER_URLS[LAYER_TYPES.VECTOR];\n const url = useCustomUrl && tileUrl ? tileUrl : layerConfig.base.replace('{key}', apiKey || '');\n\n // 使用 setUrl() 更新图层 URL,Leaflet 会自动处理瓦片过渡\n baseLayerRef.current.setUrl(url);\n }, [tileUrl, currentLayerType, apiKey]); // 只依赖 URL 相关的 props\n\n // ========== 3. 标注 URL 更新 ==========\n // 设计思想:与底图 URL 更新相同,使用 setUrl() 而非重建\n // 依赖项:[annotationUrl, tileUrl, currentLayerType, apiKey, showAnnotation]\n useEffect(() => {\n if (!annotationLayerRef.current || !showAnnotation) return;\n\n const useCustomUrl = !!tileUrl;\n const layerConfig = LAYER_URLS[currentLayerType] || LAYER_URLS[LAYER_TYPES.VECTOR];\n const url =\n useCustomUrl && annotationUrl\n ? annotationUrl\n : layerConfig.annotation.replace('{key}', apiKey || '');\n\n if (url) {\n annotationLayerRef.current.setUrl(url);\n } else if (annotationLayerRef.current) {\n // 如果没有标注 URL,移除标注图层\n annotationLayerRef.current.remove();\n annotationLayerRef.current = null;\n }\n }, [annotationUrl, tileUrl, currentLayerType, apiKey, showAnnotation]);\n\n // ========== 4. 叠加图层处理 ==========\n // 设计思想:叠加图层(overlay)独立管理,因为它的 URL 模式不同\n // 依赖项:[map, overlayUrl]\n useEffect(() => {\n if (!map) return;\n\n // 清理旧的叠加图层\n if (overlayLayerRef.current) {\n overlayLayerRef.current.remove();\n overlayLayerRef.current = null;\n }\n\n // 创建新的叠加图层\n if (overlayUrl) {\n const overlayLayer = L.tileLayer(`${overlayUrl}/{z}/{x}/{y}.webp`, {\n subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],\n maxZoom: 18,\n minZoom: 0,\n }).addTo(map);\n overlayLayerRef.current = overlayLayer;\n }\n }, [map, overlayUrl]);\n\n // 图层选择器组件\n const LayerSelector = showLayerSelector && map && (\n <div className=\"tianditu-layer-selector\" data-theme={theme}>\n <div\n className=\"tianditu-layer-selector-btn\"\n onClick={() => setSelectorVisible(!selectorVisible)}\n >\n <div className=\"tianditu-layer-selector-preview\" data-type={currentLayerType} />\n <span className=\"tianditu-layer-selector-label\">{LAYER_LABELS[currentLayerType]}</span>\n </div>\n {selectorVisible && (\n <div className=\"tianditu-layer-selector-dropdown\">\n {([LAYER_TYPES.VECTOR, LAYER_TYPES.SATELLITE, LAYER_TYPES.TERRAIN] as LayerType[]).map(\n type => (\n <div\n key={type}\n className={`tianditu-layer-selector-item ${currentLayerType === type ? 'active' : ''}`}\n onClick={() => handleLayerChange(type)}\n >\n <div className=\"tianditu-layer-selector-preview\" data-type={type} />\n <span className=\"tianditu-layer-selector-label\">{LAYER_LABELS[type]}</span>\n </div>\n )\n )}\n </div>\n )}\n </div>\n );\n\n // 如果地图未初始化,返回 null\n if (!map) return null;\n\n return <>{LayerSelector && createPortal(LayerSelector, map.getContainer())}</>;\n});\n\nTianDiTuLayer.displayName = 'TianDiTuLayer';\n\nexport default TianDiTuLayer;\n\n// 重新导出深色滤镜工具函数供其他组件使用\nexport { ensureDarkFilterInjected } from '../../utils/darkThemeFilter';\n","/**\n * 双向标尺组件\n * @description 在地图上同时显示水平和垂直两个标尺,覆盖整个地图窗口\n * @since 2.0.0 已移除 react-leaflet 依赖\n * @since 2.0.0 缩放控件已独立为 ZoomControl 组件\n */\n\nimport { useEffect, useRef, type MutableRefObject } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport type { DualScaleControlProps, DualScaleControlConfig } from '../../types';\nimport { LAYER_TYPES } from '../TianDiTuLayer';\n\n// 将十六进制颜色转换为 rgba 字符串\nconst hexToRgba = (hex: string): string => {\n // 处理 #rrggbb 格式\n if (hex.length === 7) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, 1)`;\n }\n // 处理 #rrggbbaa 格式(带透明度)\n if (hex.length === 9) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n const a = parseInt(hex.slice(7, 9), 16) / 255;\n return `rgba(${r}, ${g}, ${b}, ${a.toFixed(2)})`;\n }\n // 如果是 rgba 或 rgb 格式,直接返回\n return hex;\n};\n\n/**\n * 双向标尺组件\n */\nconst DualScaleControl = ({\n config: configProp,\n theme: themeProp,\n layerType,\n scaleColor: scaleColorProp,\n controlBg: controlBgProp,\n controlText: controlTextProp,\n}: DualScaleControlProps): null => {\n // 从 ConfigProvider 获取配置\n const configContext = useConfig();\n\n // 获取 map 实例\n const map = useMap();\n\n // 解析配置:优先使用 props,其次使用 ConfigProvider\n const getConfig = (config: DualScaleControlConfig | undefined): DualScaleControlConfig => {\n return {\n metric: config?.metric ?? true,\n imperial: config?.imperial ?? false,\n scaleColor: config?.scaleColor,\n controlBg: config?.controlBg,\n controlText: config?.controlText,\n };\n };\n\n // 判断是否显示\n // - 如果 props 传了 config,则按 props 显示(包括空对象 {} 也会显示默认配置)\n // - 如果 props 没传 config,则看 ConfigProvider 的 dualScaleControl\n // - 如果 dualScaleControl 为 false,不显示\n // - 如果 dualScaleControl 为 undefined(没配置),显示默认\n // - 如果 dualScaleControl 为对象,使用该配置\n const shouldShow = () => {\n if (configProp !== undefined) {\n return true; // props 传了配置就显示\n }\n const contextConfig = configContext.dualScaleControl;\n return contextConfig !== false; // undefined 或对象都显示\n };\n\n // 如果不显示,返回 null\n if (!shouldShow()) {\n return null;\n }\n\n // 获取最终配置\n const finalConfig =\n configProp !== undefined\n ? configProp\n : configContext.dualScaleControl === false\n ? undefined\n : configContext.dualScaleControl;\n\n const { metric, imperial } = getConfig(finalConfig);\n\n // 主题:优先使用 props,其次使用 ConfigProvider\n const theme = themeProp || configContext.theme || 'light';\n\n // 提前初始化 refs,避免条件调用\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const containerRef: MutableRefObject<HTMLElement | null> = useRef(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scaleRef: MutableRefObject<HTMLElement | null> = useRef(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const textRef: MutableRefObject<HTMLElement | null> = useRef(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // null 检查\n if (!map) return;\n\n // 使用局部变量避免闭包中的 null 检查问题\n const mapInstance = map;\n let animationFrameId: number | null = null;\n let isCleanup = false;\n\n // 获取地图容器\n const mapContainer = mapInstance.getContainer();\n\n // 清理所有已存在的旧 container(防止重复)\n const existingContainers = mapContainer.querySelectorAll('.leaflet-control-dual-scale');\n existingContainers.forEach(el => {\n el.remove();\n });\n\n // 创建覆盖层容器,添加主题类名\n const container = L.DomUtil.create(\n 'div',\n `leaflet-control-dual-scale${theme === 'dark' ? ' dark' : ''}`\n );\n containerRef.current = container;\n\n // 创建 scale 容器(覆盖整个地图窗口)\n const scale = L.DomUtil.create('div', 'scale', container);\n scaleRef.current = scale;\n\n // 创建文本显示\n const textEl = L.DomUtil.create('div', 'scale-text', container);\n textRef.current = textEl;\n\n // 直接设置样式确保生效(避免 CSS 缓存问题)\n // 根据图层类型和主题组合确定颜色\n // satellite 在 light 主题下需要深色(卫星影像较暗)\n // terrain 在 dark 主题下需要浅色(地形图层较亮)\n // 优先级:props > config > 自动计算\n const getControlColors = () => {\n // 如果用户配置了颜色,直接使用\n if (scaleColorProp || controlBgProp || controlTextProp) {\n return {\n bg:\n controlBgProp ||\n (theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)'),\n text: controlTextProp || (theme === 'dark' ? '#fff' : '#333'),\n scaleColor: scaleColorProp\n ? hexToRgba(scaleColorProp)\n : theme === 'dark'\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(51, 51, 51, 0.7)',\n };\n }\n\n // 如果 config 中配置了颜色,使用 config\n if (finalConfig?.scaleColor || finalConfig?.controlBg || finalConfig?.controlText) {\n return {\n bg:\n finalConfig.controlBg ||\n (theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)'),\n text: finalConfig.controlText || (theme === 'dark' ? '#fff' : '#333'),\n scaleColor: finalConfig.scaleColor\n ? hexToRgba(finalConfig.scaleColor)\n : theme === 'dark'\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(51, 51, 51, 0.7)',\n };\n }\n\n // 否则根据图层类型和主题自动计算\n const isSatelliteLight = layerType === LAYER_TYPES.SATELLITE && theme === 'light';\n const isTerrainDark = layerType === LAYER_TYPES.TERRAIN && theme === 'dark';\n\n // 需要深色控件的情况:dark 主题 或 satellite + light(但 terrain + dark 除外)\n const needDarkControl = (theme === 'dark' || isSatelliteLight) && !isTerrainDark;\n\n if (needDarkControl) {\n return {\n bg: 'rgba(0, 0, 0, 0.7)',\n text: '#fff',\n scaleColor: 'rgba(255, 255, 255, 0.7)',\n };\n } else {\n return {\n bg: 'rgba(255, 255, 255, 0.85)',\n text: '#333',\n scaleColor: 'rgba(51, 51, 51, 0.7)',\n };\n }\n };\n\n const { bg: controlBg, text: controlText, scaleColor } = getControlColors();\n textEl.style.backgroundColor = controlBg;\n textEl.style.color = controlText;\n // 直接设置 scale 元素的颜色变量\n scale.style.setProperty('--scale-color', scaleColor);\n\n // 添加到地图容器\n mapContainer.appendChild(container);\n\n // 获取合适的刻度距离值(1, 2, 5 的倍数)\n const getRoundNum = (distance: number): number => {\n if (distance <= 0 || !isFinite(distance)) return 1;\n\n const exponent = Math.floor(Math.log(distance) / Math.LN10);\n const fraction = distance / Math.pow(10, exponent);\n let roundedFraction: number;\n\n if (fraction < 1.5) {\n roundedFraction = 1;\n } else if (fraction < 3.5) {\n roundedFraction = 2;\n } else if (fraction < 7.5) {\n roundedFraction = 5;\n } else {\n roundedFraction = 10;\n }\n\n return roundedFraction * Math.pow(10, exponent);\n };\n\n // 获取所有候选的 Nice Meters\n const getCandidateMeters = (targetMeters: number): number[] => {\n if (targetMeters <= 0 || !isFinite(targetMeters)) return [1];\n\n const exponent = Math.floor(Math.log(targetMeters) / Math.LN10);\n const base = Math.pow(10, exponent);\n\n // 返回 1, 2, 5 倍数的候选值\n return [\n base * 0.5, // 小一级的 5\n base * 1, // 当前级的 1\n base * 2, // 当前级的 2\n base * 5, // 当前级的 5\n base * 10, // 大一级的 1\n ].filter(m => m > 0);\n };\n\n // 更新函数\n const update = (): void => {\n // 检查是否已清理或销毁\n if (isCleanup || isDestroyed) return;\n\n // 检查地图是否已完全初始化\n const mapAny = mapInstance as L.Map & { _loaded?: boolean; _mapPane?: HTMLElement };\n if (!mapAny._loaded || !mapAny._mapPane) return;\n\n // 检查地图容器是否存在(防止在销毁后调用)\n try {\n const mapContainer = mapInstance.getContainer();\n if (!mapContainer || !document.contains(mapContainer)) return;\n } catch {\n // 如果获取容器失败,说明地图可能已被销毁\n return;\n }\n\n const mapSize = mapInstance.getSize();\n const bounds = mapInstance.getBounds();\n\n // 计算地图可视范围的实际距离\n const west = bounds.getWest();\n const east = bounds.getEast();\n const centerLat = bounds.getCenter().lat;\n const point1 = L.latLng(centerLat, west);\n const point2 = L.latLng(centerLat, east);\n const maxMeters = mapInstance.distance(point1, point2);\n\n // 计算每像素对应的米数\n const metersPerPixel = maxMeters / mapSize.x;\n\n // 计算合适的刻度间隔(像素)\n // 目标:每个刻度间隔在 40-80 像素之间\n const targetPixels = 60;\n const targetMeters = metersPerPixel * targetPixels;\n\n // 获取候选值并选择最接近目标的\n const candidates = getCandidateMeters(targetMeters);\n let bestMeters = candidates[0];\n let bestDiff = Infinity;\n\n candidates.forEach(meters => {\n const pixels = meters / metersPerPixel;\n const diff = Math.abs(pixels - targetPixels);\n if (diff < bestDiff) {\n bestDiff = diff;\n bestMeters = meters;\n }\n });\n\n const tickInterval = Math.max(30, Math.min(100, Math.round(bestMeters / metersPerPixel)));\n\n // 设置 CSS 变量到 scale 和 textEl\n if (scaleRef.current) {\n scaleRef.current.style.setProperty('--tick-interval', tickInterval + 'px');\n }\n if (textRef.current) {\n textRef.current.style.setProperty('--tick-interval', tickInterval + 'px');\n }\n\n // 计算显示距离\n const displayDistance = getRoundNum(maxMeters * 0.1); // 显示约 1/10 地图宽度的距离\n\n let displayText = '';\n if (metric) {\n displayText = getMetricText(displayDistance);\n }\n if (imperial) {\n if (displayText) displayText += ' / ';\n displayText += getImperialText(displayDistance);\n }\n if (textRef.current) {\n textRef.current.textContent = displayText;\n }\n };\n\n const getMetricText = (distance: number): string => {\n if (distance >= 1000) {\n return (distance / 1000).toFixed(1) + ' km';\n }\n if (distance < 1) {\n return (distance * 100).toFixed(0) + ' cm';\n }\n if (distance < 10) {\n return distance.toFixed(1) + ' m';\n }\n return distance.toFixed(0) + ' m';\n };\n\n const getImperialText = (distance: number): string => {\n const feet = distance * 3.28084;\n if (feet >= 5280) {\n return (feet / 5280).toFixed(1) + ' mi';\n }\n if (feet < 1) {\n return (feet * 12).toFixed(0) + ' in';\n }\n return feet.toFixed(0) + ' ft';\n };\n\n // 标记是否已销毁\n let isDestroyed = false;\n\n // 包装 update 函数,在调用前检查是否已销毁\n const safeUpdate = () => {\n if (!isDestroyed && !isCleanup) {\n update();\n }\n };\n\n // 初始化 - 使用 RAF 确保地图已完全渲染\n animationFrameId = requestAnimationFrame(() => {\n if (!isDestroyed && !isCleanup) {\n const mapAny = mapInstance as L.Map & { _loaded?: boolean; _mapPane?: HTMLElement };\n if (mapAny._loaded && mapAny._mapPane) {\n update();\n }\n }\n });\n\n // 监听地图事件\n mapInstance.on('moveend', safeUpdate);\n mapInstance.on('zoomend', safeUpdate);\n mapInstance.on('resize', safeUpdate);\n\n // 清理函数\n return () => {\n isCleanup = true;\n isDestroyed = true;\n if (animationFrameId) {\n cancelAnimationFrame(animationFrameId);\n }\n mapInstance.off('moveend', safeUpdate);\n mapInstance.off('zoomend', safeUpdate);\n mapInstance.off('resize', safeUpdate);\n if (container && mapContainer.contains(container)) {\n mapContainer.removeChild(container);\n }\n };\n }, [\n map,\n metric,\n imperial,\n theme,\n layerType,\n scaleColorProp,\n controlBgProp,\n controlTextProp,\n finalConfig,\n ]);\n\n return null;\n};\n\nexport default DualScaleControl;\n","/**\n * 地图尺寸处理器组件\n * @description 解决地图容器尺寸变化后(如抽屉/对话框打开),地图不自动刷新的问题\n * @module components/MapSizeHandler\n * @since 2.0.0 已移除 react-leaflet 依赖\n *\n * ## 解决的问题\n *\n * 当地图容器的 DOM 尺寸发生变化时,Leaflet 地图**不会自动重新计算和渲染**,\n * 导致地图显示异常(如:瓦片缺失、只显示一部分、标尺位置错误等)。\n *\n * 常见触发场景:\n * - 抽屉/侧边栏打开或关闭\n * - 对话框弹出\n * - 窗口大小调整\n * - Tab 切换导致容器从隐藏变为显示\n * - 父容器动态改变尺寸\n *\n * ## 核心原理\n *\n * 调用 Leaflet 的 `map.invalidateSize()` 方法,通知地图重新计算容器尺寸并刷新视图。\n *\n * ## 配置参数\n *\n * | 参数 | 说明 | 类型 | 默认值 |\n * |------|------|------|--------|\n * | enabled | 是否启用尺寸处理 | boolean | true |\n * | delay | 每次刷新的间隔时间(毫秒) | number | 100 |\n * | retries | 调用 invalidateSize 的次数 | number | 3 |\n *\n * ## 工作流程\n *\n * 组件挂载后会多次调用 invalidateSize:\n * - 延迟 100ms → invalidateSize()\n * - 延迟 200ms → invalidateSize()\n * - 延迟 300ms → invalidateSize()\n * - (共重试 retries 次,确保容器完全渲染)\n *\n * **为什么需要多次重试?**\n * 因为某些 CSS 动画或布局变化需要时间完成,单次调用可能无法捕获最终尺寸。\n *\n * @example\n * // 方式1:通过 MapContainer 的 mapSizeHandler 属性(推荐)\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * mapSizeHandler // 启用默认配置\n * />\n *\n * // 方式2:自定义配置\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * mapSizeHandler={{ delay: 200, retries: 5 }}\n * />\n *\n * // 方式3:禁用\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * mapSizeHandler={false}\n * />\n *\n * // 方式4:在 ConfigProvider 中配置(用于 MapProvider + MapContent 模式)\n * <ConfigProvider mapSizeHandler={{ delay: 200, retries: 5 }}>\n * <MapProvider center={[30, 120]} zoom={10}>\n * <MapContent />\n * </MapProvider>\n * </ConfigProvider>\n */\n\nimport { useEffect, useRef } from 'react';\nimport { useMap } from '../../context/MapContext';\nimport type { MapSizeHandlerConfig } from '../../types';\n\n/**\n * 地图尺寸处理器组件\n * @description 通过多次调用 invalidateSize 确保地图在容器尺寸变化后正确渲染\n *\n * @example\n * // 在 MapContent 中自动使用,通过 ConfigProvider 配置\n * <ConfigProvider mapSizeHandler>\n * <MapProvider center={[30, 120]} zoom={10}>\n * <MapContent />\n * </MapProvider>\n * </ConfigProvider>\n *\n * // 自定义配置\n * <ConfigProvider mapSizeHandler={{ delay: 200, retries: 5 }}>\n * ...\n * </ConfigProvider>\n */\nconst MapSizeHandler = ({\n enabled = true,\n delay = 100,\n retries = 3,\n}: MapSizeHandlerConfig = {}): null => {\n const map = useMap();\n const initialized = useRef(false);\n\n useEffect(() => {\n if (!enabled || !map || initialized.current) return;\n initialized.current = true;\n\n // 多次调用 invalidateSize 以确保容器已完全渲染\n const timers = Array.from({ length: retries }, (_, i) =>\n setTimeout(() => map!.invalidateSize(), delay * (i + 1))\n );\n\n return () => timers.forEach(clearTimeout);\n }, [map, enabled, delay, retries]);\n\n return null;\n};\n\nexport default MapSizeHandler;\n","/**\n * 缩放控件组件\n * @description 提供放大、缩小按钮和缩放级别显示\n * @module components/ZoomControl\n * @since 2.0.0\n */\n\nimport { useEffect, useMemo, useRef, type MutableRefObject } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport type { ZoomControlPosition } from '../../types';\n\n/**\n * 缩放控件配置\n */\nexport interface ZoomControlConfig {\n /** 控件位置 */\n position?: ZoomControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n}\n\n/**\n * 缩放控件属性\n */\nexport interface ZoomControlProps {\n /** 控件位置,默认 'bottomleft' */\n position?: ZoomControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n /** 主题模式 */\n theme?: 'light' | 'dark';\n}\n\n/**\n * ZoomControl 缩放控件组件\n *\n * @description\n * 提供地图缩放控制功能:\n * - 放大/缩小按钮\n * - 当前缩放级别显示\n * - 支持四个位置:topleft、topright、bottomleft、bottomright\n * - 自动适配主题(light/dark)\n *\n * @example\n * ```tsx\n * import { ZoomControl } from 'agri-map-components';\n *\n * // 基础用法\n * <ZoomControl />\n *\n * // 自定义位置\n * <ZoomControl position=\"topright\" />\n *\n * // 自定义颜色\n * <ZoomControl controlBg=\"rgba(0, 0, 0, 0.8)\" controlText=\"#fff\" />\n * ```\n */\nconst ZoomControl: React.FC<ZoomControlProps> = ({\n position = 'bottomleft',\n controlBg: controlBgProp,\n controlText: controlTextProp,\n theme: themeProp,\n}): null => {\n const map = useMap();\n const configContext = useConfig();\n const zoomControlRef: MutableRefObject<HTMLElement | null> = useRef(null);\n const zoomLevelRef: MutableRefObject<HTMLElement | null> = useRef(null);\n\n // 主题:优先使用 props,其次使用 ConfigProvider\n const theme = themeProp || configContext.theme || 'light';\n\n // 获取控件颜色\n const controlColors = useMemo(() => {\n if (controlBgProp || controlTextProp) {\n return {\n bg:\n controlBgProp || (theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)'),\n text: controlTextProp || (theme === 'dark' ? '#fff' : '#333'),\n };\n }\n return {\n bg: theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)',\n text: theme === 'dark' ? '#fff' : '#333',\n };\n }, [theme, controlBgProp, controlTextProp]);\n\n useEffect(() => {\n // 确保 map 实例已准备好\n if (!map) return;\n\n const mapContainer = map.getContainer();\n const { bg: controlBg, text: controlText } = controlColors;\n\n // 清理已存在的旧控件(防止重复)\n const existingControls = mapContainer.querySelectorAll('.agri-zoom-control');\n existingControls.forEach(el => el.remove());\n\n // 创建缩放控件容器\n const zoomControl = L.DomUtil.create(\n 'div',\n `agri-zoom-control${theme === 'dark' ? ' dark' : ''}`\n );\n zoomControlRef.current = zoomControl;\n\n // 检测图层选择器是否可见(在右下角)\n const layerSelector = mapContainer.querySelector('.tianditu-layer-selector');\n const hasLayerSelector = layerSelector && layerSelector.checkVisibility();\n\n // 根据位置设置样式\n // 注意:左侧位置(topleft、bottomleft)需要为垂直标尺留出空间(30px)\n // bottomright 位置如果有图层选择器,需要向上移动避免遮挡(100px)\n const positionStyles: Record<ZoomControlPosition, React.CSSProperties> = {\n topleft: {\n top: '10px',\n left: '30px',\n bottom: 'auto',\n right: 'auto',\n },\n topright: {\n top: '10px',\n right: '10px',\n bottom: 'auto',\n left: 'auto',\n },\n bottomleft: {\n bottom: '50px', // 为底部水平标尺留出空间\n left: '30px', // 为左侧垂直标尺留出空间\n top: 'auto',\n right: 'auto',\n },\n bottomright: {\n bottom: hasLayerSelector ? '100px' : '10px',\n right: '10px',\n top: 'auto',\n left: 'auto',\n },\n };\n\n Object.assign(zoomControl.style, positionStyles[position]);\n\n // 放大按钮\n const zoomIn = L.DomUtil.create('button', 'zoom-btn zoom-in', zoomControl);\n zoomIn.innerHTML = '+';\n zoomIn.title = '放大';\n zoomIn.style.backgroundColor = controlBg;\n zoomIn.style.color = controlText;\n\n // 缩放级别显示\n const zoomLevel = L.DomUtil.create('div', 'zoom-level', zoomControl);\n zoomLevelRef.current = zoomLevel;\n zoomLevel.style.backgroundColor = controlBg;\n zoomLevel.style.color = controlText;\n\n // 缩小按钮\n const zoomOut = L.DomUtil.create('button', 'zoom-btn zoom-out', zoomControl);\n zoomOut.innerHTML = '−';\n zoomOut.title = '缩小';\n zoomOut.style.backgroundColor = controlBg;\n zoomOut.style.color = controlText;\n\n // 绑定事件\n L.DomEvent.on(zoomIn, 'click', e => {\n L.DomEvent.stopPropagation(e);\n L.DomEvent.preventDefault(e);\n map.zoomIn();\n });\n\n L.DomEvent.on(zoomOut, 'click', e => {\n L.DomEvent.stopPropagation(e);\n L.DomEvent.preventDefault(e);\n map.zoomOut();\n });\n\n // 更新缩放级别显示\n const updateZoomLevel = (): void => {\n if (zoomLevelRef.current) {\n zoomLevelRef.current.textContent = String(map.getZoom());\n }\n };\n updateZoomLevel();\n map.on('zoomend', updateZoomLevel);\n\n // 添加到地图容器\n mapContainer.appendChild(zoomControl);\n\n // 监听图层选择器的可见性变化,动态调整位置\n let layerSelectorObserver: MutationObserver | null = null;\n if (layerSelector) {\n layerSelectorObserver = new MutationObserver(() => {\n const isVisible = layerSelector.checkVisibility();\n if (zoomControlRef.current && position === 'bottomright') {\n zoomControlRef.current.style.bottom = isVisible ? '100px' : '10px';\n }\n });\n\n layerSelectorObserver.observe(layerSelector, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n subtree: true,\n });\n }\n\n // 清理函数\n return () => {\n map.off('zoomend', updateZoomLevel);\n if (layerSelectorObserver) {\n layerSelectorObserver.disconnect();\n }\n if (zoomControl && mapContainer.contains(zoomControl)) {\n mapContainer.removeChild(zoomControl);\n }\n };\n }, [map, position, theme, controlColors]);\n\n return null;\n};\n\nexport default ZoomControl;\n","/**\n * 全屏控件组件\n * @description 提供地图全屏切换功能\n * @module components/FullscreenControl\n * @since 2.1.0\n */\n\nimport { useEffect, useRef, type MutableRefObject } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport type { FullscreenControlPosition } from '../../types';\n\n// 空函数,用于清理事件监听器\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\n/**\n * 全屏控件属性\n */\nexport interface FullscreenControlProps {\n /** 控件位置,默认 'topleft' */\n position?: FullscreenControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n /** 主题模式 */\n theme?: 'light' | 'dark';\n}\n\n/**\n * FullscreenControl 全屏控件组件\n *\n * @description\n * 提供地图全屏切换功能:\n * - 点击按钮进入/退出全屏\n * - 支持四个位置:topleft、topright、bottomleft、bottomright\n * - 自动适配主题(light/dark)\n * - 全屏状态自动更新按钮图标\n *\n * @example\n * ```tsx\n * import { FullscreenControl } from 'agri-map-components';\n *\n * // 基础用法\n * <FullscreenControl />\n *\n * // 自定义位置\n * <FullscreenControl position=\"topright\" />\n *\n * // 自定义颜色\n * <FullscreenControl controlBg=\"rgba(0, 0, 0, 0.8)\" controlText=\"#fff\" />\n * ```\n */\nconst FullscreenControl: React.FC<FullscreenControlProps> = ({\n position = 'topleft',\n controlBg: controlBgProp,\n controlText: controlTextProp,\n theme: themeProp,\n}): null => {\n const map = useMap();\n const configContext = useConfig();\n const fullscreenControlRef: MutableRefObject<HTMLElement | null> = useRef(null);\n\n // 主题:优先使用 props,其次使用 ConfigProvider\n const theme = themeProp || configContext.theme || 'light';\n\n // 计算控件颜色\n const controlBg =\n controlBgProp || (theme === 'dark' ? 'rgba(0, 0, 0, 0.7)' : 'rgba(255, 255, 255, 0.85)');\n const controlText = controlTextProp || (theme === 'dark' ? '#fff' : '#333');\n\n useEffect(() => {\n // 确保 map 实例已准备好\n if (!map) return;\n\n const mapContainer = map.getContainer();\n\n // 清理已存在的旧控件(防止重复)\n const existingControls = mapContainer.querySelectorAll('.agri-fullscreen-control');\n existingControls.forEach(el => el.remove());\n\n // 创建全屏控件容器\n const fullscreenControl = L.DomUtil.create('div', 'agri-fullscreen-control');\n fullscreenControlRef.current = fullscreenControl;\n\n // 检测图层选择器是否可见(在右下角)\n const layerSelector = mapContainer.querySelector('.tianditu-layer-selector');\n const hasLayerSelector = layerSelector && layerSelector.checkVisibility();\n\n // 根据位置设置样式\n const positionStyles: Record<FullscreenControlPosition, React.CSSProperties> = {\n topleft: {\n position: 'absolute',\n top: '10px',\n left: '10px',\n bottom: 'auto',\n right: 'auto',\n zIndex: 1000,\n },\n topright: {\n position: 'absolute',\n top: '10px',\n right: '10px',\n bottom: 'auto',\n left: 'auto',\n zIndex: 1000,\n },\n bottomleft: {\n position: 'absolute',\n bottom: '10px',\n left: '10px',\n top: 'auto',\n right: 'auto',\n zIndex: 1000,\n },\n bottomright: {\n position: 'absolute',\n bottom: hasLayerSelector ? '100px' : '10px',\n right: '10px',\n top: 'auto',\n left: 'auto',\n zIndex: 1000,\n },\n };\n\n Object.assign(fullscreenControl.style, positionStyles[position]);\n\n // 设置控件基础样式\n Object.assign(fullscreenControl.style, {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n backgroundColor: controlBg,\n borderRadius: '4px',\n cursor: 'pointer',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.3)',\n transition: 'background-color 0.2s',\n });\n\n // 鼠标悬停效果\n fullscreenControl.addEventListener('mouseenter', () => {\n fullscreenControl.style.backgroundColor =\n theme === 'dark' ? 'rgba(0, 0, 0, 0.9)' : 'rgba(255, 255, 255, 0.95)';\n });\n\n fullscreenControl.addEventListener('mouseleave', () => {\n fullscreenControl.style.backgroundColor = controlBg;\n });\n\n // 创建图标容器\n const iconContainer = L.DomUtil.create('div', 'agri-fullscreen-icon', fullscreenControl);\n Object.assign(iconContainer.style, {\n width: '20px',\n height: '20px',\n color: controlText,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n });\n\n // 渲染图标\n const renderIcon = (isFullscreen: boolean) => {\n iconContainer.innerHTML = isFullscreen\n ? `<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"${controlText}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m13 0h3a2 2 0 0 1 2 2v3m0 13v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"/></svg>`\n : `<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"${controlText}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>`;\n };\n\n // 初始渲染图标\n const isCurrentlyFullscreen = !!document.fullscreenElement;\n renderIcon(isCurrentlyFullscreen);\n\n // 监听全屏状态变化\n const handleFullscreenChange = () => {\n const isFullscreen = !!document.fullscreenElement;\n renderIcon(isFullscreen);\n };\n\n document.addEventListener('fullscreenchange', handleFullscreenChange);\n\n // 点击事件\n const handleClick = (e: Event) => {\n L.DomEvent.stopPropagation(e);\n L.DomEvent.preventDefault(e);\n\n if (!document.fullscreenElement) {\n // 进入全屏\n mapContainer.requestFullscreen?.().catch(err => {\n console.error('全屏模式启用失败:', err);\n });\n } else {\n // 退出全屏\n document.exitFullscreen?.().catch(err => {\n console.error('全屏模式退出失败:', err);\n });\n }\n };\n\n fullscreenControl.addEventListener('click', handleClick);\n\n // 添加到地图容器\n mapContainer.appendChild(fullscreenControl);\n\n // 监听图层选择器的可见性变化,动态调整位置\n let layerSelectorObserver: MutationObserver | null = null;\n if (layerSelector) {\n layerSelectorObserver = new MutationObserver(() => {\n const isVisible = layerSelector.checkVisibility();\n if (fullscreenControlRef.current && position === 'bottomright') {\n fullscreenControlRef.current.style.bottom = isVisible ? '100px' : '10px';\n }\n });\n\n layerSelectorObserver.observe(layerSelector, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n subtree: true,\n });\n }\n\n // 清理函数\n return () => {\n document.removeEventListener('fullscreenchange', handleFullscreenChange);\n fullscreenControl.removeEventListener('click', handleClick);\n fullscreenControl.removeEventListener('mouseenter', noop);\n fullscreenControl.removeEventListener('mouseleave', noop);\n if (layerSelectorObserver) {\n layerSelectorObserver.disconnect();\n }\n if (fullscreenControl && mapContainer.contains(fullscreenControl)) {\n mapContainer.removeChild(fullscreenControl);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, position, theme, controlBgProp, controlTextProp]);\n\n return null;\n};\n\nexport default FullscreenControl;\n","/**\n * @fileoverview Loading 加载组件\n * @description 显示加载状态的组件,支持多种加载图标和自定义配置\n * @module components/Loading\n */\n\nimport { useMemo } from 'react';\nimport type { LoadingProps, LoadingMaskConfig } from '../../types';\nimport { generateLoadingSpinnerSvg, generateLoadingDotsSvg } from '../../utils/pulseIcon';\nimport {\n LOADING_DEFAULT_MASK_BACKGROUND,\n LOADING_DEFAULT_MASK_ZINDEX,\n} from '../../constants/styles';\n\n/**\n * Loading 加载组件\n *\n * @description\n * 显示加载状态,支持以下功能:\n * - 多种加载图标:loading-spinner(旋转圆圈)、loading-dots(跳动圆点)\n * - 自定义尺寸:small、default、large 或数字\n * - 描述文案:可选的加载提示文字\n * - 遮罩配置:支持自定义背景色、层级等\n *\n * @example\n * ```tsx\n * import { Loading } from 'agri-map-components';\n *\n * // 基础用法\n * <Loading />\n *\n * // 自定义图标和描述\n * <Loading icon=\"loading-dots\" description=\"加载中...\" />\n *\n * // 自定义尺寸\n * <Loading size=\"large\" />\n * <Loading size={64} />\n *\n * // 带遮罩\n * <Loading mask />\n * <Loading mask={{ background: 'rgba(0, 0, 0, 0.5)', zIndex: 999 }} />\n *\n * // 在 Marker 中使用\n * <Marker loading={true} />\n * ```\n */\nconst Loading: React.FC<LoadingProps> = ({\n icon = 'loading-spinner',\n description,\n size = 'default',\n mask,\n className,\n style,\n}) => {\n // 计算图标尺寸\n const iconSize = useMemo(() => {\n const sizeMap: Record<string, number> = {\n small: 24,\n default: 32,\n large: 48,\n };\n\n if (typeof size === 'number') {\n return size;\n }\n return sizeMap[size] || sizeMap.default;\n }, [size]);\n\n // 解析遮罩配置\n const maskConfig = useMemo((): LoadingMaskConfig => {\n // 明确禁用遮罩\n if (mask === false || mask === null) {\n return { enabled: false };\n }\n // mask 为 true 或未设置时,默认启用遮罩\n if (mask === true || mask === undefined) {\n return { enabled: true };\n }\n // 传入对象时,除非明确设置 enabled: false,否则启用\n return {\n enabled: mask.enabled ?? true,\n background: mask.background,\n zIndex: mask.zIndex,\n };\n }, [mask]);\n\n // 生成 SVG\n const svgContent = useMemo(() => {\n switch (icon) {\n case 'loading-dots':\n return generateLoadingDotsSvg(iconSize, iconSize, true);\n case 'loading-spinner':\n default:\n return generateLoadingSpinnerSvg(iconSize, iconSize, true);\n }\n }, [icon, iconSize]);\n\n const content = (\n <div\n className={`agri-loading ${className || ''}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: description ? 8 : 0,\n ...style,\n }}\n >\n <div\n className=\"agri-loading-icon\"\n dangerouslySetInnerHTML={{ __html: svgContent }}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n />\n {description && (\n <span className=\"agri-loading-description\" style={{ color: '#666', fontSize: 14 }}>\n {description}\n </span>\n )}\n </div>\n );\n\n // 如果启用遮罩,包裹遮罩层\n if (maskConfig.enabled) {\n return (\n <div\n className=\"agri-loading-mask\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: maskConfig.background || LOADING_DEFAULT_MASK_BACKGROUND,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: maskConfig.zIndex ?? LOADING_DEFAULT_MASK_ZINDEX,\n pointerEvents: 'none',\n }}\n >\n {content}\n </div>\n );\n }\n\n return content;\n};\n\nexport default Loading;\n","/**\n * 地图容器组件\n * @description 集成 MapProvider 和自动渲染功能,提供一站式地图容器\n * @since 2.0.0\n * @since 2.0.0 使用自定义 ZoomControl 替代 Leaflet 原生缩放控件\n * @since 2.1.0 使用 memo 包装,避免父组件状态变化导致不必要的重新渲染\n *\n * ## 修复记录 (2024-06-08)\n *\n * **问题**: 当父组件状态变化时(如修改 Marker 图标配置),MapContainer 会重新渲染,\n * 导致 TianDiTuLayer 的 useEffect 重新执行,瓦片图层被删除并重新创建,触发大量瓦片请求。\n *\n * **原因**: MapContainer 没有使用 memo 包装,即使 props 没有变化,也会在父组件重新渲染时重新渲染。\n *\n * **修复方案**: 使用 `memo<MapContainerProps>(function MapContainer(...) {...})` 包装组件,\n * 只有当 props 变化时才重新渲染。\n */\n\nimport React, { useMemo, memo } from 'react';\nimport type L from 'leaflet';\nimport { MapProvider } from '../../context/MapContext';\nimport { useTheme } from '../../context/ThemeContext';\nimport { ConfigContext, type ConfigContextValue } from '../../context/ConfigContext';\nimport DualScaleControl from '../DualScaleControl';\nimport TianDiTuLayer from '../TianDiTuLayer';\nimport MapSizeHandler from '../MapSizeHandler';\nimport ZoomControl from '../ZoomControl';\nimport FullscreenControl from '../FullscreenControl';\nimport Loading from '../Loading';\nimport type {\n DualScaleControlConfig,\n MapSizeHandlerConfig,\n TianDiTuLayerConfig,\n LoadingProps,\n ZoomControlPosition,\n FullscreenControlPosition,\n MapLifecycleConfig,\n PathOptions,\n PolylineStyle,\n IconConfig,\n AntPathConfig,\n ClusterIconConfig,\n} from '../../types';\n\n// 重导出 useConfig,保持 API 兼容\nexport { useConfig } from '../../context/ConfigContext';\n\n// ========== 类型定义 ==========\n\n/**\n * 缩放控件配置\n */\nexport interface ZoomControlConfig {\n /** 控件位置 */\n position?: ZoomControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n}\n\n/**\n * 全屏控件配置\n * @since 2.1.0\n */\nexport interface FullscreenControlConfig {\n /** 控件位置,默认 'topleft' */\n position?: FullscreenControlPosition;\n /** 控件背景色 */\n controlBg?: string;\n /** 控件文字颜色 */\n controlText?: string;\n}\n\n/**\n * 地图容器属性\n */\nexport interface MapContainerProps {\n /** 子组件 */\n children?: React.ReactNode;\n // ========== 地图基础配置 ==========\n /** 中心点 */\n center: [number, number];\n /**\n * 缩放级别\n * @default 12\n */\n zoom?: number;\n /** 样式 */\n style?: React.CSSProperties;\n /** 类名 */\n className?: string;\n /**\n * 容器宽度\n * @description 支持数字(默认单位 px)或字符串(如 '100%', '800px')\n * @default '100%'\n */\n width?: string | number;\n /**\n * 容器高度\n * @description 支持数字(默认单位 px)或字符串(如 '480px', '100vh')\n * @default 480\n */\n height?: string | number;\n /**\n * 容器圆角\n * @description 支持数字(默认单位 px)或字符串(如 '8px', '50%')\n * @default 8\n */\n radius?: string | number;\n /** CRS 坐标系 */\n crs?: L.CRS;\n /** 最大缩放 */\n maxZoom?: number;\n /** 最小缩放 */\n minZoom?: number;\n /** 是否启用滚轮缩放 */\n scrollWheelZoom?: boolean;\n /**\n * 缩放控件配置\n * @description 传入 true 显示默认自定义缩放控件,传入对象自定义配置,false 不显示\n * @since 2.0.0 使用自定义 ZoomControl 替代 Leaflet 原生\n */\n zoomControl?: boolean | ZoomControlConfig;\n /** 是否显示归属控件 */\n attributionControl?: boolean;\n /** 地图就绪回调 */\n whenReady?: (map: L.Map) => void;\n // ========== 配置 ==========\n /** 主题模式 */\n theme?: 'light' | 'dark';\n /**\n * 双向标尺配置\n * @description 传入 true 显示默认配置,传入对象自定义配置,不传或 false 不显示\n */\n dualScaleControl?: boolean | DualScaleControlConfig;\n /**\n * 天地图图层配置\n * @description 配置后自动渲染 TianDiTuLayer\n */\n tianDiTuLayer?: TianDiTuLayerConfig | false;\n /**\n * 地图尺寸处理器配置\n * @description 传入 true 启用默认配置,传入对象自定义配置,不传或 false 不启用\n */\n mapSizeHandler?: boolean | MapSizeHandlerConfig;\n /**\n * 加载状态配置\n * @description 传入 true 显示默认加载动画,传入对象自定义配置,不传或 false 不显示\n * @example\n * // 显示默认加载\n * <MapContainer loading />\n *\n * // 自定义加载\n * <MapContainer loading={{ description: '加载中...', icon: 'loading-dots' }} />\n */\n loading?: boolean | LoadingProps;\n /**\n * 全屏控件\n * @description 传入 true 显示默认全屏按钮,传入对象自定义配置,传入字符串指定位置,不传或 false 不显示\n * @since 2.1.0\n * @example\n * // 显示默认全屏按钮(左上角)\n * <MapContainer fullscreen />\n *\n * // 指定位置\n * <MapContainer fullscreen=\"topright\" />\n *\n * // 自定义配置\n * <MapContainer fullscreen={{ position: 'topright', controlBg: 'rgba(0, 0, 0, 0.8)' }} />\n */\n fullscreen?: boolean | FullscreenControlConfig | FullscreenControlPosition;\n /**\n * 地图生命周期回调配置\n * @description 极简方案:只保留 onMapReady 和 onViewportChange\n * @since 1.4.0\n * @example\n * ```tsx\n * lifecycle={{\n * onMapReady: ({ map }) => console.log('地图就绪'),\n * onViewportChange: (data) => saveViewport(data),\n * }}\n * ```\n */\n lifecycle?: MapLifecycleConfig;\n /**\n * 组件默认配置\n * @description 统一配置各组件的默认属性\n * @example\n * ```tsx\n * config={{\n * plotLayer: {\n * editing: { color: '#faad14', fillColor: '#faad14' },\n * },\n * }}\n * ```\n */\n config?: {\n plotLayer?: {\n editing?: PathOptions | null | false;\n };\n marker?: {\n editing?: IconConfig | null | false;\n };\n road?: {\n default?: PolylineStyle | null | false;\n selected?: PolylineStyle | null | false;\n editing?: PolylineStyle | null | false;\n antPath?: AntPathConfig | null | false;\n };\n irrigation?: {\n default?: PolylineStyle | null | false;\n selected?: PolylineStyle | null | false;\n editing?: PolylineStyle | null | false;\n antPath?: AntPathConfig | null | false;\n inlet?: IconConfig | null | false;\n outlet?: IconConfig | null | false;\n };\n track?: {\n default?: PolylineStyle | null | false;\n nonWorking?: PolylineStyle | null | false;\n selected?: PolylineStyle | null | false;\n start?: IconConfig | null | false;\n end?: IconConfig | null | false;\n cluster?: ClusterIconConfig | null | false;\n };\n };\n}\n\n// ========== 辅助函数 ==========\n\n/** 解析 dualScaleControl 配置 */\nconst getDualScaleControlConfig = (\n config: boolean | DualScaleControlConfig | undefined\n): DualScaleControlConfig | false | undefined => {\n if (config === undefined || config === false) {\n return false;\n }\n return config === true ? {} : config;\n};\n\n/** 解析 mapSizeHandler 配置 */\nconst getMapSizeHandlerConfig = (\n config: boolean | MapSizeHandlerConfig | undefined\n): MapSizeHandlerConfig | false => {\n if (config === undefined || config === false) {\n return false;\n }\n return config === true ? {} : config;\n};\n\n/** 解析 zoomControl 配置 */\nconst getZoomControlConfig = (\n config: boolean | ZoomControlConfig | undefined\n): ZoomControlConfig | false => {\n if (config === undefined || config === false) {\n return false;\n }\n return config === true ? {} : config;\n};\n\n/** 解析 fullscreen 配置 */\nconst getFullscreenControlConfig = (\n config: boolean | FullscreenControlConfig | FullscreenControlPosition | undefined\n): FullscreenControlConfig | false => {\n if (config === undefined || config === false) {\n return false;\n }\n // 如果是字符串(位置),转换为配置对象\n if (typeof config === 'string') {\n return { position: config };\n }\n return config === true ? {} : config;\n};\n\n// ========== 组件 ==========\n\n/**\n * 地图容器组件\n * 集成地图实例上下文、配置上下文和自动渲染功能\n *\n * @example\n * ```tsx\n * // 基础用法(默认 width: 100%, height: 480px)\n * <MapContainer center={[30, 120]} zoom={10}>\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 自定义尺寸(数字,单位 px)\n * <MapContainer center={[30, 120]} zoom={10} width={800} height={600}>\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 自定义尺寸(字符串,支持 px、%、vh 等单位)\n * <MapContainer center={[30, 120]} zoom={10} width=\"100%\" height=\"800px\">\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 使用 style 覆盖尺寸\n * <MapContainer center={[30, 120]} zoom={10} style={{ height: '100vh' }}>\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 自定义圆角\n * <MapContainer center={[30, 120]} zoom={10} radius={12}>\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 带天地图和标尺\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * tianDiTuLayer={{ apiKey: 'your-key' }}\n * dualScaleControl\n * >\n * <Marker dataSource={data} />\n * </MapContainer>\n *\n * // 深色主题\n * <MapContainer\n * center={[30, 120]}\n * zoom={10}\n * theme=\"dark\"\n * tianDiTuLayer={{ apiKey: 'your-key', layerType: 'satellite' }}\n * dualScaleControl={{ showZoomControl: true }}\n * mapSizeHandler\n * >\n * <PlotLayer dataSource={plots} />\n * </MapContainer>\n * ```\n */\nexport const MapContainer = memo<MapContainerProps>(function MapContainer({\n children,\n center,\n zoom = 12,\n style,\n className,\n width,\n height,\n radius = 8,\n crs,\n maxZoom = 22,\n minZoom,\n scrollWheelZoom = true,\n zoomControl = false,\n attributionControl = true,\n whenReady,\n theme: themeProp,\n dualScaleControl,\n tianDiTuLayer,\n mapSizeHandler,\n loading,\n fullscreen,\n lifecycle,\n config,\n}: MapContainerProps) {\n // 从全局 ThemeContext 读取主题,props.theme 优先\n const { theme: globalTheme } = useTheme();\n const theme = themeProp ?? globalTheme;\n\n // 合并尺寸样式:默认 width: '100%', height: 480\n const mergedStyle = useMemo((): React.CSSProperties => {\n const defaultStyle: React.CSSProperties = {\n width: '100%',\n height: 480,\n borderRadius: typeof radius === 'number' ? `${radius}px` : radius,\n };\n\n // 处理 width 和 height 属性\n if (width !== undefined) {\n defaultStyle.width = typeof width === 'number' ? `${width}px` : width;\n }\n if (height !== undefined) {\n defaultStyle.height = typeof height === 'number' ? `${height}px` : height;\n }\n\n // 合并用户传入的 style,用户 style 优先\n return { ...defaultStyle, ...style };\n }, [width, height, style, radius]);\n\n // 解析后的配置\n const dualScaleConfig = getDualScaleControlConfig(dualScaleControl);\n const mapSizeConfig = getMapSizeHandlerConfig(mapSizeHandler);\n const zoomControlConfig = getZoomControlConfig(zoomControl);\n const fullscreenConfig = getFullscreenControlConfig(fullscreen);\n\n // 地图选项:当使用自定义 ZoomControl 时,禁用 Leaflet 原生 zoomControl\n const mapOptions: L.MapOptions = useMemo(\n () => ({\n crs,\n maxZoom,\n minZoom,\n scrollWheelZoom,\n zoomControl: zoomControlConfig !== false ? false : false, // 始终禁用原生,使用自定义\n attributionControl,\n }),\n [crs, maxZoom, minZoom, scrollWheelZoom, zoomControlConfig, attributionControl]\n );\n\n // 配置上下文值\n const configValue = useMemo((): ConfigContextValue => {\n const tianDiTuLayerValue: TianDiTuLayerConfig | false =\n tianDiTuLayer === false || !tianDiTuLayer ? false : tianDiTuLayer;\n\n return {\n theme,\n dualScaleControl: dualScaleConfig,\n tianDiTuLayer: tianDiTuLayerValue,\n mapSizeHandler: mapSizeConfig,\n ...config,\n };\n }, [theme, dualScaleConfig, tianDiTuLayer, mapSizeConfig, config]);\n\n return (\n <ConfigContext.Provider value={configValue}>\n <MapProvider\n center={center}\n zoom={zoom}\n style={mergedStyle}\n className={className}\n options={mapOptions}\n onReady={whenReady}\n lifecycle={lifecycle}\n >\n {/* 自动渲染地图尺寸处理器 */}\n {mapSizeConfig !== false && (\n <MapSizeHandler\n enabled={mapSizeConfig?.enabled}\n delay={mapSizeConfig?.delay}\n retries={mapSizeConfig?.retries}\n />\n )}\n\n {/* 自动渲染天地图图层 */}\n {tianDiTuLayer !== false && tianDiTuLayer && (\n <TianDiTuLayer\n apiKey={tianDiTuLayer.apiKey}\n layerType={tianDiTuLayer.layerType}\n showAnnotation={tianDiTuLayer.showAnnotation}\n overlayUrl={tianDiTuLayer.overlayUrl}\n subdomains={tianDiTuLayer.subdomains}\n maxZoom={tianDiTuLayer.maxZoom}\n minZoom={tianDiTuLayer.minZoom}\n showLayerSelector={tianDiTuLayer.showLayerSelector}\n />\n )}\n\n {/* 自动渲染双向标尺 */}\n {dualScaleConfig !== false && <DualScaleControl />}\n\n {/* 自动渲染缩放控件 */}\n {zoomControlConfig !== false && (\n <ZoomControl\n position={zoomControlConfig?.position}\n controlBg={zoomControlConfig?.controlBg}\n controlText={zoomControlConfig?.controlText}\n />\n )}\n\n {/* 自动渲染全屏控件 */}\n {fullscreenConfig !== false && (\n <FullscreenControl\n position={fullscreenConfig?.position}\n controlBg={fullscreenConfig?.controlBg}\n controlText={fullscreenConfig?.controlText}\n />\n )}\n\n {/* 用户子组件 */}\n {children}\n\n {/* 加载状态 */}\n {loading && <Loading mask {...(typeof loading === 'object' ? loading : {})} />}\n </MapProvider>\n </ConfigContext.Provider>\n );\n});\n\nMapContainer.displayName = 'MapContainer';\n\nexport default MapContainer;\n","/**\n * @fileoverview 农业图层统一生命周期管理 Hook\n * @description 为 PlotLayer、Road、Irrigation、Marker 提供统一的生命周期管理\n * @since 1.4.0\n * @module hooks/useLifecycle\n *\n * @example\n * ```tsx\n * // 在组件中使用\n * useLifecycle<'PlotLayer'>({\n * componentType: 'PlotLayer',\n * lifecycle,\n * dataSource: normalizedDataSource,\n * currentState: { mode: editMode, prevMode, plotId: selectedPlotId },\n * isRendered: layersReady,\n * renderStats: { totalCount, renderedCount, virtualized },\n * });\n * ```\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any, react-hooks/exhaustive-deps -- 状态机需要 */\n\nimport { useEffect, useRef } from 'react';\nimport type {\n AgriculturalComponentType,\n LifecycleConfig,\n LifecycleRenderStats,\n StateChangeMap,\n} from '../types/lifecycle';\n\n/**\n * useLifecycle 配置选项\n * @template T - 组件类型\n */\nexport interface UseLifecycleOptions<T extends AgriculturalComponentType> {\n /** 组件类型标识 */\n componentType: T;\n /** 生命周期回调配置 */\n lifecycle?: LifecycleConfig<T>;\n /** 标准化后的数据源 */\n dataSource: any[];\n /** 当前状态对象(不同组件类型有不同的状态结构) */\n currentState: T extends keyof StateChangeMap ? StateChangeMap[T] : any;\n /** 上一个状态对象 */\n prevState?: T extends keyof StateChangeMap ? StateChangeMap[T] : any;\n /** 是否已完成首次渲染 */\n isRendered: boolean;\n /** 渲染统计信息 */\n renderStats?: Omit<LifecycleRenderStats, 'componentType'>;\n}\n\n/**\n * 农业图层统一生命周期管理 Hook\n * @description 管理组件的挂载、渲染、状态变化、卸载四个关键生命周期节点\n *\n * @param options - 配置选项\n * @returns void\n *\n * @example\n * ```tsx\n * function PlotLayer({ dataSource, editMode, lifecycle }) {\n * const selectedPlotId = useSelectedPlotId();\n * const layersReady = useLayersReady();\n *\n * useLifecycle<'PlotLayer'>({\n * componentType: 'PlotLayer',\n * lifecycle,\n * dataSource,\n * currentState: {\n * mode: editMode,\n * prevMode: prevEditModeRef.current,\n * plotId: selectedPlotId,\n * },\n * isRendered: layersReady,\n * renderStats: {\n * totalCount: dataSource.length,\n * renderedCount: visiblePlots.length,\n * virtualized: isVirtualized,\n * },\n * });\n *\n * return ...;\n * }\n * ```\n */\nexport function useLifecycle<T extends AgriculturalComponentType>(\n options: UseLifecycleOptions<T>\n): void {\n const {\n componentType,\n lifecycle,\n dataSource,\n currentState,\n prevState: _prevState,\n isRendered,\n renderStats,\n } = options;\n\n const isMounted = useRef(false);\n const hasRendered = useRef(false);\n const prevStatusRef = useRef<any>(null);\n const dataLengthRef = useRef<number>(0);\n\n // 使用 ref 存储 lifecycle 和 dataSource,避免依赖数组变化导致循环\n const lifecycleRef = useRef(lifecycle);\n const dataSourceRef = useRef(dataSource);\n const renderStatsRef = useRef(renderStats);\n\n // 更新 ref\n lifecycleRef.current = lifecycle;\n dataSourceRef.current = dataSource;\n renderStatsRef.current = renderStats;\n\n // ========== MOUNT: 第一次数据挂载之前 ==========\n useEffect(() => {\n // 检测数据源变化(重新挂载的情况)\n if (dataLengthRef.current !== dataSource.length) {\n dataLengthRef.current = dataSource.length;\n // 数据变化时重置状态,允许重新触发生命周期\n isMounted.current = false;\n hasRendered.current = false;\n }\n\n // 防止重复执行\n if (isMounted.current) {\n return;\n }\n\n // 调用 onBeforeMount 回调,可进行数据验证\n const shouldContinue = lifecycleRef.current?.onBeforeMount?.(dataSourceRef.current);\n\n // 如果返回 false,阻止组件挂载\n if (shouldContinue === false) {\n console.warn(`[${componentType}] Mount aborted by onBeforeMount`);\n return;\n }\n\n // 标记为已挂载\n isMounted.current = true;\n }, [dataSource.length]);\n\n // ========== MOUNT: 第一次渲染完成 ==========\n useEffect(() => {\n // 修复:如果 isRendered=true 但 isMounted=false,说明是重新挂载\n // 需要先触发 onBeforeMount,然后标记为已挂载\n if (!isMounted.current && isRendered && renderStats) {\n const shouldContinue = lifecycleRef.current?.onBeforeMount?.(dataSourceRef.current);\n if (shouldContinue === false) {\n console.warn(`[${componentType}] Mount aborted by onBeforeMount`);\n return;\n }\n isMounted.current = true;\n }\n\n // 必须满足以下条件才触发:\n // 1. 组件已挂载\n // 2. 图层已渲染完成\n // 3. 尚未触发过 firstRender(防止重复触发)\n // 4. 有渲染统计数据\n if (!isMounted.current || !isRendered || hasRendered.current || !renderStats) {\n return;\n }\n\n // 标记为已渲染\n hasRendered.current = true;\n\n // 调用 onFirstRender 回调,直接使用当前 renderStats 参数\n lifecycleRef.current?.onFirstRender?.({\n totalCount: renderStats.totalCount,\n renderedCount: renderStats.renderedCount,\n virtualized: renderStats.virtualized,\n componentType,\n });\n }, [\n isRendered,\n renderStats?.totalCount,\n renderStats?.renderedCount,\n renderStats?.virtualized,\n componentType,\n ]);\n\n // ========== UPDATE: 状态变化 ==========\n useEffect(() => {\n // 必须当前状态有效才处理\n if (!currentState) {\n return;\n }\n\n // 获取上一个状态\n const prevStatus = prevStatusRef.current;\n\n // 比较状态是否发生变化(根据具体状态结构比较)\n const stateChanged =\n !prevStatus ||\n ('mode' in prevStatus && 'mode' in currentState && prevStatus.mode !== currentState.mode) ||\n ('plotId' in prevStatus &&\n 'plotId' in currentState &&\n prevStatus.plotId !== currentState.plotId) ||\n ('action' in prevStatus &&\n 'action' in currentState &&\n prevStatus.action !== currentState.action) ||\n ('roadId' in prevStatus &&\n 'roadId' in currentState &&\n prevStatus.roadId !== currentState.roadId) ||\n ('irrigationId' in prevStatus &&\n 'irrigationId' in currentState &&\n prevStatus.irrigationId !== currentState.irrigationId) ||\n ('markerId' in prevStatus &&\n 'markerId' in currentState &&\n prevStatus.markerId !== currentState.markerId);\n\n if (stateChanged) {\n // 调用 onStateChange 回调,传入新旧状态\n lifecycleRef.current?.onStateChange?.({\n ...currentState,\n prevStatus,\n });\n\n // 更新上一个状态引用\n prevStatusRef.current = currentState;\n }\n }, [currentState, componentType]);\n\n // ========== UNMOUNT: 组件卸载前 ==========\n useEffect(() => {\n // 返回清理函数,在组件卸载时执行\n return () => {\n // 只有已挂载的组件才需要清理\n if (!isMounted.current) {\n return;\n }\n\n // 调用 onBeforeUnmount 回调,可进行异步保存等操作\n lifecycleRef.current?.onBeforeUnmount?.();\n\n // 标记为已卸载\n isMounted.current = false;\n };\n }, []);\n}\n\nexport default useLifecycle;\n","/**\n * 解析编辑模式的 Hook\n * @description 统一处理各组件的 editMode 属性解析逻辑\n */\n\nimport { useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport type { ToolbarColor, ToolbarSize } from '../components/shared/BaseEditToolbar';\n\n/**\n * 编辑模式对象配置\n */\nexport interface EditModeObjectConfig<T extends string> {\n /** 启用的编辑按钮 */\n enabled?: boolean | T[];\n /** 自定义工具栏内容 */\n toolbar?: ReactNode;\n /** 内置按钮的统一颜色(支持预设色和自定义颜色) */\n color?: ToolbarColor;\n /** 内置按钮的统一尺寸(支持预设尺寸和自定义数字) */\n size?: ToolbarSize;\n /** 是否仅显示图标(不显示文字) */\n iconOnly?: boolean;\n}\n\n/**\n * 编辑模式类型\n * - `false`: 禁用编辑\n * - `true`: 启用全部编辑功能\n * - `T[]`: 启用指定的编辑按钮\n * - `EditModeObjectConfig<T>`: 对象配置,支持自定义工具栏\n */\nexport type EditModeConfig<T extends string> = boolean | T[] | EditModeObjectConfig<T>;\n\n/**\n * 编辑模式解析结果\n */\nexport interface EditModeResult<T extends string> {\n /** 是否启用编辑模式 */\n editEnabled: boolean;\n /** 启用的按钮列表 */\n enabledButtons: T[];\n /** 自定义工具栏内容 */\n customToolbar?: ReactNode;\n /** 内置按钮的统一颜色 */\n color?: ToolbarColor;\n /** 内置按钮的统一尺寸 */\n size?: ToolbarSize;\n /** 是否仅显示图标 */\n iconOnly?: boolean;\n}\n\n/**\n * 解析编辑模式配置\n * @param editModeProp 编辑模式属性值\n * @param defaultButtons 当 editMode 为 true 时默认启用的按钮\n * @returns EditModeResult\n *\n * @example\n * ```ts\n * // PlotLayer\n * const { editEnabled, enabledButtons } = useEditMode(\n * editModeProp,\n * ['redraw', 'clip', 'move', 'create', 'delete'] as const\n * );\n *\n * // Marker\n * const { editEnabled, enabledButtons } = useEditMode(\n * editModeProp,\n * ['create', 'move', 'delete'] as const\n * );\n *\n * // 使用对象配置\n * const { editEnabled, enabledButtons, customToolbar } = useEditMode(\n * { enabled: ['create', 'move'], toolbar: <Button>自定义</Button> },\n * ['create', 'move', 'delete'] as const\n * );\n * ```\n */\nexport function useEditMode<T extends string>(\n editModeProp: EditModeConfig<T> | undefined,\n defaultButtons: readonly T[]\n): EditModeResult<T> {\n return useMemo(() => {\n // 处理 undefined 或 false\n if (editModeProp === undefined || editModeProp === false) {\n return { editEnabled: false, enabledButtons: [] };\n }\n\n // 处理 true\n if (editModeProp === true) {\n return { editEnabled: true, enabledButtons: [...defaultButtons] };\n }\n\n // 处理数组\n if (Array.isArray(editModeProp)) {\n return { editEnabled: true, enabledButtons: editModeProp };\n }\n\n // 处理对象配置\n if (typeof editModeProp === 'object') {\n const { enabled, toolbar, color, size, iconOnly } = editModeProp;\n\n if (enabled === false) {\n return {\n editEnabled: false,\n enabledButtons: [],\n customToolbar: toolbar,\n color,\n size,\n iconOnly,\n };\n }\n\n if (enabled === true || enabled === undefined) {\n return {\n editEnabled: true,\n enabledButtons: [...defaultButtons],\n customToolbar: toolbar,\n color,\n size,\n iconOnly,\n };\n }\n\n if (Array.isArray(enabled)) {\n return {\n editEnabled: true,\n enabledButtons: enabled,\n customToolbar: toolbar,\n color,\n size,\n iconOnly,\n };\n }\n }\n\n return { editEnabled: false, enabledButtons: [] };\n }, [editModeProp, defaultButtons]);\n}\n\nexport default useEditMode;\n","/**\n * @fileoverview Loading 覆盖层 Hook\n * @description 提取各组件中重复的 Loading 覆盖层逻辑\n */\n\nimport { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport type L from 'leaflet';\nimport Loading from '../components/Loading';\nimport type { LoadingMaskConfig } from '../types';\nimport type { LoadingIconName, LoadingSize } from '../types/loading';\nimport { LOADING_DEFAULT_MASK_BACKGROUND, LOADING_DEFAULT_MASK_ZINDEX } from '../constants/styles';\n\nexport interface UseLoadingOverlayOptions {\n /** 是否显示加载状态 */\n loading: boolean;\n /** Loading 遮罩配置 */\n loadingMask?: LoadingMaskConfig;\n /** Leaflet 地图实例 */\n map: L.Map | null;\n /** Loading 覆盖层的 CSS 类名 */\n className: string;\n /** 自定义 Loading 图标名称,默认为 'loading-spinner' */\n icon?: LoadingIconName;\n /** 自定义 Loading 尺寸,默认为 'large' */\n size?: LoadingSize;\n}\n\n/**\n * Loading 覆盖层 Hook\n *\n * @description\n * 提取各图层组件中重复的 Loading 覆盖层逻辑,包括:\n * - PlotLayer / PlotGroupLayer\n * - Road / Irrigation\n * - Marker\n *\n * @example\n * ```tsx\n * const loadingOverlay = useLoadingOverlay({\n * loading,\n * loadingMask,\n * map,\n * className: 'agri-plot-loading-overlay',\n * });\n *\n * return (\n * <>\n * {/* 其他内容 *}\n * {loadingOverlay}\n * </>\n * );\n * ```\n */\nexport function useLoadingOverlay(options: UseLoadingOverlayOptions): React.ReactNode | null {\n const {\n loading,\n loadingMask,\n map,\n className,\n icon = 'loading-spinner',\n size = 'large',\n } = options;\n\n return useMemo(() => {\n if (!loading || !map) return null;\n\n const container = map.getContainer();\n if (!container) return null;\n\n const maskEnabled = loadingMask?.enabled !== false;\n const maskBackground = loadingMask?.background || LOADING_DEFAULT_MASK_BACKGROUND;\n const maskZIndex = loadingMask?.zIndex ?? LOADING_DEFAULT_MASK_ZINDEX;\n\n return createPortal(\n <div\n className={className}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: maskEnabled ? maskBackground : 'transparent',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: maskZIndex,\n pointerEvents: 'none',\n }}\n >\n <Loading icon={icon} size={size} />\n </div>,\n container\n );\n }, [loading, loadingMask, map, className, icon, size]);\n}\n","/**\n * 几何计算工具函数\n */\n\nimport L from 'leaflet';\nimport type { Coordinate } from '../types';\n\n/**\n * 计算两点之间的距离(米)\n * @param point1 - 点1 [lat, lng]\n * @param point2 - 点2 [lat, lng]\n * @returns 距离(米)\n */\nexport const getDistance = (point1: Coordinate, point2: Coordinate): number => {\n const latlng1 = L.latLng(point1[0], point1[1]);\n const latlng2 = L.latLng(point2[0], point2[1]);\n return latlng1.distanceTo(latlng2);\n};\n\n/**\n * 计算两点之间的中点\n * @param point1 - 点1 [lat, lng]\n * @param point2 - 点2 [lat, lng]\n * @returns 中点 [lat, lng]\n */\nexport const getMiddlePoint = (point1: Coordinate, point2: Coordinate): Coordinate => {\n return [(point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2];\n};\n\n/**\n * 格式化距离显示\n * @param distance - 距离(米)\n * @returns 格式化后的距离字符串\n */\nexport const formatDistance = (distance: number): string => {\n if (distance < 1000) {\n return `${Math.round(distance)}m`;\n }\n return `${(distance / 1000).toFixed(2)}km`;\n};\n\n/** 角度输出模式 */\ntype AngleMode = 'text' | 'compass';\n\n/**\n * 计算两点之间的原始角度(弧度→度数),供 getAngle / getLineAngle 复用\n * @param map - Leaflet地图实例\n * @param point1 - 点1 [lat, lng]\n * @param point2 - 点2 [lat, lng]\n * @param mode - 输出模式:'text' 钳制到 [-90,90](文字可读),'compass' 标准化到 [0,360]\n */\nfunction calcAngle(map: L.Map, point1: Coordinate, point2: Coordinate, mode: AngleMode): number {\n const p1 = map.latLngToContainerPoint(L.latLng(point1[0], point1[1]));\n const p2 = map.latLngToContainerPoint(L.latLng(point2[0], point2[1]));\n const dx = p2.x - p1.x;\n const dy = p2.y - p1.y;\n let angle = (Math.atan2(dy, dx) * 180) / Math.PI;\n\n if (mode === 'text') {\n // 调整角度,使文字始终正向可读\n if (angle > 90) angle -= 180;\n else if (angle < -90) angle += 180;\n } else {\n // 标准化到 0-360\n if (angle < 0) angle += 360;\n }\n\n return angle;\n}\n\n/**\n * 计算两点之间的角度(度),用于文字旋转\n * @param map - Leaflet地图实例\n * @param point1 - 点1 [lat, lng]\n * @param point2 - 点2 [lat, lng]\n * @returns 角度(度)\n */\nexport const getAngle = (map: L.Map, point1: Coordinate, point2: Coordinate): number =>\n calcAngle(map, point1, point2, 'text');\n\n/**\n * 计算线段角度(用于图标旋转)\n * @param map - Leaflet地图实例\n * @param point1 - 起点 [lat, lng]\n * @param point2 - 终点 [lat, lng]\n * @returns 角度(度,0-360)\n */\nexport const getLineAngle = (\n map: L.Map | null | undefined,\n point1: Coordinate,\n point2: Coordinate\n): number => {\n if (!map) return 0;\n return calcAngle(map, point1, point2, 'compass');\n};\n","/**\n * RAF 节流工具\n * @description 使用 requestAnimationFrame 实现节流,优化频繁触发的回调\n * @since 1.4.0\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any -- 泛型约束需要 */\n\nimport { useRef, useEffect, useMemo } from 'react';\n\n/**\n * RAF 节流函数\n * @description 使用 requestAnimationFrame 节流,确保回调在每一帧最多执行一次\n * @param callback 要节流的回调函数\n * @returns 节流后的函数\n *\n * @example\n * ```ts\n * const handleMapMove = useRafThrottle(() => {\n * // 地图移动时的处理逻辑\n * updateViewport();\n * });\n *\n * map.on('move', handleMapMove);\n * ```\n */\nexport function useRafThrottle<T extends (...args: any[]) => any>(callback: T): T {\n const rafRef = useRef<number | null>(null);\n const lastArgsRef = useRef<unknown[]>([]);\n const callbackRef = useRef(callback);\n\n // 更新回调引用\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n // 清理\n useEffect(() => {\n return () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, []);\n\n return useMemo(() => {\n const throttledFn = (...args: unknown[]) => {\n lastArgsRef.current = args;\n\n if (rafRef.current === null) {\n rafRef.current = requestAnimationFrame(() => {\n callbackRef.current(...lastArgsRef.current);\n rafRef.current = null;\n });\n }\n };\n\n return throttledFn as T;\n }, []);\n}\n\n/**\n * 延迟执行函数\n * @description 在指定延迟后执行函数,支持取消\n * @param callback 要执行的函数\n * @param delay 延迟时间(ms)\n * @returns 执行函数(可取消)\n *\n * @example\n * ```ts\n * const debouncedUpdate = useDebouncedCallback(() => {\n * updateData();\n * }, 300);\n *\n * // 调用\n * debouncedUpdate();\n *\n * // 取消\n * debouncedUpdate.cancel();\n * ```\n */\nexport function useDebouncedCallback<T extends (...args: any[]) => any>(\n callback: T,\n delay: number\n): T & { cancel: () => void } {\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const debouncedFn = useMemo(() => {\n const fn = (...args: unknown[]) => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n callbackRef.current(...args);\n timerRef.current = null;\n }, delay);\n };\n\n fn.cancel = () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n\n return fn as T & { cancel: () => void };\n }, [delay]);\n\n return debouncedFn;\n}\n\n/**\n * 批量更新工具\n * @description 将多次更新合并为一次,适用于频繁状态更新场景\n * @param callback 更新函数\n * @param interval 合并间隔(ms),默认 100ms\n * @returns 批量更新函数\n *\n * @example\n * ```ts\n * const batchUpdate = useBatchedUpdate((updates) => {\n * setData(prev => [...prev, ...updates]);\n * }, 100);\n *\n * // 多次调用会合并为一次\n * batchUpdate(item1);\n * batchUpdate(item2);\n * batchUpdate(item3);\n * // 100ms 后一次性更新 [item1, item2, item3]\n * ```\n */\nexport function useBatchedUpdate<T>(callback: (items: T[]) => void, interval = 100) {\n const itemsRef = useRef<T[]>([]);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const batchedUpdate = (item: T) => {\n itemsRef.current.push(item);\n\n if (timerRef.current === null) {\n timerRef.current = setTimeout(() => {\n const items = itemsRef.current;\n itemsRef.current = [];\n callbackRef.current(items);\n timerRef.current = null;\n }, interval);\n }\n };\n\n // 立即执行批量更新\n const flush = () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n\n if (itemsRef.current.length > 0) {\n callbackRef.current(itemsRef.current);\n itemsRef.current = [];\n }\n };\n\n return { batchedUpdate, flush };\n}\n","/**\n * @fileoverview 统一视口防抖 Hook\n * @description 优化地图视口变化时的性能,减少频繁触发更新,适用于所有图层组件\n * @module hooks/useViewportDebounce\n * @since 2.1.0 统一优化\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type L from 'leaflet';\nimport { useRafThrottle, useDebouncedCallback } from '../utils/rafThrottle';\n\n/** 视口状态 */\nexport interface ViewportState {\n /** 当前缩放级别 */\n zoom: number;\n /** 视口版本号(每次变化递增) */\n viewVersion: number;\n /** 当前视口边界 */\n bounds: L.LatLngBounds | null;\n /** 地图中心点 */\n center: L.LatLng | null;\n}\n\n/** 防抖配置 */\nexport interface ViewportDebounceOptions {\n /** 地图实例 */\n map: L.Map | null;\n /** zoom 变化防抖延迟(ms),默认 100 */\n zoomDebounceDelay?: number;\n /** move 变化防抖延迟(ms),默认 150 */\n moveDebounceDelay?: number;\n /** 是否启用 RAF 节流,默认 true */\n useRaf?: boolean;\n /** 是否监听 resize 事件,默认 false */\n listenResize?: boolean;\n}\n\n/** 防抖结果 */\nexport interface ViewportDebounceResult extends ViewportState {\n /** 防抖后的缩放级别 */\n debouncedZoom: number;\n /** 防抖后的视口版本 */\n debouncedViewVersion: number;\n /** 防抖后的视口边界 */\n debouncedBounds: L.LatLngBounds | null;\n /** 防抖后的地图中心 */\n debouncedCenter: L.LatLng | null;\n /** 强制刷新(跳过防抖) */\n forceUpdate: () => void;\n /** 实时状态(无防抖) */\n realtime: ViewportState;\n}\n\n/**\n * 统一视口防抖 Hook\n * @description 通过防抖和 RAF 节流减少视口变化触发频率,适用于 PlotLayer、Marker、Track 等组件\n *\n * @example\n * ```tsx\n * // 在 PlotLayer 中使用\n * const { debouncedZoom, debouncedBounds, debouncedViewVersion } = useViewportDebounce({\n * map,\n * zoomDebounceDelay: 100,\n * moveDebounceDelay: 150,\n * });\n *\n * // 使用防抖后的值进行视口过滤\n * const visiblePlots = useMemo(() => {\n * if (!spatialIndex || !debouncedBounds) return [];\n * return spatialIndex.query(debouncedBounds);\n * }, [spatialIndex, debouncedViewVersion]);\n *\n * // 在 Marker 中使用(聚合)\n * const clusterResults = useMemo(() => {\n * if (!clusterIndex || !debouncedBounds) return [];\n * return clusterIndex.getClusters([...bounds], Math.floor(debouncedZoom));\n * }, [clusterIndex, debouncedViewVersion, debouncedZoom]);\n * ```\n */\nexport function useViewportDebounce(options: ViewportDebounceOptions): ViewportDebounceResult {\n const {\n map,\n zoomDebounceDelay = 100,\n moveDebounceDelay = 150,\n useRaf = true,\n listenResize = false,\n } = options;\n\n // 实时状态(用于事件监听)\n const [realtimeZoom, setRealtimeZoom] = useState(0);\n const [realtimeViewVersion, setRealtimeViewVersion] = useState(0);\n const realtimeBoundsRef = useRef<L.LatLngBounds | null>(null);\n const realtimeCenterRef = useRef<L.LatLng | null>(null);\n\n // 防抖后状态(用于渲染和计算)\n const [debouncedZoom, setDebouncedZoom] = useState(0);\n const [debouncedViewVersion, setDebouncedViewVersion] = useState(0);\n const [debouncedBounds, setDebouncedBounds] = useState<L.LatLngBounds | null>(null);\n const [debouncedCenter, setDebouncedCenter] = useState<L.LatLng | null>(null);\n\n // 防抖回调\n const debouncedSetZoom = useDebouncedCallback(\n useCallback((zoom: number) => {\n setDebouncedZoom(zoom);\n }, []),\n zoomDebounceDelay\n );\n\n const debouncedSetViewVersion = useDebouncedCallback(\n useCallback((version: number) => {\n setDebouncedViewVersion(version);\n setDebouncedBounds(realtimeBoundsRef.current);\n setDebouncedCenter(realtimeCenterRef.current);\n }, []),\n moveDebounceDelay\n );\n\n // RAF 节流版本\n const throttledSetViewVersion = useRafThrottle(\n useCallback((version: number) => {\n setDebouncedViewVersion(version);\n setDebouncedBounds(realtimeBoundsRef.current);\n setDebouncedCenter(realtimeCenterRef.current);\n }, [])\n );\n\n // 强制刷新(跳过防抖)\n const forceUpdate = useCallback(() => {\n if (!map) return;\n const zoom = map.getZoom();\n const bounds = map.getBounds();\n const center = map.getCenter();\n setDebouncedZoom(zoom);\n setDebouncedBounds(bounds);\n setDebouncedCenter(center);\n setDebouncedViewVersion(v => v + 1);\n setRealtimeZoom(zoom);\n realtimeBoundsRef.current = bounds;\n realtimeCenterRef.current = center;\n setRealtimeViewVersion(v => v + 1);\n }, [map]);\n\n // 监听地图事件\n useEffect(() => {\n if (!map) return;\n\n // 初始化状态\n const initialZoom = map.getZoom();\n const initialBounds = map.getBounds();\n const initialCenter = map.getCenter();\n\n setRealtimeZoom(initialZoom);\n setDebouncedZoom(initialZoom);\n realtimeBoundsRef.current = initialBounds;\n setDebouncedBounds(initialBounds);\n realtimeCenterRef.current = initialCenter;\n setDebouncedCenter(initialCenter);\n\n const handleZoomEnd = () => {\n const zoom = map.getZoom();\n setRealtimeZoom(zoom);\n debouncedSetZoom(zoom);\n };\n\n const handleMoveEnd = () => {\n realtimeBoundsRef.current = map.getBounds();\n realtimeCenterRef.current = map.getCenter();\n setRealtimeViewVersion(v => {\n const newVersion = v + 1;\n if (useRaf) {\n throttledSetViewVersion(newVersion);\n } else {\n debouncedSetViewVersion(newVersion);\n }\n return newVersion;\n });\n };\n\n const handleResize = () => {\n // resize 时强制更新\n forceUpdate();\n };\n\n map.on('zoomend', handleZoomEnd);\n map.on('moveend', handleMoveEnd);\n if (listenResize) {\n map.on('resize', handleResize);\n }\n\n return () => {\n map.off('zoomend', handleZoomEnd);\n map.off('moveend', handleMoveEnd);\n if (listenResize) {\n map.off('resize', handleResize);\n }\n debouncedSetZoom.cancel();\n debouncedSetViewVersion.cancel();\n };\n }, [\n map,\n debouncedSetZoom,\n debouncedSetViewVersion,\n throttledSetViewVersion,\n useRaf,\n listenResize,\n forceUpdate,\n ]);\n\n return {\n // 防抖后状态\n debouncedZoom,\n debouncedViewVersion,\n debouncedBounds,\n debouncedCenter,\n // 实时状态\n realtime: {\n zoom: realtimeZoom,\n viewVersion: realtimeViewVersion,\n bounds: realtimeBoundsRef.current,\n center: realtimeCenterRef.current,\n },\n // 实时状态别名(兼容旧代码)\n zoom: realtimeZoom,\n viewVersion: realtimeViewVersion,\n bounds: realtimeBoundsRef.current,\n center: realtimeCenterRef.current,\n // 方法\n forceUpdate,\n };\n}\n\nexport default useViewportDebounce;\n","/**\n * 统一地图边界适配 Hook\n * @description 提供统一的 fitBounds 方法,自动适配所有图层或指定图层数据\n * @since 2.1.0\n *\n * @example\n * ```tsx\n * // 基础用法:适配所有已注册图层\n * const { fitBounds } = useUnifiedFitBounds();\n * <button onClick={() => fitBounds()}>适配全部</button>\n *\n * // 指定图层类型\n * <button onClick={() => fitBounds({ include: ['marker', 'plot'] })}>\n * 只适配标注和地块\n * </button>\n *\n * // 直接传入数据源\n * <button onClick={() => fitBounds({ data: { markers: markerData } })}>\n * 适配指定数据\n * </button>\n * ```\n */\n\nimport { useCallback } from 'react';\nimport L from 'leaflet';\nimport { useMap } from '../context/MapContext';\nimport { computeDataBounds } from '../utils/area';\nimport { MAP_FIT_BOUNDS_DEFAULT_PADDING } from '../constants/common';\n\n// ========== 类型定义 ==========\n\n/** 支持的图层类型 */\nexport type FitBoundsLayerType = 'marker' | 'plot' | 'road' | 'irrigation' | 'track';\n\n/** fitBounds 选项 */\nexport interface UnifiedFitBoundsOptions {\n /** 要包含的图层类型(默认全部) */\n include?: FitBoundsLayerType[];\n /** 要排除的图层类型 */\n exclude?: FitBoundsLayerType[];\n /** 直接传入数据源(优先级高于自动收集) */\n data?: {\n markers?: { position: [number, number] }[];\n plots?: { positions: [number, number][] | [number, number][][] }[];\n roads?: { points: [number, number][] }[];\n irrigations?: { points: [number, number][] }[];\n tracks?: { segments: { coordinates: [number, number][] }[] }[];\n };\n /** 最大缩放级别 */\n maxZoom?: number;\n /** 边距 */\n padding?: number | [number, number];\n /** 是否启用动画 */\n animate?: boolean;\n}\n\n/** 数据获取器类型 */\ntype DataGetter<T = unknown> = () => T[] | null;\n\n/** 图层注册接口 */\nexport interface LayerRegistry {\n /** 注册图层数据获取函数(返回注销函数) */\n register: <T = unknown>(type: FitBoundsLayerType, getData: DataGetter<T>) => () => void;\n /** 注销指定类型的所有数据获取器 */\n unregister: (type: FitBoundsLayerType) => void;\n}\n\n// ========== 全局注册表 ==========\n\nlet nextRegistryId = 0;\nconst layerRegistry = new Map<FitBoundsLayerType, Map<string, DataGetter>>();\n\nexport const registry: LayerRegistry = {\n register: (type, getData) => {\n const id = `${type}_${nextRegistryId++}`;\n if (!layerRegistry.has(type)) {\n layerRegistry.set(type, new Map());\n }\n layerRegistry.get(type)!.set(id, getData);\n // 返回注销函数\n return () => {\n layerRegistry.get(type)?.delete(id);\n };\n },\n unregister: type => {\n layerRegistry.delete(type);\n },\n};\n\n// ========== Hook 实现 ==========\n\n/**\n * 统一地图边界适配 Hook\n * @returns fitBounds 函数和图层注册工具\n */\nexport function useUnifiedFitBounds() {\n const map = useMap();\n\n const fitBounds = useCallback(\n (options?: UnifiedFitBoundsOptions) => {\n if (!map) return;\n\n const allPoints: L.LatLng[] = [];\n\n // 如果传入了自定义数据,直接使用\n if (options?.data) {\n const { data } = options;\n\n // 处理标注点\n if (data.markers?.length) {\n data.markers.forEach(m => {\n if (m.position) {\n allPoints.push(L.latLng(m.position[0], m.position[1]));\n }\n });\n }\n\n // 处理地块\n if (data.plots?.length) {\n const boundsResult = computeDataBounds(\n data.plots as unknown as Record<string, unknown>[],\n 'positions'\n );\n if (boundsResult) {\n allPoints.push(\n L.latLng(boundsResult.southWest[0], boundsResult.southWest[1]),\n L.latLng(boundsResult.northEast[0], boundsResult.northEast[1])\n );\n }\n }\n\n // 处理道路\n if (data.roads?.length) {\n data.roads.forEach(road => {\n road.points.forEach(p => {\n allPoints.push(L.latLng(p[0], p[1]));\n });\n });\n }\n\n // 处理灌溉渠\n if (data.irrigations?.length) {\n data.irrigations.forEach(ch => {\n ch.points.forEach(p => {\n allPoints.push(L.latLng(p[0], p[1]));\n });\n });\n }\n\n // 处理轨迹\n if (data.tracks?.length) {\n data.tracks.forEach(track => {\n track.segments?.forEach(seg => {\n seg.coordinates?.forEach(c => {\n allPoints.push(L.latLng(c[0], c[1]));\n });\n });\n });\n }\n } else {\n // 否则从全局注册表收集数据\n const include = options?.include || ['marker', 'plot', 'road', 'irrigation', 'track'];\n const exclude = options?.exclude || [];\n\n const activeTypes = include.filter(t => !exclude.includes(t)) as FitBoundsLayerType[];\n\n activeTypes.forEach(type => {\n const getters = layerRegistry.get(type);\n if (!getters) return;\n\n getters.forEach(getData => {\n const data = getData();\n if (!data || data.length === 0) return;\n\n switch (type) {\n case 'marker': {\n (data as { position: [number, number] }[]).forEach(m => {\n if (m.position) {\n allPoints.push(L.latLng(m.position[0], m.position[1]));\n }\n });\n break;\n }\n case 'plot': {\n const boundsResult = computeDataBounds(\n data as unknown as Record<string, unknown>[],\n 'positions'\n );\n if (boundsResult) {\n allPoints.push(\n L.latLng(boundsResult.southWest[0], boundsResult.southWest[1]),\n L.latLng(boundsResult.northEast[0], boundsResult.northEast[1])\n );\n }\n break;\n }\n case 'road': {\n (data as { points: [number, number][] }[]).forEach(road => {\n road.points.forEach(p => {\n allPoints.push(L.latLng(p[0], p[1]));\n });\n });\n break;\n }\n case 'irrigation': {\n (data as { points: [number, number][] }[]).forEach(ch => {\n ch.points.forEach(p => {\n allPoints.push(L.latLng(p[0], p[1]));\n });\n });\n break;\n }\n case 'track': {\n // 支持 ParsedTrack[] 格式(Track 组件的实际数据格式)\n (\n data as {\n allPoints?: { position: [number, number] }[];\n segments?: Record<string, [number, number, number, number, number][]>;\n }[]\n ).forEach(track => {\n // 优先使用 allPoints(已解析的坐标数组)\n if (track.allPoints?.length) {\n track.allPoints.forEach(p => {\n allPoints.push(L.latLng(p.position[0], p.position[1]));\n });\n } else if (track.segments) {\n // 否则从 segments 中提取\n Object.values(track.segments).forEach(segment => {\n segment.forEach(point => {\n allPoints.push(L.latLng(point[0], point[1]));\n });\n });\n }\n });\n break;\n }\n }\n });\n });\n }\n\n // 执行 fitBounds\n if (allPoints.length > 0) {\n const bounds = L.latLngBounds(allPoints);\n map.fitBounds(bounds, {\n maxZoom: options?.maxZoom ?? 18,\n padding:\n typeof options?.padding === 'number'\n ? [options.padding, options.padding]\n : (options?.padding ?? MAP_FIT_BOUNDS_DEFAULT_PADDING),\n animate: options?.animate ?? true,\n });\n }\n },\n [map]\n );\n\n return {\n fitBounds,\n registry,\n };\n}\n\nexport default useUnifiedFitBounds;\n","/**\n * @fileoverview 统一数据源标准化 Hook\n * @description 提供 fieldNames 合并、数据验证、fitBoundsRegistry 注册等公共逻辑\n * @module hooks/useNormalizedDataSource\n */\n\nimport { useMemo, useEffect } from 'react';\nimport type {\n DataSourceValidationConfig,\n ValidationStats,\n MapComponentType,\n} from '../types/dataSource';\nimport type { FitBoundsLayerType } from './useUnifiedFitBounds';\nimport { registry as fitBoundsRegistry } from './useUnifiedFitBounds';\n\n/**\n * 动态数据项类型\n * @description 内部使用,通过 fieldNames 动态访问\n */\nexport type DynamicDataItem = Record<string, unknown>;\n\ninterface UseNormalizedDataSourceOptions<TOutput = unknown> {\n /** 数据源 */\n dataSource: DynamicDataItem[] | undefined;\n /** 默认字段名映射 */\n defaultFieldNames: Record<string, string>;\n /** 自定义字段名映射 */\n fieldNames?: Partial<Record<string, string>>;\n /** 验证配置 */\n validation?: DataSourceValidationConfig;\n /** 组件类型(用于日志和注册) */\n componentType: MapComponentType | string;\n /** 可选的数据映射函数,用于直接输出目标类型 */\n mapper?: (item: DynamicDataItem, fieldNames: Record<string, string>) => TOutput;\n}\n\ninterface UseNormalizedDataSourceResult<TOutput = unknown> {\n /** 标准化后的数据数组(如果提供了 mapper,则为映射后的 TOutput[]) */\n data: TOutput[];\n /** 合并后的字段名映射(默认 + 自定义) */\n fieldNames: Record<string, string>;\n /** 验证结果统计 */\n validation: ValidationStats;\n}\n\n/**\n * 统一的 dataSource 标准化 Hook\n *\n * 功能:\n * 1. 合并 fieldNames(默认 + 自定义)\n * 2. 数据验证(必需字段、坐标范围)\n * 3. 注册到 fitBoundsRegistry\n * 4. 可选的 mapper 进行类型转换\n *\n * 注意:\n * - autoFit 逻辑由各组件自行处理(使用 useAutoFit hook)\n * - dataSource 需要是 DynamicDataItem[](即 Record<string, unknown>[]),由调用方保证\n *\n * @example\n * ```tsx\n * const { data, fieldNames, validation } = useNormalizedDataSource({\n * dataSource: dataSource as DynamicDataItem[],\n * defaultFieldNames: { id: 'id', position: 'position' },\n * fieldNames: { id: 'markerId' },\n * validation: { requiredFields: ['id', 'position'] },\n * componentType: 'Marker',\n * mapper: (item, fn) => ({\n * id: item[fn.id] as string,\n * position: item[fn.position] as [number, number],\n * }),\n * });\n * ```\n */\nexport function useNormalizedDataSource<TOutput = unknown>({\n dataSource,\n defaultFieldNames,\n fieldNames,\n validation,\n componentType,\n mapper,\n}: UseNormalizedDataSourceOptions<TOutput>): UseNormalizedDataSourceResult<TOutput> {\n // 1. 合并 fieldNames\n const mergedFieldNames = useMemo((): Record<string, string> => {\n const result: Record<string, string> = { ...defaultFieldNames };\n // 过滤掉 undefined 值\n if (fieldNames) {\n for (const [key, value] of Object.entries(fieldNames)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n }\n return result;\n }, [defaultFieldNames, fieldNames]);\n\n // 2. 数据验证\n const { validatedData, validationResult } = useMemo(() => {\n if (!Array.isArray(dataSource)) {\n return {\n validatedData: [] as DynamicDataItem[],\n validationResult: {\n total: 0,\n valid: 0,\n invalid: 0,\n errors: ['dataSource 不是数组'],\n } as ValidationStats,\n };\n }\n\n const errors: string[] = [];\n const validItems: DynamicDataItem[] = [];\n\n dataSource.forEach((item, index) => {\n // 假设数据项有效\n let isValid = true;\n\n // 空值检查\n if (!item) {\n errors.push(`[${index}] 数据项为空`);\n isValid = false;\n }\n\n // 必需字段验证\n if (isValid && validation?.requiredFields) {\n for (const field of validation.requiredFields) {\n // 直接从 item 获取字段值(简单字段名)\n const fieldValue = (item as Record<string, unknown>)[field as string];\n if (fieldValue === undefined || fieldValue === null) {\n errors.push(`[${index}] 缺少必需字段: ${field}`);\n isValid = false;\n break;\n }\n }\n }\n\n // 坐标验证\n if (isValid && validation?.coordinateFields && validation?.coordinateBounds) {\n for (const field of validation.coordinateFields) {\n const coord = (item as Record<string, unknown>)[field as string] as\n | [number, number]\n | undefined;\n if (coord && Array.isArray(coord) && coord.length >= 2) {\n const [lat, lng] = coord;\n const bounds = validation.coordinateBounds;\n\n if (bounds.lat && (lat < bounds.lat.min || lat > bounds.lat.max)) {\n errors.push(`[${index}] ${field}[0] 超出范围 [${bounds.lat.min}, ${bounds.lat.max}]`);\n isValid = false;\n }\n if (bounds.lng && (lng < bounds.lng.min || lng > bounds.lng.max)) {\n errors.push(`[${index}] ${field}[1] 超出范围 [${bounds.lng.min}, ${bounds.lng.max}]`);\n isValid = false;\n }\n }\n }\n }\n\n // 自定义验证函数\n if (isValid && validation?.customValidator) {\n const customResult = validation.customValidator(item as Record<string, unknown>, index);\n if (!customResult.valid && customResult.errors) {\n errors.push(...customResult.errors);\n isValid = false;\n }\n }\n\n // 只有通过所有验证才添加到有效列表\n if (isValid) {\n validItems.push(item as DynamicDataItem);\n }\n });\n\n return {\n validatedData: validItems,\n validationResult: {\n total: dataSource.length,\n valid: validItems.length,\n invalid: dataSource.length - validItems.length,\n errors,\n },\n };\n }, [dataSource, validation]);\n\n // 3. 如果提供了 mapper,对数据进行映射\n const mappedData = useMemo((): TOutput[] => {\n if (!mapper) {\n return validatedData as unknown as TOutput[];\n }\n return validatedData.map(item => mapper(item, mergedFieldNames));\n }, [validatedData, mergedFieldNames, mapper]);\n\n // 4. 注册到 fitBoundsRegistry\n useEffect(() => {\n if (!componentType) return;\n // 安全的类型转换:确保 componentType 是有效的 FitBoundsLayerType\n const layerType = componentType as FitBoundsLayerType;\n const unregister = fitBoundsRegistry.register(layerType, () => mappedData);\n return unregister;\n }, [componentType, mappedData]);\n\n return {\n data: mappedData,\n fieldNames: mergedFieldNames,\n validation: validationResult,\n };\n}\n\n/**\n * 快速创建 Marker 数据源标准化配置的辅助函数\n */\nexport function createMarkerValidationConfig() {\n return {\n requiredFields: ['id', 'position'],\n coordinateFields: ['position'],\n coordinateBounds: {\n lat: { min: -90, max: 90 },\n lng: { min: -180, max: 180 },\n },\n };\n}\n\n/**\n * 快速创建 Road 数据源标准化配置的辅助函数\n */\nexport function createRoadValidationConfig() {\n return {\n requiredFields: ['id', 'points'],\n coordinateFields: ['points'],\n coordinateBounds: {\n lat: { min: -90, max: 90 },\n lng: { min: -180, max: 180 },\n },\n };\n}\n\n/**\n * 快速创建 Irrigation 数据源标准化配置的辅助函数\n */\nexport function createIrrigationValidationConfig() {\n return {\n requiredFields: ['id', 'points'],\n coordinateFields: ['points'],\n coordinateBounds: {\n lat: { min: -90, max: 90 },\n lng: { min: -180, max: 180 },\n },\n };\n}\n\n/**\n * 快速创建 Plot 数据源标准化配置的辅助函数\n */\nexport function createPlotValidationConfig() {\n return {\n requiredFields: ['id'],\n // Plot 的 positions 验证较复杂,由各组件自行处理\n };\n}\n","/**\n * @fileoverview 自动适配地图视野 Hook\n * @description 统一处理 autoFit 逻辑,消除组件内重复代码\n * @module hooks/useAutoFit\n */\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport L from 'leaflet';\nimport type { Coordinate } from '../types';\n\nexport interface AutoFitOptions {\n maxZoom?: number;\n padding?: number | [number, number];\n}\n\nexport type AutoFitConfig = boolean | AutoFitOptions;\n\nexport interface UseAutoFitOptions<T> {\n /** 数据数组 */\n data: T[];\n /** Leaflet 地图实例 */\n map: L.Map | null;\n /** autoFit 配置:false=禁用,true=启用,object=带选项 */\n autoFit?: AutoFitConfig;\n /** 从数据项提取坐标的函数 */\n getCoordinates: (item: T) => Coordinate[];\n}\n\ninterface UseAutoFitResult {\n /** 手动触发 fitBounds(重置后执行) */\n triggerFit: () => void;\n /** 是否已执行过 fitBounds */\n hasFitted: boolean;\n}\n\n/**\n * 自动适配地图视野 Hook\n *\n * 统一处理 autoFit 逻辑,支持不同的数据结构和坐标提取方式。\n *\n * @example\n * ```tsx\n * // Marker 场景\n * const { triggerFit } = useAutoFit({\n * data: normalizedData,\n * map,\n * autoFit,\n * getCoordinates: (item) => [item.position],\n * });\n *\n * // Road/Irrigation 场景\n * const { triggerFit } = useAutoFit({\n * data: normalizedData,\n * map,\n * autoFit,\n * getCoordinates: (item) => item.points,\n * });\n * ```\n */\nexport function useAutoFit<T>({\n data,\n map,\n autoFit,\n getCoordinates,\n}: UseAutoFitOptions<T>): UseAutoFitResult {\n const hasFittedRef = useRef(false);\n\n useEffect(() => {\n if (autoFit === false || hasFittedRef.current || !map || data.length === 0) {\n return;\n }\n\n hasFittedRef.current = true;\n\n // 提取所有坐标\n const allCoords: L.LatLngExpression[] = [];\n for (const item of data) {\n const coords = getCoordinates(item);\n for (const coord of coords) {\n allCoords.push([coord[0], coord[1]]);\n }\n }\n\n if (allCoords.length === 0) return;\n\n const bounds = L.latLngBounds(allCoords);\n if (!bounds.isValid()) return;\n\n const options = typeof autoFit === 'object' ? autoFit : {};\n const padding: [number, number] = Array.isArray(options.padding)\n ? options.padding\n : ((options.padding ?? [50, 50]) as [number, number]);\n const maxZoom = options.maxZoom ?? 18;\n\n map.fitBounds(bounds, { padding, maxZoom });\n }, [map, data, autoFit, getCoordinates]);\n\n const triggerFit = useCallback(() => {\n hasFittedRef.current = false;\n }, []);\n\n return {\n triggerFit,\n hasFitted: hasFittedRef.current,\n };\n}\n\n/**\n * 快捷创建 Marker 坐标提取函数\n */\nexport function createMarkerCoordinateGetter<T extends { position: Coordinate }>() {\n return function getMarkerCoords(item: T): Coordinate[] {\n return [item.position];\n };\n}\n\n/**\n * 快捷创建 Polyline(Road/Irrigation)坐标提取函数\n */\nexport function createPolylineCoordinateGetter<T extends { points: Coordinate[] }>() {\n return function getPolylineCoords(item: T): Coordinate[] {\n return item.points;\n };\n}\n","/**\n * @fileoverview Marker 图标配置 hook\n * @description 将图标解析、合并、生成逻辑抽取为独立 hook\n * @module components/Marker/useIconConfig\n * @since 2.1.0 添加边界检查和错误处理\n */\n\nimport { useMemo, useCallback } from 'react';\nimport type L from 'leaflet';\nimport type { MarkerData, IconConfig, SvgIconConfig } from '../../types';\nimport { createCachedIcon } from '../../utils/iconCache';\nimport { detectIconType } from '../../utils/iconUtils';\nimport { SVG_MARKER_ICONS } from '../../constants/icon';\nimport { getMarkerAnchor } from '../../utils/markerSvg';\nimport { logger, COMPONENT_NAMES } from '../../utils/errorHandling';\nimport { useConfig } from '../../context/ConfigContext';\nimport {\n MARKER_DEFAULT_ICON,\n MARKER_DEFAULT_SELECTED_ICON,\n MARKER_DEFAULT_EDIT_ICON,\n} from '../../constants/styles';\n\n/** 判断是否为有效的图标配置 */\nconst isValidIconConfig = (val: unknown): val is IconConfig => {\n return typeof val === 'object' && val !== null && Object.keys(val).length > 0;\n};\n\ninterface UseIconConfigOptions {\n editEnabled: boolean;\n currentMode: 'idle' | 'create' | 'move';\n permanent: boolean;\n style?: (data: MarkerData) => IconConfig;\n /** 组件级默认图标配置 */\n icon?: IconConfig;\n /** 组件级选中图标配置 */\n selectedIcon?: IconConfig;\n}\n\ninterface ParsedIconConfig {\n icon: string | null;\n svgIcon: string | SvgIconConfig | null;\n customIcon: string | null;\n iconSize?: number | [number, number];\n iconAnchor?: [number, number];\n popupAnchor?: [number, number];\n animated?: boolean;\n color?: string;\n}\n\n/**\n * 解析单个图标配置\n * @description 安全解析图标配置,处理无效输入\n */\nfunction parseIconConfig(iconConfig?: {\n icon?: string | SvgIconConfig;\n iconSize?: number | [number, number];\n iconAnchor?: [number, number];\n popupAnchor?: [number, number];\n animated?: boolean;\n color?: string;\n}): ParsedIconConfig {\n // 边界检查:空配置返回默认值\n if (!iconConfig) {\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n\n // 边界检查:空字符串图标\n if (!iconConfig.icon || typeof iconConfig.icon !== 'string') {\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n\n try {\n const detected = detectIconType(iconConfig.icon);\n\n if (detected.type === 'url') {\n return {\n ...iconConfig,\n icon: 'point',\n svgIcon: null,\n customIcon: detected.src || null,\n };\n }\n if (detected.type === 'svg') {\n return {\n ...iconConfig,\n icon: 'point',\n svgIcon: (detected.config as string | SvgIconConfig) || null,\n customIcon: null,\n };\n }\n return {\n ...iconConfig,\n icon: detected.name || null,\n svgIcon: null,\n customIcon: null,\n };\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '解析图标配置失败', error);\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n}\n\n/**\n * 规范化图标尺寸\n * @description 确保尺寸格式为 [number, number]\n */\nfunction normalizeIconSize(size: number | [number, number] | undefined): [number, number] {\n if (size === undefined) return [48, 48];\n\n if (typeof size === 'number') {\n // 边界检查:负数或零\n if (size <= 0) {\n logger.warn(COMPONENT_NAMES.MARKER, 'iconSize 为负数或零,使用默认值 48');\n return [48, 48];\n }\n return [size, size];\n }\n\n if (Array.isArray(size) && size.length >= 2) {\n const [width, height] = size;\n // 边界检查:无效数值\n if (typeof width !== 'number' || typeof height !== 'number' || width <= 0 || height <= 0) {\n logger.warn(COMPONENT_NAMES.MARKER, 'iconSize 包含无效值,使用默认值 [48, 48]');\n return [48, 48];\n }\n return [width, height];\n }\n\n logger.warn(COMPONENT_NAMES.MARKER, 'iconSize 格式无效,使用默认值 [48, 48]');\n return [48, 48];\n}\n\n/**\n * Marker 图标配置 hook\n * @description 管理图标配置的解析、合并和生成,添加完整的边界检查\n */\nexport function useIconConfig({\n editEnabled,\n currentMode,\n permanent,\n style,\n icon: iconProp,\n selectedIcon: selectedIconProp,\n}: UseIconConfigOptions) {\n // 从 ConfigContext 获取配置\n const config = useConfig();\n const configEditingIcon = config?.marker?.editing;\n\n /** 合并后的默认图标配置 */\n const mergedDefaultIconConfig = useMemo(() => {\n try {\n // props icon 优先级高于 MARKER_DEFAULT_ICON\n const source = isValidIconConfig(iconProp) ? iconProp : MARKER_DEFAULT_ICON;\n const parsed = parseIconConfig(source);\n return {\n icon: parsed.icon ?? 'marker-blue',\n svgIcon: parsed.svgIcon,\n customIcon: parsed.customIcon,\n iconSize: normalizeIconSize(source.iconSize),\n iconAnchor: source.iconAnchor,\n popupAnchor: source.popupAnchor,\n animated: source.animated,\n color: 'color' in source ? source.color : undefined,\n };\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '合并默认图标配置失败', error);\n return {\n icon: 'marker-blue',\n svgIcon: null,\n customIcon: null,\n iconSize: [48, 48] as [number, number],\n iconAnchor: undefined,\n popupAnchor: undefined,\n animated: false,\n color: undefined,\n };\n }\n }, [iconProp]);\n\n /** 合并后的选中图标配置 */\n const mergedSelectedIconConfig = useMemo(() => {\n try {\n // props selectedIcon 优先级高于 MARKER_DEFAULT_SELECTED_ICON\n const source = isValidIconConfig(selectedIconProp)\n ? selectedIconProp\n : MARKER_DEFAULT_SELECTED_ICON;\n return parseIconConfig(source);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '合并选中图标配置失败', error);\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n }, [selectedIconProp]);\n\n /** 合并后的编辑中图标配置 */\n const mergedEditingIconConfig = useMemo(() => {\n try {\n // 1. 如果 ConfigContext 有有效配置,合并到默认配置\n if (isValidIconConfig(configEditingIcon)) {\n return parseIconConfig({ ...MARKER_DEFAULT_EDIT_ICON, ...configEditingIcon });\n }\n // 2. 否则使用默认配置 MARKER_DEFAULT_EDIT_ICON\n return parseIconConfig(MARKER_DEFAULT_EDIT_ICON);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '合并编辑中图标配置失败', error);\n return { icon: null, svgIcon: null, customIcon: null, color: undefined };\n }\n }, [configEditingIcon]);\n\n /** 图标尺寸规范化 */\n const iconSize: [number, number] = useMemo(() => {\n return mergedDefaultIconConfig.iconSize;\n }, [mergedDefaultIconConfig.iconSize]);\n\n // 解析后的图标(基于合并后的配置)\n const resolvedIcon = mergedDefaultIconConfig.icon;\n const resolvedSvgIcon = mergedDefaultIconConfig.svgIcon;\n const resolvedCustomIcon = mergedDefaultIconConfig.customIcon;\n\n /**\n * 获取标注点图标\n * @description 根据标注数据、选中状态、编辑状态生成对应的图标,添加完整的边界检查\n */\n const getItemIcon = useCallback(\n (item: MarkerData, isSelected: boolean, isEditing: boolean, isTemp = false): L.DivIcon => {\n try {\n // 边界检查:确保 item 有效\n if (!item) {\n logger.warn(COMPONENT_NAMES.MARKER, 'item 为空,返回默认图标');\n return createCachedIcon('point', { iconSize: [48, 48] }, false);\n }\n\n // 优先级:数据项 > config.marker.editing > MARKER_DEFAULT_SELECTED > MARKER_DEFAULT\n let itemIconType: string = resolvedIcon || 'point';\n let itemSvgIcon: string | SvgIconConfig | null = resolvedSvgIcon;\n let itemCustomIcon: string | null = resolvedCustomIcon;\n let itemAnimated = mergedDefaultIconConfig.animated;\n let itemIconSize: [number, number] = iconSize;\n let itemIconAnchor: [number, number] | undefined = mergedDefaultIconConfig.iconAnchor;\n let itemPopupAnchor: [number, number] | undefined = mergedDefaultIconConfig.popupAnchor;\n let itemColor: string | undefined = mergedDefaultIconConfig.color;\n\n // 1. 应用数据项级别的 icon 配置(最高优先级)\n if (isValidIconConfig(item.icon)) {\n try {\n const parsed = parseIconConfig({ ...MARKER_DEFAULT_ICON, ...item.icon });\n if (parsed.icon) itemIconType = parsed.icon;\n if (parsed.svgIcon) itemSvgIcon = parsed.svgIcon;\n if (parsed.customIcon) itemCustomIcon = parsed.customIcon;\n if (parsed.iconSize) itemIconSize = normalizeIconSize(parsed.iconSize);\n if (parsed.iconAnchor) itemIconAnchor = parsed.iconAnchor;\n if (parsed.popupAnchor) itemPopupAnchor = parsed.popupAnchor;\n if (parsed.animated !== undefined) itemAnimated = parsed.animated;\n if (parsed.color) itemColor = parsed.color;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '解析 item.icon 失败', error);\n }\n }\n\n // 1.5 应用 style 动态样式函数(优先级高于 Props 级 icon)\n if (style) {\n try {\n const styleConfig = style(item);\n if (isValidIconConfig(styleConfig)) {\n const parsed = parseIconConfig({ ...MARKER_DEFAULT_ICON, ...styleConfig });\n if (parsed.icon) itemIconType = parsed.icon;\n if (parsed.svgIcon) itemSvgIcon = parsed.svgIcon;\n if (parsed.customIcon) itemCustomIcon = parsed.customIcon;\n if (parsed.iconSize) itemIconSize = normalizeIconSize(parsed.iconSize);\n if (parsed.iconAnchor) itemIconAnchor = parsed.iconAnchor;\n if (parsed.popupAnchor) itemPopupAnchor = parsed.popupAnchor;\n if (parsed.animated !== undefined) itemAnimated = parsed.animated;\n if (parsed.color) itemColor = parsed.color;\n }\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '解析 style 函数返回值失败', error);\n }\n }\n\n // 2. 应用选中图标配置(数据项 selectedIcon 优先)\n if ((isSelected || isTemp) && !isValidIconConfig(item.selectedIcon)) {\n if (mergedSelectedIconConfig.icon) {\n itemIconType = mergedSelectedIconConfig.icon;\n itemSvgIcon = mergedSelectedIconConfig.svgIcon;\n itemCustomIcon = mergedSelectedIconConfig.customIcon;\n }\n if (mergedSelectedIconConfig.iconSize !== undefined) {\n itemIconSize = normalizeIconSize(mergedSelectedIconConfig.iconSize);\n }\n if (mergedSelectedIconConfig.iconAnchor !== undefined) {\n itemIconAnchor = mergedSelectedIconConfig.iconAnchor;\n }\n if (mergedSelectedIconConfig.popupAnchor !== undefined) {\n itemPopupAnchor = mergedSelectedIconConfig.popupAnchor;\n }\n if (mergedSelectedIconConfig.animated !== undefined) {\n itemAnimated = mergedSelectedIconConfig.animated;\n }\n if (mergedSelectedIconConfig.color) {\n itemColor = mergedSelectedIconConfig.color;\n }\n }\n\n // 3. 应用数据项 selectedIcon 配置(优先级高于选中图标配置)\n if ((isSelected || isTemp) && isValidIconConfig(item.selectedIcon)) {\n try {\n const parsed = parseIconConfig({\n ...MARKER_DEFAULT_SELECTED_ICON,\n ...item.selectedIcon,\n });\n if (parsed.icon) itemIconType = parsed.icon;\n if (parsed.svgIcon) itemSvgIcon = parsed.svgIcon;\n if (parsed.customIcon) itemCustomIcon = parsed.customIcon;\n if (parsed.iconSize) itemIconSize = normalizeIconSize(parsed.iconSize);\n if (parsed.iconAnchor) itemIconAnchor = parsed.iconAnchor;\n if (parsed.popupAnchor) itemPopupAnchor = parsed.popupAnchor;\n if (parsed.animated !== undefined) itemAnimated = parsed.animated;\n if (parsed.color) itemColor = parsed.color;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '解析 item.selectedIcon 失败', error);\n }\n }\n\n // 4. 应用编辑中图标配置(优先级低于数据项配置)\n if (isEditing && currentMode === 'move') {\n if (mergedEditingIconConfig.icon) {\n itemIconType = mergedEditingIconConfig.icon;\n itemSvgIcon = mergedEditingIconConfig.svgIcon;\n itemCustomIcon = mergedEditingIconConfig.customIcon;\n }\n if (mergedEditingIconConfig.iconSize !== undefined) {\n itemIconSize = normalizeIconSize(mergedEditingIconConfig.iconSize);\n }\n if (mergedEditingIconConfig.iconAnchor !== undefined) {\n itemIconAnchor = mergedEditingIconConfig.iconAnchor;\n }\n if (mergedEditingIconConfig.popupAnchor !== undefined) {\n itemPopupAnchor = mergedEditingIconConfig.popupAnchor;\n }\n if (mergedEditingIconConfig.animated !== undefined) {\n itemAnimated = mergedEditingIconConfig.animated;\n }\n if (mergedEditingIconConfig.color) {\n itemColor = mergedEditingIconConfig.color;\n }\n }\n\n const effectiveSelected = isSelected || isTemp;\n\n let extraClassName = '';\n if (isEditing && currentMode === 'move') {\n extraClassName = 'marker-icon-wrapper--editing marker-icon-wrapper--movable';\n } else if (isTemp) {\n extraClassName = 'marker-icon-wrapper--temp marker-icon-wrapper--selected';\n } else if (effectiveSelected && editEnabled) {\n extraClassName = 'marker-icon-wrapper--editing';\n } else if (effectiveSelected) {\n extraClassName = 'marker-icon-wrapper--selected';\n }\n\n // SVG 标记需要使用针尖锚点\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- 类型转换需要\n const isItemSvgMarker = SVG_MARKER_ICONS.includes(itemIconType as any);\n const defaultItemAnchor = isItemSvgMarker\n ? getMarkerAnchor(itemIconSize[0], itemIconSize[1])\n : ([itemIconSize[0] / 2, itemIconSize[1]] as [number, number]);\n const effectiveItemIconAnchor = itemIconAnchor || defaultItemAnchor;\n const effectiveItemPopupAnchor =\n itemPopupAnchor || ([0, -effectiveItemIconAnchor[1]] as [number, number]);\n\n const itemIconOptions: L.DivIconOptions = {\n iconSize: itemIconSize,\n iconAnchor: effectiveItemIconAnchor,\n popupAnchor: effectiveItemPopupAnchor,\n };\n\n const icon = createCachedIcon(\n itemIconType,\n itemIconOptions,\n itemAnimated,\n itemSvgIcon,\n itemCustomIcon,\n extraClassName,\n itemColor\n );\n\n // 修复:如果自定义图标没有 animated 类,手动添加\n if (\n itemAnimated &&\n itemCustomIcon &&\n icon.options.html &&\n typeof icon.options.html === 'string'\n ) {\n const html = icon.options.html;\n if (html.includes('marker-custom-icon') && !html.includes('animated')) {\n icon.options.html = html.replace('marker-custom-icon\"', 'marker-custom-icon animated\"');\n }\n }\n\n return icon;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '创建图标失败', error);\n // 返回安全的默认图标\n return createCachedIcon('point', { iconSize: [48, 48] }, false);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps -- style 是函数类型,变更频率低\n [\n resolvedIcon,\n resolvedSvgIcon,\n resolvedCustomIcon,\n iconSize,\n mergedDefaultIconConfig,\n mergedSelectedIconConfig,\n mergedEditingIconConfig,\n editEnabled,\n currentMode,\n ]\n );\n\n /**\n * 获取标注点的永久显示状态\n */\n const getItemPermanent = useCallback(\n (item: MarkerData) => {\n // 边界检查:permanent 只通过组件级 permanent prop 控制\n if (!item) return permanent;\n return permanent;\n },\n [permanent]\n );\n\n /**\n * 获取 Tooltip 偏移量\n * @description 根据图标配置计算 Tooltip 的显示位置偏移,优先使用选中图标的 popupAnchor\n */\n const getTooltipOffset = useCallback(\n (item: MarkerData, isSelected?: boolean, isTemp?: boolean): [number, number] => {\n try {\n const effectiveSelected = isSelected || isTemp;\n\n // 优先使用选中图标的 popupAnchor\n if (\n effectiveSelected &&\n item.selectedIcon &&\n typeof item.selectedIcon === 'object' &&\n item.selectedIcon.popupAnchor\n ) {\n return item.selectedIcon.popupAnchor;\n }\n // 其次使用默认图标的 popupAnchor\n if (item.icon && typeof item.icon === 'object' && item.icon.popupAnchor) {\n return item.icon.popupAnchor;\n }\n // 使用组件级 iconSize 计算偏移量\n return [0, -iconSize[1] * 1.1];\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '计算 Tooltip 偏移量失败', error);\n return [0, -48 * 1.1];\n }\n },\n [iconSize]\n );\n\n return { getItemIcon, getItemPermanent, getTooltipOffset };\n}\n\nexport default useIconConfig;\n","/**\n * @fileoverview Marker 编辑事件处理 hook\n * @description 将编辑模式的状态管理和事件处理提取为独立 hook\n * @module components/Marker/useEditHandlers\n * @since 2.1.0 添加边界检查和错误处理\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any, react-hooks/exhaustive-deps -- 编辑事件处理需要 */\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport type L from 'leaflet';\nimport type { MarkerData, MarkerCreateResult, MarkerMoveResult, Coordinate } from '../../types';\nimport { useLatestRef } from '../../hooks';\nimport { logger, COMPONENT_NAMES } from '../../utils/errorHandling';\n\ninterface EditHandlersOptions {\n enabledButtonsRef: React.MutableRefObject<('create' | 'edit' | 'move' | 'delete')[]>;\n value: string | number | null;\n dataSource: MarkerData[];\n handleSelect: (id: string | number | null) => void;\n onCreateRef: React.MutableRefObject<((result: MarkerCreateResult) => void) | undefined>;\n onEditRef: React.MutableRefObject<\n ((result: { markerId: string | number; marker: MarkerData }) => void) | undefined\n >;\n onMoveRef: React.MutableRefObject<((result: MarkerMoveResult) => void) | undefined>;\n onDeleteRef: React.MutableRefObject<\n ((result: { markerId: string | number }) => void) | undefined\n >;\n onSaveRef: React.MutableRefObject<\n ((result: { mode: string } & (MarkerCreateResult | MarkerMoveResult)) => void) | undefined\n >;\n closeTooltip: () => void;\n}\n\n/**\n * 安全执行回调\n * @description 包裹回调执行,添加错误处理\n */\nfunction safeCall<T extends (...args: any[]) => any>(\n callback: T | undefined,\n ...args: Parameters<T>\n): void {\n if (!callback) return;\n\n try {\n callback(...args);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '回调执行失败', error);\n }\n}\n\n/**\n * Marker 编辑事件处理 hook\n * @description 管理编辑模式的状态和事件处理,添加完整的边界检查和错误处理\n */\nexport function useEditHandlers({\n enabledButtonsRef,\n value,\n dataSource,\n handleSelect,\n onCreateRef,\n onEditRef,\n onMoveRef: _onMoveRef,\n onDeleteRef,\n onSaveRef,\n closeTooltip,\n}: EditHandlersOptions) {\n const [currentMode, setCurrentMode] = useState<'idle' | 'create' | 'move'>('idle');\n const [tempMarker, setTempMarker] = useState<MarkerData | null>(null);\n const [dragPosition, setDragPosition] = useState<Coordinate | null>(null);\n const dragStartPosRef = useRef<Coordinate | null>(null);\n\n /**\n * 进入创建模式\n */\n const handleCreate = useCallback(() => {\n try {\n if (!enabledButtonsRef.current?.includes('create')) {\n logger.warn(COMPONENT_NAMES.MARKER, 'create 按钮未启用');\n return;\n }\n setCurrentMode('create');\n setTempMarker(null);\n closeTooltip();\n handleSelect(null);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '进入创建模式失败', error);\n setCurrentMode('idle');\n }\n }, [handleSelect, closeTooltip]);\n\n /**\n * 编辑选中的标注\n */\n const handleEdit = useCallback(() => {\n try {\n if (!enabledButtonsRef.current?.includes('edit')) {\n logger.warn(COMPONENT_NAMES.MARKER, 'edit 按钮未启用');\n return;\n }\n if (!value) {\n logger.warn(COMPONENT_NAMES.MARKER, '无选中的标注,无法编辑');\n return;\n }\n\n // 边界检查:确保 dataSource 有效\n if (!Array.isArray(dataSource)) {\n logger.warn(COMPONENT_NAMES.MARKER, 'dataSource 无效');\n return;\n }\n\n const marker = dataSource.find(m => m?.id === value);\n if (!marker) {\n logger.warn(COMPONENT_NAMES.MARKER, '未找到选中的标注');\n return;\n }\n\n safeCall(onEditRef.current, { markerId: value, marker });\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '编辑标注失败', error);\n }\n }, [value, dataSource]);\n\n /**\n * 进入移动模式\n */\n const handleMove = useCallback(() => {\n try {\n if (!enabledButtonsRef.current?.includes('move')) {\n logger.warn(COMPONENT_NAMES.MARKER, 'move 按钮未启用');\n return;\n }\n if (!value) {\n logger.warn(COMPONENT_NAMES.MARKER, '无选中的标注,无法移动');\n return;\n }\n\n // 边界检查:确保 dataSource 有效\n if (!Array.isArray(dataSource)) {\n logger.warn(COMPONENT_NAMES.MARKER, 'dataSource 无效');\n return;\n }\n\n const marker = dataSource.find(m => m?.id === value);\n if (!marker) {\n logger.warn(COMPONENT_NAMES.MARKER, '未找到选中的标注');\n return;\n }\n\n // 边界检查:确保 position 有效\n if (!marker.position || !Array.isArray(marker.position) || marker.position.length < 2) {\n logger.warn(COMPONENT_NAMES.MARKER, '标注位置无效');\n return;\n }\n\n setCurrentMode('move');\n dragStartPosRef.current = [...marker.position] as Coordinate;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '进入移动模式失败', error);\n setCurrentMode('idle');\n }\n }, [value, dataSource]);\n\n /**\n * 删除选中的标注\n */\n const handleDelete = useCallback(() => {\n try {\n if (!enabledButtonsRef.current?.includes('delete')) {\n logger.warn(COMPONENT_NAMES.MARKER, 'delete 按钮未启用');\n return;\n }\n if (!value) {\n logger.warn(COMPONENT_NAMES.MARKER, '无选中的标注,无法删除');\n return;\n }\n\n safeCall(onDeleteRef.current, { markerId: value });\n handleSelect(null);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '删除标注失败', error);\n }\n }, [value, handleSelect]);\n\n /**\n * 取消当前操作\n */\n const handleCancel = useCallback(() => {\n try {\n // 移动模式下取消时恢复 marker 原始位置\n if (currentMode === 'move' && value) {\n // 从 dataSource 中找到原始位置\n const originalMarker = dataSource.find(m => m?.id === value);\n if (originalMarker?.position) {\n restorePositionRef.current?.(value, originalMarker.position);\n }\n }\n\n setCurrentMode('idle');\n setTempMarker(null);\n setDragPosition(null);\n dragStartPosRef.current = null;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '取消操作失败', error);\n // 强制重置状态\n setCurrentMode('idle');\n }\n }, [currentMode, value, dataSource]);\n\n const handleCancelRef = useLatestRef(handleCancel);\n\n // ESC 键监听\n useEffect(() => {\n if (currentMode !== 'create' && currentMode !== 'move') return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n try {\n handleCancelRef.current();\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, 'ESC 取消失败', error);\n }\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [currentMode]);\n\n /**\n * 退出创建模式(供 ref 调用)\n */\n const exitCreateMode = useCallback(() => {\n try {\n setCurrentMode('idle');\n setTempMarker(null);\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '退出创建模式失败', error);\n setCurrentMode('idle');\n }\n }, []);\n\n /**\n * 退出编辑模式(供 ref 调用,退出所有编辑状态)\n */\n const exitEditMode = useCallback(() => {\n try {\n setCurrentMode('idle');\n setTempMarker(null);\n setDragPosition(null);\n dragStartPosRef.current = null;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '退出编辑模式失败', error);\n setCurrentMode('idle');\n }\n }, []);\n\n /**\n * 处理地图点击(创建模式下)\n */\n const handleMapClick = useCallback(\n (latlng: L.LatLng) => {\n try {\n // 边界检查:确保 latlng 有效\n if (!latlng || typeof latlng.lat !== 'number' || typeof latlng.lng !== 'number') {\n logger.warn(COMPONENT_NAMES.MARKER, '点击位置无效');\n return;\n }\n\n if (currentMode === 'create') {\n const newMarker: MarkerData = {\n id: `temp-${Date.now()}`,\n position: [latlng.lat, latlng.lng],\n title: '新建标注点',\n description: '点击保存确认',\n };\n setTempMarker(newMarker);\n }\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '处理地图点击失败', error);\n }\n },\n [currentMode]\n );\n\n /**\n * 保存操作\n */\n const handleSave = useCallback(() => {\n try {\n if (currentMode === 'create' && tempMarker) {\n // 边界检查:确保 tempMarker 有效\n if (!tempMarker.position || !Array.isArray(tempMarker.position)) {\n logger.warn(COMPONENT_NAMES.MARKER, '临时标注位置无效');\n return;\n }\n\n const result: MarkerCreateResult = {\n position: [...tempMarker.position] as Coordinate,\n title: tempMarker.title || '',\n description: tempMarker.description || '',\n };\n\n safeCall(onCreateRef.current, result);\n safeCall(onSaveRef.current, { mode: 'create', ...result });\n\n // ============================================================\n // 【重要】此处绝不能清空 tempMarker!\n // ============================================================\n // 原因:点击保存后,父组件通常会打开表单让用户填写标注信息。\n // 如果此时清空 tempMarker,临时标注会立即消失,用户在填写表单时\n // 将无法看到标注的实际位置,体验极差。\n //\n // 正确流程:\n // 1. 用户点击保存 → 触发 onCreate 回调\n // 2. 父组件打开表单,tempMarker 保持显示\n // 3. 用户填写完成提交 → 父组件调用 exitCreateMode()\n // 4. exitCreateMode() 会清空 tempMarker 并退出创建模式\n // ============================================================\n } else if (currentMode === 'move' && value) {\n // 移动模式下没有实际拖动,直接退出移动模式\n setCurrentMode('idle');\n setDragPosition(null);\n dragStartPosRef.current = null;\n } else {\n logger.warn(COMPONENT_NAMES.MARKER, '无法保存:状态不匹配');\n }\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '保存操作失败', error);\n }\n }, [currentMode, tempMarker, value]);\n\n /**\n * 拖拽结束处理\n */\n const handleDragEnd = useCallback(\n (id: string | number, e: L.DragEndEvent) => {\n try {\n // 边界检查:确保事件和目标有效\n if (!e || !e.target) {\n logger.warn(COMPONENT_NAMES.MARKER, '拖拽事件无效');\n return;\n }\n\n const target = e.target as L.Marker;\n const latLng = target.getLatLng();\n\n // 边界检查:确保坐标有效\n if (!latLng || typeof latLng.lat !== 'number' || typeof latLng.lng !== 'number') {\n logger.warn(COMPONENT_NAMES.MARKER, '拖拽后坐标无效');\n return;\n }\n\n const newPos: Coordinate = [latLng.lat, latLng.lng];\n\n if (String(id).startsWith('temp-') && tempMarker) {\n setTempMarker(prev => {\n if (!prev) return null;\n return { ...prev, position: newPos };\n });\n } else {\n setDragPosition(newPos);\n }\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '处理拖拽结束失败', error);\n }\n },\n [tempMarker]\n );\n\n /**\n * 设置拖拽起始位置(供 ref 方法使用)\n */\n const setDragStartPos = (position: Coordinate) => {\n dragStartPosRef.current = position;\n };\n\n /** 恢复 marker 位置的函数引用(由 MarkerRenderer 设置) */\n const restorePositionRef = useRef<\n ((markerId: string | number, originalPosition?: Coordinate) => void) | null\n >(null);\n\n /**\n * 设置恢复 marker 位置的函数\n * @description 由 MarkerRenderer 调用,传入 restoreMarkerPosition 方法\n */\n const setRestorePosition = (\n fn: (markerId: string | number, originalPosition?: Coordinate) => void\n ) => {\n restorePositionRef.current = fn;\n };\n\n return {\n currentMode,\n tempMarker,\n dragPosition,\n setCurrentMode,\n setTempMarker,\n setDragPosition,\n setDragStartPos,\n setRestorePosition,\n handleCreate,\n handleEdit,\n handleMove,\n handleDelete,\n handleCancel,\n handleSave,\n handleDragEnd,\n handleMapClick,\n exitCreateMode,\n exitEditMode,\n };\n}\n\nexport default useEditHandlers;\n","/**\n * @fileoverview 地图飞行动画工具函数\n * @description 根据飞行距离动态计算动画时长等通用工具\n * @module utils/mapAnimation\n */\n\nimport { getDistance } from './geometry';\n\n/**\n * 根据飞行距离动态计算 flyTo/flyToBounds 的 duration\n * 对数缩放:<100m → 0.2s, ~10km → 0.45s, ~1000km → 0.75s, 上限 1s\n * @param from - 起点坐标 [lat, lng]\n * @param to - 终点坐标 [lat, lng]\n * @param minDuration - 最小时长(秒),默认 0.2\n * @param maxDuration - 最大时长(秒),默认 1\n */\nexport function calcFlyDuration(\n from: [number, number],\n to: [number, number],\n minDuration = 0.2,\n maxDuration = 1\n): number {\n const distance = getDistance(from, to);\n return Math.max(\n minDuration,\n Math.min(\n maxDuration,\n minDuration +\n (Math.log10(Math.max(distance, 100)) / Math.log10(1000000)) * (maxDuration - minDuration)\n )\n );\n}\n","/**\n * @fileoverview Marker 命令式方法 hook\n * @description 将 useImperativeHandle 中的方法逻辑提取为独立 hook,便于维护\n * @module components/Marker/useMarkerCommands\n */\n\nimport { useCallback, useRef, useImperativeHandle } from 'react';\nimport L from 'leaflet';\nimport type { MarkerRef, MarkerData, MarkerEvents, Coordinate } from '../../types';\nimport { calcFlyDuration } from '../../utils/mapAnimation';\n\ninterface UseMarkerCommandsOptions {\n map: L.Map | null;\n value: string | number | null;\n dataSource: MarkerData[];\n handleSelect: (id: string | number | null, index?: number) => void;\n onClickRef: React.MutableRefObject<((item: MarkerData) => void) | undefined>;\n onRowRef: React.MutableRefObject<((item: MarkerData, index: number) => MarkerEvents) | undefined>;\n setActiveTooltipId: (id: string | number | null) => void;\n setTooltipContentMap: React.Dispatch<\n React.SetStateAction<Map<string | number, { title?: string; description?: string }>>\n >;\n exitCreateMode: () => void;\n exitEditMode: () => void;\n closeTooltip: () => void;\n // 编辑模式相关\n currentMode: 'idle' | 'create' | 'move';\n tempMarker: MarkerData | null;\n _dragPosition: Coordinate | null;\n setCurrentMode: (mode: 'idle' | 'create' | 'move') => void;\n setTempMarker: (marker: MarkerData | null) => void;\n _setDragPosition: (position: Coordinate | null) => void;\n /** 设置拖拽起始位置(用于 ref 方法进入移动模式) */\n setDragStartPos: (position: Coordinate) => void;\n}\n\n/**\n * Marker 命令式方法 hook\n * @description activeTooltipId 和 tooltipContentMap 的状态由调用方管理,\n * 本 hook 只负责将方法绑定到 ref 上\n */\nexport function useMarkerCommands(\n ref: React.Ref<MarkerRef>,\n options: UseMarkerCommandsOptions\n): void {\n const {\n map,\n value,\n dataSource,\n handleSelect,\n onClickRef,\n onRowRef,\n setActiveTooltipId,\n setTooltipContentMap,\n exitCreateMode,\n exitEditMode,\n closeTooltip,\n currentMode,\n tempMarker,\n _dragPosition,\n setCurrentMode,\n setTempMarker,\n _setDragPosition,\n setDragStartPos,\n } = options;\n\n // 用于存储编辑模式下的本地数据\n const localDataRef = useRef<MarkerData | null>(null);\n\n const openTooltip = useCallback(\n (markerId: string | number) => {\n setActiveTooltipId(markerId);\n },\n [setActiveTooltipId]\n );\n\n const openAllTooltips = useCallback(() => {\n setActiveTooltipId('all');\n }, [setActiveTooltipId]);\n\n const updateTooltipContent = useCallback(\n (markerId: string | number, content: { title?: string; description?: string }) => {\n setTooltipContentMap(prev => {\n const newMap = new Map(prev);\n const existing = newMap.get(markerId) || {};\n newMap.set(markerId, { ...existing, ...content });\n return newMap;\n });\n },\n [setTooltipContentMap]\n );\n\n const getSelected = useCallback((): { value: (string | number)[]; data: MarkerData[] } | null => {\n if (!value) return null;\n const marker = dataSource.find(m => m.id === value);\n if (!marker) return null;\n return { value: [value], data: [marker] };\n }, [value, dataSource]);\n\n const setSelected = useCallback(\n (markerId: string | number) => {\n const index = dataSource.findIndex(m => m.id === markerId);\n if (index < 0) return;\n const marker = dataSource[index];\n handleSelect(marker.id, index);\n onClickRef.current?.(marker);\n const rowEvents = onRowRef.current?.(marker, index);\n rowEvents?.onClick?.(marker);\n },\n [dataSource, handleSelect, onClickRef, onRowRef]\n );\n\n const clearSelection = useCallback(() => {\n handleSelect(null);\n }, [handleSelect]);\n\n const fitBounds = useCallback(\n (filter?: (string | number)[], options?: { callback?: () => void }) => {\n if (!map) return;\n let targetData = dataSource;\n if (filter && filter.length > 0) {\n targetData = dataSource.filter(m => filter.includes(m.id));\n }\n if (targetData.length === 0) return;\n const bounds = L.latLngBounds(targetData.map(m => m.position as L.LatLngExpression));\n map.fitBounds(bounds);\n if (options?.callback) map.once('moveend', options.callback);\n },\n [dataSource, map]\n );\n\n const flyTo = useCallback(\n (markerId?: string | number, options?: { zoom?: number; callback?: () => void }) => {\n if (!map) return;\n if (markerId === undefined) {\n if (dataSource.length === 0) return;\n const bounds = L.latLngBounds(dataSource.map(m => m.position as L.LatLngExpression));\n const currentCenter = map.getCenter();\n const targetCenter = bounds.getCenter();\n const duration = calcFlyDuration(\n [currentCenter.lat, currentCenter.lng],\n [targetCenter.lat, targetCenter.lng],\n 0.5,\n 1.5\n );\n map.flyToBounds(bounds, { duration, maxZoom: options?.zoom });\n if (options?.callback) map.once('moveend', options.callback);\n return;\n }\n const marker = dataSource.find(m => m.id === markerId);\n if (marker) {\n const currentCenter = map.getCenter();\n const duration = calcFlyDuration(\n [currentCenter.lat, currentCenter.lng],\n marker.position as [number, number],\n 0.3,\n 1.2\n );\n const targetZoom = options?.zoom ?? map.getZoom();\n map.flyTo(marker.position as L.LatLngExpression, targetZoom, { duration });\n if (options?.callback) map.once('moveend', options.callback);\n }\n },\n [dataSource, map]\n );\n\n const edit = useCallback(\n (editType: 'move', markerId?: string | number) => {\n try {\n const targetId = markerId ?? value;\n if (!targetId) {\n console.warn('无选中的标注,无法移动');\n return false;\n }\n\n if (!Array.isArray(dataSource)) {\n console.warn('dataSource 无效');\n return false;\n }\n\n const marker = dataSource.find(m => m?.id === targetId);\n if (!marker) {\n console.warn('未找到选中的标注');\n return false;\n }\n\n if (!marker.position || !Array.isArray(marker.position) || marker.position.length < 2) {\n console.warn('标注位置无效');\n return false;\n }\n\n // 保存到本地数据副本\n localDataRef.current = { ...marker };\n\n // 设置拖拽起始位置\n setDragStartPos(marker.position as Coordinate);\n\n // 进入移动模式\n setCurrentMode('move');\n return true;\n } catch (error) {\n console.error('进入编辑模式失败', error);\n setCurrentMode('idle');\n return false;\n }\n },\n [value, dataSource, setCurrentMode, setDragStartPos]\n );\n\n const create = useCallback(() => {\n setCurrentMode('create');\n setTempMarker(null);\n closeTooltip();\n handleSelect(null);\n }, [setCurrentMode, setTempMarker, closeTooltip, handleSelect]);\n\n const getLocalData = useCallback((): MarkerData | null => {\n if (currentMode === 'idle') return null;\n\n if (currentMode === 'create' && tempMarker) {\n return { ...tempMarker };\n }\n\n if (currentMode === 'move' && value) {\n const marker = dataSource.find(m => m.id === value);\n if (marker) {\n return { ...marker };\n }\n }\n\n return localDataRef.current ? { ...localDataRef.current } : null;\n }, [currentMode, tempMarker, value, dataSource]);\n\n useImperativeHandle(\n ref,\n () => ({\n exitCreateMode,\n exitEditMode,\n openTooltip,\n openAllTooltips,\n closeTooltip,\n getSelected,\n setSelected,\n clearSelection,\n flyTo,\n fitBounds,\n updateTooltipContent,\n edit,\n create,\n getLocalData,\n }),\n [\n exitCreateMode,\n exitEditMode,\n openTooltip,\n openAllTooltips,\n closeTooltip,\n getSelected,\n setSelected,\n clearSelection,\n flyTo,\n fitBounds,\n updateTooltipContent,\n edit,\n create,\n getLocalData,\n ]\n );\n}\n","/**\n * @fileoverview Marker 增量更新 hook\n * @description 优化 Marker 渲染,通过增量更新避免全量销毁重建\n * @module components/Marker/useMarkerIncrementalUpdate\n * @since 2.1.0 性能优化\n */\n\nimport { useRef, useCallback, useEffect } from 'react';\nimport L from 'leaflet';\nimport type { MarkerData, MarkerEvents, Coordinate } from '../../types';\nimport { logger, COMPONENT_NAMES } from '../../utils/errorHandling';\n\n/** 扩展 Leaflet Marker 类型以支持自定义属性 */\ninterface MarkerWithRestore extends L.Marker {\n /** 存储移动前的原始位置 */\n _originalPosition?: Coordinate;\n /** 恢复原始位置的方法 */\n restoreOriginalPosition?: () => void;\n}\n\n/** Marker 实例与元数据映射 */\ninterface MarkerEntry {\n marker: MarkerWithRestore;\n data: MarkerData;\n hasTooltip: boolean;\n /** 上次生成的图标实例,用于检测图标配置变化 */\n lastIcon: L.DivIcon | null;\n /** 上次的 popupAnchor,用于检测弹窗锚点变化 */\n lastPopupAnchor: [number, number] | null;\n}\n\n/** 增量更新配置 */\ninterface IncrementalUpdateOptions {\n map: L.Map | null;\n /** 获取 Marker 图标 */\n getIcon: (\n item: MarkerData,\n isSelected: boolean,\n isEditing: boolean,\n isTemp: boolean\n ) => L.DivIcon;\n /** 获取永久 Tooltip 状态 */\n getPermanent: (item: MarkerData) => boolean;\n /** 获取 Tooltip 偏移 */\n getTooltipOffset: (item: MarkerData, isSelected?: boolean, isTemp?: boolean) => [number, number];\n /** 当前选中的 ID */\n selectedId: string | number | null;\n /** 当前编辑模式 */\n editMode: 'idle' | 'create' | 'move';\n /** 活动的 Tooltip ID */\n activeTooltipId: string | number | null;\n /** Tooltip 内容映射 */\n tooltipContentMap: Map<string | number, { title?: string; description?: string }>;\n /** 点击处理 */\n onClick: (item: MarkerData, index: number, events: MarkerEvents) => void;\n /** 右键处理 */\n onContextMenu: (item: MarkerData, e: L.LeafletMouseEvent, events: MarkerEvents) => void;\n /** 拖拽结束处理 */\n onDragEnd: (id: string | number, e: L.DragEndEvent) => void;\n /** 获取行事件 */\n onRow?: (item: MarkerData, index: number) => MarkerEvents;\n}\n\n/** 增量更新结果 */\ninterface IncrementalUpdateResult {\n /** 更新渲染 */\n updateMarkers: (displayMarkers: MarkerData[]) => void;\n /** 清理所有 Marker */\n clearMarkers: () => void;\n /** 获取当前 Marker 数量 */\n getMarkerCount: () => number;\n /** 恢复指定 marker 到原始位置 */\n restoreMarkerPosition: (markerId: string | number, originalPosition?: Coordinate) => void;\n}\n\n/**\n * Marker 增量更新 hook\n * @description 通过 diff 算法只更新变化的 Marker,避免全量重建\n *\n * ## 图标更新机制\n *\n * `updateMarker` 函数通过比较 `lastIcon !== getIcon()` 来检测图标配置变化,\n * 确保编辑状态、选中状态等变化时图标能正确更新。\n *\n * @example\n * ```tsx\n * const { updateMarkers, clearMarkers } = useMarkerIncrementalUpdate({\n * map,\n * getIcon: getItemIcon,\n * selectedId: value,\n * editMode: edit.currentMode,\n * ...\n * });\n *\n * // 数据变化时调用\n * updateMarkers(displayMarkers);\n * ```\n */\nexport function useMarkerIncrementalUpdate(\n options: IncrementalUpdateOptions\n): IncrementalUpdateResult {\n const {\n map,\n getIcon,\n getPermanent,\n getTooltipOffset,\n selectedId,\n editMode,\n activeTooltipId,\n tooltipContentMap,\n onClick,\n onContextMenu,\n onDragEnd,\n onRow,\n } = options;\n\n // Marker 实例映射 (id -> MarkerEntry)\n const markersMapRef = useRef<Map<string | number, MarkerEntry>>(new Map());\n\n /**\n * 创建单个 Marker\n */\n const createMarker = useCallback(\n (item: MarkerData, index: number): L.Marker | null => {\n if (!map) return null;\n\n try {\n const isSelected = item.id === selectedId;\n const isEditing = editMode === 'move' && isSelected;\n const isTemp = String(item.id).startsWith('temp-');\n const isDraggable = isEditing || (editMode === 'create' && isTemp);\n const showTooltip =\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all';\n const rowEvents = onRow?.(item, index) ?? {};\n\n const icon = getIcon(item, isSelected, isEditing, isTemp);\n const marker = L.marker(item.position, {\n icon,\n draggable: isDraggable,\n }).addTo(map) as MarkerWithRestore;\n\n // 移动模式下保存原始位置和恢复方法到 marker 实例\n if (isEditing) {\n marker._originalPosition = [...item.position];\n marker.restoreOriginalPosition = () => {\n if (marker._originalPosition) {\n marker.setLatLng(marker._originalPosition as L.LatLngExpression);\n delete marker._originalPosition;\n delete marker.restoreOriginalPosition;\n }\n };\n }\n\n // 绑定事件\n if (!isTemp) {\n marker.on('click', () => onClick(item, index, rowEvents));\n marker.on('contextmenu', (e: L.LeafletMouseEvent) => onContextMenu(item, e, rowEvents));\n }\n marker.on('dragend', (e: L.DragEndEvent) => onDragEnd(item.id, e));\n\n // 绑定 Tooltip\n if (showTooltip) {\n const tooltipContent = tooltipContentMap.get(item.id);\n const tooltipHtml = `<div class=\"marker-popup\">\n <strong>${tooltipContent?.title ?? item.title ?? 'No Title'}</strong>\n ${(tooltipContent?.description ?? item.description) ? `<p>${tooltipContent?.description ?? item.description}</p>` : ''}\n </div>`;\n marker.bindTooltip(tooltipHtml, {\n permanent: true,\n direction: 'top',\n offset: getTooltipOffset(item, isSelected, isTemp),\n });\n }\n\n return marker;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '创建 Marker 失败', error);\n return null;\n }\n },\n [\n map,\n getIcon,\n getPermanent,\n activeTooltipId,\n tooltipContentMap,\n getTooltipOffset,\n selectedId,\n editMode,\n onClick,\n onContextMenu,\n onDragEnd,\n onRow,\n ]\n );\n\n /**\n * 更新单个 Marker(位置、图标、Tooltip)\n */\n const updateMarker = useCallback(\n (entry: MarkerEntry, item: MarkerData, index: number): boolean => {\n const { marker, data: oldData, hasTooltip: oldHasTooltip, lastIcon } = entry;\n\n try {\n const isSelected = item.id === selectedId;\n const isEditing = editMode === 'move' && isSelected;\n const isTemp = String(item.id).startsWith('temp-');\n const isDraggable = isEditing || (editMode === 'create' && isTemp);\n const showTooltip =\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all';\n const rowEvents = onRow?.(item, index) ?? {};\n\n // 位置变化\n if (oldData.position[0] !== item.position[0] || oldData.position[1] !== item.position[1]) {\n marker.setLatLng(item.position as L.LatLngExpression);\n }\n\n // ========== 图标变化检测 ==========\n const wasSelected = entry.data.id === selectedId;\n\n // 检测选中状态变化(独立于数据项属性)\n const selectionChanged = wasSelected !== isSelected;\n\n // 始终调用 getIcon 获取最新图标\n const icon = getIcon(item, isSelected, isEditing, isTemp);\n // 比较当前生成的图标与上次存储的图标实例\n const iconInstanceChanged = lastIcon !== icon;\n\n // 选中状态变化或图标变化时更新\n if (selectionChanged || iconInstanceChanged || editMode !== 'idle') {\n marker.setIcon(icon);\n // 更新存储的图标实例,用于下次比较\n entry.lastIcon = icon;\n }\n\n // 拖拽状态变化\n if (marker.options.draggable !== isDraggable) {\n marker.options.draggable = isDraggable;\n if (isDraggable) {\n marker.dragging?.enable();\n } else {\n marker.dragging?.disable();\n }\n }\n\n // Tooltip 变化\n // 选中状态时优先使用 selectedIcon 的 popupAnchor\n const currentPopupAnchor =\n isSelected || isTemp\n ? item.selectedIcon && typeof item.selectedIcon === 'object'\n ? item.selectedIcon.popupAnchor\n : undefined\n : item.icon && typeof item.icon === 'object'\n ? item.icon.popupAnchor\n : undefined;\n const popupAnchorChanged =\n JSON.stringify(currentPopupAnchor) !== JSON.stringify(entry.lastPopupAnchor);\n\n if (showTooltip !== oldHasTooltip || popupAnchorChanged) {\n if (showTooltip) {\n const tooltipContent = tooltipContentMap.get(item.id);\n const tooltipHtml = `<div class=\"marker-popup\">\n <strong>${tooltipContent?.title ?? item.title ?? 'No Title'}</strong>\n ${(tooltipContent?.description ?? item.description) ? `<p>${tooltipContent?.description ?? item.description}</p>` : ''}\n </div>`;\n // 重新绑定 tooltip 以应用新的 popupAnchor\n marker.unbindTooltip();\n marker.bindTooltip(tooltipHtml, {\n permanent: true,\n direction: 'top',\n offset: getTooltipOffset(item, isSelected, isTemp),\n });\n entry.lastPopupAnchor = currentPopupAnchor ?? null;\n } else {\n marker.unbindTooltip();\n entry.lastPopupAnchor = null;\n }\n }\n\n // 更新事件绑定\n marker.off('click');\n marker.off('contextmenu');\n marker.off('dragend');\n\n if (!isTemp) {\n marker.on('click', () => onClick(item, index, rowEvents));\n marker.on('contextmenu', (e: L.LeafletMouseEvent) => onContextMenu(item, e, rowEvents));\n }\n marker.on('dragend', (e: L.DragEndEvent) => onDragEnd(item.id, e));\n\n return true;\n } catch (error) {\n logger.error(COMPONENT_NAMES.MARKER, '更新 Marker 失败', error);\n return false;\n }\n },\n [\n selectedId,\n editMode,\n getIcon,\n getPermanent,\n activeTooltipId,\n tooltipContentMap,\n getTooltipOffset,\n onClick,\n onContextMenu,\n onDragEnd,\n onRow,\n ]\n );\n\n /**\n * 增量更新 Markers\n * @description 通过 diff 算法只处理变化的 Marker\n */\n const updateMarkers = useCallback(\n (displayMarkers: MarkerData[]) => {\n if (!map) return;\n\n const currentIds = new Set(displayMarkers.map(m => m.id));\n const existingIds = new Set(markersMapRef.current.keys());\n\n // 1. 删除不再存在的 Marker\n existingIds.forEach(id => {\n if (!currentIds.has(id)) {\n const entry = markersMapRef.current.get(id);\n if (entry) {\n entry.marker.remove();\n markersMapRef.current.delete(id);\n }\n }\n });\n\n // 2. 创建或更新 Marker\n displayMarkers.forEach((item, index) => {\n const existing = markersMapRef.current.get(item.id);\n\n if (existing) {\n // 更新现有 Marker\n const success = updateMarker(existing, item, index);\n if (success) {\n markersMapRef.current.set(item.id, {\n marker: existing.marker,\n data: item,\n hasTooltip:\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all',\n lastIcon: existing.lastIcon, // 保留上次生成的图标实例\n lastPopupAnchor: existing.lastPopupAnchor, // 保留上次的 popupAnchor\n });\n } else {\n // 更新失败,尝试重建\n existing.marker.remove();\n markersMapRef.current.delete(item.id);\n const newMarker = createMarker(item, index);\n if (newMarker) {\n markersMapRef.current.set(item.id, {\n marker: newMarker,\n data: item,\n hasTooltip:\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all',\n lastIcon: newMarker.getIcon(), // 从 marker 获取图标实例\n lastPopupAnchor:\n item.icon && typeof item.icon === 'object'\n ? (item.icon.popupAnchor ?? null)\n : null,\n });\n }\n }\n } else {\n // 创建新 Marker\n const newMarker = createMarker(item, index);\n if (newMarker) {\n markersMapRef.current.set(item.id, {\n marker: newMarker,\n data: item,\n hasTooltip:\n getPermanent(item) || activeTooltipId === item.id || activeTooltipId === 'all',\n lastIcon: newMarker.getIcon(), // 从 marker 获取图标实例\n lastPopupAnchor:\n item.icon && typeof item.icon === 'object' ? (item.icon.popupAnchor ?? null) : null,\n });\n }\n }\n });\n },\n [map, createMarker, updateMarker, getPermanent, activeTooltipId]\n );\n\n /**\n * 清理所有 Markers\n */\n const clearMarkers = useCallback(() => {\n markersMapRef.current.forEach(entry => entry.marker.remove());\n markersMapRef.current.clear();\n }, []);\n\n /**\n * 获取当前 Marker 数量\n */\n const getMarkerCount = useCallback(() => markersMapRef.current.size, []);\n\n /**\n * 恢复指定 marker 到原始位置\n * @description 通过 marker 实例上的 restoreOriginalPosition 方法恢复\n * @param markerId 要恢复的 marker ID\n * @param originalPosition 可选:原始位置。如果提供,直接使用此位置恢复;否则使用 marker 上的 _originalPosition\n */\n const restoreMarkerPosition = useCallback(\n (markerId: string | number, originalPosition?: Coordinate) => {\n const entry = markersMapRef.current.get(markerId);\n const marker = entry?.marker as MarkerWithRestore | undefined;\n if (originalPosition) {\n // 直接使用传入的原始位置恢复\n marker?.setLatLng(originalPosition as L.LatLngExpression);\n // 清除 marker 上的原始位置信息\n delete marker?._originalPosition;\n delete marker?.restoreOriginalPosition;\n } else if (marker?.restoreOriginalPosition) {\n // 使用 marker 实例上存储的原始位置\n marker.restoreOriginalPosition();\n }\n },\n []\n );\n\n // 组件卸载时清理\n useEffect(() => {\n return () => clearMarkers();\n }, [clearMarkers]);\n\n return {\n updateMarkers,\n clearMarkers,\n getMarkerCount,\n restoreMarkerPosition,\n };\n}\n\nexport default useMarkerIncrementalUpdate;\n","/**\n * @fileoverview Marker 显示模式配置解析\n * @description 将 boolean | MarkerDisplayModeConfig 三态配置解析为统一的配置对象\n * @module components/Marker/parseDisplayModeConfig\n */\n\nimport type { MarkerDisplayModeConfig } from '../../types';\n\n/** 解析后的显示模式配置 */\nexport interface ParsedDisplayModeConfig {\n /** 是否启用显示模式 */\n enabled: boolean;\n /** 聚合半径(像素) */\n radius: number;\n /** 聚合生效的最大缩放级别 */\n maxZoom: number;\n /** 最小聚合数量 */\n minPoints: number;\n /** 点击聚合气泡后的行为 */\n onClickBehavior: 'zoom' | 'expand';\n}\n\n/**\n * 解析 displayMode 配置\n * - undefined / false → 关闭显示模式\n * - true → 启用默认配置\n * - object → 自定义参数\n */\nexport function parseDisplayModeConfig(\n displayModeConfig: boolean | MarkerDisplayModeConfig | undefined\n): ParsedDisplayModeConfig {\n if (displayModeConfig === undefined || displayModeConfig === false) {\n return {\n enabled: false,\n radius: 40,\n maxZoom: 18,\n minPoints: 2,\n onClickBehavior: 'zoom',\n };\n }\n\n if (displayModeConfig === true) {\n return {\n enabled: true,\n radius: 40,\n maxZoom: 18,\n minPoints: 2,\n onClickBehavior: 'zoom',\n };\n }\n\n const config = displayModeConfig;\n return {\n enabled: true,\n radius: config.radius ?? 40,\n maxZoom: config.maxZoom ?? 18,\n minPoints: config.minPoints ?? 2,\n onClickBehavior: config.onClickBehavior ?? 'zoom',\n };\n}\n","/**\n * @fileoverview Marker 标注组件\n * @description 用于在地图上显示标注点,支持自定义图标、动画效果、编辑模式、聚合和 Tooltip 控制\n * @module components/Marker\n * @since 2.0.0 已移除 react-leaflet 依赖\n * @since 2.1.0 性能优化:增量更新、视口防抖、边界检查\n */\n\n/* eslint-disable react-hooks/exhaustive-deps -- ref 回调依赖由调用方保证 */\n\nimport { useMemo, useState, useCallback, useRef, useEffect, forwardRef, memo } from 'react';\nimport L from 'leaflet';\nimport Supercluster from 'supercluster';\nimport { useMap } from '../../context/MapContext';\nimport { useConfig } from '../../context/ConfigContext';\nimport { logger } from '../../utils/errorHandling';\n\nimport MarkerEditToolbar from './toolbar';\nimport MapClickHandler from './MapClickHandler';\nimport ClusterView from './ClusterView';\nimport Label3D from '../shared/Label3D';\nimport {\n useLatestRef,\n useEditMode,\n useLoadingOverlay,\n useViewportDebounce,\n useLifecycle,\n useNormalizedDataSource,\n useAutoFit,\n} from '../../hooks';\nimport { useIconConfig } from './useIconConfig';\nimport { useEditHandlers } from './useEditHandlers';\nimport { useMarkerCommands } from './useMarkerCommands';\nimport { useMarkerIncrementalUpdate } from './useMarkerIncrementalUpdate';\nimport { parseDisplayModeConfig } from './parseDisplayModeConfig';\nimport { createCachedIcon } from '../../utils/iconCache';\nimport { MARKER_DEFAULT_ICON } from '../../constants/styles';\nimport type {\n MarkerData,\n MarkerProps,\n MarkerRef,\n MarkerEvents,\n ClusterIconConfig,\n MarkerFieldNames,\n Coordinate,\n} from '../../types';\n\nconst DEFAULT_FIELD_NAMES: Required<MarkerFieldNames> = {\n id: 'id',\n title: 'title',\n position: 'position',\n description: 'description',\n};\n\n/** Marker 点属性 */\ninterface MarkerPointProperties {\n id: string | number;\n markerData: MarkerData;\n}\n\n/** supercluster 索引类型 */\ntype MarkerClusterIndex = Supercluster<MarkerPointProperties>;\n\n/**\n * Marker 标注组件\n *\n * @description\n * 用于在地图上显示标注点,支持以下功能:\n * - 自定义图标:预设名称、SVG字符串、图片URL\n * - 动画效果:脉冲动画\n * - 编辑模式:创建、移动、删除标注点\n * - Tooltip 控制:打开/关闭指定或所有标注点的 Tooltip\n * - 选中状态:支持受控和非受控模式\n * - 聚合显示:支持 supercluster 聚合算法\n *\n * @example\n * ```tsx\n * import { Marker } from 'agri-map-components';\n * import { useRef } from 'react';\n *\n * // 基础用法\n * <Marker\n * icon=\"marker-blue\"\n * dataSource={[\n * { id: 1, position: [29.95, 117.98], title: '标注点A' },\n * { id: 2, position: [29.96, 117.99], title: '标注点B' },\n * ]}\n * onClick={(item) => console.log('点击:', item)}\n * />\n *\n * // 使用 ref 控制方法\n * const markerRef = useRef(null);\n * <Marker\n * ref={markerRef}\n * dataSource={data}\n * value={value}\n * onSelect={setValue}\n * />\n * <button onClick={() => markerRef.current?.openAllTooltips()}>显示所有 Tooltip</button>\n *\n * // 编辑模式\n * <Marker\n * editMode={['create', 'move', 'delete']}\n * dataSource={data}\n * onCreate={(result) => console.log('新建:', result)}\n * onMove={(result) => console.log('移动:', result)}\n * onDelete={(result) => console.log('删除:', result)}\n * />\n * ```\n */\n\n/**\n * Marker 渲染器组件(内部使用)\n * 使用原生 Leaflet API 渲染标记点,采用增量更新优化\n */\ninterface MarkerRendererProps {\n map: L.Map | null;\n displayMarkers: MarkerData[];\n value: string | number | null;\n edit: ReturnType<typeof useEditHandlers>;\n getItemIcon: (\n item: MarkerData,\n isSelected: boolean,\n isEditing: boolean,\n isTemp: boolean\n ) => L.DivIcon;\n getItemPermanent: (item: MarkerData) => boolean;\n activeTooltipId: string | number | null;\n tooltipContentMap: Map<string | number, { title?: string; description?: string }>;\n getTooltipOffset: (item: MarkerData) => [number, number];\n handleClick: (item: MarkerData, index: number, events: MarkerEvents) => void;\n handleContextMenu: (item: MarkerData, e: L.LeafletMouseEvent, events: MarkerEvents) => void;\n onRowRef: React.MutableRefObject<((item: MarkerData, index: number) => MarkerEvents) | undefined>;\n}\n\nconst MarkerRenderer = memo(function MarkerRenderer({\n map,\n displayMarkers,\n value,\n edit,\n getItemIcon,\n getItemPermanent,\n activeTooltipId,\n tooltipContentMap,\n getTooltipOffset,\n handleClick,\n handleContextMenu,\n onRowRef,\n}: MarkerRendererProps) {\n // 使用增量更新 hook\n const { updateMarkers, clearMarkers, restoreMarkerPosition } = useMarkerIncrementalUpdate({\n map,\n getIcon: getItemIcon,\n getPermanent: getItemPermanent,\n getTooltipOffset,\n selectedId: value,\n editMode: edit.currentMode,\n activeTooltipId,\n tooltipContentMap,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n onDragEnd: edit.handleDragEnd,\n onRow: onRowRef.current,\n });\n\n // 暴露 restoreMarkerPosition 方法给父组件\n // 用于取消移动时恢复 marker 原始位置\n if (edit && typeof edit.setRestorePosition === 'function') {\n edit.setRestorePosition(restoreMarkerPosition);\n }\n\n // 增量更新 markers\n useEffect(() => {\n if (!map) return;\n\n // 边界检查:确保 displayMarkers 有效\n if (!Array.isArray(displayMarkers)) {\n logger.warn('MarkerRenderer', 'displayMarkers 不是有效数组');\n clearMarkers();\n return;\n }\n\n // 数据验证:过滤无效数据\n const validMarkers = displayMarkers.filter(item => {\n if (!item) {\n logger.warn('MarkerRenderer', '跳过空数据项');\n return false;\n }\n if (!item.id) {\n logger.warn('MarkerRenderer', '跳过缺少 id 的数据项', item);\n return false;\n }\n if (!item.position || !Array.isArray(item.position) || item.position.length < 2) {\n logger.warn('MarkerRenderer', '跳过无效坐标的数据项', item);\n return false;\n }\n return true;\n });\n\n try {\n updateMarkers(validMarkers);\n } catch (error) {\n logger.error('MarkerRenderer', '更新 markers 失败:', error);\n // 尝试清理后重建\n clearMarkers();\n }\n }, [\n map,\n displayMarkers,\n value,\n edit.currentMode,\n activeTooltipId,\n tooltipContentMap,\n updateMarkers,\n clearMarkers,\n getItemIcon,\n getItemPermanent,\n getTooltipOffset,\n handleClick,\n handleContextMenu,\n onRowRef,\n ]);\n\n return null;\n});\n\nconst Marker = forwardRef<MarkerRef, MarkerProps>(\n (\n {\n dataSource = [],\n fieldNames,\n onClick,\n onContextMenu,\n permanent = false,\n style: styleProp,\n /** 默认图标配置 */\n icon: iconProp,\n /** 选中状态图标配置 */\n selectedIcon: selectedIconProp,\n editMode: editModeProp = false,\n onCreate,\n onEdit,\n onMove,\n onDelete,\n onSave,\n onSelect,\n value: valueProp,\n defaultValue,\n showEditHint = false,\n onLoaded,\n /** 显示模式配置 */\n displayMode,\n onClusterClick,\n onRow,\n /** 标签配置 */\n label,\n loading = false,\n loadingMask,\n lifecycle,\n /** 是否在首次加载数据后自动 fitBounds 适配地图视图 */\n autoFit = false,\n },\n ref\n ) => {\n // ========== 字段映射和数据验证(使用公共 Hook)==========\n const { data: normalizedData, validation } = useNormalizedDataSource<MarkerData>({\n dataSource: dataSource as unknown as Record<string, unknown>[],\n defaultFieldNames: DEFAULT_FIELD_NAMES,\n fieldNames: fieldNames as Partial<Record<string, string>>,\n validation: {\n requiredFields: ['id', 'position'],\n coordinateFields: ['position'],\n coordinateBounds: { lat: { min: -90, max: 90 }, lng: { min: -180, max: 180 } },\n },\n componentType: 'marker',\n mapper: (item, fn) => {\n const position = item[fn.position] as [number, number];\n const [lat, lng] = position;\n return {\n id: item[fn.id] as string | number,\n position: [lat, lng] as Coordinate,\n title: item[fn.title] as string | undefined,\n description: item[fn.description] as string | undefined,\n icon: item.icon as MarkerData['icon'],\n selectedIcon: item.selectedIcon as MarkerData['selectedIcon'],\n } as MarkerData;\n },\n });\n\n // 记录验证错误日志\n if (validation.invalid > 0) {\n logger.warn('Marker', `数据验证失败: ${validation.errors.slice(0, 3).join('; ')}`);\n }\n\n // ========== 数据加载回调 ==========\n const dataSourceRef = useLatestRef(normalizedData);\n const prevDataSourceLengthRef = useRef(0);\n useEffect(() => {\n const len = dataSourceRef.current.length;\n if (onLoaded && len > 0 && len !== prevDataSourceLengthRef.current) {\n prevDataSourceLengthRef.current = len;\n try {\n onLoaded(dataSourceRef.current);\n } catch (error) {\n logger.error('Marker', 'onLoaded 回调执行失败:', error);\n }\n }\n }, [dataSourceRef, onLoaded]);\n\n // ========== 编辑模式 ==========\n const { editEnabled, enabledButtons, customToolbar, color, size, iconOnly } = useEditMode(\n editModeProp,\n ['create', 'edit', 'move', 'delete'] as const\n );\n\n // ========== Map 实例 ==========\n const map = useMap();\n\n // ========== 自动 fitBounds(使用公共 Hook)==========\n useAutoFit({\n data: normalizedData,\n map,\n autoFit,\n getCoordinates: item => [item.position],\n });\n\n // ========== 状态管理 ==========\n const [internalValue, setInternalValue] = useState<string | number | null>(\n defaultValue ?? null\n );\n const [activeTooltipId, setActiveTooltipId] = useState<string | number | null>(null);\n const [tooltipContentMap, setTooltipContentMap] = useState<\n Map<string | number, { title?: string; description?: string }>\n >(new Map());\n\n const isControlled = valueProp !== undefined;\n const value = isControlled ? valueProp : internalValue;\n\n // ========== 聚合配置解析 ==========\n const {\n enabled: displayModeEnabled,\n radius,\n maxZoom,\n minPoints,\n onClickBehavior,\n } = useMemo(() => parseDisplayModeConfig(displayMode), [displayMode]);\n\n // ========== 聚合图标配置 ==========\n /** 从 ConfigContext 获取聚合气泡图标配置 */\n const config = useConfig();\n\n /** 判断是否为有效的 ClusterIconConfig */\n const isValidClusterIconConfig = (val: unknown): val is ClusterIconConfig => {\n return typeof val === 'object' && val !== null && Object.keys(val).length > 0;\n };\n\n const clusterIconConfig = useMemo(() => {\n // 优先级:config.marker.cluster > 默认 CLUSTER_DEFAULT_ICON\n const clusterConfig = config?.marker?.cluster;\n return isValidClusterIconConfig(clusterConfig) ? clusterConfig : undefined;\n }, [config?.marker?.cluster]);\n\n // ========== 视口防抖优化 ==========\n const {\n debouncedZoom,\n debouncedViewVersion: _debouncedViewVersion,\n debouncedBounds,\n } = useViewportDebounce({\n map,\n zoomDebounceDelay: 100,\n moveDebounceDelay: 150,\n useRaf: true,\n });\n\n // ========== 聚合索引构建 ==========\n const clusterIndex = useMemo<MarkerClusterIndex | null>(() => {\n if (!displayModeEnabled || !normalizedData.length) {\n return null;\n }\n\n try {\n const features: Supercluster.PointFeature<MarkerPointProperties>[] = normalizedData.map(\n marker => ({\n type: 'Feature',\n geometry: {\n type: 'Point',\n coordinates: [marker.position[1], marker.position[0]], // [lng, lat]\n },\n properties: {\n id: marker.id,\n markerData: marker,\n },\n })\n );\n\n const index = new Supercluster<MarkerPointProperties>({\n radius,\n maxZoom,\n minPoints,\n });\n index.load(features);\n return index;\n } catch (error) {\n logger.error('Marker', '聚合索引构建失败:', error);\n return null;\n }\n }, [normalizedData, displayModeEnabled, radius, maxZoom, minPoints]);\n\n // ========== 聚合结果获取(使用防抖后的值) ==========\n const clusterResults = useMemo(() => {\n if (!clusterIndex || !map || !debouncedBounds) {\n return [];\n }\n\n try {\n const zoom = Math.floor(debouncedZoom);\n return clusterIndex.getClusters(\n [\n debouncedBounds.getWest(),\n debouncedBounds.getSouth(),\n debouncedBounds.getEast(),\n debouncedBounds.getNorth(),\n ],\n zoom\n );\n } catch (error) {\n logger.error('Marker', '获取聚合结果失败:', error);\n return [];\n }\n }, [clusterIndex, debouncedBounds, debouncedZoom, map]);\n\n // ========== 聚合气泡点击处理 ==========\n const onClusterClickRef = useLatestRef(onClusterClick);\n const clusterIndexRef = useRef<MarkerClusterIndex | null>(null);\n useEffect(() => {\n clusterIndexRef.current = clusterIndex;\n }, [clusterIndex]);\n\n const handleClusterClick = useCallback(\n (feature: Supercluster.ClusterFeature<Supercluster.AnyProps>) => {\n if (!clusterIndexRef.current || !map) {\n logger.warn('Marker', '无法处理聚合点击:地图或索引未初始化');\n return;\n }\n\n try {\n const clusterProps = feature.properties as Supercluster.ClusterProperties;\n const [lng, lat] = feature.geometry.coordinates;\n\n if (onClickBehavior === 'zoom') {\n // 获取聚合内所有点\n const leaves = clusterIndexRef.current.getLeaves(clusterProps.cluster_id, Infinity);\n const markers = leaves.map(l => l.properties.markerData as MarkerData);\n\n // 计算边界并 zoom in\n const leafBounds = L.latLngBounds(\n leaves.map(l => [l.geometry.coordinates[1], l.geometry.coordinates[0]])\n );\n const targetZoom = Math.min(map.getZoom() + 2, maxZoom + 1);\n map.fitBounds(leafBounds, { maxZoom: targetZoom });\n\n onClusterClickRef.current?.(clusterProps.point_count, markers);\n } else {\n // expand 模式:展开聚合\n const expansionZoom = clusterIndexRef.current.getClusterExpansionZoom(\n clusterProps.cluster_id\n );\n map.setView([lat, lng], expansionZoom, { animate: true });\n }\n } catch (error) {\n logger.error('Marker', '处理聚合点击失败:', error);\n }\n },\n [map, onClickBehavior, maxZoom]\n );\n\n // ========== 默认 Marker 图标(聚合模式下单独点使用) ==========\n const defaultMarkerIcon = useMemo(() => {\n try {\n const iconConfig = MARKER_DEFAULT_ICON;\n const iconValue = iconConfig.icon;\n const iconType = typeof iconValue === 'string' ? iconValue : 'point';\n const iconSize = iconConfig.iconSize ?? [48, 48];\n const iconAnchor = iconConfig.iconAnchor;\n const popupAnchor = iconConfig.popupAnchor;\n const animated = iconConfig.animated ?? false;\n const svgIcon = typeof iconValue === 'string' ? undefined : iconValue;\n\n const options: L.DivIconOptions = {\n iconSize: typeof iconSize === 'number' ? [iconSize, iconSize] : iconSize,\n };\n if (iconAnchor) options.iconAnchor = iconAnchor;\n if (popupAnchor) options.popupAnchor = popupAnchor;\n\n return createCachedIcon(iconType, options, animated, svgIcon);\n } catch (error) {\n logger.error('Marker', '创建默认图标失败:', error);\n // 返回基础图标作为 fallback\n return createCachedIcon('point', { iconSize: [48, 48] }, false);\n }\n }, []);\n\n // ========== 回调函数引用 ==========\n const onClickRef = useLatestRef(onClick);\n const onContextMenuRef = useLatestRef(onContextMenu);\n const onSelectRef = useLatestRef(onSelect);\n const onCreateRef = useLatestRef(onCreate);\n const onEditRef = useLatestRef(onEdit);\n const onMoveRef = useLatestRef(onMove);\n const onDeleteRef = useLatestRef(onDelete);\n const onSaveRef = useLatestRef(onSave);\n const onRowRef = useLatestRef(onRow);\n const enabledButtonsRef = useLatestRef(enabledButtons) as React.MutableRefObject<\n ('create' | 'edit' | 'move' | 'delete')[]\n >;\n\n // ========== Tooltip 控制 ==========\n const closeTooltip = useCallback(() => setActiveTooltipId(null), []);\n\n // ========== 编辑事件处理 ==========\n const edit = useEditHandlers({\n enabledButtonsRef,\n value,\n dataSource: normalizedData,\n handleSelect: id => {\n if (!isControlled) setInternalValue(id);\n onSelectRef.current?.(id);\n },\n onCreateRef,\n onEditRef,\n onMoveRef,\n onDeleteRef,\n onSaveRef,\n closeTooltip,\n });\n\n // ========== 判断是否使用聚合渲染 ==========\n const useClusterRender = useMemo(() => {\n return displayModeEnabled && debouncedZoom <= maxZoom && edit.currentMode === 'idle';\n }, [displayModeEnabled, debouncedZoom, maxZoom, edit.currentMode]);\n\n // ========== 图标配置 ==========\n const { getItemIcon, getItemPermanent, getTooltipOffset } = useIconConfig({\n editEnabled,\n currentMode: edit.currentMode,\n permanent,\n style: styleProp,\n icon: iconProp,\n selectedIcon: selectedIconProp,\n });\n\n // ========== 事件处理 ==========\n const handleSelect = useCallback(\n (id: string | number | null, index = -1) => {\n if (!isControlled) {\n setInternalValue(id);\n }\n if (onSelectRef.current) {\n try {\n onSelectRef.current(id);\n } catch (error) {\n logger.error('Marker', 'onSelect 回调执行失败:', error);\n }\n }\n if (id !== null && index >= 0) {\n const item = normalizedData[index];\n if (item) {\n const rowEvents = onRowRef.current?.(item, index);\n if (rowEvents?.onSelect) {\n try {\n rowEvents.onSelect(id);\n } catch (error) {\n logger.error('Marker', 'row.onSelect 回调执行失败:', error);\n }\n }\n }\n }\n },\n [isControlled, normalizedData]\n );\n\n const handleClick = useCallback(\n (item: MarkerData, index: number, events: MarkerEvents) => {\n if (edit.currentMode === 'create') return;\n\n if (edit.currentMode === 'idle') {\n // 再次点击取消选中\n const isCurrentSelected = value === item.id;\n const newSelectedId = isCurrentSelected ? null : item.id;\n\n handleSelect(newSelectedId, index);\n setActiveTooltipId(prev => (prev === item.id ? null : item.id));\n try {\n onClickRef.current?.(item);\n events.onClick?.(item);\n } catch (error) {\n logger.error('Marker', 'onClick 回调执行失败:', error);\n }\n }\n },\n [edit.currentMode, handleSelect, value]\n );\n\n const handleContextMenu = useCallback(\n (item: MarkerData, e: L.LeafletMouseEvent, events: MarkerEvents) => {\n L.DomEvent.preventDefault(e.originalEvent);\n try {\n onContextMenuRef.current?.(item, e);\n events.onContextMenu?.(item, e);\n } catch (error) {\n logger.error('Marker', 'onContextMenu 回调执行失败:', error);\n }\n },\n []\n );\n\n // ========== 命令式方法 ==========\n useMarkerCommands(ref, {\n map,\n value,\n dataSource: normalizedData,\n handleSelect,\n onClickRef,\n onRowRef,\n setActiveTooltipId,\n setTooltipContentMap,\n exitCreateMode: edit.exitCreateMode,\n exitEditMode: edit.exitEditMode,\n closeTooltip,\n currentMode: edit.currentMode,\n tempMarker: edit.tempMarker,\n _dragPosition: edit.dragPosition,\n setCurrentMode: edit.setCurrentMode,\n setTempMarker: edit.setTempMarker,\n _setDragPosition: edit.setDragPosition,\n setDragStartPos: edit.setDragStartPos,\n });\n\n // ========== 渲染数据 ==========\n const displayMarkers = useMemo(() => {\n if (edit.currentMode === 'create') {\n return edit.tempMarker ? [edit.tempMarker] : [];\n }\n if (edit.currentMode === 'move') {\n return normalizedData.filter(m => m.id === value);\n }\n return normalizedData;\n }, [normalizedData, edit.currentMode, edit.tempMarker, value]);\n\n // ========== Loading 覆盖层 ==========\n const loadingOverlay = useLoadingOverlay({\n loading,\n loadingMask,\n map,\n className: 'agri-marker-loading-overlay',\n });\n\n // ========== 生命周期管理 ==========\n const prevEditModeRef = useRef<typeof edit.currentMode>('idle');\n const currentMarkerData = normalizedData.find(m => m.id === value) || null;\n\n useLifecycle<'Marker'>({\n componentType: 'Marker',\n lifecycle,\n dataSource: normalizedData || [],\n currentState: {\n mode: edit.currentMode as 'idle' | 'create' | 'move' | 'delete',\n prevMode: prevEditModeRef.current as 'idle' | 'create' | 'move' | 'delete',\n markerId: value,\n marker: currentMarkerData as Record<string, unknown> | null,\n },\n isRendered: true, // Marker 组件没有虚拟化,渲染完成标志简化处理\n renderStats: {\n totalCount: normalizedData?.length || 0,\n renderedCount: displayMarkers.length,\n virtualized: false,\n },\n });\n\n // 更新上一个编辑模式引用\n useEffect(() => {\n prevEditModeRef.current = edit.currentMode;\n }, [edit.currentMode]);\n\n // ========== 渲染 ==========\n if (!normalizedData || normalizedData.length === 0) {\n return editEnabled || edit.currentMode !== 'idle' ? (\n <>\n <MapClickHandler\n enabled={edit.currentMode === 'create'}\n hasTempMarker={!!edit.tempMarker}\n onMapClick={edit.handleMapClick}\n onMapClickWithoutMarker={closeTooltip}\n />\n <MarkerEditToolbar\n visible={true}\n selectedMarkerId={value}\n currentMode={edit.currentMode}\n enabledButtons={enabledButtons as ('create' | 'edit' | 'move' | 'delete')[]}\n showHint={showEditHint}\n color={color}\n size={size}\n iconOnly={iconOnly}\n onCreate={edit.handleCreate}\n onEdit={edit.handleEdit}\n onMove={edit.handleMove}\n onDelete={edit.handleDelete}\n onCancel={edit.handleCancel}\n onSave={edit.handleSave}\n >\n {customToolbar}\n </MarkerEditToolbar>\n {loadingOverlay}\n </>\n ) : loading ? (\n loadingOverlay\n ) : null;\n }\n\n return (\n <>\n <MapClickHandler\n enabled={edit.currentMode === 'create'}\n hasTempMarker={!!edit.tempMarker}\n onMapClick={edit.handleMapClick}\n onMapClickWithoutMarker={closeTooltip}\n />\n\n {/* 聚合模式渲染 */}\n {useClusterRender && (\n <ClusterView\n clusterResults={clusterResults}\n markerIcon={defaultMarkerIcon}\n clusterIconConfig={clusterIconConfig}\n showTooltip={permanent}\n onClusterClick={handleClusterClick}\n onMarkerClick={markerId => {\n const marker = normalizedData.find(m => m.id === markerId);\n if (marker) {\n const index = normalizedData.findIndex(m => m.id === markerId);\n handleSelect(markerId, index);\n try {\n onClickRef.current?.(marker);\n } catch (error) {\n logger.error('Marker', 'onMarkerClick 回调执行失败:', error);\n }\n }\n }}\n getTooltipContent={marker => ({\n title: tooltipContentMap.get(marker.id)?.title ?? marker.title,\n description: tooltipContentMap.get(marker.id)?.description ?? marker.description,\n })}\n />\n )}\n\n {/* 非聚合模式渲染(原生 Leaflet + 增量更新) */}\n {!useClusterRender && (\n <MarkerRenderer\n map={map}\n displayMarkers={displayMarkers}\n value={value}\n edit={edit}\n getItemIcon={getItemIcon}\n getItemPermanent={getItemPermanent}\n activeTooltipId={activeTooltipId}\n tooltipContentMap={tooltipContentMap}\n getTooltipOffset={getTooltipOffset}\n handleClick={handleClick}\n handleContextMenu={handleContextMenu}\n onRowRef={onRowRef}\n />\n )}\n\n {(editEnabled || edit.currentMode !== 'idle') && (\n <MarkerEditToolbar\n visible={true}\n selectedMarkerId={value}\n currentMode={edit.currentMode}\n enabledButtons={enabledButtons as ('create' | 'edit' | 'move' | 'delete')[]}\n showHint={showEditHint}\n color={color}\n size={size}\n iconOnly={iconOnly}\n onCreate={edit.handleCreate}\n onEdit={edit.handleEdit}\n onMove={edit.handleMove}\n onDelete={edit.handleDelete}\n onCancel={edit.handleCancel}\n onSave={edit.handleSave}\n >\n {customToolbar}\n </MarkerEditToolbar>\n )}\n\n {/* 3D 标签渲染 */}\n <Label3D labelConfig={label} data={normalizedData} selectedId={value} />\n\n {loadingOverlay}\n </>\n );\n }\n);\n\nexport default Marker;\n"],"names":["useMapLifecycle","options","map","lifecycle","isReady","hasReadyFired","useRef","prevViewportRef","rafIdRef","useEffect","_lifecycle$onMapReady","current","onMapReady","call","onViewportChange","handleViewportChange","_triggerEvent","requestAnimationFrame","center","getCenter","zoom","getZoom","bounds","getBounds","prev","hasChanged","Math","abs","lat","lng","_lifecycle$onViewport","on","cancelAnimationFrame","off","MapContext","createContext","mapRef","displayName","useMap","_useContext","useContext","MapProvider","_ref","children","_ref$options","onReady","style","className","_ref$destroyOnUnmount","destroyOnUnmount","containerRef","_useState","useState","_useState2","_slicedToArray","setIsReady","onReadyRef","lifecycleRef","effectiveZoom","_options$zoomControl","_options$attributionC","mapOptions","zoomControl","attributionControl","crs","undefined","maxZoom","minZoom","scrollWheelZoom","maxBounds","layers","preferCanvas","L","_onReadyRef$current","remove","contextValue","useMemo","_jsx","Provider","value","ref","_objectSpread","position","JSON","stringify","useMapEvent","eventType","handler","handlerRef","wrappedHandler","e","_handlerRef$current","ConfigContext","theme","useConfig","COMPONENT_NAMES","PLOT_LAYER","MARKER","TRACK","ROAD","IRRIGATION","TIAN_DI_TU","MINI_MAP","CLUSTER_VIEW","defaultLogConfig","enabled","process","minLevel","prefix","currentLogConfig","log","level","componentName","message","_console","_console2","_console3","_console4","levels","minLevelIndex","indexOf","currentLevelIndex","concat","_len","arguments","length","args","Array","_key","console","debug","apply","info","warn","error","logger","component","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","notificationIdCounter","NotificationItem","id","type","title","duration","isClosing","onClose","actualDuration","timer","setTimeout","clearTimeout","getIcon","_jsxs","onClick","stopPropagation","Notification","forwardRef","_ref2","onCloseCallback","notifications","setNotifications","open","useCallback","_options$type","_options$duration","_toConsumableArray","close","n","filter","clear","useImperativeHandle","messageOrOptions","_typeof","success","warning","notification","PRESET_COLOR_SET","Set","ToolbarContext","BaseEditToolbar","visible","selectedId","_ref$currentMode","currentMode","_ref$enabledButtons","enabledButtons","buttons","isEditingFn","_ref$modeHints","modeHints","classPrefix","_ref$size","size","_ref$saveDisabled","saveDisabled","_ref$showHint","showHint","warningHint","color","_ref$iconOnly","iconOnly","onCancel","onSave","onCreate","onDelete","actionHandlers","notificationClosed","setNotificationClosed","notificationRef","isEditing","showNotification","_notificationRef$curr","clearNotification","_notificationRef$curr2","_notificationRef$curr3","_notificationRef$curr4","_notificationRef$curr5","handleNotificationClose","getButtonClassName","variant","btnColor","disabled","classes","effectiveColor","push","has","join","getButtonStyle","backgroundColor","borderColor","s","height","lineHeight","scale","padding","round","fontSize","handleClick","action","_actionHandlers$actio","preventDefault","editModeButtons","btn","normalButtons","includes","buttonsToRender","Boolean","isEditButton","isEnabled","isCreateButton","hasSelection","needsSelection","createDisabled","isDisabled","actualDisabled","showInEdit","tooltipText","tooltip","label","icon","PRESET_ICONS","SVG_MARKER_ICONS","PULSE_ICONS","LOADING_ICONS","DEFAULT_ICON_GROUPS","icons","name","_i","_DEFAULT_ICON_GROUPS","group","_iterator","_createForOfIteratorHelper","_step","done","err","f","MARKER_DEFAULT_ICON","iconSize","animated","MARKER_DEFAULT_SELECTED_ICON","MARKER_DEFAULT_EDIT_ICON","CLUSTER_DEFAULT_ICON","showCount","PRESET_ICONS_SET","isValidUrl","str","url","URL","startsWith","protocol","_unused","isDataUrl","detectIconType","src","isUrlByExtension","trim","toLowerCase","config","path","test","isPresetIcon","generateSvgHtml","svgIcon","_options$iconSize","_options$svgColor","svgColor","_options$svgStrokeCol","svgStrokeColor","_options$svgStrokeWid","svgStrokeWidth","_svgIcon$viewBox","viewBox","_svgIcon$fill","fill","_svgIcon$stroke","stroke","_svgIcon$strokeWidth","strokeWidth","escape","replace","svgIconToKey","slice","MARKER_COLORS","PIN_BODY_PATH","PIN_DOT_PATH","PIN_SHADOW_PATH","getMarkerAnchor","width","generateMarkerSvg","iconType","fillColor","shadowAnim","shadowAnimClose","bodyAnimOpen","bodyAnimClose","generatePositionSvg","pulseAnim","generateMonitorSvg","mainColor","baseColor","adjustColor","baseAnimOpen","baseAnimClose","amount","hex","r","max","min","parseInt","g","b","toString","padStart","generateAlertSvg","generateFlagSvg","flagAnimOpen","flagAnimClose","generateTargetSvg","generateWindSvg","arrowAnimOpen","arrowAnimClose","arrowColor1","arrowColor2","arrowColor3","outerAnim","outerAnimClose","innerAnimOpen","innerAnimClose","generateFlagDoubleSvg","secondaryColor","leftFlagAnimOpen","leftFlagAnimClose","rightFlagAnimOpen","rightFlagAnimClose","PULSE_COLORS","outer","inner","generatePulseSvg","pulseColor","generateUniversalPulseSvg","colors","generatePulseArrowSvg","innerAnim","outerColor","outerPulse","innerPulse","arrowAnim","generateLoadingSpinnerSvg","rotateAnim","generateLoadingDotsSvg","dotRadius","spacing","centerX","centerY","dots","i","x","bounceAnim","LRUCache","maxSize","_classCallCheck","Object","defineProperty","Map","Error","maxSize_","_createClass","key","get","cache","delete","set","firstKey","keys","next","values","getStats","utilization","sanitizeSvg","svgString","DOMParser","parser","doc","parseFromString","parseError","querySelector","querySelectorAll","forEach","el","dangerousAttrs","attr","removeAttribute","XMLSerializer","serializeToString","documentElement","generateTractorSvg","animateFront","animateRear","animateBody","generateTractor2Svg","generateTruckSvg","animateHub","animateHub2","generateTruck2Svg","animateWheelL","animateWheelC","animateWheelR","generateAgriDroneSvg","animateFloat","animatePropTL","animatePropTR","animatePropBL","animatePropBR","generateAgriDroneSideSvg","animatePropL","animatePropR","generateTractorTopdownSvg","animateWheelFL","animateWheelFR","animateWheelBL","animateWheelBR","NON_SPRITE_ICONS","MAX_STATIC_CACHE_SIZE","MAX_DYNAMIC_CACHE_SIZE","TwoLevelIconCache","maxDynamicSize","dynamicCache","setStatic","staticCache","setDynamic","staticIcon","clearDynamic","staticSize","dynamicSize","totalSize","staticMaxSize","dynamicMaxSize","staticUtilization","dynamicUtilization","iconCache","wrapInContainer","content","extraStyle","animatedClass","buildDivIcon","html","extraClassName","_options$iconAnchor","_options$popupAnchor","iconAnchor","popupAnchor","divIcon","createCacheKey","svgIconKey","customIconKey","createCachedIcon","customIcon","rawIconSize","_options$className","isArray","y","cacheKey","cached","createIconInternal","_options$iconAnchor2","_options$popupAnchor3","safeCustomIcon","isSvgString","isHttpUrl","isRelativePath","sanitized","svgHtml","vehicleIconGenerators","tractor","tractorTopdown","truck","vehicleGenerator","cssClass","safeIconType","markerSvgHtml","_options$iconAnchor3","_options$popupAnchor2","markerAnchor","isSpriteIcon","timingStyle","MarkerRedrawIcon","_ref$color","ariaLabel","_ref$ariaHidden","ariaHidden","d","DeleteIcon","_ref7","_ref7$size","_ref7$color","_ref7$ariaHidden","strokeLinecap","strokeLinejoin","points","x1","y1","x2","y2","CancelIcon","_ref8","_ref8$size","_ref8$color","_ref8$ariaHidden","SaveIcon","_ref9","_ref9$size","_ref9$color","_ref9$ariaHidden","CreateIcon","_ref0","_ref0$size","_ref0$color","_ref0$ariaHidden","EditIcon","_ref1","_ref1$size","_ref1$color","_ref1$ariaHidden","MARKER_BUTTONS","MarkerEditToolbar","selectedMarkerId","hintMessage","onEdit","onMove","create","move","edit","MapClickHandler","hasTempMarker","onMapClick","onMapClickWithoutMarker","_e$originalEvent","target","originalEvent","isToolbarElement","closest","isMarkerElement","latlng","container","getContainer","cursor","classList","add","LOADING_DEFAULT_MASK_BACKGROUND","LOADING_DEFAULT_MASK_ZINDEX","getDefaultClusterColor","count","renderCountSpan","getPresetIconHtml","createClusterIcon","_config$showCount","_config$icon","_config$animated5","render","floor","log2","_config$iconSize$min","_config$iconSize$max","thresholds","colorIndex","iconSource","detected","_config$animated","_config$animated2","isSvgMarker","isPulseIcon","iconHtml","countSpan","_config$animated3","safeUrl","_config$animated4","svgContent","svgConfig","svgIconSize","svgIconAnchor","countDiv","getFeatureId","feature","props","properties","cluster","cluster_id","isFeatureEqual","a","_a$geometry$coordinat","geometry","coordinates","lngA","latA","_b$geometry$coordinat","lngB","latB","propsA","propsB","point_count","ClusterView","clusterResults","markerIcon","clusterIconConfig","showTooltip","onClusterClick","onMarkerClick","getTooltipContent","markersMapRef","createClusterMarker","_icon$options","clusterProps","_feature$geometry$coo","marker","addTo","bindTooltip","permanent","direction","offset","createSingleMarker","_markerIcon$options$i","_markerIcon$options","_tooltipContent$title","_tooltipContent$descr","_tooltipContent$descr2","markerId","markerData","_feature$geometry$coo2","tooltipContent","iconHeight","tooltipHtml","description","updateMarkerTooltip","entry","isCluster","setTooltipContent","_ref3","_tooltipContent$title2","_tooltipContent$descr3","_tooltipContent$descr4","currentIds","currentFeatureMap","existing","oldFeature","_feature$geometry$coo3","setLatLng","newMarker","featureId","getTooltip","React","memo","DEFAULT_LABEL_CONFIG","show","field","fontWeight","animation","animationDuration","Label3D","labelConfig","_ref$labelField","labelField","data","markersRef","retryRafRef","getLabelText","item","String","createLabels","labelsToCreate","text","_config$offset","offsetX","offsetY","isGradient","gradientColors","firstColor","getAnimationClass","isShadow","animationDurationVar","gradientColorsVar","labelHtml","labelIcon","interactive","zIndexOffset","handleMapChange","useLatestRef","ThemeContext","setTheme","isDark","useTheme","FILTER_CONTAINER_ID","DARK_FILTER_ID","svgFilterInjected","ensureDarkFilterInjected","document","getElementById","svgFilters","createElementNS","setAttribute","defs","darkFilter","colorMatrix","componentTransfer","feFuncR","feFuncG","feFuncB","feFuncA","appendChild","body","LAYER_TYPES","VECTOR","SATELLITE","TERRAIN","LAYER_LABELS","_defineProperty","LAYER_URLS","base","annotation","TianDiTuLayer","apiKey","_ref$showAnnotation","showAnnotation","_ref$layerType","layerType","layerTypeProp","tileUrl","annotationUrl","overlayUrl","subdomains","_maxZoom","_minZoom","_ref$attribution","attribution","themeProp","_ref$showLayerSelecto","showLayerSelector","onLayerTypeChange","currentLayerType","setCurrentLayerType","_useState3","_useState4","selectorVisible","setSelectorVisible","baseLayerRef","annotationLayerRef","overlayLayerRef","handleLayerChange","isDarkTheme","mapContainer","baseLayer","tileLayer","annotationLayer","useCustomUrl","layerConfig","setUrl","overlayLayer","LayerSelector","_Fragment","createPortal","hexToRgba","toFixed","DualScaleControl","configProp","scaleColorProp","scaleColor","controlBgProp","controlBg","controlTextProp","controlText","configContext","getConfig","_config$metric","_config$imperial","metric","imperial","shouldShow","contextConfig","dualScaleControl","finalConfig","_getConfig","scaleRef","textRef","mapInstance","animationFrameId","isCleanup","existingContainers","DomUtil","textEl","getControlColors","bg","isSatelliteLight","isTerrainDark","needDarkControl","_getControlColors","setProperty","getRoundNum","distance","isFinite","exponent","LN10","fraction","pow","roundedFraction","getCandidateMeters","targetMeters","m","update","isDestroyed","mapAny","_loaded","_mapPane","contains","mapSize","getSize","west","getWest","east","getEast","centerLat","point1","latLng","point2","maxMeters","metersPerPixel","targetPixels","candidates","bestMeters","bestDiff","Infinity","meters","pixels","diff","tickInterval","displayDistance","displayText","getMetricText","getImperialText","textContent","feet","safeUpdate","removeChild","MapSizeHandler","_ref$enabled","_ref$delay","delay","_ref$retries","retries","initialized","timers","from","_","invalidateSize","ZoomControl","_ref$position","zoomControlRef","zoomLevelRef","controlColors","existingControls","layerSelector","hasLayerSelector","checkVisibility","positionStyles","topleft","top","left","bottom","right","topright","bottomleft","bottomright","assign","zoomIn","innerHTML","zoomLevel","zoomOut","DomEvent","updateZoomLevel","layerSelectorObserver","MutationObserver","isVisible","observe","attributes","attributeFilter","subtree","disconnect","noop","FullscreenControl","fullscreenControlRef","fullscreenControl","zIndex","display","alignItems","justifyContent","borderRadius","boxShadow","transition","addEventListener","iconContainer","renderIcon","isFullscreen","isCurrentlyFullscreen","fullscreenElement","handleFullscreenChange","_mapContainer$request","requestFullscreen","catch","_document$exitFullscr","_document","exitFullscreen","removeEventListener","Loading","_ref$icon","mask","sizeMap","small","default","large","maskConfig","_mask$enabled","background","flexDirection","gap","dangerouslySetInnerHTML","__html","_maskConfig$zIndex","pointerEvents","getDualScaleControlConfig","getMapSizeHandlerConfig","getZoomControlConfig","getFullscreenControlConfig","MapContainer","_ref$zoom","_ref$radius","radius","_ref$maxZoom","_ref$scrollWheelZoom","_ref$zoomControl","_ref$attributionContr","whenReady","tianDiTuLayer","mapSizeHandler","loading","fullscreen","_useTheme","globalTheme","mergedStyle","defaultStyle","dualScaleConfig","mapSizeConfig","zoomControlConfig","fullscreenConfig","configValue","tianDiTuLayerValue","useLifecycle","componentType","dataSource","currentState","isRendered","renderStats","isMounted","hasRendered","prevStatusRef","dataLengthRef","dataSourceRef","renderStatsRef","_lifecycleRef$current","_lifecycleRef$current2","shouldContinue","onBeforeMount","_lifecycleRef$current5","_lifecycleRef$current6","_lifecycleRef$current3","_lifecycleRef$current4","onFirstRender","totalCount","renderedCount","virtualized","prevStatus","stateChanged","mode","plotId","roadId","irrigationId","_lifecycleRef$current7","_lifecycleRef$current8","onStateChange","_lifecycleRef$current9","_lifecycleRef$current0","onBeforeUnmount","useEditMode","editModeProp","defaultButtons","editEnabled","toolbar","customToolbar","useLoadingOverlay","loadingMask","_options$icon","_options$size","_loadingMask$zIndex","maskEnabled","maskBackground","maskZIndex","getDistance","latlng1","latlng2","distanceTo","useRafThrottle","callback","rafRef","lastArgsRef","callbackRef","throttledFn","useDebouncedCallback","timerRef","debouncedFn","fn","cancel","useViewportDebounce","_options$zoomDebounce","zoomDebounceDelay","_options$moveDebounce","moveDebounceDelay","_options$useRaf","useRaf","_options$listenResize","listenResize","realtimeZoom","setRealtimeZoom","realtimeViewVersion","setRealtimeViewVersion","realtimeBoundsRef","realtimeCenterRef","_useState5","_useState6","debouncedZoom","setDebouncedZoom","_useState7","_useState8","debouncedViewVersion","setDebouncedViewVersion","_useState9","_useState0","debouncedBounds","setDebouncedBounds","_useState1","_useState10","debouncedCenter","setDebouncedCenter","debouncedSetZoom","debouncedSetViewVersion","version","throttledSetViewVersion","forceUpdate","v","initialZoom","initialBounds","initialCenter","handleZoomEnd","handleMoveEnd","newVersion","handleResize","realtime","viewVersion","nextRegistryId","layerRegistry","registry","register","getData","_layerRegistry$get","unregister","useNormalizedDataSource","defaultFieldNames","fieldNames","validation","mapper","mergedFieldNames","result","_Object$entries","entries","_Object$entries$_i","_useMemo","validatedData","validationResult","total","valid","invalid","errors","validItems","index","isValid","requiredFields","fieldValue","coordinateFields","coordinateBounds","_iterator2","_step2","coord","_coord","customValidator","customResult","mappedData","fitBoundsRegistry","useAutoFit","autoFit","getCoordinates","hasFittedRef","_options$padding","_options$maxZoom","allCoords","coords","latLngBounds","fitBounds","triggerFit","hasFitted","isValidIconConfig","val","parseIconConfig","iconConfig","normalizeIconSize","_size","useIconConfig","_config$marker","iconProp","selectedIconProp","selectedIcon","configEditingIcon","editing","mergedDefaultIconConfig","_parsed$icon","source","parsed","mergedSelectedIconConfig","mergedEditingIconConfig","resolvedIcon","resolvedSvgIcon","resolvedCustomIcon","getItemIcon","isSelected","isTemp","itemIconType","itemSvgIcon","itemCustomIcon","itemAnimated","itemIconSize","itemIconAnchor","itemPopupAnchor","itemColor","styleConfig","effectiveSelected","isItemSvgMarker","defaultItemAnchor","effectiveItemIconAnchor","effectiveItemPopupAnchor","itemIconOptions","getItemPermanent","getTooltipOffset","safeCall","useEditHandlers","enabledButtonsRef","handleSelect","onCreateRef","onEditRef","onDeleteRef","onSaveRef","closeTooltip","setCurrentMode","tempMarker","setTempMarker","dragPosition","setDragPosition","dragStartPosRef","handleCreate","_enabledButtonsRef$cu","handleEdit","_enabledButtonsRef$cu2","find","handleMove","_enabledButtonsRef$cu3","handleDelete","_enabledButtonsRef$cu4","handleCancel","originalMarker","_restorePositionRef$c","restorePositionRef","handleCancelRef","handleKeyDown","window","exitCreateMode","exitEditMode","handleMapClick","Date","now","handleSave","handleDragEnd","getLatLng","newPos","setDragStartPos","setRestorePosition","calcFlyDuration","to","minDuration","maxDuration","log10","useMarkerCommands","onClickRef","onRowRef","setActiveTooltipId","setTooltipContentMap","localDataRef","openTooltip","openAllTooltips","updateTooltipContent","newMap","getSelected","setSelected","_onClickRef$current","_onRowRef$current","_rowEvents$onClick","findIndex","rowEvents","clearSelection","targetData","once","flyTo","currentCenter","targetCenter","flyToBounds","_options$zoom","targetZoom","editType","targetId","getLocalData","useMarkerIncrementalUpdate","getPermanent","editMode","activeTooltipId","tooltipContentMap","onContextMenu","onDragEnd","onRow","createMarker","_onRow","isDraggable","draggable","_originalPosition","restoreOriginalPosition","updateMarker","oldData","oldHasTooltip","hasTooltip","lastIcon","_onRow2","wasSelected","selectionChanged","iconInstanceChanged","setIcon","_marker$dragging","dragging","enable","_marker$dragging2","disable","currentPopupAnchor","popupAnchorChanged","lastPopupAnchor","unbindTooltip","updateMarkers","displayMarkers","existingIds","_item$icon$popupAncho","_item$icon$popupAncho2","clearMarkers","getMarkerCount","restoreMarkerPosition","originalPosition","parseDisplayModeConfig","displayModeConfig","_config$radius","_config$maxZoom","_config$minPoints","_config$onClickBehavi","minPoints","onClickBehavior","DEFAULT_FIELD_NAMES","MarkerRenderer","handleContextMenu","_useMarkerIncremental","validMarkers","Marker","_config$marker2","_ref2$dataSource","_ref2$permanent","styleProp","_ref2$editMode","onSelect","valueProp","defaultValue","_ref2$showEditHint","showEditHint","onLoaded","displayMode","_ref2$loading","_ref2$autoFit","_useNormalizedDataSou","_position","normalizedData","prevDataSourceLengthRef","len","_useEditMode","internalValue","setInternalValue","isControlled","displayModeEnabled","isValidClusterIconConfig","clusterConfig","_useViewportDebounce","clusterIndex","features","Supercluster","load","getClusters","getSouth","getNorth","onClusterClickRef","clusterIndexRef","handleClusterClick","_onClusterClickRef$cu","leaves","getLeaves","markers","l","leafBounds","expansionZoom","getClusterExpansionZoom","setView","animate","defaultMarkerIcon","_iconConfig$iconSize","_iconConfig$animated","iconValue","onContextMenuRef","onSelectRef","_onSelectRef$current","onMoveRef","useClusterRender","_useIconConfig","events","isCurrentSelected","newSelectedId","_events$onClick","_onContextMenuRef$cur","_events$onContextMenu","_dragPosition","_setDragPosition","loadingOverlay","prevEditModeRef","currentMarkerData","prevMode","_onClickRef$current2","_tooltipContentMap$ge","_tooltipContentMap$ge2","_tooltipContentMap$ge3","_tooltipContentMap$ge4"],"mappings":"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","x_google_ignoreList":[0,1,8,17]}