@heycar/heycars-map 0.9.1 → 0.9.3

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.cjs CHANGED
@@ -9,7 +9,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
9
  const Vue = require("vue");
10
10
  const style = "";
11
11
  const name = "@heycar/heycars-map";
12
- const version = "0.9.1";
12
+ const version = "0.9.3";
13
13
  const type = "module";
14
14
  const scripts = {
15
15
  dev: "vite -c vite.config.dev.ts",
@@ -1100,16 +1100,24 @@ const isPlace = (place) => {
1100
1100
  return place.lng !== void 0 && place.lat !== void 0;
1101
1101
  };
1102
1102
  const sleep = (milliSeconds) => new Promise((resolve) => setTimeout(resolve, milliSeconds));
1103
- const assertPoint = (point) => {
1103
+ function assertPoint(point) {
1104
1104
  if (Array.isArray(point) && point.length === 2 && typeof point[0] === "number" && typeof point[1] === "number")
1105
1105
  return;
1106
1106
  throw new Error(`Assertion Error: expect type [number, number], actual is ${point}`);
1107
- };
1108
- const assertAngle = (angle) => {
1107
+ }
1108
+ function assertAngle(angle) {
1109
1109
  if (typeof angle === "number" || typeof angle === "undefined")
1110
1110
  return;
1111
1111
  throw new Error(`Assertion Error: expect type number | undefined, actual is ${angle}`);
1112
- };
1112
+ }
1113
+ function assertZone(zone) {
1114
+ try {
1115
+ if (Array.isArray(zone == null ? void 0 : zone.path) && zone.path.every(assertPoint))
1116
+ return;
1117
+ } catch (err) {
1118
+ throw new Error(`Assertion Error: expect type Zone, actual is ${JSON.stringify(zone)}`);
1119
+ }
1120
+ }
1113
1121
  const isLatLngLiteral = (value) => {
1114
1122
  return value != null && typeof value === "object" && Number.isFinite(value.lat) && Number.isFinite(value.lng);
1115
1123
  };
@@ -1155,6 +1163,18 @@ const pausableSleep = (milliSeconds) => {
1155
1163
  };
1156
1164
  return { sleepPromise: sleepDefered, pause, restart };
1157
1165
  };
1166
+ const MAX_ANIMATION_DISTANCE_VW = 100;
1167
+ const MIN_ANIMATION_DURATION = 400;
1168
+ const ANIMATION_DURATION_FOR_100VW = 800;
1169
+ const ANIMATION_DURATION_PER_ZOOM = 400;
1170
+ const BEIJIN_POINT = [116.2317, 39.5427];
1171
+ const ZINDEX_BUBBLE_LAYER = 50;
1172
+ const ZINDEX_START_END_LOGO_LAYER = 40;
1173
+ const ZINDEX_PLACE_LAYER = 30;
1174
+ const ZINDEX_CAR_LAYER = 21;
1175
+ const ZINDEX_PASSENGER_LAYER = 20;
1176
+ const ZINDEX_LINE_LAYER = 12;
1177
+ const ZINDEX_GREEN_ZONE = 10;
1158
1178
  const vec2lnglat = ([lng, lat]) => ({
1159
1179
  lng: Number(lng),
1160
1180
  lat: Number(lat)
@@ -1226,6 +1246,9 @@ const isGeoPositionEqual = (p1, p2) => {
1226
1246
  return false;
1227
1247
  return p1.coords.longitude === p2.coords.longitude && p1.coords.latitude === p2.coords.latitude;
1228
1248
  };
1249
+ const isZoneEqual = (z1, z2) => {
1250
+ return z1.path.every((point, idx) => isPointEqual(point, z2 == null ? void 0 : z2.path[idx]));
1251
+ };
1229
1252
  const amapPlaceName2DisplayName = (name2, options) => {
1230
1253
  const { isChina, province, city, district, township } = options;
1231
1254
  if (!name2)
@@ -1240,6 +1263,12 @@ const amapPlaceName2DisplayName = (name2, options) => {
1240
1263
  }
1241
1264
  return result;
1242
1265
  };
1266
+ const distanceVw2animationDuration = (distance) => {
1267
+ return Math.max(MIN_ANIMATION_DURATION, ANIMATION_DURATION_FOR_100VW * distance / 100);
1268
+ };
1269
+ const deltaZoom2animationDuration = (deltaZoom) => {
1270
+ return Math.max(MIN_ANIMATION_DURATION * 4, Math.abs(deltaZoom) * ANIMATION_DURATION_PER_ZOOM);
1271
+ };
1243
1272
  const toPlaceType = (maybePlace) => {
1244
1273
  var _a;
1245
1274
  const lng = Number(maybePlace.lng);
@@ -2245,15 +2274,6 @@ function detectWebGL() {
2245
2274
  }
2246
2275
  return "NOT_SUPPORTED";
2247
2276
  }
2248
- const MAX_ANIMATION_DISTANCE_VW = 100;
2249
- const BEIJIN_POINT = [116.2317, 39.5427];
2250
- const ZINDEX_BUBBLE_LAYER = 50;
2251
- const ZINDEX_START_END_LOGO_LAYER = 40;
2252
- const ZINDEX_PLACE_LAYER = 30;
2253
- const ZINDEX_CAR_LAYER = 21;
2254
- const ZINDEX_PASSENGER_LAYER = 20;
2255
- const ZINDEX_LINE_LAYER = 12;
2256
- const ZINDEX_GREEN_ZONE = 10;
2257
2277
  const useAmapLngLatToVw = (props) => {
2258
2278
  const apiMapLngLatToVw = (point) => {
2259
2279
  const amap2 = props.mapRef.value;
@@ -2389,8 +2409,13 @@ const Amap = defineSetup(function Amap2(props, { slots, emit }) {
2389
2409
  const map = mapRef.value;
2390
2410
  if (!center || !map)
2391
2411
  return;
2392
- const immediately = prevCenter ? apiMapDistanceVwOfPoints(center, prevCenter) > MAX_ANIMATION_DISTANCE_VW : true;
2393
- map.setCenter(center, immediately);
2412
+ if (!prevCenter)
2413
+ return map.setCenter(center, true);
2414
+ const distanceVw = apiMapDistanceVwOfPoints(center, prevCenter);
2415
+ if (distanceVw > MAX_ANIMATION_DISTANCE_VW)
2416
+ return map.setCenter(center, true);
2417
+ const duration = distanceVw2animationDuration(distanceVw);
2418
+ map.setCenter(center, false, duration);
2394
2419
  }
2395
2420
  );
2396
2421
  Vue.watch(
@@ -3334,7 +3359,9 @@ const InterruptableIntervalFitView = defineSetup(function InterruptableIntervalF
3334
3359
  });
3335
3360
  return () => null;
3336
3361
  });
3362
+ const imgEndPointEn = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IHgxPSI3Mi4zMzklIiB5MT0iNTAlIiB4Mj0iMCUiIHkyPSI1MCUiIGlkPSJwcmVmaXhfX2EiPjxzdG9wIHN0b3AtY29sb3I9IiNGRjg0NDciIG9mZnNldD0iMCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkY4QjRBIiBvZmZzZXQ9IjUwLjU5NiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkZBOTVBIiBvZmZzZXQ9IjEwMCUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0xMiAzMGMyLjEzNCAwIDMuODYzLS44OTMgMy44NjMtMS45OTUgMC0xLjEtMS43My0xLjk5NC0zLjg2My0xLjk5NC0yLjEzNCAwLTMuODYzLjg5My0zLjg2MyAxLjk5NEM4LjEzNyAyOS4xMDcgOS44NjcgMzAgMTIgMzB6IiBmaWxsLW9wYWNpdHk9Ii41IiBmaWxsPSIjNDM0ODVBIi8+PHBhdGggZD0iTTExIDI3LjAwNmMyLjEyOCAwLS45LTMuNzQzIDUuNjIxLTYuNjQzQzE5Ljg0MiAxOC40NTMgMjIgMTQuOTUzIDIyIDEwLjk1IDIyIDQuOTAyIDE3LjA3NSAwIDExIDBTMCA0LjkwMiAwIDEwLjk1YzAgMy45MTggMi4wNjggNy4zNTYgNS4xNzcgOS4yOUMxMS43NSAyMy4yODQgOS4wNiAyNy4wMDcgMTEgMjcuMDA3di0uMDAxeiIgc3Ryb2tlPSIjRkZGIiBmaWxsPSJ1cmwoI3ByZWZpeF9fYSkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMSkiLz48ZyBmaWxsPSIjRkZGIj48cGF0aCBkPSJNOC44OTMgMTIuNjY2SDYuNjYzdjEuMzY1aDIuNTc0di45NTJoLTMuNjZ2LTUuNDloMy41Nzh2Ljk0Nkg2LjY2M3YxLjI5aDIuMjI5ek0xMi4yNzUgMTEuMDAxYy40MyAwIC43Ny4xNDEgMS4wMi40MjQuMjUuMjgyLjM3NS42OTMuMzc1IDEuMjMzdjIuMzI1aC0xLjA0M3YtMS45ODdjMC0uNzEtLjIzNS0xLjA2NS0uNzA1LTEuMDY1YS43MzIuNzMyIDAgMDAtLjYwMy4yODljLS4xNTMuMTkyLS4yMjkuNDYzLS4yMjkuODEzdjEuOTVoLTEuMDQzdi0zLjg4NWguOTE1Yy4wMjUuMzA1LjA0OC41MTMuMDY4LjYyMy4yNS0uNDguNjY1LS43MiAxLjI0NS0uNzJ6TTE3LjI3NyA5LjI3NmgxLjA0M3Y1LjcwN2gtLjkxNWMtLjAyNS0uMjktLjA0NS0uNDg1LS4wNi0uNTg1YTEuMzE3IDEuMzE3IDAgMDEtLjUyOS41MDcgMS41MiAxLjUyIDAgMDEtLjcwOS4xNjhjLS4zMiAwLS42MTItLjA4LS44NzctLjI0YTEuNzI0IDEuNzI0IDAgMDEtLjYzOC0uN2MtLjE2LS4zMDgtLjI0LS42NzItLjI0LTEuMDkyIDAtLjQyNS4wOC0uNzkxLjI0LTEuMDk5LjE2LS4zMDcuMzczLS41NDEuNjM4LS43MDEuMjY1LS4xNi41NTctLjI0Ljg3Ny0uMjQuMjM1IDAgLjQ1NC4wNDcuNjU3LjE0Mi4yMDIuMDk1LjM3My4yNC41MTMuNDM1VjkuMjc2em0tLjkzIDQuOTA1Yy4yNiAwIC40OC0uMDk1LjY2LS4yODUuMTgtLjE5LjI3LS40NzUuMjctLjg1NSAwLS4zNzUtLjA5LS42NTQtLjI3LS44MzZhLjg5Mi44OTIgMCAwMC0uNjYtLjI3NC44MzIuODMyIDAgMDAtLjY2My4yOTJjLS4xNjguMTk1LS4yNTEuNDY4LS4yNTEuODE4IDAgLjM1LjA4My42MjcuMjUuODMyYS44MTUuODE1IDAgMDAuNjY1LjMwOHoiLz48L2c+PC9nPjwvc3ZnPg==";
3337
3363
  const imgEndPoint = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IHgxPSI3Mi4zMzklIiB5MT0iNTAlIiB4Mj0iMCUiIHkyPSI1MCUiIGlkPSJwcmVmaXhfX2EiPjxzdG9wIHN0b3AtY29sb3I9IiNGRjg0NDciIG9mZnNldD0iMCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkY4QjRBIiBvZmZzZXQ9IjUwLjU5NiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkZBOTVBIiBvZmZzZXQ9IjEwMCUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMiAzMC4yMTVjMi4xMzQgMCAzLjg2My0uODkzIDMuODYzLTEuOTk1IDAtMS4xLTEuNzMtMS45OTQtMy44NjMtMS45OTQtMi4xMzQgMC0zLjg2My44OTMtMy44NjMgMS45OTQgMCAxLjEwMiAxLjczIDEuOTk1IDMuODYzIDEuOTk1eiIgZmlsbC1vcGFjaXR5PSIuNSIgZmlsbD0iIzQzNDg1QSIvPjxwYXRoIGQ9Ik0xMSAyNy4wMDZjMi4xMjggMC0uOS0zLjc0MyA1LjYyMS02LjY0M0MxOS44NDIgMTguNDUzIDIyIDE0Ljk1MyAyMiAxMC45NSAyMiA0LjkwMiAxNy4wNzUgMCAxMSAwUzAgNC45MDIgMCAxMC45NWMwIDMuOTE4IDIuMDY4IDcuMzU2IDUuMTc3IDkuMjlDMTEuNzUgMjMuMjg0IDkuMDYgMjcuMDA3IDExIDI3LjAwN3oiIHN0cm9rZT0iI0ZGRiIgZmlsbD0idXJsKCNwcmVmaXhfX2EpIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxIDEuMjE1KSIvPjx0ZXh0IGZvbnQtZmFtaWx5PSJQaW5nRmFuZ1NDLVNlbWlib2xkLCBQaW5nRmFuZyBTQyIgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjUwMCIgZmlsbD0iI0ZGRiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMSAxLjIxNSkiPjx0c3BhbiB4PSI1IiB5PSIxNS40NDkiPue7iDwvdHNwYW4+PC90ZXh0PjwvZz48L3N2Zz4=";
3364
+ const imgStartPointEn = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEyOS41OTklIiB5Mj0iNTAlIiBpZD0icHJlZml4X19hIj48c3RvcCBzdG9wLWNvbG9yPSIjMzZBOEZGIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ4NzFGMSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbC1ydWxlPSJub256ZXJvIiBmaWxsPSJub25lIj48cGF0aCBkPSJNMTIgMzBjMS45NSAwIDMuNTMyLS44MTYgMy41MzItMS44MjMgMC0xLjAwNy0xLjU4MS0xLjgyMy0zLjUzMi0xLjgyMy0xLjk1IDAtMy41MzIuODE2LTMuNTMyIDEuODIzQzguNDY4IDI5LjE4NCAxMC4wNDkgMzAgMTIgMzB6IiBmaWxsLW9wYWNpdHk9Ii41IiBmaWxsPSIjNDM0ODVBIi8+PHBhdGggZD0iTTExIDI3YzIuMTI4IDAtLjktMy43NDIgNS42MjEtNi42NDEgMy4yMjEtMS45MSA1LjM3OS01LjQxIDUuMzc5LTkuNDEyQzIyIDQuOTAxIDE3LjA3NSAwIDExIDBTMCA0LjkwMSAwIDEwLjk0N2MwIDMuOTE4IDIuMDY4IDcuMzU1IDUuMTc3IDkuMjlDMTEuNzUgMjMuMjc3IDkuMDYgMjcgMTEgMjd6IiBzdHJva2U9IiNGRkYiIGZpbGw9InVybCgjcHJlZml4X19hKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMSAxKSIvPjxnIGZpbGw9IiNGRkYiPjxwYXRoIGQ9Ik03LjU1IDEzLjM5M2MwIC4zNzUtLjA5Ni42OS0uMjg5Ljk0MmExLjcgMS43IDAgMDEtLjc1LjU1OGMtLjMwNy4xMi0uNjM2LjE4LS45ODYuMTgtLjUxIDAtLjk3LS4xMTgtMS4zOC0uMzU2YTEuNzI2IDEuNzI2IDAgMDEtLjgxNy0xLjAwOWwuODg1LS41MDJjLjEyLjI4LjI5NS40OTcuNTI1LjY1Mi4yMy4xNTUuNTA1LjIzMy44MjUuMjMzLjI2IDAgLjQ2Ni0uMDUzLjYxOC0uMTU4YS41Mi41MiAwIDAwLjIyOS0uNDU3LjU0Ni41NDYgMCAwMC0uMTU0LS4zOTggMS4wNzcgMS4wNzcgMCAwMC0uMzgyLS4yNDcgOC41MTUgOC41MTUgMCAwMC0uNjI3LS4yMSA2LjgwNyA2LjgwNyAwIDAxLS44Ny0uMzExIDEuNTMyIDEuNTMyIDAgMDEtLjU3Ny0uNDYyYy0uMTYtLjIwNS0uMjQtLjQ3NS0uMjQtLjgxIDAtLjM1NS4wOTQtLjY1Ni4yODEtLjkwMy4xODgtLjI0OC40MzUtLjQzMy43NDMtLjU1NWEyLjY2IDIuNjYgMCAwMS45OTMtLjE4NGMuNDg1IDAgLjkuMTEgMS4yNDUuMzMuMzQ1LjIyLjU2OC41MTcuNjY4Ljg5MmwtLjg4NS41MDNhMS4xOTUgMS4xOTUgMCAwMC0uNDA1LS41NTEgMS4xMDggMS4xMDggMCAwMC0uNjc1LS4xOTljLS4yNDUgMC0uNDQ0LjA1Ni0uNTk2LjE2OWEuNTI4LjUyOCAwIDAwLS4yMjkuNDQ2YzAgLjE0LjA0Ny4yNTYuMTQyLjM0OS4wOTUuMDkyLjIxNy4xNjcuMzY0LjIyNS4xNDguMDU3LjM0Ni4xMjMuNTk2LjE5OC4zNi4xMDUuNjU4LjIxMi44OTMuMzIuMjM1LjEwNy40MzYuMjY3LjYwNC40OC4xNjcuMjEyLjI1MS40OS4yNTEuODM1ek0xMC42OTUgMTQuNzU4Yy0uMjU1LjIxLS42MS4zMTUtMS4wNjUuMzE1LS40MiAwLS43NTktLjExLTEuMDE2LS4zMzMtLjI1OC0uMjIzLS4zODctLjYyMi0uMzg3LTEuMTk3di0xLjU2N2gtLjY5di0uODc4aC42OVY5LjkwNkg5LjI3djEuMTkyaDEuMTd2Ljg3OEg5LjI3djEuMzk1YzAgLjI2LjA0NS40NTcuMTM1LjU5Mi4wOS4xMzUuMjM1LjIwMy40MzUuMjAzLjE3NSAwIC4zNC0uMDUzLjQ5NS0uMTU4bC4zNi43NXpNMTIuNjEgMTEuMDAxYy41MjUgMCAuOTM1LjE0OSAxLjIzLjQ0Ni4yOTUuMjk4LjQ0My43MjEuNDQzIDEuMjcxdjIuMjY1aC0uODc4YTUuMjI5IDUuMjI5IDAgMDEtLjAxOS0uMTk4IDEuOTEzIDEuOTEzIDAgMDAtLjAzMy0uMjQ0Yy0uMTE1LjE4LS4yNjQuMzE0LS40NDcuNDAxYTEuNTI1IDEuNTI1IDAgMDEtLjY2NC4xMzFjLS4yNyAwLS41MTYtLjA0Ny0uNzM4LS4xNDJhMS4yMjEgMS4yMjEgMCAwMS0uNTI5LS40MTYgMS4wODkgMS4wODkgMCAwMS0uMTk1LS42NDljMC0uMjYuMDc0LS40ODYuMjIxLS42NzlhMS40MyAxLjQzIDAgMDEuNTk3LS40NDYgMi4xMSAyLjExIDAgMDEuODI1LS4xNThjLjI3IDAgLjU0Ny4wNDUuODMyLjEzNS0uMDE1LS41NzUtLjI2LS44NjItLjczNS0uODYyLS4zOCAwLS42NTcuMTctLjgzMi41MWwtLjc0My0uNDI4Yy4xNC0uMjkuMzU1LS41MTguNjQ1LS42ODYuMjktLjE2Ny42My0uMjUxIDEuMDItLjI1MXptLjY0NSAyLjQwN2EyLjg1IDIuODUgMCAwMC0uNjUyLS4wOWMtLjI0NSAwLS40MzUuMDQ0LS41Ny4xMzJhLjQxOC40MTggMCAwMC0uMjAzLjM3MWMwIC4xNDUuMDU0LjI1Ny4xNjEuMzM3YS42OC42OCAwIDAwLjQxNy4xMi45Ni45NiAwIDAwLjU5Mi0uMTkuNjI0LjYyNCAwIDAwLjI1NS0uNTN2LS4xNXpNMTcuMDYgMTEuMDAxYy4xNSAwIC4yOS4wMjIuNDIuMDY3LjEzLjA0NS4yMy4xMDMuMy4xNzNsLS40MDUuODAyYS43NTkuNzU5IDAgMDAtLjQ0My0uMTM1Ljc2Mi43NjIgMCAwMC0uNjQ4LjMzOGMtLjE2My4yMjUtLjI0NC41MzUtLjI0NC45M3YxLjgwN2gtMS4wNDN2LTMuODg1aC45MTVjLjAyNS4zLjA0OC41MDUuMDY4LjYxNWExLjI5IDEuMjkgMCAwMS40NS0uNTMyYy4xODUtLjEyLjM5NS0uMTguNjMtLjE4ek0yMC45NDggMTQuNzU4Yy0uMjU2LjIxLS42MS4zMTUtMS4wNjYuMzE1LS40MiAwLS43NTgtLjExLTEuMDE2LS4zMzMtLjI1Ny0uMjIzLS4zODYtLjYyMi0uMzg2LTEuMTk3di0xLjU2N2gtLjY5di0uODc4aC42OVY5LjkwNmgxLjA0MnYxLjE5MmgxLjE3di44NzhoLTEuMTd2MS4zOTVjMCAuMjYuMDQ1LjQ1Ny4xMzUuNTkyLjA5LjEzNS4yMzUuMjAzLjQzNS4yMDMuMTc1IDAgLjM0LS4wNTMuNDk1LS4xNThsLjM2Ljc1eiIvPjwvZz48L2c+PC9zdmc+";
3338
3365
  const imgStartPoint = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEyOS41OTklIiB5Mj0iNTAlIiBpZD0icHJlZml4X19hIj48c3RvcCBzdG9wLWNvbG9yPSIjMzZBOEZGIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ4NzFGMSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMTIgMzAuMjE1YzEuOTUgMCAzLjUzMi0uODE2IDMuNTMyLTEuODIzIDAtMS4wMDctMS41ODEtMS44MjMtMy41MzItMS44MjMtMS45NSAwLTMuNTMyLjgxNi0zLjUzMiAxLjgyMyAwIDEuMDA3IDEuNTgxIDEuODIzIDMuNTMyIDEuODIzeiIgZmlsbC1vcGFjaXR5PSIuNSIgZmlsbD0iIzQzNDg1QSIvPjxwYXRoIGQ9Ik0xMSAyN2MyLjEyOCAwLS45LTMuNzQyIDUuNjIxLTYuNjQxIDMuMjIxLTEuOTEgNS4zNzktNS40MSA1LjM3OS05LjQxMkMyMiA0LjkwMSAxNy4wNzUgMCAxMSAwUzAgNC45MDEgMCAxMC45NDdjMCAzLjkxOCAyLjA2OCA3LjM1NSA1LjE3NyA5LjI5QzExLjc1IDIzLjI3NyA5LjA2IDI3IDExIDI3eiIgc3Ryb2tlPSIjRkZGIiBmaWxsPSJ1cmwoI3ByZWZpeF9fYSkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMS4yMTUpIi8+PHRleHQgZm9udC1mYW1pbHk9IlBpbmdGYW5nU0MtU2VtaWJvbGQsIFBpbmdGYW5nIFNDIiBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNTAwIiBmaWxsPSIjRkZGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxIDEuMjE1KSI+PHRzcGFuIHg9IjUiIHk9IjE1LjYyNCI+6LW3PC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg==";
3339
3366
  const StartEndPoint_css_ts_vanilla = "";
3340
3367
  var arrowRight = createRuntimeFn({ defaultClassName: "_4a4ovka", variantClassNames: { withArrow: { true: "_4a4ovkb", false: "_4a4ovkc" } }, defaultVariants: {}, compoundVariants: [] });
@@ -3354,9 +3381,10 @@ const AStartEndPoint = defineSetup(function AStartEndPoint2(props, {
3354
3381
  withArrow = false,
3355
3382
  title,
3356
3383
  description,
3357
- type: type2
3384
+ type: type2,
3385
+ language
3358
3386
  } = props;
3359
- const icon = type2 === "start" ? imgStartPoint : imgEndPoint;
3387
+ const icon = type2 === "start" ? language === "zh" ? imgStartPoint : imgStartPointEn : language === "zh" ? imgEndPoint : imgEndPointEn;
3360
3388
  const descriptionRow = !description ? "" : decodeAsterisk(description).map((item) => item.type === "normal" ? item.value : `<span class="${pointInfoBoxEmphasize$1}">${item.value}</span>`).join("");
3361
3389
  if (!description && !title)
3362
3390
  return `<img class="AStartEndPoint ${pointIcon({
@@ -3421,9 +3449,10 @@ const GStartEndPoint = defineSetup(function GStartEndPoint2(props, {
3421
3449
  withArrow = false,
3422
3450
  title,
3423
3451
  description,
3424
- type: type2
3452
+ type: type2,
3453
+ language = "zh"
3425
3454
  } = props;
3426
- const icon = type2 === "start" ? imgStartPoint : imgEndPoint;
3455
+ const icon = type2 === "start" ? language === "zh" ? imgStartPoint : imgStartPointEn : language === "zh" ? imgEndPoint : imgEndPointEn;
3427
3456
  const descriptionRow = !description ? "" : decodeAsterisk(description).map((item) => item.type === "normal" ? item.value : `<span class="${pointInfoBoxEmphasize$1}">${item.value}</span>`).join("");
3428
3457
  if (!description && !title)
3429
3458
  return createDom("img", {
@@ -3505,6 +3534,9 @@ const BusinessQuotingMap = defineLagecySetup(function BusinessQuotingMap2(props,
3505
3534
  mapRef,
3506
3535
  renderDescription
3507
3536
  } = props;
3537
+ const {
3538
+ language
3539
+ } = useMapSupplier();
3508
3540
  const fittableRegistryOverlay = createFittableRegisterOverlay(registerOverlay);
3509
3541
  const deferedSetFitView = pipeDefer(registerOverlay.setFitView);
3510
3542
  return () => {
@@ -3533,7 +3565,8 @@ const BusinessQuotingMap = defineLagecySetup(function BusinessQuotingMap2(props,
3533
3565
  "position": from,
3534
3566
  "title": fromPlace.displayName,
3535
3567
  "description": fromDescription,
3536
- "withArrow": true
3568
+ "withArrow": true,
3569
+ "language": language
3537
3570
  },
3538
3571
  "on": {
3539
3572
  "click": () => emit("clickStartPoint", fromPlace)
@@ -3560,7 +3593,8 @@ const BusinessQuotingMap = defineLagecySetup(function BusinessQuotingMap2(props,
3560
3593
  distance,
3561
3594
  duration
3562
3595
  }),
3563
- "withArrow": true
3596
+ "withArrow": true,
3597
+ "language": language
3564
3598
  },
3565
3599
  "on": {
3566
3600
  "click": () => emit("clickEndPoint", toPlace)
@@ -3989,8 +4023,6 @@ const useGeoLocation = (props) => {
3989
4023
  geoReady: readyRef
3990
4024
  };
3991
4025
  };
3992
- const MAX_AMAP_PAN_TO_ANIMATE_DURATION = 500;
3993
- const MIN_AMAP_PAN_TO_ANIMATE_DURATION = 100;
3994
4026
  const useHeycarAmap = () => {
3995
4027
  const amapRef = Vue.shallowRef();
3996
4028
  const amapElementRef = Vue.shallowRef();
@@ -4007,10 +4039,7 @@ const useHeycarAmap = () => {
4007
4039
  const distanceVw = apiMapDistanceVwOfPoints(value, [lng, lat]);
4008
4040
  const shouldAnimate = distanceVw < MAX_ANIMATION_DISTANCE_VW;
4009
4041
  if (shouldAnimate) {
4010
- const duration = Math.max(
4011
- MIN_AMAP_PAN_TO_ANIMATE_DURATION,
4012
- Math.floor(MAX_AMAP_PAN_TO_ANIMATE_DURATION * distanceVw / MAX_ANIMATION_DISTANCE_VW)
4013
- );
4042
+ const duration = distanceVw2animationDuration(distanceVw);
4014
4043
  amap2.panTo(value, duration);
4015
4044
  await sleep(duration);
4016
4045
  } else {
@@ -4136,6 +4165,49 @@ const useMapDrag = (props) => {
4136
4165
  const { supplier } = useMapSupplier();
4137
4166
  return supplier === "gmap" ? useGmapDrag(props) : useAmapDrag(props);
4138
4167
  };
4168
+ const useAmapGeometry = () => {
4169
+ const payload = useMapSupplier();
4170
+ const apiMapDistance = (from, to) => {
4171
+ if (payload.status !== Status.SUCCESS)
4172
+ return void 0;
4173
+ return AMap.GeometryUtil.distance(from, to);
4174
+ };
4175
+ const apiMapDistanceToLine = (from, line) => {
4176
+ if (payload.status !== Status.SUCCESS)
4177
+ return void 0;
4178
+ return AMap.GeometryUtil.distanceToLine(from, line);
4179
+ };
4180
+ const apiMapIsPointInRing = (point, path) => {
4181
+ if (payload.status !== Status.SUCCESS)
4182
+ return void 0;
4183
+ return AMap.GeometryUtil.isPointInRing(point, path);
4184
+ };
4185
+ return { apiMapDistance, apiMapDistanceToLine, apiMapIsPointInRing };
4186
+ };
4187
+ const useGmapGeometry = () => {
4188
+ const payload = useMapSupplier();
4189
+ const apiMapDistance = (from, to) => {
4190
+ if (payload.status !== Status.SUCCESS)
4191
+ return void 0;
4192
+ return google.maps.geometry.spherical.computeDistanceBetween(vec2lnglat(from), vec2lnglat(to));
4193
+ };
4194
+ const apiMapDistanceToLine = (from, line) => {
4195
+ if (payload.status !== Status.SUCCESS)
4196
+ return void 0;
4197
+ return 0;
4198
+ };
4199
+ const apiMapIsPointInRing = (point, path) => {
4200
+ if (payload.status !== Status.SUCCESS)
4201
+ return void 0;
4202
+ const polygon = new google.maps.Polygon({ paths: path.map(vec2lnglat) });
4203
+ return google.maps.geometry.poly.containsLocation(vec2lnglat(point), polygon);
4204
+ };
4205
+ return { apiMapDistance, apiMapDistanceToLine, apiMapIsPointInRing };
4206
+ };
4207
+ const useMapGeometry = () => {
4208
+ const { supplier } = useMapSupplier();
4209
+ return supplier === "gmap" ? useGmapGeometry() : useAmapGeometry();
4210
+ };
4139
4211
  const chinaBounds = [
4140
4212
  [
4141
4213
  108.03446,
@@ -5655,12 +5727,9 @@ const useAmapPlace = (props) => {
5655
5727
  place.name = value.name;
5656
5728
  place.displayName = value.displayName;
5657
5729
  };
5658
- Vue.watch(
5659
- () => [placeKey.value],
5660
- async () => {
5661
- await readyPromise;
5730
+ const getPlaceByRegeo = ([lng, lat]) => {
5731
+ return new Promise((resolve, reject) => {
5662
5732
  const geocoder = new AMap.Geocoder({ lang: language === "en" ? "en" : "zh_cn" });
5663
- const [lng, lat] = pointRef.value;
5664
5733
  const isChina = inChina([lng, lat]);
5665
5734
  geocoder.getAddress(new AMap.LngLat(lng, lat), (status, result) => {
5666
5735
  switch (status) {
@@ -5668,30 +5737,30 @@ const useAmapPlace = (props) => {
5668
5737
  const { formattedAddress, addressComponent } = result.regeocode;
5669
5738
  const name2 = formattedAddress ? formattedAddress : emptyPlaceName;
5670
5739
  const displayName = amapPlaceName2DisplayName(name2, { isChina, ...addressComponent });
5671
- place.name = name2;
5672
- place.displayName = displayName;
5673
- place.lng = lng;
5674
- place.lat = lat;
5675
- onChange == null ? void 0 : onChange({ lng, lat, name: name2, displayName });
5740
+ resolve({ lng, lat, name: name2, displayName });
5676
5741
  return;
5677
5742
  }
5678
5743
  case "no_data": {
5679
5744
  const name2 = emptyPlaceName;
5680
5745
  const displayName = emptyPlaceName;
5681
- place.name = name2;
5682
- place.displayName = displayName;
5683
- place.lng = lng;
5684
- place.lat = lat;
5685
- onChange == null ? void 0 : onChange({ lng, lat, name: name2, displayName });
5746
+ resolve({ lng, lat, name: name2, displayName });
5686
5747
  return;
5687
5748
  }
5688
5749
  case "error":
5689
- throw result;
5750
+ reject(result);
5690
5751
  }
5691
5752
  });
5753
+ });
5754
+ };
5755
+ Vue.watch(
5756
+ () => [placeKey.value],
5757
+ async () => {
5758
+ await readyPromise;
5759
+ const resultPlace = await getPlaceByRegeo(pointRef.value);
5760
+ onChange == null ? void 0 : onChange(resultPlace);
5692
5761
  }
5693
5762
  );
5694
- return { place, updatePlace, setPlace };
5763
+ return { place, updatePlace, setPlace, getPlaceByRegeo };
5695
5764
  };
5696
5765
  const useGmapPlace = (props) => {
5697
5766
  const { onChange, emptyPlaceName } = props;
@@ -5715,214 +5784,182 @@ const useGmapPlace = (props) => {
5715
5784
  place.name = value.name;
5716
5785
  place.displayName = value.displayName;
5717
5786
  };
5787
+ const getPlaceByRegeo = ([lng, lat]) => {
5788
+ return new Promise((resolve, reject) => {
5789
+ const geocoder = new google.maps.Geocoder();
5790
+ geocoder.geocode({ language, location: { lng, lat } }).then(({ results }) => {
5791
+ const name2 = results[0].formatted_address ? results[0].formatted_address : emptyPlaceName;
5792
+ const displayName = name2;
5793
+ resolve({ lng, lat, name: name2, displayName });
5794
+ }).catch(reject);
5795
+ });
5796
+ };
5718
5797
  Vue.watch(
5719
5798
  () => placeKey.value,
5720
5799
  async () => {
5721
5800
  await readyPromise;
5722
- const geocoder = new google.maps.Geocoder();
5723
- const [lng, lat] = pointRef.value;
5724
- const { results } = await geocoder.geocode({ language, location: { lng, lat } });
5725
- const name2 = results[0].formatted_address ? results[0].formatted_address : emptyPlaceName;
5726
- const displayName = name2;
5727
- place.lng = lng;
5728
- place.lat = lat;
5729
- place.name = name2;
5730
- place.displayName = displayName;
5731
- onChange == null ? void 0 : onChange({ lng, lat, name: name2, displayName });
5801
+ const resultPlace = await getPlaceByRegeo(pointRef.value);
5802
+ onChange == null ? void 0 : onChange(resultPlace);
5732
5803
  }
5733
5804
  );
5734
- return { place, updatePlace, setPlace };
5805
+ return { place, updatePlace, setPlace, getPlaceByRegeo };
5735
5806
  };
5736
5807
  const useMapPlace = (props) => {
5737
5808
  const { supplier } = useMapSupplier();
5738
5809
  return supplier === "gmap" ? useGmapPlace(props) : useAmapPlace(props);
5739
5810
  };
5740
- const findAmapNearestPlace = (place, candidates) => {
5741
- let shortestDistance = Infinity;
5742
- let shortestPlace = place;
5743
- for (const candidate of candidates) {
5744
- const distance = AMap.GeometryUtil.distance(place2point(place), place2point(candidate));
5745
- if (distance >= shortestDistance)
5746
- continue;
5747
- shortestPlace = candidate;
5748
- shortestDistance = distance;
5749
- }
5750
- return { shortestPlace, shortestDistance };
5751
- };
5752
- const findGmapNearestPlace = (place, candidates) => {
5811
+ function findNearestPlace(place, candidates, distanceFn) {
5812
+ var _a;
5753
5813
  let shortestDistance = Infinity;
5754
5814
  let shortestPlace = place;
5755
5815
  for (const candidate of candidates) {
5756
- const distance = google.maps.geometry.spherical.computeDistanceBetween(place, candidate);
5816
+ const distance = (_a = distanceFn(place2point(place), place2point(candidate))) != null ? _a : Infinity;
5757
5817
  if (distance >= shortestDistance)
5758
5818
  continue;
5759
5819
  shortestPlace = candidate;
5760
5820
  shortestDistance = distance;
5761
5821
  }
5762
5822
  return { shortestPlace, shortestDistance };
5763
- };
5764
- const useAmapRecomendPlace = (props) => {
5765
- const { pointRef, getRecomendPlace, getLimit, context: context2, emptyPlaceName, onChange, onChangePlace } = props;
5823
+ }
5824
+ const useMapRecomendPlace = (props) => {
5825
+ const {
5826
+ defaultPoint,
5827
+ getRecomendPlace,
5828
+ getLimit,
5829
+ context: context2,
5830
+ emptyPlaceName,
5831
+ onChange,
5832
+ onChangePlace
5833
+ } = props;
5766
5834
  const availableRef = Vue.ref(true);
5767
5835
  const placeCandidatesRef = Vue.ref([]);
5768
5836
  const zoneRef = Vue.ref();
5769
- const { idx: recomendPlaceKey, update: updateRecommendPlaceKey } = useUpdate();
5770
- const { readyPromise } = useMapSupplier();
5771
- const { place, updatePlace, setPlace } = useAmapPlace({
5837
+ const { apiMapIsPointInRing, apiMapDistance } = useMapGeometry();
5838
+ const { getPlaceByRegeo } = useAmapPlace({
5772
5839
  emptyPlaceName,
5773
- pointRef,
5774
- onChange: onChangePlace
5840
+ pointRef: Vue.ref([...defaultPoint])
5841
+ });
5842
+ const recomendPlace = Vue.reactive({
5843
+ lng: defaultPoint[0],
5844
+ lat: defaultPoint[1],
5845
+ name: "",
5846
+ displayName: ""
5775
5847
  });
5776
- const recomendPlace = Vue.reactive({ ...place });
5777
5848
  const isElectedRef = Vue.computed(() => {
5778
- const point = pointRef.value;
5849
+ const recomendPoint = place2point(recomendPlace);
5779
5850
  return placeCandidatesRef.value.some(
5780
- (candidate) => isPointEqual(place2point(candidate), point)
5851
+ (candidate) => isPointEqual(place2point(candidate), recomendPoint)
5781
5852
  );
5782
5853
  });
5783
- const updatePlaceCandidates = async (place2) => {
5854
+ const findAttachedPlace = async (place) => {
5784
5855
  var _a;
5785
5856
  const {
5786
5857
  places: inputPlaceCandidates,
5787
5858
  zone,
5788
- available
5789
- } = (_a = await getRecomendPlace({ ...place2 }, context2)) != null ? _a : {};
5859
+ available = false
5860
+ } = (_a = await getRecomendPlace({ ...place }, context2)) != null ? _a : {};
5790
5861
  const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5791
- availableRef.value = !!available;
5792
- zoneRef.value = zone;
5793
- placeCandidatesRef.value = placeCandidates != null ? placeCandidates : [];
5862
+ if (!available || !placeCandidates) {
5863
+ return { place: { ...place }, zone, candidates: [], available };
5864
+ }
5865
+ const { shortestPlace, shortestDistance } = findNearestPlace(
5866
+ place,
5867
+ placeCandidates,
5868
+ apiMapDistance
5869
+ );
5870
+ const limit = getLimit(context2);
5871
+ const resultPlace = zone || shortestDistance <= limit ? shortestPlace : place;
5872
+ return { place: { ...resultPlace }, zone, candidates: placeCandidates, available };
5873
+ };
5874
+ const getRecommendPlaceZoneState = async (point, prevState) => {
5875
+ const zone = zoneRef.value;
5876
+ if (!zone || !apiMapIsPointInRing(point, zone.path)) {
5877
+ const reGeoPlace = await getPlaceByRegeo(point);
5878
+ const {
5879
+ place: resultPlace2,
5880
+ candidates,
5881
+ available,
5882
+ zone: zone2
5883
+ } = await findAttachedPlace(reGeoPlace);
5884
+ return { place: { ...resultPlace2 }, zone: zone2, available, candidates };
5885
+ }
5886
+ const [lng, lat] = point;
5887
+ const { shortestPlace: resultPlace } = findNearestPlace(
5888
+ { lng, lat, name: "", displayName: "" },
5889
+ placeCandidatesRef.value,
5890
+ apiMapDistance
5891
+ );
5794
5892
  return {
5795
- inputPlace: { ...place2 },
5796
- isInZone: !!zone,
5797
- place: place2
5893
+ place: { ...resultPlace },
5894
+ zone,
5895
+ available: prevState.available,
5896
+ candidates: prevState.candidates
5798
5897
  };
5799
5898
  };
5800
- const updateRecommendPlace = (place2) => {
5801
- setPlace(place2);
5802
- updateRecommendPlaceKey();
5803
- };
5804
- const setPlaceCandidatesAndZone = ({
5805
- zone,
5806
- places: inputPlaceCandidates
5807
- }) => {
5808
- const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5809
- zoneRef.value = zone ? zone : void 0;
5810
- placeCandidatesRef.value = placeCandidates != null ? placeCandidates : [];
5811
- };
5812
- Vue.watch(
5813
- () => recomendPlaceKey.value,
5814
- async () => {
5815
- var _a;
5816
- await readyPromise;
5817
- const {
5818
- places: inputPlaceCandidates,
5819
- zone,
5820
- available
5821
- } = (_a = await getRecomendPlace({ ...place }, context2)) != null ? _a : {};
5822
- const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5823
- if (!available || !placeCandidates) {
5824
- availableRef.value = !!available;
5825
- zoneRef.value = zone;
5826
- placeCandidatesRef.value = [];
5827
- Object.assign(recomendPlace, { ...place });
5828
- onChange == null ? void 0 : onChange({ place: { ...place }, inputPlace: { ...place }, isInZone: !!zone });
5829
- return;
5830
- }
5831
- const { shortestPlace, shortestDistance } = findAmapNearestPlace(place, placeCandidates);
5832
- const limit = getLimit(context2);
5833
- const resultPlace = zone || shortestDistance <= limit ? shortestPlace : place;
5834
- availableRef.value = !!available;
5835
- zoneRef.value = zone;
5836
- placeCandidatesRef.value = placeCandidates;
5837
- Object.assign(recomendPlace, { ...resultPlace });
5838
- onChange == null ? void 0 : onChange({ place: { ...resultPlace }, inputPlace: { ...place }, isInZone: !!zone });
5839
- }
5840
- );
5841
- return {
5842
- zoneRef,
5843
- recomendPlace,
5844
- placeCandidates: placeCandidatesRef,
5845
- availableRef,
5846
- isElectedRef,
5847
- updateRecommendPlace,
5848
- updatePlaceCandidates,
5849
- updatePlace,
5850
- setPlaceCandidatesAndZone
5899
+ const updatePlace = async (point) => {
5900
+ const {
5901
+ place: resultPlace,
5902
+ candidates,
5903
+ zone,
5904
+ available
5905
+ } = await getRecommendPlaceZoneState(point, {
5906
+ place: recomendPlace,
5907
+ available: availableRef.value,
5908
+ candidates: placeCandidatesRef.value,
5909
+ zone: zoneRef.value
5910
+ });
5911
+ const isSameZone = !!zone && isZoneEqual(zone, zoneRef.value);
5912
+ availableRef.value = available;
5913
+ zoneRef.value = zone;
5914
+ placeCandidatesRef.value = candidates;
5915
+ Object.assign(recomendPlace, { ...resultPlace });
5916
+ onChangePlace == null ? void 0 : onChangePlace({ ...resultPlace });
5917
+ const inputPlace = { name: "", displayName: "", lng: point[0], lat: point[1] };
5918
+ onChange == null ? void 0 : onChange({ place: { ...resultPlace }, inputPlace, isInZone: !!zone, isSameZone });
5851
5919
  };
5852
- };
5853
- const useGmapRecomendPlace = (props) => {
5854
- const { pointRef, getRecomendPlace, getLimit, context: context2, emptyPlaceName, onChange, onChangePlace } = props;
5855
- const availableRef = Vue.ref(true);
5856
- const placeCandidatesRef = Vue.ref([]);
5857
- const zoneRef = Vue.ref();
5858
- const { idx: recomendPlaceKey, update: updateRecommendPlaceKey } = useUpdate();
5859
- const { readyPromise } = useMapSupplier();
5860
- const { place, updatePlace, setPlace } = useGmapPlace({
5861
- emptyPlaceName,
5862
- pointRef,
5863
- onChange: onChangePlace
5864
- });
5865
- const recomendPlace = Vue.reactive({ ...place });
5866
- const isElectedRef = Vue.computed(() => {
5867
- const point = pointRef.value;
5868
- return placeCandidatesRef.value.some(
5869
- (candidate) => isPointEqual(place2point(candidate), point)
5870
- );
5871
- });
5872
- const updatePlaceCandidates = async (place2) => {
5920
+ const updatePlaceCandidates = async (place) => {
5873
5921
  var _a;
5874
5922
  const {
5875
5923
  places: inputPlaceCandidates,
5876
5924
  zone,
5877
5925
  available
5878
- } = (_a = await getRecomendPlace({ ...place2 }, context2)) != null ? _a : {};
5926
+ } = (_a = await getRecomendPlace({ ...place }, context2)) != null ? _a : {};
5927
+ const isSameZone = !!zone && isZoneEqual(zone, zoneRef.value);
5879
5928
  const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5880
5929
  availableRef.value = !!available;
5881
5930
  zoneRef.value = zone;
5882
5931
  placeCandidatesRef.value = placeCandidates != null ? placeCandidates : [];
5883
5932
  return {
5884
- inputPlace: { ...place2 },
5933
+ inputPlace: { ...place },
5885
5934
  isInZone: !!zone,
5886
- place: place2
5935
+ place,
5936
+ isSameZone
5887
5937
  };
5888
5938
  };
5889
- const updateRecommendPlace = (place2) => {
5890
- setPlace(place2);
5891
- updateRecommendPlaceKey();
5939
+ const updateRecommendPlace = async (place) => {
5940
+ const { place: resultPlace, candidates, available, zone } = await findAttachedPlace(place);
5941
+ const isSameZone = !!zone && isZoneEqual(zone, zoneRef.value);
5942
+ availableRef.value = available;
5943
+ zoneRef.value = zone;
5944
+ placeCandidatesRef.value = candidates;
5945
+ Object.assign(recomendPlace, { ...resultPlace });
5946
+ onChangePlace == null ? void 0 : onChangePlace({ ...resultPlace });
5947
+ onChange == null ? void 0 : onChange({
5948
+ place: { ...resultPlace },
5949
+ inputPlace: { ...place },
5950
+ isInZone: !!zone,
5951
+ isSameZone
5952
+ });
5892
5953
  };
5893
- const setPlaceCandidatesAndZone = ({ zone, places }) => {
5894
- placeCandidatesRef.value = places != null ? places : [];
5954
+ const setPlaceCandidatesAndZone = ({
5955
+ zone,
5956
+ places: inputPlaceCandidates
5957
+ }) => {
5958
+ const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5959
+ availableRef.value = true;
5895
5960
  zoneRef.value = zone ? zone : void 0;
5961
+ placeCandidatesRef.value = placeCandidates != null ? placeCandidates : [];
5896
5962
  };
5897
- Vue.watch(
5898
- () => recomendPlaceKey.value,
5899
- async () => {
5900
- var _a;
5901
- await readyPromise;
5902
- const {
5903
- places: inputPlaceCandidates,
5904
- zone,
5905
- available
5906
- } = (_a = await getRecomendPlace({ ...place }, context2)) != null ? _a : {};
5907
- const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5908
- if (!available || !placeCandidates) {
5909
- availableRef.value = !!available;
5910
- zoneRef.value = zone;
5911
- placeCandidatesRef.value = [];
5912
- Object.assign(recomendPlace, { ...place });
5913
- onChange == null ? void 0 : onChange({ place: { ...place }, inputPlace: { ...place }, isInZone: !!zone });
5914
- return;
5915
- }
5916
- const { shortestPlace, shortestDistance } = findGmapNearestPlace(place, placeCandidates);
5917
- const limit = getLimit(context2);
5918
- const resultPlace = shortestDistance > limit ? place : shortestPlace;
5919
- availableRef.value = !!available;
5920
- zoneRef.value = zone;
5921
- placeCandidatesRef.value = placeCandidates;
5922
- Object.assign(recomendPlace, { ...resultPlace });
5923
- onChange == null ? void 0 : onChange({ place: { ...resultPlace }, inputPlace: { ...place }, isInZone: !!zone });
5924
- }
5925
- );
5926
5963
  return {
5927
5964
  zoneRef,
5928
5965
  recomendPlace,
@@ -5935,20 +5972,19 @@ const useGmapRecomendPlace = (props) => {
5935
5972
  setPlaceCandidatesAndZone
5936
5973
  };
5937
5974
  };
5938
- const useMapRecomendPlace = (props) => {
5939
- const { supplier } = useMapSupplier();
5940
- return supplier === "gmap" ? useGmapRecomendPlace(props) : useAmapRecomendPlace(props);
5941
- };
5942
5975
  const GOOGLE_MAP_ZOOM_CHANGE_DEBOUNCE_TIMEOUT = 50;
5943
5976
  const DEFAULT_ZOOM$1 = 13;
5944
5977
  const useAmapZoom = (props) => {
5945
5978
  var _a, _b, _c;
5946
5979
  const { onChange, mapRef, defaultValue } = props;
5947
5980
  const zoomRef = Vue.ref((_c = (_b = (_a = mapRef.value) == null ? void 0 : _a.getZoom()) != null ? _b : defaultValue) != null ? _c : DEFAULT_ZOOM$1);
5948
- const setZoom = (v) => {
5949
- var _a2;
5981
+ const setZoom = (v, immediate = false) => {
5982
+ var _a2, _b2;
5983
+ const duration = deltaZoom2animationDuration(v - zoomRef.value);
5950
5984
  zoomRef.value = v;
5951
- (_a2 = mapRef.value) == null ? void 0 : _a2.setZoom(v, true);
5985
+ if (immediate)
5986
+ return (_a2 = mapRef.value) == null ? void 0 : _a2.setZoom(v, true);
5987
+ (_b2 = mapRef.value) == null ? void 0 : _b2.setZoom(v, false, duration);
5952
5988
  };
5953
5989
  const handleZoomEnd = (_, { target }) => {
5954
5990
  const zoom = target.getZoom();
@@ -6680,7 +6716,6 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6680
6716
  name: geoLoadingTitle,
6681
6717
  displayName: geoLoadingTitle
6682
6718
  });
6683
- const centerPoint = Vue.computed(() => [centerPlace.lng, centerPlace.lat]);
6684
6719
  const centerSource = {
6685
6720
  source: "geo"
6686
6721
  };
@@ -6691,25 +6726,19 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6691
6726
  const setCenterPlaceByUserSpecified = async (input) => {
6692
6727
  centerSource.source = "api";
6693
6728
  const place = toPlaceType(input);
6694
- centerPlace.lng = place.lng;
6695
- centerPlace.lat = place.lat;
6696
- centerPlace.name = place.name;
6697
- centerPlace.displayName = place.displayName;
6698
- emit("changePlace", {
6699
- ...place
6700
- });
6729
+ Object.assign(centerPlace, place);
6701
6730
  updateRecommendPlace(place);
6702
6731
  };
6703
6732
  const setCenterPlaceByUserSpecifiedInZone = ({
6704
- place,
6733
+ place: input,
6705
6734
  recommends
6706
6735
  }) => {
6707
- centerPlace.lng = place.lng;
6708
- centerPlace.lat = place.lat;
6709
- centerPlace.name = place.name;
6710
- centerPlace.displayName = place.displayName;
6736
+ const place = toPlaceType(input);
6737
+ assertZone(recommends.zone);
6738
+ Object.assign(centerPlace, place);
6711
6739
  setPlaceCandidatesAndZone(recommends);
6712
- setZoom(ZONE_ZOOM);
6740
+ if (!isZoneEqual(recommends.zone, zoneRef.value))
6741
+ setZoom(ZONE_ZOOM);
6713
6742
  emit("changePlace", {
6714
6743
  ...place
6715
6744
  });
@@ -6717,12 +6746,7 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6717
6746
  const panToCenterByPlace = async (place) => {
6718
6747
  centerSource.source = "api";
6719
6748
  await panTo(place2point(place));
6720
- centerPlace.lng = place.lng;
6721
- centerPlace.lat = place.lat;
6722
- centerPlace.name = place.name;
6723
- centerPlace.displayName = place.displayName;
6724
- if (zoneRef.value)
6725
- setZoom(ZONE_ZOOM);
6749
+ Object.assign(centerPlace, place);
6726
6750
  emit("changePlace", {
6727
6751
  ...place
6728
6752
  });
@@ -6733,7 +6757,8 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6733
6757
  inputPlace: {
6734
6758
  ...place
6735
6759
  },
6736
- isInZone: !!zoneRef.value
6760
+ isInZone: !!zoneRef.value,
6761
+ isSameZone: !!zoneRef.value
6737
6762
  });
6738
6763
  };
6739
6764
  const defaultCenterPlacePromise = new Promise((resolve) => {
@@ -6751,18 +6776,21 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6751
6776
  } = useGeoLocation({
6752
6777
  geoDefaultPosition,
6753
6778
  onLoad: async (value) => {
6779
+ const [lng, lat] = value.position;
6754
6780
  await readyPromise;
6755
6781
  centerSource.source = "geo";
6782
+ centerPlace.lng = lng;
6783
+ centerPlace.lat = lat;
6756
6784
  updatePlace(value.position);
6757
6785
  emit("loadGeoLocation", value);
6758
6786
  },
6759
6787
  onLoadDefault: async (value) => {
6760
6788
  await readyPromise;
6761
- const place = await defaultCenterPlacePromise;
6789
+ const inputPlace = await defaultCenterPlacePromise;
6762
6790
  centerSource.source = "geo";
6763
6791
  emit("loadDefaultGeoLocation", value);
6764
- if (place) {
6765
- await setCenterPlaceByUserSpecified(place);
6792
+ if (inputPlace) {
6793
+ await setCenterPlaceByUserSpecified(inputPlace);
6766
6794
  } else {
6767
6795
  updatePlace(value.position);
6768
6796
  }
@@ -6797,7 +6825,7 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6797
6825
  availableRef,
6798
6826
  isElectedRef
6799
6827
  } = useMapRecomendPlace({
6800
- pointRef: centerPoint,
6828
+ defaultPoint: place2point(centerPlace),
6801
6829
  emptyPlaceName: DEFAULT_PLACE_NAME,
6802
6830
  context: centerSource,
6803
6831
  getRecomendPlace: pipedGetRecomendPlace,
@@ -6814,29 +6842,27 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6814
6842
  throw new Error(`MyError: should not call getLimit on source: ${source}`);
6815
6843
  }
6816
6844
  },
6817
- onChangePlace: (place) => {
6818
- if (centerSource.source !== "recomend") {
6819
- updateRecommendPlace(place);
6820
- }
6821
- emit("changePlace", place);
6822
- },
6845
+ onChangePlace: (place) => emit("changePlace", place),
6823
6846
  onChange: async ({
6824
6847
  place,
6825
6848
  inputPlace,
6826
- isInZone
6849
+ isInZone,
6850
+ isSameZone
6827
6851
  }) => {
6852
+ debugger;
6828
6853
  centerSource.source = "recomend";
6829
6854
  if (isPlaceEqual(place, centerPlace))
6830
6855
  panTo(place2point(place));
6831
6856
  Object.assign(centerPlace, {
6832
6857
  ...place
6833
6858
  });
6834
- if (isInZone)
6859
+ if (isInZone && !isSameZone)
6835
6860
  setZoom(ZONE_ZOOM);
6836
6861
  emit("changeRecomandPlace", {
6837
6862
  place,
6838
6863
  inputPlace,
6839
- isInZone
6864
+ isInZone,
6865
+ isSameZone
6840
6866
  });
6841
6867
  }
6842
6868
  });
@@ -6859,7 +6885,7 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6859
6885
  const description = !availableRef.value ? void 0 : isElectedRef.value ? recomendDescription : void 0;
6860
6886
  return Vue.h(HeycarMap, {
6861
6887
  "attrs": {
6862
- "center": centerPoint.value,
6888
+ "center": place2point(centerPlace),
6863
6889
  "zoom": zoomRef.value,
6864
6890
  "touchZoomCenter": true,
6865
6891
  "mapRef": setMap,
@@ -6935,7 +6961,6 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6935
6961
  name: defaultPlace.name,
6936
6962
  displayName: defaultPlace.displayName
6937
6963
  });
6938
- const centerPoint = Vue.computed(() => [centerPlace.lng, centerPlace.lat]);
6939
6964
  const centerSource = {
6940
6965
  source: "default"
6941
6966
  };
@@ -6946,24 +6971,18 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6946
6971
  const setCenterPlaceByUserSpecified = async (input) => {
6947
6972
  centerSource.source = "api";
6948
6973
  const place = toPlaceType(input);
6949
- centerPlace.lng = place.lng;
6950
- centerPlace.lat = place.lat;
6951
- centerPlace.name = place.name;
6952
- centerPlace.displayName = place.displayName;
6953
- emit("changePlace", {
6954
- ...place
6955
- });
6974
+ Object.assign(centerPlace, place);
6956
6975
  updateRecommendPlace(place);
6957
6976
  };
6958
6977
  const setCenterPlaceByUserSpecifiedInZone = ({
6959
- place,
6978
+ place: input,
6960
6979
  recommends
6961
6980
  }) => {
6962
- centerPlace.lng = place.lng;
6963
- centerPlace.lat = place.lat;
6964
- centerPlace.name = place.name;
6965
- centerPlace.displayName = place.displayName;
6966
- setZoom(ZONE_ZOOM);
6981
+ const place = toPlaceType(input);
6982
+ assertZone(recommends.zone);
6983
+ Object.assign(centerPlace, place);
6984
+ if (!isZoneEqual(recommends.zone, zoneRef.value))
6985
+ setZoom(ZONE_ZOOM);
6967
6986
  setPlaceCandidatesAndZone(recommends);
6968
6987
  emit("changePlace", {
6969
6988
  ...place
@@ -6976,8 +6995,6 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6976
6995
  centerPlace.lat = place.lat;
6977
6996
  centerPlace.name = place.name;
6978
6997
  centerPlace.displayName = place.displayName;
6979
- if (zoneRef.value)
6980
- setZoom(ZONE_ZOOM);
6981
6998
  emit("changePlace", {
6982
6999
  ...place
6983
7000
  });
@@ -6988,7 +7005,8 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6988
7005
  inputPlace: {
6989
7006
  ...place
6990
7007
  },
6991
- isInZone: !!zoneRef.value
7008
+ isInZone: !!zoneRef.value,
7009
+ isSameZone: !!zoneRef.value
6992
7010
  });
6993
7011
  };
6994
7012
  const {
@@ -7031,7 +7049,7 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
7031
7049
  availableRef,
7032
7050
  isElectedRef
7033
7051
  } = useMapRecomendPlace({
7034
- pointRef: centerPoint,
7052
+ defaultPoint: place2point(centerPlace),
7035
7053
  emptyPlaceName: DEFAULT_PLACE_NAME,
7036
7054
  context: centerSource,
7037
7055
  getRecomendPlace: pipedGetRecomendPlace,
@@ -7048,16 +7066,12 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
7048
7066
  throw new Error(`MyError: should not call getLimit on source: ${source}`);
7049
7067
  }
7050
7068
  },
7051
- onChangePlace: (place) => {
7052
- if (centerSource.source !== "recomend") {
7053
- updateRecommendPlace(place);
7054
- }
7055
- emit("changePlace", place);
7056
- },
7069
+ onChangePlace: (place) => emit("changePlace", place),
7057
7070
  onChange: async ({
7058
7071
  place,
7059
7072
  inputPlace,
7060
- isInZone
7073
+ isInZone,
7074
+ isSameZone
7061
7075
  }) => {
7062
7076
  centerSource.source = "recomend";
7063
7077
  if (isPlaceEqual(place, centerPlace))
@@ -7065,12 +7079,13 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
7065
7079
  Object.assign(centerPlace, {
7066
7080
  ...place
7067
7081
  });
7068
- if (isInZone)
7082
+ if (isInZone && !isSameZone)
7069
7083
  setZoom(ZONE_ZOOM);
7070
7084
  emit("changeRecomandPlace", {
7071
7085
  place,
7072
7086
  inputPlace,
7073
- isInZone
7087
+ isInZone,
7088
+ isSameZone
7074
7089
  });
7075
7090
  }
7076
7091
  });
@@ -7096,7 +7111,7 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
7096
7111
  const description = !availableRef.value ? void 0 : isElectedRef.value ? recomendDescription : void 0;
7097
7112
  return Vue.h(HeycarMap, {
7098
7113
  "attrs": {
7099
- "center": centerPoint.value,
7114
+ "center": place2point(centerPlace),
7100
7115
  "zoom": zoomRef.value,
7101
7116
  "touchZoomCenter": true,
7102
7117
  "mapRef": setMap,
@@ -7131,38 +7146,6 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
7131
7146
  })]);
7132
7147
  };
7133
7148
  }).props(["loading", "fallback", "log", "defaultPlace", "unavailableTitle", "recomendDescription", "getRecomendPlace", "mapContext"]);
7134
- const useAmapGeometry = () => {
7135
- const payload = useMapSupplier();
7136
- const apiMapDistance = (from, to) => {
7137
- if (payload.status !== Status.SUCCESS)
7138
- return void 0;
7139
- return AMap.GeometryUtil.distance(from, to);
7140
- };
7141
- const apiMapDistanceToLine = (from, line) => {
7142
- if (payload.status !== Status.SUCCESS)
7143
- return void 0;
7144
- return AMap.GeometryUtil.distanceToLine(from, line);
7145
- };
7146
- return { apiMapDistance, apiMapDistanceToLine };
7147
- };
7148
- const useGmapGeometry = () => {
7149
- const payload = useMapSupplier();
7150
- const apiMapDistance = (from, to) => {
7151
- if (payload.status !== Status.SUCCESS)
7152
- return void 0;
7153
- return google.maps.geometry.spherical.computeDistanceBetween(vec2lnglat(from), vec2lnglat(to));
7154
- };
7155
- const apiMapDistanceToLine = (from, line) => {
7156
- if (payload.status !== Status.SUCCESS)
7157
- return void 0;
7158
- return 0;
7159
- };
7160
- return { apiMapDistance, apiMapDistanceToLine };
7161
- };
7162
- const useMapGeometry = () => {
7163
- const { supplier } = useMapSupplier();
7164
- return supplier === "gmap" ? useGmapGeometry() : useAmapGeometry();
7165
- };
7166
7149
  const imgTaxicar = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iNDQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxwYXRoIGQ9Ik0zNC4wODcgMTAuOTZjMCAyLjM2OS0uMDU0IDIuOTgtLjc4MiAzLjcwNC0uNzkzLjc5LTUuMjM2LjgzMy01LjIzNi44MzNsLTQuMTE2LjE5Mi05Ljg5Ni0uMTQ0cy03Ljc5LS4wMjYtOS4xMzEtLjAyNmMtMS4zNDIgMC0yLjQwNi0uODQ3LTIuNDA2LS44NDdDLjE0IDEyLjkzMiAwIDExLjA5IDAgMTEuMDlWNS44NnMuMTQtMS44NDIgMi41Mi0zLjU4M2MwIDAgMS4wNjQtLjg0NiAyLjQwNi0uODQ2IDEuMzQxIDAgOS4xMy0uMDI2IDkuMTMtLjAyNmw5Ljg5Ny0uMTQ0IDQuMTE2LjE5MnM0LjQ4NCAwIDUuMjM2LjgzM2MuNzc4Ljg2Ljc4MiAxLjM3Ljc4MiAzLjc0djQuOTM0eiIgaWQ9InByZWZpeF9fYiIvPjxwYXRoIGQ9Ik0wIDEuNDkzUzUuNy4xOCA4LjcxOS4wNWMzLjAyLS4xMzEgMy40Ny4wMTcgNS4yODIuMjEuNTA3LjA1MSAzLjI2LjkxIDMuMjYuOTFsLTcuMzAzLjNMMCAxLjQ5NHoiIGlkPSJwcmVmaXhfX2MiLz48cGF0aCBkPSJNMTAuMDggMi44MTVDOS4yOTUgNC40ODMgOC44NSA2LjQyMyA4Ljg1IDguNDk0YzAgMi4wNjIuNDQyIDMuOTk0IDEuMjIgNS42NTdsNS42OTgtMS4xNTdhMTUuNjAxIDE1LjYwMSAwIDAxLS42NjctNC41NTJjMC0xLjY1OS4yMDQtMy4wNjUuNjU5LTQuNTA1TDEwLjA4IDIuODE1eiIgaWQ9InByZWZpeF9fZSIvPjxwYXRoIGQ9Ik0yNS43NTMgOC40NTVjMCAxLjkyLS4yMiAzLjM2NC0uNjAxIDQuODkxbDIuNjI2LjM1YzEuMTc4LS4wMDUgMi4xMzItMi4zMzUgMi4xMzItNS4yMTVzLS45NTQtNS4yMS0yLjEzMi01LjIxbC0yLjYxNC4zNWMuMzcyIDEuNTEzLjU4OSAyLjk0LjU4OSA0LjgzNHoiIGlkPSJwcmVmaXhfX2ciLz48cGF0aCBkPSJNLjA2NC4wMTVMLjE1OC4wMDJDLjE4OC0uMDE2LjM3MS4xMDYuNC4xMjRjLjE4OC4xMjYuMzIxLjI0NC40My43Ni4wNTQuMjUyLjIwNyAxLjQ2NS4xOTggMS40OTZsLS42MzMuODMzLjExOSAzLjE3LS4wOTQuMDc2TDAgLjEzN2MwLS4wNTIuMDI1LS4xLjA2NC0uMTIyeiIgaWQ9InByZWZpeF9faSIvPjxwYXRoIGQ9Ik0uMDY0IDYuNTE1bC4wOTQuMDEzYy4wMy4wMTguMjEzLS4xMDQuMjQyLS4xMjIuMTg4LS4xMjYuMzIxLS4yNDQuNDMtLjc2LjA1NC0uMjUyLjIwNy0xLjQ2NS4xOTgtMS40OTZsLS42MzMtLjgzM0wuNDIgMHYuMDdMMCA2LjM5NGMwIC4wNTIuMDI1LjEuMDY0LjEyMnoiIGlkPSJwcmVmaXhfX2siLz48bGluZWFyR3JhZGllbnQgeDE9IjEyNS4yNjQlIiB5MT0iNDkuNjI2JSIgeDI9IjAlIiB5Mj0iNTAlIiBpZD0icHJlZml4X19kIj48c3RvcCBzdG9wLWNvbG9yPSIjRkZGIiBzdG9wLW9wYWNpdHk9Ii41IiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1vcGFjaXR5PSIuNSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjIyLjcxMiUiIHkxPSI3My4xMzMlIiB4Mj0iNjguNjIlIiB5Mj0iNjYuMTk0JSIgaWQ9InByZWZpeF9fZiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGRiIgc3RvcC1vcGFjaXR5PSIuNSIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3Atb3BhY2l0eT0iLjUiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IHgxPSIxMjguNzY4JSIgeTE9IjUwJSIgeDI9IjAlIiB5Mj0iNTAlIiBpZD0icHJlZml4X19oIj48c3RvcCBzdG9wLWNvbG9yPSIjRkZGIiBzdG9wLW9wYWNpdHk9Ii41IiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1vcGFjaXR5PSIuNSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjEwMCUiIHkxPSIxMDAlIiB4Mj0iMjguNCUiIHkyPSIxMDAlIiBpZD0icHJlZml4X19qIj48c3RvcCBzdG9wLWNvbG9yPSIjRkZCRUJFIiBzdG9wLW9wYWNpdHk9Ii41IiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzM1MjIyMiIgc3RvcC1vcGFjaXR5PSIuNSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjEwMCUiIHkxPSIxMDAlIiB4Mj0iMjguNCUiIHkyPSIxMDAlIiBpZD0icHJlZml4X19sIj48c3RvcCBzdG9wLWNvbG9yPSIjRkZCRUJFIiBzdG9wLW9wYWNpdHk9Ii41IiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzM1MjIyMiIgc3RvcC1vcGFjaXR5PSIuNSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48ZmlsdGVyIHg9Ii0xNy42JSIgeT0iLTQxLjYlIiB3aWR0aD0iMTM1LjIlIiBoZWlnaHQ9IjE4My4yJSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0icHJlZml4X19hIj48ZmVPZmZzZXQgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSIvPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIiIGluPSJzaGFkb3dPZmZzZXRPdXRlcjEiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSIvPjxmZUNvbG9yTWF0cml4IHZhbHVlcz0iMCAwIDAgMCAwLjA4NjI3NDUwOTggMCAwIDAgMCAwLjA4NjI3NDUwOTggMCAwIDAgMCAwLjA4NjI3NDUwOTggMCAwIDAgMC41IDAiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIi8+PC9maWx0ZXI+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTAgMGgyNHY0NEgweiIvPjxnIGZpbGwtcnVsZT0ibm9uemVybyI+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMCAxIDEgMCAzLjQ5OCA0LjY0MikiPjx1c2UgZmlsbD0iIzAwMCIgZmlsdGVyPSJ1cmwoI3ByZWZpeF9fYSkiIHhsaW5rOmhyZWY9IiNwcmVmaXhfX2IiLz48dXNlIGZpbGw9IiNERkVDRjIiIHhsaW5rOmhyZWY9IiNwcmVmaXhfX2IiLz48L2c+PHBhdGggZD0iTTE0LjQ1OCAzOC43MjhjMi4zNjkgMCAyLjk4LS4wNTMgMy43MDQtLjc4MS43OS0uNzk0LjgzNC01LjIzNy44MzQtNS4yMzdsLjE5MS00LjExNS0uMTQ0LTkuODk2cy0uMDI2LTcuNzktLjAyNi05LjEzMmMwLTEuMzQyLS44NDYtMi40MDUtLjg0Ni0yLjQwNS0xLjc0MS0yLjM4MS0zLjU4Mi0yLjUyLTMuNTgyLTIuNTJIOS4zNTdzLTEuODQxLjEzOS0zLjU4MiAyLjUyYzAgMC0uODQ3IDEuMDYzLS44NDcgMi40MDUgMCAxLjM0Mi0uMDI2IDkuMTMyLS4wMjYgOS4xMzJsLS4xNDQgOS44OTYuMTkyIDQuMTE1czAgNC40ODQuODMzIDUuMjM3Yy44Ni43NzcgMS4zNy43ODEgMy43NC43ODFoNC45MzV6IiBmaWxsPSIjRUZGNUY4Ii8+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMCAxIDEgMCAxNy4wOTMgMTUuMDYyKSIgb3BhY2l0eT0iLjkiPjx1c2UgZmlsbD0iIzE2MTYxNiIgeGxpbms6aHJlZj0iI3ByZWZpeF9fYyIvPjx1c2UgZmlsbD0idXJsKCNwcmVmaXhfX2QpIiB4bGluazpocmVmPSIjcHJlZml4X19jIi8+PC9nPjxwYXRoIGQ9Ik01LjgyNiAxNC41M2MxLjgwNi0uOTM3IDMuOTE1LTEuNDY1IDYuMTctMS40NjUgMi4yNDMgMCA0LjMzOS41MjggNi4xNDEgMS40NTJsLTEuMjc4IDYuNDg5YTE1LjM3NSAxNS4zNzUgMCAwMC00LjkxNS0uNzk0Yy0xLjc5MyAwLTMuMzI0LjI1NC00Ljg3My43OTRMNS44MjYgMTQuNTN6IiBmaWxsPSIjMTYxNjE2Ii8+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMCAxIDEgMCAzLjQ5OCA0LjY0MikiPjx1c2UgZmlsbD0iIzNDNDI0MiIgeGxpbms6aHJlZj0iI3ByZWZpeF9fZSIvPjx1c2UgZmlsbD0idXJsKCNwcmVmaXhfX2YpIiB4bGluazpocmVmPSIjcHJlZml4X19lIi8+PC9nPjxnIG9wYWNpdHk9Ii45IiB0cmFuc2Zvcm09Im1hdHJpeCgwIDEgMSAwIDMuNDk4IDQuNjQyKSI+PHVzZSBmaWxsPSIjMTYxNjE2IiB4bGluazpocmVmPSIjcHJlZml4X19nIi8+PHVzZSBmaWxsPSJ1cmwoI3ByZWZpeF9faCkiIHhsaW5rOmhyZWY9IiNwcmVmaXhfX2ciLz48L2c+PHBhdGggZD0iTTMuODcgMTcuNjUxbC44NzYtLjQ2MmEuMzEzLjMxMyAwIDAwLjE3LS4yNzR2LS4xODhsLTEuMzE3LjY5NXYuMDgyYy4wMDQuMTI3LjE1Mi4yMDkuMjcuMTQ3eiIgZmlsbD0iIzMwMzQzNSIvPjxwYXRoIGQ9Ik0zLjU2NCAxNy40NWwxLjA4Mi0uNTY4Yy4xLS4wNTMuMjEtLjA5LjMyNy0uMTA2YS4xMDguMTA4IDAgMDAuMDk2LS4xMDd2LS41NTJjMC0uMDktLjA3OC0uMTY0LS4xNzQtLjE2NEg0Ljg1Yy0uMTEgMC0uNTAyLjA2Mi0xIC41MjgtLjIyMi4yMDktLjM1My42MzgtLjM1My45MzMgMCAuMDMzLjAzNS4wNTMuMDY2LjAzN3oiIGZpbGw9IiNERkVDRjIiLz48cGF0aCBkPSJNNS40MzQgMTUuMDYyczEuMDk1IDQuNDY3IDEuMjI2IDcuNDg2Yy4xMzEgMy4wMi0uMDE3IDMuNDctLjIxIDUuMjgyLS4wNTEuNTA3LS45MzcgMy44MTMtLjkzNyAzLjgxM0w1LjM2IDI1LjE3bC4wNzQtMTAuMTF6IiBmaWxsPSIjMTYxNjE2IiBvcGFjaXR5PSIuOSIvPjxwYXRoIGQ9Ik0yMC4xMyAxNy42NTFsLS44NzYtLjQ2MmEuMzEzLjMxMyAwIDAxLS4xNy0uMjc0di0uMTg4bDEuMzE3LjY5NXYuMDgyYy0uMDA0LjEyNy0uMTUyLjIwOS0uMjcuMTQ3eiIgZmlsbD0iIzMwMzQzNSIvPjxwYXRoIGQ9Ik0yMC40MzYgMTcuNDVsLTEuMDgyLS41NjhhLjk4NC45ODQgMCAwMC0uMzI3LS4xMDYuMTA4LjEwOCAwIDAxLS4wOTYtLjEwN3YtLjU1MmMwLS4wOS4wNzgtLjE2NC4xNzQtLjE2NGguMDQ0Yy4xMSAwIC41MDIuMDYyIDEgLjUyOC4yMjIuMjA5LjM1My42MzguMzUzLjkzMyAwIC4wMzMtLjAzNS4wNTMtLjA2Ni4wMzd6IiBmaWxsPSIjREZFQ0YyIi8+PHBhdGggZD0iTTkuMjk2IDM4LjUyNGg1LjM3NWMyLjI1MiAwIDIuODA2LS40NTggMy40MzQtMS4xNS0uMTA0LjI4Ny0uMjE4LjUyLS4zNDQuNjU5LS43MTIuNzgxLTEuMDI2IDEuMzI1LTMuMzU2IDEuMzI1SDkuNTU4Yy0yLjMzIDAtMi41NDQtLjQ4Ni0zLjM5LTEuMzI1LS4xNDktLjE0Ny0uMjc2LS40MDUtLjM4OS0uNzMyLjc1NS43NzcgMS4xNjUgMS4yMjMgMy41MTcgMS4yMjN6IiBmaWxsPSIjOTVBNEFEIi8+PHBhdGggZD0iTTguODgxIDM3LjkyMmg2LjA1MmMxLjkxMSAwIDIuNzM2LS4yOTggMy4zMy0uNzgxYTMuMDc1IDMuMDc1IDAgMDEtLjI5Ny43MmMtLjU4NS42MTgtMS4yMyAxLjAxOS0zLjMzNCAxLjAxOUg5LjE3OGMtMS40OCAwLTIuMi0uMTc2LTIuNzE4LS41MDQtLjExOC0uMTEtLjI0LS4yMzctLjM4NC0uMzg0LS4xNC0uMTQ3LS4yNjYtLjQwNS0uMzc2LS43NC41OS40MzMgMS4zOC42NyAzLjE4MS42N3oiIGZpbGw9IiNDQkQ4REUiLz48cGF0aCBkPSJNMTEuODE4IDM4LjAzN2MxLjY1IDAgMy4xMTUtLjA2NiA0LjA0LS4xNjQtLjA3LjE5My0uMTUyLjM0NC0uMjQuNDI2LS4wMzUuMDM3LS4xMTMuMDctLjE0OC4wOTgtLjkyNS4wODItMi4xOTUuMTMtMy42NTIuMTNhNDYuMjIgNDYuMjIgMCAwMS0zLjUzOS0uMTE4Yy0uMDQtLjAzMy0uMTI2LS4wNy0uMTctLjExLS4wOTYtLjA4Mi0uMTc5LS4yMy0uMjUzLS40MTguOTM0LjA5OSAyLjM2LjE1NiAzLjk2Mi4xNTZ6IiBmaWxsPSIjRjJGQUZGIi8+PHBhdGggZD0iTTExLjk4OCAxMi4xOTRjLTIuMjAzIDAtNC4yODUuNDQ2LTYuMTA5IDEuMjI3Ljc4Ny02Ljk2MSAzLjUtNy4xOCAzLjUtNy4xOGg1LjE5MnMzLjEyNS4zMTkgMy41IDcuMTcyYTE1LjQ5MyAxNS40OTMgMCAwMC02LjA4My0xLjIyeiIgZmlsbD0iI0Y5RkRGRiIvPjxnIHRyYW5zZm9ybT0ibWF0cml4KDAgMSAxIDAgNS44MzQgMzcuNTE3KSI+PHVzZSBmaWxsPSIjQjkyRTREIiB4bGluazpocmVmPSIjcHJlZml4X19pIi8+PHVzZSBmaWxsLW9wYWNpdHk9Ii43IiBmaWxsPSJ1cmwoI3ByZWZpeF9faikiIHhsaW5rOmhyZWY9IiNwcmVmaXhfX2kiLz48L2c+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMCAxIDEgMCAxMS40MzggMzcuNTE3KSI+PHVzZSBmaWxsPSIjQjkyRTREIiB4bGluazpocmVmPSIjcHJlZml4X19rIi8+PHVzZSBmaWxsLW9wYWNpdHk9Ii43IiBmaWxsPSJ1cmwoI3ByZWZpeF9fbCkiIHhsaW5rOmhyZWY9IiNwcmVmaXhfX2siLz48L2c+PHBhdGggZD0iTTE4LjQxIDM2LjI3NGMtLjAzOC4yNS0uMDgyLjQ1NC0uMTMuNjQyLS4wOTIuMzcyLS40MTkuNjU1LS44Mi43MTItMS40NzUuMjA4LTMuNDM0LjQyMS01LjU4MS40MjEtMi4wODYgMC0zLjk4OC0uMjA0LTUuNDQ2LS40MDVhLjk3NS45NzUgMCAwMS0uODI0LS43MDggOC45MDMgOC45MDMgMCAwMS0uMTM1LS42NDJjMS41MjIuMjUgMy44MjYuNDEgNi40MDUuNDEgMi42NDggMCA1LjAwOS0uMTY4IDYuNTMyLS40M3oiIGZpbGw9IiNERkVDRjIiLz48cGF0aCBkPSJNMTYuMjE2IDM2LjcxMWMtLjk0Ny40ODctMi40ODcuNy00LjIzMi43LTEuNjk4IDAtMy4yMDctLjE5Ni00LjE1OS0uNjYzLS40NC0uODMtLjY2My0yLjY0My0uNjYzLTIuNjQzbC0uMDA5LS4xODRjLjc3My43MDggMi42NDUgMS4yMDMgNC44MyAxLjIwMyAyLjI0MyAwIDQuMTU5LS41MjQgNC44OTItMS4yNmwtLjAxMy4yNDFjMC0uMDA0LS4yMTggMS43NjQtLjY0NiAyLjYwNnpNNy40NDcgMjMuOTNhMjAuMTIgMjAuMTIgMCAwMC0uMjk0LTIuNDQydi0uMDY1YzEuNTM4LS4zMiAzLjE2Ny0uNjQ5IDQuODYyLS42NDkgMS42NzUgMCAzLjI5NC4zMjYgNC44MTYuNjM3YTIyLjY3MyAyMi42NzMgMCAwMC0uMzAzIDIuNTJjLS4xNDcgMi44ODQuMDIgMy4zMTQuMjMyIDUuMDQ4LjAwNi4wNTcuMDI2LjE1Mi4wNTYuMjc0LTEuNTEzLjI3OC0zIC41NC00LjkxMi41NC0xLjg0NyAwLTMuMjg5LS4yNS00Ljc1LS41MTF2LS4wMDhjLjAzLS4xMzEuMDU1LS4yMzMuMDYtLjI5LjIxOC0xLjc0NC4zOC0yLjE3My4yMzMtNS4wNTN6IiBmaWxsPSIjRjJGQUZGIi8+PHBhdGggZD0iTTEyLjA2NyAxOS43MTZsLTQuNjQ1LjY5MmMtLjQzMS0yLjkyLS44MzItNC4zNi0xLjIwMi00LjMyNGwtLjIxLTEuMjk3YTExLjczMiAxMS43MzIgMCAwMTYuMDI2LTEuNjczYy4zODYgMC0uMTM3LjA1LTEuNTY5LjE0N2wxLjYgNi40NTV6IiBmaWxsPSIjMTYxNjE2Ii8+PC9nPjwvZz48L3N2Zz4=";
7167
7150
  const TaxiCar_css_ts_vanilla = "";
7168
7151
  var carIcon = "_65j3sr1";
@@ -7516,12 +7499,16 @@ const SectionDispatching = defineSetup(function SectionDispatching2(props) {
7516
7499
  title,
7517
7500
  registerOverlay
7518
7501
  } = props;
7502
+ const {
7503
+ language
7504
+ } = useMapSupplier();
7519
7505
  const from = place2point(fromPlace);
7520
7506
  return Vue.h("div", [Vue.h(StartEndPoint, {
7521
7507
  "attrs": {
7522
7508
  "type": "start",
7523
7509
  "position": from,
7524
7510
  "title": title,
7511
+ "language": language,
7525
7512
  "registerOverlay": registerOverlay
7526
7513
  }
7527
7514
  }), Vue.h(WaveCircle, {
@@ -7547,6 +7534,9 @@ const SectionDispatching = defineSetup(function SectionDispatching2(props) {
7547
7534
  };
7548
7535
  });
7549
7536
  const SectionConfirmed = defineSetup(function SectionConfirmed2(props) {
7537
+ const {
7538
+ language
7539
+ } = useMapSupplier();
7550
7540
  const {
7551
7541
  apiMapDistance
7552
7542
  } = useMapGeometry();
@@ -7584,13 +7574,15 @@ const SectionConfirmed = defineSetup(function SectionConfirmed2(props) {
7584
7574
  "attrs": {
7585
7575
  "type": "start",
7586
7576
  "registerOverlay": registerOverlay,
7587
- "position": from
7577
+ "position": from,
7578
+ "language": language
7588
7579
  }
7589
7580
  }), Vue.h(StartEndPoint, {
7590
7581
  "attrs": {
7591
7582
  "type": "end",
7592
7583
  "registerOverlay": registerOverlay,
7593
- "position": to
7584
+ "position": to,
7585
+ "language": language
7594
7586
  }
7595
7587
  }), Vue.h(PlaceCircle, {
7596
7588
  "attrs": {
@@ -7621,6 +7613,9 @@ const SectionDriverStartService = defineSetup(function SectionDriverStartService
7621
7613
  registerOverlay
7622
7614
  } = props;
7623
7615
  const fittableRegistryOverlay = createFittableRegisterOverlay(registerOverlay);
7616
+ const {
7617
+ language
7618
+ } = useMapSupplier();
7624
7619
  const {
7625
7620
  apiMapDistance
7626
7621
  } = useMapGeometry();
@@ -7647,7 +7642,8 @@ const SectionDriverStartService = defineSetup(function SectionDriverStartService
7647
7642
  "attrs": {
7648
7643
  "type": "start",
7649
7644
  "position": from,
7650
- "registerOverlay": registerOverlay
7645
+ "registerOverlay": registerOverlay,
7646
+ "language": language
7651
7647
  }
7652
7648
  }), Vue.h(PlaceCircle, {
7653
7649
  "attrs": {
@@ -7722,6 +7718,9 @@ const SectionBookDispatched = defineSetup(function SectionBookDispatched2(props)
7722
7718
  const {
7723
7719
  apiMapDistance
7724
7720
  } = useMapGeometry();
7721
+ const {
7722
+ language
7723
+ } = useMapSupplier();
7725
7724
  return () => {
7726
7725
  const {
7727
7726
  from: fromPlace,
@@ -7768,13 +7767,15 @@ const SectionBookDispatched = defineSetup(function SectionBookDispatched2(props)
7768
7767
  "attrs": {
7769
7768
  "type": "start",
7770
7769
  "registerOverlay": registerOverlay,
7771
- "position": from
7770
+ "position": from,
7771
+ "language": language
7772
7772
  }
7773
7773
  }), Vue.h(StartEndPoint, {
7774
7774
  "attrs": {
7775
7775
  "type": "end",
7776
7776
  "registerOverlay": registerOverlay,
7777
- "position": to
7777
+ "position": to,
7778
+ "language": language
7778
7779
  }
7779
7780
  }), Vue.h(PlaceCircle, {
7780
7781
  "attrs": {
@@ -7805,6 +7806,9 @@ const SectionDriverArrived = defineSetup(function SectionDriverArrived2(props) {
7805
7806
  registerOverlay
7806
7807
  } = props;
7807
7808
  const fittableRegistryOverlay = createFittableRegisterOverlay(registerOverlay);
7809
+ const {
7810
+ language
7811
+ } = useMapSupplier();
7808
7812
  const {
7809
7813
  apiMapDistance
7810
7814
  } = useMapGeometry();
@@ -7849,7 +7853,8 @@ const SectionDriverArrived = defineSetup(function SectionDriverArrived2(props) {
7849
7853
  "attrs": {
7850
7854
  "type": "start",
7851
7855
  "position": from,
7852
- "registerOverlay": registerOverlay
7856
+ "registerOverlay": registerOverlay,
7857
+ "language": language
7853
7858
  }
7854
7859
  }), Vue.h(PlaceCircle, {
7855
7860
  "attrs": {
@@ -7882,6 +7887,9 @@ const SectionInService = defineSetup(function SectionInService2(props) {
7882
7887
  renderTitle
7883
7888
  } = props;
7884
7889
  const to = place2point(toPlace);
7890
+ const {
7891
+ language
7892
+ } = useMapSupplier();
7885
7893
  const {
7886
7894
  apiMapDistance
7887
7895
  } = useMapGeometry();
@@ -7929,7 +7937,8 @@ const SectionInService = defineSetup(function SectionInService2(props) {
7929
7937
  "attrs": {
7930
7938
  "type": "end",
7931
7939
  "position": to,
7932
- "registerOverlay": registerOverlay
7940
+ "registerOverlay": registerOverlay,
7941
+ "language": language
7933
7942
  }
7934
7943
  }), Vue.h(PlaceCircle, {
7935
7944
  "attrs": {
@@ -7950,6 +7959,9 @@ const SectionInService = defineSetup(function SectionInService2(props) {
7950
7959
  };
7951
7960
  });
7952
7961
  const SectionCanceled = defineSetup(function SectionCanceled2(props) {
7962
+ const {
7963
+ language
7964
+ } = useMapSupplier();
7953
7965
  return () => {
7954
7966
  const {
7955
7967
  from: fromPlace,
@@ -7962,13 +7974,15 @@ const SectionCanceled = defineSetup(function SectionCanceled2(props) {
7962
7974
  "attrs": {
7963
7975
  "type": "start",
7964
7976
  "position": from,
7965
- "registerOverlay": registerOverlay
7977
+ "registerOverlay": registerOverlay,
7978
+ "language": language
7966
7979
  }
7967
7980
  }), Vue.h(StartEndPoint, {
7968
7981
  "attrs": {
7969
7982
  "type": "end",
7970
7983
  "position": to,
7971
- "registerOverlay": registerOverlay
7984
+ "registerOverlay": registerOverlay,
7985
+ "language": language
7972
7986
  }
7973
7987
  }), Vue.h(PlaceCircle, {
7974
7988
  "attrs": {
@@ -7995,6 +8009,9 @@ const SectionCanceled = defineSetup(function SectionCanceled2(props) {
7995
8009
  };
7996
8010
  });
7997
8011
  const SectionEndService = defineSetup(function SectionEndService2(props) {
8012
+ const {
8013
+ language
8014
+ } = useMapSupplier();
7998
8015
  return () => {
7999
8016
  const {
8000
8017
  from: fromPlace,
@@ -8020,13 +8037,15 @@ const SectionEndService = defineSetup(function SectionEndService2(props) {
8020
8037
  "attrs": {
8021
8038
  "type": "start",
8022
8039
  "position": from,
8023
- "registerOverlay": registerOverlay
8040
+ "registerOverlay": registerOverlay,
8041
+ "language": language
8024
8042
  }
8025
8043
  }), Vue.h(StartEndPoint, {
8026
8044
  "attrs": {
8027
8045
  "type": "end",
8028
8046
  "position": to,
8029
- "registerOverlay": registerOverlay
8047
+ "registerOverlay": registerOverlay,
8048
+ "language": language
8030
8049
  }
8031
8050
  }), Vue.h(PlaceCircle, {
8032
8051
  "attrs": {