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,1093 @@
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, $ as $fetch$1 } from '../virtual/entry.mjs';
2
+ import { C as CompletedTaskSelect_default, a as _sfc_main$2 } from './Alert-0ngTJXxP.mjs';
3
+ import { _ as _sfc_main$9 } from './Slider-D-n8Y0CX.mjs';
4
+ import { _ as _sfc_main$3, a as _sfc_main$1, M as MapBaseLayerTabs_default, b as _sfc_main$2$1 } from './MapBaseLayerTabs-4445J6yh.mjs';
5
+ import { _ as _sfc_main$6 } from './Pagination-CDHx4HTZ.mjs';
6
+ import { F as FileDropZone_default, _ as _sfc_main$4 } from './ScrollArea-BQK3em8b.mjs';
7
+ import { u as useFileWorkspace, _ as _sfc_main$8 } from './Empty-CkW3mADt.mjs';
8
+ import { defineComponent, ref, computed, watch, mergeProps, withCtx, unref, isRef, openBlock, createBlock, Fragment, renderList, createVNode, toDisplayString, createCommentVNode, shallowRef, useTemplateRef, useSSRContext } from 'vue';
9
+ import { ssrRenderComponent, ssrInterpolate, ssrRenderClass, ssrRenderList, ssrRenderAttrs, ssrRenderStyle } from 'vue/server-renderer';
10
+ import 'unhead/plugins';
11
+ import 'unhead/utils';
12
+ import '../routes/renderer.mjs';
13
+ import '../nitro/nitro.mjs';
14
+ import 'node:http';
15
+ import 'node:https';
16
+ import 'node:events';
17
+ import 'node:buffer';
18
+ import 'node:fs';
19
+ import 'node:path';
20
+ import 'node:crypto';
21
+ import 'node:url';
22
+ import '@iconify/utils';
23
+ import 'consola';
24
+ import 'unhead/server';
25
+ import 'unhead/legacy';
26
+ import 'nostics';
27
+ import 'vue-bundle-renderer/runtime';
28
+ import 'devalue';
29
+ import 'fnv1a-64';
30
+ import 'object-identity';
31
+ import 'tailwindcss/colors';
32
+ import './DashboardSidebarToggle-pncTaIJq.mjs';
33
+ import './FocusScope-Cf0lg0zt.mjs';
34
+ import './PopperArrow-Bqfdf2Et.mjs';
35
+ import './esm-Dp2lJXbp.mjs';
36
+ import './Input-BeNavYXb.mjs';
37
+ import './Tooltip-CkpSktvJ.mjs';
38
+
39
+ //#region app/components/VersionCompare.vue?vue&type=script&setup=true&lang.ts
40
+ var VersionCompare_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
41
+ __name: "VersionCompare",
42
+ __ssrInlineRender: true,
43
+ props: {
44
+ leftUrls: {},
45
+ rightUrls: {},
46
+ leftDiffRootUrls: {},
47
+ rightDiffRootUrls: {},
48
+ leftSourceVersion: {},
49
+ rightSourceVersion: {},
50
+ leftLabel: {},
51
+ rightLabel: {},
52
+ mode: {},
53
+ baseMap: { default: "tianditu" },
54
+ liveStatusUrl: {},
55
+ localSources: { default: () => [] },
56
+ focusTile: {},
57
+ minZoom: { default: 3 },
58
+ maxZoom: { default: 24 },
59
+ leftSourceMinZoom: { default: 3 },
60
+ rightSourceMinZoom: { default: 3 },
61
+ leftSourceMaxZoom: { default: 18 },
62
+ rightSourceMaxZoom: { default: 18 },
63
+ leftResampling: { default: "nearest" },
64
+ rightResampling: { default: "nearest" }
65
+ },
66
+ setup(__props) {
67
+ useTemplateRef("left-map");
68
+ useTemplateRef("right-map");
69
+ const split = ref(50);
70
+ const rendererUnavailable = ref(false);
71
+ const clipStyle = computed(() => __props.mode === "swipe" ? { clipPath: `inset(0 ${100 - split.value}% 0 0)` } : void 0);
72
+ let leftMap = null;
73
+ let rightMap = null;
74
+ function applyMode() {}
75
+ function focus(tile) {}
76
+ watch(() => __props.mode, applyMode);
77
+ watch(() => __props.focusTile, focus);
78
+ watch(() => __props.baseMap, (value) => {
79
+ for (const map of [leftMap, rightMap]) {
80
+ map?.setLayoutProperty("basemap", "visibility", value === "tianditu" ? "visible" : "none");
81
+ map?.setLayoutProperty("labels", "visibility", value === "tianditu" ? "visible" : "none");
82
+ map?.setLayoutProperty("osm", "visibility", value === "osm" ? "visible" : "none");
83
+ }
84
+ });
85
+ return (_ctx, _push, _parent, _attrs) => {
86
+ const _component_USlider = _sfc_main$9;
87
+ _push(`<div${ssrRenderAttrs(mergeProps({ class: "relative h-full min-h-[520px] overflow-hidden bg-muted" }, _attrs))}>`);
88
+ if (unref(rendererUnavailable)) _push(`<div class="absolute inset-0 z-40 grid place-items-center bg-muted"><p class="text-sm text-muted">当前浏览器未启用 WebGL2</p></div>`);
89
+ else _push(`<!---->`);
90
+ _push(`<div class="${ssrRenderClass([__props.mode === "side" ? "left-1/2" : "left-0", "absolute inset-y-0 right-0"])}"><div class="h-full w-full"></div></div><div class="${ssrRenderClass([__props.mode === "side" ? "right-1/2" : __props.mode === "overlay" ? "hidden" : "right-0", "absolute inset-y-0 left-0 z-10 overflow-hidden"])}" style="${ssrRenderStyle(unref(clipStyle))}"><div class="h-full w-full"></div></div>`);
91
+ if (__props.mode !== "overlay") _push(`<div class="pointer-events-none absolute left-4 top-4 z-20 max-w-[40%] truncate bg-[#18201d]/90 px-3 py-1.5 text-xs text-white shadow-sm">${ssrInterpolate(__props.leftLabel)}</div>`);
92
+ else _push(`<!---->`);
93
+ if (__props.mode !== "overlay") _push(`<div class="pointer-events-none absolute right-16 top-4 z-20 max-w-[40%] truncate bg-[#18201d]/90 px-3 py-1.5 text-xs text-white shadow-sm">${ssrInterpolate(__props.rightLabel)}</div>`);
94
+ else _push(`<div class="pointer-events-none absolute left-4 top-4 z-20 flex items-center gap-4 bg-[#18201d]/90 px-3 py-1.5 text-xs text-white shadow-sm"><span class="flex items-center gap-1.5"><span class="size-2 bg-[#dc3b3a]"></span>左侧独有</span><span class="flex items-center gap-1.5"><span class="size-2 bg-[#18a66c]"></span>右侧新增</span></div>`);
95
+ if (__props.mode === "side") _push(`<div class="pointer-events-none absolute inset-y-0 left-1/2 z-20 w-px bg-default"></div>`);
96
+ else _push(`<!---->`);
97
+ if (__props.mode === "swipe") _push(`<div class="pointer-events-none absolute inset-y-0 z-20 w-px bg-white shadow-[0_0_0_1px_rgba(0,0,0,.25)]" style="${ssrRenderStyle({ left: `${unref(split)}%` })}"></div>`);
98
+ else _push(`<!---->`);
99
+ if (__props.mode === "swipe") {
100
+ _push(`<div class="absolute inset-x-0 bottom-0 z-30 border-t border-default bg-default/96 px-5 py-3">`);
101
+ _push(ssrRenderComponent(_component_USlider, {
102
+ modelValue: unref(split),
103
+ "onUpdate:modelValue": ($event) => isRef(split) ? split.value = $event : null,
104
+ min: 5,
105
+ max: 95,
106
+ step: 1,
107
+ "aria-label": "地图版本分割位置"
108
+ }, null, _parent));
109
+ _push(`</div>`);
110
+ } else _push(`<!---->`);
111
+ _push(`</div>`);
112
+ };
113
+ }
114
+ });
115
+ //#endregion
116
+ //#region app/components/VersionCompare.vue
117
+ var _sfc_setup$1 = VersionCompare_vue_vue_type_script_setup_true_lang_default.setup;
118
+ VersionCompare_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
119
+ const ssrContext = useSSRContext();
120
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/VersionCompare.vue");
121
+ return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
122
+ };
123
+ var VersionCompare_default = Object.assign(VersionCompare_vue_vue_type_script_setup_true_lang_default, { __name: "VersionCompare" });
124
+ //#endregion
125
+ //#region app/composables/pixel-diff.ts
126
+ var batchSize = 256;
127
+ function emptyTotals() {
128
+ return {
129
+ processedTiles: 0,
130
+ changedTiles: 0,
131
+ identicalTiles: 0,
132
+ missingLeft: 0,
133
+ missingRight: 0,
134
+ diffPixels: 0,
135
+ addedPixels: 0,
136
+ removedPixels: 0
137
+ };
138
+ }
139
+ function usePixelDiff() {
140
+ const state = ref("idle");
141
+ const totals = ref(emptyTotals());
142
+ const totalTiles = ref(0);
143
+ const workerCount = ref(0);
144
+ const report = shallowRef(null);
145
+ const error = ref(null);
146
+ const progress = computed(() => totalTiles.value === 0 ? 0 : totals.value.processedTiles / totalTiles.value * 100);
147
+ let workers = [];
148
+ let localWorker = null;
149
+ let generation = 0;
150
+ function terminateWorkers() {
151
+ for (const worker of workers) worker.terminate();
152
+ workers = [];
153
+ localWorker?.terminate();
154
+ localWorker = null;
155
+ }
156
+ function cancel() {
157
+ generation++;
158
+ terminateWorkers();
159
+ state.value = "idle";
160
+ totals.value = emptyTotals();
161
+ totalTiles.value = 0;
162
+ workerCount.value = 0;
163
+ report.value = null;
164
+ error.value = null;
165
+ }
166
+ async function run(leftFilename, rightFilename) {
167
+ cancel();
168
+ const currentGeneration = generation;
169
+ state.value = "preparing";
170
+ totals.value = emptyTotals();
171
+ totalTiles.value = 0;
172
+ workerCount.value = 0;
173
+ report.value = null;
174
+ error.value = null;
175
+ try {
176
+ const manifest = await $fetch$1("/api/workspace/compare", {
177
+ method: "POST",
178
+ body: {
179
+ leftFilename,
180
+ rightFilename
181
+ }
182
+ });
183
+ if (currentGeneration !== generation) return;
184
+ totalTiles.value = manifest.totalTiles;
185
+ if (manifest.totalTiles === 0) {
186
+ report.value = {
187
+ ...emptyTotals(),
188
+ totalTiles: 0,
189
+ tiles: [],
190
+ identical: true
191
+ };
192
+ state.value = "completed";
193
+ return;
194
+ }
195
+ workerCount.value = Math.min(4, Math.max(1, (void 0).hardwareConcurrency || 2), Math.ceil(manifest.totalTiles / batchSize));
196
+ state.value = "running";
197
+ const changedTiles = [];
198
+ await new Promise((resolve, reject) => {
199
+ let completedWorkers = 0;
200
+ const fail = (message) => {
201
+ terminateWorkers();
202
+ reject(new Error(message));
203
+ };
204
+ for (let workerIndex = 0; workerIndex < workerCount.value; workerIndex++) {
205
+ const worker = new Worker(new URL("../workers/tile-diff.worker.ts", globalThis._importMeta_.url), { type: "module" });
206
+ workers.push(worker);
207
+ worker.onerror = (event) => fail(event.message || "像素 diff Worker 异常退出");
208
+ worker.onmessage = (event) => {
209
+ if (currentGeneration !== generation) return;
210
+ const message = event.data;
211
+ if (message.type === "error") {
212
+ fail(message.message);
213
+ return;
214
+ }
215
+ if (message.type === "complete") {
216
+ completedWorkers++;
217
+ if (completedWorkers === workerCount.value) resolve();
218
+ return;
219
+ }
220
+ changedTiles.push(...message.tiles);
221
+ const next = { ...totals.value };
222
+ for (const key of Object.keys(message.totals)) next[key] += message.totals[key];
223
+ totals.value = next;
224
+ };
225
+ worker.postMessage({
226
+ type: "start",
227
+ leftFilename,
228
+ rightFilename,
229
+ totalTiles: manifest.totalTiles,
230
+ workerIndex,
231
+ workerCount: workerCount.value,
232
+ batchSize
233
+ });
234
+ }
235
+ });
236
+ if (currentGeneration !== generation) return;
237
+ terminateWorkers();
238
+ changedTiles.sort((left, right) => right.diffPercent - left.diffPercent || right.diffPixels - left.diffPixels || right.z - left.z || left.x - right.x || left.y - right.y);
239
+ report.value = {
240
+ ...totals.value,
241
+ totalTiles: manifest.totalTiles,
242
+ tiles: changedTiles,
243
+ identical: totals.value.changedTiles === 0
244
+ };
245
+ state.value = "completed";
246
+ } catch (cause) {
247
+ if (currentGeneration !== generation) return;
248
+ terminateWorkers();
249
+ error.value = cause instanceof Error ? cause.message : String(cause);
250
+ state.value = "error";
251
+ throw cause;
252
+ }
253
+ }
254
+ async function runLocal(leftFile, rightFile) {
255
+ cancel();
256
+ const currentGeneration = generation;
257
+ state.value = "preparing";
258
+ try {
259
+ const localChangedTiles = [];
260
+ await new Promise((resolve, reject) => {
261
+ const worker = new Worker(new URL("../workers/local-pixel-diff.worker.ts", globalThis._importMeta_.url), { type: "module" });
262
+ localWorker = worker;
263
+ let settled = false;
264
+ const finish = (cause) => {
265
+ if (settled) return;
266
+ settled = true;
267
+ worker.terminate();
268
+ if (localWorker === worker) localWorker = null;
269
+ if (cause) reject(cause);
270
+ else resolve();
271
+ };
272
+ worker.onerror = (event) => finish(new Error(event.message || "本地像素 diff Worker 异常退出"));
273
+ worker.onmessage = (event) => {
274
+ if (currentGeneration !== generation) return;
275
+ if (event.data.type === "manifest") {
276
+ totalTiles.value = event.data.totalTiles;
277
+ workerCount.value = 1;
278
+ state.value = event.data.totalTiles ? "running" : "completed";
279
+ return;
280
+ }
281
+ if (event.data.type === "batch") {
282
+ const next = { ...totals.value };
283
+ for (const key of Object.keys(event.data.totals)) next[key] += event.data.totals[key];
284
+ totals.value = next;
285
+ localChangedTiles.push(...event.data.tiles);
286
+ return;
287
+ }
288
+ if (event.data.type === "error") {
289
+ finish(new Error(event.data.message));
290
+ return;
291
+ }
292
+ finish();
293
+ };
294
+ worker.postMessage({
295
+ left: leftFile,
296
+ right: rightFile,
297
+ batchSize
298
+ });
299
+ });
300
+ if (currentGeneration !== generation) return;
301
+ localChangedTiles.sort((left, right) => right.diffPercent - left.diffPercent || right.diffPixels - left.diffPixels || right.z - left.z || left.x - right.x || left.y - right.y);
302
+ report.value = {
303
+ ...totals.value,
304
+ totalTiles: totalTiles.value,
305
+ tiles: localChangedTiles,
306
+ identical: totals.value.changedTiles === 0
307
+ };
308
+ state.value = "completed";
309
+ } catch (cause) {
310
+ if (currentGeneration !== generation) return;
311
+ error.value = cause instanceof Error ? cause.message : String(cause);
312
+ state.value = "error";
313
+ throw cause;
314
+ }
315
+ }
316
+ return {
317
+ state,
318
+ totals,
319
+ totalTiles,
320
+ workerCount,
321
+ report,
322
+ error,
323
+ progress,
324
+ run,
325
+ runLocal,
326
+ cancel
327
+ };
328
+ }
329
+ //#endregion
330
+ //#region app/pages/compare.vue?vue&type=script&setup=true&lang.ts
331
+ var pageSize = 50;
332
+ var compare_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
333
+ __name: "compare",
334
+ __ssrInlineRender: true,
335
+ setup(__props) {
336
+ useSeoMeta$1({ title: "地图版本对比" });
337
+ const workspace = useFileWorkspace();
338
+ const { displayWorkspaceName, displayMapFileName } = workspace;
339
+ const toast = useToast();
340
+ const leftFilename = ref(), rightFilename = ref();
341
+ const leftPending = ref(false), rightPending = ref(false);
342
+ const localFiles = ref([]);
343
+ const onlineRevision = ref(Date.now());
344
+ const baseMap = ref("tianditu");
345
+ const mode = ref("side");
346
+ const selectedTile = ref(null);
347
+ const page = ref(1);
348
+ const selectionStage = ref("select");
349
+ const pixelPanelOpen = ref(true);
350
+ const diffStarting = ref(false);
351
+ const { state, totals, totalTiles, workerCount, report, error, progress, run, runLocal, cancel } = usePixelDiff();
352
+ const comparable = computed(() => workspace.files.value);
353
+ watch([leftFilename, rightFilename], () => {
354
+ cancel();
355
+ selectedTile.value = null;
356
+ page.value = 1;
357
+ if (selectionStage.value === "compare") selectionStage.value = "select";
358
+ });
359
+ const localSource = (refName) => refName ? localFiles.value.find((file) => file.id === refName) : void 0;
360
+ const left = computed(() => comparable.value.find((file) => file.filename === leftFilename.value) || localSource(leftFilename.value));
361
+ const right = computed(() => comparable.value.find((file) => file.filename === rightFilename.value) || localSource(rightFilename.value));
362
+ const leftSelected = computed(() => leftFilename.value === "online" || Boolean(left.value));
363
+ const rightSelected = computed(() => rightFilename.value === "online" || Boolean(right.value));
364
+ const selectionReady = computed(() => leftSelected.value && rightSelected.value && leftFilename.value !== rightFilename.value);
365
+ const onlineMode = computed(() => leftFilename.value === "online" || rightFilename.value === "online");
366
+ const running = computed(() => state.value === "preparing" || state.value === "running");
367
+ const diffRunning = computed(() => diffStarting.value || running.value);
368
+ const modeItems = [
369
+ {
370
+ label: "同步双图",
371
+ icon: "i-lucide-columns-2",
372
+ value: "side"
373
+ },
374
+ {
375
+ label: "滑块对比",
376
+ icon: "i-lucide-panel-left-close",
377
+ value: "swipe"
378
+ },
379
+ {
380
+ label: "差异叠加",
381
+ icon: "i-lucide-layers-2",
382
+ value: "overlay"
383
+ }
384
+ ];
385
+ const pagedTiles = computed(() => report.value?.tiles.slice((page.value - 1) * pageSize, page.value * pageSize) || []);
386
+ const overallDiffPercent = computed(() => report.value && report.value.totalTiles ? report.value.diffPixels / (report.value.totalTiles * 256 * 256) * 100 : 0);
387
+ const onlineUrls = computed(() => Array.from({ length: 6 }, (_, group) => `/api/map/online/${group}/{z}/{x}/{y}?v=${onlineRevision.value}`));
388
+ const onlineRootUrls = computed(() => Array.from({ length: 6 }, (_, group) => `/api/map/online-root/${group}/{x}/{y}?v=${onlineRevision.value}`));
389
+ function urls(source) {
390
+ if (source === "online") return onlineUrls.value;
391
+ if (!source) return [];
392
+ return localSource(source) ? [`local:${source}/{z}/{x}/{y}`] : [`/api/workspace/${encodeURIComponent(source)}/tile?z={z}&x={x}&y={y}`];
393
+ }
394
+ function label(source) {
395
+ if (source === "online") return "UOM 在线版本";
396
+ const local = localSource(source);
397
+ return local ? displayMapFileName(local.filename) : source ? displayWorkspaceName(source) : "";
398
+ }
399
+ function sourceMin(source) {
400
+ if (source === "online") return 9;
401
+ if (localSource(source)) return 0;
402
+ return comparable.value.find((file) => file.filename === source)?.minZoom ?? 0;
403
+ }
404
+ function sourceMax(source) {
405
+ if (source === "online") return 24;
406
+ if (localSource(source)) return localSource(source)?.kind === "uomtiles" ? 18 : 24;
407
+ return comparable.value.find((file) => file.filename === source)?.maxZoom ?? 24;
408
+ }
409
+ function number(value) {
410
+ return new Intl.NumberFormat("zh-CN").format(value);
411
+ }
412
+ function percent(value) {
413
+ return `${value.toFixed(value >= 1 ? 2 : 4)}%`;
414
+ }
415
+ async function openVersion(side, file) {
416
+ if (!/\.(uomtiles|mbtiles|pmtiles)$/i.test(file.name)) {
417
+ toast.add({
418
+ title: "不支持的地图文件",
419
+ description: "请选择 .uomtiles、.mbtiles 或 .pmtiles。",
420
+ color: "error"
421
+ });
422
+ return;
423
+ }
424
+ const pending = side === "left" ? leftPending : rightPending;
425
+ pending.value = true;
426
+ try {
427
+ const kind = file.name.split(".").pop()?.toLowerCase();
428
+ if (kind !== "uomtiles" && kind !== "mbtiles" && kind !== "pmtiles") throw new Error("请选择 .uomtiles、.mbtiles 或 .pmtiles 文件");
429
+ const imported = {
430
+ id: `local-${crypto.randomUUID()}`,
431
+ file,
432
+ filename: file.name,
433
+ kind
434
+ };
435
+ localFiles.value = [...localFiles.value, imported];
436
+ if (side === "left") leftFilename.value = imported.id;
437
+ else rightFilename.value = imported.id;
438
+ } catch (cause) {
439
+ toast.add({
440
+ title: "无法打开地图文件",
441
+ description: cause?.data?.message || cause?.message,
442
+ color: "error"
443
+ });
444
+ } finally {
445
+ pending.value = false;
446
+ }
447
+ }
448
+ async function compare() {
449
+ const leftFile = leftFilename.value;
450
+ const rightFile = rightFilename.value;
451
+ if (!leftFile || !rightFile || leftFile === rightFile || onlineMode.value || diffRunning.value) return;
452
+ diffStarting.value = true;
453
+ try {
454
+ const localLeft = localSource(leftFile), localRight = localSource(rightFile);
455
+ if (localLeft && localRight) await runLocal(localLeft.file, localRight.file);
456
+ else if (!localLeft && !localRight) await run(leftFile, rightFile);
457
+ else {
458
+ toast.add({
459
+ title: "逐像素 diff 需要两侧使用相同类型的来源",
460
+ description: "请都选择任务文件,或都选择本地文件。",
461
+ color: "warning"
462
+ });
463
+ return;
464
+ }
465
+ selectedTile.value = report.value?.tiles[0] || null;
466
+ toast.add({
467
+ title: report.value?.identical ? "像素结果完全一致" : `发现 ${number(report.value?.changedTiles || 0)} 个差异瓦片`,
468
+ color: report.value?.identical ? "success" : "warning",
469
+ icon: report.value?.identical ? "i-lucide-circle-check" : "i-lucide-triangle-alert"
470
+ });
471
+ } catch {
472
+ toast.add({
473
+ title: "像素 diff 失败",
474
+ description: error.value || "浏览器 Worker 未能完成比较",
475
+ color: "error"
476
+ });
477
+ } finally {
478
+ diffStarting.value = false;
479
+ }
480
+ }
481
+ function beginCompare() {
482
+ if (!selectionReady.value) return;
483
+ selectionStage.value = "compare";
484
+ pixelPanelOpen.value = true;
485
+ }
486
+ function chooseAgain() {
487
+ cancel();
488
+ diffStarting.value = false;
489
+ selectionStage.value = "select";
490
+ selectedTile.value = null;
491
+ page.value = 1;
492
+ }
493
+ function selectOnline(side) {
494
+ if (side === "left") {
495
+ leftFilename.value = "online";
496
+ if (rightFilename.value === "online") rightFilename.value = void 0;
497
+ } else {
498
+ rightFilename.value = "online";
499
+ if (leftFilename.value === "online") leftFilename.value = void 0;
500
+ }
501
+ onlineRevision.value = Date.now();
502
+ }
503
+ function selectTile(tile) {
504
+ selectedTile.value = tile;
505
+ mode.value = "overlay";
506
+ }
507
+ return (_ctx, _push, _parent, _attrs) => {
508
+ const _component_UDashboardPanel = _sfc_main$3;
509
+ const _component_UDashboardNavbar = _sfc_main$2$1;
510
+ const _component_UButton = _sfc_main;
511
+ const _component_UIcon = _sfc_main$5;
512
+ const _component_FileDropZone = FileDropZone_default;
513
+ const _component_CompletedTaskSelect = CompletedTaskSelect_default;
514
+ const _component_UTabs = _sfc_main$1;
515
+ const _component_MapBaseLayerTabs = MapBaseLayerTabs_default;
516
+ const _component_VersionCompare = VersionCompare_default;
517
+ const _component_UProgress = _sfc_main$7;
518
+ const _component_UAlert = _sfc_main$2;
519
+ const _component_UScrollArea = _sfc_main$4;
520
+ const _component_UPagination = _sfc_main$6;
521
+ const _component_UEmpty = _sfc_main$8;
522
+ _push(ssrRenderComponent(_component_UDashboardPanel, mergeProps({
523
+ id: "version-compare",
524
+ class: "min-w-0",
525
+ ui: { body: "gap-0 p-0 sm:gap-0 sm:p-0" }
526
+ }, _attrs), {
527
+ header: withCtx((_, _push, _parent, _scopeId) => {
528
+ if (_push) _push(ssrRenderComponent(_component_UDashboardNavbar, { title: "地图版本对比" }, {
529
+ right: withCtx((_, _push, _parent, _scopeId) => {
530
+ if (_push) {
531
+ if (unref(selectionStage) === "compare") {
532
+ _push(`<!--[-->`);
533
+ _push(ssrRenderComponent(_component_UButton, {
534
+ icon: "i-lucide-files",
535
+ label: "重新选择",
536
+ color: "neutral",
537
+ variant: "outline",
538
+ disabled: unref(diffRunning),
539
+ onClick: chooseAgain
540
+ }, null, _parent, _scopeId));
541
+ if (unref(onlineMode)) _push(ssrRenderComponent(_component_UButton, {
542
+ icon: "i-lucide-refresh-cw",
543
+ label: "刷新在线版本",
544
+ color: "neutral",
545
+ variant: "outline",
546
+ onClick: ($event) => onlineRevision.value = Date.now()
547
+ }, null, _parent, _scopeId));
548
+ else _push(ssrRenderComponent(_component_UButton, {
549
+ icon: "i-lucide-scan-line",
550
+ label: "运行像素 diff",
551
+ disabled: unref(diffRunning),
552
+ loading: unref(diffRunning),
553
+ onClick: compare
554
+ }, null, _parent, _scopeId));
555
+ _push(`<!--]-->`);
556
+ } else _push(`<!---->`);
557
+ } else return [unref(selectionStage) === "compare" ? (openBlock(), createBlock(Fragment, { key: 0 }, [createVNode(_component_UButton, {
558
+ icon: "i-lucide-files",
559
+ label: "重新选择",
560
+ color: "neutral",
561
+ variant: "outline",
562
+ disabled: unref(diffRunning),
563
+ onClick: chooseAgain
564
+ }, null, 8, ["disabled"]), unref(onlineMode) ? (openBlock(), createBlock(_component_UButton, {
565
+ key: 0,
566
+ icon: "i-lucide-refresh-cw",
567
+ label: "刷新在线版本",
568
+ color: "neutral",
569
+ variant: "outline",
570
+ onClick: ($event) => onlineRevision.value = Date.now()
571
+ }, null, 8, ["onClick"])) : (openBlock(), createBlock(_component_UButton, {
572
+ key: 1,
573
+ icon: "i-lucide-scan-line",
574
+ label: "运行像素 diff",
575
+ disabled: unref(diffRunning),
576
+ loading: unref(diffRunning),
577
+ onClick: compare
578
+ }, null, 8, ["disabled", "loading"]))], 64)) : createCommentVNode("", true)];
579
+ }),
580
+ _: 1
581
+ }, _parent, _scopeId));
582
+ else return [createVNode(_component_UDashboardNavbar, { title: "地图版本对比" }, {
583
+ right: withCtx(() => [unref(selectionStage) === "compare" ? (openBlock(), createBlock(Fragment, { key: 0 }, [createVNode(_component_UButton, {
584
+ icon: "i-lucide-files",
585
+ label: "重新选择",
586
+ color: "neutral",
587
+ variant: "outline",
588
+ disabled: unref(diffRunning),
589
+ onClick: chooseAgain
590
+ }, null, 8, ["disabled"]), unref(onlineMode) ? (openBlock(), createBlock(_component_UButton, {
591
+ key: 0,
592
+ icon: "i-lucide-refresh-cw",
593
+ label: "刷新在线版本",
594
+ color: "neutral",
595
+ variant: "outline",
596
+ onClick: ($event) => onlineRevision.value = Date.now()
597
+ }, null, 8, ["onClick"])) : (openBlock(), createBlock(_component_UButton, {
598
+ key: 1,
599
+ icon: "i-lucide-scan-line",
600
+ label: "运行像素 diff",
601
+ disabled: unref(diffRunning),
602
+ loading: unref(diffRunning),
603
+ onClick: compare
604
+ }, null, 8, ["disabled", "loading"]))], 64)) : createCommentVNode("", true)]),
605
+ _: 1
606
+ })];
607
+ }),
608
+ body: withCtx((_, _push, _parent, _scopeId) => {
609
+ if (_push) {
610
+ if (!unref(workspace).ready.value) {
611
+ _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}>`);
612
+ _push(ssrRenderComponent(_component_UIcon, {
613
+ name: "i-lucide-loader-circle",
614
+ class: "size-5 animate-spin text-primary"
615
+ }, null, _parent, _scopeId));
616
+ _push(`<span${_scopeId}>加载地图文件</span></div></div>`);
617
+ } else if (unref(selectionStage) === "select") {
618
+ _push(`<div class="grid min-h-0 flex-1 place-items-center overflow-y-auto px-5 py-8"${_scopeId}><div class="grid w-full max-w-5xl gap-4 xl:grid-cols-2"${_scopeId}><div class="space-y-2"${_scopeId}>`);
619
+ _push(ssrRenderComponent(_component_FileDropZone, {
620
+ accept: ".uomtiles,.mbtiles,.pmtiles",
621
+ title: "选择左侧版本",
622
+ "file-name": unref(leftFilename) === "online" ? "UOM 在线版本" : unref(left) ? unref(displayMapFileName)(unref(left).filename) : void 0,
623
+ pending: unref(leftPending),
624
+ onSelect: ($event) => openVersion("left", $event)
625
+ }, null, _parent, _scopeId));
626
+ _push(ssrRenderComponent(_component_CompletedTaskSelect, {
627
+ modelValue: unref(leftFilename),
628
+ "onUpdate:modelValue": ($event) => isRef(leftFilename) ? leftFilename.value = $event : null,
629
+ class: "w-full"
630
+ }, null, _parent, _scopeId));
631
+ _push(ssrRenderComponent(_component_UButton, {
632
+ icon: "i-lucide-cloud",
633
+ label: "使用 UOM 在线版本",
634
+ color: "neutral",
635
+ variant: unref(leftFilename) === "online" ? "soft" : "outline",
636
+ block: "",
637
+ onClick: ($event) => selectOnline("left")
638
+ }, null, _parent, _scopeId));
639
+ _push(`</div><div class="space-y-2"${_scopeId}>`);
640
+ _push(ssrRenderComponent(_component_FileDropZone, {
641
+ accept: ".uomtiles,.mbtiles,.pmtiles",
642
+ title: "选择右侧版本",
643
+ "file-name": unref(rightFilename) === "online" ? "UOM 在线版本" : unref(right) ? unref(displayMapFileName)(unref(right).filename) : void 0,
644
+ pending: unref(rightPending),
645
+ onSelect: ($event) => openVersion("right", $event)
646
+ }, null, _parent, _scopeId));
647
+ _push(ssrRenderComponent(_component_CompletedTaskSelect, {
648
+ modelValue: unref(rightFilename),
649
+ "onUpdate:modelValue": ($event) => isRef(rightFilename) ? rightFilename.value = $event : null,
650
+ class: "w-full"
651
+ }, null, _parent, _scopeId));
652
+ _push(ssrRenderComponent(_component_UButton, {
653
+ icon: "i-lucide-cloud",
654
+ label: "使用 UOM 在线版本",
655
+ color: "neutral",
656
+ variant: unref(rightFilename) === "online" ? "soft" : "outline",
657
+ block: "",
658
+ onClick: ($event) => selectOnline("right")
659
+ }, null, _parent, _scopeId));
660
+ _push(`</div><div class="flex justify-end xl:col-span-2"${_scopeId}>`);
661
+ _push(ssrRenderComponent(_component_UButton, {
662
+ icon: "i-lucide-columns-2",
663
+ label: "开始比较",
664
+ size: "lg",
665
+ disabled: !unref(selectionReady),
666
+ onClick: beginCompare
667
+ }, null, _parent, _scopeId));
668
+ _push(`</div></div></div>`);
669
+ } else if (unref(selectionReady)) {
670
+ _push(`<div class="flex min-h-0 flex-1 flex-col"${_scopeId}><div class="flex flex-wrap items-center justify-between gap-3 border-b border-default px-5 py-3"${_scopeId}><div class="flex min-w-0 items-center gap-2 text-sm"${_scopeId}><span class="max-w-56 truncate font-medium"${_scopeId}>${ssrInterpolate(label(unref(leftFilename)))}</span>`);
671
+ _push(ssrRenderComponent(_component_UIcon, {
672
+ name: "i-lucide-arrow-right",
673
+ class: "size-4 shrink-0 text-muted"
674
+ }, null, _parent, _scopeId));
675
+ _push(`<span class="max-w-56 truncate font-medium"${_scopeId}>${ssrInterpolate(label(unref(rightFilename)))}</span></div><div class="flex flex-wrap items-center gap-3"${_scopeId}>`);
676
+ _push(ssrRenderComponent(_component_UTabs, {
677
+ modelValue: unref(mode),
678
+ "onUpdate:modelValue": ($event) => isRef(mode) ? mode.value = $event : null,
679
+ items: modeItems,
680
+ content: false,
681
+ size: "sm",
682
+ class: "w-[22rem]"
683
+ }, null, _parent, _scopeId));
684
+ _push(ssrRenderComponent(_component_MapBaseLayerTabs, {
685
+ modelValue: unref(baseMap),
686
+ "onUpdate:modelValue": ($event) => isRef(baseMap) ? baseMap.value = $event : null
687
+ }, null, _parent, _scopeId));
688
+ if (!unref(onlineMode) && !unref(pixelPanelOpen)) _push(ssrRenderComponent(_component_UButton, {
689
+ icon: "i-lucide-panel-right-open",
690
+ label: "逐像素校验",
691
+ color: "neutral",
692
+ variant: "outline",
693
+ onClick: ($event) => pixelPanelOpen.value = true
694
+ }, null, _parent, _scopeId));
695
+ else _push(`<!---->`);
696
+ _push(`</div></div><div class="${ssrRenderClass([unref(onlineMode) || !unref(pixelPanelOpen) ? "" : "xl:grid-cols-[minmax(0,1fr)_24rem]", "grid min-h-0 flex-1"])}"${_scopeId}><div class="${ssrRenderClass([!unref(onlineMode) && unref(pixelPanelOpen) ? "border-r border-default" : "", "min-h-[560px]"])}"${_scopeId}>`);
697
+ _push(ssrRenderComponent(_component_VersionCompare, {
698
+ key: `${unref(leftFilename)}-${unref(rightFilename)}-${unref(onlineRevision)}`,
699
+ "left-urls": urls(unref(leftFilename)),
700
+ "right-urls": urls(unref(rightFilename)),
701
+ "left-diff-root-urls": unref(leftFilename) === "online" ? unref(onlineRootUrls) : void 0,
702
+ "right-diff-root-urls": unref(rightFilename) === "online" ? unref(onlineRootUrls) : void 0,
703
+ "left-source-version": unref(leftFilename) === "online" ? String(unref(onlineRevision)) : unref(leftFilename),
704
+ "right-source-version": unref(rightFilename) === "online" ? String(unref(onlineRevision)) : unref(rightFilename),
705
+ "left-label": label(unref(leftFilename)),
706
+ "right-label": label(unref(rightFilename)),
707
+ mode: unref(mode),
708
+ "base-map": unref(baseMap),
709
+ "live-status-url": unref(onlineMode) ? `/api/map/live/status?v=${unref(onlineRevision)}` : void 0,
710
+ "focus-tile": unref(selectedTile),
711
+ "min-zoom": unref(onlineMode) ? 6 : 3,
712
+ "max-zoom": 24,
713
+ "left-source-min-zoom": sourceMin(unref(leftFilename)),
714
+ "right-source-min-zoom": sourceMin(unref(rightFilename)),
715
+ "left-source-max-zoom": sourceMax(unref(leftFilename)),
716
+ "right-source-max-zoom": sourceMax(unref(rightFilename)),
717
+ "local-sources": unref(localFiles).map((file) => ({
718
+ id: file.id,
719
+ file: file.file
720
+ })),
721
+ "left-resampling": unref(leftFilename) === "online" ? "linear" : "nearest",
722
+ "right-resampling": unref(rightFilename) === "online" ? "linear" : "nearest"
723
+ }, null, _parent, _scopeId));
724
+ _push(`</div>`);
725
+ if (!unref(onlineMode) && unref(pixelPanelOpen)) {
726
+ _push(`<aside class="flex min-h-0 flex-col overflow-hidden border-l border-default"${_scopeId}>`);
727
+ _push(ssrRenderComponent(_component_UButton, {
728
+ block: "",
729
+ color: "neutral",
730
+ variant: "ghost",
731
+ label: "逐像素校验",
732
+ "trailing-icon": "i-lucide-panel-right-close",
733
+ ui: { base: "justify-between rounded-none border-b border-default px-5 py-3" },
734
+ onClick: ($event) => pixelPanelOpen.value = false
735
+ }, null, _parent, _scopeId));
736
+ _push(`<div class="flex h-full min-h-0 flex-col overflow-hidden"${_scopeId}><div class="border-b border-default px-5 py-4"${_scopeId}><div class="flex items-center justify-between gap-4"${_scopeId}><span class="text-xs text-muted"${_scopeId}>${ssrInterpolate(unref(state) === "running" ? `${unref(workerCount)} Workers` : "全图瓦片")}</span></div>`);
737
+ if (unref(running)) {
738
+ _push(`<div class="mt-4"${_scopeId}>`);
739
+ _push(ssrRenderComponent(_component_UProgress, {
740
+ "model-value": unref(progress),
741
+ max: 100,
742
+ size: "sm"
743
+ }, null, _parent, _scopeId));
744
+ _push(`<div class="mt-2 flex items-center justify-between gap-3 text-xs text-muted"${_scopeId}><span${_scopeId}>${ssrInterpolate(unref(state) === "preparing" ? "正在建立瓦片索引" : `${number(unref(totals).processedTiles)} / ${number(unref(totalTiles))} tiles`)}</span>`);
745
+ if (unref(state) === "running") _push(`<span${_scopeId}>已发现 ${ssrInterpolate(number(unref(totals).changedTiles))} 个差异</span>`);
746
+ else _push(`<!---->`);
747
+ _push(`</div></div>`);
748
+ } else if (unref(state) === "error") _push(ssrRenderComponent(_component_UAlert, {
749
+ class: "mt-4",
750
+ color: "error",
751
+ icon: "i-lucide-circle-x",
752
+ title: "像素 diff 失败",
753
+ description: unref(error) || void 0
754
+ }, null, _parent, _scopeId));
755
+ else if (unref(report)) _push(ssrRenderComponent(_component_UAlert, {
756
+ class: "mt-4",
757
+ color: unref(report).identical ? "success" : "warning",
758
+ icon: unref(report).identical ? "i-lucide-circle-check" : "i-lucide-triangle-alert",
759
+ title: unref(report).identical ? "两个版本像素完全一致" : "检测到像素差异"
760
+ }, null, _parent, _scopeId));
761
+ else _push(`<!---->`);
762
+ if (unref(report)) _push(`<div class="mt-4 grid grid-cols-2 gap-x-5 gap-y-4 text-sm"${_scopeId}><div${_scopeId}><p class="text-xs text-muted"${_scopeId}>差异瓦片</p><p class="uom-mono mt-1"${_scopeId}>${ssrInterpolate(number(unref(report).changedTiles))}</p></div><div${_scopeId}><p class="text-xs text-muted"${_scopeId}>全图差异</p><p class="uom-mono mt-1"${_scopeId}>${ssrInterpolate(percent(unref(overallDiffPercent)))}</p></div><div${_scopeId}><p class="text-xs text-muted"${_scopeId}>新增像素</p><p class="uom-mono mt-1 text-success"${_scopeId}>+${ssrInterpolate(number(unref(report).addedPixels))}</p></div><div${_scopeId}><p class="text-xs text-muted"${_scopeId}>移除像素</p><p class="uom-mono mt-1 text-error"${_scopeId}>-${ssrInterpolate(number(unref(report).removedPixels))}</p></div></div>`);
763
+ else _push(`<!---->`);
764
+ _push(`</div>`);
765
+ if (unref(report)?.tiles.length) {
766
+ _push(`<div class="flex min-h-0 flex-1 flex-col"${_scopeId}><div class="grid grid-cols-[1fr_5.5rem_4rem_4rem] gap-2 border-b border-default px-4 py-2 text-[11px] text-muted"${_scopeId}><span${_scopeId}>瓦片</span><span class="text-right"${_scopeId}>diff%</span><span class="text-right"${_scopeId}>新增</span><span class="text-right"${_scopeId}>移除</span></div>`);
767
+ _push(ssrRenderComponent(_component_UScrollArea, { class: "min-h-0 flex-1" }, {
768
+ default: withCtx((_, _push, _parent, _scopeId) => {
769
+ if (_push) {
770
+ _push(`<!--[-->`);
771
+ ssrRenderList(unref(pagedTiles), (tile) => {
772
+ _push(`<button type="button" class="${ssrRenderClass([unref(selectedTile) === tile ? "bg-elevated" : "", "grid w-full grid-cols-[1fr_5.5rem_4rem_4rem] gap-2 border-b border-default px-4 py-2.5 text-left text-xs transition-colors hover:bg-elevated focus-visible:outline-2 focus-visible:outline-primary"])}"${_scopeId}><span class="uom-mono truncate"${_scopeId}>z${ssrInterpolate(tile.z)}/${ssrInterpolate(tile.x)}/${ssrInterpolate(tile.y)}</span><span class="uom-mono text-right font-medium"${_scopeId}>${ssrInterpolate(percent(tile.diffPercent))}</span><span class="uom-mono text-right text-success"${_scopeId}>${ssrInterpolate(number(tile.addedPixels))}</span><span class="uom-mono text-right text-error"${_scopeId}>${ssrInterpolate(number(tile.removedPixels))}</span></button>`);
773
+ });
774
+ _push(`<!--]-->`);
775
+ } else return [(openBlock(true), createBlock(Fragment, null, renderList(unref(pagedTiles), (tile) => {
776
+ return openBlock(), createBlock("button", {
777
+ key: `${tile.z}/${tile.x}/${tile.y}`,
778
+ type: "button",
779
+ class: ["grid w-full grid-cols-[1fr_5.5rem_4rem_4rem] gap-2 border-b border-default px-4 py-2.5 text-left text-xs transition-colors hover:bg-elevated focus-visible:outline-2 focus-visible:outline-primary", unref(selectedTile) === tile ? "bg-elevated" : ""],
780
+ onClick: ($event) => selectTile(tile)
781
+ }, [
782
+ createVNode("span", { class: "uom-mono truncate" }, "z" + toDisplayString(tile.z) + "/" + toDisplayString(tile.x) + "/" + toDisplayString(tile.y), 1),
783
+ createVNode("span", { class: "uom-mono text-right font-medium" }, toDisplayString(percent(tile.diffPercent)), 1),
784
+ createVNode("span", { class: "uom-mono text-right text-success" }, toDisplayString(number(tile.addedPixels)), 1),
785
+ createVNode("span", { class: "uom-mono text-right text-error" }, toDisplayString(number(tile.removedPixels)), 1)
786
+ ], 10, ["onClick"]);
787
+ }), 128))];
788
+ }),
789
+ _: 1
790
+ }, _parent, _scopeId));
791
+ _push(`<div class="flex items-center justify-between border-t border-default px-4 py-3"${_scopeId}><span class="text-xs text-muted"${_scopeId}>按 diff% 降序</span>`);
792
+ _push(ssrRenderComponent(_component_UPagination, {
793
+ page: unref(page),
794
+ "onUpdate:page": ($event) => isRef(page) ? page.value = $event : null,
795
+ "items-per-page": pageSize,
796
+ total: unref(report).tiles.length,
797
+ size: "xs"
798
+ }, null, _parent, _scopeId));
799
+ _push(`</div></div>`);
800
+ } else if (unref(report)) {
801
+ _push(`<div class="grid min-h-[220px] flex-1 place-items-center px-6 text-center"${_scopeId}>`);
802
+ _push(ssrRenderComponent(_component_UEmpty, {
803
+ icon: "i-lucide-circle-check",
804
+ title: "没有像素差异"
805
+ }, null, _parent, _scopeId));
806
+ _push(`</div>`);
807
+ } else if (!unref(running) && unref(state) !== "error") {
808
+ _push(`<div class="grid min-h-[220px] flex-1 place-items-center px-6 text-center"${_scopeId}>`);
809
+ _push(ssrRenderComponent(_component_UEmpty, {
810
+ icon: "i-lucide-scan-line",
811
+ title: "尚未运行像素 diff"
812
+ }, null, _parent, _scopeId));
813
+ _push(`</div>`);
814
+ } else _push(`<!---->`);
815
+ _push(`</div></aside>`);
816
+ } else _push(`<!---->`);
817
+ _push(`</div></div>`);
818
+ } else {
819
+ _push(`<div class="grid h-full place-items-center"${_scopeId}>`);
820
+ _push(ssrRenderComponent(_component_UEmpty, {
821
+ icon: "i-lucide-files",
822
+ title: "请选择两个不同版本"
823
+ }, null, _parent, _scopeId));
824
+ _push(`</div>`);
825
+ }
826
+ } else return [!unref(workspace).ready.value ? (openBlock(), createBlock("div", {
827
+ key: 0,
828
+ class: "grid min-h-[32rem] flex-1 place-items-center"
829
+ }, [createVNode("div", { class: "flex flex-col items-center gap-3 text-sm text-muted" }, [createVNode(_component_UIcon, {
830
+ name: "i-lucide-loader-circle",
831
+ class: "size-5 animate-spin text-primary"
832
+ }), createVNode("span", null, "加载地图文件")])])) : unref(selectionStage) === "select" ? (openBlock(), createBlock("div", {
833
+ key: 1,
834
+ class: "grid min-h-0 flex-1 place-items-center overflow-y-auto px-5 py-8"
835
+ }, [createVNode("div", { class: "grid w-full max-w-5xl gap-4 xl:grid-cols-2" }, [
836
+ createVNode("div", { class: "space-y-2" }, [
837
+ createVNode(_component_FileDropZone, {
838
+ accept: ".uomtiles,.mbtiles,.pmtiles",
839
+ title: "选择左侧版本",
840
+ "file-name": unref(leftFilename) === "online" ? "UOM 在线版本" : unref(left) ? unref(displayMapFileName)(unref(left).filename) : void 0,
841
+ pending: unref(leftPending),
842
+ onSelect: ($event) => openVersion("left", $event)
843
+ }, null, 8, [
844
+ "file-name",
845
+ "pending",
846
+ "onSelect"
847
+ ]),
848
+ createVNode(_component_CompletedTaskSelect, {
849
+ modelValue: unref(leftFilename),
850
+ "onUpdate:modelValue": ($event) => isRef(leftFilename) ? leftFilename.value = $event : null,
851
+ class: "w-full"
852
+ }, null, 8, ["modelValue", "onUpdate:modelValue"]),
853
+ createVNode(_component_UButton, {
854
+ icon: "i-lucide-cloud",
855
+ label: "使用 UOM 在线版本",
856
+ color: "neutral",
857
+ variant: unref(leftFilename) === "online" ? "soft" : "outline",
858
+ block: "",
859
+ onClick: ($event) => selectOnline("left")
860
+ }, null, 8, ["variant", "onClick"])
861
+ ]),
862
+ createVNode("div", { class: "space-y-2" }, [
863
+ createVNode(_component_FileDropZone, {
864
+ accept: ".uomtiles,.mbtiles,.pmtiles",
865
+ title: "选择右侧版本",
866
+ "file-name": unref(rightFilename) === "online" ? "UOM 在线版本" : unref(right) ? unref(displayMapFileName)(unref(right).filename) : void 0,
867
+ pending: unref(rightPending),
868
+ onSelect: ($event) => openVersion("right", $event)
869
+ }, null, 8, [
870
+ "file-name",
871
+ "pending",
872
+ "onSelect"
873
+ ]),
874
+ createVNode(_component_CompletedTaskSelect, {
875
+ modelValue: unref(rightFilename),
876
+ "onUpdate:modelValue": ($event) => isRef(rightFilename) ? rightFilename.value = $event : null,
877
+ class: "w-full"
878
+ }, null, 8, ["modelValue", "onUpdate:modelValue"]),
879
+ createVNode(_component_UButton, {
880
+ icon: "i-lucide-cloud",
881
+ label: "使用 UOM 在线版本",
882
+ color: "neutral",
883
+ variant: unref(rightFilename) === "online" ? "soft" : "outline",
884
+ block: "",
885
+ onClick: ($event) => selectOnline("right")
886
+ }, null, 8, ["variant", "onClick"])
887
+ ]),
888
+ createVNode("div", { class: "flex justify-end xl:col-span-2" }, [createVNode(_component_UButton, {
889
+ icon: "i-lucide-columns-2",
890
+ label: "开始比较",
891
+ size: "lg",
892
+ disabled: !unref(selectionReady),
893
+ onClick: beginCompare
894
+ }, null, 8, ["disabled"])])
895
+ ])])) : unref(selectionReady) ? (openBlock(), createBlock("div", {
896
+ key: 2,
897
+ class: "flex min-h-0 flex-1 flex-col"
898
+ }, [createVNode("div", { class: "flex flex-wrap items-center justify-between gap-3 border-b border-default px-5 py-3" }, [createVNode("div", { class: "flex min-w-0 items-center gap-2 text-sm" }, [
899
+ createVNode("span", { class: "max-w-56 truncate font-medium" }, toDisplayString(label(unref(leftFilename))), 1),
900
+ createVNode(_component_UIcon, {
901
+ name: "i-lucide-arrow-right",
902
+ class: "size-4 shrink-0 text-muted"
903
+ }),
904
+ createVNode("span", { class: "max-w-56 truncate font-medium" }, toDisplayString(label(unref(rightFilename))), 1)
905
+ ]), createVNode("div", { class: "flex flex-wrap items-center gap-3" }, [
906
+ createVNode(_component_UTabs, {
907
+ modelValue: unref(mode),
908
+ "onUpdate:modelValue": ($event) => isRef(mode) ? mode.value = $event : null,
909
+ items: modeItems,
910
+ content: false,
911
+ size: "sm",
912
+ class: "w-[22rem]"
913
+ }, null, 8, ["modelValue", "onUpdate:modelValue"]),
914
+ createVNode(_component_MapBaseLayerTabs, {
915
+ modelValue: unref(baseMap),
916
+ "onUpdate:modelValue": ($event) => isRef(baseMap) ? baseMap.value = $event : null
917
+ }, null, 8, ["modelValue", "onUpdate:modelValue"]),
918
+ !unref(onlineMode) && !unref(pixelPanelOpen) ? (openBlock(), createBlock(_component_UButton, {
919
+ key: 0,
920
+ icon: "i-lucide-panel-right-open",
921
+ label: "逐像素校验",
922
+ color: "neutral",
923
+ variant: "outline",
924
+ onClick: ($event) => pixelPanelOpen.value = true
925
+ }, null, 8, ["onClick"])) : createCommentVNode("", true)
926
+ ])]), createVNode("div", { class: ["grid min-h-0 flex-1", unref(onlineMode) || !unref(pixelPanelOpen) ? "" : "xl:grid-cols-[minmax(0,1fr)_24rem]"] }, [createVNode("div", { class: ["min-h-[560px]", !unref(onlineMode) && unref(pixelPanelOpen) ? "border-r border-default" : ""] }, [(openBlock(), createBlock(_component_VersionCompare, {
927
+ key: `${unref(leftFilename)}-${unref(rightFilename)}-${unref(onlineRevision)}`,
928
+ "left-urls": urls(unref(leftFilename)),
929
+ "right-urls": urls(unref(rightFilename)),
930
+ "left-diff-root-urls": unref(leftFilename) === "online" ? unref(onlineRootUrls) : void 0,
931
+ "right-diff-root-urls": unref(rightFilename) === "online" ? unref(onlineRootUrls) : void 0,
932
+ "left-source-version": unref(leftFilename) === "online" ? String(unref(onlineRevision)) : unref(leftFilename),
933
+ "right-source-version": unref(rightFilename) === "online" ? String(unref(onlineRevision)) : unref(rightFilename),
934
+ "left-label": label(unref(leftFilename)),
935
+ "right-label": label(unref(rightFilename)),
936
+ mode: unref(mode),
937
+ "base-map": unref(baseMap),
938
+ "live-status-url": unref(onlineMode) ? `/api/map/live/status?v=${unref(onlineRevision)}` : void 0,
939
+ "focus-tile": unref(selectedTile),
940
+ "min-zoom": unref(onlineMode) ? 6 : 3,
941
+ "max-zoom": 24,
942
+ "left-source-min-zoom": sourceMin(unref(leftFilename)),
943
+ "right-source-min-zoom": sourceMin(unref(rightFilename)),
944
+ "left-source-max-zoom": sourceMax(unref(leftFilename)),
945
+ "right-source-max-zoom": sourceMax(unref(rightFilename)),
946
+ "local-sources": unref(localFiles).map((file) => ({
947
+ id: file.id,
948
+ file: file.file
949
+ })),
950
+ "left-resampling": unref(leftFilename) === "online" ? "linear" : "nearest",
951
+ "right-resampling": unref(rightFilename) === "online" ? "linear" : "nearest"
952
+ }, null, 8, [
953
+ "left-urls",
954
+ "right-urls",
955
+ "left-diff-root-urls",
956
+ "right-diff-root-urls",
957
+ "left-source-version",
958
+ "right-source-version",
959
+ "left-label",
960
+ "right-label",
961
+ "mode",
962
+ "base-map",
963
+ "live-status-url",
964
+ "focus-tile",
965
+ "min-zoom",
966
+ "left-source-min-zoom",
967
+ "right-source-min-zoom",
968
+ "left-source-max-zoom",
969
+ "right-source-max-zoom",
970
+ "local-sources",
971
+ "left-resampling",
972
+ "right-resampling"
973
+ ]))], 2), !unref(onlineMode) && unref(pixelPanelOpen) ? (openBlock(), createBlock("aside", {
974
+ key: 0,
975
+ class: "flex min-h-0 flex-col overflow-hidden border-l border-default"
976
+ }, [createVNode(_component_UButton, {
977
+ block: "",
978
+ color: "neutral",
979
+ variant: "ghost",
980
+ label: "逐像素校验",
981
+ "trailing-icon": "i-lucide-panel-right-close",
982
+ ui: { base: "justify-between rounded-none border-b border-default px-5 py-3" },
983
+ onClick: ($event) => pixelPanelOpen.value = false
984
+ }, null, 8, ["onClick"]), createVNode("div", { class: "flex h-full min-h-0 flex-col overflow-hidden" }, [createVNode("div", { class: "border-b border-default px-5 py-4" }, [
985
+ createVNode("div", { class: "flex items-center justify-between gap-4" }, [createVNode("span", { class: "text-xs text-muted" }, toDisplayString(unref(state) === "running" ? `${unref(workerCount)} Workers` : "全图瓦片"), 1)]),
986
+ unref(running) ? (openBlock(), createBlock("div", {
987
+ key: 0,
988
+ class: "mt-4"
989
+ }, [createVNode(_component_UProgress, {
990
+ "model-value": unref(progress),
991
+ max: 100,
992
+ size: "sm"
993
+ }, null, 8, ["model-value"]), createVNode("div", { class: "mt-2 flex items-center justify-between gap-3 text-xs text-muted" }, [createVNode("span", null, toDisplayString(unref(state) === "preparing" ? "正在建立瓦片索引" : `${number(unref(totals).processedTiles)} / ${number(unref(totalTiles))} tiles`), 1), unref(state) === "running" ? (openBlock(), createBlock("span", { key: 0 }, "已发现 " + toDisplayString(number(unref(totals).changedTiles)) + " 个差异", 1)) : createCommentVNode("", true)])])) : unref(state) === "error" ? (openBlock(), createBlock(_component_UAlert, {
994
+ key: 1,
995
+ class: "mt-4",
996
+ color: "error",
997
+ icon: "i-lucide-circle-x",
998
+ title: "像素 diff 失败",
999
+ description: unref(error) || void 0
1000
+ }, null, 8, ["description"])) : unref(report) ? (openBlock(), createBlock(_component_UAlert, {
1001
+ key: 2,
1002
+ class: "mt-4",
1003
+ color: unref(report).identical ? "success" : "warning",
1004
+ icon: unref(report).identical ? "i-lucide-circle-check" : "i-lucide-triangle-alert",
1005
+ title: unref(report).identical ? "两个版本像素完全一致" : "检测到像素差异"
1006
+ }, null, 8, [
1007
+ "color",
1008
+ "icon",
1009
+ "title"
1010
+ ])) : createCommentVNode("", true),
1011
+ unref(report) ? (openBlock(), createBlock("div", {
1012
+ key: 3,
1013
+ class: "mt-4 grid grid-cols-2 gap-x-5 gap-y-4 text-sm"
1014
+ }, [
1015
+ createVNode("div", null, [createVNode("p", { class: "text-xs text-muted" }, "差异瓦片"), createVNode("p", { class: "uom-mono mt-1" }, toDisplayString(number(unref(report).changedTiles)), 1)]),
1016
+ createVNode("div", null, [createVNode("p", { class: "text-xs text-muted" }, "全图差异"), createVNode("p", { class: "uom-mono mt-1" }, toDisplayString(percent(unref(overallDiffPercent))), 1)]),
1017
+ createVNode("div", null, [createVNode("p", { class: "text-xs text-muted" }, "新增像素"), createVNode("p", { class: "uom-mono mt-1 text-success" }, "+" + toDisplayString(number(unref(report).addedPixels)), 1)]),
1018
+ createVNode("div", null, [createVNode("p", { class: "text-xs text-muted" }, "移除像素"), createVNode("p", { class: "uom-mono mt-1 text-error" }, "-" + toDisplayString(number(unref(report).removedPixels)), 1)])
1019
+ ])) : createCommentVNode("", true)
1020
+ ]), unref(report)?.tiles.length ? (openBlock(), createBlock("div", {
1021
+ key: 0,
1022
+ class: "flex min-h-0 flex-1 flex-col"
1023
+ }, [
1024
+ createVNode("div", { class: "grid grid-cols-[1fr_5.5rem_4rem_4rem] gap-2 border-b border-default px-4 py-2 text-[11px] text-muted" }, [
1025
+ createVNode("span", null, "瓦片"),
1026
+ createVNode("span", { class: "text-right" }, "diff%"),
1027
+ createVNode("span", { class: "text-right" }, "新增"),
1028
+ createVNode("span", { class: "text-right" }, "移除")
1029
+ ]),
1030
+ createVNode(_component_UScrollArea, { class: "min-h-0 flex-1" }, {
1031
+ default: withCtx(() => [(openBlock(true), createBlock(Fragment, null, renderList(unref(pagedTiles), (tile) => {
1032
+ return openBlock(), createBlock("button", {
1033
+ key: `${tile.z}/${tile.x}/${tile.y}`,
1034
+ type: "button",
1035
+ class: ["grid w-full grid-cols-[1fr_5.5rem_4rem_4rem] gap-2 border-b border-default px-4 py-2.5 text-left text-xs transition-colors hover:bg-elevated focus-visible:outline-2 focus-visible:outline-primary", unref(selectedTile) === tile ? "bg-elevated" : ""],
1036
+ onClick: ($event) => selectTile(tile)
1037
+ }, [
1038
+ createVNode("span", { class: "uom-mono truncate" }, "z" + toDisplayString(tile.z) + "/" + toDisplayString(tile.x) + "/" + toDisplayString(tile.y), 1),
1039
+ createVNode("span", { class: "uom-mono text-right font-medium" }, toDisplayString(percent(tile.diffPercent)), 1),
1040
+ createVNode("span", { class: "uom-mono text-right text-success" }, toDisplayString(number(tile.addedPixels)), 1),
1041
+ createVNode("span", { class: "uom-mono text-right text-error" }, toDisplayString(number(tile.removedPixels)), 1)
1042
+ ], 10, ["onClick"]);
1043
+ }), 128))]),
1044
+ _: 1
1045
+ }),
1046
+ createVNode("div", { class: "flex items-center justify-between border-t border-default px-4 py-3" }, [createVNode("span", { class: "text-xs text-muted" }, "按 diff% 降序"), createVNode(_component_UPagination, {
1047
+ page: unref(page),
1048
+ "onUpdate:page": ($event) => isRef(page) ? page.value = $event : null,
1049
+ "items-per-page": pageSize,
1050
+ total: unref(report).tiles.length,
1051
+ size: "xs"
1052
+ }, null, 8, [
1053
+ "page",
1054
+ "onUpdate:page",
1055
+ "total"
1056
+ ])])
1057
+ ])) : unref(report) ? (openBlock(), createBlock("div", {
1058
+ key: 1,
1059
+ class: "grid min-h-[220px] flex-1 place-items-center px-6 text-center"
1060
+ }, [createVNode(_component_UEmpty, {
1061
+ icon: "i-lucide-circle-check",
1062
+ title: "没有像素差异"
1063
+ })])) : !unref(running) && unref(state) !== "error" ? (openBlock(), createBlock("div", {
1064
+ key: 2,
1065
+ class: "grid min-h-[220px] flex-1 place-items-center px-6 text-center"
1066
+ }, [createVNode(_component_UEmpty, {
1067
+ icon: "i-lucide-scan-line",
1068
+ title: "尚未运行像素 diff"
1069
+ })])) : createCommentVNode("", true)])])) : createCommentVNode("", true)], 2)])) : (openBlock(), createBlock("div", {
1070
+ key: 3,
1071
+ class: "grid h-full place-items-center"
1072
+ }, [createVNode(_component_UEmpty, {
1073
+ icon: "i-lucide-files",
1074
+ title: "请选择两个不同版本"
1075
+ })]))];
1076
+ }),
1077
+ _: 1
1078
+ }, _parent));
1079
+ };
1080
+ }
1081
+ });
1082
+ //#endregion
1083
+ //#region app/pages/compare.vue
1084
+ var _sfc_setup = compare_vue_vue_type_script_setup_true_lang_default.setup;
1085
+ compare_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
1086
+ const ssrContext = useSSRContext();
1087
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/compare.vue");
1088
+ return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
1089
+ };
1090
+ var compare_default = compare_vue_vue_type_script_setup_true_lang_default;
1091
+
1092
+ export { compare_default as default };
1093
+ //# sourceMappingURL=compare-DmSAW8oA.mjs.map