fix(geo): replace leaflet-draw на custom DIY draw — fix instant-finish bug

leaflet-draw 1.0.4 (последний release 2017) сломан с Leaflet 1.8+:
mousedown сразу триггерит mouseup, прямоугольник схлопывается в
точку при первом нажатии. На пользовательском скрине quadrate ~5px
вместо нарисованной области.

Заменил полностью на свою draw-implementation (~80 строк):
- Toolbar UI: 3 кнопки (Прямоугольник / Полигон / Очистить)
- Active mode highlights ultramarain background
- Rectangle: mousedown → preview → mouseup finalize. Map.dragging
  отключается в rectangle mode чтобы drag не панил карту.
- Polygon: click добавляет вершину + dashed mouse-line preview к
  курсору. Double-click closes (min 3 vertices). doubleClickZoom
  disabled на map чтобы не конфликтовало.
- DrawMode read через ref чтобы listeners не пересоздавались на
  каждом state change.

Удалены deps:
- leaflet-draw 1.0.4 (broken)
- @types/leaflet-draw

Bundle: -68KB minified / -23KB gzip (less broken legacy code).

Tests: 89 passed. i18n: RU/EN ключи для новой toolbar.
This commit is contained in:
Zimin A.N.
2026-05-06 22:22:09 +03:00
parent 7a8bfedfa5
commit c0444ccfec
4 changed files with 175 additions and 91 deletions
-18
View File
@@ -41,9 +41,6 @@ importers:
leaflet:
specifier: ^1.9.4
version: 1.9.4
leaflet-draw:
specifier: ^1.0.4
version: 1.0.4
oidc-client-ts:
specifier: ^3.5.0
version: 3.5.0
@@ -84,9 +81,6 @@ importers:
'@types/leaflet':
specifier: ^1.9.21
version: 1.9.21
'@types/leaflet-draw':
specifier: ^1.0.13
version: 1.0.13
'@types/react':
specifier: ^19.0.0
version: 19.2.14
@@ -975,9 +969,6 @@ packages:
'@types/geojson@7946.0.16':
resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
'@types/leaflet-draw@1.0.13':
resolution: {integrity: sha512-YU82kilOaU+wPNbqKCCDfHH3hqepN6XilrBwG/mSeZ/z4ewumaRCOah44s3FMxSu/Aa0SVa3PPJvhIZDUA09mw==}
'@types/leaflet@1.9.21':
resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==}
@@ -1391,9 +1382,6 @@ packages:
resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
engines: {node: '>=18'}
leaflet-draw@1.0.4:
resolution: {integrity: sha512-rsQ6saQO5ST5Aj6XRFylr5zvarWgzWnrg46zQ1MEOEIHsppdC/8hnN8qMoFvACsPvTioAuysya/TVtog15tyAQ==}
leaflet@1.9.4:
resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==}
@@ -2581,10 +2569,6 @@ snapshots:
'@types/geojson@7946.0.16': {}
'@types/leaflet-draw@1.0.13':
dependencies:
'@types/leaflet': 1.9.21
'@types/leaflet@1.9.21':
dependencies:
'@types/geojson': 7946.0.16
@@ -3034,8 +3018,6 @@ snapshots:
jwt-decode@4.0.0: {}
leaflet-draw@1.0.4: {}
leaflet@1.9.4: {}
lightningcss-android-arm64@1.32.0: