@heycar/heycars-map 0.9.0 → 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.0";
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,19 +1098,81 @@ 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
  };
1122
+ function defered() {
1123
+ const defer = {};
1124
+ const promise = new Promise((resolve, reject) => {
1125
+ defer.state = "pending";
1126
+ defer.resolve = async (value) => {
1127
+ try {
1128
+ const result = await value;
1129
+ defer.state = "fulfilled";
1130
+ return resolve(result);
1131
+ } catch (err) {
1132
+ defer.state = "rejected";
1133
+ reject(err);
1134
+ }
1135
+ };
1136
+ defer.reject = (reason) => {
1137
+ defer.state = "rejected";
1138
+ return reject(reason);
1139
+ };
1140
+ });
1141
+ return Object.assign(promise, defer);
1142
+ }
1143
+ const pausableSleep = (milliSeconds) => {
1144
+ const sleepDefered = defered();
1145
+ let id = setTimeout(sleepDefered.resolve, milliSeconds);
1146
+ let isPaused = false;
1147
+ const pause = () => {
1148
+ if (isPaused || sleepDefered.state === "fulfilled")
1149
+ return;
1150
+ console.log("pause");
1151
+ isPaused = true;
1152
+ clearTimeout(id);
1153
+ };
1154
+ const restart = () => {
1155
+ if (sleepDefered.state === "fulfilled")
1156
+ return;
1157
+ console.log("restart");
1158
+ isPaused = false;
1159
+ clearTimeout(id);
1160
+ id = setTimeout(sleepDefered.resolve, milliSeconds);
1161
+ };
1162
+ return { sleepPromise: sleepDefered, pause, restart };
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;
1114
1176
  const vec2lnglat = ([lng, lat]) => ({
1115
1177
  lng: Number(lng),
1116
1178
  lat: Number(lat)
@@ -1182,6 +1244,9 @@ const isGeoPositionEqual = (p1, p2) => {
1182
1244
  return false;
1183
1245
  return p1.coords.longitude === p2.coords.longitude && p1.coords.latitude === p2.coords.latitude;
1184
1246
  };
1247
+ const isZoneEqual = (z1, z2) => {
1248
+ return z1.path.every((point, idx) => isPointEqual(point, z2 == null ? void 0 : z2.path[idx]));
1249
+ };
1185
1250
  const amapPlaceName2DisplayName = (name2, options) => {
1186
1251
  const { isChina, province, city, district, township } = options;
1187
1252
  if (!name2)
@@ -1196,6 +1261,12 @@ const amapPlaceName2DisplayName = (name2, options) => {
1196
1261
  }
1197
1262
  return result;
1198
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
+ };
1199
1270
  const toPlaceType = (maybePlace) => {
1200
1271
  var _a;
1201
1272
  const lng = Number(maybePlace.lng);
@@ -2201,15 +2272,6 @@ function detectWebGL() {
2201
2272
  }
2202
2273
  return "NOT_SUPPORTED";
2203
2274
  }
2204
- const MAX_ANIMATION_DISTANCE_VW = 100;
2205
- const BEIJIN_POINT = [116.2317, 39.5427];
2206
- const ZINDEX_BUBBLE_LAYER = 50;
2207
- const ZINDEX_START_END_LOGO_LAYER = 40;
2208
- const ZINDEX_PLACE_LAYER = 30;
2209
- const ZINDEX_CAR_LAYER = 21;
2210
- const ZINDEX_PASSENGER_LAYER = 20;
2211
- const ZINDEX_LINE_LAYER = 12;
2212
- const ZINDEX_GREEN_ZONE = 10;
2213
2275
  const useAmapLngLatToVw = (props) => {
2214
2276
  const apiMapLngLatToVw = (point) => {
2215
2277
  const amap2 = props.mapRef.value;
@@ -2345,8 +2407,13 @@ const Amap = defineSetup(function Amap2(props, { slots, emit }) {
2345
2407
  const map = mapRef.value;
2346
2408
  if (!center || !map)
2347
2409
  return;
2348
- const immediately = prevCenter ? apiMapDistanceVwOfPoints(center, prevCenter) > MAX_ANIMATION_DISTANCE_VW : true;
2349
- 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);
2350
2417
  }
2351
2418
  );
2352
2419
  watch(
@@ -3145,6 +3212,36 @@ const useMapFitView = (props) => {
3145
3212
  const { supplier } = useMapSupplier();
3146
3213
  return supplier === "gmap" ? useGmapFitView(props) : useAmapFitView(props);
3147
3214
  };
3215
+ const useAmapTouchEvent = () => {
3216
+ const mapRef = useAmap();
3217
+ const addMapEventListener = (name2, handler) => {
3218
+ var _a;
3219
+ return (_a = mapRef == null ? void 0 : mapRef.value) == null ? void 0 : _a.on(name2, handler);
3220
+ };
3221
+ const removeMapEventListener = (name2, handler) => {
3222
+ var _a;
3223
+ return (_a = mapRef == null ? void 0 : mapRef.value) == null ? void 0 : _a.off(name2, handler);
3224
+ };
3225
+ return { addMapEventListener, removeMapEventListener };
3226
+ };
3227
+ const useGmapTouchEvent = () => {
3228
+ const mapRef = useGmap();
3229
+ const addMapEventListener = (name2, handler) => {
3230
+ var _a;
3231
+ const container = (_a = mapRef == null ? void 0 : mapRef.value) == null ? void 0 : _a.getDiv();
3232
+ return container == null ? void 0 : container.addEventListener(name2, handler);
3233
+ };
3234
+ const removeMapEventListener = (name2, handler) => {
3235
+ var _a;
3236
+ const container = (_a = mapRef == null ? void 0 : mapRef.value) == null ? void 0 : _a.getDiv();
3237
+ return container == null ? void 0 : container.removeEventListener(name2, handler);
3238
+ };
3239
+ return { addMapEventListener, removeMapEventListener };
3240
+ };
3241
+ const useMapTouchEvent = () => {
3242
+ const { supplier } = useMapSupplier();
3243
+ return supplier === "gmap" ? useGmapTouchEvent() : useAmapTouchEvent();
3244
+ };
3148
3245
  defineSetup(function FitView(props, {
3149
3246
  slots
3150
3247
  }) {
@@ -3197,7 +3294,7 @@ function createFittableRegisterOverlay(registerOverlay) {
3197
3294
  setFitView
3198
3295
  };
3199
3296
  }
3200
- const KeyedFitView = defineSetup(function KeyedFitView2(props, {
3297
+ defineSetup(function KeyedFitView(props, {
3201
3298
  slots
3202
3299
  }) {
3203
3300
  const mapMountedPromise = useMapMountedPromise();
@@ -3218,7 +3315,51 @@ const KeyedFitView = defineSetup(function KeyedFitView2(props, {
3218
3315
  return h("div", [(_a = slots.default) == null ? void 0 : _a.call(slots)]);
3219
3316
  };
3220
3317
  });
3318
+ const InterruptableIntervalFitView = defineSetup(function InterruptableIntervalFitView2(props) {
3319
+ const {
3320
+ registerOverlay
3321
+ } = props;
3322
+ const mapMountedPromise = useMapMountedPromise();
3323
+ const {
3324
+ addMapEventListener,
3325
+ removeMapEventListener
3326
+ } = useMapTouchEvent();
3327
+ watch(() => 0, async (_1, _2, onCleanup) => {
3328
+ await mapMountedPromise;
3329
+ let skip = false;
3330
+ let pause;
3331
+ let restart;
3332
+ let sleepPromise;
3333
+ const handleTouchStartOrMove = () => pause();
3334
+ const handleTouchEnd = () => restart();
3335
+ addMapEventListener("touchstart", handleTouchStartOrMove);
3336
+ addMapEventListener("touchmove", handleTouchStartOrMove);
3337
+ addMapEventListener("touchend", handleTouchEnd);
3338
+ onCleanup(() => {
3339
+ skip = true;
3340
+ removeEventListener("touchstart", handleTouchStartOrMove);
3341
+ removeMapEventListener("touchmove", handleTouchStartOrMove);
3342
+ removeMapEventListener("touchend", handleTouchEnd);
3343
+ });
3344
+ while (!skip) {
3345
+ ({
3346
+ pause,
3347
+ restart,
3348
+ sleepPromise
3349
+ } = pausableSleep(props.interval));
3350
+ await sleepPromise;
3351
+ console.log("InterruptableIntervalFitView setFitView");
3352
+ registerOverlay.setFitView();
3353
+ }
3354
+ }, {
3355
+ immediate: true,
3356
+ flush: "post"
3357
+ });
3358
+ return () => null;
3359
+ });
3360
+ const imgEndPointEn = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IHgxPSI3Mi4zMzklIiB5MT0iNTAlIiB4Mj0iMCUiIHkyPSI1MCUiIGlkPSJwcmVmaXhfX2EiPjxzdG9wIHN0b3AtY29sb3I9IiNGRjg0NDciIG9mZnNldD0iMCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkY4QjRBIiBvZmZzZXQ9IjUwLjU5NiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkZBOTVBIiBvZmZzZXQ9IjEwMCUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0xMiAzMGMyLjEzNCAwIDMuODYzLS44OTMgMy44NjMtMS45OTUgMC0xLjEtMS43My0xLjk5NC0zLjg2My0xLjk5NC0yLjEzNCAwLTMuODYzLjg5My0zLjg2MyAxLjk5NEM4LjEzNyAyOS4xMDcgOS44NjcgMzAgMTIgMzB6IiBmaWxsLW9wYWNpdHk9Ii41IiBmaWxsPSIjNDM0ODVBIi8+PHBhdGggZD0iTTExIDI3LjAwNmMyLjEyOCAwLS45LTMuNzQzIDUuNjIxLTYuNjQzQzE5Ljg0MiAxOC40NTMgMjIgMTQuOTUzIDIyIDEwLjk1IDIyIDQuOTAyIDE3LjA3NSAwIDExIDBTMCA0LjkwMiAwIDEwLjk1YzAgMy45MTggMi4wNjggNy4zNTYgNS4xNzcgOS4yOUMxMS43NSAyMy4yODQgOS4wNiAyNy4wMDcgMTEgMjcuMDA3di0uMDAxeiIgc3Ryb2tlPSIjRkZGIiBmaWxsPSJ1cmwoI3ByZWZpeF9fYSkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMSkiLz48ZyBmaWxsPSIjRkZGIj48cGF0aCBkPSJNOC44OTMgMTIuNjY2SDYuNjYzdjEuMzY1aDIuNTc0di45NTJoLTMuNjZ2LTUuNDloMy41Nzh2Ljk0Nkg2LjY2M3YxLjI5aDIuMjI5ek0xMi4yNzUgMTEuMDAxYy40MyAwIC43Ny4xNDEgMS4wMi40MjQuMjUuMjgyLjM3NS42OTMuMzc1IDEuMjMzdjIuMzI1aC0xLjA0M3YtMS45ODdjMC0uNzEtLjIzNS0xLjA2NS0uNzA1LTEuMDY1YS43MzIuNzMyIDAgMDAtLjYwMy4yODljLS4xNTMuMTkyLS4yMjkuNDYzLS4yMjkuODEzdjEuOTVoLTEuMDQzdi0zLjg4NWguOTE1Yy4wMjUuMzA1LjA0OC41MTMuMDY4LjYyMy4yNS0uNDguNjY1LS43MiAxLjI0NS0uNzJ6TTE3LjI3NyA5LjI3NmgxLjA0M3Y1LjcwN2gtLjkxNWMtLjAyNS0uMjktLjA0NS0uNDg1LS4wNi0uNTg1YTEuMzE3IDEuMzE3IDAgMDEtLjUyOS41MDcgMS41MiAxLjUyIDAgMDEtLjcwOS4xNjhjLS4zMiAwLS42MTItLjA4LS44NzctLjI0YTEuNzI0IDEuNzI0IDAgMDEtLjYzOC0uN2MtLjE2LS4zMDgtLjI0LS42NzItLjI0LTEuMDkyIDAtLjQyNS4wOC0uNzkxLjI0LTEuMDk5LjE2LS4zMDcuMzczLS41NDEuNjM4LS43MDEuMjY1LS4xNi41NTctLjI0Ljg3Ny0uMjQuMjM1IDAgLjQ1NC4wNDcuNjU3LjE0Mi4yMDIuMDk1LjM3My4yNC41MTMuNDM1VjkuMjc2em0tLjkzIDQuOTA1Yy4yNiAwIC40OC0uMDk1LjY2LS4yODUuMTgtLjE5LjI3LS40NzUuMjctLjg1NSAwLS4zNzUtLjA5LS42NTQtLjI3LS44MzZhLjg5Mi44OTIgMCAwMC0uNjYtLjI3NC44MzIuODMyIDAgMDAtLjY2My4yOTJjLS4xNjguMTk1LS4yNTEuNDY4LS4yNTEuODE4IDAgLjM1LjA4My42MjcuMjUuODMyYS44MTUuODE1IDAgMDAuNjY1LjMwOHoiLz48L2c+PC9nPjwvc3ZnPg==";
3221
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+";
3222
3363
  const imgStartPoint = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEyOS41OTklIiB5Mj0iNTAlIiBpZD0icHJlZml4X19hIj48c3RvcCBzdG9wLWNvbG9yPSIjMzZBOEZGIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQ4NzFGMSIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMTIgMzAuMjE1YzEuOTUgMCAzLjUzMi0uODE2IDMuNTMyLTEuODIzIDAtMS4wMDctMS41ODEtMS44MjMtMy41MzItMS44MjMtMS45NSAwLTMuNTMyLjgxNi0zLjUzMiAxLjgyMyAwIDEuMDA3IDEuNTgxIDEuODIzIDMuNTMyIDEuODIzeiIgZmlsbC1vcGFjaXR5PSIuNSIgZmlsbD0iIzQzNDg1QSIvPjxwYXRoIGQ9Ik0xMSAyN2MyLjEyOCAwLS45LTMuNzQyIDUuNjIxLTYuNjQxIDMuMjIxLTEuOTEgNS4zNzktNS40MSA1LjM3OS05LjQxMkMyMiA0LjkwMSAxNy4wNzUgMCAxMSAwUzAgNC45MDEgMCAxMC45NDdjMCAzLjkxOCAyLjA2OCA3LjM1NSA1LjE3NyA5LjI5QzExLjc1IDIzLjI3NyA5LjA2IDI3IDExIDI3eiIgc3Ryb2tlPSIjRkZGIiBmaWxsPSJ1cmwoI3ByZWZpeF9fYSkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMS4yMTUpIi8+PHRleHQgZm9udC1mYW1pbHk9IlBpbmdGYW5nU0MtU2VtaWJvbGQsIFBpbmdGYW5nIFNDIiBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNTAwIiBmaWxsPSIjRkZGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxIDEuMjE1KSI+PHRzcGFuIHg9IjUiIHk9IjE1LjYyNCI+6LW3PC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg==";
3223
3364
  const StartEndPoint_css_ts_vanilla = "";
3224
3365
  var arrowRight = createRuntimeFn({ defaultClassName: "_4a4ovka", variantClassNames: { withArrow: { true: "_4a4ovkb", false: "_4a4ovkc" } }, defaultVariants: {}, compoundVariants: [] });
@@ -3238,9 +3379,10 @@ const AStartEndPoint = defineSetup(function AStartEndPoint2(props, {
3238
3379
  withArrow = false,
3239
3380
  title,
3240
3381
  description,
3241
- type: type2
3382
+ type: type2,
3383
+ language
3242
3384
  } = props;
3243
- const icon = type2 === "start" ? imgStartPoint : imgEndPoint;
3385
+ const icon = type2 === "start" ? language === "zh" ? imgStartPoint : imgStartPointEn : language === "zh" ? imgEndPoint : imgEndPointEn;
3244
3386
  const descriptionRow = !description ? "" : decodeAsterisk(description).map((item) => item.type === "normal" ? item.value : `<span class="${pointInfoBoxEmphasize$1}">${item.value}</span>`).join("");
3245
3387
  if (!description && !title)
3246
3388
  return `<img class="AStartEndPoint ${pointIcon({
@@ -3305,9 +3447,10 @@ const GStartEndPoint = defineSetup(function GStartEndPoint2(props, {
3305
3447
  withArrow = false,
3306
3448
  title,
3307
3449
  description,
3308
- type: type2
3450
+ type: type2,
3451
+ language = "zh"
3309
3452
  } = props;
3310
- const icon = type2 === "start" ? imgStartPoint : imgEndPoint;
3453
+ const icon = type2 === "start" ? language === "zh" ? imgStartPoint : imgStartPointEn : language === "zh" ? imgEndPoint : imgEndPointEn;
3311
3454
  const descriptionRow = !description ? "" : decodeAsterisk(description).map((item) => item.type === "normal" ? item.value : `<span class="${pointInfoBoxEmphasize$1}">${item.value}</span>`).join("");
3312
3455
  if (!description && !title)
3313
3456
  return createDom("img", {
@@ -3389,6 +3532,9 @@ const BusinessQuotingMap = defineLagecySetup(function BusinessQuotingMap2(props,
3389
3532
  mapRef,
3390
3533
  renderDescription
3391
3534
  } = props;
3535
+ const {
3536
+ language
3537
+ } = useMapSupplier();
3392
3538
  const fittableRegistryOverlay = createFittableRegisterOverlay(registerOverlay);
3393
3539
  const deferedSetFitView = pipeDefer(registerOverlay.setFitView);
3394
3540
  return () => {
@@ -3417,7 +3563,8 @@ const BusinessQuotingMap = defineLagecySetup(function BusinessQuotingMap2(props,
3417
3563
  "position": from,
3418
3564
  "title": fromPlace.displayName,
3419
3565
  "description": fromDescription,
3420
- "withArrow": true
3566
+ "withArrow": true,
3567
+ "language": language
3421
3568
  },
3422
3569
  "on": {
3423
3570
  "click": () => emit("clickStartPoint", fromPlace)
@@ -3444,7 +3591,8 @@ const BusinessQuotingMap = defineLagecySetup(function BusinessQuotingMap2(props,
3444
3591
  distance,
3445
3592
  duration
3446
3593
  }),
3447
- "withArrow": true
3594
+ "withArrow": true,
3595
+ "language": language
3448
3596
  },
3449
3597
  "on": {
3450
3598
  "click": () => emit("clickEndPoint", toPlace)
@@ -3873,8 +4021,6 @@ const useGeoLocation = (props) => {
3873
4021
  geoReady: readyRef
3874
4022
  };
3875
4023
  };
3876
- const MAX_AMAP_PAN_TO_ANIMATE_DURATION = 500;
3877
- const MIN_AMAP_PAN_TO_ANIMATE_DURATION = 100;
3878
4024
  const useHeycarAmap = () => {
3879
4025
  const amapRef = shallowRef();
3880
4026
  const amapElementRef = shallowRef();
@@ -3891,10 +4037,7 @@ const useHeycarAmap = () => {
3891
4037
  const distanceVw = apiMapDistanceVwOfPoints(value, [lng, lat]);
3892
4038
  const shouldAnimate = distanceVw < MAX_ANIMATION_DISTANCE_VW;
3893
4039
  if (shouldAnimate) {
3894
- const duration = Math.max(
3895
- MIN_AMAP_PAN_TO_ANIMATE_DURATION,
3896
- Math.floor(MAX_AMAP_PAN_TO_ANIMATE_DURATION * distanceVw / MAX_ANIMATION_DISTANCE_VW)
3897
- );
4040
+ const duration = distanceVw2animationDuration(distanceVw);
3898
4041
  amap2.panTo(value, duration);
3899
4042
  await sleep(duration);
3900
4043
  } else {
@@ -4020,6 +4163,49 @@ const useMapDrag = (props) => {
4020
4163
  const { supplier } = useMapSupplier();
4021
4164
  return supplier === "gmap" ? useGmapDrag(props) : useAmapDrag(props);
4022
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
+ };
4023
4209
  const chinaBounds = [
4024
4210
  [
4025
4211
  108.03446,
@@ -5539,12 +5725,9 @@ const useAmapPlace = (props) => {
5539
5725
  place.name = value.name;
5540
5726
  place.displayName = value.displayName;
5541
5727
  };
5542
- watch(
5543
- () => [placeKey.value],
5544
- async () => {
5545
- await readyPromise;
5728
+ const getPlaceByRegeo = ([lng, lat]) => {
5729
+ return new Promise((resolve, reject) => {
5546
5730
  const geocoder = new AMap.Geocoder({ lang: language === "en" ? "en" : "zh_cn" });
5547
- const [lng, lat] = pointRef.value;
5548
5731
  const isChina = inChina([lng, lat]);
5549
5732
  geocoder.getAddress(new AMap.LngLat(lng, lat), (status, result) => {
5550
5733
  switch (status) {
@@ -5552,30 +5735,30 @@ const useAmapPlace = (props) => {
5552
5735
  const { formattedAddress, addressComponent } = result.regeocode;
5553
5736
  const name2 = formattedAddress ? formattedAddress : emptyPlaceName;
5554
5737
  const displayName = amapPlaceName2DisplayName(name2, { isChina, ...addressComponent });
5555
- place.name = name2;
5556
- place.displayName = displayName;
5557
- place.lng = lng;
5558
- place.lat = lat;
5559
- onChange == null ? void 0 : onChange({ lng, lat, name: name2, displayName });
5738
+ resolve({ lng, lat, name: name2, displayName });
5560
5739
  return;
5561
5740
  }
5562
5741
  case "no_data": {
5563
5742
  const name2 = emptyPlaceName;
5564
5743
  const displayName = emptyPlaceName;
5565
- place.name = name2;
5566
- place.displayName = displayName;
5567
- place.lng = lng;
5568
- place.lat = lat;
5569
- onChange == null ? void 0 : onChange({ lng, lat, name: name2, displayName });
5744
+ resolve({ lng, lat, name: name2, displayName });
5570
5745
  return;
5571
5746
  }
5572
5747
  case "error":
5573
- throw result;
5748
+ reject(result);
5574
5749
  }
5575
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);
5576
5759
  }
5577
5760
  );
5578
- return { place, updatePlace, setPlace };
5761
+ return { place, updatePlace, setPlace, getPlaceByRegeo };
5579
5762
  };
5580
5763
  const useGmapPlace = (props) => {
5581
5764
  const { onChange, emptyPlaceName } = props;
@@ -5599,214 +5782,182 @@ const useGmapPlace = (props) => {
5599
5782
  place.name = value.name;
5600
5783
  place.displayName = value.displayName;
5601
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
+ };
5602
5795
  watch(
5603
5796
  () => placeKey.value,
5604
5797
  async () => {
5605
5798
  await readyPromise;
5606
- const geocoder = new google.maps.Geocoder();
5607
- const [lng, lat] = pointRef.value;
5608
- const { results } = await geocoder.geocode({ language, location: { lng, lat } });
5609
- const name2 = results[0].formatted_address ? results[0].formatted_address : emptyPlaceName;
5610
- const displayName = name2;
5611
- place.lng = lng;
5612
- place.lat = lat;
5613
- place.name = name2;
5614
- place.displayName = displayName;
5615
- onChange == null ? void 0 : onChange({ lng, lat, name: name2, displayName });
5799
+ const resultPlace = await getPlaceByRegeo(pointRef.value);
5800
+ onChange == null ? void 0 : onChange(resultPlace);
5616
5801
  }
5617
5802
  );
5618
- return { place, updatePlace, setPlace };
5803
+ return { place, updatePlace, setPlace, getPlaceByRegeo };
5619
5804
  };
5620
5805
  const useMapPlace = (props) => {
5621
5806
  const { supplier } = useMapSupplier();
5622
5807
  return supplier === "gmap" ? useGmapPlace(props) : useAmapPlace(props);
5623
5808
  };
5624
- const findAmapNearestPlace = (place, candidates) => {
5625
- let shortestDistance = Infinity;
5626
- let shortestPlace = place;
5627
- for (const candidate of candidates) {
5628
- const distance = AMap.GeometryUtil.distance(place2point(place), place2point(candidate));
5629
- if (distance >= shortestDistance)
5630
- continue;
5631
- shortestPlace = candidate;
5632
- shortestDistance = distance;
5633
- }
5634
- return { shortestPlace, shortestDistance };
5635
- };
5636
- const findGmapNearestPlace = (place, candidates) => {
5809
+ function findNearestPlace(place, candidates, distanceFn) {
5810
+ var _a;
5637
5811
  let shortestDistance = Infinity;
5638
5812
  let shortestPlace = place;
5639
5813
  for (const candidate of candidates) {
5640
- const distance = google.maps.geometry.spherical.computeDistanceBetween(place, candidate);
5814
+ const distance = (_a = distanceFn(place2point(place), place2point(candidate))) != null ? _a : Infinity;
5641
5815
  if (distance >= shortestDistance)
5642
5816
  continue;
5643
5817
  shortestPlace = candidate;
5644
5818
  shortestDistance = distance;
5645
5819
  }
5646
5820
  return { shortestPlace, shortestDistance };
5647
- };
5648
- const useAmapRecomendPlace = (props) => {
5649
- 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;
5650
5832
  const availableRef = ref(true);
5651
5833
  const placeCandidatesRef = ref([]);
5652
5834
  const zoneRef = ref();
5653
- const { idx: recomendPlaceKey, update: updateRecommendPlaceKey } = useUpdate();
5654
- const { readyPromise } = useMapSupplier();
5655
- const { place, updatePlace, setPlace } = useAmapPlace({
5835
+ const { apiMapIsPointInRing, apiMapDistance } = useMapGeometry();
5836
+ const { getPlaceByRegeo } = useAmapPlace({
5656
5837
  emptyPlaceName,
5657
- pointRef,
5658
- onChange: onChangePlace
5838
+ pointRef: ref([...defaultPoint])
5839
+ });
5840
+ const recomendPlace = reactive({
5841
+ lng: defaultPoint[0],
5842
+ lat: defaultPoint[1],
5843
+ name: "",
5844
+ displayName: ""
5659
5845
  });
5660
- const recomendPlace = reactive({ ...place });
5661
5846
  const isElectedRef = computed(() => {
5662
- const point = pointRef.value;
5847
+ const recomendPoint = place2point(recomendPlace);
5663
5848
  return placeCandidatesRef.value.some(
5664
- (candidate) => isPointEqual(place2point(candidate), point)
5849
+ (candidate) => isPointEqual(place2point(candidate), recomendPoint)
5665
5850
  );
5666
5851
  });
5667
- const updatePlaceCandidates = async (place2) => {
5852
+ const findAttachedPlace = async (place) => {
5668
5853
  var _a;
5669
5854
  const {
5670
5855
  places: inputPlaceCandidates,
5671
5856
  zone,
5672
- available
5673
- } = (_a = await getRecomendPlace({ ...place2 }, context2)) != null ? _a : {};
5857
+ available = false
5858
+ } = (_a = await getRecomendPlace({ ...place }, context2)) != null ? _a : {};
5674
5859
  const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5675
- availableRef.value = !!available;
5676
- zoneRef.value = zone;
5677
- 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
+ );
5678
5890
  return {
5679
- inputPlace: { ...place2 },
5680
- isInZone: !!zone,
5681
- place: place2
5891
+ place: { ...resultPlace },
5892
+ zone,
5893
+ available: prevState.available,
5894
+ candidates: prevState.candidates
5682
5895
  };
5683
5896
  };
5684
- const updateRecommendPlace = (place2) => {
5685
- setPlace(place2);
5686
- updateRecommendPlaceKey();
5687
- };
5688
- const setPlaceCandidatesAndZone = ({
5689
- zone,
5690
- places: inputPlaceCandidates
5691
- }) => {
5692
- const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5693
- zoneRef.value = zone ? zone : void 0;
5694
- placeCandidatesRef.value = placeCandidates != null ? placeCandidates : [];
5695
- };
5696
- watch(
5697
- () => recomendPlaceKey.value,
5698
- async () => {
5699
- var _a;
5700
- await readyPromise;
5701
- const {
5702
- places: inputPlaceCandidates,
5703
- zone,
5704
- available
5705
- } = (_a = await getRecomendPlace({ ...place }, context2)) != null ? _a : {};
5706
- const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5707
- if (!available || !placeCandidates) {
5708
- availableRef.value = !!available;
5709
- zoneRef.value = zone;
5710
- placeCandidatesRef.value = [];
5711
- Object.assign(recomendPlace, { ...place });
5712
- onChange == null ? void 0 : onChange({ place: { ...place }, inputPlace: { ...place }, isInZone: !!zone });
5713
- return;
5714
- }
5715
- const { shortestPlace, shortestDistance } = findAmapNearestPlace(place, placeCandidates);
5716
- const limit = getLimit(context2);
5717
- const resultPlace = zone || shortestDistance <= limit ? shortestPlace : place;
5718
- availableRef.value = !!available;
5719
- zoneRef.value = zone;
5720
- placeCandidatesRef.value = placeCandidates;
5721
- Object.assign(recomendPlace, { ...resultPlace });
5722
- onChange == null ? void 0 : onChange({ place: { ...resultPlace }, inputPlace: { ...place }, isInZone: !!zone });
5723
- }
5724
- );
5725
- return {
5726
- zoneRef,
5727
- recomendPlace,
5728
- placeCandidates: placeCandidatesRef,
5729
- availableRef,
5730
- isElectedRef,
5731
- updateRecommendPlace,
5732
- updatePlaceCandidates,
5733
- updatePlace,
5734
- 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 });
5735
5917
  };
5736
- };
5737
- const useGmapRecomendPlace = (props) => {
5738
- const { pointRef, getRecomendPlace, getLimit, context: context2, emptyPlaceName, onChange, onChangePlace } = props;
5739
- const availableRef = ref(true);
5740
- const placeCandidatesRef = ref([]);
5741
- const zoneRef = ref();
5742
- const { idx: recomendPlaceKey, update: updateRecommendPlaceKey } = useUpdate();
5743
- const { readyPromise } = useMapSupplier();
5744
- const { place, updatePlace, setPlace } = useGmapPlace({
5745
- emptyPlaceName,
5746
- pointRef,
5747
- onChange: onChangePlace
5748
- });
5749
- const recomendPlace = reactive({ ...place });
5750
- const isElectedRef = computed(() => {
5751
- const point = pointRef.value;
5752
- return placeCandidatesRef.value.some(
5753
- (candidate) => isPointEqual(place2point(candidate), point)
5754
- );
5755
- });
5756
- const updatePlaceCandidates = async (place2) => {
5918
+ const updatePlaceCandidates = async (place) => {
5757
5919
  var _a;
5758
5920
  const {
5759
5921
  places: inputPlaceCandidates,
5760
5922
  zone,
5761
5923
  available
5762
- } = (_a = await getRecomendPlace({ ...place2 }, context2)) != null ? _a : {};
5924
+ } = (_a = await getRecomendPlace({ ...place }, context2)) != null ? _a : {};
5925
+ const isSameZone = !!zone && isZoneEqual(zone, zoneRef.value);
5763
5926
  const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5764
5927
  availableRef.value = !!available;
5765
5928
  zoneRef.value = zone;
5766
5929
  placeCandidatesRef.value = placeCandidates != null ? placeCandidates : [];
5767
5930
  return {
5768
- inputPlace: { ...place2 },
5931
+ inputPlace: { ...place },
5769
5932
  isInZone: !!zone,
5770
- place: place2
5933
+ place,
5934
+ isSameZone
5771
5935
  };
5772
5936
  };
5773
- const updateRecommendPlace = (place2) => {
5774
- setPlace(place2);
5775
- 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
+ });
5776
5951
  };
5777
- const setPlaceCandidatesAndZone = ({ zone, places }) => {
5778
- 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;
5779
5958
  zoneRef.value = zone ? zone : void 0;
5959
+ placeCandidatesRef.value = placeCandidates != null ? placeCandidates : [];
5780
5960
  };
5781
- watch(
5782
- () => recomendPlaceKey.value,
5783
- async () => {
5784
- var _a;
5785
- await readyPromise;
5786
- const {
5787
- places: inputPlaceCandidates,
5788
- zone,
5789
- available
5790
- } = (_a = await getRecomendPlace({ ...place }, context2)) != null ? _a : {};
5791
- const placeCandidates = inputPlaceCandidates == null ? void 0 : inputPlaceCandidates.map(toPlaceType);
5792
- if (!available || !placeCandidates) {
5793
- availableRef.value = !!available;
5794
- zoneRef.value = zone;
5795
- placeCandidatesRef.value = [];
5796
- Object.assign(recomendPlace, { ...place });
5797
- onChange == null ? void 0 : onChange({ place: { ...place }, inputPlace: { ...place }, isInZone: !!zone });
5798
- return;
5799
- }
5800
- const { shortestPlace, shortestDistance } = findGmapNearestPlace(place, placeCandidates);
5801
- const limit = getLimit(context2);
5802
- const resultPlace = shortestDistance > limit ? place : shortestPlace;
5803
- availableRef.value = !!available;
5804
- zoneRef.value = zone;
5805
- placeCandidatesRef.value = placeCandidates;
5806
- Object.assign(recomendPlace, { ...resultPlace });
5807
- onChange == null ? void 0 : onChange({ place: { ...resultPlace }, inputPlace: { ...place }, isInZone: !!zone });
5808
- }
5809
- );
5810
5961
  return {
5811
5962
  zoneRef,
5812
5963
  recomendPlace,
@@ -5819,20 +5970,19 @@ const useGmapRecomendPlace = (props) => {
5819
5970
  setPlaceCandidatesAndZone
5820
5971
  };
5821
5972
  };
5822
- const useMapRecomendPlace = (props) => {
5823
- const { supplier } = useMapSupplier();
5824
- return supplier === "gmap" ? useGmapRecomendPlace(props) : useAmapRecomendPlace(props);
5825
- };
5826
5973
  const GOOGLE_MAP_ZOOM_CHANGE_DEBOUNCE_TIMEOUT = 50;
5827
5974
  const DEFAULT_ZOOM$1 = 13;
5828
5975
  const useAmapZoom = (props) => {
5829
5976
  var _a, _b, _c;
5830
5977
  const { onChange, mapRef, defaultValue } = props;
5831
5978
  const zoomRef = ref((_c = (_b = (_a = mapRef.value) == null ? void 0 : _a.getZoom()) != null ? _b : defaultValue) != null ? _c : DEFAULT_ZOOM$1);
5832
- const setZoom = (v) => {
5833
- var _a2;
5979
+ const setZoom = (v, immediate = false) => {
5980
+ var _a2, _b2;
5981
+ const duration = deltaZoom2animationDuration(v - zoomRef.value);
5834
5982
  zoomRef.value = v;
5835
- (_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);
5836
5986
  };
5837
5987
  const handleZoomEnd = (_, { target }) => {
5838
5988
  const zoom = target.getZoom();
@@ -6140,10 +6290,9 @@ const ConditionalFittablePassengerCircle = defineSetup(function ConditionalFitta
6140
6290
  "size": "small",
6141
6291
  "registerOverlay": registerOverlay
6142
6292
  }
6143
- }), h(KeyedFitView, {
6293
+ }), h(FitViewOnce, {
6144
6294
  "attrs": {
6145
- "registerOverlay": registerOverlay,
6146
- "fitViewKey": JSON.stringify(position)
6295
+ "registerOverlay": registerOverlay
6147
6296
  }
6148
6297
  })]);
6149
6298
  };
@@ -6565,7 +6714,6 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6565
6714
  name: geoLoadingTitle,
6566
6715
  displayName: geoLoadingTitle
6567
6716
  });
6568
- const centerPoint = computed(() => [centerPlace.lng, centerPlace.lat]);
6569
6717
  const centerSource = {
6570
6718
  source: "geo"
6571
6719
  };
@@ -6576,25 +6724,19 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6576
6724
  const setCenterPlaceByUserSpecified = async (input) => {
6577
6725
  centerSource.source = "api";
6578
6726
  const place = toPlaceType(input);
6579
- centerPlace.lng = place.lng;
6580
- centerPlace.lat = place.lat;
6581
- centerPlace.name = place.name;
6582
- centerPlace.displayName = place.displayName;
6583
- emit("changePlace", {
6584
- ...place
6585
- });
6727
+ Object.assign(centerPlace, place);
6586
6728
  updateRecommendPlace(place);
6587
6729
  };
6588
6730
  const setCenterPlaceByUserSpecifiedInZone = ({
6589
- place,
6731
+ place: input,
6590
6732
  recommends
6591
6733
  }) => {
6592
- centerPlace.lng = place.lng;
6593
- centerPlace.lat = place.lat;
6594
- centerPlace.name = place.name;
6595
- centerPlace.displayName = place.displayName;
6734
+ const place = toPlaceType(input);
6735
+ assertZone(recommends.zone);
6736
+ Object.assign(centerPlace, place);
6596
6737
  setPlaceCandidatesAndZone(recommends);
6597
- setZoom(ZONE_ZOOM);
6738
+ if (!isZoneEqual(recommends.zone, zoneRef.value))
6739
+ setZoom(ZONE_ZOOM);
6598
6740
  emit("changePlace", {
6599
6741
  ...place
6600
6742
  });
@@ -6602,12 +6744,7 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6602
6744
  const panToCenterByPlace = async (place) => {
6603
6745
  centerSource.source = "api";
6604
6746
  await panTo(place2point(place));
6605
- centerPlace.lng = place.lng;
6606
- centerPlace.lat = place.lat;
6607
- centerPlace.name = place.name;
6608
- centerPlace.displayName = place.displayName;
6609
- if (zoneRef.value)
6610
- setZoom(ZONE_ZOOM);
6747
+ Object.assign(centerPlace, place);
6611
6748
  emit("changePlace", {
6612
6749
  ...place
6613
6750
  });
@@ -6618,7 +6755,8 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6618
6755
  inputPlace: {
6619
6756
  ...place
6620
6757
  },
6621
- isInZone: !!zoneRef.value
6758
+ isInZone: !!zoneRef.value,
6759
+ isSameZone: !!zoneRef.value
6622
6760
  });
6623
6761
  };
6624
6762
  const defaultCenterPlacePromise = new Promise((resolve) => {
@@ -6636,18 +6774,21 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6636
6774
  } = useGeoLocation({
6637
6775
  geoDefaultPosition,
6638
6776
  onLoad: async (value) => {
6777
+ const [lng, lat] = value.position;
6639
6778
  await readyPromise;
6640
6779
  centerSource.source = "geo";
6780
+ centerPlace.lng = lng;
6781
+ centerPlace.lat = lat;
6641
6782
  updatePlace(value.position);
6642
6783
  emit("loadGeoLocation", value);
6643
6784
  },
6644
6785
  onLoadDefault: async (value) => {
6645
6786
  await readyPromise;
6646
- const place = await defaultCenterPlacePromise;
6787
+ const inputPlace = await defaultCenterPlacePromise;
6647
6788
  centerSource.source = "geo";
6648
6789
  emit("loadDefaultGeoLocation", value);
6649
- if (place) {
6650
- await setCenterPlaceByUserSpecified(place);
6790
+ if (inputPlace) {
6791
+ await setCenterPlaceByUserSpecified(inputPlace);
6651
6792
  } else {
6652
6793
  updatePlace(value.position);
6653
6794
  }
@@ -6682,7 +6823,7 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6682
6823
  availableRef,
6683
6824
  isElectedRef
6684
6825
  } = useMapRecomendPlace({
6685
- pointRef: centerPoint,
6826
+ defaultPoint: place2point(centerPlace),
6686
6827
  emptyPlaceName: DEFAULT_PLACE_NAME,
6687
6828
  context: centerSource,
6688
6829
  getRecomendPlace: pipedGetRecomendPlace,
@@ -6699,29 +6840,27 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6699
6840
  throw new Error(`MyError: should not call getLimit on source: ${source}`);
6700
6841
  }
6701
6842
  },
6702
- onChangePlace: (place) => {
6703
- if (centerSource.source !== "recomend") {
6704
- updateRecommendPlace(place);
6705
- }
6706
- emit("changePlace", place);
6707
- },
6843
+ onChangePlace: (place) => emit("changePlace", place),
6708
6844
  onChange: async ({
6709
6845
  place,
6710
6846
  inputPlace,
6711
- isInZone
6847
+ isInZone,
6848
+ isSameZone
6712
6849
  }) => {
6850
+ debugger;
6713
6851
  centerSource.source = "recomend";
6714
6852
  if (isPlaceEqual(place, centerPlace))
6715
6853
  panTo(place2point(place));
6716
6854
  Object.assign(centerPlace, {
6717
6855
  ...place
6718
6856
  });
6719
- if (isInZone)
6857
+ if (isInZone && !isSameZone)
6720
6858
  setZoom(ZONE_ZOOM);
6721
6859
  emit("changeRecomandPlace", {
6722
6860
  place,
6723
6861
  inputPlace,
6724
- isInZone
6862
+ isInZone,
6863
+ isSameZone
6725
6864
  });
6726
6865
  }
6727
6866
  });
@@ -6744,7 +6883,7 @@ const BusinessRecomendPlaceMap = defineLagecySetup(function BusinessRecomendPlac
6744
6883
  const description = !availableRef.value ? void 0 : isElectedRef.value ? recomendDescription : void 0;
6745
6884
  return h(HeycarMap, {
6746
6885
  "attrs": {
6747
- "center": centerPoint.value,
6886
+ "center": place2point(centerPlace),
6748
6887
  "zoom": zoomRef.value,
6749
6888
  "touchZoomCenter": true,
6750
6889
  "mapRef": setMap,
@@ -6820,7 +6959,6 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6820
6959
  name: defaultPlace.name,
6821
6960
  displayName: defaultPlace.displayName
6822
6961
  });
6823
- const centerPoint = computed(() => [centerPlace.lng, centerPlace.lat]);
6824
6962
  const centerSource = {
6825
6963
  source: "default"
6826
6964
  };
@@ -6831,24 +6969,18 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6831
6969
  const setCenterPlaceByUserSpecified = async (input) => {
6832
6970
  centerSource.source = "api";
6833
6971
  const place = toPlaceType(input);
6834
- centerPlace.lng = place.lng;
6835
- centerPlace.lat = place.lat;
6836
- centerPlace.name = place.name;
6837
- centerPlace.displayName = place.displayName;
6838
- emit("changePlace", {
6839
- ...place
6840
- });
6972
+ Object.assign(centerPlace, place);
6841
6973
  updateRecommendPlace(place);
6842
6974
  };
6843
6975
  const setCenterPlaceByUserSpecifiedInZone = ({
6844
- place,
6976
+ place: input,
6845
6977
  recommends
6846
6978
  }) => {
6847
- centerPlace.lng = place.lng;
6848
- centerPlace.lat = place.lat;
6849
- centerPlace.name = place.name;
6850
- centerPlace.displayName = place.displayName;
6851
- 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);
6852
6984
  setPlaceCandidatesAndZone(recommends);
6853
6985
  emit("changePlace", {
6854
6986
  ...place
@@ -6861,8 +6993,6 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6861
6993
  centerPlace.lat = place.lat;
6862
6994
  centerPlace.name = place.name;
6863
6995
  centerPlace.displayName = place.displayName;
6864
- if (zoneRef.value)
6865
- setZoom(ZONE_ZOOM);
6866
6996
  emit("changePlace", {
6867
6997
  ...place
6868
6998
  });
@@ -6873,7 +7003,8 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6873
7003
  inputPlace: {
6874
7004
  ...place
6875
7005
  },
6876
- isInZone: !!zoneRef.value
7006
+ isInZone: !!zoneRef.value,
7007
+ isSameZone: !!zoneRef.value
6877
7008
  });
6878
7009
  };
6879
7010
  const {
@@ -6916,7 +7047,7 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6916
7047
  availableRef,
6917
7048
  isElectedRef
6918
7049
  } = useMapRecomendPlace({
6919
- pointRef: centerPoint,
7050
+ defaultPoint: place2point(centerPlace),
6920
7051
  emptyPlaceName: DEFAULT_PLACE_NAME,
6921
7052
  context: centerSource,
6922
7053
  getRecomendPlace: pipedGetRecomendPlace,
@@ -6933,16 +7064,12 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6933
7064
  throw new Error(`MyError: should not call getLimit on source: ${source}`);
6934
7065
  }
6935
7066
  },
6936
- onChangePlace: (place) => {
6937
- if (centerSource.source !== "recomend") {
6938
- updateRecommendPlace(place);
6939
- }
6940
- emit("changePlace", place);
6941
- },
7067
+ onChangePlace: (place) => emit("changePlace", place),
6942
7068
  onChange: async ({
6943
7069
  place,
6944
7070
  inputPlace,
6945
- isInZone
7071
+ isInZone,
7072
+ isSameZone
6946
7073
  }) => {
6947
7074
  centerSource.source = "recomend";
6948
7075
  if (isPlaceEqual(place, centerPlace))
@@ -6950,12 +7077,13 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6950
7077
  Object.assign(centerPlace, {
6951
7078
  ...place
6952
7079
  });
6953
- if (isInZone)
7080
+ if (isInZone && !isSameZone)
6954
7081
  setZoom(ZONE_ZOOM);
6955
7082
  emit("changeRecomandPlace", {
6956
7083
  place,
6957
7084
  inputPlace,
6958
- isInZone
7085
+ isInZone,
7086
+ isSameZone
6959
7087
  });
6960
7088
  }
6961
7089
  });
@@ -6981,7 +7109,7 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
6981
7109
  const description = !availableRef.value ? void 0 : isElectedRef.value ? recomendDescription : void 0;
6982
7110
  return h(HeycarMap, {
6983
7111
  "attrs": {
6984
- "center": centerPoint.value,
7112
+ "center": place2point(centerPlace),
6985
7113
  "zoom": zoomRef.value,
6986
7114
  "touchZoomCenter": true,
6987
7115
  "mapRef": setMap,
@@ -7016,38 +7144,6 @@ const BusinessReselectPlaceMap = defineLagecySetup(function BusinessReselectPlac
7016
7144
  })]);
7017
7145
  };
7018
7146
  }).props(["loading", "fallback", "log", "defaultPlace", "unavailableTitle", "recomendDescription", "getRecomendPlace", "mapContext"]);
7019
- const useAmapGeometry = () => {
7020
- const payload = useMapSupplier();
7021
- const apiMapDistance = (from, to) => {
7022
- if (payload.status !== Status.SUCCESS)
7023
- return void 0;
7024
- return AMap.GeometryUtil.distance(from, to);
7025
- };
7026
- const apiMapDistanceToLine = (from, line) => {
7027
- if (payload.status !== Status.SUCCESS)
7028
- return void 0;
7029
- return AMap.GeometryUtil.distanceToLine(from, line);
7030
- };
7031
- return { apiMapDistance, apiMapDistanceToLine };
7032
- };
7033
- const useGmapGeometry = () => {
7034
- const payload = useMapSupplier();
7035
- const apiMapDistance = (from, to) => {
7036
- if (payload.status !== Status.SUCCESS)
7037
- return void 0;
7038
- return google.maps.geometry.spherical.computeDistanceBetween(vec2lnglat(from), vec2lnglat(to));
7039
- };
7040
- const apiMapDistanceToLine = (from, line) => {
7041
- if (payload.status !== Status.SUCCESS)
7042
- return void 0;
7043
- return 0;
7044
- };
7045
- return { apiMapDistance, apiMapDistanceToLine };
7046
- };
7047
- const useMapGeometry = () => {
7048
- const { supplier } = useMapSupplier();
7049
- return supplier === "gmap" ? useGmapGeometry() : useAmapGeometry();
7050
- };
7051
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=";
7052
7148
  const TaxiCar_css_ts_vanilla = "";
7053
7149
  var carIcon = "_65j3sr1";
@@ -7392,6 +7488,7 @@ const WaveCircle = defineSetup(function WaveCircle2(props) {
7392
7488
  const PASSENGER_DISTANCE_MAX = 2e3;
7393
7489
  const PASSENGER_DISTANCE_MIN = 10;
7394
7490
  const CAR_DISTANCE_MIN = 100;
7491
+ const AUTO_FIT_VIEW_INTERVAL = 15e3;
7395
7492
  const carDurationWithinMinDistance = (distance) => Math.floor(distance / 5);
7396
7493
  const SectionDispatching = defineSetup(function SectionDispatching2(props) {
7397
7494
  return () => {
@@ -7400,12 +7497,16 @@ const SectionDispatching = defineSetup(function SectionDispatching2(props) {
7400
7497
  title,
7401
7498
  registerOverlay
7402
7499
  } = props;
7500
+ const {
7501
+ language
7502
+ } = useMapSupplier();
7403
7503
  const from = place2point(fromPlace);
7404
7504
  return h("div", [h(StartEndPoint, {
7405
7505
  "attrs": {
7406
7506
  "type": "start",
7407
7507
  "position": from,
7408
7508
  "title": title,
7509
+ "language": language,
7409
7510
  "registerOverlay": registerOverlay
7410
7511
  }
7411
7512
  }), h(WaveCircle, {
@@ -7422,10 +7523,18 @@ const SectionDispatching = defineSetup(function SectionDispatching2(props) {
7422
7523
  "attrs": {
7423
7524
  "registerOverlay": registerOverlay
7424
7525
  }
7526
+ }), h(InterruptableIntervalFitView, {
7527
+ "attrs": {
7528
+ "interval": AUTO_FIT_VIEW_INTERVAL,
7529
+ "registerOverlay": registerOverlay
7530
+ }
7425
7531
  })]);
7426
7532
  };
7427
7533
  });
7428
7534
  const SectionConfirmed = defineSetup(function SectionConfirmed2(props) {
7535
+ const {
7536
+ language
7537
+ } = useMapSupplier();
7429
7538
  const {
7430
7539
  apiMapDistance
7431
7540
  } = useMapGeometry();
@@ -7463,13 +7572,15 @@ const SectionConfirmed = defineSetup(function SectionConfirmed2(props) {
7463
7572
  "attrs": {
7464
7573
  "type": "start",
7465
7574
  "registerOverlay": registerOverlay,
7466
- "position": from
7575
+ "position": from,
7576
+ "language": language
7467
7577
  }
7468
7578
  }), h(StartEndPoint, {
7469
7579
  "attrs": {
7470
7580
  "type": "end",
7471
7581
  "registerOverlay": registerOverlay,
7472
- "position": to
7582
+ "position": to,
7583
+ "language": language
7473
7584
  }
7474
7585
  }), h(PlaceCircle, {
7475
7586
  "attrs": {
@@ -7487,10 +7598,22 @@ const SectionConfirmed = defineSetup(function SectionConfirmed2(props) {
7487
7598
  "attrs": {
7488
7599
  "registerOverlay": registerOverlay
7489
7600
  }
7601
+ }), h(InterruptableIntervalFitView, {
7602
+ "attrs": {
7603
+ "interval": AUTO_FIT_VIEW_INTERVAL,
7604
+ "registerOverlay": registerOverlay
7605
+ }
7490
7606
  })]);
7491
7607
  };
7492
7608
  });
7493
7609
  const SectionDriverStartService = defineSetup(function SectionDriverStartService2(props) {
7610
+ const {
7611
+ registerOverlay
7612
+ } = props;
7613
+ const fittableRegistryOverlay = createFittableRegisterOverlay(registerOverlay);
7614
+ const {
7615
+ language
7616
+ } = useMapSupplier();
7494
7617
  const {
7495
7618
  apiMapDistance
7496
7619
  } = useMapGeometry();
@@ -7501,8 +7624,7 @@ const SectionDriverStartService = defineSetup(function SectionDriverStartService
7501
7624
  carAngle,
7502
7625
  passengerPosition,
7503
7626
  passengerAngle,
7504
- renderTitle,
7505
- registerOverlay
7627
+ renderTitle
7506
7628
  } = props;
7507
7629
  const from = place2point(fromPlace);
7508
7630
  const passengerDistance = passengerPosition ? apiMapDistance(passengerPosition, from) : void 0;
@@ -7518,7 +7640,8 @@ const SectionDriverStartService = defineSetup(function SectionDriverStartService
7518
7640
  "attrs": {
7519
7641
  "type": "start",
7520
7642
  "position": from,
7521
- "registerOverlay": registerOverlay
7643
+ "registerOverlay": registerOverlay,
7644
+ "language": language
7522
7645
  }
7523
7646
  }), h(PlaceCircle, {
7524
7647
  "attrs": {
@@ -7536,7 +7659,7 @@ const SectionDriverStartService = defineSetup(function SectionDriverStartService
7536
7659
  distance,
7537
7660
  duration
7538
7661
  }) => {
7539
- var _a, _b;
7662
+ var _a;
7540
7663
  spaceLog("angleDifference", "carPosition, routeAngle, driverAngle = ", carPosition, angle, carAngle);
7541
7664
  return [h(DrivingLine, {
7542
7665
  "attrs": {
@@ -7550,12 +7673,7 @@ const SectionDriverStartService = defineSetup(function SectionDriverStartService
7550
7673
  distance,
7551
7674
  duration
7552
7675
  }),
7553
- "registerOverlay": registerOverlay
7554
- }
7555
- }), h(KeyedFitView, {
7556
- "attrs": {
7557
- "registerOverlay": registerOverlay,
7558
- "fitViewKey": JSON.stringify((_b = path[0]) != null ? _b : carPosition)
7676
+ "registerOverlay": fittableRegistryOverlay
7559
7677
  }
7560
7678
  })];
7561
7679
  }
@@ -7568,12 +7686,7 @@ const SectionDriverStartService = defineSetup(function SectionDriverStartService
7568
7686
  distance: carDistance,
7569
7687
  duration: carDurationWithinMinDistance(carDistance)
7570
7688
  }),
7571
- "registerOverlay": registerOverlay
7572
- }
7573
- }), h(KeyedFitView, {
7574
- "attrs": {
7575
- "registerOverlay": registerOverlay,
7576
- "fitViewKey": JSON.stringify(carPosition)
7689
+ "registerOverlay": fittableRegistryOverlay
7577
7690
  }
7578
7691
  })], !!passengerPosition && passengerDistance && passengerDistance < PASSENGER_DISTANCE_MAX && passengerDistance > PASSENGER_DISTANCE_MIN && h(WalkingRoute, {
7579
7692
  "attrs": {
@@ -7591,6 +7704,11 @@ const SectionDriverStartService = defineSetup(function SectionDriverStartService
7591
7704
  "attrs": {
7592
7705
  "registerOverlay": registerOverlay
7593
7706
  }
7707
+ }), h(InterruptableIntervalFitView, {
7708
+ "attrs": {
7709
+ "interval": AUTO_FIT_VIEW_INTERVAL,
7710
+ "registerOverlay": registerOverlay
7711
+ }
7594
7712
  })]);
7595
7713
  };
7596
7714
  });
@@ -7598,6 +7716,9 @@ const SectionBookDispatched = defineSetup(function SectionBookDispatched2(props)
7598
7716
  const {
7599
7717
  apiMapDistance
7600
7718
  } = useMapGeometry();
7719
+ const {
7720
+ language
7721
+ } = useMapSupplier();
7601
7722
  return () => {
7602
7723
  const {
7603
7724
  from: fromPlace,
@@ -7644,13 +7765,15 @@ const SectionBookDispatched = defineSetup(function SectionBookDispatched2(props)
7644
7765
  "attrs": {
7645
7766
  "type": "start",
7646
7767
  "registerOverlay": registerOverlay,
7647
- "position": from
7768
+ "position": from,
7769
+ "language": language
7648
7770
  }
7649
7771
  }), h(StartEndPoint, {
7650
7772
  "attrs": {
7651
7773
  "type": "end",
7652
7774
  "registerOverlay": registerOverlay,
7653
- "position": to
7775
+ "position": to,
7776
+ "language": language
7654
7777
  }
7655
7778
  }), h(PlaceCircle, {
7656
7779
  "attrs": {
@@ -7668,10 +7791,22 @@ const SectionBookDispatched = defineSetup(function SectionBookDispatched2(props)
7668
7791
  "attrs": {
7669
7792
  "registerOverlay": registerOverlay
7670
7793
  }
7794
+ }), h(InterruptableIntervalFitView, {
7795
+ "attrs": {
7796
+ "interval": AUTO_FIT_VIEW_INTERVAL,
7797
+ "registerOverlay": registerOverlay
7798
+ }
7671
7799
  })]);
7672
7800
  };
7673
7801
  });
7674
7802
  const SectionDriverArrived = defineSetup(function SectionDriverArrived2(props) {
7803
+ const {
7804
+ registerOverlay
7805
+ } = props;
7806
+ const fittableRegistryOverlay = createFittableRegisterOverlay(registerOverlay);
7807
+ const {
7808
+ language
7809
+ } = useMapSupplier();
7675
7810
  const {
7676
7811
  apiMapDistance
7677
7812
  } = useMapGeometry();
@@ -7682,8 +7817,7 @@ const SectionDriverArrived = defineSetup(function SectionDriverArrived2(props) {
7682
7817
  carAngle,
7683
7818
  passengerPosition,
7684
7819
  passengerAngle,
7685
- title,
7686
- registerOverlay
7820
+ title
7687
7821
  } = props;
7688
7822
  const from = place2point(fromPlace);
7689
7823
  const passengerDistance = passengerPosition ? apiMapDistance(passengerPosition, from) : void 0;
@@ -7711,18 +7845,14 @@ const SectionDriverArrived = defineSetup(function SectionDriverArrived2(props) {
7711
7845
  "position": carPosition,
7712
7846
  "angle": carAngle,
7713
7847
  "title": title,
7714
- "registerOverlay": registerOverlay
7715
- }
7716
- }), h(KeyedFitView, {
7717
- "attrs": {
7718
- "registerOverlay": registerOverlay,
7719
- "fitViewKey": JSON.stringify(carPosition)
7848
+ "registerOverlay": fittableRegistryOverlay
7720
7849
  }
7721
7850
  })], h(StartEndPoint, {
7722
7851
  "attrs": {
7723
7852
  "type": "start",
7724
7853
  "position": from,
7725
- "registerOverlay": registerOverlay
7854
+ "registerOverlay": registerOverlay,
7855
+ "language": language
7726
7856
  }
7727
7857
  }), h(PlaceCircle, {
7728
7858
  "attrs": {
@@ -7734,19 +7864,30 @@ const SectionDriverArrived = defineSetup(function SectionDriverArrived2(props) {
7734
7864
  "attrs": {
7735
7865
  "registerOverlay": registerOverlay
7736
7866
  }
7867
+ }), h(InterruptableIntervalFitView, {
7868
+ "attrs": {
7869
+ "interval": AUTO_FIT_VIEW_INTERVAL,
7870
+ "registerOverlay": registerOverlay
7871
+ }
7737
7872
  })]);
7738
7873
  };
7739
7874
  });
7740
7875
  const SectionInService = defineSetup(function SectionInService2(props) {
7876
+ const {
7877
+ registerOverlay
7878
+ } = props;
7879
+ const fittableRegistryOverlay = createFittableRegisterOverlay(registerOverlay);
7741
7880
  return () => {
7742
7881
  const {
7743
7882
  to: toPlace,
7744
7883
  carPosition,
7745
7884
  carAngle,
7746
- renderTitle,
7747
- registerOverlay
7885
+ renderTitle
7748
7886
  } = props;
7749
7887
  const to = place2point(toPlace);
7888
+ const {
7889
+ language
7890
+ } = useMapSupplier();
7750
7891
  const {
7751
7892
  apiMapDistance
7752
7893
  } = useMapGeometry();
@@ -7761,7 +7902,7 @@ const SectionInService = defineSetup(function SectionInService2(props) {
7761
7902
  distance,
7762
7903
  duration
7763
7904
  }) => {
7764
- var _a, _b;
7905
+ var _a;
7765
7906
  spaceLog("angleDifference", "carPosition, routeAngle, driverAngle = ", carPosition, angle, carAngle);
7766
7907
  return [h(DrivingLine, {
7767
7908
  "attrs": {
@@ -7775,12 +7916,7 @@ const SectionInService = defineSetup(function SectionInService2(props) {
7775
7916
  distance,
7776
7917
  duration
7777
7918
  }),
7778
- "registerOverlay": registerOverlay
7779
- }
7780
- }), h(KeyedFitView, {
7781
- "attrs": {
7782
- "registerOverlay": registerOverlay,
7783
- "fitViewKey": JSON.stringify((_b = path[0]) != null ? _b : carPosition)
7919
+ "registerOverlay": fittableRegistryOverlay
7784
7920
  }
7785
7921
  })];
7786
7922
  }
@@ -7793,18 +7929,14 @@ const SectionInService = defineSetup(function SectionInService2(props) {
7793
7929
  distance: carDistance,
7794
7930
  duration: carDurationWithinMinDistance(carDistance)
7795
7931
  }),
7796
- "registerOverlay": registerOverlay
7797
- }
7798
- }), h(KeyedFitView, {
7799
- "attrs": {
7800
- "registerOverlay": registerOverlay,
7801
- "fitViewKey": JSON.stringify(carPosition)
7932
+ "registerOverlay": fittableRegistryOverlay
7802
7933
  }
7803
7934
  })], h(StartEndPoint, {
7804
7935
  "attrs": {
7805
7936
  "type": "end",
7806
7937
  "position": to,
7807
- "registerOverlay": registerOverlay
7938
+ "registerOverlay": registerOverlay,
7939
+ "language": language
7808
7940
  }
7809
7941
  }), h(PlaceCircle, {
7810
7942
  "attrs": {
@@ -7816,10 +7948,18 @@ const SectionInService = defineSetup(function SectionInService2(props) {
7816
7948
  "attrs": {
7817
7949
  "registerOverlay": registerOverlay
7818
7950
  }
7951
+ }), h(InterruptableIntervalFitView, {
7952
+ "attrs": {
7953
+ "interval": AUTO_FIT_VIEW_INTERVAL,
7954
+ "registerOverlay": registerOverlay
7955
+ }
7819
7956
  })]);
7820
7957
  };
7821
7958
  });
7822
7959
  const SectionCanceled = defineSetup(function SectionCanceled2(props) {
7960
+ const {
7961
+ language
7962
+ } = useMapSupplier();
7823
7963
  return () => {
7824
7964
  const {
7825
7965
  from: fromPlace,
@@ -7832,13 +7972,15 @@ const SectionCanceled = defineSetup(function SectionCanceled2(props) {
7832
7972
  "attrs": {
7833
7973
  "type": "start",
7834
7974
  "position": from,
7835
- "registerOverlay": registerOverlay
7975
+ "registerOverlay": registerOverlay,
7976
+ "language": language
7836
7977
  }
7837
7978
  }), h(StartEndPoint, {
7838
7979
  "attrs": {
7839
7980
  "type": "end",
7840
7981
  "position": to,
7841
- "registerOverlay": registerOverlay
7982
+ "registerOverlay": registerOverlay,
7983
+ "language": language
7842
7984
  }
7843
7985
  }), h(PlaceCircle, {
7844
7986
  "attrs": {
@@ -7856,10 +7998,18 @@ const SectionCanceled = defineSetup(function SectionCanceled2(props) {
7856
7998
  "attrs": {
7857
7999
  "registerOverlay": registerOverlay
7858
8000
  }
8001
+ }), h(InterruptableIntervalFitView, {
8002
+ "attrs": {
8003
+ "interval": AUTO_FIT_VIEW_INTERVAL,
8004
+ "registerOverlay": registerOverlay
8005
+ }
7859
8006
  })]);
7860
8007
  };
7861
8008
  });
7862
8009
  const SectionEndService = defineSetup(function SectionEndService2(props) {
8010
+ const {
8011
+ language
8012
+ } = useMapSupplier();
7863
8013
  return () => {
7864
8014
  const {
7865
8015
  from: fromPlace,
@@ -7885,13 +8035,15 @@ const SectionEndService = defineSetup(function SectionEndService2(props) {
7885
8035
  "attrs": {
7886
8036
  "type": "start",
7887
8037
  "position": from,
7888
- "registerOverlay": registerOverlay
8038
+ "registerOverlay": registerOverlay,
8039
+ "language": language
7889
8040
  }
7890
8041
  }), h(StartEndPoint, {
7891
8042
  "attrs": {
7892
8043
  "type": "end",
7893
8044
  "position": to,
7894
- "registerOverlay": registerOverlay
8045
+ "registerOverlay": registerOverlay,
8046
+ "language": language
7895
8047
  }
7896
8048
  }), h(PlaceCircle, {
7897
8049
  "attrs": {
@@ -7909,6 +8061,11 @@ const SectionEndService = defineSetup(function SectionEndService2(props) {
7909
8061
  "attrs": {
7910
8062
  "registerOverlay": registerOverlay
7911
8063
  }
8064
+ }), h(InterruptableIntervalFitView, {
8065
+ "attrs": {
8066
+ "interval": AUTO_FIT_VIEW_INTERVAL,
8067
+ "registerOverlay": registerOverlay
8068
+ }
7912
8069
  })]);
7913
8070
  };
7914
8071
  });