mapboxgl-tools 2.2.12 → 2.2.14

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.css CHANGED
@@ -1 +1 @@
1
- .wbk-contextmenus{pointer-events:auto;box-shadow:0 0 3px 1px #8e8e8e;border-radius:5px}.wbk-contextmenus-item{padding:3px 10px;cursor:pointer;transition:all ease .3s;color:#666;fill:#666}.wbk-contextmenus-item:hover .wbk-contextmenus-submenu{display:block!important}.wbk-contextmenus-item:hover{background:#c9e0e0a8;fill:#1890ff}.wbk-contextmenus-item:hover>.wbk-menu-item{color:#1890ff}.wbk-drop-other-menu .ant-dropdown-menu{box-shadow:0 2px 8px #00000029;transform:translate(calc(100% + 10px)) translateY(-39px)}.aside-content{box-shadow:0 0 4px 1px #8e8e8e}.aside-hidden{transform:scale(0) translateY(-50%) translate(50%);transform-origin:right top}.btn-hidden{transform:scale(0) translate(50%) translateY(-50%);transform-origin:right top;opacity:0}.aside-visible{transform:scale(1) translateY(0) translate(0);opacity:1}.wbiokr-geoserver-modal{background:rgba(0,0,0,0);animation:opactiy-in .3s ease 1 forwards}.wbiokr-geoserver-modal>.wbiokr-geoserver-modal-wrappper{transform:scale(0);animation:scale-in .4s ease 1 forwards;width:700px}@-moz-keyframes opactiy-in{0%{background:rgba(0,0,0,0)}to{background:rgba(0,0,0,.5)}}@-webkit-keyframes opactiy-in{0%{background:rgba(0,0,0,0)}to{background:rgba(0,0,0,.5)}}@-o-keyframes opactiy-in{0%{background:rgba(0,0,0,0)}to{background:rgba(0,0,0,.5)}}@keyframes opactiy-in{0%{background:rgba(0,0,0,0)}to{background:rgba(0,0,0,.5)}}@-moz-keyframes scale-in{0%{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes scale-in{0%{transform:scale(0)}to{transform:scale(1)}}@-o-keyframes scale-in{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes scale-in{0%{transform:scale(0)}to{transform:scale(1)}}.wbiokr-com-checkbox.wbiokr-com-checked .wbiokr-com-checkbox-content{margin-bottom:1px}.wbiokr-com-checkbox .wbiokr-com-checkbox-content.w-5.h-5{width:7px;height:7px}[class^=wbiokr],[class^=wbiokr] *{box-sizing:border-box}.wbiokr-ctrl-main{transition:all ease .4s;transform:scale(0);opacity:0;background-color:#fff;box-shadow:0 0 3px 1px #8e8e8e;border-radius:4px;overflow:hidden;padding:0 10px}.wbiokr-ctrl-entry{display:flex!important;align-items:center;justify-content:center}.wbiokr-ctrl-entry path{transition:all ease-in .5s}.wbiokr-ctrl-active .wbiokr-ctrl-main{transform:none;opacity:1}.wbiokr-ctrl-active .wbiokr-ctrl-entry path{fill:#189fff}.wbiokr-ctrl-close{cursor:pointer;background:rgba(241,37,37,.91)!important;color:#fff;font-size:16px}.mapboxgl-ctrl-top-left .wbiokr-ctrl-absolute{position:absolute!important;left:33px;top:0;transform-origin:left top}.mapboxgl-ctrl-bottom-left .wbiokr-ctrl-absolute{position:absolute!important;left:33px;bottom:0;transform-origin:left bottom}.mapboxgl-ctrl-top-right .wbiokr-ctrl-absolute{position:absolute!important;right:33px;top:0;transform-origin:right top}.mapboxgl-ctrl-bottom-right .wbiokr-ctrl-absolute{position:absolute!important;right:33px;bottom:0;transform-origin:right bottom}.wbiokr-control-measureDistance-result,.wbiokr-control-measureArea-result{padding:1px 5px;background:#ffffffe8;border-radius:5px;box-shadow:0 0 4px 1px #999}.wbiokr-control-pick .wbiokr-control-pick-main{min-width:115px;white-space:nowrap}.mapboxgl-wbkrect-control .mapboxgl-wbkrect-control-entry{transition:all ease .3s}.mapboxgl-wbkrect-control .mapboxgl-wbkrect-control-entry.wbk-show path{fill:#189fff}.wbiokr-control-mouseRect-result{padding:1px 5px;background:#ffffffe8;border-radius:5px}.wbiokr-control-positionControl-main textarea{width:100%;border:1px solid #eee}.wbiokr-control-positionControl-main textarea:hover,.wbiokr-control-positionControl-main textarea:focus,.wbiokr-control-positionControl-main textarea:focus-visible{border:1px solid #189fff;outline:none}.wbiokr-control-positionControl-main textarea:focus{box-shadow:0 0 3px #189fff}.wbiokr-control-positionControl-main ul{max-height:200px}.wbiokr-control-positionControl-main ul li:hover .wbiokr-position-loc{color:#189fff}.wbiokr-control-positionControl-main .wbiokr-position-tag{color:#389e0d;height:24px;min-width:30px;background:#e6f7ff;border:1px solid #b7eb8f;border-radius:3px;padding:0 2px}.wbiokr-control-positionControl-main .wbokr-position-selected .wbiokr-position-tag{color:#096dd9;border-color:#91d5ff}.wbiokr-control-positionControl-main .wbokr-position-selected .wbiokr-position-loc{color:#189fff}.wbiokr-control-positionControl-city-panel{position:absolute;background:#fff;border-radius:6px;box-shadow:0 0 3px 1px #8e8e8e;z-index:100;display:flex;flex-direction:column;overflow:hidden;top:0;height:220px}.wbiokr-control-positionControl-city-panel .city-panel-close{position:absolute;top:6px;right:8px;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#999;cursor:pointer;z-index:10;border-radius:50%;transition:all .2s}.wbiokr-control-positionControl-city-panel .city-panel-close:hover{background:#f5f5f5;color:#333}.wbiokr-control-positionControl-city-panel .city-panel-title{padding:8px 10px;font-size:12px;font-weight:600;border-bottom:1px solid #eee;background:#fafafa;color:#333;text-align:left}.wbiokr-control-positionControl-city-panel .city-list-container{flex:1;overflow-y:auto;padding:3px 0}.wbiokr-control-positionControl-city-panel .city-list-container::-webkit-scrollbar{width:4px}.wbiokr-control-positionControl-city-panel .city-list-container::-webkit-scrollbar-thumb{background:#ddd;border-radius:2px}.wbiokr-control-positionControl-city-panel .city-list-container::-webkit-scrollbar-thumb:hover{background:#bbb}.wbiokr-control-positionControl-city-panel .province-title{padding:4px 8px;font-size:11px;font-weight:600;color:#333;background:#f5f5f5;border-bottom:1px solid #eee}.wbiokr-control-positionControl-city-panel .cities-wrapper{display:flex;flex-wrap:wrap;padding:3px;gap:3px}.wbiokr-control-positionControl-city-panel .city-item{padding:3px 6px;font-size:11px;color:#666;background:#f9f9f9;border:1px solid #e8e8e8;border-radius:3px;cursor:pointer;transition:all .2s;white-space:nowrap}.wbiokr-control-positionControl-city-panel .city-item:hover{background:#e6f7ff;color:#189fff;border-color:#91d5ff}.wbiokr-control-layersTree-main{background-color:#fffffff2}.wbiokr-control-layersTree-main-ul li{color:#ccc}.wbiokr-control-layersTree-main-ul li.wbiokr-active{color:#333}.wbiokr-control-layersTree-main-ul li:not(.wbiokr-active) svg{fill:#ccc!important}
1
+ .wbk-contextmenus{pointer-events:auto;box-shadow:0 0 3px 1px #8e8e8e;border-radius:5px}.wbk-contextmenus-item{padding:3px 10px;cursor:pointer;transition:all ease .3s;color:#666;fill:#666}.wbk-contextmenus-item:hover .wbk-contextmenus-submenu{display:block!important}.wbk-contextmenus-item:hover{background:#c9e0e0a8;fill:#1890ff}.wbk-contextmenus-item:hover>.wbk-menu-item{color:#1890ff}.wbk-drop-other-menu .ant-dropdown-menu{box-shadow:0 2px 8px #00000029;transform:translate(calc(100% + 10px)) translateY(-39px)}.aside-content{box-shadow:0 0 4px 1px #8e8e8e}.aside-hidden{transform:scale(0) translateY(-50%) translate(50%);transform-origin:right top}.btn-hidden{transform:scale(0) translate(50%) translateY(-50%);transform-origin:right top;opacity:0}.aside-visible{transform:scale(1) translateY(0) translate(0);opacity:1}.wbiokr-geoserver-modal{background:rgba(0,0,0,0);animation:opactiy-in .3s ease 1 forwards}.wbiokr-geoserver-modal>.wbiokr-geoserver-modal-wrappper{transform:scale(0);animation:scale-in .4s ease 1 forwards;width:700px}@-moz-keyframes opactiy-in{0%{background:rgba(0,0,0,0)}to{background:rgba(0,0,0,.5)}}@-webkit-keyframes opactiy-in{0%{background:rgba(0,0,0,0)}to{background:rgba(0,0,0,.5)}}@-o-keyframes opactiy-in{0%{background:rgba(0,0,0,0)}to{background:rgba(0,0,0,.5)}}@keyframes opactiy-in{0%{background:rgba(0,0,0,0)}to{background:rgba(0,0,0,.5)}}@-moz-keyframes scale-in{0%{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes scale-in{0%{transform:scale(0)}to{transform:scale(1)}}@-o-keyframes scale-in{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes scale-in{0%{transform:scale(0)}to{transform:scale(1)}}.wbiokr-com-checkbox.wbiokr-com-checked .wbiokr-com-checkbox-content{margin-bottom:1px}.wbiokr-com-checkbox .wbiokr-com-checkbox-content.w-5.h-5{width:7px;height:7px}[class^=wbiokr],[class^=wbiokr] *{box-sizing:border-box}.wbiokr-ctrl-main{transition:all ease .4s;transform:scale(0);opacity:0;background-color:#fff;box-shadow:0 0 3px 1px #8e8e8e;border-radius:4px;overflow:hidden;padding:0 10px}.wbiokr-ctrl-entry{display:flex!important;align-items:center;justify-content:center}.wbiokr-ctrl-entry path{transition:all ease-in .5s}.wbiokr-ctrl-active .wbiokr-ctrl-main{transform:none;opacity:1}.wbiokr-ctrl-active .wbiokr-ctrl-entry path{fill:#189fff}.wbiokr-ctrl-close{cursor:pointer;background:rgba(241,37,37,.91)!important;color:#fff;font-size:16px}.mapboxgl-ctrl-top-left .wbiokr-ctrl-absolute{position:absolute!important;left:33px;top:0;transform-origin:left top}.mapboxgl-ctrl-bottom-left .wbiokr-ctrl-absolute{position:absolute!important;left:33px;bottom:0;transform-origin:left bottom}.mapboxgl-ctrl-top-right .wbiokr-ctrl-absolute{position:absolute!important;right:33px;top:0;transform-origin:right top}.mapboxgl-ctrl-bottom-right .wbiokr-ctrl-absolute{position:absolute!important;right:33px;bottom:0;transform-origin:right bottom}.wbiokr-control-measureDistance-result,.wbiokr-control-measureArea-result{padding:1px 5px;background:#ffffffe8;border-radius:5px;box-shadow:0 0 4px 1px #999}.wbiokr-control-pick .wbiokr-control-pick-main{min-width:115px;white-space:nowrap}.mapboxgl-wbkrect-control .mapboxgl-wbkrect-control-entry{transition:all ease .3s}.mapboxgl-wbkrect-control .mapboxgl-wbkrect-control-entry.wbk-show path{fill:#189fff}.wbiokr-control-mouseRect-result{padding:1px 5px;background:#ffffffe8;border-radius:5px}.wbiokr-control-positionControl-main textarea{width:100%;border:1px solid #eee}.wbiokr-control-positionControl-main textarea:hover,.wbiokr-control-positionControl-main textarea:focus,.wbiokr-control-positionControl-main textarea:focus-visible{border:1px solid #189fff;outline:none}.wbiokr-control-positionControl-main textarea:focus{box-shadow:0 0 3px #189fff}.wbiokr-control-positionControl-main ul{max-height:200px}.wbiokr-control-positionControl-main ul li:hover .wbiokr-position-loc{color:#189fff}.wbiokr-control-positionControl-main .wbiokr-position-tag{color:#389e0d;height:24px;min-width:30px;background:#e6f7ff;border:1px solid #b7eb8f;border-radius:3px;padding:0 2px}.wbiokr-control-positionControl-main .wbokr-position-selected .wbiokr-position-tag{color:#096dd9;border-color:#91d5ff}.wbiokr-control-positionControl-main .wbokr-position-selected .wbiokr-position-loc{color:#189fff}.wbiokr-control-positionControl-city-panel{position:absolute;background:#fff;border-radius:6px;box-shadow:0 0 3px 1px #8e8e8e;z-index:100;display:flex;flex-direction:column;overflow:hidden;top:0;height:220px}.wbiokr-control-positionControl-city-panel .city-panel-header{display:flex;align-items:center;padding:8px 10px;border-bottom:1px solid #eee;background:#fafafa;gap:8px}.wbiokr-control-positionControl-city-panel .city-panel-title{padding:0;font-size:12px;font-weight:600;color:#333;text-align:left;white-space:nowrap;flex-shrink:0}.wbiokr-control-positionControl-city-panel .city-search-input{margin:0;padding:4px 11px;font-size:12px;line-height:1.5;color:#000000d9;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;transition:all .2s;outline:none;flex:1;min-width:0}.wbiokr-control-positionControl-city-panel .city-search-input:hover{border-color:#40a9ff}.wbiokr-control-positionControl-city-panel .city-search-input:focus{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33}.wbiokr-control-positionControl-city-panel .city-search-input::placeholder{color:#bfbfbf}.wbiokr-control-positionControl-city-panel .city-search-input:disabled{background-color:#f5f5f5;cursor:not-allowed;opacity:.6}.wbiokr-control-positionControl-city-panel .city-panel-close{position:static;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#999;cursor:pointer;z-index:10;border-radius:50%;transition:all .2s;flex-shrink:0;margin-left:auto}.wbiokr-control-positionControl-city-panel .city-panel-close:hover{background:#f5f5f5;color:#333}.wbiokr-control-positionControl-city-panel .city-list-container{flex:1;overflow-y:auto;padding:3px 0}.wbiokr-control-positionControl-city-panel .city-list-container::-webkit-scrollbar{width:4px}.wbiokr-control-positionControl-city-panel .city-list-container::-webkit-scrollbar-thumb{background:#ddd;border-radius:2px}.wbiokr-control-positionControl-city-panel .city-list-container::-webkit-scrollbar-thumb:hover{background:#bbb}.wbiokr-control-positionControl-city-panel .province-title{padding:4px 8px;font-size:11px;font-weight:600;color:#333;background:#f5f5f5;border-bottom:1px solid #eee}.wbiokr-control-positionControl-city-panel .province-title.search-highlight{background:#fff1b8;color:#d46b08;font-weight:700;animation:highlight-pulse 1.5s ease-in-out infinite}.wbiokr-control-positionControl-city-panel .cities-wrapper{display:flex;flex-wrap:wrap;padding:3px;gap:3px}.wbiokr-control-positionControl-city-panel .city-item{padding:3px 6px;font-size:11px;color:#666;background:#f9f9f9;border:1px solid #e8e8e8;border-radius:3px;cursor:pointer;transition:all .2s;white-space:nowrap}.wbiokr-control-positionControl-city-panel .city-item:hover{background:#e6f7ff;color:#189fff;border-color:#91d5ff}.wbiokr-control-positionControl-city-panel .city-item.search-highlight{background:#fff1b8;color:#d46b08;font-weight:700;border-color:#ffd666;animation:highlight-pulse 1.5s ease-in-out infinite}@-moz-keyframes highlight-pulse{0%,to{background:#fff1b8;box-shadow:0 0 #ffd96666}50%{background:#ffe7ba;box-shadow:0 0 8px 2px #ffd96699}}@-webkit-keyframes highlight-pulse{0%,to{background:#fff1b8;box-shadow:0 0 #ffd96666}50%{background:#ffe7ba;box-shadow:0 0 8px 2px #ffd96699}}@-o-keyframes highlight-pulse{0%,to{background:#fff1b8;box-shadow:0 0 #ffd96666}50%{background:#ffe7ba;box-shadow:0 0 8px 2px #ffd96699}}@keyframes highlight-pulse{0%,to{background:#fff1b8;box-shadow:0 0 #ffd96666}50%{background:#ffe7ba;box-shadow:0 0 8px 2px #ffd96699}}.wbiokr-control-layersTree-main{background-color:#fffffff2}.wbiokr-control-layersTree-main-ul li{color:#ccc}.wbiokr-control-layersTree-main-ul li.wbiokr-active{color:#333}.wbiokr-control-layersTree-main-ul li:not(.wbiokr-active) svg{fill:#ccc!important}
package/dist/ui.es.js CHANGED
@@ -3914,7 +3914,7 @@ class PositionControl extends KeyboardControl {
3914
3914
  _resetData() {
3915
3915
  this.flagValue = false;
3916
3916
  }
3917
- _navigate() {
3917
+ _navigate(updateInput = true) {
3918
3918
  this.current = -1;
3919
3919
  const newLocs = this._coords();
3920
3920
  if (this.options.type === "feature") {
@@ -3993,10 +3993,14 @@ class PositionControl extends KeyboardControl {
3993
3993
  li.append(span);
3994
3994
  ul.append(li);
3995
3995
  }
3996
- this.getterValue = newLocs.map((o2) => o2.join(",")).join("\n");
3996
+ if (updateInput) {
3997
+ this.getterValue = newLocs.map((o2) => o2.join(",")).join("\n");
3998
+ }
3997
3999
  }
3998
4000
  _coords() {
3999
- const locs = coordListByStr(this.getterValue);
4001
+ let coordStr = this.getterValue;
4002
+ coordStr = coordStr.replace(/(\d+[\°°]?\d*[\']?\d*[\"]?[\d\.]*)\s+(\d+[\°°]?\d*[\']?\d*[\"]?[\d\.]*)/g, "$1,$2");
4003
+ const locs = coordListByStr(coordStr);
4000
4004
  const newLocs = [...new Set(locs.map((a2) => a2.join(",")))].map((s2) => s2.split(","));
4001
4005
  if (newLocs.length < locs.length)
4002
4006
  this.options.onMini && this.options.onMini();
@@ -4027,6 +4031,15 @@ class PositionControl extends KeyboardControl {
4027
4031
  this._toggleCityPanel();
4028
4032
  };
4029
4033
  div.append(areaBtn);
4034
+ const locateBtn = document.createElement("span");
4035
+ locateBtn.innerText = "\u5B9A\u4F4D";
4036
+ locateBtn.className = "wk-c-app wk-c-p wk-o-hover-70 wk-ease-300 wk-m-r-10";
4037
+ locateBtn.onclick = (e2) => {
4038
+ e2.preventDefault();
4039
+ e2.stopPropagation();
4040
+ this._handleLocate();
4041
+ };
4042
+ div.append(locateBtn);
4030
4043
  const clearBtn = document.createElement("span");
4031
4044
  clearBtn.innerText = "\u6E05\u7A7A";
4032
4045
  clearBtn.className = "wk-c-danger wk-c-hover-danger wk-c-p wk-ease-300 wk-o-hover-70 wk-scale-active-90 wk-m-l-10";
@@ -4087,6 +4100,21 @@ class PositionControl extends KeyboardControl {
4087
4100
  }
4088
4101
  const panel = document.createElement("div");
4089
4102
  panel.className = `${this.mainClass}-city-panel`;
4103
+ const header = document.createElement("div");
4104
+ header.className = "city-panel-header";
4105
+ panel.appendChild(header);
4106
+ const title = document.createElement("div");
4107
+ title.className = "city-panel-title";
4108
+ title.innerText = "\u9009\u62E9\u57CE\u5E02";
4109
+ header.appendChild(title);
4110
+ const searchInput = document.createElement("input");
4111
+ searchInput.type = "text";
4112
+ searchInput.className = "city-search-input";
4113
+ searchInput.placeholder = "\u641C\u7D22\u57CE\u5E02\u540D\u79F0...";
4114
+ searchInput.oninput = (e2) => {
4115
+ this._filterCities(e2.target.value);
4116
+ };
4117
+ header.appendChild(searchInput);
4090
4118
  const closeBtn = document.createElement("div");
4091
4119
  closeBtn.className = "city-panel-close";
4092
4120
  closeBtn.innerHTML = "\xD7";
@@ -4094,23 +4122,23 @@ class PositionControl extends KeyboardControl {
4094
4122
  e2.stopPropagation();
4095
4123
  this._closeCityPanel();
4096
4124
  };
4097
- panel.appendChild(closeBtn);
4098
- const title = document.createElement("div");
4099
- title.className = "city-panel-title";
4100
- title.innerText = "\u9009\u62E9\u57CE\u5E02";
4101
- panel.appendChild(title);
4125
+ header.appendChild(closeBtn);
4102
4126
  const listContainer = document.createElement("div");
4103
4127
  listContainer.className = "city-list-container";
4128
+ listContainer.setAttribute("id", `${this.mainClass}-city-list-container`);
4104
4129
  CHINA_CITY_DATA.forEach((province) => {
4105
4130
  const provinceTitle = document.createElement("div");
4106
4131
  provinceTitle.className = "province-title";
4132
+ provinceTitle.setAttribute("data-province", province.name);
4107
4133
  provinceTitle.innerText = province.name;
4108
4134
  listContainer.appendChild(provinceTitle);
4109
4135
  const citiesContainer = document.createElement("div");
4110
4136
  citiesContainer.className = "cities-wrapper";
4137
+ citiesContainer.setAttribute("data-province", province.name);
4111
4138
  province.cities.forEach((city) => {
4112
4139
  const cityItem = document.createElement("div");
4113
4140
  cityItem.className = "city-item";
4141
+ cityItem.setAttribute("data-city", city.name);
4114
4142
  cityItem.innerText = city.name;
4115
4143
  cityItem.onclick = (e2) => {
4116
4144
  e2.stopPropagation();
@@ -4158,7 +4186,7 @@ class PositionControl extends KeyboardControl {
4158
4186
  }
4159
4187
  console.log("\u63A7\u4EF6\u4F4D\u7F6E:", isOnRight ? "\u53F3\u4FA7" : "\u5DE6\u4FA7");
4160
4188
  console.log("\u4E3B\u6D6E\u7A97\u5C3A\u5BF8:", mainRect.width, "x", mainRect.height);
4161
- console.log("\u9762\u677F\u5C3A\u5BF8:", panelWidth, "x", panelHeight);
4189
+ console.log("\u9762\u677F\u5C3A\u5BF8:", panelWidth, "x", 220);
4162
4190
  }
4163
4191
  _toggleCityPanel() {
4164
4192
  if (!this._map) {
@@ -4201,6 +4229,75 @@ class PositionControl extends KeyboardControl {
4201
4229
  }, 100);
4202
4230
  }
4203
4231
  }
4232
+ _handleLocate() {
4233
+ const textarea = this._container.querySelector("textarea");
4234
+ if (!textarea)
4235
+ return;
4236
+ const inputValue = textarea.value.trim();
4237
+ if (!inputValue) {
4238
+ console.warn("\u8BF7\u8F93\u5165\u5750\u6807");
4239
+ return;
4240
+ }
4241
+ this.value = inputValue;
4242
+ this._navigate(false);
4243
+ const newLocs = this._coords();
4244
+ if (newLocs.length === 0) {
4245
+ console.warn("\u6CA1\u6709\u6709\u6548\u7684\u5750\u6807");
4246
+ return;
4247
+ }
4248
+ setTimeout(() => {
4249
+ this.current = 0;
4250
+ }, 100);
4251
+ }
4252
+ _filterCities(searchText) {
4253
+ if (!this.cityPanelElement)
4254
+ return;
4255
+ const listContainer = this.cityPanelElement.querySelector(".city-list-container");
4256
+ if (!listContainer)
4257
+ return;
4258
+ const searchLower = searchText.toLowerCase().trim();
4259
+ const provinceTitles = listContainer.querySelectorAll(".province-title");
4260
+ const cityItems = listContainer.querySelectorAll(".city-item");
4261
+ provinceTitles.forEach((title) => {
4262
+ title.classList.remove("search-highlight");
4263
+ });
4264
+ cityItems.forEach((item) => {
4265
+ item.classList.remove("search-highlight");
4266
+ });
4267
+ if (!searchLower) {
4268
+ return;
4269
+ }
4270
+ let firstMatchElement = null;
4271
+ CHINA_CITY_DATA.forEach((province) => {
4272
+ const provinceTitle = listContainer.querySelector(`.province-title[data-province="${province.name}"]`);
4273
+ if (!provinceTitle)
4274
+ return;
4275
+ if (province.name.toLowerCase().includes(searchLower)) {
4276
+ provinceTitle.classList.add("search-highlight");
4277
+ if (!firstMatchElement) {
4278
+ firstMatchElement = provinceTitle;
4279
+ }
4280
+ return;
4281
+ }
4282
+ province.cities.forEach((city) => {
4283
+ const cityItem = listContainer.querySelector(`.city-item[data-city="${city.name}"]`);
4284
+ if (!cityItem)
4285
+ return;
4286
+ if (city.name.toLowerCase().includes(searchLower)) {
4287
+ if (!firstMatchElement) {
4288
+ cityItem.classList.add("search-highlight");
4289
+ firstMatchElement = cityItem;
4290
+ }
4291
+ }
4292
+ });
4293
+ });
4294
+ if (firstMatchElement) {
4295
+ firstMatchElement.scrollIntoView({
4296
+ behavior: "smooth",
4297
+ block: "nearest"
4298
+ });
4299
+ }
4300
+ }
4204
4301
  }
4205
4302
  var FUNC_ERROR_TEXT = "Expected a function";
4206
4303
  var NAN = 0 / 0;