@fleet-frontend/mower-maps 0.2.6-beta.5 → 0.2.6-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +79 -30
- package/dist/index.js +79 -30
- package/dist/render/MowerPartitionPickerMap.d.ts +1 -1
- package/dist/render/MowerPartitionPickerMap.d.ts.map +1 -1
- package/dist/render/partitionPicker/constants.d.ts +5 -0
- package/dist/render/partitionPicker/constants.d.ts.map +1 -1
- package/dist/render/partitionPicker/hooks/useMapViewport.d.ts +10 -1
- package/dist/render/partitionPicker/hooks/useMapViewport.d.ts.map +1 -1
- package/dist/render/partitionPicker/layers/PartitionNameLabels.d.ts +4 -2
- package/dist/render/partitionPicker/layers/PartitionNameLabels.d.ts.map +1 -1
- package/dist/render/partitionPicker/layers/PartitionPickerSvg.d.ts +2 -1
- package/dist/render/partitionPicker/layers/PartitionPickerSvg.d.ts.map +1 -1
- package/dist/render/partitionPicker/layers/SelectableBoundaryElement.d.ts +4 -2
- package/dist/render/partitionPicker/layers/SelectableBoundaryElement.d.ts.map +1 -1
- package/dist/render/partitionPicker/types.d.ts +23 -0
- package/dist/render/partitionPicker/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { default as MowerMapRenderer } from './render/MowerMapRenderer';
|
|
|
2
2
|
export { default as BoundarySvgRender } from './render/BoundarySvgRender';
|
|
3
3
|
export { default as MowerPartitionPickerMap } from './render/MowerPartitionPickerMap';
|
|
4
4
|
export { getIsolatedBoundaryIds } from './render/partitionPicker/hooks/useIsolatedBoundaryIds';
|
|
5
|
-
export type { MowerPartitionPickerMapProps, MowerPartitionPickerMapRef, CssLength, ScreenPaddingBox, ScreenPaddingInput, PartitionPickerMapTransform, } from './render/partitionPicker/types';
|
|
5
|
+
export type { MowerPartitionPickerMapProps, MowerPartitionPickerMapRef, CssLength, ScreenPaddingBox, ScreenPaddingInput, PartitionPickerMapTransform, IsolatedBoundaryTapPayload, } from './render/partitionPicker/types';
|
|
6
6
|
export type { PartitionPickerStyleConfig, PartitionPickerBoundaryColors, PartitionPickerLabelStyles, PartitionPickerGridStyle, ResolvedPartitionPickerStyles, } from './render/partitionPicker/constants';
|
|
7
7
|
export { resolvePartitionPickerStyles, getPartitionPickerColors, getPartitionPickerLabelStyles, PARTITION_PICKER_COLORS_WEB, PARTITION_PICKER_COLORS_H5, PARTITION_PICKER_LABEL_STYLES_WEB, PARTITION_PICKER_LABEL_STYLES_H5, } from './render/partitionPicker/constants';
|
|
8
8
|
export { DEFAULT_SCREEN_PADDING, normalizeScreenPadding, } from './render/partitionPicker/types';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAC/F,YAAY,EACV,4BAA4B,EAC5B,0BAA0B,EAC1B,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAC/F,YAAY,EACV,4BAA4B,EAC5B,0BAA0B,EAC1B,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,EAC1B,iCAAiC,EACjC,gCAAgC,GACjC,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EACV,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EACT,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,OAAO,EACP,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,YAAY,EACV,OAAO,EACP,MAAM,EACN,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtD,YAAY,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhE,cAAc,aAAa,CAAC;AAG5B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -30798,8 +30798,18 @@ const BoundarySvgRender = React__default.memo(({ mapJson, unStructMapData, id, m
|
|
|
30798
30798
|
}) }), jsx(CharginPile, { viewBox: boundaryViewBox || null, rotation: 0 })] }) }) }));
|
|
30799
30799
|
});
|
|
30800
30800
|
|
|
30801
|
+
const ISOLATED_BOUNDARY_SVG_2 = `<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
30802
|
+
<rect width="20" height="20" rx="10" fill="#8498A9" fill-opacity="0.7"/>
|
|
30803
|
+
<path d="M11.7178 12.4307C12.2201 11.9284 12.9629 11.8149 13.5752 12.0879L12.9756 12.6865C12.7427 12.6649 12.5034 12.7432 12.3223 12.917C12.3176 12.9214 12.3122 12.9251 12.3076 12.9297L11.7344 13.5029C11.4091 13.8284 11.409 14.3563 11.7344 14.6816L12.0879 15.0342C12.4133 15.3595 12.9412 15.3596 13.2666 15.0342L13.5527 14.7461L13.8408 14.46C14.011 14.2896 14.091 14.0629 14.083 13.8398L14.7002 13.2236C14.9614 13.8318 14.8443 14.5639 14.3477 15.0605L13.8613 15.5459C13.2105 16.1963 12.1556 16.1964 11.5049 15.5459L11.2314 15.2725C10.5816 14.6218 10.5815 13.5677 11.2314 12.917L11.7178 12.4307Z" fill="white"/>
|
|
30804
|
+
<path d="M12.1738 4.00488C11.6587 4.98031 10.6742 7.45647 10.8555 9.55762C11.3152 9.02665 12.5281 7.88542 13.7002 7.56934C13.2369 8.10318 12.5313 9.25837 12.1445 10.7949C11.6656 10.9223 11.2115 11.1723 10.835 11.5488L10.3496 12.0352C9.77429 12.6108 9.49095 13.367 9.49707 14.1211H4.72656C5.04472 13.1579 5.14564 10.847 3.00586 9.30957C4.04607 9.35761 5.61481 9.31003 6.83691 10.4141C6.66589 9.30985 6.83631 8.53141 4.90137 5.78711C5.69833 5.98284 7.68952 6.32958 8.74414 7.96875C9.20789 6.88364 10.4356 4.93597 12.1738 4.00488Z" fill="white"/>
|
|
30805
|
+
<path d="M14.8838 9.2666C15.5345 8.61618 16.5894 8.6153 17.2402 9.26562L17.5137 9.53906C18.164 10.19 18.1633 11.2458 17.5127 11.8965L17.0264 12.3828C16.5297 12.879 15.7985 12.9947 15.1904 12.7334L15.8115 12.1104C16.0351 12.1187 16.2619 12.0398 16.4326 11.8691L17.0068 11.2949C17.332 10.9697 17.3327 10.4417 17.0078 10.1162L16.6543 9.7627C16.3491 9.45791 15.8654 9.43902 15.5381 9.70605C15.5158 9.72417 15.4944 9.74388 15.4736 9.76465L14.9004 10.3379C14.7179 10.5204 14.6369 10.7665 14.6592 11.0049L14.0547 11.6084C13.7823 10.9964 13.8955 10.255 14.3975 9.75293L14.8838 9.2666Z" fill="white"/>
|
|
30806
|
+
</svg>`;
|
|
30801
30807
|
/** ChannelClipPath 等内容裁剪使用的 SVG 坐标边距(与用户传入的屏幕 padding 无关) */
|
|
30802
30808
|
const PARTITION_PICKER_CONTENT_CLIP_PADDING = 0;
|
|
30809
|
+
/** 可选中地块 polygon / 标签 data 属性 */
|
|
30810
|
+
const PARTITION_BOUNDARY_ID_ATTR = 'data-partition-boundary-id';
|
|
30811
|
+
/** 孤立子地块命中标记(不可选中) */
|
|
30812
|
+
const PARTITION_ISOLATED_BOUNDARY_ID_ATTR = 'data-partition-isolated-boundary-id';
|
|
30803
30813
|
/** H5:子区域屏幕宽度超过该值才展示名称标签(px) */
|
|
30804
30814
|
const H5_PARTITION_LABEL_MIN_SCREEN_WIDTH_PX = 92;
|
|
30805
30815
|
/** H5:名称气泡总宽度(px) */
|
|
@@ -31222,9 +31232,9 @@ function useMapViewport({ mapJson, containerRef: externalContainerRef, width, he
|
|
|
31222
31232
|
/** 位移是否超过 PAN_CLICK_THRESHOLD_PX,超过则视为拖拽 */
|
|
31223
31233
|
const markPanMoved = (startX, startY, currentX, currentY) => Math.hypot(currentX - startX, currentY - startY) > PAN_CLICK_THRESHOLD_PX;
|
|
31224
31234
|
/** 触发点击回调(仅当未发生拖拽时) */
|
|
31225
|
-
const emitViewportTap = (tapTarget) => {
|
|
31235
|
+
const emitViewportTap = (tapTarget, clientX, clientY) => {
|
|
31226
31236
|
if (tapTarget) {
|
|
31227
|
-
onViewportTapRef.current?.(tapTarget);
|
|
31237
|
+
onViewportTapRef.current?.({ target: tapTarget, clientX, clientY });
|
|
31228
31238
|
}
|
|
31229
31239
|
};
|
|
31230
31240
|
// ── 绑定容器交互事件:滚轮缩放 / 桌面拖拽 / H5 pinch+单指平移 ──
|
|
@@ -31250,7 +31260,7 @@ function useMapViewport({ mapJson, containerRef: externalContainerRef, width, he
|
|
|
31250
31260
|
if (event) {
|
|
31251
31261
|
const state = pointerMapRef.current.get(event.pointerId);
|
|
31252
31262
|
if (state && !state.moved && state.tapTarget) {
|
|
31253
|
-
emitViewportTap(state.tapTarget);
|
|
31263
|
+
emitViewportTap(state.tapTarget, event.clientX, event.clientY);
|
|
31254
31264
|
}
|
|
31255
31265
|
pointerMapRef.current.delete(event.pointerId);
|
|
31256
31266
|
try {
|
|
@@ -31394,13 +31404,17 @@ function useMapViewport({ mapJson, containerRef: externalContainerRef, width, he
|
|
|
31394
31404
|
if (touchState && !touchState.moved) {
|
|
31395
31405
|
let tapTarget = touchState.tapTarget;
|
|
31396
31406
|
const touch = event.changedTouches[0];
|
|
31407
|
+
let clientX = touchState.startX;
|
|
31408
|
+
let clientY = touchState.startY;
|
|
31397
31409
|
if (touch) {
|
|
31410
|
+
clientX = touch.clientX;
|
|
31411
|
+
clientY = touch.clientY;
|
|
31398
31412
|
const hitTarget = document.elementFromPoint(touch.clientX, touch.clientY);
|
|
31399
31413
|
if (hitTarget instanceof Element) {
|
|
31400
31414
|
tapTarget = hitTarget;
|
|
31401
31415
|
}
|
|
31402
31416
|
}
|
|
31403
|
-
emitViewportTap(tapTarget);
|
|
31417
|
+
emitViewportTap(tapTarget, clientX, clientY);
|
|
31404
31418
|
}
|
|
31405
31419
|
if (pinchRef.current) {
|
|
31406
31420
|
pinchRef.current = null;
|
|
@@ -31848,12 +31862,11 @@ function usePartitionLabelItems(mapData, viewBox, containerWidth, containerHeigh
|
|
|
31848
31862
|
]);
|
|
31849
31863
|
}
|
|
31850
31864
|
|
|
31851
|
-
var css_248z = "@charset \"UTF-8\";\n/* 地图容器:裁剪溢出,禁用浏览器默认 touch 手势以便自定义 pinch */\n.index-module_container__nNYv7 {\n position: relative;\n overflow: hidden;\n touch-action: none;\n user-select: none;\n cursor: grab;\n /* H5 点击时不出现矩形 tap 高亮 */\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n}\n\n/* 网格 + 地块双层 SVG 叠放,共用 viewBox 保证平移/缩放同步 */\n.index-module_mapSvgStack__nz2s2 {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 1;\n}\n\n.index-module_gridSvg__MoJD6 {\n position: absolute;\n inset: 0;\n display: block;\n pointer-events: none;\n}\n\n/* 地图 SVG:地块/通道,可绕 viewBox 中心旋转 */\n.index-module_mapSvg__vN0LV {\n position: absolute;\n inset: 0;\n display: block;\n pointer-events: none;\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n}\n\n/*
|
|
31852
|
-
var styles = {"container":"index-module_container__nNYv7","mapSvgStack":"index-module_mapSvgStack__nz2s2","gridSvg":"index-module_gridSvg__MoJD6","mapSvg":"index-module_mapSvg__vN0LV","boundaryPolygon":"index-module_boundaryPolygon__uHe-E","googleOverlayRoot":"index-module_googleOverlayRoot__TQ3II","mapOverlayLayer":"index-module_mapOverlayLayer__7jTDy","labelsLayer":"index-module_labelsLayer__Rcikw","label":"index-module_label__xo3Kc","labelOrderOnly":"index-module_labelOrderOnly__TDLBU","labelH5Wrap":"index-module_labelH5Wrap__Es5cA","labelPill":"index-module_labelPill__7jnOo","labelPillH5":"index-module_labelPillH5__iPeHi","labelText":"index-module_labelText__ialST","labelTextH5":"index-module_labelTextH5__jz8SO","selectionOrderBadge":"index-module_selectionOrderBadge__uj7LX","boundaryPolygonIsolated":"index-module_boundaryPolygonIsolated__syN4V","labelIsolated":"index-module_labelIsolated__K3WAB","labelIsolatedLayout":"index-module_labelIsolatedLayout__k-rwI","isolatedIconBelow":"index-module_isolatedIconBelow__PuVIF"
|
|
31865
|
+
var css_248z = "@charset \"UTF-8\";\n/* 地图容器:裁剪溢出,禁用浏览器默认 touch 手势以便自定义 pinch */\n.index-module_container__nNYv7 {\n position: relative;\n overflow: hidden;\n touch-action: none;\n user-select: none;\n cursor: grab;\n /* H5 点击时不出现矩形 tap 高亮 */\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n}\n\n/* 网格 + 地块双层 SVG 叠放,共用 viewBox 保证平移/缩放同步 */\n.index-module_mapSvgStack__nz2s2 {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 1;\n}\n\n.index-module_gridSvg__MoJD6 {\n position: absolute;\n inset: 0;\n display: block;\n pointer-events: none;\n}\n\n/* 地图 SVG:地块/通道,可绕 viewBox 中心旋转 */\n.index-module_mapSvg__vN0LV {\n position: absolute;\n inset: 0;\n display: block;\n pointer-events: none;\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n}\n\n/* 可点击地块:悬停显示 pointer,与地图容器 grab 区分 */\n.index-module_boundaryPolygon__uHe-E {\n cursor: pointer;\n pointer-events: auto;\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n outline: none;\n -webkit-touch-callout: none;\n}\n\n.index-module_container__nNYv7:active {\n cursor: grabbing;\n}\n\n/* Map 模式:OverlayViewF 内根节点,铺满 overlay 像素区域 */\n.index-module_googleOverlayRoot__TQ3II {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n overflow: visible;\n}\n\n/* HTML overlay 层:CSS rotate 与 MowerMapRenderer OverlayViewF 一致,子元素自行反向补偿 */\n.index-module_mapOverlayLayer__7jTDy {\n position: absolute;\n inset: 0;\n transform-origin: 50% 50%;\n pointer-events: none;\n z-index: 2;\n}\n\n/* 分区名气泡层,绝对定位覆盖在 SVG 之上 */\n.index-module_labelsLayer__Rcikw {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n\n.index-module_label__xo3Kc {\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n pointer-events: auto;\n cursor: pointer;\n white-space: nowrap;\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n outline: none;\n -webkit-touch-callout: none;\n}\n\n.index-module_labelOrderOnly__TDLBU {\n gap: 0;\n}\n\n/* H5 名称标签:气泡宽度 / 文案最大宽度由 constants.ts 内联样式控制 */\n.index-module_labelH5Wrap__Es5cA {\n white-space: normal;\n}\n\n.index-module_labelPill__7jnOo {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n}\n\n.index-module_labelPillH5__iPeHi {\n box-sizing: border-box;\n}\n\n.index-module_labelText__ialST {\n word-break: break-word;\n text-align: center;\n}\n\n.index-module_labelTextH5__jz8SO {\n max-width: 100%;\n white-space: normal;\n overflow-wrap: anywhere;\n line-height: 1.33;\n}\n\n/* 选中序号徽章:尺寸与颜色由 constants 按 platform 注入 */\n.index-module_selectionOrderBadge__uj7LX {\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.index-module_boundaryPolygonIsolated__syN4V {\n cursor: not-allowed;\n}\n\n.index-module_boundaryPolygonIsolated__syN4V:active {\n cursor: grabbing;\n}\n\n.index-module_labelIsolated__K3WAB {\n cursor: not-allowed;\n pointer-events: auto;\n}\n\n.index-module_labelIsolated__K3WAB:active {\n cursor: grabbing;\n}\n\n.index-module_labelIsolatedLayout__k-rwI {\n gap: 4px;\n}\n\n.index-module_isolatedIconBelow__PuVIF {\n position: static;\n transform: none;\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n pointer-events: none;\n}";
|
|
31866
|
+
var styles = {"container":"index-module_container__nNYv7","mapSvgStack":"index-module_mapSvgStack__nz2s2","gridSvg":"index-module_gridSvg__MoJD6","mapSvg":"index-module_mapSvg__vN0LV","boundaryPolygon":"index-module_boundaryPolygon__uHe-E","googleOverlayRoot":"index-module_googleOverlayRoot__TQ3II","mapOverlayLayer":"index-module_mapOverlayLayer__7jTDy","labelsLayer":"index-module_labelsLayer__Rcikw","label":"index-module_label__xo3Kc","labelOrderOnly":"index-module_labelOrderOnly__TDLBU","labelH5Wrap":"index-module_labelH5Wrap__Es5cA","labelPill":"index-module_labelPill__7jnOo","labelPillH5":"index-module_labelPillH5__iPeHi","labelText":"index-module_labelText__ialST","labelTextH5":"index-module_labelTextH5__jz8SO","selectionOrderBadge":"index-module_selectionOrderBadge__uj7LX","boundaryPolygonIsolated":"index-module_boundaryPolygonIsolated__syN4V","labelIsolated":"index-module_labelIsolated__K3WAB","labelIsolatedLayout":"index-module_labelIsolatedLayout__k-rwI","isolatedIconBelow":"index-module_isolatedIconBelow__PuVIF"};
|
|
31853
31867
|
styleInject(css_248z);
|
|
31854
31868
|
|
|
31855
|
-
const
|
|
31856
|
-
const SelectableBoundaryElement = ({ data, boundaryColors, boundaryStrokePx, isIsolated = false, selected, hovered, viewBoxWidth, viewBoxHeight, containerWidth, containerHeight, onHoverChange, onBoundaryClick, }) => {
|
|
31869
|
+
const SelectableBoundaryElement = ({ data, boundaryColors, boundaryStrokePx, isIsolated = false, selected, hovered, viewBoxWidth, viewBoxHeight, containerWidth, containerHeight, onHoverChange, onBoundaryClick, onIsolatedTap, }) => {
|
|
31857
31870
|
const style = data.style || {};
|
|
31858
31871
|
const boundaryId = Number(data.id);
|
|
31859
31872
|
const colors = boundaryColors;
|
|
@@ -31898,9 +31911,14 @@ const SelectableBoundaryElement = ({ data, boundaryColors, boundaryStrokePx, isI
|
|
|
31898
31911
|
viewBoxWidth,
|
|
31899
31912
|
]);
|
|
31900
31913
|
if (isIsolated) {
|
|
31901
|
-
return (jsx("polygon", { className: `${styles.boundaryPolygon} ${styles.boundaryPolygonIsolated}`, points: pointsString, fill: fillColor, stroke: strokeColor, strokeWidth: strokeWidth, strokeLinejoin: "round"
|
|
31914
|
+
return (jsx("polygon", { className: `${styles.boundaryPolygon} ${styles.boundaryPolygonIsolated}`, points: pointsString, fill: fillColor, stroke: strokeColor, strokeWidth: strokeWidth, strokeLinejoin: "round", [PARTITION_ISOLATED_BOUNDARY_ID_ATTR]: boundaryId, onClick: onIsolatedTap
|
|
31915
|
+
? (event) => {
|
|
31916
|
+
event.stopPropagation();
|
|
31917
|
+
onIsolatedTap(boundaryId, event.clientX, event.clientY);
|
|
31918
|
+
}
|
|
31919
|
+
: undefined }));
|
|
31902
31920
|
}
|
|
31903
|
-
return (jsx("polygon", { className: styles.boundaryPolygon, points: pointsString, fill: fillColor, stroke: strokeColor, strokeWidth: strokeWidth, strokeLinejoin: "round", [PARTITION_BOUNDARY_ID_ATTR
|
|
31921
|
+
return (jsx("polygon", { className: styles.boundaryPolygon, points: pointsString, fill: fillColor, stroke: strokeColor, strokeWidth: strokeWidth, strokeLinejoin: "round", [PARTITION_BOUNDARY_ID_ATTR]: boundaryId, onMouseEnter: () => onHoverChange(boundaryId), onMouseLeave: () => onHoverChange(null), onClick: onBoundaryClick
|
|
31904
31922
|
? (event) => {
|
|
31905
31923
|
event.stopPropagation();
|
|
31906
31924
|
onBoundaryClick(boundaryId);
|
|
@@ -31909,7 +31927,7 @@ const SelectableBoundaryElement = ({ data, boundaryColors, boundaryStrokePx, isI
|
|
|
31909
31927
|
};
|
|
31910
31928
|
var SelectableBoundaryElement$1 = memo(SelectableBoundaryElement);
|
|
31911
31929
|
|
|
31912
|
-
const PartitionPickerSvg = ({ svgElementDatas, viewBox, containerWidth, containerHeight, mapRotation = 0, boundaryColors, boundaryStrokePx, isolatedBoundaryIds, selectedIds, hoveredId, onHoverChange, onBoundaryClick, }) => {
|
|
31930
|
+
const PartitionPickerSvg = ({ svgElementDatas, viewBox, containerWidth, containerHeight, mapRotation = 0, boundaryColors, boundaryStrokePx, isolatedBoundaryIds, selectedIds, hoveredId, onHoverChange, onBoundaryClick, onIsolatedTap, }) => {
|
|
31913
31931
|
const boundaries = (svgElementDatas[DataType.BOUNDARY] || []);
|
|
31914
31932
|
const channels = (svgElementDatas[DataType.CHANNEL] || []);
|
|
31915
31933
|
const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds]);
|
|
@@ -31921,7 +31939,7 @@ const PartitionPickerSvg = ({ svgElementDatas, viewBox, containerWidth, containe
|
|
|
31921
31939
|
}, [mapRotation, viewBox.x, viewBox.y, viewBox.width, viewBox.height]);
|
|
31922
31940
|
const mapContent = (jsxs(Fragment, { children: [jsx(GElement, { type: "boundary", children: boundaries.map((item) => {
|
|
31923
31941
|
const boundaryId = Number(item.id);
|
|
31924
|
-
return (jsx(SelectableBoundaryElement$1, { data: item, boundaryColors: boundaryColors, boundaryStrokePx: boundaryStrokePx, isIsolated: isolatedBoundaryIds.has(boundaryId), selected: selectedIdSet.has(boundaryId), hovered: hoveredId === boundaryId, viewBoxWidth: viewBox.width, viewBoxHeight: viewBox.height, containerWidth: containerWidth, containerHeight: containerHeight, onHoverChange: onHoverChange, onBoundaryClick: onBoundaryClick }, item.id));
|
|
31942
|
+
return (jsx(SelectableBoundaryElement$1, { data: item, boundaryColors: boundaryColors, boundaryStrokePx: boundaryStrokePx, isIsolated: isolatedBoundaryIds.has(boundaryId), selected: selectedIdSet.has(boundaryId), hovered: hoveredId === boundaryId, viewBoxWidth: viewBox.width, viewBoxHeight: viewBox.height, containerWidth: containerWidth, containerHeight: containerHeight, onHoverChange: onHoverChange, onBoundaryClick: onBoundaryClick, onIsolatedTap: onIsolatedTap }, item.id));
|
|
31925
31943
|
}) }), jsxs(GElement, { type: "channel", children: [jsx(ChannelClipPath, {}), channels.map((item) => (jsx(ChannelElement, { data: item }, item.id)))] })] }));
|
|
31926
31944
|
return (jsx("svg", { className: styles.mapSvg, xmlns: "http://www.w3.org/2000/svg", viewBox: viewBoxToString(viewBox), width: "100%", height: "100%", preserveAspectRatio: "xMidYMid meet", shapeRendering: "geometricPrecision", children: mapContentTransform ? (jsx("g", { transform: mapContentTransform, children: mapContent })) : (mapContent) }));
|
|
31927
31945
|
};
|
|
@@ -31980,7 +31998,7 @@ const PartitionPickerGridSvg = ({ viewBox, gridStyle }) => {
|
|
|
31980
31998
|
shapeRendering: "geometricPrecision", "aria-hidden": true, children: jsx(MapGridBackground$1, { viewBox: viewBox, gridStyle: gridStyle }) }));
|
|
31981
31999
|
};
|
|
31982
32000
|
|
|
31983
|
-
const PartitionNameLabels = ({ items, selectedIds, labelStyles, platform = PlatformType.WEB, showSelectionOrder = false, rotation = 0, onHoverChange, onBoundaryClick, }) => {
|
|
32001
|
+
const PartitionNameLabels = ({ items, selectedIds, labelStyles, platform = PlatformType.WEB, showSelectionOrder = false, rotation = 0, onHoverChange, onBoundaryClick, onIsolatedTap, }) => {
|
|
31984
32002
|
const isWeb = platform === PlatformType.WEB;
|
|
31985
32003
|
const orderBadgeStyle = useMemo(() => ({
|
|
31986
32004
|
width: labelStyles.selectionOrderBadge.width,
|
|
@@ -32016,30 +32034,35 @@ const PartitionNameLabels = ({ items, selectedIds, labelStyles, platform = Platf
|
|
|
32016
32034
|
.filter(Boolean)
|
|
32017
32035
|
.join(' ');
|
|
32018
32036
|
const showOrderWithName = showOrderBadge && showNameLabel;
|
|
32019
|
-
const selectionOrderGapPx = isWeb
|
|
32020
|
-
|
|
32021
|
-
:
|
|
32022
|
-
|
|
32037
|
+
const selectionOrderGapPx = isWeb ? WEB_SELECTION_ORDER_GAP_PX : H5_SELECTION_ORDER_GAP_PX;
|
|
32038
|
+
const boundaryIdProps = isIsolated
|
|
32039
|
+
? { [PARTITION_ISOLATED_BOUNDARY_ID_ATTR]: item.id }
|
|
32040
|
+
: { [PARTITION_BOUNDARY_ID_ATTR]: item.id };
|
|
32023
32041
|
return (jsxs("div", { className: labelClassName, style: {
|
|
32024
32042
|
left: `${item.leftPct}%`,
|
|
32025
32043
|
top: `${item.topPct}%`,
|
|
32026
32044
|
transform: `translate(-50%, -50%) rotate(${-rotation}deg)`,
|
|
32027
32045
|
...(showOrderWithName ? { gap: selectionOrderGapPx } : undefined),
|
|
32028
|
-
}, ...boundaryIdProps, onMouseEnter: isIsolated ? undefined : () => onHoverChange(item.id), onMouseLeave: isIsolated ? undefined : () => onHoverChange(null), onClick:
|
|
32029
|
-
?
|
|
32030
|
-
event
|
|
32031
|
-
|
|
32032
|
-
|
|
32033
|
-
|
|
32046
|
+
}, ...boundaryIdProps, onMouseEnter: isIsolated ? undefined : () => onHoverChange(item.id), onMouseLeave: isIsolated ? undefined : () => onHoverChange(null), onClick: isIsolated
|
|
32047
|
+
? onIsolatedTap
|
|
32048
|
+
? (event) => {
|
|
32049
|
+
event.stopPropagation();
|
|
32050
|
+
onIsolatedTap(item.id, event.clientX, event.clientY);
|
|
32051
|
+
}
|
|
32052
|
+
: undefined
|
|
32053
|
+
: onBoundaryClick
|
|
32054
|
+
? (event) => {
|
|
32055
|
+
event.stopPropagation();
|
|
32056
|
+
onBoundaryClick(item.id);
|
|
32057
|
+
}
|
|
32058
|
+
: undefined, children: [showOrderBadge && (jsx("div", { className: styles.selectionOrderBadge, style: orderBadgeStyle, children: selectionOrder })), showNameLabel && (jsx("div", { className: `${styles.labelPill} ${!isWeb ? styles.labelPillH5 : ''}`, style: pillStyle, children: jsx("span", { className: `${styles.labelText} ${!isWeb ? styles.labelTextH5 : ''}`, children: item.name }) })), isIsolated && (jsx("div", { className: `${styles.isolatedIconBelow}`, dangerouslySetInnerHTML: { __html: ISOLATED_BOUNDARY_SVG_2 } }))] }, item.id));
|
|
32034
32059
|
}) }));
|
|
32035
32060
|
};
|
|
32036
32061
|
|
|
32037
32062
|
const DEFAULT_BACKGROUND = PARTITION_PICKER_GRID_BASE_COLOR;
|
|
32038
|
-
/** 地块 polygon / 标签上的 data 属性,供 viewport 点击命中与表格联动 */
|
|
32039
|
-
const PARTITION_BOUNDARY_ID_ATTR = 'data-partition-boundary-id';
|
|
32040
32063
|
/** Map 模式下 OverlayViewF 默认 z-index */
|
|
32041
32064
|
const DEFAULT_OVERLAY_Z_INDEX = 100;
|
|
32042
|
-
const MowerPartitionPickerMap = forwardRef(({ mapJson, mapConfig, pickerStyleConfig, sn = '', platform = PlatformType.WEB, width, height, padding = 0, backgroundColor = DEFAULT_BACKGROUND, defaultTransform, mapRef, minZoom = 0.5, maxZoom = 3, enablePanZoom = true, refitOnResize = true, onSizeChange, selectedBoundaryIds, defaultSelectedBoundaryIds, onSelectionChange, hoveredBoundaryId, defaultHoveredBoundaryId, onBoundaryHoverChange, showSelectionOrder = false, zIndex = DEFAULT_OVERLAY_Z_INDEX, className, style, }, ref) => {
|
|
32065
|
+
const MowerPartitionPickerMap = forwardRef(({ mapJson, mapConfig, pickerStyleConfig, sn = '', platform = PlatformType.WEB, width, height, padding = 0, backgroundColor = DEFAULT_BACKGROUND, defaultTransform, mapRef, minZoom = 0.5, maxZoom = 3, enablePanZoom = true, refitOnResize = true, onSizeChange, selectedBoundaryIds, defaultSelectedBoundaryIds, onSelectionChange, hoveredBoundaryId, defaultHoveredBoundaryId, onBoundaryHoverChange, showSelectionOrder = false, onIsolatedBoundaryTap, zIndex = DEFAULT_OVERLAY_Z_INDEX, className, style, }, ref) => {
|
|
32043
32066
|
/**
|
|
32044
32067
|
* 是否为 Map 模式(传入 mapRef 时为 true):
|
|
32045
32068
|
* - true:Google Maps 底图 + OverlayViewF,平移/缩放/fit 由底图负责
|
|
@@ -32098,6 +32121,24 @@ const MowerPartitionPickerMap = forwardRef(({ mapJson, mapConfig, pickerStyleCon
|
|
|
32098
32121
|
}, [mapJson]);
|
|
32099
32122
|
/** 孤立地块 id 列表(未连接到主地块的子地块) */
|
|
32100
32123
|
const isolatedBoundaryIds = useIsolatedBoundaryIds(mapJson);
|
|
32124
|
+
const boundaryNameById = useMemo(() => {
|
|
32125
|
+
const names = new Map();
|
|
32126
|
+
for (const boundary of generateBoundaryData(mapJson)) {
|
|
32127
|
+
names.set(boundary.id, boundary.name);
|
|
32128
|
+
}
|
|
32129
|
+
return names;
|
|
32130
|
+
}, [mapJson]);
|
|
32131
|
+
const handleIsolatedTap = useCallback((boundaryId, clientX, clientY) => {
|
|
32132
|
+
if (!onIsolatedBoundaryTap || !isolatedBoundaryIds.has(boundaryId))
|
|
32133
|
+
return;
|
|
32134
|
+
onIsolatedBoundaryTap({
|
|
32135
|
+
boundaryId,
|
|
32136
|
+
boundaryName: boundaryNameById.get(boundaryId),
|
|
32137
|
+
clientX,
|
|
32138
|
+
clientY,
|
|
32139
|
+
});
|
|
32140
|
+
}, [boundaryNameById, isolatedBoundaryIds, onIsolatedBoundaryTap]);
|
|
32141
|
+
const isolatedTapHandler = onIsolatedBoundaryTap ? handleIsolatedTap : undefined;
|
|
32101
32142
|
/** 选中地块 id 列表(受控/非受控)与切换选中回调 */
|
|
32102
32143
|
const { selectedIds, toggleBoundary, setSelectedIds } = useBoundarySelection({
|
|
32103
32144
|
selectedBoundaryIds,
|
|
@@ -32123,7 +32164,15 @@ const MowerPartitionPickerMap = forwardRef(({ mapJson, mapConfig, pickerStyleCon
|
|
|
32123
32164
|
toggleBoundary(id);
|
|
32124
32165
|
}, [isolatedBoundaryIds, toggleBoundary]);
|
|
32125
32166
|
/** Standalone 模式:由 viewport 统一处理点击(支持在地块上拖拽平移) */
|
|
32126
|
-
const handleViewportTap = useCallback((target) => {
|
|
32167
|
+
const handleViewportTap = useCallback(({ target, clientX, clientY }) => {
|
|
32168
|
+
const isolatedEl = target.closest(`[${PARTITION_ISOLATED_BOUNDARY_ID_ATTR}]`);
|
|
32169
|
+
if (isolatedEl) {
|
|
32170
|
+
const isolatedId = Number(isolatedEl.getAttribute(PARTITION_ISOLATED_BOUNDARY_ID_ATTR));
|
|
32171
|
+
if (Number.isFinite(isolatedId) && isolatedBoundaryIds.has(isolatedId)) {
|
|
32172
|
+
handleIsolatedTap(isolatedId, clientX, clientY);
|
|
32173
|
+
}
|
|
32174
|
+
return;
|
|
32175
|
+
}
|
|
32127
32176
|
const boundaryEl = target.closest(`[${PARTITION_BOUNDARY_ID_ATTR}]`);
|
|
32128
32177
|
if (!boundaryEl)
|
|
32129
32178
|
return;
|
|
@@ -32131,7 +32180,7 @@ const MowerPartitionPickerMap = forwardRef(({ mapJson, mapConfig, pickerStyleCon
|
|
|
32131
32180
|
if (!Number.isFinite(id) || isolatedBoundaryIds.has(id))
|
|
32132
32181
|
return;
|
|
32133
32182
|
toggleBoundary(id);
|
|
32134
|
-
}, [isolatedBoundaryIds, toggleBoundary]);
|
|
32183
|
+
}, [handleIsolatedTap, isolatedBoundaryIds, toggleBoundary]);
|
|
32135
32184
|
/**
|
|
32136
32185
|
* Map 模式 overlay 状态(bounds / viewBox / fitBounds / overlayScale)。
|
|
32137
32186
|
* 无 mapRef 时 hook 内部 enabled=false,返回值不参与渲染。
|
|
@@ -32240,12 +32289,12 @@ const MowerPartitionPickerMap = forwardRef(({ mapJson, mapConfig, pickerStyleCon
|
|
|
32240
32289
|
...(isMapMode ? {} : layoutStyle),
|
|
32241
32290
|
}), [isMapMode, layoutStyle, resolvedBackgroundColor, style]);
|
|
32242
32291
|
/** 地块 + 通道 SVG;Map 模式不在 SVG 内旋转(由 OverlayViewF rotate 处理) */
|
|
32243
|
-
const mapSvgLayer = viewBox && isLayersReady ? (jsx(PartitionPickerSvg, { svgElementDatas: svgElementDatas, viewBox: viewBox, containerWidth: overlayWidth, containerHeight: overlayHeight, mapRotation: isMapMode ? 0 : actureRotate, boundaryColors: mergedPickerStyles.boundary, boundaryStrokePx: mergedPickerStyles.boundaryStrokePx, isolatedBoundaryIds: isolatedBoundaryIds, selectedIds: selectedIds, hoveredId: hoveredId, onHoverChange: handleHoverChange, onBoundaryClick: isMapMode ? handleBoundaryClick : undefined })) : null;
|
|
32292
|
+
const mapSvgLayer = viewBox && isLayersReady ? (jsx(PartitionPickerSvg, { svgElementDatas: svgElementDatas, viewBox: viewBox, containerWidth: overlayWidth, containerHeight: overlayHeight, mapRotation: isMapMode ? 0 : actureRotate, boundaryColors: mergedPickerStyles.boundary, boundaryStrokePx: mergedPickerStyles.boundaryStrokePx, isolatedBoundaryIds: isolatedBoundaryIds, selectedIds: selectedIds, hoveredId: hoveredId, onHoverChange: handleHoverChange, onBoundaryClick: isMapMode ? handleBoundaryClick : undefined, onIsolatedTap: isMapMode ? isolatedTapHandler : undefined })) : null;
|
|
32244
32293
|
/**
|
|
32245
32294
|
* 分区标签 + 充电桩 HTML 层。
|
|
32246
32295
|
* Map 模式:平铺于 overlay 根节点;Standalone:包在 mapOverlayLayer 内做 CSS 旋转。
|
|
32247
32296
|
*/
|
|
32248
|
-
const overlayLayers = viewBox && isLayersReady ? (isMapMode ? (jsxs(Fragment, { children: [jsx(PartitionNameLabels, { items: labelItems, selectedIds: selectedIds, labelStyles: mergedPickerStyles.labels, platform: platform, showSelectionOrder: showSelectionOrder, rotation: actureRotate, onHoverChange: handleHoverChange, onBoundaryClick: handleBoundaryClick }), jsx(CharginPile, { viewBox: viewBox, rotation: actureRotate })] })) : (jsxs("div", { className: styles.mapOverlayLayer, style: mapOverlayLayerStyle, children: [jsx(PartitionNameLabels, { items: labelItems, selectedIds: selectedIds, labelStyles: mergedPickerStyles.labels, platform: platform, showSelectionOrder: showSelectionOrder, rotation: actureRotate, onHoverChange: handleHoverChange }), jsx(CharginPile, { viewBox: viewBox, rotation: actureRotate, viewRotationMode: "overlay-parent", containerWidth: overlayWidth, containerHeight: overlayHeight, sizeInSvgUnits: true, minDisplaySizePx: PARTITION_PICKER_CHARGING_PILE_MIN_DISPLAY_PX })] }))) : null;
|
|
32297
|
+
const overlayLayers = viewBox && isLayersReady ? (isMapMode ? (jsxs(Fragment, { children: [jsx(PartitionNameLabels, { items: labelItems, selectedIds: selectedIds, labelStyles: mergedPickerStyles.labels, platform: platform, showSelectionOrder: showSelectionOrder, rotation: actureRotate, onHoverChange: handleHoverChange, onBoundaryClick: handleBoundaryClick, onIsolatedTap: isolatedTapHandler }), jsx(CharginPile, { viewBox: viewBox, rotation: actureRotate })] })) : (jsxs("div", { className: styles.mapOverlayLayer, style: mapOverlayLayerStyle, children: [jsx(PartitionNameLabels, { items: labelItems, selectedIds: selectedIds, labelStyles: mergedPickerStyles.labels, platform: platform, showSelectionOrder: showSelectionOrder, rotation: actureRotate, onHoverChange: handleHoverChange, onIsolatedTap: isolatedTapHandler }), jsx(CharginPile, { viewBox: viewBox, rotation: actureRotate, viewRotationMode: "overlay-parent", containerWidth: overlayWidth, containerHeight: overlayHeight, sizeInSvgUnits: true, minDisplaySizePx: PARTITION_PICKER_CHARGING_PILE_MIN_DISPLAY_PX })] }))) : null;
|
|
32249
32298
|
/** Map 模式:渲染 OverlayViewF,底图为 Google Maps */
|
|
32250
32299
|
if (isMapMode && mapRef) {
|
|
32251
32300
|
return (jsx(CommonContextProvider, { value: commonValue, children: jsx(SvgEditContextProvider, { value: svgEditValue, children: jsx(OverlayViewF, { map: mapRef, mapPaneName: "overlayMouseTarget", bounds: googleOverlay.bounds ?? undefined, rotate: actureRotate, zIndex: zIndex, onDraw: googleOverlay.handleOverlayDraw, children: jsxs("div", { className: `${styles.googleOverlayRoot} ${className || ''}`, style: containerStyle, onMouseLeave: () => setHoveredId(null), children: [mapSvgLayer, overlayLayers] }) }) }) }));
|
package/dist/index.js
CHANGED
|
@@ -30818,8 +30818,18 @@ const BoundarySvgRender = React.memo(({ mapJson, unStructMapData, id, maxWidth =
|
|
|
30818
30818
|
}) }), jsxRuntime.jsx(CharginPile, { viewBox: boundaryViewBox || null, rotation: 0 })] }) }) }));
|
|
30819
30819
|
});
|
|
30820
30820
|
|
|
30821
|
+
const ISOLATED_BOUNDARY_SVG_2 = `<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
30822
|
+
<rect width="20" height="20" rx="10" fill="#8498A9" fill-opacity="0.7"/>
|
|
30823
|
+
<path d="M11.7178 12.4307C12.2201 11.9284 12.9629 11.8149 13.5752 12.0879L12.9756 12.6865C12.7427 12.6649 12.5034 12.7432 12.3223 12.917C12.3176 12.9214 12.3122 12.9251 12.3076 12.9297L11.7344 13.5029C11.4091 13.8284 11.409 14.3563 11.7344 14.6816L12.0879 15.0342C12.4133 15.3595 12.9412 15.3596 13.2666 15.0342L13.5527 14.7461L13.8408 14.46C14.011 14.2896 14.091 14.0629 14.083 13.8398L14.7002 13.2236C14.9614 13.8318 14.8443 14.5639 14.3477 15.0605L13.8613 15.5459C13.2105 16.1963 12.1556 16.1964 11.5049 15.5459L11.2314 15.2725C10.5816 14.6218 10.5815 13.5677 11.2314 12.917L11.7178 12.4307Z" fill="white"/>
|
|
30824
|
+
<path d="M12.1738 4.00488C11.6587 4.98031 10.6742 7.45647 10.8555 9.55762C11.3152 9.02665 12.5281 7.88542 13.7002 7.56934C13.2369 8.10318 12.5313 9.25837 12.1445 10.7949C11.6656 10.9223 11.2115 11.1723 10.835 11.5488L10.3496 12.0352C9.77429 12.6108 9.49095 13.367 9.49707 14.1211H4.72656C5.04472 13.1579 5.14564 10.847 3.00586 9.30957C4.04607 9.35761 5.61481 9.31003 6.83691 10.4141C6.66589 9.30985 6.83631 8.53141 4.90137 5.78711C5.69833 5.98284 7.68952 6.32958 8.74414 7.96875C9.20789 6.88364 10.4356 4.93597 12.1738 4.00488Z" fill="white"/>
|
|
30825
|
+
<path d="M14.8838 9.2666C15.5345 8.61618 16.5894 8.6153 17.2402 9.26562L17.5137 9.53906C18.164 10.19 18.1633 11.2458 17.5127 11.8965L17.0264 12.3828C16.5297 12.879 15.7985 12.9947 15.1904 12.7334L15.8115 12.1104C16.0351 12.1187 16.2619 12.0398 16.4326 11.8691L17.0068 11.2949C17.332 10.9697 17.3327 10.4417 17.0078 10.1162L16.6543 9.7627C16.3491 9.45791 15.8654 9.43902 15.5381 9.70605C15.5158 9.72417 15.4944 9.74388 15.4736 9.76465L14.9004 10.3379C14.7179 10.5204 14.6369 10.7665 14.6592 11.0049L14.0547 11.6084C13.7823 10.9964 13.8955 10.255 14.3975 9.75293L14.8838 9.2666Z" fill="white"/>
|
|
30826
|
+
</svg>`;
|
|
30821
30827
|
/** ChannelClipPath 等内容裁剪使用的 SVG 坐标边距(与用户传入的屏幕 padding 无关) */
|
|
30822
30828
|
const PARTITION_PICKER_CONTENT_CLIP_PADDING = 0;
|
|
30829
|
+
/** 可选中地块 polygon / 标签 data 属性 */
|
|
30830
|
+
const PARTITION_BOUNDARY_ID_ATTR = 'data-partition-boundary-id';
|
|
30831
|
+
/** 孤立子地块命中标记(不可选中) */
|
|
30832
|
+
const PARTITION_ISOLATED_BOUNDARY_ID_ATTR = 'data-partition-isolated-boundary-id';
|
|
30823
30833
|
/** H5:子区域屏幕宽度超过该值才展示名称标签(px) */
|
|
30824
30834
|
const H5_PARTITION_LABEL_MIN_SCREEN_WIDTH_PX = 92;
|
|
30825
30835
|
/** H5:名称气泡总宽度(px) */
|
|
@@ -31242,9 +31252,9 @@ function useMapViewport({ mapJson, containerRef: externalContainerRef, width, he
|
|
|
31242
31252
|
/** 位移是否超过 PAN_CLICK_THRESHOLD_PX,超过则视为拖拽 */
|
|
31243
31253
|
const markPanMoved = (startX, startY, currentX, currentY) => Math.hypot(currentX - startX, currentY - startY) > PAN_CLICK_THRESHOLD_PX;
|
|
31244
31254
|
/** 触发点击回调(仅当未发生拖拽时) */
|
|
31245
|
-
const emitViewportTap = (tapTarget) => {
|
|
31255
|
+
const emitViewportTap = (tapTarget, clientX, clientY) => {
|
|
31246
31256
|
if (tapTarget) {
|
|
31247
|
-
onViewportTapRef.current?.(tapTarget);
|
|
31257
|
+
onViewportTapRef.current?.({ target: tapTarget, clientX, clientY });
|
|
31248
31258
|
}
|
|
31249
31259
|
};
|
|
31250
31260
|
// ── 绑定容器交互事件:滚轮缩放 / 桌面拖拽 / H5 pinch+单指平移 ──
|
|
@@ -31270,7 +31280,7 @@ function useMapViewport({ mapJson, containerRef: externalContainerRef, width, he
|
|
|
31270
31280
|
if (event) {
|
|
31271
31281
|
const state = pointerMapRef.current.get(event.pointerId);
|
|
31272
31282
|
if (state && !state.moved && state.tapTarget) {
|
|
31273
|
-
emitViewportTap(state.tapTarget);
|
|
31283
|
+
emitViewportTap(state.tapTarget, event.clientX, event.clientY);
|
|
31274
31284
|
}
|
|
31275
31285
|
pointerMapRef.current.delete(event.pointerId);
|
|
31276
31286
|
try {
|
|
@@ -31414,13 +31424,17 @@ function useMapViewport({ mapJson, containerRef: externalContainerRef, width, he
|
|
|
31414
31424
|
if (touchState && !touchState.moved) {
|
|
31415
31425
|
let tapTarget = touchState.tapTarget;
|
|
31416
31426
|
const touch = event.changedTouches[0];
|
|
31427
|
+
let clientX = touchState.startX;
|
|
31428
|
+
let clientY = touchState.startY;
|
|
31417
31429
|
if (touch) {
|
|
31430
|
+
clientX = touch.clientX;
|
|
31431
|
+
clientY = touch.clientY;
|
|
31418
31432
|
const hitTarget = document.elementFromPoint(touch.clientX, touch.clientY);
|
|
31419
31433
|
if (hitTarget instanceof Element) {
|
|
31420
31434
|
tapTarget = hitTarget;
|
|
31421
31435
|
}
|
|
31422
31436
|
}
|
|
31423
|
-
emitViewportTap(tapTarget);
|
|
31437
|
+
emitViewportTap(tapTarget, clientX, clientY);
|
|
31424
31438
|
}
|
|
31425
31439
|
if (pinchRef.current) {
|
|
31426
31440
|
pinchRef.current = null;
|
|
@@ -31868,12 +31882,11 @@ function usePartitionLabelItems(mapData, viewBox, containerWidth, containerHeigh
|
|
|
31868
31882
|
]);
|
|
31869
31883
|
}
|
|
31870
31884
|
|
|
31871
|
-
var css_248z = "@charset \"UTF-8\";\n/* 地图容器:裁剪溢出,禁用浏览器默认 touch 手势以便自定义 pinch */\n.index-module_container__nNYv7 {\n position: relative;\n overflow: hidden;\n touch-action: none;\n user-select: none;\n cursor: grab;\n /* H5 点击时不出现矩形 tap 高亮 */\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n}\n\n/* 网格 + 地块双层 SVG 叠放,共用 viewBox 保证平移/缩放同步 */\n.index-module_mapSvgStack__nz2s2 {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 1;\n}\n\n.index-module_gridSvg__MoJD6 {\n position: absolute;\n inset: 0;\n display: block;\n pointer-events: none;\n}\n\n/* 地图 SVG:地块/通道,可绕 viewBox 中心旋转 */\n.index-module_mapSvg__vN0LV {\n position: absolute;\n inset: 0;\n display: block;\n pointer-events: none;\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n}\n\n/*
|
|
31872
|
-
var styles = {"container":"index-module_container__nNYv7","mapSvgStack":"index-module_mapSvgStack__nz2s2","gridSvg":"index-module_gridSvg__MoJD6","mapSvg":"index-module_mapSvg__vN0LV","boundaryPolygon":"index-module_boundaryPolygon__uHe-E","googleOverlayRoot":"index-module_googleOverlayRoot__TQ3II","mapOverlayLayer":"index-module_mapOverlayLayer__7jTDy","labelsLayer":"index-module_labelsLayer__Rcikw","label":"index-module_label__xo3Kc","labelOrderOnly":"index-module_labelOrderOnly__TDLBU","labelH5Wrap":"index-module_labelH5Wrap__Es5cA","labelPill":"index-module_labelPill__7jnOo","labelPillH5":"index-module_labelPillH5__iPeHi","labelText":"index-module_labelText__ialST","labelTextH5":"index-module_labelTextH5__jz8SO","selectionOrderBadge":"index-module_selectionOrderBadge__uj7LX","boundaryPolygonIsolated":"index-module_boundaryPolygonIsolated__syN4V","labelIsolated":"index-module_labelIsolated__K3WAB","labelIsolatedLayout":"index-module_labelIsolatedLayout__k-rwI","isolatedIconBelow":"index-module_isolatedIconBelow__PuVIF"
|
|
31885
|
+
var css_248z = "@charset \"UTF-8\";\n/* 地图容器:裁剪溢出,禁用浏览器默认 touch 手势以便自定义 pinch */\n.index-module_container__nNYv7 {\n position: relative;\n overflow: hidden;\n touch-action: none;\n user-select: none;\n cursor: grab;\n /* H5 点击时不出现矩形 tap 高亮 */\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n}\n\n/* 网格 + 地块双层 SVG 叠放,共用 viewBox 保证平移/缩放同步 */\n.index-module_mapSvgStack__nz2s2 {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 1;\n}\n\n.index-module_gridSvg__MoJD6 {\n position: absolute;\n inset: 0;\n display: block;\n pointer-events: none;\n}\n\n/* 地图 SVG:地块/通道,可绕 viewBox 中心旋转 */\n.index-module_mapSvg__vN0LV {\n position: absolute;\n inset: 0;\n display: block;\n pointer-events: none;\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n}\n\n/* 可点击地块:悬停显示 pointer,与地图容器 grab 区分 */\n.index-module_boundaryPolygon__uHe-E {\n cursor: pointer;\n pointer-events: auto;\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n outline: none;\n -webkit-touch-callout: none;\n}\n\n.index-module_container__nNYv7:active {\n cursor: grabbing;\n}\n\n/* Map 模式:OverlayViewF 内根节点,铺满 overlay 像素区域 */\n.index-module_googleOverlayRoot__TQ3II {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n overflow: visible;\n}\n\n/* HTML overlay 层:CSS rotate 与 MowerMapRenderer OverlayViewF 一致,子元素自行反向补偿 */\n.index-module_mapOverlayLayer__7jTDy {\n position: absolute;\n inset: 0;\n transform-origin: 50% 50%;\n pointer-events: none;\n z-index: 2;\n}\n\n/* 分区名气泡层,绝对定位覆盖在 SVG 之上 */\n.index-module_labelsLayer__Rcikw {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n\n.index-module_label__xo3Kc {\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n pointer-events: auto;\n cursor: pointer;\n white-space: nowrap;\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n outline: none;\n -webkit-touch-callout: none;\n}\n\n.index-module_labelOrderOnly__TDLBU {\n gap: 0;\n}\n\n/* H5 名称标签:气泡宽度 / 文案最大宽度由 constants.ts 内联样式控制 */\n.index-module_labelH5Wrap__Es5cA {\n white-space: normal;\n}\n\n.index-module_labelPill__7jnOo {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n}\n\n.index-module_labelPillH5__iPeHi {\n box-sizing: border-box;\n}\n\n.index-module_labelText__ialST {\n word-break: break-word;\n text-align: center;\n}\n\n.index-module_labelTextH5__jz8SO {\n max-width: 100%;\n white-space: normal;\n overflow-wrap: anywhere;\n line-height: 1.33;\n}\n\n/* 选中序号徽章:尺寸与颜色由 constants 按 platform 注入 */\n.index-module_selectionOrderBadge__uj7LX {\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.index-module_boundaryPolygonIsolated__syN4V {\n cursor: not-allowed;\n}\n\n.index-module_boundaryPolygonIsolated__syN4V:active {\n cursor: grabbing;\n}\n\n.index-module_labelIsolated__K3WAB {\n cursor: not-allowed;\n pointer-events: auto;\n}\n\n.index-module_labelIsolated__K3WAB:active {\n cursor: grabbing;\n}\n\n.index-module_labelIsolatedLayout__k-rwI {\n gap: 4px;\n}\n\n.index-module_isolatedIconBelow__PuVIF {\n position: static;\n transform: none;\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n pointer-events: none;\n}";
|
|
31886
|
+
var styles = {"container":"index-module_container__nNYv7","mapSvgStack":"index-module_mapSvgStack__nz2s2","gridSvg":"index-module_gridSvg__MoJD6","mapSvg":"index-module_mapSvg__vN0LV","boundaryPolygon":"index-module_boundaryPolygon__uHe-E","googleOverlayRoot":"index-module_googleOverlayRoot__TQ3II","mapOverlayLayer":"index-module_mapOverlayLayer__7jTDy","labelsLayer":"index-module_labelsLayer__Rcikw","label":"index-module_label__xo3Kc","labelOrderOnly":"index-module_labelOrderOnly__TDLBU","labelH5Wrap":"index-module_labelH5Wrap__Es5cA","labelPill":"index-module_labelPill__7jnOo","labelPillH5":"index-module_labelPillH5__iPeHi","labelText":"index-module_labelText__ialST","labelTextH5":"index-module_labelTextH5__jz8SO","selectionOrderBadge":"index-module_selectionOrderBadge__uj7LX","boundaryPolygonIsolated":"index-module_boundaryPolygonIsolated__syN4V","labelIsolated":"index-module_labelIsolated__K3WAB","labelIsolatedLayout":"index-module_labelIsolatedLayout__k-rwI","isolatedIconBelow":"index-module_isolatedIconBelow__PuVIF"};
|
|
31873
31887
|
styleInject(css_248z);
|
|
31874
31888
|
|
|
31875
|
-
const
|
|
31876
|
-
const SelectableBoundaryElement = ({ data, boundaryColors, boundaryStrokePx, isIsolated = false, selected, hovered, viewBoxWidth, viewBoxHeight, containerWidth, containerHeight, onHoverChange, onBoundaryClick, }) => {
|
|
31889
|
+
const SelectableBoundaryElement = ({ data, boundaryColors, boundaryStrokePx, isIsolated = false, selected, hovered, viewBoxWidth, viewBoxHeight, containerWidth, containerHeight, onHoverChange, onBoundaryClick, onIsolatedTap, }) => {
|
|
31877
31890
|
const style = data.style || {};
|
|
31878
31891
|
const boundaryId = Number(data.id);
|
|
31879
31892
|
const colors = boundaryColors;
|
|
@@ -31918,9 +31931,14 @@ const SelectableBoundaryElement = ({ data, boundaryColors, boundaryStrokePx, isI
|
|
|
31918
31931
|
viewBoxWidth,
|
|
31919
31932
|
]);
|
|
31920
31933
|
if (isIsolated) {
|
|
31921
|
-
return (jsxRuntime.jsx("polygon", { className: `${styles.boundaryPolygon} ${styles.boundaryPolygonIsolated}`, points: pointsString, fill: fillColor, stroke: strokeColor, strokeWidth: strokeWidth, strokeLinejoin: "round"
|
|
31934
|
+
return (jsxRuntime.jsx("polygon", { className: `${styles.boundaryPolygon} ${styles.boundaryPolygonIsolated}`, points: pointsString, fill: fillColor, stroke: strokeColor, strokeWidth: strokeWidth, strokeLinejoin: "round", [PARTITION_ISOLATED_BOUNDARY_ID_ATTR]: boundaryId, onClick: onIsolatedTap
|
|
31935
|
+
? (event) => {
|
|
31936
|
+
event.stopPropagation();
|
|
31937
|
+
onIsolatedTap(boundaryId, event.clientX, event.clientY);
|
|
31938
|
+
}
|
|
31939
|
+
: undefined }));
|
|
31922
31940
|
}
|
|
31923
|
-
return (jsxRuntime.jsx("polygon", { className: styles.boundaryPolygon, points: pointsString, fill: fillColor, stroke: strokeColor, strokeWidth: strokeWidth, strokeLinejoin: "round", [PARTITION_BOUNDARY_ID_ATTR
|
|
31941
|
+
return (jsxRuntime.jsx("polygon", { className: styles.boundaryPolygon, points: pointsString, fill: fillColor, stroke: strokeColor, strokeWidth: strokeWidth, strokeLinejoin: "round", [PARTITION_BOUNDARY_ID_ATTR]: boundaryId, onMouseEnter: () => onHoverChange(boundaryId), onMouseLeave: () => onHoverChange(null), onClick: onBoundaryClick
|
|
31924
31942
|
? (event) => {
|
|
31925
31943
|
event.stopPropagation();
|
|
31926
31944
|
onBoundaryClick(boundaryId);
|
|
@@ -31929,7 +31947,7 @@ const SelectableBoundaryElement = ({ data, boundaryColors, boundaryStrokePx, isI
|
|
|
31929
31947
|
};
|
|
31930
31948
|
var SelectableBoundaryElement$1 = React.memo(SelectableBoundaryElement);
|
|
31931
31949
|
|
|
31932
|
-
const PartitionPickerSvg = ({ svgElementDatas, viewBox, containerWidth, containerHeight, mapRotation = 0, boundaryColors, boundaryStrokePx, isolatedBoundaryIds, selectedIds, hoveredId, onHoverChange, onBoundaryClick, }) => {
|
|
31950
|
+
const PartitionPickerSvg = ({ svgElementDatas, viewBox, containerWidth, containerHeight, mapRotation = 0, boundaryColors, boundaryStrokePx, isolatedBoundaryIds, selectedIds, hoveredId, onHoverChange, onBoundaryClick, onIsolatedTap, }) => {
|
|
31933
31951
|
const boundaries = (svgElementDatas[exports.DataType.BOUNDARY] || []);
|
|
31934
31952
|
const channels = (svgElementDatas[exports.DataType.CHANNEL] || []);
|
|
31935
31953
|
const selectedIdSet = React.useMemo(() => new Set(selectedIds), [selectedIds]);
|
|
@@ -31941,7 +31959,7 @@ const PartitionPickerSvg = ({ svgElementDatas, viewBox, containerWidth, containe
|
|
|
31941
31959
|
}, [mapRotation, viewBox.x, viewBox.y, viewBox.width, viewBox.height]);
|
|
31942
31960
|
const mapContent = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(GElement, { type: "boundary", children: boundaries.map((item) => {
|
|
31943
31961
|
const boundaryId = Number(item.id);
|
|
31944
|
-
return (jsxRuntime.jsx(SelectableBoundaryElement$1, { data: item, boundaryColors: boundaryColors, boundaryStrokePx: boundaryStrokePx, isIsolated: isolatedBoundaryIds.has(boundaryId), selected: selectedIdSet.has(boundaryId), hovered: hoveredId === boundaryId, viewBoxWidth: viewBox.width, viewBoxHeight: viewBox.height, containerWidth: containerWidth, containerHeight: containerHeight, onHoverChange: onHoverChange, onBoundaryClick: onBoundaryClick }, item.id));
|
|
31962
|
+
return (jsxRuntime.jsx(SelectableBoundaryElement$1, { data: item, boundaryColors: boundaryColors, boundaryStrokePx: boundaryStrokePx, isIsolated: isolatedBoundaryIds.has(boundaryId), selected: selectedIdSet.has(boundaryId), hovered: hoveredId === boundaryId, viewBoxWidth: viewBox.width, viewBoxHeight: viewBox.height, containerWidth: containerWidth, containerHeight: containerHeight, onHoverChange: onHoverChange, onBoundaryClick: onBoundaryClick, onIsolatedTap: onIsolatedTap }, item.id));
|
|
31945
31963
|
}) }), jsxRuntime.jsxs(GElement, { type: "channel", children: [jsxRuntime.jsx(ChannelClipPath, {}), channels.map((item) => (jsxRuntime.jsx(ChannelElement, { data: item }, item.id)))] })] }));
|
|
31946
31964
|
return (jsxRuntime.jsx("svg", { className: styles.mapSvg, xmlns: "http://www.w3.org/2000/svg", viewBox: viewBoxToString(viewBox), width: "100%", height: "100%", preserveAspectRatio: "xMidYMid meet", shapeRendering: "geometricPrecision", children: mapContentTransform ? (jsxRuntime.jsx("g", { transform: mapContentTransform, children: mapContent })) : (mapContent) }));
|
|
31947
31965
|
};
|
|
@@ -32000,7 +32018,7 @@ const PartitionPickerGridSvg = ({ viewBox, gridStyle }) => {
|
|
|
32000
32018
|
shapeRendering: "geometricPrecision", "aria-hidden": true, children: jsxRuntime.jsx(MapGridBackground$1, { viewBox: viewBox, gridStyle: gridStyle }) }));
|
|
32001
32019
|
};
|
|
32002
32020
|
|
|
32003
|
-
const PartitionNameLabels = ({ items, selectedIds, labelStyles, platform = exports.PlatformType.WEB, showSelectionOrder = false, rotation = 0, onHoverChange, onBoundaryClick, }) => {
|
|
32021
|
+
const PartitionNameLabels = ({ items, selectedIds, labelStyles, platform = exports.PlatformType.WEB, showSelectionOrder = false, rotation = 0, onHoverChange, onBoundaryClick, onIsolatedTap, }) => {
|
|
32004
32022
|
const isWeb = platform === exports.PlatformType.WEB;
|
|
32005
32023
|
const orderBadgeStyle = React.useMemo(() => ({
|
|
32006
32024
|
width: labelStyles.selectionOrderBadge.width,
|
|
@@ -32036,30 +32054,35 @@ const PartitionNameLabels = ({ items, selectedIds, labelStyles, platform = expor
|
|
|
32036
32054
|
.filter(Boolean)
|
|
32037
32055
|
.join(' ');
|
|
32038
32056
|
const showOrderWithName = showOrderBadge && showNameLabel;
|
|
32039
|
-
const selectionOrderGapPx = isWeb
|
|
32040
|
-
|
|
32041
|
-
:
|
|
32042
|
-
|
|
32057
|
+
const selectionOrderGapPx = isWeb ? WEB_SELECTION_ORDER_GAP_PX : H5_SELECTION_ORDER_GAP_PX;
|
|
32058
|
+
const boundaryIdProps = isIsolated
|
|
32059
|
+
? { [PARTITION_ISOLATED_BOUNDARY_ID_ATTR]: item.id }
|
|
32060
|
+
: { [PARTITION_BOUNDARY_ID_ATTR]: item.id };
|
|
32043
32061
|
return (jsxRuntime.jsxs("div", { className: labelClassName, style: {
|
|
32044
32062
|
left: `${item.leftPct}%`,
|
|
32045
32063
|
top: `${item.topPct}%`,
|
|
32046
32064
|
transform: `translate(-50%, -50%) rotate(${-rotation}deg)`,
|
|
32047
32065
|
...(showOrderWithName ? { gap: selectionOrderGapPx } : undefined),
|
|
32048
|
-
}, ...boundaryIdProps, onMouseEnter: isIsolated ? undefined : () => onHoverChange(item.id), onMouseLeave: isIsolated ? undefined : () => onHoverChange(null), onClick:
|
|
32049
|
-
?
|
|
32050
|
-
event
|
|
32051
|
-
|
|
32052
|
-
|
|
32053
|
-
|
|
32066
|
+
}, ...boundaryIdProps, onMouseEnter: isIsolated ? undefined : () => onHoverChange(item.id), onMouseLeave: isIsolated ? undefined : () => onHoverChange(null), onClick: isIsolated
|
|
32067
|
+
? onIsolatedTap
|
|
32068
|
+
? (event) => {
|
|
32069
|
+
event.stopPropagation();
|
|
32070
|
+
onIsolatedTap(item.id, event.clientX, event.clientY);
|
|
32071
|
+
}
|
|
32072
|
+
: undefined
|
|
32073
|
+
: onBoundaryClick
|
|
32074
|
+
? (event) => {
|
|
32075
|
+
event.stopPropagation();
|
|
32076
|
+
onBoundaryClick(item.id);
|
|
32077
|
+
}
|
|
32078
|
+
: undefined, children: [showOrderBadge && (jsxRuntime.jsx("div", { className: styles.selectionOrderBadge, style: orderBadgeStyle, children: selectionOrder })), showNameLabel && (jsxRuntime.jsx("div", { className: `${styles.labelPill} ${!isWeb ? styles.labelPillH5 : ''}`, style: pillStyle, children: jsxRuntime.jsx("span", { className: `${styles.labelText} ${!isWeb ? styles.labelTextH5 : ''}`, children: item.name }) })), isIsolated && (jsxRuntime.jsx("div", { className: `${styles.isolatedIconBelow}`, dangerouslySetInnerHTML: { __html: ISOLATED_BOUNDARY_SVG_2 } }))] }, item.id));
|
|
32054
32079
|
}) }));
|
|
32055
32080
|
};
|
|
32056
32081
|
|
|
32057
32082
|
const DEFAULT_BACKGROUND = PARTITION_PICKER_GRID_BASE_COLOR;
|
|
32058
|
-
/** 地块 polygon / 标签上的 data 属性,供 viewport 点击命中与表格联动 */
|
|
32059
|
-
const PARTITION_BOUNDARY_ID_ATTR = 'data-partition-boundary-id';
|
|
32060
32083
|
/** Map 模式下 OverlayViewF 默认 z-index */
|
|
32061
32084
|
const DEFAULT_OVERLAY_Z_INDEX = 100;
|
|
32062
|
-
const MowerPartitionPickerMap = React.forwardRef(({ mapJson, mapConfig, pickerStyleConfig, sn = '', platform = exports.PlatformType.WEB, width, height, padding = 0, backgroundColor = DEFAULT_BACKGROUND, defaultTransform, mapRef, minZoom = 0.5, maxZoom = 3, enablePanZoom = true, refitOnResize = true, onSizeChange, selectedBoundaryIds, defaultSelectedBoundaryIds, onSelectionChange, hoveredBoundaryId, defaultHoveredBoundaryId, onBoundaryHoverChange, showSelectionOrder = false, zIndex = DEFAULT_OVERLAY_Z_INDEX, className, style, }, ref) => {
|
|
32085
|
+
const MowerPartitionPickerMap = React.forwardRef(({ mapJson, mapConfig, pickerStyleConfig, sn = '', platform = exports.PlatformType.WEB, width, height, padding = 0, backgroundColor = DEFAULT_BACKGROUND, defaultTransform, mapRef, minZoom = 0.5, maxZoom = 3, enablePanZoom = true, refitOnResize = true, onSizeChange, selectedBoundaryIds, defaultSelectedBoundaryIds, onSelectionChange, hoveredBoundaryId, defaultHoveredBoundaryId, onBoundaryHoverChange, showSelectionOrder = false, onIsolatedBoundaryTap, zIndex = DEFAULT_OVERLAY_Z_INDEX, className, style, }, ref) => {
|
|
32063
32086
|
/**
|
|
32064
32087
|
* 是否为 Map 模式(传入 mapRef 时为 true):
|
|
32065
32088
|
* - true:Google Maps 底图 + OverlayViewF,平移/缩放/fit 由底图负责
|
|
@@ -32118,6 +32141,24 @@ const MowerPartitionPickerMap = React.forwardRef(({ mapJson, mapConfig, pickerSt
|
|
|
32118
32141
|
}, [mapJson]);
|
|
32119
32142
|
/** 孤立地块 id 列表(未连接到主地块的子地块) */
|
|
32120
32143
|
const isolatedBoundaryIds = useIsolatedBoundaryIds(mapJson);
|
|
32144
|
+
const boundaryNameById = React.useMemo(() => {
|
|
32145
|
+
const names = new Map();
|
|
32146
|
+
for (const boundary of generateBoundaryData(mapJson)) {
|
|
32147
|
+
names.set(boundary.id, boundary.name);
|
|
32148
|
+
}
|
|
32149
|
+
return names;
|
|
32150
|
+
}, [mapJson]);
|
|
32151
|
+
const handleIsolatedTap = React.useCallback((boundaryId, clientX, clientY) => {
|
|
32152
|
+
if (!onIsolatedBoundaryTap || !isolatedBoundaryIds.has(boundaryId))
|
|
32153
|
+
return;
|
|
32154
|
+
onIsolatedBoundaryTap({
|
|
32155
|
+
boundaryId,
|
|
32156
|
+
boundaryName: boundaryNameById.get(boundaryId),
|
|
32157
|
+
clientX,
|
|
32158
|
+
clientY,
|
|
32159
|
+
});
|
|
32160
|
+
}, [boundaryNameById, isolatedBoundaryIds, onIsolatedBoundaryTap]);
|
|
32161
|
+
const isolatedTapHandler = onIsolatedBoundaryTap ? handleIsolatedTap : undefined;
|
|
32121
32162
|
/** 选中地块 id 列表(受控/非受控)与切换选中回调 */
|
|
32122
32163
|
const { selectedIds, toggleBoundary, setSelectedIds } = useBoundarySelection({
|
|
32123
32164
|
selectedBoundaryIds,
|
|
@@ -32143,7 +32184,15 @@ const MowerPartitionPickerMap = React.forwardRef(({ mapJson, mapConfig, pickerSt
|
|
|
32143
32184
|
toggleBoundary(id);
|
|
32144
32185
|
}, [isolatedBoundaryIds, toggleBoundary]);
|
|
32145
32186
|
/** Standalone 模式:由 viewport 统一处理点击(支持在地块上拖拽平移) */
|
|
32146
|
-
const handleViewportTap = React.useCallback((target) => {
|
|
32187
|
+
const handleViewportTap = React.useCallback(({ target, clientX, clientY }) => {
|
|
32188
|
+
const isolatedEl = target.closest(`[${PARTITION_ISOLATED_BOUNDARY_ID_ATTR}]`);
|
|
32189
|
+
if (isolatedEl) {
|
|
32190
|
+
const isolatedId = Number(isolatedEl.getAttribute(PARTITION_ISOLATED_BOUNDARY_ID_ATTR));
|
|
32191
|
+
if (Number.isFinite(isolatedId) && isolatedBoundaryIds.has(isolatedId)) {
|
|
32192
|
+
handleIsolatedTap(isolatedId, clientX, clientY);
|
|
32193
|
+
}
|
|
32194
|
+
return;
|
|
32195
|
+
}
|
|
32147
32196
|
const boundaryEl = target.closest(`[${PARTITION_BOUNDARY_ID_ATTR}]`);
|
|
32148
32197
|
if (!boundaryEl)
|
|
32149
32198
|
return;
|
|
@@ -32151,7 +32200,7 @@ const MowerPartitionPickerMap = React.forwardRef(({ mapJson, mapConfig, pickerSt
|
|
|
32151
32200
|
if (!Number.isFinite(id) || isolatedBoundaryIds.has(id))
|
|
32152
32201
|
return;
|
|
32153
32202
|
toggleBoundary(id);
|
|
32154
|
-
}, [isolatedBoundaryIds, toggleBoundary]);
|
|
32203
|
+
}, [handleIsolatedTap, isolatedBoundaryIds, toggleBoundary]);
|
|
32155
32204
|
/**
|
|
32156
32205
|
* Map 模式 overlay 状态(bounds / viewBox / fitBounds / overlayScale)。
|
|
32157
32206
|
* 无 mapRef 时 hook 内部 enabled=false,返回值不参与渲染。
|
|
@@ -32260,12 +32309,12 @@ const MowerPartitionPickerMap = React.forwardRef(({ mapJson, mapConfig, pickerSt
|
|
|
32260
32309
|
...(isMapMode ? {} : layoutStyle),
|
|
32261
32310
|
}), [isMapMode, layoutStyle, resolvedBackgroundColor, style]);
|
|
32262
32311
|
/** 地块 + 通道 SVG;Map 模式不在 SVG 内旋转(由 OverlayViewF rotate 处理) */
|
|
32263
|
-
const mapSvgLayer = viewBox && isLayersReady ? (jsxRuntime.jsx(PartitionPickerSvg, { svgElementDatas: svgElementDatas, viewBox: viewBox, containerWidth: overlayWidth, containerHeight: overlayHeight, mapRotation: isMapMode ? 0 : actureRotate, boundaryColors: mergedPickerStyles.boundary, boundaryStrokePx: mergedPickerStyles.boundaryStrokePx, isolatedBoundaryIds: isolatedBoundaryIds, selectedIds: selectedIds, hoveredId: hoveredId, onHoverChange: handleHoverChange, onBoundaryClick: isMapMode ? handleBoundaryClick : undefined })) : null;
|
|
32312
|
+
const mapSvgLayer = viewBox && isLayersReady ? (jsxRuntime.jsx(PartitionPickerSvg, { svgElementDatas: svgElementDatas, viewBox: viewBox, containerWidth: overlayWidth, containerHeight: overlayHeight, mapRotation: isMapMode ? 0 : actureRotate, boundaryColors: mergedPickerStyles.boundary, boundaryStrokePx: mergedPickerStyles.boundaryStrokePx, isolatedBoundaryIds: isolatedBoundaryIds, selectedIds: selectedIds, hoveredId: hoveredId, onHoverChange: handleHoverChange, onBoundaryClick: isMapMode ? handleBoundaryClick : undefined, onIsolatedTap: isMapMode ? isolatedTapHandler : undefined })) : null;
|
|
32264
32313
|
/**
|
|
32265
32314
|
* 分区标签 + 充电桩 HTML 层。
|
|
32266
32315
|
* Map 模式:平铺于 overlay 根节点;Standalone:包在 mapOverlayLayer 内做 CSS 旋转。
|
|
32267
32316
|
*/
|
|
32268
|
-
const overlayLayers = viewBox && isLayersReady ? (isMapMode ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(PartitionNameLabels, { items: labelItems, selectedIds: selectedIds, labelStyles: mergedPickerStyles.labels, platform: platform, showSelectionOrder: showSelectionOrder, rotation: actureRotate, onHoverChange: handleHoverChange, onBoundaryClick: handleBoundaryClick }), jsxRuntime.jsx(CharginPile, { viewBox: viewBox, rotation: actureRotate })] })) : (jsxRuntime.jsxs("div", { className: styles.mapOverlayLayer, style: mapOverlayLayerStyle, children: [jsxRuntime.jsx(PartitionNameLabels, { items: labelItems, selectedIds: selectedIds, labelStyles: mergedPickerStyles.labels, platform: platform, showSelectionOrder: showSelectionOrder, rotation: actureRotate, onHoverChange: handleHoverChange }), jsxRuntime.jsx(CharginPile, { viewBox: viewBox, rotation: actureRotate, viewRotationMode: "overlay-parent", containerWidth: overlayWidth, containerHeight: overlayHeight, sizeInSvgUnits: true, minDisplaySizePx: PARTITION_PICKER_CHARGING_PILE_MIN_DISPLAY_PX })] }))) : null;
|
|
32317
|
+
const overlayLayers = viewBox && isLayersReady ? (isMapMode ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(PartitionNameLabels, { items: labelItems, selectedIds: selectedIds, labelStyles: mergedPickerStyles.labels, platform: platform, showSelectionOrder: showSelectionOrder, rotation: actureRotate, onHoverChange: handleHoverChange, onBoundaryClick: handleBoundaryClick, onIsolatedTap: isolatedTapHandler }), jsxRuntime.jsx(CharginPile, { viewBox: viewBox, rotation: actureRotate })] })) : (jsxRuntime.jsxs("div", { className: styles.mapOverlayLayer, style: mapOverlayLayerStyle, children: [jsxRuntime.jsx(PartitionNameLabels, { items: labelItems, selectedIds: selectedIds, labelStyles: mergedPickerStyles.labels, platform: platform, showSelectionOrder: showSelectionOrder, rotation: actureRotate, onHoverChange: handleHoverChange, onIsolatedTap: isolatedTapHandler }), jsxRuntime.jsx(CharginPile, { viewBox: viewBox, rotation: actureRotate, viewRotationMode: "overlay-parent", containerWidth: overlayWidth, containerHeight: overlayHeight, sizeInSvgUnits: true, minDisplaySizePx: PARTITION_PICKER_CHARGING_PILE_MIN_DISPLAY_PX })] }))) : null;
|
|
32269
32318
|
/** Map 模式:渲染 OverlayViewF,底图为 Google Maps */
|
|
32270
32319
|
if (isMapMode && mapRef) {
|
|
32271
32320
|
return (jsxRuntime.jsx(CommonContextProvider, { value: commonValue, children: jsxRuntime.jsx(SvgEditContextProvider, { value: svgEditValue, children: jsxRuntime.jsx(OverlayViewF, { map: mapRef, mapPaneName: "overlayMouseTarget", bounds: googleOverlay.bounds ?? undefined, rotate: actureRotate, zIndex: zIndex, onDraw: googleOverlay.handleOverlayDraw, children: jsxRuntime.jsxs("div", { className: `${styles.googleOverlayRoot} ${className || ''}`, style: containerStyle, onMouseLeave: () => setHoveredId(null), children: [mapSvgLayer, overlayLayers] }) }) }) }));
|
|
@@ -11,7 +11,7 @@ import React from 'react';
|
|
|
11
11
|
import { MowerPartitionPickerMapProps, MowerPartitionPickerMapRef } from './partitionPicker/types';
|
|
12
12
|
export declare const MowerPartitionPickerMap: React.ForwardRefExoticComponent<MowerPartitionPickerMapProps & React.RefAttributes<MowerPartitionPickerMapRef>>;
|
|
13
13
|
export default MowerPartitionPickerMap;
|
|
14
|
-
export type { MowerPartitionPickerMapProps, MowerPartitionPickerMapRef, CssLength, } from './partitionPicker/types';
|
|
14
|
+
export type { MowerPartitionPickerMapProps, MowerPartitionPickerMapRef, CssLength, IsolatedBoundaryTapPayload, } from './partitionPicker/types';
|
|
15
15
|
export type { PartitionPickerStyleConfig, PartitionPickerBoundaryColors, PartitionPickerLabelStyles, PartitionPickerGridStyle, ResolvedPartitionPickerStyles, } from './partitionPicker/constants';
|
|
16
16
|
export { resolvePartitionPickerStyles, getPartitionPickerColors, getPartitionPickerLabelStyles, PARTITION_PICKER_COLORS_WEB, PARTITION_PICKER_COLORS_H5, PARTITION_PICKER_LABEL_STYLES_WEB, PARTITION_PICKER_LABEL_STYLES_H5, } from './partitionPicker/constants';
|
|
17
17
|
//# sourceMappingURL=MowerPartitionPickerMap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MowerPartitionPickerMap.d.ts","sourceRoot":"","sources":["../../src/render/MowerPartitionPickerMap.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAON,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MowerPartitionPickerMap.d.ts","sourceRoot":"","sources":["../../src/render/MowerPartitionPickerMap.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAON,MAAM,OAAO,CAAC;AAqBf,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAiBnG,eAAO,MAAM,uBAAuB,iHA8cnC,CAAC;AAIF,eAAe,uBAAuB,CAAC;AAEvC,YAAY,EACV,4BAA4B,EAC5B,0BAA0B,EAC1B,SAAS,EACT,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,EAC1B,iCAAiC,EACjC,gCAAgC,GACjC,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { CSSProperties } from 'react';
|
|
2
2
|
import { MapConfig, PlatformType } from '../../types';
|
|
3
|
+
export declare const ISOLATED_BOUNDARY_SVG_2 = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<rect width=\"20\" height=\"20\" rx=\"10\" fill=\"#8498A9\" fill-opacity=\"0.7\"/>\n<path d=\"M11.7178 12.4307C12.2201 11.9284 12.9629 11.8149 13.5752 12.0879L12.9756 12.6865C12.7427 12.6649 12.5034 12.7432 12.3223 12.917C12.3176 12.9214 12.3122 12.9251 12.3076 12.9297L11.7344 13.5029C11.4091 13.8284 11.409 14.3563 11.7344 14.6816L12.0879 15.0342C12.4133 15.3595 12.9412 15.3596 13.2666 15.0342L13.5527 14.7461L13.8408 14.46C14.011 14.2896 14.091 14.0629 14.083 13.8398L14.7002 13.2236C14.9614 13.8318 14.8443 14.5639 14.3477 15.0605L13.8613 15.5459C13.2105 16.1963 12.1556 16.1964 11.5049 15.5459L11.2314 15.2725C10.5816 14.6218 10.5815 13.5677 11.2314 12.917L11.7178 12.4307Z\" fill=\"white\"/>\n<path d=\"M12.1738 4.00488C11.6587 4.98031 10.6742 7.45647 10.8555 9.55762C11.3152 9.02665 12.5281 7.88542 13.7002 7.56934C13.2369 8.10318 12.5313 9.25837 12.1445 10.7949C11.6656 10.9223 11.2115 11.1723 10.835 11.5488L10.3496 12.0352C9.77429 12.6108 9.49095 13.367 9.49707 14.1211H4.72656C5.04472 13.1579 5.14564 10.847 3.00586 9.30957C4.04607 9.35761 5.61481 9.31003 6.83691 10.4141C6.66589 9.30985 6.83631 8.53141 4.90137 5.78711C5.69833 5.98284 7.68952 6.32958 8.74414 7.96875C9.20789 6.88364 10.4356 4.93597 12.1738 4.00488Z\" fill=\"white\"/>\n<path d=\"M14.8838 9.2666C15.5345 8.61618 16.5894 8.6153 17.2402 9.26562L17.5137 9.53906C18.164 10.19 18.1633 11.2458 17.5127 11.8965L17.0264 12.3828C16.5297 12.879 15.7985 12.9947 15.1904 12.7334L15.8115 12.1104C16.0351 12.1187 16.2619 12.0398 16.4326 11.8691L17.0068 11.2949C17.332 10.9697 17.3327 10.4417 17.0078 10.1162L16.6543 9.7627C16.3491 9.45791 15.8654 9.43902 15.5381 9.70605C15.5158 9.72417 15.4944 9.74388 15.4736 9.76465L14.9004 10.3379C14.7179 10.5204 14.6369 10.7665 14.6592 11.0049L14.0547 11.6084C13.7823 10.9964 13.8955 10.255 14.3975 9.75293L14.8838 9.2666Z\" fill=\"white\"/>\n</svg>";
|
|
3
4
|
/** ChannelClipPath 等内容裁剪使用的 SVG 坐标边距(与用户传入的屏幕 padding 无关) */
|
|
4
5
|
export declare const PARTITION_PICKER_CONTENT_CLIP_PADDING = 0;
|
|
6
|
+
/** 可选中地块 polygon / 标签 data 属性 */
|
|
7
|
+
export declare const PARTITION_BOUNDARY_ID_ATTR = "data-partition-boundary-id";
|
|
8
|
+
/** 孤立子地块命中标记(不可选中) */
|
|
9
|
+
export declare const PARTITION_ISOLATED_BOUNDARY_ID_ATTR = "data-partition-isolated-boundary-id";
|
|
5
10
|
/** H5:子区域屏幕宽度超过该值才展示名称标签(px) */
|
|
6
11
|
export declare const H5_PARTITION_LABEL_MIN_SCREEN_WIDTH_PX = 92;
|
|
7
12
|
/** H5:名称气泡总宽度(px) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/render/partitionPicker/constants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/render/partitionPicker/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { type RefObject } from 'react';
|
|
2
2
|
import { MapData } from '@/types';
|
|
3
3
|
import { ViewBox, ScreenPaddingInput } from '../types';
|
|
4
|
+
/** Standalone 模式下容器内轻触/点击命中结果(未发生明显拖拽时) */
|
|
5
|
+
export interface ViewportTapPayload {
|
|
6
|
+
/** pointerdown / touchstart 时命中的 DOM 元素(touchend 时会用 elementFromPoint 修正) */
|
|
7
|
+
target: Element;
|
|
8
|
+
/** 抬起时指针相对视口的 X 坐标(px) */
|
|
9
|
+
clientX: number;
|
|
10
|
+
/** 抬起时指针相对视口的 Y 坐标(px) */
|
|
11
|
+
clientY: number;
|
|
12
|
+
}
|
|
4
13
|
interface UseMapViewportOptions {
|
|
5
14
|
/** 地图 JSON 数据,用于计算包围盒与初始 fit */
|
|
6
15
|
mapJson: MapData;
|
|
@@ -21,7 +30,7 @@ interface UseMapViewportOptions {
|
|
|
21
30
|
/** 容器尺寸变化时是否重新 fit,默认 true */
|
|
22
31
|
refitOnResize?: boolean;
|
|
23
32
|
/** 在容器内按下并抬起且未发生明显位移时触发(用于地块点击选中) */
|
|
24
|
-
onViewportTap?: (
|
|
33
|
+
onViewportTap?: (payload: ViewportTapPayload) => void;
|
|
25
34
|
/** 地图内容旋转角(度),用于修正平移方向与屏幕手势一致 */
|
|
26
35
|
mapRotationDeg?: number;
|
|
27
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMapViewport.d.ts","sourceRoot":"","sources":["../../../../src/render/partitionPicker/hooks/useMapViewport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAWvD,UAAU,qBAAqB;IAC7B,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qCAAqC;IACrC,aAAa,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"useMapViewport.d.ts","sourceRoot":"","sources":["../../../../src/render/partitionPicker/hooks/useMapViewport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAWvD,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,qBAAqB;IAC7B,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qCAAqC;IACrC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,iCAAiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA0CD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,YAAY,EAAE,oBAAoB,EAClC,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAa,EACb,OAAW,EACX,aAAoB,EACpB,aAAoB,EACpB,aAAa,EACb,cAAkB,GACnB,EAAE,qBAAqB;IA4hBpB,qBAAqB;;IAErB,gCAAgC;;IAEhC,oCAAoC;;IAEpC,6CAA6C;;IAE7C,mBAAmB;;IAEnB,gCAAgC;8BAxUjB,kBAAkB;EA2UpC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PlatformType } from '@/types';
|
|
2
|
-
import { PartitionLabelItem } from '../hooks/usePartitionLabelItems';
|
|
3
2
|
import { PartitionPickerLabelStyles } from '../constants';
|
|
3
|
+
import { PartitionLabelItem } from '../hooks/usePartitionLabelItems';
|
|
4
4
|
interface PartitionNameLabelsProps {
|
|
5
5
|
items: PartitionLabelItem[];
|
|
6
6
|
selectedIds: number[];
|
|
@@ -13,7 +13,9 @@ interface PartitionNameLabelsProps {
|
|
|
13
13
|
onHoverChange: (id: number | null) => void;
|
|
14
14
|
/** Map 模式:点击标签切换选中(Standalone 由 viewport 统一处理) */
|
|
15
15
|
onBoundaryClick?: (id: number) => void;
|
|
16
|
+
/** 点击孤立子地块标签或图标(Map 模式直接点击;Standalone 由 viewport 处理) */
|
|
17
|
+
onIsolatedTap?: (id: number, clientX: number, clientY: number) => void;
|
|
16
18
|
}
|
|
17
|
-
declare const PartitionNameLabels: ({ items, selectedIds, labelStyles, platform, showSelectionOrder, rotation, onHoverChange, onBoundaryClick, }: PartitionNameLabelsProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
declare const PartitionNameLabels: ({ items, selectedIds, labelStyles, platform, showSelectionOrder, rotation, onHoverChange, onBoundaryClick, onIsolatedTap, }: PartitionNameLabelsProps) => import("react/jsx-runtime").JSX.Element;
|
|
18
20
|
export default PartitionNameLabels;
|
|
19
21
|
//# sourceMappingURL=PartitionNameLabels.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartitionNameLabels.d.ts","sourceRoot":"","sources":["../../../../src/render/partitionPicker/layers/PartitionNameLabels.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PartitionNameLabels.d.ts","sourceRoot":"","sources":["../../../../src/render/partitionPicker/layers/PartitionNameLabels.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAML,0BAA0B,EAG3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,UAAU,wBAAwB;IAChC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4CAA4C;IAC5C,WAAW,EAAE,0BAA0B,CAAC;IACxC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,kDAAkD;IAClD,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED,QAAA,MAAM,mBAAmB,GAAI,6HAU1B,wBAAwB,4CA8G1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -17,7 +17,8 @@ interface PartitionPickerSvgProps {
|
|
|
17
17
|
hoveredId: number | null;
|
|
18
18
|
onHoverChange: (id: number | null) => void;
|
|
19
19
|
onBoundaryClick?: (id: number) => void;
|
|
20
|
+
onIsolatedTap?: (id: number, clientX: number, clientY: number) => void;
|
|
20
21
|
}
|
|
21
|
-
declare const PartitionPickerSvg: ({ svgElementDatas, viewBox, containerWidth, containerHeight, mapRotation, boundaryColors, boundaryStrokePx, isolatedBoundaryIds, selectedIds, hoveredId, onHoverChange, onBoundaryClick, }: PartitionPickerSvgProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
declare const PartitionPickerSvg: ({ svgElementDatas, viewBox, containerWidth, containerHeight, mapRotation, boundaryColors, boundaryStrokePx, isolatedBoundaryIds, selectedIds, hoveredId, onHoverChange, onBoundaryClick, onIsolatedTap, }: PartitionPickerSvgProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
23
|
export default PartitionPickerSvg;
|
|
23
24
|
//# sourceMappingURL=PartitionPickerSvg.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartitionPickerSvg.d.ts","sourceRoot":"","sources":["../../../../src/render/partitionPicker/layers/PartitionPickerSvg.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAChC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,UAAU,uBAAuB;IAC/B,eAAe,EAAE,gBAAgB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,cAAc,EAAE,6BAA6B,CAAC;IAC9C,iBAAiB;IACjB,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IACnD,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"PartitionPickerSvg.d.ts","sourceRoot":"","sources":["../../../../src/render/partitionPicker/layers/PartitionPickerSvg.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAChC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,UAAU,uBAAuB;IAC/B,eAAe,EAAE,gBAAgB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,cAAc,EAAE,6BAA6B,CAAC;IAC9C,iBAAiB;IACjB,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IACnD,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED,QAAA,MAAM,kBAAkB,GAAI,2MAczB,uBAAuB,4CAgEzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
import { BoundaryData } from '@/processor/unified';
|
|
9
9
|
import React from 'react';
|
|
10
10
|
import { PartitionPickerBoundaryColors, PartitionPickerBoundaryStrokePx } from '../constants';
|
|
11
|
-
export declare const PARTITION_BOUNDARY_ID_ATTR = "data-partition-boundary-id";
|
|
12
11
|
interface SelectableBoundaryElementProps {
|
|
13
12
|
data: BoundaryData;
|
|
14
13
|
/** 地块交互态配色(由 resolvePartitionPickerStyles 合并外部配置后传入) */
|
|
@@ -26,7 +25,10 @@ interface SelectableBoundaryElementProps {
|
|
|
26
25
|
onHoverChange: (id: number | null) => void;
|
|
27
26
|
/** Map 模式:直接点击地块切换选中(Standalone 由 viewport 统一处理) */
|
|
28
27
|
onBoundaryClick?: (id: number) => void;
|
|
28
|
+
/** Map 模式:点击孤立子地块(Standalone 由 viewport + data 属性处理) */
|
|
29
|
+
onIsolatedTap?: (id: number, clientX: number, clientY: number) => void;
|
|
29
30
|
}
|
|
30
|
-
declare const _default: React.MemoExoticComponent<({ data, boundaryColors, boundaryStrokePx, isIsolated, selected, hovered, viewBoxWidth, viewBoxHeight, containerWidth, containerHeight, onHoverChange, onBoundaryClick, }: SelectableBoundaryElementProps) => import("react/jsx-runtime").JSX.Element>;
|
|
31
|
+
declare const _default: React.MemoExoticComponent<({ data, boundaryColors, boundaryStrokePx, isIsolated, selected, hovered, viewBoxWidth, viewBoxHeight, containerWidth, containerHeight, onHoverChange, onBoundaryClick, onIsolatedTap, }: SelectableBoundaryElementProps) => import("react/jsx-runtime").JSX.Element>;
|
|
31
32
|
export default _default;
|
|
33
|
+
export { PARTITION_BOUNDARY_ID_ATTR, PARTITION_ISOLATED_BOUNDARY_ID_ATTR } from '../constants';
|
|
32
34
|
//# sourceMappingURL=SelectableBoundaryElement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectableBoundaryElement.d.ts","sourceRoot":"","sources":["../../../../src/render/partitionPicker/layers/SelectableBoundaryElement.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,
|
|
1
|
+
{"version":3,"file":"SelectableBoundaryElement.d.ts","sourceRoot":"","sources":["../../../../src/render/partitionPicker/layers/SelectableBoundaryElement.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAIhC,MAAM,cAAc,CAAC;AAItB,UAAU,8BAA8B;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,wDAAwD;IACxD,cAAc,EAAE,6BAA6B,CAAC;IAC9C,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,oDAAoD;IACpD,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;4OAgBE,8BAA8B;AA+FjC,wBAA+C;AAE/C,OAAO,EAAE,0BAA0B,EAAE,mCAAmC,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -27,6 +27,22 @@ export type ScreenPaddingInput = number | [number, number] | [number, number, nu
|
|
|
27
27
|
export declare const DEFAULT_SCREEN_PADDING = 50;
|
|
28
28
|
export declare function normalizeScreenPadding(padding?: ScreenPaddingInput, defaultValue?: number): ScreenPaddingBox;
|
|
29
29
|
export declare function isZeroScreenPadding(padding: ScreenPaddingBox): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* 孤立子地块点击回调参数
|
|
32
|
+
*
|
|
33
|
+
* 地图包只负责识别点击并上报地块信息与指针坐标,不内置 Toast;
|
|
34
|
+
* 业务侧自行展示提示文案。
|
|
35
|
+
*/
|
|
36
|
+
export interface IsolatedBoundaryTapPayload {
|
|
37
|
+
/** 孤立子地块 id(与地图 JSON boundary id 一致) */
|
|
38
|
+
boundaryId: number;
|
|
39
|
+
/** 地块名称(来自地图 JSON),数据缺失时为 `undefined` */
|
|
40
|
+
boundaryName?: string;
|
|
41
|
+
/** 点击位置相对浏览器视口的 X 坐标(px) */
|
|
42
|
+
clientX: number;
|
|
43
|
+
/** 点击位置相对浏览器视口的 Y 坐标(px) */
|
|
44
|
+
clientY: number;
|
|
45
|
+
}
|
|
30
46
|
/** 地图叠加层默认偏移,与 MowerMapRenderer.defaultTransform 一致(Standalone 目前仅消费 rotation) */
|
|
31
47
|
export interface PartitionPickerMapTransform {
|
|
32
48
|
/** Web Mercator 米,预留 */
|
|
@@ -119,6 +135,13 @@ export interface MowerPartitionPickerMapProps {
|
|
|
119
135
|
* 序号按 selectedBoundaryIds 数组顺序从 1 开始
|
|
120
136
|
*/
|
|
121
137
|
showSelectionOrder?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* 孤立子地块点击回调(Web / H5 均触发)。
|
|
140
|
+
*
|
|
141
|
+
* Standalone 模式经 viewport 点击判定(与拖拽平移区分);Map 模式直接响应 polygon / 标签点击。
|
|
142
|
+
* 业务侧收到回调后自行 Toast 等提示,防抖策略由业务侧处理。
|
|
143
|
+
*/
|
|
144
|
+
onIsolatedBoundaryTap?: (payload: IsolatedBoundaryTapPayload) => void;
|
|
122
145
|
className?: string;
|
|
123
146
|
style?: React.CSSProperties;
|
|
124
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/render/partitionPicker/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/render/partitionPicker/types.ts"],"names":[],"mappings":"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"}
|