uomtiles 0.1.0

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.
Files changed (507) hide show
  1. package/.output/nitro.json +15 -0
  2. package/.output/public/_nuxt/1d1PDhA4.js +1 -0
  3. package/.output/public/_nuxt/3B2XYGg4.js +1 -0
  4. package/.output/public/_nuxt/981KwFWf.js +1 -0
  5. package/.output/public/_nuxt/B30dSvM4.js +1 -0
  6. package/.output/public/_nuxt/BN1Gp4Dm.js +1 -0
  7. package/.output/public/_nuxt/BQlj8Xoe.js +6 -0
  8. package/.output/public/_nuxt/BRkljK8J.js +1 -0
  9. package/.output/public/_nuxt/BSdHYVlE2.js +1 -0
  10. package/.output/public/_nuxt/B_MqTg2k2.js +1 -0
  11. package/.output/public/_nuxt/BiWblTbb2.js +64 -0
  12. package/.output/public/_nuxt/BrPwntMr.js +1 -0
  13. package/.output/public/_nuxt/BskybydR.js +1 -0
  14. package/.output/public/_nuxt/ByRlKR9F.js +1 -0
  15. package/.output/public/_nuxt/C0Zdl2EE2.js +1 -0
  16. package/.output/public/_nuxt/C4qlzA4o.js +1 -0
  17. package/.output/public/_nuxt/C7HxHbxA.js +1 -0
  18. package/.output/public/_nuxt/C97TfNgP.js +3 -0
  19. package/.output/public/_nuxt/CNs_Ozdc.js +1 -0
  20. package/.output/public/_nuxt/CPuhwLY1.js +1 -0
  21. package/.output/public/_nuxt/CVE291Pi.js +1 -0
  22. package/.output/public/_nuxt/C_0VY3Cv2.js +4 -0
  23. package/.output/public/_nuxt/Ce26t8_Y.js +1 -0
  24. package/.output/public/_nuxt/CfW544W5.js +1 -0
  25. package/.output/public/_nuxt/CgMd2Y5s.js +2 -0
  26. package/.output/public/_nuxt/CgdzV712.js +1 -0
  27. package/.output/public/_nuxt/D1wVNWS0.js +1 -0
  28. package/.output/public/_nuxt/DC3bhq63.js +1 -0
  29. package/.output/public/_nuxt/DK3Fl9T5.js +1 -0
  30. package/.output/public/_nuxt/DL1MZZLI.js +1 -0
  31. package/.output/public/_nuxt/DXm-42Fi.js +1 -0
  32. package/.output/public/_nuxt/Djg3Kzfv.js +1 -0
  33. package/.output/public/_nuxt/DkcySee1.js +1 -0
  34. package/.output/public/_nuxt/DmN-PKW1.js +1 -0
  35. package/.output/public/_nuxt/DtFVCXI9.js +1 -0
  36. package/.output/public/_nuxt/Dz7VMlHR.js +1 -0
  37. package/.output/public/_nuxt/NL65vbjG2.js +1 -0
  38. package/.output/public/_nuxt/Oxy7pKSk.js +3 -0
  39. package/.output/public/_nuxt/Pik8or8N2.js +1 -0
  40. package/.output/public/_nuxt/XZ59tThl.js +1 -0
  41. package/.output/public/_nuxt/ZpWjFsgV.js +1 -0
  42. package/.output/public/_nuxt/builds/latest.json +1 -0
  43. package/.output/public/_nuxt/builds/meta/9f85104e-738d-4a74-8daa-40b136ce17d5.json +1 -0
  44. package/.output/public/_nuxt/dXz6dFgW2.js +1 -0
  45. package/.output/public/_nuxt/entry.P6tFNE31.css +1 -0
  46. package/.output/public/_nuxt/error-404.Biv0P6cJ.css +1 -0
  47. package/.output/public/_nuxt/error-500.8ok468rV.css +1 -0
  48. package/.output/public/_nuxt/j0MRD-c3.js +1 -0
  49. package/.output/public/_nuxt/local-pixel-diff.worker-C6RdZoCq.js +2 -0
  50. package/.output/public/_nuxt/maplibre-gl-worker.nfnkSQvL.mjs +6 -0
  51. package/.output/public/_nuxt/nearest-area.worker-iSLH0Y_s.js +2 -0
  52. package/.output/public/_nuxt/q7DkoVkj.js +828 -0
  53. package/.output/public/_nuxt/raster-tile.worker-BFlOgJig.js +2 -0
  54. package/.output/public/_nuxt/services._3nQizF8.css +1 -0
  55. package/.output/public/_nuxt/sql-wasm.DfANybxk.wasm +0 -0
  56. package/.output/public/_nuxt/tile-diff.worker-CvWWI_eu.js +1 -0
  57. package/.output/public/_nuxt/zZ1EGR7Y.js +1 -0
  58. package/.output/public/apple-touch-icon.png +0 -0
  59. package/.output/public/favicon.ico +0 -0
  60. package/.output/public/favicon.svg +8 -0
  61. package/.output/public/icon-192.png +0 -0
  62. package/.output/public/icon-512.png +0 -0
  63. package/.output/public/site.webmanifest +11 -0
  64. package/.output/server/chunks/_/config.mjs +208 -0
  65. package/.output/server/chunks/_/config.mjs.map +1 -0
  66. package/.output/server/chunks/_/data-directory.mjs +24 -0
  67. package/.output/server/chunks/_/data-directory.mjs.map +1 -0
  68. package/.output/server/chunks/_/error-500.mjs +20 -0
  69. package/.output/server/chunks/_/error-500.mjs.map +1 -0
  70. package/.output/server/chunks/_/file-workspace.mjs +910 -0
  71. package/.output/server/chunks/_/file-workspace.mjs.map +1 -0
  72. package/.output/server/chunks/_/icons.mjs +6269 -0
  73. package/.output/server/chunks/_/icons.mjs.map +1 -0
  74. package/.output/server/chunks/_/map-service.mjs +233 -0
  75. package/.output/server/chunks/_/map-service.mjs.map +1 -0
  76. package/.output/server/chunks/_/missing-tile.mjs +104 -0
  77. package/.output/server/chunks/_/missing-tile.mjs.map +1 -0
  78. package/.output/server/chunks/_/pixel-diff.mjs +78 -0
  79. package/.output/server/chunks/_/pixel-diff.mjs.map +1 -0
  80. package/.output/server/chunks/_/uom-auth.mjs +334 -0
  81. package/.output/server/chunks/_/uom-auth.mjs.map +1 -0
  82. package/.output/server/chunks/_/uom-map.mjs +265 -0
  83. package/.output/server/chunks/_/uom-map.mjs.map +1 -0
  84. package/.output/server/chunks/build/Alert-0ngTJXxP.mjs +5076 -0
  85. package/.output/server/chunks/build/Alert-0ngTJXxP.mjs.map +1 -0
  86. package/.output/server/chunks/build/DashboardSidebarToggle-pncTaIJq.mjs +569 -0
  87. package/.output/server/chunks/build/DashboardSidebarToggle-pncTaIJq.mjs.map +1 -0
  88. package/.output/server/chunks/build/Empty-CkW3mADt.mjs +359 -0
  89. package/.output/server/chunks/build/Empty-CkW3mADt.mjs.map +1 -0
  90. package/.output/server/chunks/build/FocusScope-Cf0lg0zt.mjs +207 -0
  91. package/.output/server/chunks/build/FocusScope-Cf0lg0zt.mjs.map +1 -0
  92. package/.output/server/chunks/build/FormField-CEUZHcv7.mjs +278 -0
  93. package/.output/server/chunks/build/FormField-CEUZHcv7.mjs.map +1 -0
  94. package/.output/server/chunks/build/Input-BeNavYXb.mjs +592 -0
  95. package/.output/server/chunks/build/Input-BeNavYXb.mjs.map +1 -0
  96. package/.output/server/chunks/build/MapBaseLayerTabs-4445J6yh.mjs +2003 -0
  97. package/.output/server/chunks/build/MapBaseLayerTabs-4445J6yh.mjs.map +1 -0
  98. package/.output/server/chunks/build/Modal-DNZtVxca.mjs +1326 -0
  99. package/.output/server/chunks/build/Modal-DNZtVxca.mjs.map +1 -0
  100. package/.output/server/chunks/build/OnlineMap-CKwiuqUY.mjs +146 -0
  101. package/.output/server/chunks/build/OnlineMap-CKwiuqUY.mjs.map +1 -0
  102. package/.output/server/chunks/build/Pagination-CDHx4HTZ.mjs +1025 -0
  103. package/.output/server/chunks/build/Pagination-CDHx4HTZ.mjs.map +1 -0
  104. package/.output/server/chunks/build/PopperArrow-Bqfdf2Et.mjs +2066 -0
  105. package/.output/server/chunks/build/PopperArrow-Bqfdf2Et.mjs.map +1 -0
  106. package/.output/server/chunks/build/ScrollArea-BQK3em8b.mjs +379 -0
  107. package/.output/server/chunks/build/ScrollArea-BQK3em8b.mjs.map +1 -0
  108. package/.output/server/chunks/build/Slider-D-n8Y0CX.mjs +1087 -0
  109. package/.output/server/chunks/build/Slider-D-n8Y0CX.mjs.map +1 -0
  110. package/.output/server/chunks/build/Tooltip-CkpSktvJ.mjs +1345 -0
  111. package/.output/server/chunks/build/Tooltip-CkpSktvJ.mjs.map +1 -0
  112. package/.output/server/chunks/build/_virtual_public-CeOptKUP.mjs +7 -0
  113. package/.output/server/chunks/build/_virtual_public-CeOptKUP.mjs.map +1 -0
  114. package/.output/server/chunks/build/advanced-D1onodoF.mjs +1430 -0
  115. package/.output/server/chunks/build/advanced-D1onodoF.mjs.map +1 -0
  116. package/.output/server/chunks/build/compare-DmSAW8oA.mjs +1093 -0
  117. package/.output/server/chunks/build/compare-DmSAW8oA.mjs.map +1 -0
  118. package/.output/server/chunks/build/dashboard-BJxrZ19n.mjs +3217 -0
  119. package/.output/server/chunks/build/dashboard-BJxrZ19n.mjs.map +1 -0
  120. package/.output/server/chunks/build/details-CBMqXYyo.mjs +3714 -0
  121. package/.output/server/chunks/build/details-CBMqXYyo.mjs.map +1 -0
  122. package/.output/server/chunks/build/error-404-D9aQjJRn.mjs +86 -0
  123. package/.output/server/chunks/build/error-404-D9aQjJRn.mjs.map +1 -0
  124. package/.output/server/chunks/build/error-404-styles.DciiguV6.mjs +9 -0
  125. package/.output/server/chunks/build/error-404-styles.DciiguV6.mjs.map +1 -0
  126. package/.output/server/chunks/build/error-500-BNyA3wrb.mjs +74 -0
  127. package/.output/server/chunks/build/error-500-BNyA3wrb.mjs.map +1 -0
  128. package/.output/server/chunks/build/error-500-styles.C562DYMR.mjs +9 -0
  129. package/.output/server/chunks/build/error-500-styles.C562DYMR.mjs.map +1 -0
  130. package/.output/server/chunks/build/esm-Dp2lJXbp.mjs +1121 -0
  131. package/.output/server/chunks/build/esm-Dp2lJXbp.mjs.map +1 -0
  132. package/.output/server/chunks/build/interval-BxUMpo78.mjs +411 -0
  133. package/.output/server/chunks/build/interval-BxUMpo78.mjs.map +1 -0
  134. package/.output/server/chunks/build/login-lbtjN0MV.mjs +642 -0
  135. package/.output/server/chunks/build/login-lbtjN0MV.mjs.map +1 -0
  136. package/.output/server/chunks/build/pages-Ba0Eixbd.mjs +220 -0
  137. package/.output/server/chunks/build/pages-Ba0Eixbd.mjs.map +1 -0
  138. package/.output/server/chunks/build/services-DuJwjAB8.mjs +3005 -0
  139. package/.output/server/chunks/build/services-DuJwjAB8.mjs.map +1 -0
  140. package/.output/server/chunks/build/services-styles.eoO16BY9.mjs +9 -0
  141. package/.output/server/chunks/build/services-styles.eoO16BY9.mjs.map +1 -0
  142. package/.output/server/chunks/build/tasks-CyN9x492.mjs +915 -0
  143. package/.output/server/chunks/build/tasks-CyN9x492.mjs.map +1 -0
  144. package/.output/server/chunks/build/tasks-D_Q5EDnn.mjs +87 -0
  145. package/.output/server/chunks/build/tasks-D_Q5EDnn.mjs.map +1 -0
  146. package/.output/server/chunks/nitro/nitro.mjs +6215 -0
  147. package/.output/server/chunks/nitro/nitro.mjs.map +1 -0
  148. package/.output/server/chunks/routes/api/auth/captcha.post.mjs +21 -0
  149. package/.output/server/chunks/routes/api/auth/captcha.post.mjs.map +1 -0
  150. package/.output/server/chunks/routes/api/auth/login.post.mjs +27 -0
  151. package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -0
  152. package/.output/server/chunks/routes/api/auth/logout.post.mjs +22 -0
  153. package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -0
  154. package/.output/server/chunks/routes/api/auth/map-token.post.mjs +22 -0
  155. package/.output/server/chunks/routes/api/auth/map-token.post.mjs.map +1 -0
  156. package/.output/server/chunks/routes/api/auth/send-sms.post.mjs +31 -0
  157. package/.output/server/chunks/routes/api/auth/send-sms.post.mjs.map +1 -0
  158. package/.output/server/chunks/routes/api/auth/status.get.mjs +21 -0
  159. package/.output/server/chunks/routes/api/auth/status.get.mjs.map +1 -0
  160. package/.output/server/chunks/routes/api/map/base/_baseLayer/_zoom/_tileX/_tileY_.get.mjs +44 -0
  161. package/.output/server/chunks/routes/api/map/base/_baseLayer/_zoom/_tileX/_tileY_.get.mjs.map +1 -0
  162. package/.output/server/chunks/routes/api/map/live/status.get.mjs +32 -0
  163. package/.output/server/chunks/routes/api/map/live/status.get.mjs.map +1 -0
  164. package/.output/server/chunks/routes/api/map/online/_layerGroup/_zoom/_tileX/_tileY_.get.mjs +48 -0
  165. package/.output/server/chunks/routes/api/map/online/_layerGroup/_zoom/_tileX/_tileY_.get.mjs.map +1 -0
  166. package/.output/server/chunks/routes/api/map/online-root/_layerGroup/_rootX/_rootY_.get.mjs +46 -0
  167. package/.output/server/chunks/routes/api/map/online-root/_layerGroup/_rootX/_rootY_.get.mjs.map +1 -0
  168. package/.output/server/chunks/routes/api/map-service/config.post.mjs +38 -0
  169. package/.output/server/chunks/routes/api/map-service/config.post.mjs.map +1 -0
  170. package/.output/server/chunks/routes/api/map-service/file.post.mjs +41 -0
  171. package/.output/server/chunks/routes/api/map-service/file.post.mjs.map +1 -0
  172. package/.output/server/chunks/routes/api/map-service/source.post.mjs +35 -0
  173. package/.output/server/chunks/routes/api/map-service/source.post.mjs.map +1 -0
  174. package/.output/server/chunks/routes/api/map-service/status.get.mjs +32 -0
  175. package/.output/server/chunks/routes/api/map-service/status.get.mjs.map +1 -0
  176. package/.output/server/chunks/routes/api/workspace/_filename/analysis.get.mjs +47 -0
  177. package/.output/server/chunks/routes/api/workspace/_filename/analysis.get.mjs.map +1 -0
  178. package/.output/server/chunks/routes/api/workspace/_filename/download.get.mjs +38 -0
  179. package/.output/server/chunks/routes/api/workspace/_filename/download.get.mjs.map +1 -0
  180. package/.output/server/chunks/routes/api/workspace/_filename/export/_format_.get.mjs +42 -0
  181. package/.output/server/chunks/routes/api/workspace/_filename/export/_format_.get.mjs.map +1 -0
  182. package/.output/server/chunks/routes/api/workspace/_filename/tile.get.mjs +48 -0
  183. package/.output/server/chunks/routes/api/workspace/_filename/tile.get.mjs.map +1 -0
  184. package/.output/server/chunks/routes/api/workspace/_filename/tiles.get.mjs +45 -0
  185. package/.output/server/chunks/routes/api/workspace/_filename/tiles.get.mjs.map +1 -0
  186. package/.output/server/chunks/routes/api/workspace/_filename_.delete.mjs +32 -0
  187. package/.output/server/chunks/routes/api/workspace/_filename_.delete.mjs.map +1 -0
  188. package/.output/server/chunks/routes/api/workspace/compare/batch.get.mjs +38 -0
  189. package/.output/server/chunks/routes/api/workspace/compare/batch.get.mjs.map +1 -0
  190. package/.output/server/chunks/routes/api/workspace/compare.post.mjs +33 -0
  191. package/.output/server/chunks/routes/api/workspace/compare.post.mjs.map +1 -0
  192. package/.output/server/chunks/routes/api/workspace/fetch.post.mjs +33 -0
  193. package/.output/server/chunks/routes/api/workspace/fetch.post.mjs.map +1 -0
  194. package/.output/server/chunks/routes/api/workspace/files.get.mjs +27 -0
  195. package/.output/server/chunks/routes/api/workspace/files.get.mjs.map +1 -0
  196. package/.output/server/chunks/routes/api/workspace/files.post.mjs +38 -0
  197. package/.output/server/chunks/routes/api/workspace/files.post.mjs.map +1 -0
  198. package/.output/server/chunks/routes/api/workspace/stop.post.mjs +32 -0
  199. package/.output/server/chunks/routes/api/workspace/stop.post.mjs.map +1 -0
  200. package/.output/server/chunks/routes/api/workspace/tasks.post.mjs +36 -0
  201. package/.output/server/chunks/routes/api/workspace/tasks.post.mjs.map +1 -0
  202. package/.output/server/chunks/routes/renderer.mjs +422 -0
  203. package/.output/server/chunks/routes/renderer.mjs.map +1 -0
  204. package/.output/server/chunks/routes/services/wms.get.mjs +54 -0
  205. package/.output/server/chunks/routes/services/wms.get.mjs.map +1 -0
  206. package/.output/server/chunks/routes/services/wmts.get.mjs +54 -0
  207. package/.output/server/chunks/routes/services/wmts.get.mjs.map +1 -0
  208. package/.output/server/chunks/virtual/_virtual_spa-template.mjs +4 -0
  209. package/.output/server/chunks/virtual/_virtual_spa-template.mjs.map +1 -0
  210. package/.output/server/chunks/virtual/entry.mjs +18545 -0
  211. package/.output/server/chunks/virtual/entry.mjs.map +1 -0
  212. package/.output/server/chunks/virtual/precomputed.mjs +4 -0
  213. package/.output/server/chunks/virtual/precomputed.mjs.map +1 -0
  214. package/.output/server/chunks/virtual/styles.mjs +10 -0
  215. package/.output/server/chunks/virtual/styles.mjs.map +1 -0
  216. package/.output/server/index.mjs +12 -0
  217. package/.output/server/index.mjs.map +1 -0
  218. package/.output/server/node_modules/@babel/parser/lib/index.js +14611 -0
  219. package/.output/server/node_modules/@babel/parser/package.json +50 -0
  220. package/.output/server/node_modules/@iconify/utils/lib/colors/index.js +295 -0
  221. package/.output/server/node_modules/@iconify/utils/lib/colors/keywords.js +701 -0
  222. package/.output/server/node_modules/@iconify/utils/lib/css/common.js +75 -0
  223. package/.output/server/node_modules/@iconify/utils/lib/css/format.js +39 -0
  224. package/.output/server/node_modules/@iconify/utils/lib/css/icon.js +47 -0
  225. package/.output/server/node_modules/@iconify/utils/lib/css/icons.js +128 -0
  226. package/.output/server/node_modules/@iconify/utils/lib/customisations/bool.js +19 -0
  227. package/.output/server/node_modules/@iconify/utils/lib/customisations/defaults.js +13 -0
  228. package/.output/server/node_modules/@iconify/utils/lib/customisations/flip.js +17 -0
  229. package/.output/server/node_modules/@iconify/utils/lib/customisations/merge.js +16 -0
  230. package/.output/server/node_modules/@iconify/utils/lib/customisations/rotate.js +30 -0
  231. package/.output/server/node_modules/@iconify/utils/lib/emoji/cleanup.js +78 -0
  232. package/.output/server/node_modules/@iconify/utils/lib/emoji/convert.js +100 -0
  233. package/.output/server/node_modules/@iconify/utils/lib/emoji/data.js +28 -0
  234. package/.output/server/node_modules/@iconify/utils/lib/emoji/format.js +58 -0
  235. package/.output/server/node_modules/@iconify/utils/lib/emoji/parse.js +48 -0
  236. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/base.js +203 -0
  237. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/create.js +33 -0
  238. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/numbers.js +132 -0
  239. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/similar.js +165 -0
  240. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/tree.js +79 -0
  241. package/.output/server/node_modules/@iconify/utils/lib/emoji/replace/find.js +92 -0
  242. package/.output/server/node_modules/@iconify/utils/lib/emoji/replace/replace.js +26 -0
  243. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/components.js +76 -0
  244. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/missing.js +66 -0
  245. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/name.js +45 -0
  246. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/parse.js +103 -0
  247. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/similar.js +36 -0
  248. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/tree.js +92 -0
  249. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/variations.js +62 -0
  250. package/.output/server/node_modules/@iconify/utils/lib/icon/defaults.js +25 -0
  251. package/.output/server/node_modules/@iconify/utils/lib/icon/merge.js +16 -0
  252. package/.output/server/node_modules/@iconify/utils/lib/icon/name.js +57 -0
  253. package/.output/server/node_modules/@iconify/utils/lib/icon/square.js +33 -0
  254. package/.output/server/node_modules/@iconify/utils/lib/icon/transformations.js +12 -0
  255. package/.output/server/node_modules/@iconify/utils/lib/icon-set/convert-info.js +125 -0
  256. package/.output/server/node_modules/@iconify/utils/lib/icon-set/expand.js +19 -0
  257. package/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icon.js +25 -0
  258. package/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icons.js +36 -0
  259. package/.output/server/node_modules/@iconify/utils/lib/icon-set/minify.js +91 -0
  260. package/.output/server/node_modules/@iconify/utils/lib/icon-set/parse.js +46 -0
  261. package/.output/server/node_modules/@iconify/utils/lib/icon-set/tree.js +23 -0
  262. package/.output/server/node_modules/@iconify/utils/lib/icon-set/validate-basic.js +42 -0
  263. package/.output/server/node_modules/@iconify/utils/lib/icon-set/validate.js +123 -0
  264. package/.output/server/node_modules/@iconify/utils/lib/index.js +52 -0
  265. package/.output/server/node_modules/@iconify/utils/lib/loader/custom.js +30 -0
  266. package/.output/server/node_modules/@iconify/utils/lib/loader/loader.js +26 -0
  267. package/.output/server/node_modules/@iconify/utils/lib/loader/modern.js +27 -0
  268. package/.output/server/node_modules/@iconify/utils/lib/loader/utils.js +105 -0
  269. package/.output/server/node_modules/@iconify/utils/lib/misc/objects.js +26 -0
  270. package/.output/server/node_modules/@iconify/utils/lib/misc/strings.js +26 -0
  271. package/.output/server/node_modules/@iconify/utils/lib/misc/title.js +9 -0
  272. package/.output/server/node_modules/@iconify/utils/lib/svg/build.js +113 -0
  273. package/.output/server/node_modules/@iconify/utils/lib/svg/defs.js +31 -0
  274. package/.output/server/node_modules/@iconify/utils/lib/svg/encode-svg-for-css.js +13 -0
  275. package/.output/server/node_modules/@iconify/utils/lib/svg/html.js +9 -0
  276. package/.output/server/node_modules/@iconify/utils/lib/svg/id.js +41 -0
  277. package/.output/server/node_modules/@iconify/utils/lib/svg/inner-html.js +22 -0
  278. package/.output/server/node_modules/@iconify/utils/lib/svg/parse.js +67 -0
  279. package/.output/server/node_modules/@iconify/utils/lib/svg/pretty.js +54 -0
  280. package/.output/server/node_modules/@iconify/utils/lib/svg/size.js +27 -0
  281. package/.output/server/node_modules/@iconify/utils/lib/svg/trim.js +7 -0
  282. package/.output/server/node_modules/@iconify/utils/lib/svg/url.js +22 -0
  283. package/.output/server/node_modules/@iconify/utils/lib/svg/viewbox.js +8 -0
  284. package/.output/server/node_modules/@iconify/utils/package.json +119 -0
  285. package/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6801 -0
  286. package/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
  287. package/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +692 -0
  288. package/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
  289. package/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1420 -0
  290. package/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
  291. package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1903 -0
  292. package/.output/server/node_modules/@vue/reactivity/package.json +55 -0
  293. package/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +6976 -0
  294. package/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
  295. package/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1841 -0
  296. package/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
  297. package/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +904 -0
  298. package/.output/server/node_modules/@vue/server-renderer/package.json +53 -0
  299. package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +609 -0
  300. package/.output/server/node_modules/@vue/shared/package.json +47 -0
  301. package/.output/server/node_modules/consola/dist/chunks/prompt.mjs +280 -0
  302. package/.output/server/node_modules/consola/dist/core.mjs +512 -0
  303. package/.output/server/node_modules/consola/dist/index.mjs +651 -0
  304. package/.output/server/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +72 -0
  305. package/.output/server/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +288 -0
  306. package/.output/server/node_modules/consola/package.json +136 -0
  307. package/.output/server/node_modules/devalue/index.js +17 -0
  308. package/.output/server/node_modules/devalue/package.json +39 -0
  309. package/.output/server/node_modules/devalue/src/base64.js +60 -0
  310. package/.output/server/node_modules/devalue/src/constants.js +12 -0
  311. package/.output/server/node_modules/devalue/src/operations.js +193 -0
  312. package/.output/server/node_modules/devalue/src/parse.js +270 -0
  313. package/.output/server/node_modules/devalue/src/stringify.js +428 -0
  314. package/.output/server/node_modules/devalue/src/uneval.js +582 -0
  315. package/.output/server/node_modules/devalue/src/utils.js +185 -0
  316. package/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
  317. package/.output/server/node_modules/entities/dist/commonjs/decode.js +568 -0
  318. package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
  319. package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
  320. package/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
  321. package/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
  322. package/.output/server/node_modules/entities/dist/commonjs/package.json +3 -0
  323. package/.output/server/node_modules/entities/package.json +120 -0
  324. package/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
  325. package/.output/server/node_modules/estree-walker/package.json +37 -0
  326. package/.output/server/node_modules/fflate/esm/index.mjs +2710 -0
  327. package/.output/server/node_modules/fflate/package.json +128 -0
  328. package/.output/server/node_modules/fnv1a-64/dist/index.mjs +95 -0
  329. package/.output/server/node_modules/fnv1a-64/package.json +75 -0
  330. package/.output/server/node_modules/hookable/dist/index.mjs +257 -0
  331. package/.output/server/node_modules/hookable/package.json +53 -0
  332. package/.output/server/node_modules/nostics/dist/formatters/ansi.mjs +19 -0
  333. package/.output/server/node_modules/nostics/dist/index.mjs +187 -0
  334. package/.output/server/node_modules/nostics/package.json +125 -0
  335. package/.output/server/node_modules/object-identity/index.js +60 -0
  336. package/.output/server/node_modules/object-identity/package.json +40 -0
  337. package/.output/server/node_modules/p-limit/index.js +104 -0
  338. package/.output/server/node_modules/p-limit/package.json +58 -0
  339. package/.output/server/node_modules/pmtiles/dist/esm/index.js +2 -0
  340. package/.output/server/node_modules/pmtiles/package.json +50 -0
  341. package/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
  342. package/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  343. package/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
  344. package/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
  345. package/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
  346. package/.output/server/node_modules/source-map-js/lib/quick-sort.js +132 -0
  347. package/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
  348. package/.output/server/node_modules/source-map-js/lib/source-map-generator.js +444 -0
  349. package/.output/server/node_modules/source-map-js/lib/source-node.js +413 -0
  350. package/.output/server/node_modules/source-map-js/lib/util.js +594 -0
  351. package/.output/server/node_modules/source-map-js/package.json +71 -0
  352. package/.output/server/node_modules/source-map-js/source-map.js +8 -0
  353. package/.output/server/node_modules/tailwindcss/dist/chunk-DCG7AFIE.mjs +1 -0
  354. package/.output/server/node_modules/tailwindcss/dist/colors.mjs +1 -0
  355. package/.output/server/node_modules/tailwindcss/package.json +89 -0
  356. package/.output/server/node_modules/ufo/dist/index.mjs +645 -0
  357. package/.output/server/node_modules/ufo/package.json +48 -0
  358. package/.output/server/node_modules/unhead/dist/client.mjs +22 -0
  359. package/.output/server/node_modules/unhead/dist/index.mjs +52 -0
  360. package/.output/server/node_modules/unhead/dist/legacy.mjs +33 -0
  361. package/.output/server/node_modules/unhead/dist/minify.mjs +183 -0
  362. package/.output/server/node_modules/unhead/dist/parser.mjs +518 -0
  363. package/.output/server/node_modules/unhead/dist/plugins.mjs +631 -0
  364. package/.output/server/node_modules/unhead/dist/scripts.node.mjs +6 -0
  365. package/.output/server/node_modules/unhead/dist/server.mjs +99 -0
  366. package/.output/server/node_modules/unhead/dist/shared/unhead.BEmVMkeA.mjs +673 -0
  367. package/.output/server/node_modules/unhead/dist/shared/unhead.BGFxPGPQ.mjs +47 -0
  368. package/.output/server/node_modules/unhead/dist/shared/unhead.BQWSw36o.mjs +192 -0
  369. package/.output/server/node_modules/unhead/dist/shared/unhead.Bb4d5b9h.mjs +67 -0
  370. package/.output/server/node_modules/unhead/dist/shared/unhead.BdK3SLPN.mjs +585 -0
  371. package/.output/server/node_modules/unhead/dist/shared/unhead.Bf_fPVYA.mjs +6 -0
  372. package/.output/server/node_modules/unhead/dist/shared/unhead.Bm4Y6XQI.mjs +17 -0
  373. package/.output/server/node_modules/unhead/dist/shared/unhead.C3b2Ipoj.mjs +223 -0
  374. package/.output/server/node_modules/unhead/dist/shared/unhead.CGPOfp5O.mjs +32 -0
  375. package/.output/server/node_modules/unhead/dist/shared/unhead.CHEy9ana.mjs +7 -0
  376. package/.output/server/node_modules/unhead/dist/shared/unhead.CTjuIdzk.mjs +27 -0
  377. package/.output/server/node_modules/unhead/dist/shared/unhead.CfKy3Kuq.mjs +196 -0
  378. package/.output/server/node_modules/unhead/dist/shared/unhead.D7HkBzZn.mjs +59 -0
  379. package/.output/server/node_modules/unhead/dist/shared/unhead.DNKiVLV7.mjs +400 -0
  380. package/.output/server/node_modules/unhead/dist/shared/unhead.MC5RsXLj.mjs +19 -0
  381. package/.output/server/node_modules/unhead/dist/shared/unhead.jEy9BmRq.mjs +264 -0
  382. package/.output/server/node_modules/unhead/dist/shared/unhead.tQnRaXfX.mjs +240 -0
  383. package/.output/server/node_modules/unhead/dist/stream/client.mjs +28 -0
  384. package/.output/server/node_modules/unhead/dist/stream/iife.mjs +2 -0
  385. package/.output/server/node_modules/unhead/dist/stream/server.mjs +264 -0
  386. package/.output/server/node_modules/unhead/dist/utils.mjs +7 -0
  387. package/.output/server/node_modules/unhead/package.json +179 -0
  388. package/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
  389. package/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
  390. package/.output/server/node_modules/vue/index.js +7 -0
  391. package/.output/server/node_modules/vue/index.mjs +1 -0
  392. package/.output/server/node_modules/vue/package.json +112 -0
  393. package/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
  394. package/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +278 -0
  395. package/.output/server/node_modules/vue-bundle-renderer/package.json +54 -0
  396. package/.output/server/node_modules/yocto-queue/index.js +90 -0
  397. package/.output/server/node_modules/yocto-queue/package.json +48 -0
  398. package/.output/server/node_modules/zod/index.js +4 -0
  399. package/.output/server/node_modules/zod/package.json +135 -0
  400. package/.output/server/node_modules/zod/v4/classic/checks.js +1 -0
  401. package/.output/server/node_modules/zod/v4/classic/coerce.js +17 -0
  402. package/.output/server/node_modules/zod/v4/classic/compat.js +31 -0
  403. package/.output/server/node_modules/zod/v4/classic/errors.js +48 -0
  404. package/.output/server/node_modules/zod/v4/classic/external.js +20 -0
  405. package/.output/server/node_modules/zod/v4/classic/from-json-schema.js +599 -0
  406. package/.output/server/node_modules/zod/v4/classic/iso.js +30 -0
  407. package/.output/server/node_modules/zod/v4/classic/package.json +7 -0
  408. package/.output/server/node_modules/zod/v4/classic/parse.js +15 -0
  409. package/.output/server/node_modules/zod/v4/classic/schemas.js +1395 -0
  410. package/.output/server/node_modules/zod/v4/core/api.js +1087 -0
  411. package/.output/server/node_modules/zod/v4/core/checks.js +575 -0
  412. package/.output/server/node_modules/zod/v4/core/core.js +78 -0
  413. package/.output/server/node_modules/zod/v4/core/doc.js +35 -0
  414. package/.output/server/node_modules/zod/v4/core/errors.js +185 -0
  415. package/.output/server/node_modules/zod/v4/core/index.js +16 -0
  416. package/.output/server/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  417. package/.output/server/node_modules/zod/v4/core/json-schema-processors.js +601 -0
  418. package/.output/server/node_modules/zod/v4/core/json-schema.js +1 -0
  419. package/.output/server/node_modules/zod/v4/core/package.json +7 -0
  420. package/.output/server/node_modules/zod/v4/core/parse.js +93 -0
  421. package/.output/server/node_modules/zod/v4/core/regexes.js +139 -0
  422. package/.output/server/node_modules/zod/v4/core/registries.js +51 -0
  423. package/.output/server/node_modules/zod/v4/core/schemas.js +2239 -0
  424. package/.output/server/node_modules/zod/v4/core/to-json-schema.js +448 -0
  425. package/.output/server/node_modules/zod/v4/core/util.js +674 -0
  426. package/.output/server/node_modules/zod/v4/core/versions.js +5 -0
  427. package/.output/server/node_modules/zod/v4/locales/ar.js +106 -0
  428. package/.output/server/node_modules/zod/v4/locales/az.js +105 -0
  429. package/.output/server/node_modules/zod/v4/locales/be.js +156 -0
  430. package/.output/server/node_modules/zod/v4/locales/bg.js +120 -0
  431. package/.output/server/node_modules/zod/v4/locales/ca.js +107 -0
  432. package/.output/server/node_modules/zod/v4/locales/cs.js +111 -0
  433. package/.output/server/node_modules/zod/v4/locales/da.js +115 -0
  434. package/.output/server/node_modules/zod/v4/locales/de.js +108 -0
  435. package/.output/server/node_modules/zod/v4/locales/el.js +109 -0
  436. package/.output/server/node_modules/zod/v4/locales/en.js +113 -0
  437. package/.output/server/node_modules/zod/v4/locales/eo.js +109 -0
  438. package/.output/server/node_modules/zod/v4/locales/es.js +132 -0
  439. package/.output/server/node_modules/zod/v4/locales/fa.js +114 -0
  440. package/.output/server/node_modules/zod/v4/locales/fi.js +112 -0
  441. package/.output/server/node_modules/zod/v4/locales/fr-CA.js +107 -0
  442. package/.output/server/node_modules/zod/v4/locales/fr.js +125 -0
  443. package/.output/server/node_modules/zod/v4/locales/he.js +214 -0
  444. package/.output/server/node_modules/zod/v4/locales/hr.js +122 -0
  445. package/.output/server/node_modules/zod/v4/locales/hu.js +108 -0
  446. package/.output/server/node_modules/zod/v4/locales/hy.js +147 -0
  447. package/.output/server/node_modules/zod/v4/locales/id.js +106 -0
  448. package/.output/server/node_modules/zod/v4/locales/index.js +52 -0
  449. package/.output/server/node_modules/zod/v4/locales/is.js +109 -0
  450. package/.output/server/node_modules/zod/v4/locales/it.js +108 -0
  451. package/.output/server/node_modules/zod/v4/locales/ja.js +107 -0
  452. package/.output/server/node_modules/zod/v4/locales/ka.js +112 -0
  453. package/.output/server/node_modules/zod/v4/locales/kh.js +5 -0
  454. package/.output/server/node_modules/zod/v4/locales/km.js +110 -0
  455. package/.output/server/node_modules/zod/v4/locales/ko.js +111 -0
  456. package/.output/server/node_modules/zod/v4/locales/lt.js +203 -0
  457. package/.output/server/node_modules/zod/v4/locales/mk.js +109 -0
  458. package/.output/server/node_modules/zod/v4/locales/ms.js +107 -0
  459. package/.output/server/node_modules/zod/v4/locales/nl.js +110 -0
  460. package/.output/server/node_modules/zod/v4/locales/no.js +108 -0
  461. package/.output/server/node_modules/zod/v4/locales/ota.js +109 -0
  462. package/.output/server/node_modules/zod/v4/locales/package.json +7 -0
  463. package/.output/server/node_modules/zod/v4/locales/pl.js +109 -0
  464. package/.output/server/node_modules/zod/v4/locales/ps.js +114 -0
  465. package/.output/server/node_modules/zod/v4/locales/pt.js +108 -0
  466. package/.output/server/node_modules/zod/v4/locales/ro.js +119 -0
  467. package/.output/server/node_modules/zod/v4/locales/ru.js +156 -0
  468. package/.output/server/node_modules/zod/v4/locales/sl.js +109 -0
  469. package/.output/server/node_modules/zod/v4/locales/sv.js +110 -0
  470. package/.output/server/node_modules/zod/v4/locales/ta.js +110 -0
  471. package/.output/server/node_modules/zod/v4/locales/th.js +110 -0
  472. package/.output/server/node_modules/zod/v4/locales/tr.js +105 -0
  473. package/.output/server/node_modules/zod/v4/locales/ua.js +5 -0
  474. package/.output/server/node_modules/zod/v4/locales/uk.js +108 -0
  475. package/.output/server/node_modules/zod/v4/locales/ur.js +110 -0
  476. package/.output/server/node_modules/zod/v4/locales/uz.js +110 -0
  477. package/.output/server/node_modules/zod/v4/locales/vi.js +108 -0
  478. package/.output/server/node_modules/zod/v4/locales/yo.js +107 -0
  479. package/.output/server/node_modules/zod/v4/locales/zh-CN.js +109 -0
  480. package/.output/server/node_modules/zod/v4/locales/zh-TW.js +107 -0
  481. package/.output/server/package.json +37 -0
  482. package/LICENSE +3 -0
  483. package/README.md +125 -0
  484. package/dist/src/bbox.js +55 -0
  485. package/dist/src/cli.js +255 -0
  486. package/dist/src/config.js +56 -0
  487. package/dist/src/core/fetch-process.js +19 -0
  488. package/dist/src/core/grid-renderer.js +149 -0
  489. package/dist/src/core/lease.js +103 -0
  490. package/dist/src/core/paths.js +13 -0
  491. package/dist/src/core/png.js +192 -0
  492. package/dist/src/core/raster-style.js +33 -0
  493. package/dist/src/core/uomtiles.js +307 -0
  494. package/dist/src/fetcher.js +208 -0
  495. package/dist/src/geographic-grid.js +162 -0
  496. package/dist/src/grid-crawl.js +478 -0
  497. package/dist/src/mask-image.js +16 -0
  498. package/dist/src/official-grid.js +51 -0
  499. package/dist/src/quality.js +30 -0
  500. package/dist/src/token.js +206 -0
  501. package/package.json +68 -0
  502. package/public/apple-touch-icon.png +0 -0
  503. package/public/favicon.ico +0 -0
  504. package/public/favicon.svg +8 -0
  505. package/public/icon-192.png +0 -0
  506. package/public/icon-512.png +0 -0
  507. package/public/site.webmanifest +11 -0
@@ -0,0 +1,1430 @@
1
+ import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import { u as useSeoMeta$1, a as useToast, _ as _sfc_main$5, b as _sfc_main, c as _sfc_main$7$1 } from '../virtual/entry.mjs';
2
+ import { C as CompletedTaskSelect_default, _ as _sfc_main$1, a as _sfc_main$8 } from './Alert-0ngTJXxP.mjs';
3
+ import { _ as _sfc_main$3, a as _sfc_main$4, b as _sfc_main$2$1, M as MapBaseLayerTabs_default } from './MapBaseLayerTabs-4445J6yh.mjs';
4
+ import { _ as _sfc_main$6 } from './FormField-CEUZHcv7.mjs';
5
+ import { F as FileDropZone_default, _ as _sfc_main$2 } from './ScrollArea-BQK3em8b.mjs';
6
+ import { _ as _sfc_main$7 } from './Input-BeNavYXb.mjs';
7
+ import { u as useFileWorkspace, d as displayMapFileName, _ as _sfc_main$9 } from './Empty-CkW3mADt.mjs';
8
+ import { O as OnlineMap_default } from './OnlineMap-CKwiuqUY.mjs';
9
+ import { defineComponent, ref, shallowRef, useTemplateRef, computed, watch, mergeProps, withCtx, unref, isRef, createVNode, toDisplayString, openBlock, createBlock, createCommentVNode, Fragment, renderList, createSlots, useSSRContext } from 'vue';
10
+ import { ssrRenderComponent, ssrInterpolate, ssrRenderList, ssrRenderStyle } from 'vue/server-renderer';
11
+ import 'unhead/plugins';
12
+ import 'unhead/utils';
13
+ import '../routes/renderer.mjs';
14
+ import '../nitro/nitro.mjs';
15
+ import 'node:http';
16
+ import 'node:https';
17
+ import 'node:events';
18
+ import 'node:buffer';
19
+ import 'node:fs';
20
+ import 'node:path';
21
+ import 'node:crypto';
22
+ import 'node:url';
23
+ import '@iconify/utils';
24
+ import 'consola';
25
+ import 'unhead/server';
26
+ import 'unhead/legacy';
27
+ import 'nostics';
28
+ import 'vue-bundle-renderer/runtime';
29
+ import 'devalue';
30
+ import 'fnv1a-64';
31
+ import 'object-identity';
32
+ import 'tailwindcss/colors';
33
+ import './DashboardSidebarToggle-pncTaIJq.mjs';
34
+ import './FocusScope-Cf0lg0zt.mjs';
35
+ import './PopperArrow-Bqfdf2Et.mjs';
36
+ import './esm-Dp2lJXbp.mjs';
37
+
38
+ const HUE_SLOTS = [0, 5, 2, 7, 4, 9, 1, 6, 3, 8];
39
+ const HUE_OFFSET = 28;
40
+ const HUE_STEP = 36;
41
+ function linearRgb(lightness, chroma, hue) {
42
+ const radians = hue * Math.PI / 180;
43
+ const a = chroma * Math.cos(radians);
44
+ const b = chroma * Math.sin(radians);
45
+ const l = (lightness + 0.3963377774 * a + 0.2158037573 * b) ** 3;
46
+ const m = (lightness - 0.1055613458 * a - 0.0638541728 * b) ** 3;
47
+ const s = (lightness - 0.0894841775 * a - 1.291485548 * b) ** 3;
48
+ return {
49
+ red: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
50
+ green: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
51
+ blue: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s
52
+ };
53
+ }
54
+ function inSrgbGamut(color) {
55
+ return color.red >= 0 && color.red <= 1 && color.green >= 0 && color.green <= 1 && color.blue >= 0 && color.blue <= 1;
56
+ }
57
+ function srgbChannel(value) {
58
+ const encoded = value <= 31308e-7 ? 12.92 * value : 1.055 * value ** (1 / 2.4) - 0.055;
59
+ return Math.round(Math.min(1, Math.max(0, encoded)) * 255);
60
+ }
61
+ function oklchToRgb(lightness, chroma, hue) {
62
+ let low = 0;
63
+ let high = Math.max(0, chroma);
64
+ let color = linearRgb(lightness, low, hue);
65
+ for (let iteration = 0; iteration < 20; iteration++) {
66
+ const candidateChroma = (low + high) / 2;
67
+ const candidate = linearRgb(lightness, candidateChroma, hue);
68
+ if (inSrgbGamut(candidate)) {
69
+ low = candidateChroma;
70
+ color = candidate;
71
+ } else high = candidateChroma;
72
+ }
73
+ return [srgbChannel(color.red), srgbChannel(color.green), srgbChannel(color.blue)];
74
+ }
75
+ function rgbHex([red, green, blue]) {
76
+ return `#${[red, green, blue].map((channel) => channel.toString(16).padStart(2, "0")).join("")}`;
77
+ }
78
+ function areaPaletteColor(index) {
79
+ const normalized = (index % HUE_SLOTS.length + HUE_SLOTS.length) % HUE_SLOTS.length;
80
+ const hue = HUE_OFFSET + HUE_SLOTS[normalized] * HUE_STEP;
81
+ const rgb = oklchToRgb(0.68, 0.18, hue);
82
+ return {
83
+ rgb,
84
+ fillHex: rgbHex(rgb),
85
+ accentHex: rgbHex(oklchToRgb(0.46, 0.13, hue))
86
+ };
87
+ }
88
+
89
+ //#region app/composables/nearest-area.ts
90
+ function useNearestArea() {
91
+ const state = ref("idle");
92
+ const areas = shallowRef([]);
93
+ const processedTiles = ref(0);
94
+ const totalTiles = ref(0);
95
+ const foundAreas = ref(0);
96
+ const truncated = ref(false);
97
+ const error = ref(null);
98
+ const progress = computed(() => totalTiles.value === 0 ? 0 : processedTiles.value / totalTiles.value * 100);
99
+ let worker = null;
100
+ function cancel() {
101
+ worker?.terminate();
102
+ worker = null;
103
+ state.value = "idle";
104
+ areas.value = [];
105
+ processedTiles.value = 0;
106
+ totalTiles.value = 0;
107
+ foundAreas.value = 0;
108
+ truncated.value = false;
109
+ error.value = null;
110
+ }
111
+ async function run(request) {
112
+ cancel();
113
+ state.value = "running";
114
+ await new Promise((resolve, reject) => {
115
+ worker = new Worker(new URL("../workers/nearest-area.worker.ts", globalThis._importMeta_.url), { type: "module" });
116
+ worker.onerror = (event) => reject(new Error(event.message || "适飞区分析 Worker 异常退出"));
117
+ worker.onmessage = (event) => {
118
+ const message = event.data;
119
+ if (message.type === "error") {
120
+ reject(new Error(message.message));
121
+ return;
122
+ }
123
+ processedTiles.value = message.processedTiles;
124
+ totalTiles.value = message.totalTiles;
125
+ if (message.type === "progress") {
126
+ foundAreas.value = Math.min(message.foundAreas, request.resultCount);
127
+ return;
128
+ }
129
+ areas.value = message.areas;
130
+ foundAreas.value = Math.min(message.areas.length, request.resultCount);
131
+ truncated.value = message.truncated;
132
+ resolve();
133
+ };
134
+ worker.postMessage({
135
+ type: "search",
136
+ ...request
137
+ });
138
+ }).then(() => {
139
+ state.value = "completed";
140
+ }).catch((cause) => {
141
+ error.value = cause instanceof Error ? cause.message : String(cause);
142
+ state.value = "error";
143
+ throw cause;
144
+ }).finally(() => {
145
+ worker?.terminate();
146
+ worker = null;
147
+ });
148
+ }
149
+ return {
150
+ state,
151
+ areas,
152
+ processedTiles,
153
+ totalTiles,
154
+ foundAreas,
155
+ truncated,
156
+ error,
157
+ progress,
158
+ run,
159
+ cancel
160
+ };
161
+ }
162
+ //#endregion
163
+ //#region app/pages/advanced.vue?vue&type=script&setup=true&lang.ts
164
+ var advanced_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
165
+ __name: "advanced",
166
+ __ssrInlineRender: true,
167
+ setup(__props) {
168
+ useSeoMeta$1({ title: "地图高级功能" });
169
+ const workspace = useFileWorkspace();
170
+ const toast = useToast();
171
+ const stage = ref("select");
172
+ const filename = ref();
173
+ const localFile = shallowRef(null);
174
+ const baseMap = ref("tianditu");
175
+ const feature = ref("nearest-area");
176
+ const map = useTemplateRef("map");
177
+ const locationMode = ref("manual");
178
+ const longitude = ref("");
179
+ const latitude = ref("");
180
+ const locating = ref(false);
181
+ const filterMode = ref("area");
182
+ const areaPreset = ref(1);
183
+ const customAreaSquareKilometers = ref();
184
+ const customWidthKilometers = ref();
185
+ const customHeightKilometers = ref();
186
+ const gapMeters = ref(0);
187
+ const resultCount = ref(5);
188
+ const selectedAreaId = ref(null);
189
+ const { state, areas, processedTiles, totalTiles, foundAreas, truncated, error, progress, run, cancel } = useNearestArea();
190
+ const selectedFile = computed(() => workspace.files.value.find((file) => file.filename === filename.value));
191
+ const selectedSource = computed(() => selectedFile.value || localFile.value);
192
+ const selectedSourceLabel = computed(() => selectedFile.value ? workspace.displayWorkspaceName(selectedFile.value.filename) : localFile.value ? displayMapFileName(localFile.value.filename) : void 0);
193
+ const sourceTileUrl = computed(() => selectedFile.value ? `/api/workspace/${encodeURIComponent(selectedFile.value.filename)}/tile?z={z}&x={x}&y={y}` : localFile.value ? `local:${localFile.value.id}/{z}/{x}/{y}` : void 0);
194
+ const sourceMinZoom = computed(() => selectedFile.value?.minZoom ?? 0);
195
+ const sourceMaxZoom = computed(() => selectedFile.value?.maxZoom ?? (localFile.value?.kind === "uomtiles" ? 18 : 24));
196
+ const featureItems = [{
197
+ label: "寻找离我最近的适飞区",
198
+ value: "nearest-area",
199
+ icon: "i-lucide-map-pin-check"
200
+ }];
201
+ const filterModeItems = [{
202
+ label: "最小面积",
203
+ value: "area"
204
+ }, {
205
+ label: "自定义尺寸",
206
+ value: "size"
207
+ }];
208
+ const areaPresetItems = [
209
+ {
210
+ label: "至少 1 平方千米",
211
+ value: 1
212
+ },
213
+ {
214
+ label: "至少 5 平方千米",
215
+ value: 5
216
+ },
217
+ {
218
+ label: "至少 10 平方千米",
219
+ value: 10
220
+ },
221
+ {
222
+ label: "至少 50 平方千米",
223
+ value: 50
224
+ },
225
+ {
226
+ label: "至少 100 平方千米",
227
+ value: 100
228
+ },
229
+ {
230
+ label: "自定义面积",
231
+ value: "custom"
232
+ }
233
+ ];
234
+ const resultCountItems = [
235
+ 3,
236
+ 5,
237
+ 10
238
+ ].map((value) => ({
239
+ label: `${value} 个`,
240
+ value
241
+ }));
242
+ const locationModeItems = computed(() => [
243
+ {
244
+ label: locating.value ? "定位中" : "我的位置",
245
+ value: "geolocation",
246
+ icon: locating.value ? "i-lucide-loader-circle" : "i-lucide-locate-fixed",
247
+ ui: { leadingIcon: locating.value ? "animate-spin" : void 0 }
248
+ },
249
+ {
250
+ label: "地图选点",
251
+ value: "map",
252
+ icon: "i-lucide-map-pin"
253
+ },
254
+ {
255
+ label: "手动输入",
256
+ value: "manual",
257
+ icon: "i-lucide-keyboard"
258
+ }
259
+ ]);
260
+ const running = computed(() => state.value === "running");
261
+ const parsedLongitude = computed(() => longitude.value.trim() === "" ? null : Number(longitude.value));
262
+ const parsedLatitude = computed(() => latitude.value.trim() === "" ? null : Number(latitude.value));
263
+ const longitudeValid = computed(() => parsedLongitude.value !== null && Number.isFinite(parsedLongitude.value) && parsedLongitude.value >= -180 && parsedLongitude.value <= 180);
264
+ const latitudeValid = computed(() => parsedLatitude.value !== null && Number.isFinite(parsedLatitude.value) && parsedLatitude.value >= -85.05112878 && parsedLatitude.value <= 85.05112878);
265
+ const location = computed(() => longitudeValid.value && latitudeValid.value ? [parsedLongitude.value, parsedLatitude.value] : void 0);
266
+ const longitudeError = computed(() => longitude.value && !longitudeValid.value ? "经度应在 -180 到 180 之间" : void 0);
267
+ const latitudeError = computed(() => latitude.value && !latitudeValid.value ? "纬度应在 -85.051129 到 85.051129 之间" : void 0);
268
+ const minimumAreaSquareMeters = computed(() => filterMode.value === "area" ? (areaPreset.value === "custom" ? customAreaSquareKilometers.value || 0 : areaPreset.value) * 1e6 : 0);
269
+ const minimumWidthMeters = computed(() => filterMode.value === "size" ? (customWidthKilometers.value || 0) * 1e3 : 0);
270
+ const minimumHeightMeters = computed(() => filterMode.value === "size" ? (customHeightKilometers.value || 0) * 1e3 : 0);
271
+ const criteriaValid = computed(() => filterMode.value === "area" ? areaPreset.value !== "custom" || Number(customAreaSquareKilometers.value) >= 1 : Number(customWidthKilometers.value) > 0 && Number(customHeightKilometers.value) > 0);
272
+ const gapValid = computed(() => Number.isFinite(Number(gapMeters.value)) && Number(gapMeters.value) >= 0);
273
+ watch(filename, (value) => {
274
+ if (value) localFile.value = null;
275
+ });
276
+ watch(filename, () => {
277
+ cancel();
278
+ selectedAreaId.value = null;
279
+ });
280
+ watch([
281
+ filterMode,
282
+ areaPreset,
283
+ customAreaSquareKilometers,
284
+ customWidthKilometers,
285
+ customHeightKilometers,
286
+ gapMeters,
287
+ resultCount
288
+ ], () => {
289
+ cancel();
290
+ selectedAreaId.value = null;
291
+ });
292
+ function selectLocalFile(file) {
293
+ const kind = file.name.split(".").pop()?.toLowerCase();
294
+ if (kind !== "uomtiles" && kind !== "mbtiles" && kind !== "pmtiles") {
295
+ toast.add({
296
+ title: "不支持的地图文件",
297
+ description: "请选择 .uomtiles、.mbtiles 或 .pmtiles。",
298
+ color: "error",
299
+ icon: "i-lucide-file-x-2"
300
+ });
301
+ return;
302
+ }
303
+ filename.value = void 0;
304
+ localFile.value = {
305
+ id: `advanced-${crypto.randomUUID()}`,
306
+ file,
307
+ filename: file.name,
308
+ kind
309
+ };
310
+ }
311
+ function openMap() {
312
+ if (!selectedSource.value) return;
313
+ stage.value = "use";
314
+ }
315
+ function chooseAgain() {
316
+ cancel();
317
+ selectedAreaId.value = null;
318
+ stage.value = "select";
319
+ }
320
+ function resetLocationResults() {
321
+ cancel();
322
+ selectedAreaId.value = null;
323
+ }
324
+ function setLocation(value, mode) {
325
+ if (mode === "geolocation" && locationMode.value !== "geolocation") return;
326
+ locating.value = false;
327
+ applyLocation(value, mode);
328
+ }
329
+ function activateGeolocation() {
330
+ resetLocationResults();
331
+ locationMode.value = "geolocation";
332
+ }
333
+ function applyLocation(value, mode) {
334
+ resetLocationResults();
335
+ locationMode.value = mode;
336
+ longitude.value = value[0].toFixed(6);
337
+ latitude.value = value[1].toFixed(6);
338
+ }
339
+ function setManualLongitude(value) {
340
+ map.value?.stopActiveLocationTracking();
341
+ locating.value = false;
342
+ resetLocationResults();
343
+ locationMode.value = "manual";
344
+ longitude.value = String(value);
345
+ }
346
+ function setManualLatitude(value) {
347
+ map.value?.stopActiveLocationTracking();
348
+ locating.value = false;
349
+ resetLocationResults();
350
+ locationMode.value = "manual";
351
+ latitude.value = String(value);
352
+ }
353
+ function selectLocationMode(value) {
354
+ if (value !== "geolocation" && value !== "map" && value !== "manual") return;
355
+ if (value !== "geolocation") map.value?.stopActiveLocationTracking();
356
+ locating.value = false;
357
+ resetLocationResults();
358
+ locationMode.value = value;
359
+ if (value === "geolocation" && !map.value?.locate()) toast.add({
360
+ title: "定位功能尚未就绪",
361
+ color: "error",
362
+ icon: "i-lucide-map-pin-off"
363
+ });
364
+ }
365
+ function setLocationLoading(value) {
366
+ locating.value = value;
367
+ }
368
+ function showLocationError(code) {
369
+ locating.value = false;
370
+ toast.add({
371
+ title: code === 1 ? "定位权限未开启" : "无法获取当前位置",
372
+ color: "error",
373
+ icon: "i-lucide-map-pin-off"
374
+ });
375
+ }
376
+ async function search() {
377
+ if (!selectedSource.value || !location.value) return;
378
+ selectedAreaId.value = null;
379
+ try {
380
+ await run({
381
+ source: localFile.value ? {
382
+ kind: "local",
383
+ file: localFile.value.file
384
+ } : {
385
+ kind: "workspace",
386
+ filename: filename.value
387
+ },
388
+ longitude: location.value[0],
389
+ latitude: location.value[1],
390
+ minimumAreaSquareMeters: minimumAreaSquareMeters.value,
391
+ minimumWidthMeters: minimumWidthMeters.value,
392
+ minimumHeightMeters: minimumHeightMeters.value,
393
+ gapMeters: Number(gapMeters.value),
394
+ resultCount: resultCount.value
395
+ });
396
+ } catch {}
397
+ }
398
+ function formatDistance(meters) {
399
+ return meters < 1e3 ? `${Math.round(meters)} 米` : `${(meters / 1e3).toFixed(meters < 1e4 ? 1 : 0)} 公里`;
400
+ }
401
+ function formatArea(squareMeters) {
402
+ return `${formatSignificant(squareMeters / 1e6)} km²`;
403
+ }
404
+ function formatDimension(meters) {
405
+ return `${formatSignificant(meters / 1e3)} km`;
406
+ }
407
+ function formatSignificant(value) {
408
+ const absolute = Math.abs(value);
409
+ const digits = absolute >= 100 ? 0 : absolute >= 10 ? 1 : 2;
410
+ return value.toFixed(digits).replace(/(\.\d*?[1-9])0+$|\.0+$/, "$1").replace(/\.$/, "");
411
+ }
412
+ return (_ctx, _push, _parent, _attrs) => {
413
+ const _component_UDashboardPanel = _sfc_main$3;
414
+ const _component_UDashboardNavbar = _sfc_main$2$1;
415
+ const _component_UButton = _sfc_main;
416
+ const _component_MapBaseLayerTabs = MapBaseLayerTabs_default;
417
+ const _component_UIcon = _sfc_main$5;
418
+ const _component_FileDropZone = FileDropZone_default;
419
+ const _component_CompletedTaskSelect = CompletedTaskSelect_default;
420
+ const _component_OnlineMap = OnlineMap_default;
421
+ const _component_USelectMenu = _sfc_main$1;
422
+ const _component_UScrollArea = _sfc_main$2;
423
+ const _component_UTabs = _sfc_main$4;
424
+ const _component_UFormField = _sfc_main$6;
425
+ const _component_UInput = _sfc_main$7;
426
+ const _component_UProgress = _sfc_main$7$1;
427
+ const _component_UAlert = _sfc_main$8;
428
+ const _component_UEmpty = _sfc_main$9;
429
+ _push(ssrRenderComponent(_component_UDashboardPanel, mergeProps({
430
+ id: "advanced-map",
431
+ class: "min-w-0",
432
+ ui: { body: "gap-0 overflow-hidden p-0 sm:gap-0 sm:p-0" }
433
+ }, _attrs), {
434
+ header: withCtx((_, _push, _parent, _scopeId) => {
435
+ if (_push) _push(ssrRenderComponent(_component_UDashboardNavbar, { title: "地图高级功能" }, createSlots({ _: 2 }, [unref(stage) === "use" ? {
436
+ name: "right",
437
+ fn: withCtx((_, _push, _parent, _scopeId) => {
438
+ if (_push) {
439
+ _push(ssrRenderComponent(_component_UButton, {
440
+ icon: "i-lucide-files",
441
+ label: "重新选择",
442
+ color: "neutral",
443
+ variant: "outline",
444
+ onClick: chooseAgain
445
+ }, null, _parent, _scopeId));
446
+ _push(ssrRenderComponent(_component_MapBaseLayerTabs, {
447
+ modelValue: unref(baseMap),
448
+ "onUpdate:modelValue": ($event) => isRef(baseMap) ? baseMap.value = $event : null
449
+ }, null, _parent, _scopeId));
450
+ } else return [createVNode(_component_UButton, {
451
+ icon: "i-lucide-files",
452
+ label: "重新选择",
453
+ color: "neutral",
454
+ variant: "outline",
455
+ onClick: chooseAgain
456
+ }), createVNode(_component_MapBaseLayerTabs, {
457
+ modelValue: unref(baseMap),
458
+ "onUpdate:modelValue": ($event) => isRef(baseMap) ? baseMap.value = $event : null
459
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])];
460
+ }),
461
+ key: "0"
462
+ } : void 0]), _parent, _scopeId));
463
+ else return [createVNode(_component_UDashboardNavbar, { title: "地图高级功能" }, createSlots({ _: 2 }, [unref(stage) === "use" ? {
464
+ name: "right",
465
+ fn: withCtx(() => [createVNode(_component_UButton, {
466
+ icon: "i-lucide-files",
467
+ label: "重新选择",
468
+ color: "neutral",
469
+ variant: "outline",
470
+ onClick: chooseAgain
471
+ }), createVNode(_component_MapBaseLayerTabs, {
472
+ modelValue: unref(baseMap),
473
+ "onUpdate:modelValue": ($event) => isRef(baseMap) ? baseMap.value = $event : null
474
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
475
+ key: "0"
476
+ } : void 0]), 1024)];
477
+ }),
478
+ body: withCtx((_, _push, _parent, _scopeId) => {
479
+ if (_push) {
480
+ if (!unref(workspace).ready.value) {
481
+ _push(`<div class="grid min-h-[32rem] flex-1 place-items-center"${_scopeId}><div class="flex flex-col items-center gap-3 text-sm text-muted"${_scopeId}>`);
482
+ _push(ssrRenderComponent(_component_UIcon, {
483
+ name: "i-lucide-loader-circle",
484
+ class: "size-5 animate-spin text-primary"
485
+ }, null, _parent, _scopeId));
486
+ _push(`<span${_scopeId}>加载地图文件</span></div></div>`);
487
+ } else if (unref(stage) === "select") {
488
+ _push(`<div class="grid min-h-[32rem] flex-1 place-items-center overflow-y-auto p-6"${_scopeId}><div class="w-full max-w-2xl space-y-4"${_scopeId}>`);
489
+ _push(ssrRenderComponent(_component_FileDropZone, {
490
+ accept: ".uomtiles,.mbtiles,.pmtiles",
491
+ title: "选择地图文件",
492
+ "file-name": unref(selectedSourceLabel),
493
+ onSelect: selectLocalFile
494
+ }, null, _parent, _scopeId));
495
+ _push(ssrRenderComponent(_component_CompletedTaskSelect, {
496
+ modelValue: unref(filename),
497
+ "onUpdate:modelValue": ($event) => isRef(filename) ? filename.value = $event : null,
498
+ class: "w-full"
499
+ }, null, _parent, _scopeId));
500
+ _push(`<div class="flex justify-end"${_scopeId}>`);
501
+ _push(ssrRenderComponent(_component_UButton, {
502
+ icon: "i-lucide-map",
503
+ label: "打开地图",
504
+ size: "lg",
505
+ disabled: !unref(selectedSource),
506
+ onClick: openMap
507
+ }, null, _parent, _scopeId));
508
+ _push(`</div></div></div>`);
509
+ } else if (unref(selectedSource)) {
510
+ _push(`<div class="grid min-h-0 flex-1 xl:grid-cols-[minmax(0,1fr)_24rem]"${_scopeId}><div class="relative min-h-[520px] border-r border-default"${_scopeId}>`);
511
+ _push(ssrRenderComponent(_component_OnlineMap, {
512
+ ref_key: "map",
513
+ ref: map,
514
+ key: unref(selectedFile)?.filename || unref(localFile)?.id,
515
+ "tile-url": unref(sourceTileUrl),
516
+ "local-sources": unref(localFile) ? [{
517
+ id: unref(localFile).id,
518
+ file: unref(localFile).file
519
+ }] : [],
520
+ "base-map": unref(baseMap),
521
+ "min-zoom": unref(sourceMinZoom),
522
+ "max-zoom": unref(sourceMaxZoom),
523
+ "map-min-zoom": 3,
524
+ "map-max-zoom": 24,
525
+ "initial-zoom": 9,
526
+ center: unref(location) || [116.4, 39.9],
527
+ location: unref(location),
528
+ areas: unref(areas),
529
+ "selected-area-id": unref(selectedAreaId),
530
+ "enable-location-picking": unref(locationMode) === "map",
531
+ "enable-area-analysis": "",
532
+ "raster-resampling": "nearest",
533
+ onLocationActivate: activateGeolocation,
534
+ onLocationChange: setLocation,
535
+ onLocationLoading: setLocationLoading,
536
+ onLocationError: showLocationError
537
+ }, null, _parent, _scopeId));
538
+ _push(`</div><aside class="flex min-h-0 flex-col overflow-hidden bg-default"${_scopeId}><div class="border-b border-default p-4"${_scopeId}>`);
539
+ _push(ssrRenderComponent(_component_USelectMenu, {
540
+ modelValue: unref(feature),
541
+ "onUpdate:modelValue": ($event) => isRef(feature) ? feature.value = $event : null,
542
+ items: featureItems,
543
+ "value-key": "value",
544
+ "label-key": "label",
545
+ class: "w-full"
546
+ }, null, _parent, _scopeId));
547
+ _push(`</div>`);
548
+ _push(ssrRenderComponent(_component_UScrollArea, { class: "min-h-0 flex-1" }, {
549
+ default: withCtx((_, _push, _parent, _scopeId) => {
550
+ if (_push) {
551
+ _push(`<div class="space-y-6 p-5"${_scopeId}><section class="space-y-3"${_scopeId}>`);
552
+ _push(ssrRenderComponent(_component_UTabs, {
553
+ "model-value": unref(locationMode),
554
+ items: unref(locationModeItems),
555
+ content: false,
556
+ size: "sm",
557
+ class: "w-full",
558
+ ui: {
559
+ list: "grid grid-cols-3",
560
+ trigger: "px-2"
561
+ },
562
+ "onUpdate:modelValue": selectLocationMode
563
+ }, null, _parent, _scopeId));
564
+ _push(`<div class="grid grid-cols-2 gap-3"${_scopeId}>`);
565
+ _push(ssrRenderComponent(_component_UFormField, {
566
+ label: "经度",
567
+ error: unref(longitudeError)
568
+ }, {
569
+ default: withCtx((_, _push, _parent, _scopeId) => {
570
+ if (_push) _push(ssrRenderComponent(_component_UInput, {
571
+ "model-value": unref(longitude),
572
+ type: "number",
573
+ inputmode: "decimal",
574
+ min: "-180",
575
+ max: "180",
576
+ step: "0.000001",
577
+ placeholder: "116.400000",
578
+ class: "w-full",
579
+ "onUpdate:modelValue": setManualLongitude
580
+ }, null, _parent, _scopeId));
581
+ else return [createVNode(_component_UInput, {
582
+ "model-value": unref(longitude),
583
+ type: "number",
584
+ inputmode: "decimal",
585
+ min: "-180",
586
+ max: "180",
587
+ step: "0.000001",
588
+ placeholder: "116.400000",
589
+ class: "w-full",
590
+ "onUpdate:modelValue": setManualLongitude
591
+ }, null, 8, ["model-value"])];
592
+ }),
593
+ _: 1
594
+ }, _parent, _scopeId));
595
+ _push(ssrRenderComponent(_component_UFormField, {
596
+ label: "纬度",
597
+ error: unref(latitudeError)
598
+ }, {
599
+ default: withCtx((_, _push, _parent, _scopeId) => {
600
+ if (_push) _push(ssrRenderComponent(_component_UInput, {
601
+ "model-value": unref(latitude),
602
+ type: "number",
603
+ inputmode: "decimal",
604
+ min: "-85.05112878",
605
+ max: "85.05112878",
606
+ step: "0.000001",
607
+ placeholder: "39.900000",
608
+ class: "w-full",
609
+ "onUpdate:modelValue": setManualLatitude
610
+ }, null, _parent, _scopeId));
611
+ else return [createVNode(_component_UInput, {
612
+ "model-value": unref(latitude),
613
+ type: "number",
614
+ inputmode: "decimal",
615
+ min: "-85.05112878",
616
+ max: "85.05112878",
617
+ step: "0.000001",
618
+ placeholder: "39.900000",
619
+ class: "w-full",
620
+ "onUpdate:modelValue": setManualLatitude
621
+ }, null, 8, ["model-value"])];
622
+ }),
623
+ _: 1
624
+ }, _parent, _scopeId));
625
+ _push(`</div>`);
626
+ if (unref(locating)) _push(`<span class="sr-only" role="status"${_scopeId}>正在获取当前位置</span>`);
627
+ else _push(`<!---->`);
628
+ _push(`</section><section class="space-y-3"${_scopeId}><div class="grid grid-cols-2 gap-3"${_scopeId}>`);
629
+ _push(ssrRenderComponent(_component_UFormField, { label: "筛选方式" }, {
630
+ default: withCtx((_, _push, _parent, _scopeId) => {
631
+ if (_push) _push(ssrRenderComponent(_component_USelectMenu, {
632
+ modelValue: unref(filterMode),
633
+ "onUpdate:modelValue": ($event) => isRef(filterMode) ? filterMode.value = $event : null,
634
+ items: filterModeItems,
635
+ "value-key": "value",
636
+ "label-key": "label",
637
+ class: "w-full"
638
+ }, null, _parent, _scopeId));
639
+ else return [createVNode(_component_USelectMenu, {
640
+ modelValue: unref(filterMode),
641
+ "onUpdate:modelValue": ($event) => isRef(filterMode) ? filterMode.value = $event : null,
642
+ items: filterModeItems,
643
+ "value-key": "value",
644
+ "label-key": "label",
645
+ class: "w-full"
646
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])];
647
+ }),
648
+ _: 1
649
+ }, _parent, _scopeId));
650
+ _push(ssrRenderComponent(_component_UFormField, { label: "结果数量" }, {
651
+ default: withCtx((_, _push, _parent, _scopeId) => {
652
+ if (_push) _push(ssrRenderComponent(_component_USelectMenu, {
653
+ modelValue: unref(resultCount),
654
+ "onUpdate:modelValue": ($event) => isRef(resultCount) ? resultCount.value = $event : null,
655
+ items: unref(resultCountItems),
656
+ "value-key": "value",
657
+ "label-key": "label",
658
+ class: "w-full"
659
+ }, null, _parent, _scopeId));
660
+ else return [createVNode(_component_USelectMenu, {
661
+ modelValue: unref(resultCount),
662
+ "onUpdate:modelValue": ($event) => isRef(resultCount) ? resultCount.value = $event : null,
663
+ items: unref(resultCountItems),
664
+ "value-key": "value",
665
+ "label-key": "label",
666
+ class: "w-full"
667
+ }, null, 8, [
668
+ "modelValue",
669
+ "onUpdate:modelValue",
670
+ "items"
671
+ ])];
672
+ }),
673
+ _: 1
674
+ }, _parent, _scopeId));
675
+ _push(`</div>`);
676
+ if (unref(filterMode) === "area") {
677
+ _push(`<!--[-->`);
678
+ _push(ssrRenderComponent(_component_UFormField, { label: "最小面积" }, {
679
+ default: withCtx((_, _push, _parent, _scopeId) => {
680
+ if (_push) _push(ssrRenderComponent(_component_USelectMenu, {
681
+ modelValue: unref(areaPreset),
682
+ "onUpdate:modelValue": ($event) => isRef(areaPreset) ? areaPreset.value = $event : null,
683
+ items: areaPresetItems,
684
+ "value-key": "value",
685
+ "label-key": "label",
686
+ class: "w-full"
687
+ }, null, _parent, _scopeId));
688
+ else return [createVNode(_component_USelectMenu, {
689
+ modelValue: unref(areaPreset),
690
+ "onUpdate:modelValue": ($event) => isRef(areaPreset) ? areaPreset.value = $event : null,
691
+ items: areaPresetItems,
692
+ "value-key": "value",
693
+ "label-key": "label",
694
+ class: "w-full"
695
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])];
696
+ }),
697
+ _: 1
698
+ }, _parent, _scopeId));
699
+ if (unref(areaPreset) === "custom") _push(ssrRenderComponent(_component_UFormField, { label: "自定义面积(平方千米)" }, {
700
+ default: withCtx((_, _push, _parent, _scopeId) => {
701
+ if (_push) _push(ssrRenderComponent(_component_UInput, {
702
+ modelValue: unref(customAreaSquareKilometers),
703
+ "onUpdate:modelValue": ($event) => isRef(customAreaSquareKilometers) ? customAreaSquareKilometers.value = $event : null,
704
+ modelModifiers: { number: true },
705
+ type: "number",
706
+ min: "1",
707
+ step: "0.1",
708
+ placeholder: "至少 1",
709
+ class: "w-full"
710
+ }, null, _parent, _scopeId));
711
+ else return [createVNode(_component_UInput, {
712
+ modelValue: unref(customAreaSquareKilometers),
713
+ "onUpdate:modelValue": ($event) => isRef(customAreaSquareKilometers) ? customAreaSquareKilometers.value = $event : null,
714
+ modelModifiers: { number: true },
715
+ type: "number",
716
+ min: "1",
717
+ step: "0.1",
718
+ placeholder: "至少 1",
719
+ class: "w-full"
720
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])];
721
+ }),
722
+ _: 1
723
+ }, _parent, _scopeId));
724
+ else _push(`<!---->`);
725
+ _push(`<!--]-->`);
726
+ } else {
727
+ _push(`<div class="grid grid-cols-2 gap-3"${_scopeId}>`);
728
+ _push(ssrRenderComponent(_component_UFormField, { label: "最小宽(公里)" }, {
729
+ default: withCtx((_, _push, _parent, _scopeId) => {
730
+ if (_push) _push(ssrRenderComponent(_component_UInput, {
731
+ modelValue: unref(customWidthKilometers),
732
+ "onUpdate:modelValue": ($event) => isRef(customWidthKilometers) ? customWidthKilometers.value = $event : null,
733
+ modelModifiers: { number: true },
734
+ type: "number",
735
+ min: "0.1",
736
+ step: "0.1",
737
+ placeholder: "例如 2",
738
+ class: "w-full"
739
+ }, null, _parent, _scopeId));
740
+ else return [createVNode(_component_UInput, {
741
+ modelValue: unref(customWidthKilometers),
742
+ "onUpdate:modelValue": ($event) => isRef(customWidthKilometers) ? customWidthKilometers.value = $event : null,
743
+ modelModifiers: { number: true },
744
+ type: "number",
745
+ min: "0.1",
746
+ step: "0.1",
747
+ placeholder: "例如 2",
748
+ class: "w-full"
749
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])];
750
+ }),
751
+ _: 1
752
+ }, _parent, _scopeId));
753
+ _push(ssrRenderComponent(_component_UFormField, { label: "最小高(公里)" }, {
754
+ default: withCtx((_, _push, _parent, _scopeId) => {
755
+ if (_push) _push(ssrRenderComponent(_component_UInput, {
756
+ modelValue: unref(customHeightKilometers),
757
+ "onUpdate:modelValue": ($event) => isRef(customHeightKilometers) ? customHeightKilometers.value = $event : null,
758
+ modelModifiers: { number: true },
759
+ type: "number",
760
+ min: "0.1",
761
+ step: "0.1",
762
+ placeholder: "例如 2",
763
+ class: "w-full"
764
+ }, null, _parent, _scopeId));
765
+ else return [createVNode(_component_UInput, {
766
+ modelValue: unref(customHeightKilometers),
767
+ "onUpdate:modelValue": ($event) => isRef(customHeightKilometers) ? customHeightKilometers.value = $event : null,
768
+ modelModifiers: { number: true },
769
+ type: "number",
770
+ min: "0.1",
771
+ step: "0.1",
772
+ placeholder: "例如 2",
773
+ class: "w-full"
774
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])];
775
+ }),
776
+ _: 1
777
+ }, _parent, _scopeId));
778
+ _push(`</div>`);
779
+ }
780
+ _push(ssrRenderComponent(_component_UFormField, {
781
+ label: "区域合并间隙(米)",
782
+ description: "边缘间隔不超过此值的区域合并"
783
+ }, {
784
+ default: withCtx((_, _push, _parent, _scopeId) => {
785
+ if (_push) _push(ssrRenderComponent(_component_UInput, {
786
+ modelValue: unref(gapMeters),
787
+ "onUpdate:modelValue": ($event) => isRef(gapMeters) ? gapMeters.value = $event : null,
788
+ modelModifiers: { number: true },
789
+ type: "number",
790
+ min: "0",
791
+ step: "1",
792
+ placeholder: "0",
793
+ class: "w-full"
794
+ }, null, _parent, _scopeId));
795
+ else return [createVNode(_component_UInput, {
796
+ modelValue: unref(gapMeters),
797
+ "onUpdate:modelValue": ($event) => isRef(gapMeters) ? gapMeters.value = $event : null,
798
+ modelModifiers: { number: true },
799
+ type: "number",
800
+ min: "0",
801
+ step: "1",
802
+ placeholder: "0",
803
+ class: "w-full"
804
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])];
805
+ }),
806
+ _: 1
807
+ }, _parent, _scopeId));
808
+ _push(`</section>`);
809
+ _push(ssrRenderComponent(_component_UButton, {
810
+ icon: "i-lucide-search",
811
+ label: "寻找适飞区",
812
+ block: "",
813
+ loading: unref(running),
814
+ disabled: !unref(location) || !unref(criteriaValid) || !unref(gapValid) || unref(running),
815
+ onClick: search
816
+ }, null, _parent, _scopeId));
817
+ if (unref(running)) {
818
+ _push(`<section class="space-y-2"${_scopeId}>`);
819
+ _push(ssrRenderComponent(_component_UProgress, {
820
+ "model-value": unref(progress),
821
+ max: 100,
822
+ size: "sm"
823
+ }, null, _parent, _scopeId));
824
+ _push(`<div class="flex items-center justify-between text-xs text-muted"${_scopeId}><span${_scopeId}>${ssrInterpolate(unref(processedTiles))} / ${ssrInterpolate(unref(totalTiles))} 瓦片</span><span${_scopeId}>已发现 ${ssrInterpolate(unref(foundAreas))} 个</span></div></section>`);
825
+ } else if (unref(state) === "error") _push(ssrRenderComponent(_component_UAlert, {
826
+ color: "error",
827
+ icon: "i-lucide-circle-x",
828
+ title: "分析失败",
829
+ description: unref(error) || void 0
830
+ }, null, _parent, _scopeId));
831
+ else if (unref(state) === "completed" && unref(truncated)) _push(ssrRenderComponent(_component_UAlert, {
832
+ color: "warning",
833
+ icon: "i-lucide-triangle-alert",
834
+ title: "结果可能不完整",
835
+ description: "已达到本次分析的瓦片上限。"
836
+ }, null, _parent, _scopeId));
837
+ else _push(`<!---->`);
838
+ if (unref(state) === "completed") {
839
+ _push(`<section class="space-y-2"${_scopeId}><!--[-->`);
840
+ ssrRenderList(unref(areas), (area, index) => {
841
+ _push(ssrRenderComponent(_component_UButton, {
842
+ key: area.id,
843
+ color: "neutral",
844
+ variant: unref(selectedAreaId) === area.id ? "soft" : "ghost",
845
+ block: "",
846
+ ui: {
847
+ base: "h-auto justify-start px-3 py-3 text-left",
848
+ label: "w-full"
849
+ },
850
+ onClick: ($event) => selectedAreaId.value = area.id
851
+ }, {
852
+ default: withCtx((_, _push, _parent, _scopeId) => {
853
+ if (_push) {
854
+ _push(`<span class="flex w-full items-center gap-3"${_scopeId}><span class="grid size-7 shrink-0 place-items-center text-xs font-semibold" style="${ssrRenderStyle({
855
+ backgroundColor: unref(areaPaletteColor)(index).fillHex,
856
+ color: unref(areaPaletteColor)(index).accentHex
857
+ })}"${_scopeId}>${ssrInterpolate(index + 1)}</span><span class="min-w-0 flex-1"${_scopeId}><span class="block text-sm font-medium text-highlighted"${_scopeId}>${ssrInterpolate(formatDistance(area.distanceMeters))}</span><span class="mt-0.5 block text-xs text-muted"${_scopeId}>${ssrInterpolate(formatArea(area.areaSquareMeters))}</span><span class="mt-0.5 block text-xs text-muted"${_scopeId}>宽 ${ssrInterpolate(formatDimension(area.widthMeters))} · 高 ${ssrInterpolate(formatDimension(area.heightMeters))}</span></span>`);
858
+ _push(ssrRenderComponent(_component_UIcon, {
859
+ name: "i-lucide-chevron-right",
860
+ class: "size-4 shrink-0 text-muted"
861
+ }, null, _parent, _scopeId));
862
+ _push(`</span>`);
863
+ } else return [createVNode("span", { class: "flex w-full items-center gap-3" }, [
864
+ createVNode("span", {
865
+ class: "grid size-7 shrink-0 place-items-center text-xs font-semibold",
866
+ style: {
867
+ backgroundColor: unref(areaPaletteColor)(index).fillHex,
868
+ color: unref(areaPaletteColor)(index).accentHex
869
+ }
870
+ }, toDisplayString(index + 1), 5),
871
+ createVNode("span", { class: "min-w-0 flex-1" }, [
872
+ createVNode("span", { class: "block text-sm font-medium text-highlighted" }, toDisplayString(formatDistance(area.distanceMeters)), 1),
873
+ createVNode("span", { class: "mt-0.5 block text-xs text-muted" }, toDisplayString(formatArea(area.areaSquareMeters)), 1),
874
+ createVNode("span", { class: "mt-0.5 block text-xs text-muted" }, "宽 " + toDisplayString(formatDimension(area.widthMeters)) + " · 高 " + toDisplayString(formatDimension(area.heightMeters)), 1)
875
+ ]),
876
+ createVNode(_component_UIcon, {
877
+ name: "i-lucide-chevron-right",
878
+ class: "size-4 shrink-0 text-muted"
879
+ })
880
+ ])];
881
+ }),
882
+ _: 2
883
+ }, _parent, _scopeId));
884
+ });
885
+ _push(`<!--]-->`);
886
+ if (unref(areas).length === 0) _push(ssrRenderComponent(_component_UEmpty, {
887
+ icon: "i-lucide-map-pin-x",
888
+ title: "未找到符合条件的适飞区"
889
+ }, null, _parent, _scopeId));
890
+ else _push(`<!---->`);
891
+ _push(`</section>`);
892
+ } else _push(`<!---->`);
893
+ _push(`</div>`);
894
+ } else return [createVNode("div", { class: "space-y-6 p-5" }, [
895
+ createVNode("section", { class: "space-y-3" }, [
896
+ createVNode(_component_UTabs, {
897
+ "model-value": unref(locationMode),
898
+ items: unref(locationModeItems),
899
+ content: false,
900
+ size: "sm",
901
+ class: "w-full",
902
+ ui: {
903
+ list: "grid grid-cols-3",
904
+ trigger: "px-2"
905
+ },
906
+ "onUpdate:modelValue": selectLocationMode
907
+ }, null, 8, ["model-value", "items"]),
908
+ createVNode("div", { class: "grid grid-cols-2 gap-3" }, [createVNode(_component_UFormField, {
909
+ label: "经度",
910
+ error: unref(longitudeError)
911
+ }, {
912
+ default: withCtx(() => [createVNode(_component_UInput, {
913
+ "model-value": unref(longitude),
914
+ type: "number",
915
+ inputmode: "decimal",
916
+ min: "-180",
917
+ max: "180",
918
+ step: "0.000001",
919
+ placeholder: "116.400000",
920
+ class: "w-full",
921
+ "onUpdate:modelValue": setManualLongitude
922
+ }, null, 8, ["model-value"])]),
923
+ _: 1
924
+ }, 8, ["error"]), createVNode(_component_UFormField, {
925
+ label: "纬度",
926
+ error: unref(latitudeError)
927
+ }, {
928
+ default: withCtx(() => [createVNode(_component_UInput, {
929
+ "model-value": unref(latitude),
930
+ type: "number",
931
+ inputmode: "decimal",
932
+ min: "-85.05112878",
933
+ max: "85.05112878",
934
+ step: "0.000001",
935
+ placeholder: "39.900000",
936
+ class: "w-full",
937
+ "onUpdate:modelValue": setManualLatitude
938
+ }, null, 8, ["model-value"])]),
939
+ _: 1
940
+ }, 8, ["error"])]),
941
+ unref(locating) ? (openBlock(), createBlock("span", {
942
+ key: 0,
943
+ class: "sr-only",
944
+ role: "status"
945
+ }, "正在获取当前位置")) : createCommentVNode("", true)
946
+ ]),
947
+ createVNode("section", { class: "space-y-3" }, [
948
+ createVNode("div", { class: "grid grid-cols-2 gap-3" }, [createVNode(_component_UFormField, { label: "筛选方式" }, {
949
+ default: withCtx(() => [createVNode(_component_USelectMenu, {
950
+ modelValue: unref(filterMode),
951
+ "onUpdate:modelValue": ($event) => isRef(filterMode) ? filterMode.value = $event : null,
952
+ items: filterModeItems,
953
+ "value-key": "value",
954
+ "label-key": "label",
955
+ class: "w-full"
956
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
957
+ _: 1
958
+ }), createVNode(_component_UFormField, { label: "结果数量" }, {
959
+ default: withCtx(() => [createVNode(_component_USelectMenu, {
960
+ modelValue: unref(resultCount),
961
+ "onUpdate:modelValue": ($event) => isRef(resultCount) ? resultCount.value = $event : null,
962
+ items: unref(resultCountItems),
963
+ "value-key": "value",
964
+ "label-key": "label",
965
+ class: "w-full"
966
+ }, null, 8, [
967
+ "modelValue",
968
+ "onUpdate:modelValue",
969
+ "items"
970
+ ])]),
971
+ _: 1
972
+ })]),
973
+ unref(filterMode) === "area" ? (openBlock(), createBlock(Fragment, { key: 0 }, [createVNode(_component_UFormField, { label: "最小面积" }, {
974
+ default: withCtx(() => [createVNode(_component_USelectMenu, {
975
+ modelValue: unref(areaPreset),
976
+ "onUpdate:modelValue": ($event) => isRef(areaPreset) ? areaPreset.value = $event : null,
977
+ items: areaPresetItems,
978
+ "value-key": "value",
979
+ "label-key": "label",
980
+ class: "w-full"
981
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
982
+ _: 1
983
+ }), unref(areaPreset) === "custom" ? (openBlock(), createBlock(_component_UFormField, {
984
+ key: 0,
985
+ label: "自定义面积(平方千米)"
986
+ }, {
987
+ default: withCtx(() => [createVNode(_component_UInput, {
988
+ modelValue: unref(customAreaSquareKilometers),
989
+ "onUpdate:modelValue": ($event) => isRef(customAreaSquareKilometers) ? customAreaSquareKilometers.value = $event : null,
990
+ modelModifiers: { number: true },
991
+ type: "number",
992
+ min: "1",
993
+ step: "0.1",
994
+ placeholder: "至少 1",
995
+ class: "w-full"
996
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
997
+ _: 1
998
+ })) : createCommentVNode("", true)], 64)) : (openBlock(), createBlock("div", {
999
+ key: 1,
1000
+ class: "grid grid-cols-2 gap-3"
1001
+ }, [createVNode(_component_UFormField, { label: "最小宽(公里)" }, {
1002
+ default: withCtx(() => [createVNode(_component_UInput, {
1003
+ modelValue: unref(customWidthKilometers),
1004
+ "onUpdate:modelValue": ($event) => isRef(customWidthKilometers) ? customWidthKilometers.value = $event : null,
1005
+ modelModifiers: { number: true },
1006
+ type: "number",
1007
+ min: "0.1",
1008
+ step: "0.1",
1009
+ placeholder: "例如 2",
1010
+ class: "w-full"
1011
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1012
+ _: 1
1013
+ }), createVNode(_component_UFormField, { label: "最小高(公里)" }, {
1014
+ default: withCtx(() => [createVNode(_component_UInput, {
1015
+ modelValue: unref(customHeightKilometers),
1016
+ "onUpdate:modelValue": ($event) => isRef(customHeightKilometers) ? customHeightKilometers.value = $event : null,
1017
+ modelModifiers: { number: true },
1018
+ type: "number",
1019
+ min: "0.1",
1020
+ step: "0.1",
1021
+ placeholder: "例如 2",
1022
+ class: "w-full"
1023
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1024
+ _: 1
1025
+ })])),
1026
+ createVNode(_component_UFormField, {
1027
+ label: "区域合并间隙(米)",
1028
+ description: "边缘间隔不超过此值的区域合并"
1029
+ }, {
1030
+ default: withCtx(() => [createVNode(_component_UInput, {
1031
+ modelValue: unref(gapMeters),
1032
+ "onUpdate:modelValue": ($event) => isRef(gapMeters) ? gapMeters.value = $event : null,
1033
+ modelModifiers: { number: true },
1034
+ type: "number",
1035
+ min: "0",
1036
+ step: "1",
1037
+ placeholder: "0",
1038
+ class: "w-full"
1039
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1040
+ _: 1
1041
+ })
1042
+ ]),
1043
+ createVNode(_component_UButton, {
1044
+ icon: "i-lucide-search",
1045
+ label: "寻找适飞区",
1046
+ block: "",
1047
+ loading: unref(running),
1048
+ disabled: !unref(location) || !unref(criteriaValid) || !unref(gapValid) || unref(running),
1049
+ onClick: search
1050
+ }, null, 8, ["loading", "disabled"]),
1051
+ unref(running) ? (openBlock(), createBlock("section", {
1052
+ key: 0,
1053
+ class: "space-y-2"
1054
+ }, [createVNode(_component_UProgress, {
1055
+ "model-value": unref(progress),
1056
+ max: 100,
1057
+ size: "sm"
1058
+ }, null, 8, ["model-value"]), createVNode("div", { class: "flex items-center justify-between text-xs text-muted" }, [createVNode("span", null, toDisplayString(unref(processedTiles)) + " / " + toDisplayString(unref(totalTiles)) + " 瓦片", 1), createVNode("span", null, "已发现 " + toDisplayString(unref(foundAreas)) + " 个", 1)])])) : unref(state) === "error" ? (openBlock(), createBlock(_component_UAlert, {
1059
+ key: 1,
1060
+ color: "error",
1061
+ icon: "i-lucide-circle-x",
1062
+ title: "分析失败",
1063
+ description: unref(error) || void 0
1064
+ }, null, 8, ["description"])) : unref(state) === "completed" && unref(truncated) ? (openBlock(), createBlock(_component_UAlert, {
1065
+ key: 2,
1066
+ color: "warning",
1067
+ icon: "i-lucide-triangle-alert",
1068
+ title: "结果可能不完整",
1069
+ description: "已达到本次分析的瓦片上限。"
1070
+ })) : createCommentVNode("", true),
1071
+ unref(state) === "completed" ? (openBlock(), createBlock("section", {
1072
+ key: 3,
1073
+ class: "space-y-2"
1074
+ }, [(openBlock(true), createBlock(Fragment, null, renderList(unref(areas), (area, index) => {
1075
+ return openBlock(), createBlock(_component_UButton, {
1076
+ key: area.id,
1077
+ color: "neutral",
1078
+ variant: unref(selectedAreaId) === area.id ? "soft" : "ghost",
1079
+ block: "",
1080
+ ui: {
1081
+ base: "h-auto justify-start px-3 py-3 text-left",
1082
+ label: "w-full"
1083
+ },
1084
+ onClick: ($event) => selectedAreaId.value = area.id
1085
+ }, {
1086
+ default: withCtx(() => [createVNode("span", { class: "flex w-full items-center gap-3" }, [
1087
+ createVNode("span", {
1088
+ class: "grid size-7 shrink-0 place-items-center text-xs font-semibold",
1089
+ style: {
1090
+ backgroundColor: unref(areaPaletteColor)(index).fillHex,
1091
+ color: unref(areaPaletteColor)(index).accentHex
1092
+ }
1093
+ }, toDisplayString(index + 1), 5),
1094
+ createVNode("span", { class: "min-w-0 flex-1" }, [
1095
+ createVNode("span", { class: "block text-sm font-medium text-highlighted" }, toDisplayString(formatDistance(area.distanceMeters)), 1),
1096
+ createVNode("span", { class: "mt-0.5 block text-xs text-muted" }, toDisplayString(formatArea(area.areaSquareMeters)), 1),
1097
+ createVNode("span", { class: "mt-0.5 block text-xs text-muted" }, "宽 " + toDisplayString(formatDimension(area.widthMeters)) + " · 高 " + toDisplayString(formatDimension(area.heightMeters)), 1)
1098
+ ]),
1099
+ createVNode(_component_UIcon, {
1100
+ name: "i-lucide-chevron-right",
1101
+ class: "size-4 shrink-0 text-muted"
1102
+ })
1103
+ ])]),
1104
+ _: 2
1105
+ }, 1032, ["variant", "onClick"]);
1106
+ }), 128)), unref(areas).length === 0 ? (openBlock(), createBlock(_component_UEmpty, {
1107
+ key: 0,
1108
+ icon: "i-lucide-map-pin-x",
1109
+ title: "未找到符合条件的适飞区"
1110
+ })) : createCommentVNode("", true)])) : createCommentVNode("", true)
1111
+ ])];
1112
+ }),
1113
+ _: 1
1114
+ }, _parent, _scopeId));
1115
+ _push(`</aside></div>`);
1116
+ } else _push(`<!---->`);
1117
+ } else return [!unref(workspace).ready.value ? (openBlock(), createBlock("div", {
1118
+ key: 0,
1119
+ class: "grid min-h-[32rem] flex-1 place-items-center"
1120
+ }, [createVNode("div", { class: "flex flex-col items-center gap-3 text-sm text-muted" }, [createVNode(_component_UIcon, {
1121
+ name: "i-lucide-loader-circle",
1122
+ class: "size-5 animate-spin text-primary"
1123
+ }), createVNode("span", null, "加载地图文件")])])) : unref(stage) === "select" ? (openBlock(), createBlock("div", {
1124
+ key: 1,
1125
+ class: "grid min-h-[32rem] flex-1 place-items-center overflow-y-auto p-6"
1126
+ }, [createVNode("div", { class: "w-full max-w-2xl space-y-4" }, [
1127
+ createVNode(_component_FileDropZone, {
1128
+ accept: ".uomtiles,.mbtiles,.pmtiles",
1129
+ title: "选择地图文件",
1130
+ "file-name": unref(selectedSourceLabel),
1131
+ onSelect: selectLocalFile
1132
+ }, null, 8, ["file-name"]),
1133
+ createVNode(_component_CompletedTaskSelect, {
1134
+ modelValue: unref(filename),
1135
+ "onUpdate:modelValue": ($event) => isRef(filename) ? filename.value = $event : null,
1136
+ class: "w-full"
1137
+ }, null, 8, ["modelValue", "onUpdate:modelValue"]),
1138
+ createVNode("div", { class: "flex justify-end" }, [createVNode(_component_UButton, {
1139
+ icon: "i-lucide-map",
1140
+ label: "打开地图",
1141
+ size: "lg",
1142
+ disabled: !unref(selectedSource),
1143
+ onClick: openMap
1144
+ }, null, 8, ["disabled"])])
1145
+ ])])) : unref(selectedSource) ? (openBlock(), createBlock("div", {
1146
+ key: 2,
1147
+ class: "grid min-h-0 flex-1 xl:grid-cols-[minmax(0,1fr)_24rem]"
1148
+ }, [createVNode("div", { class: "relative min-h-[520px] border-r border-default" }, [(openBlock(), createBlock(_component_OnlineMap, {
1149
+ ref_key: "map",
1150
+ ref: map,
1151
+ key: unref(selectedFile)?.filename || unref(localFile)?.id,
1152
+ "tile-url": unref(sourceTileUrl),
1153
+ "local-sources": unref(localFile) ? [{
1154
+ id: unref(localFile).id,
1155
+ file: unref(localFile).file
1156
+ }] : [],
1157
+ "base-map": unref(baseMap),
1158
+ "min-zoom": unref(sourceMinZoom),
1159
+ "max-zoom": unref(sourceMaxZoom),
1160
+ "map-min-zoom": 3,
1161
+ "map-max-zoom": 24,
1162
+ "initial-zoom": 9,
1163
+ center: unref(location) || [116.4, 39.9],
1164
+ location: unref(location),
1165
+ areas: unref(areas),
1166
+ "selected-area-id": unref(selectedAreaId),
1167
+ "enable-location-picking": unref(locationMode) === "map",
1168
+ "enable-area-analysis": "",
1169
+ "raster-resampling": "nearest",
1170
+ onLocationActivate: activateGeolocation,
1171
+ onLocationChange: setLocation,
1172
+ onLocationLoading: setLocationLoading,
1173
+ onLocationError: showLocationError
1174
+ }, null, 8, [
1175
+ "tile-url",
1176
+ "local-sources",
1177
+ "base-map",
1178
+ "min-zoom",
1179
+ "max-zoom",
1180
+ "center",
1181
+ "location",
1182
+ "areas",
1183
+ "selected-area-id",
1184
+ "enable-location-picking"
1185
+ ]))]), createVNode("aside", { class: "flex min-h-0 flex-col overflow-hidden bg-default" }, [createVNode("div", { class: "border-b border-default p-4" }, [createVNode(_component_USelectMenu, {
1186
+ modelValue: unref(feature),
1187
+ "onUpdate:modelValue": ($event) => isRef(feature) ? feature.value = $event : null,
1188
+ items: featureItems,
1189
+ "value-key": "value",
1190
+ "label-key": "label",
1191
+ class: "w-full"
1192
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]), createVNode(_component_UScrollArea, { class: "min-h-0 flex-1" }, {
1193
+ default: withCtx(() => [createVNode("div", { class: "space-y-6 p-5" }, [
1194
+ createVNode("section", { class: "space-y-3" }, [
1195
+ createVNode(_component_UTabs, {
1196
+ "model-value": unref(locationMode),
1197
+ items: unref(locationModeItems),
1198
+ content: false,
1199
+ size: "sm",
1200
+ class: "w-full",
1201
+ ui: {
1202
+ list: "grid grid-cols-3",
1203
+ trigger: "px-2"
1204
+ },
1205
+ "onUpdate:modelValue": selectLocationMode
1206
+ }, null, 8, ["model-value", "items"]),
1207
+ createVNode("div", { class: "grid grid-cols-2 gap-3" }, [createVNode(_component_UFormField, {
1208
+ label: "经度",
1209
+ error: unref(longitudeError)
1210
+ }, {
1211
+ default: withCtx(() => [createVNode(_component_UInput, {
1212
+ "model-value": unref(longitude),
1213
+ type: "number",
1214
+ inputmode: "decimal",
1215
+ min: "-180",
1216
+ max: "180",
1217
+ step: "0.000001",
1218
+ placeholder: "116.400000",
1219
+ class: "w-full",
1220
+ "onUpdate:modelValue": setManualLongitude
1221
+ }, null, 8, ["model-value"])]),
1222
+ _: 1
1223
+ }, 8, ["error"]), createVNode(_component_UFormField, {
1224
+ label: "纬度",
1225
+ error: unref(latitudeError)
1226
+ }, {
1227
+ default: withCtx(() => [createVNode(_component_UInput, {
1228
+ "model-value": unref(latitude),
1229
+ type: "number",
1230
+ inputmode: "decimal",
1231
+ min: "-85.05112878",
1232
+ max: "85.05112878",
1233
+ step: "0.000001",
1234
+ placeholder: "39.900000",
1235
+ class: "w-full",
1236
+ "onUpdate:modelValue": setManualLatitude
1237
+ }, null, 8, ["model-value"])]),
1238
+ _: 1
1239
+ }, 8, ["error"])]),
1240
+ unref(locating) ? (openBlock(), createBlock("span", {
1241
+ key: 0,
1242
+ class: "sr-only",
1243
+ role: "status"
1244
+ }, "正在获取当前位置")) : createCommentVNode("", true)
1245
+ ]),
1246
+ createVNode("section", { class: "space-y-3" }, [
1247
+ createVNode("div", { class: "grid grid-cols-2 gap-3" }, [createVNode(_component_UFormField, { label: "筛选方式" }, {
1248
+ default: withCtx(() => [createVNode(_component_USelectMenu, {
1249
+ modelValue: unref(filterMode),
1250
+ "onUpdate:modelValue": ($event) => isRef(filterMode) ? filterMode.value = $event : null,
1251
+ items: filterModeItems,
1252
+ "value-key": "value",
1253
+ "label-key": "label",
1254
+ class: "w-full"
1255
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1256
+ _: 1
1257
+ }), createVNode(_component_UFormField, { label: "结果数量" }, {
1258
+ default: withCtx(() => [createVNode(_component_USelectMenu, {
1259
+ modelValue: unref(resultCount),
1260
+ "onUpdate:modelValue": ($event) => isRef(resultCount) ? resultCount.value = $event : null,
1261
+ items: unref(resultCountItems),
1262
+ "value-key": "value",
1263
+ "label-key": "label",
1264
+ class: "w-full"
1265
+ }, null, 8, [
1266
+ "modelValue",
1267
+ "onUpdate:modelValue",
1268
+ "items"
1269
+ ])]),
1270
+ _: 1
1271
+ })]),
1272
+ unref(filterMode) === "area" ? (openBlock(), createBlock(Fragment, { key: 0 }, [createVNode(_component_UFormField, { label: "最小面积" }, {
1273
+ default: withCtx(() => [createVNode(_component_USelectMenu, {
1274
+ modelValue: unref(areaPreset),
1275
+ "onUpdate:modelValue": ($event) => isRef(areaPreset) ? areaPreset.value = $event : null,
1276
+ items: areaPresetItems,
1277
+ "value-key": "value",
1278
+ "label-key": "label",
1279
+ class: "w-full"
1280
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1281
+ _: 1
1282
+ }), unref(areaPreset) === "custom" ? (openBlock(), createBlock(_component_UFormField, {
1283
+ key: 0,
1284
+ label: "自定义面积(平方千米)"
1285
+ }, {
1286
+ default: withCtx(() => [createVNode(_component_UInput, {
1287
+ modelValue: unref(customAreaSquareKilometers),
1288
+ "onUpdate:modelValue": ($event) => isRef(customAreaSquareKilometers) ? customAreaSquareKilometers.value = $event : null,
1289
+ modelModifiers: { number: true },
1290
+ type: "number",
1291
+ min: "1",
1292
+ step: "0.1",
1293
+ placeholder: "至少 1",
1294
+ class: "w-full"
1295
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1296
+ _: 1
1297
+ })) : createCommentVNode("", true)], 64)) : (openBlock(), createBlock("div", {
1298
+ key: 1,
1299
+ class: "grid grid-cols-2 gap-3"
1300
+ }, [createVNode(_component_UFormField, { label: "最小宽(公里)" }, {
1301
+ default: withCtx(() => [createVNode(_component_UInput, {
1302
+ modelValue: unref(customWidthKilometers),
1303
+ "onUpdate:modelValue": ($event) => isRef(customWidthKilometers) ? customWidthKilometers.value = $event : null,
1304
+ modelModifiers: { number: true },
1305
+ type: "number",
1306
+ min: "0.1",
1307
+ step: "0.1",
1308
+ placeholder: "例如 2",
1309
+ class: "w-full"
1310
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1311
+ _: 1
1312
+ }), createVNode(_component_UFormField, { label: "最小高(公里)" }, {
1313
+ default: withCtx(() => [createVNode(_component_UInput, {
1314
+ modelValue: unref(customHeightKilometers),
1315
+ "onUpdate:modelValue": ($event) => isRef(customHeightKilometers) ? customHeightKilometers.value = $event : null,
1316
+ modelModifiers: { number: true },
1317
+ type: "number",
1318
+ min: "0.1",
1319
+ step: "0.1",
1320
+ placeholder: "例如 2",
1321
+ class: "w-full"
1322
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1323
+ _: 1
1324
+ })])),
1325
+ createVNode(_component_UFormField, {
1326
+ label: "区域合并间隙(米)",
1327
+ description: "边缘间隔不超过此值的区域合并"
1328
+ }, {
1329
+ default: withCtx(() => [createVNode(_component_UInput, {
1330
+ modelValue: unref(gapMeters),
1331
+ "onUpdate:modelValue": ($event) => isRef(gapMeters) ? gapMeters.value = $event : null,
1332
+ modelModifiers: { number: true },
1333
+ type: "number",
1334
+ min: "0",
1335
+ step: "1",
1336
+ placeholder: "0",
1337
+ class: "w-full"
1338
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])]),
1339
+ _: 1
1340
+ })
1341
+ ]),
1342
+ createVNode(_component_UButton, {
1343
+ icon: "i-lucide-search",
1344
+ label: "寻找适飞区",
1345
+ block: "",
1346
+ loading: unref(running),
1347
+ disabled: !unref(location) || !unref(criteriaValid) || !unref(gapValid) || unref(running),
1348
+ onClick: search
1349
+ }, null, 8, ["loading", "disabled"]),
1350
+ unref(running) ? (openBlock(), createBlock("section", {
1351
+ key: 0,
1352
+ class: "space-y-2"
1353
+ }, [createVNode(_component_UProgress, {
1354
+ "model-value": unref(progress),
1355
+ max: 100,
1356
+ size: "sm"
1357
+ }, null, 8, ["model-value"]), createVNode("div", { class: "flex items-center justify-between text-xs text-muted" }, [createVNode("span", null, toDisplayString(unref(processedTiles)) + " / " + toDisplayString(unref(totalTiles)) + " 瓦片", 1), createVNode("span", null, "已发现 " + toDisplayString(unref(foundAreas)) + " 个", 1)])])) : unref(state) === "error" ? (openBlock(), createBlock(_component_UAlert, {
1358
+ key: 1,
1359
+ color: "error",
1360
+ icon: "i-lucide-circle-x",
1361
+ title: "分析失败",
1362
+ description: unref(error) || void 0
1363
+ }, null, 8, ["description"])) : unref(state) === "completed" && unref(truncated) ? (openBlock(), createBlock(_component_UAlert, {
1364
+ key: 2,
1365
+ color: "warning",
1366
+ icon: "i-lucide-triangle-alert",
1367
+ title: "结果可能不完整",
1368
+ description: "已达到本次分析的瓦片上限。"
1369
+ })) : createCommentVNode("", true),
1370
+ unref(state) === "completed" ? (openBlock(), createBlock("section", {
1371
+ key: 3,
1372
+ class: "space-y-2"
1373
+ }, [(openBlock(true), createBlock(Fragment, null, renderList(unref(areas), (area, index) => {
1374
+ return openBlock(), createBlock(_component_UButton, {
1375
+ key: area.id,
1376
+ color: "neutral",
1377
+ variant: unref(selectedAreaId) === area.id ? "soft" : "ghost",
1378
+ block: "",
1379
+ ui: {
1380
+ base: "h-auto justify-start px-3 py-3 text-left",
1381
+ label: "w-full"
1382
+ },
1383
+ onClick: ($event) => selectedAreaId.value = area.id
1384
+ }, {
1385
+ default: withCtx(() => [createVNode("span", { class: "flex w-full items-center gap-3" }, [
1386
+ createVNode("span", {
1387
+ class: "grid size-7 shrink-0 place-items-center text-xs font-semibold",
1388
+ style: {
1389
+ backgroundColor: unref(areaPaletteColor)(index).fillHex,
1390
+ color: unref(areaPaletteColor)(index).accentHex
1391
+ }
1392
+ }, toDisplayString(index + 1), 5),
1393
+ createVNode("span", { class: "min-w-0 flex-1" }, [
1394
+ createVNode("span", { class: "block text-sm font-medium text-highlighted" }, toDisplayString(formatDistance(area.distanceMeters)), 1),
1395
+ createVNode("span", { class: "mt-0.5 block text-xs text-muted" }, toDisplayString(formatArea(area.areaSquareMeters)), 1),
1396
+ createVNode("span", { class: "mt-0.5 block text-xs text-muted" }, "宽 " + toDisplayString(formatDimension(area.widthMeters)) + " · 高 " + toDisplayString(formatDimension(area.heightMeters)), 1)
1397
+ ]),
1398
+ createVNode(_component_UIcon, {
1399
+ name: "i-lucide-chevron-right",
1400
+ class: "size-4 shrink-0 text-muted"
1401
+ })
1402
+ ])]),
1403
+ _: 2
1404
+ }, 1032, ["variant", "onClick"]);
1405
+ }), 128)), unref(areas).length === 0 ? (openBlock(), createBlock(_component_UEmpty, {
1406
+ key: 0,
1407
+ icon: "i-lucide-map-pin-x",
1408
+ title: "未找到符合条件的适飞区"
1409
+ })) : createCommentVNode("", true)])) : createCommentVNode("", true)
1410
+ ])]),
1411
+ _: 1
1412
+ })])])) : createCommentVNode("", true)];
1413
+ }),
1414
+ _: 1
1415
+ }, _parent));
1416
+ };
1417
+ }
1418
+ });
1419
+ //#endregion
1420
+ //#region app/pages/advanced.vue
1421
+ var _sfc_setup = advanced_vue_vue_type_script_setup_true_lang_default.setup;
1422
+ advanced_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
1423
+ const ssrContext = useSSRContext();
1424
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/advanced.vue");
1425
+ return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
1426
+ };
1427
+ var advanced_default = advanced_vue_vue_type_script_setup_true_lang_default;
1428
+
1429
+ export { advanced_default as default };
1430
+ //# sourceMappingURL=advanced-D1onodoF.mjs.map