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