draw-libre 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/dom.ts","../src/components/last-point-panel/index.ts","../src/utils/geo_constants.ts","../src/components/map/tiles/helpers.ts","../src/utils/helpers.ts","../src/components/map/tiles/index.ts","../src/components/tooltip/index.ts","../src/components/map/cursor/constants.ts","../src/components/side-control/helpers.ts","../src/utils/constants.ts","../src/components/map/helpers.ts","../src/components/side-control/observer.ts","../src/components/side-control/events.ts","../src/utils/observable.ts","../src/store/errors.ts","../src/store/index.ts","../src/components/last-point-panel/events.ts","../src/components/map/points/helpers.ts","../src/components/map/line/utils.ts","../src/components/map/line/break-line.ts","../src/components/map/line/dynamic-line.ts","../src/components/map/line/transparent-line.ts","../src/components/map/line/index.ts","../src/components/map/points/first-point.ts","../src/components/map/points/index.ts","../src/components/map/index.ts","../src/components/side-control/index.ts","../src/components/map/mode/index.ts","../src/components/map/cursor/index.ts","../src/components/map/mouse-events/index.ts","../src/utils/options.ts","../src/index.ts"],"names":["DOM","_DOM","props","i","tagName","className","container","element","node","el","value","action","target","type","callback","options","actionFn","Panel","#props","#isHidden","#panelPopup","#initPanel","#initConsumers","#mapModeConsumer","event","store","data","#applyPanelStyles","coordinates","point","#pointPositionUpdate","#updatePanelPositionOnMapMove","mapRect","x","y","offset","#removeMapEventListeners","head","title","size","button","locale","undo","deleteButton","save","panelSize","POLYGON_BASE","LINE_BASE","POINT_BASE","ELAYERS","ESOURCES","FIRST_POINT_RADIUS","FIRST_POINT_COLOR","FIRST_POINT_PAINT_BASE","ON_LINE_POINT_PAINT_BASE","POLYGON_PAINT_BASE","LINE_PAINT_BASE","POINTS_PAINT_BASE","BREAK_PAINT_BASE","generateLayersToRender","TilesHelpers","#lastClickTime","#firstPointCircleRadius","map","#defaultPointCircleRadius","transparentLayer","layer","now","MapUtils","layerIds","coords","lat","lng","GeometryFactory","#collectGeometryCoordinates","current","visitedNodes","next","pointFeatures","val","Spatial","_Spatial","id","idx","point1","point2","A","B","P","distanceAB","distanceAP","distancePB","prev","mode","context","tiles","uuidv4","getRandomHexChar","getUuidSection","length","section","getUuidSectionSize","firstElement","lastElement","parts","throttle","fn","delay","lastArgs","shouldCall","execute","args","Tiles","#pointsFeature","#linesFeature","#polygonFeature","#init","#addSources","#addLayers","#swapLayers","source","polygonInvisible","beneathLayerId","aboveLayerId","beneath","above","#removeSources","#removeLayers","points","pointSource","lines","lineSource","polygon","polygoneSource","#renderPolygonOnMouseMove","featureIdx","newCoord","lastIdx","#renderLineOnMouseMove","BASE_Y_OFFSET_FROM_ELEMENT","BASE_X_OFFSET_FROM_ELEMENT","Tooltip","span","#activateAnimation","#getLabelDimensions","#getLeftPosition","bottom","left","labelWidth","labelHeight","#getBottomPosition","right","position","pos","CURSORS","addControlListeners","events","listener","removeControlListeners","getButtonLabel","lineTitle","polygonTitle","breakTitle","EVENTS","DEFAULT_OPTIONS","FireEvents","step","originalEvent","steps","ControlObserver","#resetAllState","_line","_polygon","_break","#checkActive","#observeModeChange","#enableButton","#disableButton","#observeGeometryChange","ControlEvents","#tooltip","#observer","#initEvents","control","#removeEvents","label","placement","#removeActiveClass","#initialize","Observable","observer","ERRORS","ListNode","Store","list","StoreHelpers","newNode","_StoreHelpers","closeGeometry","generateId","#generateIdForSteps","stepsWithoutIds","initialSteps","result","PanelEvents","panel","#onUndoClick","#onRemoveAll","#getButtonLabel","tailVal","PointHelpers","selectedStep","isOnLine","visited","aPixel","bPixel","eventPixel","insertStepIfOnLine","currentStep","updateUIAfterInsert","checkIfPointClicked","LINE_BREAK_THROTTLE_TIME","LineBreakEvents","#current","#throttledOnLineEnter","#onLineEnterBreak","#geometryBreakOnClick","#onLineLeave","nextPointId","line","lineBreakData","LINE_DYNAMIC_THROTTLE_TIME","DynamicLineEvents","#visible","#firstPoint","#secondPoint","#lineFeature","#throttledOnLineMove","#onLineMove","#storeEventsConsumer","#mouseEventsConsumer","#onMapClick","#onDoubleClick","lineClick","latLng","LINE_TRANSPARENT_THROTTLE_TIME","TransparentLineEvents","#isThrottled","#lastEvent","#onLineAdd","#onLineEnter","#processMouseMove","mouseEvents","LineEvents","#break","#transparent","#dynamic","#type","#initDynamicLine","#removeConsumers","FirstPoint","#mouseDown","#onFirstPointClick","#onFirstPointMouseEnter","#onFirstPointMouseLeave","#onFirstPointMouseUp","#onFirstPointMouseDown","#getTitle","X_OFFSET","PointEvents","#startCoordinates","#enteredStep","#selectedStep","#selectedIdx","#initFirstPointEvents","#onPointClick","#onPointMouseEnter","#onPointMouseLeave","#onPointMouseDown","#onPointMouseUp","#onMapDblClick","#removeFirstPointEvents","#onMapMouseMove","#onOwnGeometryLayersClick","#onMoveLeftClickUp","#hideLastPointPanel","#setSelectedStep","Events","#panelEvents","#controlEvents","#pointEvents","#lineEvents","#removeDrawEvents","Control","#defaultOptions","active","disabled","#createLineButton","lineVisible","#createPolygonButton","polygonVisible","#createBreakButton","breakVisible","isBreak","getInitialMode","DrawingMode","#mode","#closedGeometry","newMode","Cursor","#canvas","cursor","#mouseEventsObserver","MouseEvents","#firstPointMouseEnter","#firstPointMouseLeave","#lastPointMouseClick","#lastPointMouseUp","#lastPointMouseEnter","#lastPointMouseLeave","#pointMouseDown","#pointMouseUp","#pointMouseEnter","#pointMouseLeave","#lineMouseEnter","#lineMouseLeave","Options","idGenerationIsOff","idsNotProvided","firstLng","lastLng","firstLat","lastLat","generatePanelOptions","generateModeOptions","generateLayersOptions","generateLocaleOptions","DrawLibre","_DrawLibre","#container","#store","#events","#tiles","#panel","#cursor","#mouseEvents","#instance","#instanceCreated","newStep"],"mappings":"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","file":"index.js","sourcesContent":["export class DOM {\n private static readonly docStyle =\n typeof window !== \"undefined\" && window.document && window.document.documentElement.style;\n private static transformProp = DOM.testProp([\"transform\", \"WebkitTransform\"]);\n\n private static testProp(props: string[]): string | undefined {\n if (!DOM.docStyle) return props[0];\n for (let i = 0; i < props.length; i++) {\n if ((props as any)[i] in DOM.docStyle) {\n return props[i];\n }\n }\n return props[0];\n }\n\n static create<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n className?: string,\n container?: HTMLElement,\n ): HTMLElementTagNameMap[K] {\n const element = window.document.createElement(tagName);\n if (className !== undefined) element.className = className;\n if (container) container.appendChild(element);\n return element;\n }\n\n static remove(node: HTMLElement) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n\n public static setTransform(el: HTMLElement, value: string) {\n if (DOM.transformProp && el.style) {\n // @ts-ignore\n el.style[DOM.transformProp] = value;\n }\n }\n\n static manageEventListener(\n action: \"add\" | \"remove\",\n target: HTMLElement | Window | Document | undefined,\n type: string,\n callback: EventListenerOrEventListenerObject,\n options: {\n capture?: boolean;\n passive?: boolean;\n } = {},\n ) {\n if (!target) return;\n\n const actionFn = action === \"add\" ? \"addEventListener\" : \"removeEventListener\";\n if (\"passive\" in options) {\n target[actionFn](type, callback, options);\n } else {\n target[actionFn](type, callback, options.capture);\n }\n }\n\n static mouseButton(e: MouseEvent) {\n return e.button;\n }\n\n static addClassName(node: HTMLElement, className: string) {\n if (!node.classList.contains(className)) {\n node.classList.add(className);\n }\n }\n\n static removeClassName(node: HTMLElement, className: string) {\n if (node.classList.contains(className)) {\n node.classList.remove(className);\n }\n }\n}\n","import type { Map } from \"#types/map\";\nimport type { LatLng, PanelImpl, Point, RequiredDrawOptions, Step } from \"#types/index\";\nimport { DOM } from \"#utils/dom\";\nimport { Store } from \"#store/index\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport { DrawingModeChangeEvent } from \"#components/map/mode/types\";\nimport \"./panel.css\";\n\ninterface IProps {\n map: Map;\n mode: DrawingMode;\n options: RequiredDrawOptions;\n store: Store;\n}\n\nexport class Panel {\n #props: IProps;\n #isHidden: boolean;\n #panelPopup: HTMLElement | undefined;\n _undoButton: HTMLElement | undefined;\n _deleteButton: HTMLElement | undefined;\n _saveButton: HTMLElement | undefined;\n _container: HTMLElement | undefined;\n _updatePositionCallback: (() => void) | undefined;\n\n constructor(props: IProps) {\n this.#props = props;\n this._container = undefined;\n this.#isHidden = true;\n this.#panelPopup = undefined;\n this.#initPanel();\n this.#initConsumers();\n }\n\n #initConsumers() {\n this.#props.mode?.addObserver(this.#mapModeConsumer);\n }\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.#props;\n const { type, data } = event;\n if (type === \"MODE_CHANGED\" && !data) {\n this.hidePanel();\n }\n if (type === \"MODE_CHANGED\" && data) {\n if (store.tail?.val) {\n this.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n }\n };\n\n #applyPanelStyles() {\n if (!this.#panelPopup) return;\n\n this.#panelPopup.className = \"dashboard-container\";\n this.#panelPopup.style.position = \"absolute\";\n this.#panelPopup.style.zIndex = \"1000000\";\n this.#panelPopup.style.pointerEvents = \"auto\";\n this.#panelPopup.style.display = this.#isHidden ? \"none\" : \"block\";\n }\n\n #initPanel = () => {\n const { store } = this.#props;\n\n this.createPanel();\n\n this.#panelPopup = document.createElement(\"div\");\n this.#applyPanelStyles();\n\n if (this._container) {\n this.#panelPopup.appendChild(this._container);\n }\n\n document.body.appendChild(this.#panelPopup);\n\n if (store.tail?.val) {\n this.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n };\n\n setPanelLocation = (coordinates: LatLng) => {\n if (!this.#panelPopup) return;\n\n if (this.#isHidden) {\n this.showPanel();\n }\n\n const point = this.#props.map.project(coordinates);\n\n this.#pointPositionUpdate(point);\n this.#updatePanelPositionOnMapMove(coordinates);\n };\n\n #pointPositionUpdate = (point: Point) => {\n if (this.#isHidden || !this.#panelPopup) return;\n\n const mapContainer = this.#props.map.getContainer();\n const mapRect = mapContainer.getBoundingClientRect();\n\n const x = mapRect.left + point.x;\n const y = mapRect.top + point.y;\n const offset = 36;\n\n this.#panelPopup.style.left = `${x - offset}px`;\n this.#panelPopup.style.top = `${y - offset}px`;\n };\n\n #updatePanelPositionOnMapMove(coordinates: LatLng) {\n this.#removeMapEventListeners();\n\n this._updatePositionCallback = () => {\n if (this.#isHidden || !this.#panelPopup) return;\n this.#pointPositionUpdate(this.#props.map.project(coordinates));\n };\n\n this.#props.map.on(\"move\", this._updatePositionCallback);\n this.#props.map.on(\"zoom\", this._updatePositionCallback);\n }\n\n #removeMapEventListeners() {\n if (this._updatePositionCallback) {\n this.#props.map.off(\"move\", this._updatePositionCallback);\n this.#props.map.off(\"zoom\", this._updatePositionCallback);\n this._updatePositionCallback = undefined;\n }\n }\n\n showPanel = () => {\n if (this.#isHidden && this.#panelPopup) {\n this.#isHidden = false;\n this.#panelPopup.style.display = \"block\";\n\n this.#panelPopup.style.transition = \"opacity 0.2s\";\n this.#panelPopup.style.opacity = \"1\";\n }\n };\n\n hidePanel = () => {\n if (!this.#isHidden && this.#panelPopup) {\n this.#isHidden = true;\n this.#panelPopup.style.display = \"none\";\n }\n };\n\n onPointRemove = (head: Step) => {\n if (head) {\n this.setPanelLocation(head);\n } else {\n this.hidePanel();\n }\n };\n\n removePanel = () => {\n if (this._updatePositionCallback) {\n this.#props.map.off(\"move\", this._updatePositionCallback);\n this.#props.map.off(\"zoom\", this._updatePositionCallback);\n this._updatePositionCallback = undefined;\n }\n\n if (this.#panelPopup) {\n document.body.removeChild(this.#panelPopup);\n this.#panelPopup = undefined;\n }\n\n if (this._container) {\n DOM.remove(this._container);\n this._container = undefined;\n }\n };\n\n createButton = (type: \"undo\" | \"save\" | \"delete\", title: string, size: PanelImpl[\"size\"], container: HTMLElement) => {\n const button = DOM.create(\"button\", `panel-button panel-button-${size}`, container);\n button.setAttribute(\"data-type\", type);\n button.setAttribute(\"aria-label\", title);\n DOM.create(\"span\", `icon ${type} icon-${size}`, button);\n return button;\n };\n\n createPanel = () => {\n const { options } = this.#props;\n const { locale } = options;\n const { undo, delete: deleteButton, save } = options.panel.buttons;\n const panelSize = options.panel.size;\n\n const container = DOM.create(\"div\", \"dashboard\");\n\n if (undo.visible) {\n this._undoButton = this.createButton(\"undo\", locale.undo, panelSize, container);\n }\n if (deleteButton.visible) {\n this._deleteButton = this.createButton(\"delete\", locale.delete, panelSize, container);\n }\n if (save.visible) {\n this._saveButton = this.createButton(\"save\", locale.save, panelSize, container);\n }\n this._container = container;\n };\n}\n","import type { RequiredDrawOptions } from \"#types/index\";\nimport type { AddLayerObject } from \"maplibre-gl\";\n\nexport const POLYGON_BASE = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"Polygon\",\n coordinates: [],\n },\n },\n ],\n};\n\nexport const LINE_BASE = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"LineString\",\n coordinates: [],\n },\n },\n ],\n};\n\nexport const POINT_BASE = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"Point\",\n coordinates: [],\n },\n },\n ],\n};\n\nexport const ELAYERS = {\n LineDynamicLayer: \"mdl-line-dynamic-layer\",\n LineLayer: \"mdl-line-layer\",\n LineLayerTransparent: \"mdl-line-layer-transparent\",\n LineLayerBreak: \"mdl-line-break-layer\",\n PolygonLayer: \"mdl-polygon-layer\",\n PointsLayer: \"mdl-points-layer\",\n SinglePointLayer: \"mdl-single-point-layer\",\n FirstPointLayer: \"mdl-first-point-layer\",\n} as const;\n\nexport const ESOURCES = {\n LineDynamicSource: \"mdl-line-dynamic-source\",\n LineSourceBreak: \"mdl-line-source-break\",\n LineSource: \"mdl-line-source\",\n PolygonSource: \"mdl-polygon-source\",\n PointsSource: \"mdl-points-source\",\n SinglePointSource: \"mdl-single-point-source\",\n} as const;\n\nexport const FIRST_POINT_RADIUS = {\n large: 6.5,\n default: 5.5,\n};\n\nexport const FIRST_POINT_COLOR = {\n large: \"#FF6464\",\n default: \"#666666\",\n};\n\nexport const FIRST_POINT_PAINT_BASE = {\n \"circle-radius\": FIRST_POINT_RADIUS[\"default\"],\n \"circle-color\": \"#FEFFFE\",\n \"circle-stroke-color\": FIRST_POINT_COLOR[\"default\"],\n \"circle-stroke-width\": 3,\n};\n\nexport const ON_LINE_POINT_PAINT_BASE = {\n \"circle-radius\": FIRST_POINT_RADIUS[\"large\"],\n \"circle-color\": \"#FEFFFE\",\n \"circle-stroke-color\": \"#666666\",\n \"circle-stroke-width\": 3,\n};\n\nexport const POLYGON_PAINT_BASE = {\n \"fill-color\": \"grey\",\n \"fill-opacity\": 0.4,\n};\n\nexport const LINE_PAINT_BASE = {\n \"line-width\": 3,\n \"line-color\": \"grey\",\n \"line-opacity\": 0.7,\n};\n\nexport const POINTS_PAINT_BASE = {\n \"circle-radius\": FIRST_POINT_RADIUS[\"default\"],\n \"circle-color\": \"#FEFFFE\",\n \"circle-stroke-color\": \"#666666\",\n \"circle-stroke-width\": 3,\n};\n\nexport const BREAK_PAINT_BASE = {\n \"line-width\": 3,\n \"line-color\": \"#FF6464\",\n \"line-dasharray\": [3, 3],\n};\n\nexport const generateLayersToRender = (options: RequiredDrawOptions) => {\n return [\n {\n id: ELAYERS.SinglePointLayer,\n source: ESOURCES.SinglePointSource,\n type: \"circle\",\n paint: options.layersPaint.onLinePoint,\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.PolygonLayer,\n source: ESOURCES.PolygonSource,\n type: \"fill\",\n paint: options.layersPaint.polygon,\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.LineDynamicLayer,\n source: ESOURCES.LineDynamicSource,\n type: \"line\",\n paint: options.layersPaint.line,\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.LineLayer,\n source: ESOURCES.LineSource,\n type: \"line\",\n paint: options.layersPaint.line,\n layout: {\n visibility: \"visible\",\n },\n },\n {\n id: ELAYERS.LineLayerTransparent,\n source: ESOURCES.LineSource,\n type: \"line\",\n paint: {\n \"line-width\": 4,\n \"line-color\": \"transparent\",\n },\n },\n {\n id: ELAYERS.LineLayerBreak,\n source: ESOURCES.LineSourceBreak,\n type: \"line\",\n paint: options.layersPaint.breakLine,\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.PointsLayer,\n source: ESOURCES.PointsSource,\n type: \"circle\",\n paint: options.layersPaint.points,\n filter: [\"==\", [\"get\", \"isFirst\"], false],\n },\n {\n id: ELAYERS.FirstPointLayer,\n source: ESOURCES.PointsSource,\n type: \"circle\",\n paint: options.layersPaint.firstPoint,\n filter: [\"==\", [\"get\", \"isFirst\"], true],\n },\n ] satisfies AddLayerObject[];\n};\n","import type { Map } from \"#types/map\";\n\nimport { ELAYERS, FIRST_POINT_COLOR, generateLayersToRender, FIRST_POINT_RADIUS } from \"#utils/geo_constants\";\nimport { RequiredDrawOptions } from \"#types/index\";\n\nexport class TilesHelpers {\n static #lastClickTime = 0;\n\n static #firstPointCircleRadius = (map: Map) => {\n map.setPaintProperty(ELAYERS.FirstPointLayer, \"circle-radius\", FIRST_POINT_RADIUS[\"large\"]);\n map.setPaintProperty(ELAYERS.FirstPointLayer, \"circle-stroke-color\", FIRST_POINT_COLOR[\"large\"]);\n };\n\n static #defaultPointCircleRadius = (map: Map) => {\n map.setPaintProperty(ELAYERS.FirstPointLayer, \"circle-radius\", FIRST_POINT_RADIUS[\"default\"]);\n map.setPaintProperty(ELAYERS.FirstPointLayer, \"circle-stroke-color\", FIRST_POINT_COLOR[\"default\"]);\n };\n\n static togglePointCircleRadius = (map: Map, type: keyof typeof FIRST_POINT_RADIUS) => {\n if (type === \"large\") {\n this.#firstPointCircleRadius(map);\n } else {\n this.#defaultPointCircleRadius(map);\n }\n };\n\n static removeTransparentLine = (map: Map) => {\n map.removeLayer(ELAYERS.LineLayerTransparent);\n };\n\n static addTransparentLine = (map: Map, options: RequiredDrawOptions) => {\n if (map.getLayer(ELAYERS.LineLayerTransparent)) return;\n const LAYERS_TO_RENDER = generateLayersToRender(options);\n const transparentLayer = LAYERS_TO_RENDER.find((layer) => layer.id === ELAYERS.LineLayerTransparent);\n if (transparentLayer) {\n map.addLayer(transparentLayer);\n }\n };\n\n static isDoubleClick() {\n const DOUBLE_CLICK_THRESHOLD = 400;\n const now = Date.now();\n\n if (now - this.#lastClickTime <= DOUBLE_CLICK_THRESHOLD) {\n this.#lastClickTime = now;\n return true;\n }\n\n this.#lastClickTime = now;\n return false;\n }\n}\n","import type { MapLayerMouseEvent, MapMouseEvent } from \"maplibre-gl\";\nimport type { LatLng, Point, Uuid, EventsProps } from \"#types/index\";\nimport type { Map } from \"#types/map\";\n\nimport { ListNode, Store } from \"#store/index\";\nimport { TilesHelpers } from \"#components/map/tiles/helpers\";\n\nimport { DrawingMode } from \"#components/map/mode\";\nimport { ELAYERS, POLYGON_BASE } from \"./geo_constants\";\n\nexport class MapUtils {\n static isFeatureTriggered(event: MapLayerMouseEvent, layerIds: string[]) {\n const layers = event.target.queryRenderedFeatures(event.point, {\n layers: layerIds,\n });\n return layers.some((layer) => layerIds.includes(layer.layer.id));\n }\n\n static getPixelCoordinates = (map: Map, coords: LatLng) => {\n const { lat, lng } = coords;\n return map.project([lng, lat]);\n };\n\n static queryPointId = (map: Map, point: MapMouseEvent[\"point\"]) => {\n const query = map.queryRenderedFeatures(point, {\n layers: [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer],\n });\n const id = query?.[0]?.properties.id;\n return id;\n };\n}\n\nexport class GeometryFactory {\n static #collectGeometryCoordinates(store: Store): number[][] {\n const coordinates = [];\n let current = store.head;\n const visitedNodes = new Set();\n\n while (current !== null) {\n if (visitedNodes.has(current.val?.id)) {\n if (store.head && store.head.val) {\n coordinates.push([store.head.val.lng, store.head.val.lat]);\n }\n break;\n }\n visitedNodes.add(current.val?.id);\n\n if (current.val) {\n coordinates.push([current.val.lng, current.val.lat]);\n }\n current = current.next;\n }\n\n return coordinates;\n }\n\n static getAllLines(store: Store) {\n const coordinates = this.#collectGeometryCoordinates(store);\n return {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"LineString\",\n coordinates: coordinates,\n },\n },\n ],\n };\n }\n\n static getLine(current: [number, number], next: [number, number]) {\n return {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"LineString\",\n coordinates: [current, next],\n },\n },\n ],\n };\n }\n\n static getPolygon(store: Store) {\n const coordinates = this.#collectGeometryCoordinates(store);\n return {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"Polygon\",\n coordinates: [coordinates],\n },\n },\n ],\n };\n }\n\n static getPoints(store: Store) {\n let current = store.head;\n const pointFeatures = [];\n const visitedNodes = new Set();\n\n while (current !== null) {\n if (visitedNodes.has(current.val?.id)) {\n break;\n }\n if (current.val) {\n const val = current.val;\n const head = current.val.id === store.head?.val?.id;\n pointFeatures.push({\n type: \"Feature\",\n properties: { id: val.id, lat: val.lat, lng: val.lng, isFirst: head },\n geometry: {\n type: \"Point\",\n coordinates: [val.lng, val.lat],\n },\n });\n }\n visitedNodes.add(current.val?.id);\n current = current.next;\n }\n\n return {\n type: \"FeatureCollection\",\n features: pointFeatures,\n };\n }\n}\n\nexport class Spatial {\n static getGeometryIndex = (store: Store, id: Uuid) => {\n let current = store.head;\n let idx = 0;\n while (current !== null) {\n if (current.val?.id === id) {\n return idx;\n }\n idx++;\n current = current.next;\n }\n return -1;\n };\n\n static isFirstPoint(event: MapLayerMouseEvent): boolean {\n const map = event.target;\n const point = event.point;\n const points = map.queryRenderedFeatures(point, {\n layers: [ELAYERS.FirstPointLayer],\n });\n return Boolean(points.length);\n }\n\n // √(x2​−x1​)²+(y2​−y1​)²​\n static distance = (point1: Point, point2: Point) =>\n Math.sqrt((point1.x - point2.x) ** 2 + (point1.y - point2.y) ** 2);\n\n static checkIfPointIsOnLine = (A: Point, B: Point, P: Point): boolean => {\n const EPSILON = 0.1;\n\n const distanceAB = this.distance(A, B);\n const distanceAP = this.distance(A, P);\n const distancePB = this.distance(P, B);\n\n if (Math.abs(distanceAP + distancePB - distanceAB) < EPSILON) {\n return true;\n }\n\n return false;\n };\n\n static isClosedGeometry = (store: Store) => {\n return store.tail?.next === store.head;\n };\n\n static breakGeometry = (store: Store, id: Uuid) => {\n if (!store.head) return;\n\n let current = store.head;\n let prev = store.tail as ListNode; // we know that tail is not null because the geometry is closed\n\n do {\n if (current?.val?.id === id) {\n if (current !== store.head) {\n prev.next = current.next;\n store.head = current;\n store.tail = prev;\n }\n (store.tail as ListNode).next = null;\n return;\n }\n prev = current;\n current = current.next as ListNode;\n } while (current !== store.head);\n };\n\n static closeGeometry = (store: Store, mode: DrawingMode) => {\n if (store.tail) {\n store.tail.next = store.head;\n }\n mode.setClosedGeometry(true);\n };\n\n static canCloseGeometry = (store: Store) => {\n return store.size > 2 && !this.isClosedGeometry(store);\n };\n\n static canBreakClosedGeometry = (store: Store) => {\n return store.size <= 2;\n };\n\n static switchToLineModeIfCan = (context: EventsProps) => {\n const { mode, store, tiles, map } = context;\n\n if (Spatial.canBreakClosedGeometry(store)) {\n if (store.tail && store.tail.val) {\n store.tail.next = null;\n }\n mode.reset();\n TilesHelpers.togglePointCircleRadius(map, \"default\");\n tiles.renderPolygon(POLYGON_BASE);\n }\n };\n}\n\nexport const uuidv4 = (): Uuid => {\n if (\"crypto\" in window && \"randomUUID\" in window.crypto) {\n return window.crypto.randomUUID();\n }\n\n function getRandomHexChar() {\n const hexChars = \"0123456789abcdef\";\n return hexChars[Math.floor(Math.random() * 16)];\n }\n\n function getUuidSection(length: number) {\n let section = \"\";\n for (let i = 0; i < length; i++) {\n section += getRandomHexChar();\n }\n return section;\n }\n\n function getUuidSectionSize(idx: number) {\n const firstElement = idx === 0;\n const lastElement = idx === 4;\n\n if (firstElement) {\n return 8;\n }\n if (lastElement) {\n return 12;\n }\n\n return 4;\n }\n\n const parts = [];\n for (let i = 0; i < 5; i++) {\n parts.push(getUuidSection(getUuidSectionSize(i)));\n }\n\n return parts.join(\"-\") as Uuid;\n};\n\nexport const throttle = (fn: (...args: any) => void, delay: number) => {\n let lastArgs: any;\n let shouldCall = true;\n\n function execute() {\n if (shouldCall && lastArgs) {\n fn(...lastArgs);\n lastArgs = null;\n shouldCall = false;\n setTimeout(() => {\n shouldCall = true;\n execute();\n }, delay);\n }\n }\n\n return function (...args: any) {\n lastArgs = args;\n execute();\n };\n};\n\nexport const debounce = (fn: (...args: any) => void, delay: number) => {\n let timeout: number;\n\n return function (...args: any) {\n clearTimeout(timeout);\n timeout = window.setTimeout(() => {\n fn(...args);\n }, delay);\n };\n};\n","import type { GeoJSONSource } from \"maplibre-gl\";\n\nimport type { LatLng, RequiredDrawOptions } from \"#types/index\";\nimport type { Map } from \"#types/map\";\nimport { Store } from \"#store/index\";\nimport { ELAYERS, ESOURCES, generateLayersToRender } from \"#utils/geo_constants\";\nimport { POINT_BASE, LINE_BASE, POLYGON_BASE } from \"#utils/geo_constants\";\nimport { GeometryFactory } from \"#utils/helpers\";\nimport { DrawingMode } from \"#components/map/mode\";\n\ninterface IProps {\n map: Map;\n store: Store;\n options: RequiredDrawOptions;\n mode: DrawingMode;\n}\n\nexport class Tiles {\n #props: IProps;\n #pointsFeature: any;\n #linesFeature: any;\n #polygonFeature: any;\n\n constructor(props: IProps) {\n this.#props = props;\n this.#init();\n this.render();\n }\n\n #init() {\n this.#addSources();\n this.#addLayers();\n this.#swapLayers(ELAYERS.LineLayer, ELAYERS.SinglePointLayer);\n this.#swapLayers(ELAYERS.LineLayerTransparent, ELAYERS.SinglePointLayer);\n this.#swapLayers(ELAYERS.LineLayerTransparent, ELAYERS.FirstPointLayer);\n this.#swapLayers(ELAYERS.LineLayerTransparent, ELAYERS.PointsLayer);\n this.#swapLayers(ELAYERS.PolygonLayer, ELAYERS.LineLayer);\n }\n\n #addSources = () => {\n const { map } = this.#props;\n Object.values(ESOURCES).forEach((source) => {\n if (!map.getSource(source)) {\n map.addSource(source, {\n type: \"geojson\",\n data: {\n type: \"FeatureCollection\",\n features: [],\n },\n promoteId: \"id\",\n });\n }\n });\n };\n\n #addLayers = () => {\n const { map, mode, options } = this.#props;\n\n const LAYERS_TO_RENDER = generateLayersToRender(options);\n\n LAYERS_TO_RENDER.forEach((layer) => {\n if (!map.getLayer(layer.id)) {\n map.addLayer(layer);\n }\n });\n\n const polygonInvisible = map.getLayoutProperty(ELAYERS.PolygonLayer, \"visibility\") === \"none\";\n if (mode.getMode() === \"polygon\" && polygonInvisible) {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n }\n };\n\n #swapLayers = (beneathLayerId: string, aboveLayerId: string) => {\n const { map } = this.#props;\n\n const beneath = map.getLayer(beneathLayerId);\n const above = map.getLayer(aboveLayerId);\n\n if (beneath && above) {\n map.moveLayer(beneathLayerId, aboveLayerId);\n }\n };\n\n #removeSources = () => {\n const { map } = this.#props;\n\n Object.values(ESOURCES).forEach((source) => {\n if (map.getSource(source)) {\n map.removeSource(source);\n }\n });\n };\n\n #removeLayers = () => {\n const { map } = this.#props;\n\n Object.values(ELAYERS).forEach((layer) => {\n if (map.getLayer(layer)) {\n map.removeLayer(layer);\n }\n });\n };\n\n removeTiles = () => {\n // first remove the layers then all the sources\n this.#removeLayers();\n this.#removeSources();\n };\n\n renderPoints = (points: any) => {\n const { map } = this.#props;\n\n const pointSource = map.getSource(ESOURCES.PointsSource) as GeoJSONSource;\n if (pointSource) {\n pointSource.setData(points);\n }\n };\n\n renderLines = (lines: any, source: string) => {\n const { map } = this.#props;\n\n const lineSource = map.getSource(source) as GeoJSONSource;\n\n if (lineSource) {\n lineSource.setData(lines);\n }\n };\n\n renderPolygon = (polygon: any) => {\n const { map } = this.#props;\n\n const polygoneSource = map.getSource(ESOURCES.PolygonSource) as GeoJSONSource;\n\n if (polygoneSource) {\n polygoneSource.setData(polygon);\n }\n };\n\n render = () => {\n const { mode, options, store } = this.#props;\n\n const points = GeometryFactory.getPoints(store);\n const lines = GeometryFactory.getAllLines(store);\n this.#pointsFeature = points;\n this.#linesFeature = lines;\n\n this.renderPoints(points);\n this.renderLines(lines, ESOURCES.LineSource);\n\n const polygonOptionChecked = options.modes.polygon.visible;\n if (polygonOptionChecked && mode.isPolygon()) {\n const polygon = GeometryFactory.getPolygon(store);\n this.#polygonFeature = polygon;\n this.renderPolygon(polygon);\n }\n };\n\n #renderPolygonOnMouseMove = (featureIdx: number, newCoord: LatLng) => {\n this.#polygonFeature.features[0].geometry.coordinates[0][featureIdx] = [newCoord.lng, newCoord.lat];\n const firstElement = featureIdx === 0;\n if (firstElement) {\n const lastIdx = this.#polygonFeature.features[0].geometry.coordinates[0]?.length - 1;\n this.#polygonFeature.features[0].geometry.coordinates[0][lastIdx] = [newCoord.lng, newCoord.lat];\n }\n this.renderPolygon(this.#polygonFeature);\n };\n\n #renderLineOnMouseMove = (featureIdx: number, newCoord: LatLng) => {\n const { mode } = this.#props;\n\n this.#linesFeature.features[0].geometry.coordinates[featureIdx] = [newCoord.lng, newCoord.lat];\n\n const firstElement = featureIdx === 0;\n const selectedFirstPointInClosedLine = this.#linesFeature && mode.getClosedGeometry() && firstElement;\n if (selectedFirstPointInClosedLine) {\n const lastIdx = this.#linesFeature.features[0].geometry.coordinates?.length - 1;\n this.#linesFeature.features[0].geometry.coordinates[lastIdx] = [newCoord.lng, newCoord.lat];\n }\n this.renderLines(this.#linesFeature, ESOURCES.LineSource);\n };\n\n renderOnMouseMove = (featureIdx: number, newCoord: LatLng) => {\n const { mode, options } = this.#props;\n\n this.#pointsFeature.features[featureIdx].geometry.coordinates = [newCoord.lng, newCoord.lat];\n this.renderPoints(this.#pointsFeature);\n this.#renderLineOnMouseMove(featureIdx, newCoord);\n\n const polygonOptionChecked = options.modes.polygon.visible;\n if (polygonOptionChecked && mode.isPolygon()) {\n this.#renderPolygonOnMouseMove(featureIdx, newCoord);\n }\n };\n\n resetGeometries = () => {\n this.renderPoints(POINT_BASE);\n this.renderLines(LINE_BASE, ESOURCES.LineSource);\n this.renderPolygon(POLYGON_BASE);\n };\n}\n","import { HTMLEvent } from \"#types/helpers\";\nimport { DOM } from \"#utils/dom\";\nimport \"./tooltip.css\";\n\ninterface CreateOptions {\n label: string;\n placement: \"left\" | \"bottom\";\n}\n\nconst BASE_Y_OFFSET_FROM_ELEMENT = 8;\nconst BASE_X_OFFSET_FROM_ELEMENT = 8;\n\ntype Position = {\n x: number;\n y: number;\n};\n\nexport class Tooltip {\n _container: HTMLElement | undefined;\n _label: HTMLElement | undefined;\n\n constructor() {\n this._container = undefined;\n }\n\n create = (options: CreateOptions) => {\n const container = DOM.create(\"div\", \"popup-container\", document.body);\n const span = DOM.create(\"span\", `popup-text popup-text-${options.placement}`, container);\n span.textContent = options.label;\n this._container = container;\n this._label = span;\n return this;\n };\n\n #activateAnimation = () => {\n const notActive = !this._label?.classList.value.includes(\"popup-text-active\");\n if (notActive) {\n this._label?.classList.add(\"popup-text-active\");\n }\n };\n\n #getLabelDimensions = () => {\n if (!this._label) return { width: 0, height: 0 };\n\n return {\n width: this._label.clientWidth,\n height: this._label.clientHeight,\n };\n };\n\n #getLeftPosition = (event: HTMLEvent<HTMLElement>): Position => {\n const { bottom, left } = event.target.getBoundingClientRect();\n const { width: labelWidth, height: labelHeight } = this.#getLabelDimensions();\n\n return {\n x: left - BASE_X_OFFSET_FROM_ELEMENT - labelWidth,\n y: bottom - labelHeight - 2,\n };\n };\n\n #getBottomPosition = (event: HTMLEvent<HTMLElement>): Position => {\n const { bottom, left, right } = event.target.getBoundingClientRect();\n const { width: labelWidth } = this.#getLabelDimensions();\n\n const elementCenterX = (right - left) / 2 + left;\n return {\n x: elementCenterX - labelWidth / 2,\n y: bottom + BASE_Y_OFFSET_FROM_ELEMENT,\n };\n };\n\n getPosition = (event: HTMLEvent<HTMLElement>, position: \"left\" | \"bottom\"): Position => {\n if (position === \"left\") {\n return this.#getLeftPosition(event);\n }\n\n return this.#getBottomPosition(event);\n };\n\n setPosition = (pos: Position) => {\n const { x, y } = pos;\n if (this._container) {\n this._container.style.left = `${x}px`;\n this._container.style.top = `${y}px`;\n }\n this.#activateAnimation();\n };\n\n remove = () => {\n if (this._container) {\n DOM.remove(this._container);\n }\n };\n}\n","export const CURSORS = {\n AUTO: \"auto\",\n DEFAULT: \"default\",\n POINTER: \"pointer\",\n CROSSHAIR: \"crosshair\",\n MOVE: \"move\",\n HELP: \"help\",\n GRAB: \"grab\",\n GRABBING: \"grabbing\",\n} as const;\n\nexport type TCursor = (typeof CURSORS)[keyof typeof CURSORS];\n","import { ControlType, RequiredDrawOptions } from \"#types/index\";\nimport { DOM } from \"#utils/dom\";\n\nexport const addControlListeners = (\n element: HTMLElement,\n events: { [key: string]: EventListenerOrEventListenerObject },\n) => {\n for (const [event, listener] of Object.entries(events)) {\n DOM.manageEventListener(\"add\", element, event, listener);\n }\n};\n\nexport const removeControlListeners = (\n element: HTMLElement,\n events: { [key: string]: EventListenerOrEventListenerObject },\n) => {\n for (const [event, listener] of Object.entries(events)) {\n DOM.manageEventListener(\"remove\", element, event, listener);\n }\n};\n\nexport const getButtonLabel = (type: ControlType, options: RequiredDrawOptions) => {\n const lineTitle = options.locale.line;\n const polygonTitle = options.locale.polygon;\n const breakTitle = options.locale.break;\n\n const LABELS = {\n line: lineTitle,\n polygon: polygonTitle,\n break: breakTitle,\n };\n\n return LABELS[type];\n};\n","import { RequiredDrawOptions } from \"../types\";\nimport {\n BREAK_PAINT_BASE,\n FIRST_POINT_PAINT_BASE,\n LINE_PAINT_BASE,\n ON_LINE_POINT_PAINT_BASE,\n POINTS_PAINT_BASE,\n POLYGON_PAINT_BASE,\n} from \"./geo_constants\";\n\nexport const EVENTS = {\n DOUBLECLICK: \"mdl:doubleclick\",\n POINTENTER: \"mdl:pointenter\",\n POINTLEAVE: \"mdl:pointleave\",\n MOVEEND: \"mdl:moveend\",\n ADD: \"mdl:add\",\n UNDO: \"mdl:undo\",\n REMOVEALL: \"mdl:removeall\",\n SAVE: \"mdl:save\",\n BREAK: \"mdl:break\",\n MODECHANGED: \"mdl:modechanged\",\n} as const;\n\nexport const MOBILE_WIDTH = 768;\n\nexport const DEFAULT_OPTIONS: RequiredDrawOptions = {\n panel: {\n size: \"medium\",\n buttons: {\n undo: { visible: true },\n delete: { visible: true },\n save: { visible: true, clearOnSave: true },\n },\n },\n modes: {\n initial: null,\n line: {\n visible: true,\n closeGeometry: true,\n },\n polygon: {\n visible: true,\n },\n breakGeometry: {\n visible: true,\n },\n },\n layersPaint: {\n onLinePoint: ON_LINE_POINT_PAINT_BASE,\n firstPoint: FIRST_POINT_PAINT_BASE,\n points: POINTS_PAINT_BASE,\n line: LINE_PAINT_BASE,\n polygon: POLYGON_PAINT_BASE,\n breakLine: BREAK_PAINT_BASE,\n },\n initial: null,\n dynamicLine: true,\n locale: {\n save: \"Save\",\n delete: \"Delete all\",\n undo: \"Undo\",\n line: \"Line\",\n polygon: \"Polygon\",\n break: \"Split\",\n closeLine: \"Close line\",\n createPolygon: \"Create polygon\",\n },\n};\n","import type { Map } from \"#types/map\";\nimport type { LatLng, StepId, Step, EventsProps } from \"#types/index\";\nimport { EVENTS } from \"#utils/constants\";\nimport { DrawingMode } from \"./mode\";\nimport { Mode } from \"./mode/types\";\n\nexport class FireEvents {\n static addPoint(step: Step & { total: number }, map: Map, mode: DrawingMode) {\n map.fire(EVENTS.ADD, {\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n mode: {\n geometry: mode.getMode(),\n closedGeometry: mode.getClosedGeometry(),\n },\n });\n }\n static movePoint(step: { end: LatLng; id: StepId; start: LatLng; total: number }, map: Map) {\n map.fire(EVENTS.MOVEEND, {\n id: step.id,\n start_coordinates: {\n lat: step.start.lat,\n lng: step.start.lng,\n },\n end_coordinates: {\n lat: step.end.lat,\n lng: step.end.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static pointDoubleClick(step: Step & { total: number }, map: Map) {\n map.fire(EVENTS.DOUBLECLICK, {\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static enterPoint(step: Step & { total: number }, map: Map) {\n map.fire(EVENTS.POINTENTER, {\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static leavePoint(step: Step & { total: number }, map: Map) {\n map.fire(EVENTS.POINTLEAVE, {\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static undoPoint(step: Step & { total: number }, map: Map, originalEvent?: Event) {\n map.fire(EVENTS.UNDO, {\n originalEvent,\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static modeChanged(map: Map, mode: Mode | \"break\") {\n map.fire(EVENTS.MODECHANGED, {\n mode,\n });\n }\n static removeAllPoints(map: Map, originalEvent: Event) {\n map.fire(EVENTS.REMOVEALL, { originalEvent });\n }\n static onSaveClick(context: Pick<EventsProps, \"map\" | \"mode\">, steps: Step[], originalEvent: Event) {\n const { map, mode } = context;\n\n map.fire(EVENTS.SAVE, {\n originalEvent,\n timestamp: Date.now(),\n steps,\n mode: {\n geometry: mode.getMode(),\n closedGeometry: mode.getClosedGeometry(),\n },\n });\n }\n static onLineBreak(map: Map) {\n map.fire(EVENTS.BREAK);\n }\n}\n","import { FireEvents } from \"#components/map/helpers\";\nimport { DrawingModeChangeEvent, Mode } from \"#components/map/mode/types\";\nimport { EventsProps } from \"#types/index\";\n\nexport class ControlObserver {\n #props: EventsProps;\n constructor(props: EventsProps) {\n this.#props = props;\n this.#initConsumers();\n }\n\n #initConsumers = () => {\n this.#props.mode.addObserver(this.#mapModeConsumer);\n };\n\n removeConsumers = () => {\n this.#props.mode.removeObserver(this.#mapModeConsumer);\n };\n\n #resetAllState = () => {\n const { _line, _polygon, _break } = this.#props.control;\n\n _line?.classList.remove(\"control-button-active\");\n _polygon?.classList.remove(\"control-button-active\");\n _break?.classList.remove(\"control-button-active\");\n };\n\n #checkActive = (button: HTMLElement) => {\n this.#resetAllState();\n button.classList.add(\"control-button-active\");\n };\n\n #observeModeChange = (event: DrawingModeChangeEvent) => {\n const { data } = event;\n const { _line, _polygon, _break } = this.#props.control;\n const { mode } = this.#props;\n FireEvents.modeChanged(this.#props.map, data as Mode);\n\n if (!_line || !_polygon || !_break) return;\n\n switch (data) {\n case \"line\":\n this.#checkActive(_line);\n break;\n case \"polygon\":\n this.#checkActive(_polygon);\n break;\n default:\n break;\n }\n\n if (!data) {\n this.#disableButton(_break);\n } else {\n if (mode.getClosedGeometry()) {\n this.#enableButton(_break);\n }\n }\n };\n\n #disableButton = (button: HTMLButtonElement) => {\n button.setAttribute(\"disabled\", \"true\");\n button.setAttribute(\"aria-disabled\", \"true\");\n };\n\n #enableButton = (button: HTMLButtonElement) => {\n button.removeAttribute(\"disabled\");\n button.removeAttribute(\"aria-disabled\");\n };\n\n #observeGeometryChange = (event: DrawingModeChangeEvent) => {\n const { data } = event;\n const { _break, _line, _polygon } = this.#props.control;\n const { mode } = this.#props;\n\n if (data) {\n if (_break) {\n this.#enableButton(_break);\n }\n if (mode.getMode() === \"polygon\") {\n if (_line) {\n this.#disableButton(_line);\n }\n }\n if (mode.getMode() === \"line\") {\n if (_polygon) {\n this.#disableButton(_polygon);\n }\n }\n } else {\n if (_break) {\n this.#disableButton(_break);\n }\n if (mode.getMode() === \"polygon\") {\n if (_line) {\n this.#enableButton(_line);\n }\n }\n if (mode.getMode() === \"line\") {\n if (_polygon) {\n this.#enableButton(_polygon);\n }\n }\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { type, data } = event;\n\n if (type === \"MODE_CHANGED\") {\n this.#observeModeChange(event);\n }\n if (type === \"CLOSED_GEOMETRY_CHANGED\") {\n this.#observeGeometryChange(event);\n }\n if (type === \"BREAK_CHANGED\" && data) {\n const { _break } = this.#props.control;\n this.#checkActive(_break as HTMLElement);\n FireEvents.modeChanged(this.#props.map, \"break\");\n }\n };\n}\n","import type { EventsProps, ControlType } from \"#types/index\";\nimport { HTMLEvent } from \"#types/helpers\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { CURSORS } from \"#components/map/cursor/constants\";\n\nimport { addControlListeners, getButtonLabel, removeControlListeners } from \"./helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { ControlObserver } from \"./observer\";\n\nexport class ControlEvents {\n #props: EventsProps;\n #tooltip: Tooltip;\n #observer: ControlObserver;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#observer = new ControlObserver(props);\n this.#tooltip = new Tooltip();\n this.#initEvents();\n }\n\n #initEvents() {\n const { control } = this.#props;\n if (control) {\n const events = {\n mouseenter: this.onButtonEnter as EventListenerOrEventListenerObject,\n mouseleave: this.onButtonLeave,\n };\n\n if (control._line) {\n addControlListeners(control._line, {\n ...events,\n click: this.onLineClick,\n });\n }\n if (control._polygon) {\n addControlListeners(control._polygon, {\n ...events,\n click: this.onPolygonClick,\n });\n }\n if (control._break) {\n addControlListeners(control._break, {\n ...events,\n click: this.onBreakClick,\n });\n }\n }\n }\n\n #removeEvents() {\n const { control } = this.#props;\n if (control) {\n const events = {\n mouseenter: this.onButtonEnter as EventListenerOrEventListenerObject,\n mouseleave: this.onButtonLeave,\n };\n\n if (control._line) {\n removeControlListeners(control._line, {\n ...events,\n click: this.onLineClick,\n });\n }\n if (control._polygon) {\n removeControlListeners(control._polygon, {\n ...events,\n click: this.onPolygonClick,\n });\n }\n if (control._break) {\n removeControlListeners(control._break, {\n ...events,\n click: this.onBreakClick,\n });\n }\n }\n }\n\n remove() {\n this.#observer.removeConsumers();\n this.#removeEvents();\n this.#tooltip.remove();\n }\n\n onButtonEnter = (event: HTMLEvent<HTMLButtonElement>) => {\n const { options } = this.#props;\n\n const type = event.target.getAttribute(\"data-type\") as ControlType;\n if (type) {\n const label = getButtonLabel(type, options);\n const placement = \"left\";\n this.#tooltip\n .create({\n label,\n placement,\n })\n .setPosition(this.#tooltip.getPosition(event, placement));\n }\n };\n\n onButtonLeave = () => {\n this.#tooltip.remove();\n };\n\n #removeActiveClass = () => {\n const { control } = this.#props;\n\n control._line?.classList.remove(\"control-button-active\");\n control._polygon?.classList.remove(\"control-button-active\");\n control._break?.classList.remove(\"control-button-active\");\n };\n\n #initialize = () => {\n const { map, mode } = this.#props;\n if (!mode.getMode()) {\n map.fire(\"mode:initialize\");\n }\n };\n\n onLineClick = () => {\n const { map, mode, tiles, control } = this.#props;\n this.#initialize();\n this.#removeActiveClass();\n if (mode.getMode() === \"line\" && !mode.getBreak()) {\n mode.setMode(null);\n map.fire(\"mode:remove\");\n tiles.resetGeometries();\n } else {\n control._line?.classList.add(\"control-button-active\");\n mode.setMode(\"line\");\n tiles.render();\n }\n };\n\n onPolygonClick = () => {\n const { map, mode, tiles, control } = this.#props;\n this.#initialize();\n this.#removeActiveClass();\n if (mode.getMode() === \"polygon\" && !mode.getBreak()) {\n mode.setMode(null);\n map.fire(\"mode:remove\");\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n tiles.resetGeometries();\n } else {\n control._polygon?.classList.add(\"control-button-active\");\n mode.setMode(\"polygon\");\n tiles.render();\n }\n };\n\n onBreakClick = () => {\n const { map, mode, control } = this.#props;\n if (mode.getBreak()) {\n mode.setMode(null);\n map.fire(\"mode:remove\");\n }\n this.#removeActiveClass();\n control._break?.classList.add(\"control-button-active\");\n mode.setBreak(true);\n map.getCanvasContainer().style.cursor = CURSORS.POINTER;\n };\n}\n","type Func<T> = (event: T) => any;\n\nexport type ChangeEvent<T> = {\n [K in keyof T]: {\n type: K;\n data: T[K];\n };\n}[keyof T];\n\nexport class Observable<T> {\n observers: Set<Func<T>>;\n\n constructor() {\n this.observers = new Set<Func<T>>();\n }\n\n addObserver(observer: Func<T>) {\n this.observers.add(observer);\n }\n\n removeObserver(observer: Func<T>) {\n this.observers.delete(observer);\n }\n\n unsubscribe() {\n this.observers.clear();\n }\n\n notify(args: T) {\n this.observers.forEach((observer) => observer(args));\n }\n}\n","export const ERRORS = {\n EMPTY_INITIAL_STATE:\n \"You passed an empty initial array in the options. Please either remove the 'initial' property or include at least one element in the array.\",\n MISSING_IDS:\n \"You set 'generateId' to false but did not provide IDs for all steps. Please ensure all steps have IDs or set 'generateId' to true.\",\n NOT_ENOUGH_POINTS_TO_CLOSE:\n \"At least three points are required to close a polygon or a line. Please add more points or set 'closeGeometry' to false.\",\n FIRST_LAST_POINT_NOT_EQUAL:\n \"The first and last points of a polygon or a closed linestring must be the same. Please ensure the first and last points are equal or set 'closeGeometry' to false.\",\n};\n","import type { Initial, LatLng, RequiredDrawOptions, Step, StepId } from \"#types/index\";\nimport { uuidv4 } from \"#utils/helpers\";\nimport { Observable } from \"#utils/observable\";\n\nimport { ERRORS } from \"./errors\";\nimport { StoreChangeEvent } from \"./types\";\n\nexport class ListNode {\n val: Step | null;\n next: ListNode | null;\n constructor(val: Step | null = null, next: ListNode | null = null) {\n this.val = val;\n this.next = next;\n }\n}\n\nexport class Store extends Observable<StoreChangeEvent> {\n head: ListNode | null;\n tail: ListNode | null;\n size: number;\n\n constructor(options?: RequiredDrawOptions) {\n super();\n let list = StoreHelpers.initStore(options);\n\n this.head = list ? list.head : null;\n this.tail = list ? list.tail : null;\n this.size = list ? list.size : 0;\n }\n\n push(step: Step) {\n const newNode = new ListNode(step);\n if (!this.head) {\n this.head = this.tail = newNode;\n } else if (this.tail) {\n this.tail.next = newNode;\n this.tail = newNode;\n }\n this.size++;\n this.pingConsumers();\n }\n\n insert(step: Step, current: ListNode) {\n const newNode = new ListNode(step, current.next);\n const betweenHeadAndTail = this.tail === current && this.head === current.next;\n // If the point is inserted between head and tail, update the tail\n if (betweenHeadAndTail) {\n this.tail = newNode;\n }\n current.next = newNode;\n this.size++;\n }\n\n findStepById(id: StepId): ListNode[\"val\"] | null {\n let current = this.head;\n const visitedNodes = new Set();\n while (current !== null) {\n if (visitedNodes.has(current)) {\n break;\n }\n if (current.val && current.val.id === id) {\n return current.val;\n }\n visitedNodes.add(current);\n current = current.next;\n }\n return null;\n }\n\n removeStepById(id: string): ListNode | null {\n if (!this.head) return null;\n let current = this.head;\n let prev: ListNode | null = null;\n while (current !== null) {\n if (current?.val?.id === id) {\n if (current === this.head) {\n this.head = current.next;\n if (this.tail) {\n this.tail.next = current.next;\n }\n } else {\n (prev as ListNode).next = current.next;\n }\n if (current === this.tail) {\n this.tail = prev;\n }\n this.size--;\n this.pingConsumers();\n\n return current;\n }\n\n prev = current;\n if (current.next) {\n current = current.next;\n }\n }\n\n return null;\n }\n\n reset() {\n this.head = null;\n this.tail = null;\n this.size = 0;\n this.pingConsumers();\n }\n\n pingConsumers = () => {\n this.notify({\n type: \"STORE_CHANGED\",\n data: {\n head: this.head,\n tail: this.tail,\n size: this.size,\n },\n });\n };\n}\n\nexport class StoreHelpers {\n static isLastPoint = (store: Store, id: StepId): boolean => {\n return store.tail?.val?.id === id;\n };\n\n static initStore(options?: RequiredDrawOptions): Store | null {\n if (!options?.initial) return null;\n\n const emptyInitialOptions = options && options.initial && !options.initial.steps.length;\n if (emptyInitialOptions) {\n throw new Error(ERRORS[\"EMPTY_INITIAL_STATE\"]);\n }\n\n const initialOptionsProvided = options && options.initial.steps;\n if (initialOptionsProvided) {\n const { steps, closeGeometry, generateId } = options.initial;\n return StoreHelpers.fromArray(steps, closeGeometry, generateId);\n }\n\n return null;\n }\n\n static #generateIdForSteps = (stepsWithoutIds: LatLng[]): Step[] => {\n return stepsWithoutIds.map((step) => {\n return { ...step, id: uuidv4() };\n });\n };\n\n static buildStepSequence(steps: Step[]): Store {\n const list = new Store();\n steps.forEach((step) => {\n list.push(step);\n });\n return list;\n }\n\n static fromArray(\n initialSteps: Initial[\"steps\"],\n closeGeometry: Initial[\"closeGeometry\"],\n generateId: Initial[\"generateId\"],\n ): Store | null {\n let steps = generateId ? this.#generateIdForSteps(initialSteps) : initialSteps;\n\n const list = this.buildStepSequence(steps as Step[]);\n\n if (closeGeometry && list.tail) {\n list.tail.next = list.head;\n }\n return list;\n }\n\n static toArray(head: ListNode | null): Step[] {\n if (!head) return [];\n\n const visitedNodes = new Set<ListNode>();\n const result: Step[] = [];\n\n let current: ListNode | null = head;\n while (current !== null) {\n if (visitedNodes.has(current)) break;\n\n visitedNodes.add(current);\n result.push(current.val as Step);\n current = current.next;\n }\n\n return result;\n }\n}\n","import { StoreHelpers } from \"#store/index\";\nimport type { ButtonType, EventsProps, Step } from \"#types/index\";\nimport { HTMLEvent } from \"#types/helpers\";\nimport { DOM } from \"#utils/dom\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { FireEvents } from \"#components/map/helpers\";\nimport { Spatial } from \"#utils/helpers\";\nimport { TilesHelpers } from \"#components/map/tiles/helpers\";\n\nexport class PanelEvents {\n #props: EventsProps;\n #tooltip: Tooltip;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#tooltip = new Tooltip();\n }\n\n initEvents() {\n const { panel } = this.#props;\n if (panel) {\n DOM.manageEventListener(\"add\", panel?._undoButton, \"click\", this.#onUndoClick);\n DOM.manageEventListener(\n \"add\",\n panel?._undoButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"add\", panel?._undoButton, \"mouseleave\", this.onMouseLeave);\n }\n if (panel) {\n DOM.manageEventListener(\"add\", panel?._deleteButton, \"click\", this.#onRemoveAll);\n DOM.manageEventListener(\n \"add\",\n panel?._deleteButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"add\", panel?._deleteButton, \"mouseleave\", this.onMouseLeave);\n }\n\n if (panel) {\n DOM.manageEventListener(\"add\", panel?._saveButton, \"click\", this.onSaveClick);\n DOM.manageEventListener(\n \"add\",\n panel?._saveButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"add\", panel?._saveButton, \"mouseleave\", this.onMouseLeave);\n }\n }\n\n removeEvents() {\n const { panel } = this.#props;\n\n if (panel && panel._undoButton) {\n DOM.manageEventListener(\"remove\", panel._undoButton, \"click\", this.#onUndoClick);\n DOM.manageEventListener(\n \"remove\",\n panel._undoButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"remove\", panel._undoButton, \"mouseleave\", this.onMouseLeave);\n }\n if (panel && panel._deleteButton) {\n DOM.manageEventListener(\"remove\", panel._deleteButton, \"click\", this.#onRemoveAll);\n DOM.manageEventListener(\n \"remove\",\n panel._deleteButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"remove\", panel._deleteButton, \"mouseleave\", this.onMouseLeave);\n }\n if (panel && panel._saveButton) {\n DOM.manageEventListener(\"remove\", panel._saveButton, \"click\", this.onSaveClick);\n DOM.manageEventListener(\n \"remove\",\n panel._saveButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"remove\", panel._saveButton, \"mouseleave\", this.onMouseLeave);\n }\n }\n\n #getButtonLabel = (type: ButtonType) => {\n const { options } = this.#props;\n\n const LABELS = {\n undo: options.locale.undo,\n delete: options.locale.delete,\n save: options.locale.save,\n };\n\n return LABELS[type];\n };\n\n onMouseEnter = (event: HTMLEvent<HTMLButtonElement>) => {\n const type = event.target.getAttribute(\"data-type\") as ButtonType;\n if (type) {\n const label = this.#getButtonLabel(type);\n\n this.#tooltip\n .create({\n label: label,\n placement: \"bottom\",\n })\n .setPosition(this.#tooltip.getPosition(event, \"bottom\"));\n }\n };\n\n onMouseLeave = () => {\n this.#tooltip.remove();\n };\n\n #onRemoveAll = (event: Event) => {\n const { tiles, mode, panel, store, map } = this.#props;\n store.reset();\n panel.hidePanel();\n mode.reset();\n TilesHelpers.togglePointCircleRadius(map, \"default\");\n this.#tooltip.remove();\n tiles.resetGeometries();\n FireEvents.removeAllPoints(map, event);\n };\n\n #onUndoClick = (event: Event) => {\n const { store, panel, map, tiles } = this.#props;\n\n const tailVal = store.tail?.val as Step;\n store.removeStepById(tailVal.id);\n\n const step = { ...tailVal, total: store.size };\n FireEvents.undoPoint(step, map, event);\n\n // if we have only 2 points left, we need to switch to line mode and update the tail.next to null\n Spatial.switchToLineModeIfCan(this.#props);\n\n // after removing the last point, we need to set the panel coordinates to the new last point\n panel?.onPointRemove(store.tail?.val as Step);\n this.#tooltip.remove();\n\n requestAnimationFrame(tiles.render);\n };\n\n onSaveClick = (event: Event) => {\n const { store, options } = this.#props;\n\n FireEvents.onSaveClick(this.#props, StoreHelpers.toArray(store.head), event);\n this.#tooltip.remove();\n if (options.panel.buttons.save.clearOnSave) {\n this.#onRemoveAll(event);\n }\n };\n}\n","import type { MapLayerMouseEvent, GeoJSONSource } from \"maplibre-gl\";\nimport type { EventsProps, Step } from \"#types/index\";\n\nimport { ESOURCES, ELAYERS } from \"#utils/geo_constants\";\nimport { Spatial, uuidv4 } from \"#utils/helpers\";\nimport { TilesHelpers } from \"#components/map/tiles/helpers\";\n\nimport { FireEvents } from \"../helpers\";\n\nexport class PointHelpers {\n static updatePointsData(event: MapLayerMouseEvent) {\n const map = event.target;\n const pointSource = map.getSource(ESOURCES.SinglePointSource) as GeoJSONSource;\n if (pointSource) {\n pointSource.setData({\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: [event.lngLat.lng, event.lngLat.lat],\n },\n properties: {},\n });\n }\n }\n\n static setSinglePointVisible(event: MapLayerMouseEvent) {\n const map = event.target;\n map.setLayoutProperty(ELAYERS.SinglePointLayer, \"visibility\", \"visible\");\n }\n\n static setSinglePointHidden(event: MapLayerMouseEvent) {\n const map = event.target;\n setTimeout(() => {\n map.setLayoutProperty(ELAYERS.SinglePointLayer, \"visibility\", \"none\");\n }, 33);\n }\n\n static triggerPostPointAddition(event: MapLayerMouseEvent, props: EventsProps) {\n const { panel, store, map } = props;\n\n if (Spatial.canCloseGeometry(store)) {\n TilesHelpers.togglePointCircleRadius(map, \"large\");\n }\n panel?.setPanelLocation(event.lngLat);\n }\n\n static addPointToMap = (event: MapLayerMouseEvent, props: EventsProps) => {\n const { store, tiles, map, mode } = props;\n\n const step = { ...event.lngLat, id: uuidv4() };\n store.push(step);\n FireEvents.addPoint({ ...step, total: store.size }, map, mode);\n this.triggerPostPointAddition(event, props);\n requestAnimationFrame(tiles.render);\n };\n\n static updateSelectedStepLatLng = (event: MapLayerMouseEvent, selectedStep: Step) => {\n selectedStep.lat = event.lngLat.lat;\n selectedStep.lng = event.lngLat.lng;\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\nimport type { EventsProps, Step } from \"#types/index\";\nimport type { Map } from \"#types/map\";\n\nimport { Store } from \"#store/index\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { MapUtils, Spatial, uuidv4 } from \"#utils/helpers\";\nimport { PointHelpers } from \"../points/helpers\";\n\nexport const isOnLine = (event: MapLayerMouseEvent, store: Store) => {\n let current = store.head;\n const visited = new Set();\n\n while (current !== null) {\n if (visited.has(current)) break;\n if (current.next && current.next.val && current.val) {\n const map = event.target as Map;\n const aPixel = MapUtils.getPixelCoordinates(map, current.val);\n const bPixel = MapUtils.getPixelCoordinates(map, current.next.val);\n const eventPixel = MapUtils.getPixelCoordinates(map, event.lngLat);\n if (Spatial.checkIfPointIsOnLine(aPixel, bPixel, eventPixel)) {\n return current;\n }\n }\n visited.add(current);\n current = current.next;\n }\n return null;\n};\n\nexport const insertStepIfOnLine = (event: MapLayerMouseEvent, store: Store): Step | null => {\n const currentStep = isOnLine(event, store);\n\n if (currentStep) {\n const step = { ...event.lngLat, id: uuidv4() };\n store.insert(step, currentStep);\n return step;\n }\n return null;\n};\n\nexport const updateUIAfterInsert = (event: MapLayerMouseEvent, context: EventsProps) => {\n const { store, tiles, panel } = context;\n if (store.tail?.val) {\n panel?.setPanelLocation(store.tail.val);\n PointHelpers.setSinglePointHidden(event);\n tiles.render();\n }\n};\n\nexport const checkIfPointClicked = (event: MapLayerMouseEvent) => {\n return MapUtils.isFeatureTriggered(event, [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer]);\n};\n","import { GeoJSONSource, MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport { ListNode } from \"#store/index\";\nimport type { EventsProps, Uuid } from \"#types/index\";\nimport { ELAYERS, ESOURCES } from \"#utils/geo_constants\";\nimport { GeometryFactory, Spatial, throttle } from \"#utils/helpers\";\n\nimport { isOnLine } from \"./utils\";\nimport { FireEvents } from \"../helpers\";\n\nconst LINE_BREAK_THROTTLE_TIME = 15;\n\nexport class LineBreakEvents {\n props: EventsProps;\n #current: ListNode | null;\n #throttledOnLineEnter: (event: MapLayerMouseEvent) => void;\n\n constructor(props: EventsProps) {\n this.props = props;\n this.#current = null;\n this.#throttledOnLineEnter = throttle(this.#onLineEnterBreak, LINE_BREAK_THROTTLE_TIME);\n }\n\n initBreakEvents = () => {\n const { map } = this.props;\n\n map.on(\"click\", ELAYERS.LineLayerTransparent, this.#geometryBreakOnClick);\n map.on(\"mouseenter\", ELAYERS.LineLayerTransparent, this.#throttledOnLineEnter);\n map.on(\"mousemove\", ELAYERS.LineLayerTransparent, this.#throttledOnLineEnter);\n map.on(\"mouseleave\", ELAYERS.LineLayerTransparent, this.#onLineLeave);\n };\n\n removeBreakEvents = () => {\n const { map } = this.props;\n\n map.off(\"click\", ELAYERS.LineLayerTransparent, this.#geometryBreakOnClick);\n map.off(\"mouseenter\", ELAYERS.LineLayerTransparent, this.#throttledOnLineEnter);\n map.off(\"mousemove\", ELAYERS.LineLayerTransparent, this.#throttledOnLineEnter);\n map.off(\"mouseleave\", ELAYERS.LineLayerTransparent, this.#onLineLeave);\n };\n\n hideBreakLine = () => {\n const { map } = this.props;\n\n if (map.getLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\") !== \"none\") {\n map.setLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\", \"none\");\n }\n };\n\n showBreakLine = () => {\n const { map } = this.props;\n\n if (map.getLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\") !== \"visible\") {\n map.setLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\", \"visible\");\n }\n };\n\n // TODO\n #geometryBreakOnClick = () => {\n const { store, mode, panel, map, tiles } = this.props;\n\n const nextPointId = this.#current?.next?.val?.id as Uuid;\n Spatial.breakGeometry(store, nextPointId);\n if (store.tail?.val) {\n panel.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n this.#onLineLeave();\n\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"none\");\n mode.reset();\n tiles.render();\n FireEvents.onLineBreak(map);\n };\n\n // TODO\n #onLineEnterBreak = (event: MapLayerMouseEvent) => {\n const { map, store } = this.props;\n\n const line = isOnLine(event, store);\n if (line?.val?.id !== this.#current?.val?.id) {\n this.#current = line;\n }\n\n const lineSource = map.getSource(ESOURCES.LineSourceBreak) as GeoJSONSource;\n\n const current = [line?.val?.lng, line?.val?.lat] as [number, number];\n const next = [line?.next?.val?.lng, line?.next?.val?.lat] as [number, number];\n const lineBreakData = GeometryFactory.getLine(current, next);\n if (!lineBreakData) return;\n\n lineSource.setData(lineBreakData as any);\n this.showBreakLine();\n };\n\n #onLineLeave = () => {\n setTimeout(() => {\n this.hideBreakLine();\n }, LINE_BREAK_THROTTLE_TIME + 10);\n };\n}\n","import type { MapLayerMouseEvent, PointLike } from \"maplibre-gl\";\n\nimport type { EventsProps, LatLng } from \"#types/index\";\nimport { ELAYERS, ESOURCES, LINE_BASE } from \"#utils/geo_constants\";\nimport { StoreChangeEvent } from \"#store/types\";\nimport { GeometryFactory, MapUtils, Spatial, throttle } from \"#utils/helpers\";\nimport { EVENTS } from \"#utils/constants\";\n\nimport { DrawingModeChangeEvent } from \"../mode/types\";\nimport { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport { PointDoubleClickEvent, UndoEvent } from \"../types\";\n\nconst LINE_DYNAMIC_THROTTLE_TIME = 10;\n\nexport class DynamicLineEvents {\n #props: EventsProps;\n #visible: boolean;\n #firstPoint: LatLng | null;\n #secondPoint: LatLng | null;\n #lineFeature: any;\n #throttledOnLineMove: (event: MapLayerMouseEvent) => void;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#visible = props.options.dynamicLine;\n this.#firstPoint = null;\n this.#secondPoint = null;\n this.#initConsumers();\n this.#throttledOnLineMove = throttle(this.#onLineMove, LINE_DYNAMIC_THROTTLE_TIME);\n }\n\n #initConsumers() {\n this.#props.store.addObserver(this.#storeEventsConsumer);\n this.#props.mode.addObserver(this.#mapModeConsumer);\n this.#props.mouseEvents.addObserver(this.#mouseEventsConsumer);\n }\n\n removeLine = () => {\n this.hideDynamicLine();\n };\n\n removeConsumers = () => {\n this.#props.store.removeObserver(this.#storeEventsConsumer);\n this.#props.mode.removeObserver(this.#mapModeConsumer);\n this.#props.mouseEvents.removeObserver(this.#mouseEventsConsumer);\n };\n\n #mouseEventsConsumer = (event: MouseEventsChangeEvent) => {\n const { mode } = this.#props;\n if (mode.getClosedGeometry()) return;\n\n if (event.type === \"lastPointMouseClick\" && event.data) {\n this.hideDynamicLine();\n this.#visible = false;\n } else if (event.type === \"lastPointMouseClick\" && !event.data) {\n this.#visible = true;\n }\n if (!this.#visible) return;\n // hide the line if a point or a line is hovered\n if ((event.type === \"pointMouseEnter\" || event.type === \"lineMouseEnter\") && event.data) {\n this.hideDynamicLine();\n }\n if ((event.type === \"pointMouseLeave\" || event.type === \"lineMouseLeave\") && event.data) {\n const { store } = this.#props;\n this.#firstPoint = store.tail?.val as LatLng;\n this.#secondPoint = store.tail?.val as LatLng;\n this.showDynamicLine();\n }\n };\n\n #storeEventsConsumer = (event: StoreChangeEvent) => {\n const { store } = this.#props;\n switch (event.type) {\n case \"STORE_CHANGED\":\n if (event.data.tail?.val && !Spatial.isClosedGeometry(store)) {\n this.#firstPoint = event.data.tail?.val;\n this.showDynamicLine();\n }\n break;\n default:\n break;\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.#props;\n if (event.type === \"CLOSED_GEOMETRY_CHANGED\") {\n if (event.data) {\n this.hideDynamicLine();\n }\n\n if (!event.data && store?.tail?.val) {\n this.#firstPoint = store?.tail?.val;\n this.showDynamicLine();\n }\n }\n };\n\n initDynamicEvents = () => {\n const { map } = this.#props;\n\n map.on(\"click\", this.#onMapClick);\n map.on(\"mousemove\", this.#throttledOnLineMove);\n map.on(EVENTS.REMOVEALL, this.hideDynamicLine);\n map.on(EVENTS.UNDO, this.#onUndoClick);\n map.on(EVENTS.DOUBLECLICK, this.#onDoubleClick);\n };\n\n removeEvents = () => {\n const { map } = this.#props;\n\n map.off(\"click\", this.#onMapClick);\n map.off(\"mousemove\", this.#throttledOnLineMove);\n map.off(EVENTS.REMOVEALL, this.hideDynamicLine);\n map.off(EVENTS.UNDO, this.#onUndoClick);\n map.off(EVENTS.DOUBLECLICK, this.#onDoubleClick);\n };\n\n hideDynamicLine = () => {\n const { map, tiles } = this.#props;\n\n this.#firstPoint = null;\n this.#secondPoint = null;\n this.#lineFeature = null;\n map.off(\"mousemove\", this.#throttledOnLineMove);\n tiles.renderLines(LINE_BASE, ESOURCES.LineDynamicSource);\n map.setLayoutProperty(ELAYERS.LineDynamicLayer, \"visibility\", \"none\");\n };\n\n showDynamicLine = () => {\n const { map } = this.#props;\n\n const current = [this.#firstPoint?.lng, this.#firstPoint?.lat] as [number, number];\n const next = [this.#secondPoint?.lng, this.#secondPoint?.lat] as [number, number];\n\n this.#lineFeature = GeometryFactory.getLine(current, next);\n\n map.setLayoutProperty(ELAYERS.LineDynamicLayer, \"visibility\", \"visible\");\n if (this.#secondPoint) {\n this.#renderLineOnMouseMove({ lng: this.#secondPoint?.lng, lat: this.#secondPoint?.lat });\n }\n map.on(\"mousemove\", this.#throttledOnLineMove);\n };\n\n #renderLineOnMouseMove = (newCoord: LatLng) => {\n if (!this.#lineFeature) return;\n\n const { tiles } = this.#props;\n this.#lineFeature.features[0].geometry.coordinates[1] = [newCoord.lng, newCoord.lat];\n\n tiles.renderLines(this.#lineFeature, ESOURCES.LineDynamicSource);\n };\n\n #onLineMove = (event: MapLayerMouseEvent) => {\n this.#renderLineOnMouseMove(event.lngLat);\n };\n\n #onMapClick = (event: MapLayerMouseEvent) => {\n const { mode } = this.#props;\n const lineClick = MapUtils.isFeatureTriggered(event, [ELAYERS.LineLayerTransparent, ELAYERS.LineLayer]);\n if (lineClick && mode.getBreak()) {\n this.#secondPoint = { lng: event.lngLat.lng, lat: event.lngLat.lat };\n }\n\n if (lineClick) return;\n\n this.hideDynamicLine();\n };\n\n #onUndoClick = (event: UndoEvent) => {\n const { store, mode } = this.#props;\n if (!mode.getClosedGeometry()) {\n const latLng = event.target.unproject({ x: event.originalEvent.x, y: event.originalEvent.y } as PointLike);\n this.#secondPoint = { lng: latLng.lng, lat: latLng.lat };\n this.#firstPoint = store.tail?.val as LatLng;\n this.showDynamicLine();\n }\n };\n\n #onDoubleClick = (event: PointDoubleClickEvent) => {\n const { store, mode } = this.#props;\n if (!mode.getClosedGeometry()) {\n this.#secondPoint = { lng: event.coordinates.lng, lat: event.coordinates.lat };\n this.#firstPoint = store.tail?.val as LatLng;\n this.showDynamicLine();\n }\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport type { EventsProps } from \"#types/index\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { MapUtils, throttle } from \"#utils/helpers\";\nimport { FireEvents } from \"../helpers\";\nimport { PointHelpers } from \"../points/helpers\";\nimport { checkIfPointClicked, insertStepIfOnLine, updateUIAfterInsert } from \"./utils\";\n\nexport const LINE_TRANSPARENT_THROTTLE_TIME = 22;\n\nexport class TransparentLineEvents {\n props: EventsProps;\n #isThrottled: boolean;\n #lastEvent: MapLayerMouseEvent | null;\n\n constructor(props: EventsProps) {\n this.props = props;\n this.#isThrottled = false;\n this.#lastEvent = null;\n }\n\n initEvents() {\n const { map } = this.props;\n\n map.on(\"click\", ELAYERS.LineLayerTransparent, this.#onLineAdd);\n map.on(\"mousemove\", ELAYERS.LineLayerTransparent, this.#onLineMove);\n map.on(\"mouseenter\", ELAYERS.LineLayerTransparent, this.#onLineEnter);\n map.on(\"mouseleave\", ELAYERS.LineLayerTransparent, this.#onLineLeave);\n }\n\n removeEvents() {\n const { map } = this.props;\n map.off(\"click\", ELAYERS.LineLayerTransparent, this.#onLineAdd);\n map.off(\"mousemove\", ELAYERS.LineLayerTransparent, this.#onLineMove);\n map.off(\"mouseenter\", ELAYERS.LineLayerTransparent, this.#onLineEnter);\n map.off(\"mouseleave\", ELAYERS.LineLayerTransparent, this.#onLineLeave);\n }\n\n #onLineAdd = (event: MapLayerMouseEvent) => {\n const { store, map, mode } = this.props;\n if (checkIfPointClicked(event)) return;\n const step = insertStepIfOnLine(event, store);\n if (step) {\n FireEvents.addPoint({ ...step, total: store.size }, map, mode);\n updateUIAfterInsert(event, this.props);\n }\n };\n\n #processMouseMove = (event: MapLayerMouseEvent) => {\n PointHelpers.setSinglePointVisible(event);\n if (event.target.getLayer(ELAYERS.SinglePointLayer)) {\n PointHelpers.updatePointsData(event);\n }\n };\n\n // TODO\n #onLineMove = throttle((event: MapLayerMouseEvent) => {\n if (MapUtils.isFeatureTriggered(event, [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer])) return;\n\n const { mouseEvents } = this.props;\n if (mouseEvents.pointMouseDown || mouseEvents.pointMouseEnter) return;\n\n this.#lastEvent = event;\n\n if (this.#isThrottled) return;\n\n this.#isThrottled = true;\n requestAnimationFrame(() => {\n if (!this.#lastEvent) return;\n this.#processMouseMove(this.#lastEvent);\n this.#isThrottled = false;\n });\n }, LINE_TRANSPARENT_THROTTLE_TIME);\n\n #onLineEnter = (event: MapLayerMouseEvent) => {\n const { mouseEvents } = this.props;\n if (mouseEvents.pointMouseDown || mouseEvents.pointMouseEnter) return;\n if (MapUtils.isFeatureTriggered(event, [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer])) return;\n\n mouseEvents.lineMouseEnter = true;\n PointHelpers.setSinglePointVisible(event);\n };\n\n #onLineLeave = (event: MapLayerMouseEvent) => {\n const { mouseEvents } = this.props;\n if (mouseEvents.pointMouseDown || mouseEvents.pointMouseEnter) return;\n\n mouseEvents.lineMouseLeave = true;\n PointHelpers.setSinglePointHidden(event);\n };\n}\n","import type { EventsProps } from \"#types/index\";\nimport { DrawingModeChangeEvent } from \"../mode/types\";\nimport { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport { LineBreakEvents } from \"./break-line\";\nimport { DynamicLineEvents } from \"./dynamic-line\";\nimport { TransparentLineEvents } from \"./transparent-line\";\n\nexport class LineEvents {\n props: EventsProps;\n #break: LineBreakEvents;\n #transparent: TransparentLineEvents;\n #dynamic: DynamicLineEvents | null;\n #type: \"default\" | \"break\";\n\n constructor(props: EventsProps) {\n this.props = props;\n this.#break = new LineBreakEvents(props);\n this.#transparent = new TransparentLineEvents(props);\n this.#dynamic = null;\n this.#type = \"default\";\n }\n\n init() {\n this.#initDynamicLine();\n this.#initEvents();\n this.#initConsumers();\n }\n\n #initDynamicLine = () => {\n if (window.innerWidth <= 768) return;\n if (this.props.options.dynamicLine) {\n this.#dynamic = new DynamicLineEvents(this.props);\n }\n };\n\n #initEvents() {\n const notBreakMode = !this.props.mode.getBreak();\n if (notBreakMode) {\n this.#transparent.initEvents();\n if (this.props.options.dynamicLine) {\n this.#dynamic?.initDynamicEvents();\n }\n }\n }\n\n #initConsumers() {\n this.props.mode.addObserver(this.#mapModeConsumer);\n this.props.mouseEvents.addObserver(this.#mouseEventsConsumer);\n }\n\n remove() {\n this.#removeConsumers();\n this.#removeEvents();\n }\n\n #removeConsumers() {\n this.props.mode.removeObserver(this.#mapModeConsumer);\n this.props.mouseEvents.removeObserver(this.#mouseEventsConsumer);\n if (this.props.options.dynamicLine) {\n this.#dynamic?.removeConsumers();\n }\n }\n\n #removeEvents() {\n this.#break.removeBreakEvents();\n this.#transparent.removeEvents();\n if (this.props.options.dynamicLine) {\n this.#dynamic?.removeEvents();\n this.#dynamic?.removeLine();\n }\n }\n\n #mouseEventsConsumer = (event: MouseEventsChangeEvent) => {\n const { type, data } = event;\n const { mode } = this.props;\n if (!data || !mode.getBreak()) return;\n\n switch (type) {\n case \"pointMouseDown\":\n this.#break.removeBreakEvents();\n this.#break.hideBreakLine();\n break;\n case \"pointMouseUp\":\n this.#break.initBreakEvents();\n break;\n default:\n break;\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { type, data } = event;\n\n if (type === \"MODE_CHANGED\") {\n if (this.#type === \"break\") {\n this.#break.removeBreakEvents();\n this.#transparent.initEvents();\n this.#type = \"default\";\n }\n }\n\n if (type === \"BREAK_CHANGED\" && data) {\n if (this.#type === \"default\") {\n this.#transparent.removeEvents();\n this.#break.initBreakEvents();\n this.#type = \"break\";\n }\n }\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\nimport type { EventsProps } from \"#types/index\";\n\nimport { uuidv4, Spatial } from \"#utils/helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { TilesHelpers } from \"#components/map/tiles/helpers\";\n\nimport { FireEvents } from \"../helpers\";\nimport { DrawingModeChangeEvent } from \"../mode/types\";\n\nexport class FirstPoint {\n #mouseDown: boolean;\n #props: EventsProps;\n #tooltip: Tooltip;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#mouseDown = false;\n this.#tooltip = new Tooltip();\n props.mode.addObserver(this.#mapModeConsumer);\n }\n\n initEvents() {\n const { map } = this.#props;\n\n map.on(\"click\", ELAYERS.FirstPointLayer, this.#onFirstPointClick);\n map.on(\"mouseenter\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseLeave);\n map.on(\"mouseup\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseUp);\n map.on(\"mousedown\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseDown);\n }\n\n removeEvents() {\n const { map } = this.#props;\n\n map.off(\"click\", ELAYERS.FirstPointLayer, this.#onFirstPointClick);\n map.off(\"mouseenter\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseLeave);\n map.off(\"mouseup\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseUp);\n }\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { map, store } = this.#props;\n const { type, data } = event;\n\n if (type === \"MODE_CHANGED\") {\n if (data === \"line\" || data === \"polygon\") {\n map.on(\"click\", ELAYERS.FirstPointLayer, this.#onFirstPointClick);\n } else {\n map.off(\"click\", ELAYERS.FirstPointLayer, this.#onFirstPointClick);\n }\n if (Spatial.canCloseGeometry(store)) {\n TilesHelpers.togglePointCircleRadius(map, \"large\");\n }\n }\n };\n\n #onFirstPointClick = () => {\n const { store, map, mode, tiles } = this.#props;\n\n if (mode.getMode() === \"polygon\") {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n }\n\n if (Spatial.canCloseGeometry(store)) {\n Spatial.closeGeometry(store, mode);\n const step = Object.assign({}, store.head?.val, {\n id: uuidv4(),\n total: store.size,\n });\n FireEvents.addPoint(step, map, mode);\n TilesHelpers.togglePointCircleRadius(map, \"default\");\n tiles.render();\n }\n };\n\n #onFirstPointMouseDown = () => {\n this.#mouseDown = true;\n this.#tooltip.remove();\n };\n\n #onFirstPointMouseUp = () => {\n this.#mouseDown = false;\n };\n\n #onFirstPointMouseLeave = () => {\n const { mouseEvents } = this.#props;\n\n if (this.#mouseDown) return;\n\n mouseEvents.firstPointMouseLeave = true;\n this.#tooltip.remove();\n };\n\n #getTitle = () => {\n const { mode, options } = this.#props;\n\n if (mode.getMode() === \"line\" && options.modes.line.closeGeometry) {\n return options.locale.closeLine;\n }\n\n if (mode.getMode() === \"polygon\") {\n return options.locale.createPolygon;\n }\n\n return \"\";\n };\n\n #onFirstPointMouseEnter = (event: MapLayerMouseEvent) => {\n const { mode, mouseEvents, store } = this.#props;\n if (mode.getClosedGeometry() || this.#mouseDown) return;\n mouseEvents.firstPointMouseEnter = true;\n if (Spatial.canCloseGeometry(store)) {\n const { x, y } = event.originalEvent;\n if (x && y) {\n const Y_OFFSET = 14;\n\n this.#tooltip.create({ label: this.#getTitle(), placement: \"bottom\" });\n\n const X_OFFSET = this.#tooltip._label ? this.#tooltip._label.clientWidth / 2 : 0;\n this.#tooltip.setPosition({ x: x - X_OFFSET, y: y + Y_OFFSET });\n }\n }\n };\n}\n","import { TilesHelpers } from \"#components/map/tiles/helpers\";\nimport type { MapLayerMouseEvent, MapTouchEvent } from \"maplibre-gl\";\nimport type { EventsProps, LatLng, Step } from \"#types/index\";\n\nimport { MapUtils, Spatial, throttle } from \"#utils/helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { StoreHelpers } from \"#store/index\";\n\nimport { FireEvents } from \"../helpers\";\nimport { PointHelpers } from \"./helpers\";\nimport { FirstPoint } from \"./first-point\";\n\nexport class PointEvents {\n #props: EventsProps;\n #startCoordinates: LatLng | undefined;\n #enteredStep: Step | null;\n #selectedStep: Step | null;\n #selectedIdx: number | null;\n #firstPoint: FirstPoint;\n #isThrottled: boolean;\n #lastEvent: MapLayerMouseEvent | null;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#startCoordinates = undefined;\n this.#enteredStep = null;\n this.#selectedStep = null;\n this.#selectedIdx = null;\n this.#firstPoint = new FirstPoint(props);\n this.#isThrottled = false;\n this.#lastEvent = null;\n }\n\n #initFirstPointEvents = () => {\n const { map } = this.#props;\n\n map.on(\"click\", ELAYERS.FirstPointLayer, this.#onPointClick);\n map.on(\"mouseenter\", ELAYERS.FirstPointLayer, this.#onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.FirstPointLayer, this.#onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.FirstPointLayer, this.#onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.FirstPointLayer, this.#onPointMouseUp);\n map.on(\"touchend\", ELAYERS.FirstPointLayer, this.#onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.FirstPointLayer, this.#onPointMouseDown);\n\n this.#firstPoint.initEvents();\n };\n\n initEvents = () => {\n const { map } = this.#props;\n map.on(\"click\", this.#onMapClick);\n map.on(\"dblclick\", this.#onMapDblClick);\n\n map.on(\"click\", ELAYERS.PointsLayer, this.#onPointClick);\n map.on(\"mouseenter\", ELAYERS.PointsLayer, this.#onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.PointsLayer, this.#onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n map.on(\"touchend\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n\n this.#initFirstPointEvents();\n };\n\n #removeFirstPointEvents = () => {\n const { map } = this.#props;\n\n map.off(\"click\", ELAYERS.FirstPointLayer, this.#onPointClick);\n map.off(\"mouseenter\", ELAYERS.FirstPointLayer, this.#onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.FirstPointLayer, this.#onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.FirstPointLayer, this.#onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.FirstPointLayer, this.#onPointMouseUp);\n map.off(\"touchend\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n map.off(\"touchstart\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n this.#firstPoint.removeEvents();\n };\n\n removeEvents = () => {\n const { map } = this.#props;\n map.off(\"click\", this.#onMapClick);\n map.off(\"dblclick\", this.#onMapDblClick);\n map.off(\"mousemove\", this.#onMapMouseMove);\n\n map.off(\"click\", ELAYERS.PointsLayer, this.#onPointClick);\n map.off(\"mouseenter\", ELAYERS.PointsLayer, this.#onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.PointsLayer, this.#onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n\n this.#removeFirstPointEvents();\n };\n\n #onMapDblClick = (event: MapLayerMouseEvent) => {\n event.preventDefault();\n };\n\n #onPointClick = (event: MapLayerMouseEvent) => {\n const { store, tiles, panel, map, mouseEvents } = this.#props;\n\n // not using dblclick event because it's not working properly(fires if we add point and then move it fast)\n if (TilesHelpers.isDoubleClick() && this.#selectedStep) {\n store.removeStepById(this.#selectedStep.id);\n panel.onPointRemove(store.tail?.val as Step);\n FireEvents.pointDoubleClick({ ...this.#selectedStep, total: store.size }, this.#props.map);\n Spatial.switchToLineModeIfCan(this.#props);\n }\n\n const id = MapUtils.queryPointId(map, event.point);\n if (StoreHelpers.isLastPoint(store, id)) {\n mouseEvents.lastPointMouseClick = true;\n mouseEvents.lastPointMouseUp = false;\n }\n\n tiles.render();\n };\n\n #onOwnGeometryLayersClick = (event: MapLayerMouseEvent) => {\n return MapUtils.isFeatureTriggered(event, [\n ELAYERS.PointsLayer,\n ELAYERS.FirstPointLayer,\n ELAYERS.LineLayerTransparent,\n ELAYERS.LineLayerBreak,\n ]);\n };\n\n #onMapClick = (event: MapLayerMouseEvent) => {\n const { mode, mouseEvents, map } = this.#props;\n\n if (mode.getClosedGeometry()) return;\n if (this.#onOwnGeometryLayersClick(event)) return;\n if (mouseEvents.lastPointMouseClick) {\n mouseEvents.lastPointMouseClick = false;\n }\n map.getCanvasContainer().style.cursor = \"grab\";\n PointHelpers.addPointToMap(event, this.#props);\n PointHelpers.setSinglePointHidden(event);\n };\n\n #onMoveLeftClickUp = (event: MapLayerMouseEvent) => {\n const mouseLeftClickUp = event.originalEvent.buttons === 0;\n if (mouseLeftClickUp) {\n this.#onPointMouseUp();\n }\n };\n\n #processMouseMove = (event: MapLayerMouseEvent) => {\n const { tiles } = this.#props;\n tiles.renderOnMouseMove(this.#selectedIdx as number, event.lngLat);\n };\n\n #onMapMouseMove = throttle((event: MapLayerMouseEvent) => {\n this.#lastEvent = event;\n\n if (!this.#isThrottled) {\n this.#isThrottled = true;\n\n requestAnimationFrame(() => {\n if (!this.#selectedStep || !this.#lastEvent) return;\n PointHelpers.updateSelectedStepLatLng(this.#lastEvent, this.#selectedStep);\n this.#onMoveLeftClickUp(this.#lastEvent);\n this.#processMouseMove(this.#lastEvent);\n this.#isThrottled = false;\n });\n }\n }, 15);\n\n #onPointMouseEnter = (event: MapLayerMouseEvent) => {\n const { mouseEvents, map, store } = this.#props;\n if (mouseEvents) {\n mouseEvents.pointMouseEnter = true;\n if (mouseEvents.pointMouseDown) return;\n }\n PointHelpers.setSinglePointHidden(event);\n const id = MapUtils.queryPointId(map, event.point);\n if (StoreHelpers.isLastPoint(store, id)) {\n mouseEvents.lastPointMouseEnter = true;\n mouseEvents.lastPointMouseLeave = false;\n }\n const step = store.findStepById(id);\n if (step) {\n this.#enteredStep = step;\n FireEvents.enterPoint(Object.assign({}, step, { total: store.size }), map);\n }\n };\n\n #onPointMouseLeave = (event: MapLayerMouseEvent) => {\n const { mouseEvents, store, map } = this.#props;\n\n if (mouseEvents) {\n mouseEvents.pointMouseEnter = false;\n if (event.originalEvent.buttons === 0) {\n mouseEvents.pointMouseLeave = true;\n }\n if (mouseEvents.pointMouseDown) return;\n }\n const id = MapUtils.queryPointId(map, event.point);\n if (StoreHelpers.isLastPoint(store, id)) {\n mouseEvents.lastPointMouseEnter = false;\n mouseEvents.lastPointMouseLeave = true;\n }\n FireEvents.leavePoint(\n Object.assign({}, this.#enteredStep, {\n total: store.size,\n }),\n map,\n );\n };\n\n #hideLastPointPanel = () => {\n const { store, panel } = this.#props;\n if (!this.#selectedStep) return;\n\n if (StoreHelpers.isLastPoint(store, this.#selectedStep.id)) {\n panel.hidePanel();\n }\n };\n\n #setSelectedStep = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, map } = this.#props;\n\n const id = MapUtils.queryPointId(map, event.point);\n const step = store.findStepById(id);\n if (step) {\n this.#selectedStep = step;\n }\n };\n\n #onPointMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n event.preventDefault();\n\n const { mouseEvents, map, store } = this.#props;\n TilesHelpers.removeTransparentLine(map);\n this.#setSelectedStep(event);\n this.#hideLastPointPanel();\n const id = MapUtils.queryPointId(map, event.point);\n this.#selectedIdx = Spatial.getGeometryIndex(store, id);\n if (mouseEvents) {\n mouseEvents.pointMouseDown = true;\n }\n this.#startCoordinates = event.lngLat;\n map.on(\"mousemove\", this.#onMapMouseMove);\n map.on(\"touchmove\", this.#onMapMouseMove);\n };\n\n #onPointMouseUp = () => {\n const { mouseEvents, store, panel, map, options } = this.#props;\n mouseEvents.pointMouseUp = true;\n if (this.#selectedStep) {\n if (StoreHelpers.isLastPoint(store, this.#selectedStep.id) && store.tail?.val) {\n // mouseEvents.lastPointMouseClick = false;\n // mouseEvents.lastPointMouseUp = true;\n panel?.setPanelLocation(store.tail.val);\n }\n panel?.showPanel();\n\n FireEvents.movePoint(\n {\n id: this.#selectedStep.id,\n total: store.size,\n end: { lat: this.#selectedStep.lat, lng: this.#selectedStep.lng },\n start: this.#startCoordinates as LatLng,\n },\n map,\n );\n }\n if (mouseEvents) {\n mouseEvents.pointMouseDown = false;\n }\n TilesHelpers.addTransparentLine(map, options);\n // if the event.originalEvent.buttons === 0 in mousemove didn't work, let's try on mouse up\n // but this is a fail safe, it should work on event.originalEvent.buttons\n map.off(\"mousemove\", this.#onMapMouseMove);\n map.off(\"touchmove\", this.#onMapMouseMove);\n };\n}\n","import type { EventsProps } from \"#types/index\";\nimport { Tiles } from \"#components/map/tiles\";\nimport { ControlEvents } from \"#components/side-control/events\";\nimport { PanelEvents } from \"#components/last-point-panel/events\";\nimport { LineEvents } from \"./line\";\nimport { PointEvents } from \"./points\";\n\nexport class Events extends Tiles {\n #props: EventsProps;\n #panelEvents: PanelEvents;\n #controlEvents: ControlEvents;\n #pointEvents: PointEvents;\n #lineEvents: LineEvents;\n\n constructor(props: EventsProps) {\n super({ ...props });\n this.#props = props;\n this.#panelEvents = new PanelEvents(props);\n this.#controlEvents = new ControlEvents(props);\n this.#pointEvents = new PointEvents(props);\n this.#lineEvents = new LineEvents(props);\n props.map.on(\"mode:initialize\", this.#initEvents);\n props.map.on(\"mode:remove\", this.#removeDrawEvents);\n }\n\n #initEvents = () => {\n this.#lineEvents.init();\n this.#panelEvents?.initEvents();\n this.#pointEvents?.initEvents();\n };\n\n #removeDrawEvents = () => {\n this.#panelEvents?.removeEvents();\n this.#pointEvents?.removeEvents();\n this.#lineEvents?.remove();\n };\n\n removeMapEventsAndConsumers = () => {\n this.#panelEvents?.removeEvents();\n this.#pointEvents?.removeEvents();\n this.#controlEvents?.remove();\n this.#lineEvents?.remove();\n this.#props.map.off(\"mode:initialize\", this.#initEvents);\n };\n}\n","import type { RequiredDrawOptions } from \"#types/index\";\nimport { DOM } from \"#utils/dom\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport \"./control.css\";\n\ninterface ControlProps {\n options: RequiredDrawOptions;\n mode: DrawingMode;\n}\n\nexport class Control {\n #defaultOptions: RequiredDrawOptions;\n _line: HTMLButtonElement | undefined;\n _polygon: HTMLButtonElement | undefined;\n _break: HTMLButtonElement | undefined;\n _container: HTMLElement;\n constructor(props: ControlProps) {\n this.#defaultOptions = props.options;\n this._line = undefined;\n this._polygon = undefined;\n this._break = undefined;\n this._container = DOM.create(\"div\", \"mapboxgl-ctrl mapboxgl-ctrl-group maplibregl-ctrl maplibregl-ctrl-group\");\n this.createControl(props);\n }\n\n createControlButton = (\n type: \"line\" | \"polygon\" | \"break\",\n title: string,\n active: boolean,\n disabled?: boolean,\n ): HTMLButtonElement => {\n const size = this.#defaultOptions.panel.size;\n const button = DOM.create(\"button\", `control-button control-button-${size}`, this._container);\n button.setAttribute(\"aria-label\", title);\n button.setAttribute(\"data-type\", type);\n if (active) {\n button.classList.add(\"control-button-active\");\n }\n if (disabled) {\n button.setAttribute(\"disabled\", \"true\");\n button.setAttribute(\"aria-disabled\", \"true\");\n }\n DOM.create(\"span\", `icon ${type} icon-${size}`, button);\n return button;\n };\n\n #createLineButton = (context: ControlProps) => {\n const { mode, options } = context;\n const lineVisible = this.#defaultOptions.modes.line.visible;\n const lineTitle = options.locale.line;\n if (lineVisible) {\n this._line = this.createControlButton(\"line\", lineTitle, mode.getMode() === \"line\");\n }\n };\n\n #createPolygonButton = (context: ControlProps) => {\n const { mode, options } = context;\n\n const polygonVisible = this.#defaultOptions.modes.polygon.visible;\n const polygonTitle = options.locale.polygon;\n if (polygonVisible) {\n this._polygon = this.createControlButton(\"polygon\", polygonTitle, mode.getMode() === \"polygon\");\n }\n };\n\n #createBreakButton = (context: ControlProps) => {\n const { mode, options } = context;\n\n const breakVisible = this.#defaultOptions.modes.breakGeometry.visible;\n const breakTitle = options.locale.break;\n if (breakVisible) {\n const closedGeometry = this.#defaultOptions?.initial?.closeGeometry;\n const disabled = !closedGeometry;\n const isBreak = mode.getBreak();\n this._break = this.createControlButton(\"break\", breakTitle, isBreak, disabled);\n }\n };\n\n createControl = (context: ControlProps) => {\n this.#createLineButton(context);\n this.#createPolygonButton(context);\n this.#createBreakButton(context);\n };\n\n getContainer = () => {\n return this._container;\n };\n}\n","import type { RequiredDrawOptions } from \"#types/index\";\nimport { Observable } from \"#utils/observable\";\n\nimport type { DrawingModeChangeEvent, Mode } from \"./types\";\n\nfunction getInitialMode(options: RequiredDrawOptions): Mode {\n if (options.initial?.geometry) {\n return options.initial?.geometry;\n }\n\n if (options.modes.initial) {\n return options.modes.initial;\n }\n\n return null;\n}\n\nexport class DrawingMode extends Observable<DrawingModeChangeEvent> {\n #mode: Mode;\n #break: boolean;\n #closedGeometry: boolean;\n\n constructor(options: RequiredDrawOptions) {\n super();\n this.#mode = getInitialMode(options);\n this.#break = false;\n this.#closedGeometry = options.initial?.closeGeometry ?? false;\n }\n\n getMode = (): Mode => {\n return this.#mode;\n };\n\n setMode = (newMode: Mode) => {\n this.#mode = newMode;\n this.setBreak(false);\n this.notify({\n type: \"MODE_CHANGED\",\n data: newMode,\n });\n };\n\n getBreak = (): boolean => {\n return this.#break;\n };\n\n setBreak = (value: boolean) => {\n this.#break = value;\n this.notify({\n type: \"BREAK_CHANGED\",\n data: value,\n });\n };\n\n getClosedGeometry = (): boolean => {\n return this.#closedGeometry;\n };\n\n setClosedGeometry = (value: boolean) => {\n this.#closedGeometry = value;\n this.notify({\n type: \"CLOSED_GEOMETRY_CHANGED\",\n data: this.#closedGeometry,\n });\n };\n\n isPolygon = () => {\n return this.#mode === \"polygon\" && this.#closedGeometry;\n };\n\n reset = () => {\n this.setMode(this.getMode());\n this.setClosedGeometry(false);\n };\n\n pingConsumers = () => {\n this.notify({\n type: \"MODE_CHANGED\",\n data: this.getMode(),\n });\n this.notify({\n type: \"CLOSED_GEOMETRY_CHANGED\",\n data: this.getClosedGeometry(),\n });\n };\n}\n","import type { Map } from \"#types/map\";\n\nimport { Spatial } from \"#utils/helpers\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport { Store } from \"#store/index\";\n\nimport { MouseEvents } from \"../mouse-events\";\nimport { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport { CURSORS, TCursor } from \"./constants\";\n\ninterface CursorProps {\n map: Map;\n mode: DrawingMode;\n mouseEvents: MouseEvents;\n store: Store;\n}\n\nexport class Cursor {\n #props: CursorProps;\n #canvas: HTMLElement;\n\n // map: Map, mode: DrawingMode, mouseEvents: MouseEvents, store: Store\n constructor(props: CursorProps) {\n this.#props = props;\n this.#canvas = this.#props.map.getCanvasContainer();\n this.#canvas.style.cursor = props.mode.getMode() ? CURSORS.CROSSHAIR : CURSORS.AUTO;\n this.#initConsumers();\n }\n\n set = (cursor: TCursor) => {\n this.#canvas.style.cursor = cursor;\n };\n\n get = () => this.#canvas.style.cursor;\n\n handleMouseLeave = () => {\n const { mouseEvents, mode } = this.#props;\n if (mouseEvents.pointMouseDown) return;\n if (!mode.getMode()) {\n this.set(CURSORS.AUTO);\n return;\n }\n if (mode.getClosedGeometry()) {\n this.set(CURSORS.AUTO);\n } else {\n this.set(CURSORS.CROSSHAIR);\n }\n };\n\n handleFirstPointMouseEnter = () => {\n const { mode, store } = this.#props;\n\n if (mode.getClosedGeometry()) {\n this.set(CURSORS.MOVE);\n }\n if (Spatial.canCloseGeometry(store)) {\n this.set(CURSORS.POINTER);\n }\n };\n\n #initConsumers() {\n const { mouseEvents } = this.#props;\n\n mouseEvents.addObserver(this.#mouseEventsObserver);\n }\n\n removeConsumers() {\n const { mouseEvents } = this.#props;\n\n mouseEvents.removeObserver(this.#mouseEventsObserver);\n }\n\n #mouseEventsObserver = (event: MouseEventsChangeEvent) => {\n const { mode, mouseEvents } = this.#props;\n if (mode.getBreak()) return;\n\n const { type, data } = event;\n\n if (!data) return;\n\n switch (type) {\n case \"pointMouseDown\":\n this.set(CURSORS.GRABBING);\n break;\n case \"pointMouseUp\":\n this.set(CURSORS.GRAB);\n break;\n case \"pointMouseEnter\":\n if (mouseEvents.pointMouseDown) return;\n this.set(CURSORS.GRAB);\n break;\n case \"pointMouseLeave\":\n this.handleMouseLeave();\n break;\n case \"lineMouseEnter\":\n if (mouseEvents.pointMouseDown) return;\n this.set(CURSORS.POINTER);\n break;\n case \"lineMouseLeave\":\n this.handleMouseLeave();\n break;\n case \"firstPointMouseEnter\":\n this.handleFirstPointMouseEnter();\n break;\n case \"firstPointMouseLeave\":\n this.handleMouseLeave();\n break;\n case \"lastPointMouseEnter\":\n this.set(CURSORS.POINTER);\n break;\n case \"lastPointMouseLeave\":\n this.handleMouseLeave();\n break;\n default:\n break;\n }\n };\n}\n","import { Observable } from \"#utils/observable\";\nimport { MouseEventsChangeEvent } from \"./types\";\n\nexport class MouseEvents extends Observable<MouseEventsChangeEvent> {\n #firstPointMouseEnter: boolean;\n #firstPointMouseLeave: boolean;\n #lastPointMouseClick: boolean;\n #lastPointMouseUp: boolean;\n #lastPointMouseEnter: boolean;\n #lastPointMouseLeave: boolean;\n #pointMouseDown: boolean;\n #pointMouseUp: boolean;\n #pointMouseEnter: boolean;\n #pointMouseLeave: boolean;\n #lineMouseEnter: boolean;\n #lineMouseLeave: boolean;\n\n constructor() {\n super();\n this.#firstPointMouseEnter = false;\n this.#firstPointMouseLeave = false;\n this.#lastPointMouseClick = false;\n this.#lastPointMouseUp = false;\n this.#lastPointMouseEnter = false;\n this.#lastPointMouseLeave = false;\n this.#pointMouseDown = false;\n this.#pointMouseUp = false;\n this.#pointMouseEnter = false;\n this.#pointMouseLeave = false;\n this.#lineMouseEnter = false;\n this.#lineMouseLeave = false;\n }\n\n get firstPointMouseEnter() {\n return this.#firstPointMouseEnter;\n }\n set firstPointMouseEnter(value) {\n this.#firstPointMouseEnter = value;\n this.notify({\n type: \"firstPointMouseEnter\",\n data: value,\n });\n }\n\n get firstPointMouseLeave() {\n return this.#firstPointMouseLeave;\n }\n set firstPointMouseLeave(value) {\n this.#firstPointMouseLeave = value;\n this.notify({\n type: \"firstPointMouseLeave\",\n data: value,\n });\n }\n\n get lastPointMouseClick() {\n return this.#lastPointMouseClick;\n }\n set lastPointMouseClick(value) {\n this.#lastPointMouseClick = value;\n this.notify({\n type: \"lastPointMouseClick\",\n data: value,\n });\n }\n\n get lastPointMouseUp() {\n return this.#lastPointMouseUp;\n }\n set lastPointMouseUp(value) {\n this.#lastPointMouseUp = value;\n this.notify({\n type: \"lastPointMouseUp\",\n data: value,\n });\n }\n\n get lastPointMouseEnter() {\n return this.#lastPointMouseEnter;\n }\n set lastPointMouseEnter(value) {\n this.#lastPointMouseEnter = value;\n this.notify({\n type: \"lastPointMouseEnter\",\n data: value,\n });\n }\n\n get lastPointMouseLeave() {\n return this.#lastPointMouseLeave;\n }\n set lastPointMouseLeave(value) {\n this.#lastPointMouseLeave = value;\n this.notify({\n type: \"lastPointMouseLeave\",\n data: value,\n });\n }\n\n get pointMouseDown() {\n return this.#pointMouseDown;\n }\n set pointMouseDown(value) {\n this.#pointMouseDown = value;\n this.notify({\n type: \"pointMouseDown\",\n data: value,\n });\n }\n\n get pointMouseUp() {\n return this.#pointMouseUp;\n }\n set pointMouseUp(value) {\n this.#pointMouseUp = value;\n this.notify({\n type: \"pointMouseUp\",\n data: value,\n });\n }\n\n get pointMouseEnter() {\n return this.#pointMouseEnter;\n }\n set pointMouseEnter(value) {\n this.#pointMouseEnter = value;\n this.notify({\n type: \"pointMouseEnter\",\n data: value,\n });\n }\n\n get pointMouseLeave() {\n return this.#pointMouseLeave;\n }\n set pointMouseLeave(value) {\n this.#pointMouseLeave = value;\n this.notify({\n type: \"pointMouseLeave\",\n data: value,\n });\n }\n\n get lineMouseEnter() {\n return this.#lineMouseEnter;\n }\n set lineMouseEnter(value) {\n this.#lineMouseEnter = value;\n this.notify({\n type: \"lineMouseEnter\",\n data: value,\n });\n }\n\n get lineMouseLeave() {\n return this.#lineMouseLeave;\n }\n set lineMouseLeave(value) {\n this.#lineMouseLeave = value;\n this.notify({\n type: \"lineMouseLeave\",\n data: value,\n });\n }\n}\n","import { ERRORS } from \"#store/errors\";\nimport { Initial, DrawOptions, RequiredDrawOptions } from \"#types/index\";\nimport { DEFAULT_OPTIONS } from \"./constants\";\nimport {\n ON_LINE_POINT_PAINT_BASE,\n FIRST_POINT_PAINT_BASE,\n POINTS_PAINT_BASE,\n LINE_PAINT_BASE,\n POLYGON_PAINT_BASE,\n BREAK_PAINT_BASE,\n} from \"./geo_constants\";\n\nexport class Options {\n static allStepsHaveIds(steps: Initial[\"steps\"]): boolean {\n return steps.every((step) => \"id\" in step && step.id !== undefined);\n }\n\n static checkIfMissingIds(steps: Initial[\"steps\"], generateId: Initial[\"generateId\"]) {\n const idGenerationIsOff = !generateId;\n const idsNotProvided = !this.allStepsHaveIds(steps);\n if (idGenerationIsOff && idsNotProvided) {\n throw new Error(ERRORS[\"MISSING_IDS\"]);\n }\n }\n\n static checkIfEnoughPointsToClose(steps: Initial[\"steps\"], closeGeometry: Initial[\"closeGeometry\"]) {\n const minLengthToCloseGeometry = 3;\n if (closeGeometry && steps.length < minLengthToCloseGeometry) {\n throw new Error(ERRORS[\"NOT_ENOUGH_POINTS_TO_CLOSE\"]);\n }\n }\n\n static checkIfPolygonIsClosed(options: Initial) {\n const { closeGeometry, steps } = options;\n if (steps) {\n const firstLng = steps[0]?.lng;\n const lastLng = steps[steps.length - 1]?.lng;\n const firstLat = steps[0]?.lat;\n const lastLat = steps[steps.length - 1]?.lat;\n const firstAndLastNotEqual = firstLng !== lastLng || firstLat !== lastLat;\n if (firstAndLastNotEqual && closeGeometry) {\n throw new Error(ERRORS[\"FIRST_LAST_POINT_NOT_EQUAL\"]);\n }\n }\n }\n\n static checkInitialStepsOption(options: Initial): void {\n const { closeGeometry, generateId, steps } = options;\n // if we have ids for all steps if id generation is off\n this.checkIfMissingIds(steps, generateId);\n // If we want to close the geometry, we need at least 3 points\n this.checkIfEnoughPointsToClose(steps, closeGeometry);\n // If the geometry is a polygon, closeGeometry must be true.\n this.checkIfPolygonIsClosed(options);\n }\n\n static init(options?: DrawOptions): RequiredDrawOptions {\n if (!options) {\n return DEFAULT_OPTIONS;\n }\n\n return {\n panel: generatePanelOptions(options),\n modes: generateModeOptions(options),\n layersPaint: generateLayersOptions(options),\n initial: options.initial || DEFAULT_OPTIONS[\"initial\"],\n locale: generateLocaleOptions(options),\n dynamicLine: options.dynamicLine ?? DEFAULT_OPTIONS.dynamicLine,\n } as RequiredDrawOptions;\n }\n}\n\nfunction generatePanelOptions(options: DrawOptions): RequiredDrawOptions[\"panel\"] {\n return {\n size: options.panel?.size || DEFAULT_OPTIONS.panel.size,\n buttons: {\n undo: {\n visible: options.panel?.buttons?.undo?.visible ?? DEFAULT_OPTIONS.panel.buttons.undo.visible,\n },\n delete: {\n visible: options.panel?.buttons?.delete?.visible ?? DEFAULT_OPTIONS.panel.buttons.delete.visible,\n },\n save: {\n visible: options.panel?.buttons?.save?.visible ?? DEFAULT_OPTIONS.panel.buttons.save.visible,\n clearOnSave: options.panel?.buttons?.save?.clearOnSave ?? DEFAULT_OPTIONS.panel.buttons.save.clearOnSave,\n },\n },\n };\n}\n\nfunction generateModeOptions(options: DrawOptions): RequiredDrawOptions[\"modes\"] {\n return {\n initial: options.modes?.initial || DEFAULT_OPTIONS.modes.initial,\n line: {\n visible:\n options?.modes?.line?.visible !== undefined\n ? options.modes.line.visible\n : options?.initial?.geometry === \"line\" || DEFAULT_OPTIONS.modes.line.visible,\n closeGeometry:\n options?.modes?.line?.closeGeometry ??\n options?.initial?.closeGeometry ??\n DEFAULT_OPTIONS.modes.line.closeGeometry,\n },\n polygon: {\n visible:\n options?.modes?.polygon?.visible !== undefined\n ? options.modes.polygon.visible\n : options?.initial?.geometry === \"polygon\" || DEFAULT_OPTIONS.modes.polygon.visible,\n },\n breakGeometry: {\n visible: options?.modes?.breakGeometry?.visible ?? DEFAULT_OPTIONS.modes.breakGeometry.visible,\n },\n };\n}\n\nfunction generateLayersOptions(options: DrawOptions): RequiredDrawOptions[\"layersPaint\"] {\n return {\n onLinePoint: {\n \"circle-radius\": options.layersPaint?.onLinePoint?.[\"circle-radius\"] || ON_LINE_POINT_PAINT_BASE[\"circle-radius\"],\n \"circle-color\": options.layersPaint?.onLinePoint?.[\"circle-color\"] || ON_LINE_POINT_PAINT_BASE[\"circle-color\"],\n \"circle-stroke-color\":\n options.layersPaint?.onLinePoint?.[\"circle-stroke-color\"] || ON_LINE_POINT_PAINT_BASE[\"circle-stroke-color\"],\n \"circle-stroke-width\":\n options.layersPaint?.onLinePoint?.[\"circle-stroke-width\"] || ON_LINE_POINT_PAINT_BASE[\"circle-stroke-width\"],\n ...options.layersPaint?.onLinePoint,\n },\n firstPoint: {\n \"circle-radius\": options.layersPaint?.firstPoint?.[\"circle-radius\"] || FIRST_POINT_PAINT_BASE[\"circle-radius\"],\n \"circle-color\": options.layersPaint?.firstPoint?.[\"circle-color\"] || FIRST_POINT_PAINT_BASE[\"circle-color\"],\n \"circle-stroke-color\":\n options.layersPaint?.firstPoint?.[\"circle-stroke-color\"] || FIRST_POINT_PAINT_BASE[\"circle-stroke-color\"],\n \"circle-stroke-width\":\n options.layersPaint?.firstPoint?.[\"circle-stroke-width\"] || FIRST_POINT_PAINT_BASE[\"circle-stroke-width\"],\n ...options.layersPaint?.firstPoint,\n },\n points: {\n \"circle-radius\": options.layersPaint?.points?.[\"circle-radius\"] || POINTS_PAINT_BASE[\"circle-radius\"],\n \"circle-color\": options.layersPaint?.points?.[\"circle-color\"] || POINTS_PAINT_BASE[\"circle-color\"],\n \"circle-stroke-color\":\n options.layersPaint?.points?.[\"circle-stroke-color\"] || POINTS_PAINT_BASE[\"circle-stroke-color\"],\n \"circle-stroke-width\":\n options.layersPaint?.points?.[\"circle-stroke-width\"] || POINTS_PAINT_BASE[\"circle-stroke-width\"],\n ...options.layersPaint?.points,\n },\n line: {\n \"line-width\": options.layersPaint?.line?.[\"line-width\"] || LINE_PAINT_BASE[\"line-width\"],\n \"line-color\": options.layersPaint?.line?.[\"line-color\"] || LINE_PAINT_BASE[\"line-color\"],\n \"line-opacity\": options.layersPaint?.line?.[\"line-opacity\"] || LINE_PAINT_BASE[\"line-opacity\"],\n ...options.layersPaint?.line,\n },\n polygon: {\n \"fill-color\": options.layersPaint?.polygon?.[\"fill-color\"] || POLYGON_PAINT_BASE[\"fill-color\"],\n \"fill-opacity\": options.layersPaint?.polygon?.[\"fill-opacity\"] || POLYGON_PAINT_BASE[\"fill-opacity\"],\n ...options.layersPaint?.polygon,\n },\n breakLine: {\n \"line-width\": options.layersPaint?.breakLine?.[\"line-width\"] || BREAK_PAINT_BASE[\"line-width\"],\n \"line-color\": options.layersPaint?.breakLine?.[\"line-color\"] || BREAK_PAINT_BASE[\"line-color\"],\n \"line-dasharray\": options.layersPaint?.breakLine?.[\"line-dasharray\"] || BREAK_PAINT_BASE[\"line-dasharray\"],\n ...options.layersPaint?.breakLine,\n },\n };\n}\n\nfunction generateLocaleOptions(options: DrawOptions): RequiredDrawOptions[\"locale\"] {\n return {\n save: options.locale?.save ?? DEFAULT_OPTIONS.locale.save,\n delete: options.locale?.delete ?? DEFAULT_OPTIONS.locale.delete,\n undo: options.locale?.undo ?? DEFAULT_OPTIONS.locale.undo,\n line: options.locale?.line ?? DEFAULT_OPTIONS.locale.line,\n polygon: options.locale?.polygon ?? DEFAULT_OPTIONS.locale.polygon,\n break: options.locale?.break ?? DEFAULT_OPTIONS.locale.break,\n closeLine: options.locale?.closeLine ?? DEFAULT_OPTIONS.locale.closeLine,\n createPolygon: options.locale?.createPolygon ?? DEFAULT_OPTIONS.locale.createPolygon,\n };\n}\n","import type { IControl, Map } from \"#types/map\";\n\nimport type { DrawOptions, LatLng, RequiredDrawOptions, Step, StepId } from \"#types/index\";\nimport { Panel } from \"#components/last-point-panel\";\nimport { Tiles } from \"#components/map/tiles\";\nimport { Events } from \"#components/map\";\nimport { Control } from \"#components/side-control\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport { Cursor } from \"#components/map/cursor\";\nimport { MouseEvents } from \"#components/map/mouse-events/index\";\nimport { uuidv4 } from \"#utils/helpers\";\nimport { DOM } from \"#utils/dom\";\nimport { Store, StoreHelpers } from \"#store/index\";\nimport { Options } from \"#utils/options\";\n\nimport type {\n UndoEvent,\n PointAddEvent,\n PointDoubleClickEvent,\n PointEnterEvent,\n PointLeaveEvent,\n PointMoveEvent,\n RemoveAllEvent,\n SaveEvent,\n ModeChangeEvent,\n} from \"#components/map/types\";\n\nimport \"./draw.css\";\n\nexport default class DrawLibre implements IControl {\n #container: HTMLElement | undefined;\n #store: Store | undefined;\n #mode: DrawingMode | undefined;\n #defaultOptions: RequiredDrawOptions;\n #events: Events | undefined;\n #tiles: Tiles | undefined;\n #panel: Panel | undefined;\n #cursor: Cursor | undefined;\n #mouseEvents: MouseEvents | undefined;\n\n static #instance: DrawLibre | null = null;\n static #instanceCreated = false;\n\n private constructor(options?: DrawOptions) {\n this.#defaultOptions = Options.init(options);\n if (this.#defaultOptions.initial) {\n Options.checkInitialStepsOption(this.#defaultOptions.initial);\n }\n\n if (DrawLibre.#instanceCreated) {\n throw new Error(\"Use 'DrawLibre.getInstance()' instead of 'new DrawLibre()'.\");\n }\n\n DrawLibre.#instanceCreated = true;\n this.#store = undefined;\n this.#mode = undefined;\n this.#events = undefined;\n this.#tiles = undefined;\n this.#panel = undefined;\n this.#mouseEvents = undefined;\n this.#cursor = undefined;\n }\n\n public static getInstance(options?: DrawOptions) {\n if (!DrawLibre.#instance) {\n DrawLibre.#instance = new DrawLibre(options);\n }\n return DrawLibre.#instance;\n }\n\n /**\n * DO NOT USE IMPLICITLY. PASS TO map.addControl().\n *\n * @example ```ts\n * const map = new Map();\n * const draw = new DrawLibre();\n * map.addControl(draw)\n * ```\n *\n * Register a control on the map and give it a chance to register event listeners\n *\n * @param map - the Map this control will be added to\n * @returns The control's container element. This should\n * be created by the control and returned by onAdd without being attached\n * to the DOM: the map will insert the control's element into the DOM\n * as necessary.\n */\n onAdd(map: Map) {\n this.#store = new Store(this.#defaultOptions);\n this.#mode = new DrawingMode(this.#defaultOptions);\n this.#panel = new Panel({ map, mode: this.#mode, options: this.#defaultOptions, store: this.#store });\n this.#tiles = new Tiles({ map, store: this.#store, options: this.#defaultOptions, mode: this.#mode });\n const control = new Control({ options: this.#defaultOptions, mode: this.#mode });\n this.#mouseEvents = new MouseEvents();\n this.#cursor = new Cursor({ map, mode: this.#mode, mouseEvents: this.#mouseEvents, store: this.#store });\n this.#events = new Events({\n map,\n store: this.#store,\n options: this.#defaultOptions,\n panel: this.#panel,\n control,\n mode: this.#mode,\n tiles: this.#tiles,\n mouseEvents: this.#mouseEvents,\n });\n if (this.#mode.getMode()) {\n map.fire(\"mode:initialize\");\n }\n this.#mode.pingConsumers();\n this.#container = control.getContainer();\n\n return this.#container;\n }\n\n /**\n * DO NOT USE IMPLICITLY. PASS TO map.removeControl().\n *\n * @example ```ts\n * const map = new Map();\n * const draw = new DrawLibre();\n * map.removeControl(draw)\n * ```\n *\n * Unregister a control on the map and give it a chance to detach event listeners.\n *\n * @param map - the Map this control will be removed from\n */\n onRemove() {\n this.#cursor?.removeConsumers();\n this.#tiles?.removeTiles();\n this.#events?.removeMapEventsAndConsumers();\n this.#panel?.removePanel();\n this.#store?.reset();\n this.#mode?.unsubscribe();\n\n if (this.#container) {\n DOM.remove(this.#container);\n }\n }\n\n /**\n * Adds a series of steps to the store. If a step ID is not provided, it will be automatically generated.\n *\n * @param step - The step to add to the store, which can be of type Step or LatLng.\n */\n setSteps = (value: Step[] | LatLng[]) => {\n if (Array.isArray(value)) {\n value.forEach((step) => {\n const newStep = { ...step, id: (step as Step)[\"id\"] || uuidv4() };\n this.#store?.push(newStep);\n });\n } else {\n throw new Error(\"Invalid argument. Expected an array of steps.\");\n }\n this.#tiles?.render();\n };\n\n /**\n * Retrieves a step from the store by its ID. This method is called by {@link map.findStepById}\n * internally.\n *\n * @param id - The ID of the step to retrieve.\n * @returns The step with the specified ID, or undefined if not found.\n */\n findStepById = (id: StepId) => {\n return this.#store?.findStepById(id);\n };\n\n /**\n * Retrieves all steps from the store, either as an array or as a linked list, based on the type specified.\n * This method is called by {@link map.getAllSteps}\n * internally.\n *\n * @param type - The type of collection to return, either \"array\" or \"ll\" (linked list).\n * @returns An array of all steps or the linked list of steps.\n */\n getAllSteps = (type: \"array\" | \"linkedlist\" = \"array\") => {\n if (type === \"array\" && this.#store) {\n return StoreHelpers.toArray(this.#store.head);\n }\n if (type === \"linkedlist\") {\n return this.#store;\n }\n throw new Error(\"Invalid type specified. Use 'array' or 'linkedlist'.\");\n };\n\n setOptions = (fn: (options: RequiredDrawOptions) => RequiredDrawOptions) => {\n this.#defaultOptions = fn(this.#defaultOptions);\n };\n\n /**\n * Removes all steps.\n */\n removeAllSteps = () => {\n this.#store?.reset();\n this.#panel?.removePanel();\n this.#tiles?.render();\n };\n}\n\nexport type {\n RequiredDrawOptions,\n PointAddEvent,\n PointDoubleClickEvent,\n PointEnterEvent,\n PointLeaveEvent,\n PointMoveEvent,\n RemoveAllEvent,\n SaveEvent,\n UndoEvent,\n ModeChangeEvent,\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/dom.ts","../src/components/last-point-panel/index.ts","../src/utils/geo_constants.ts","../src/components/map/tiles/helpers.ts","../src/utils/helpers.ts","../src/components/map/tiles/index.ts","../src/components/tooltip/index.ts","../src/components/map/cursor/constants.ts","../src/components/side-control/helpers.ts","../src/utils/constants.ts","../src/components/map/helpers.ts","../src/components/side-control/observer.ts","../src/components/side-control/events.ts","../src/utils/observable.ts","../src/store/errors.ts","../src/store/index.ts","../src/components/last-point-panel/events.ts","../src/components/map/points/helpers.ts","../src/components/map/line/utils.ts","../src/components/map/line/break-line.ts","../src/components/map/line/dynamic-line.ts","../src/components/map/line/transparent-line.ts","../src/components/map/line/index.ts","../src/components/map/points/first-point.ts","../src/components/map/points/index.ts","../src/components/map/index.ts","../src/components/side-control/index.ts","../src/components/map/mode/index.ts","../src/components/map/cursor/index.ts","../src/components/map/mouse-events/index.ts","../src/utils/options.ts","../src/index.ts"],"names":["DOM","_DOM","props","i","tagName","className","container","element","node","el","value","action","target","type","callback","options","actionFn","Panel","#props","#isHidden","#panelPopup","#initPanel","#initConsumers","#mapModeConsumer","event","store","data","#applyPanelStyles","coordinates","point","#pointPositionUpdate","#updatePanelPositionOnMapMove","mapRect","x","y","offset","#removeMapEventListeners","head","title","size","button","locale","undo","deleteButton","save","panelSize","POLYGON_BASE","LINE_BASE","POINT_BASE","ELAYERS","ESOURCES","FIRST_POINT_RADIUS","FIRST_POINT_COLOR","FIRST_POINT_PAINT_BASE","ON_LINE_POINT_PAINT_BASE","POLYGON_PAINT_BASE","LINE_PAINT_BASE","POINTS_PAINT_BASE","BREAK_PAINT_BASE","generateLayersToRender","TilesHelpers","#lastClickTime","#firstPointCircleRadius","map","#defaultPointCircleRadius","transparentLayer","layer","now","MapUtils","layerIds","coords","lat","lng","GeometryFactory","#collectGeometryCoordinates","current","visitedNodes","next","pointFeatures","val","Spatial","_Spatial","id","idx","point1","point2","A","B","P","distanceAB","distanceAP","distancePB","prev","mode","context","tiles","uuidv4","getRandomHexChar","getUuidSection","length","section","getUuidSectionSize","firstElement","lastElement","parts","throttle","fn","delay","lastArgs","shouldCall","execute","args","Tiles","#pointsFeature","#linesFeature","#polygonFeature","#init","#addSources","#addLayers","#swapLayers","source","polygonInvisible","beneathLayerId","aboveLayerId","beneath","above","#removeSources","#removeLayers","points","pointSource","lines","lineSource","polygon","polygoneSource","#renderPolygonOnMouseMove","featureIdx","newCoord","lastIdx","#renderLineOnMouseMove","BASE_Y_OFFSET_FROM_ELEMENT","BASE_X_OFFSET_FROM_ELEMENT","Tooltip","span","#activateAnimation","#getLabelDimensions","#getLeftPosition","bottom","left","labelWidth","labelHeight","#getBottomPosition","right","position","pos","CURSORS","addControlListeners","events","listener","removeControlListeners","getButtonLabel","lineTitle","polygonTitle","breakTitle","EVENTS","DEFAULT_OPTIONS","FireEvents","step","originalEvent","steps","ControlObserver","#resetAllState","_line","_polygon","_break","#checkActive","#observeModeChange","#enableButton","#disableButton","#observeGeometryChange","ControlEvents","#tooltip","#observer","#initEvents","control","#removeEvents","label","placement","#removeActiveClass","#initialize","Observable","observer","ERRORS","ListNode","Store","list","StoreHelpers","newNode","_StoreHelpers","closeGeometry","generateId","#generateIdForSteps","stepsWithoutIds","initialSteps","result","PanelEvents","panel","#onUndoClick","#onRemoveAll","#getButtonLabel","tailVal","PointHelpers","selectedStep","isOnLine","visited","aPixel","bPixel","eventPixel","insertStepIfOnLine","currentStep","updateUIAfterInsert","checkIfPointClicked","LINE_BREAK_THROTTLE_TIME","LineBreakEvents","#current","#throttledOnLineEnter","#onLineEnterBreak","#geometryBreakOnClick","#onLineLeave","nextPointId","line","lineBreakData","LINE_DYNAMIC_THROTTLE_TIME","DynamicLineEvents","#visible","#firstPoint","#secondPoint","#lineFeature","#throttledOnLineMove","#onLineMove","#storeEventsConsumer","#mouseEventsConsumer","#onMapClick","#onDoubleClick","lineClick","latLng","LINE_TRANSPARENT_THROTTLE_TIME","TransparentLineEvents","#isThrottled","#lastEvent","#onLineAdd","#onLineEnter","#processMouseMove","mouseEvents","LineEvents","#break","#transparent","#dynamic","#type","#initDynamicLine","#removeConsumers","FirstPoint","#mouseDown","#onFirstPointClick","#onFirstPointMouseEnter","#onFirstPointMouseLeave","#onFirstPointMouseUp","#onFirstPointMouseDown","#getTitle","X_OFFSET","PointEvents","#startCoordinates","#enteredStep","#selectedStep","#selectedIdx","#initFirstPointEvents","#onPointClick","#onPointMouseEnter","#onPointMouseLeave","#onPointMouseDown","#onPointMouseUp","#onMapDblClick","#removeFirstPointEvents","#onMapMouseMove","#onOwnGeometryLayersClick","#onMoveLeftClickUp","#hideLastPointPanel","#setSelectedStep","Events","#panelEvents","#controlEvents","#pointEvents","#lineEvents","#removeDrawEvents","Control","#defaultOptions","active","disabled","#createLineButton","lineVisible","#createPolygonButton","polygonVisible","#createBreakButton","breakVisible","isBreak","getInitialMode","DrawingMode","#mode","#closedGeometry","newMode","Cursor","#canvas","cursor","#mouseEventsObserver","MouseEvents","#firstPointMouseEnter","#firstPointMouseLeave","#lastPointMouseClick","#lastPointMouseUp","#lastPointMouseEnter","#lastPointMouseLeave","#pointMouseDown","#pointMouseUp","#pointMouseEnter","#pointMouseLeave","#lineMouseEnter","#lineMouseLeave","Options","idGenerationIsOff","idsNotProvided","firstLng","lastLng","firstLat","lastLat","generatePanelOptions","generateModeOptions","generateLayersOptions","generateLocaleOptions","DrawLibre","_DrawLibre","#container","#store","#events","#tiles","#panel","#cursor","#mouseEvents","#instance","#instanceCreated","newStep"],"mappings":"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","file":"index.js","sourcesContent":["export class DOM {\n private static readonly docStyle =\n typeof window !== \"undefined\" && window.document && window.document.documentElement.style;\n private static transformProp = DOM.testProp([\"transform\", \"WebkitTransform\"]);\n\n private static testProp(props: string[]): string | undefined {\n if (!DOM.docStyle) return props[0];\n for (let i = 0; i < props.length; i++) {\n if ((props as any)[i] in DOM.docStyle) {\n return props[i];\n }\n }\n return props[0];\n }\n\n static create<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n className?: string,\n container?: HTMLElement,\n ): HTMLElementTagNameMap[K] {\n const element = window.document.createElement(tagName);\n if (className !== undefined) element.className = className;\n if (container) container.appendChild(element);\n return element;\n }\n\n static remove(node: HTMLElement) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n\n public static setTransform(el: HTMLElement, value: string) {\n if (DOM.transformProp && el.style) {\n // @ts-ignore\n el.style[DOM.transformProp] = value;\n }\n }\n\n static manageEventListener(\n action: \"add\" | \"remove\",\n target: HTMLElement | Window | Document | undefined,\n type: string,\n callback: EventListenerOrEventListenerObject,\n options: {\n capture?: boolean;\n passive?: boolean;\n } = {},\n ) {\n if (!target) return;\n\n const actionFn = action === \"add\" ? \"addEventListener\" : \"removeEventListener\";\n if (\"passive\" in options) {\n target[actionFn](type, callback, options);\n } else {\n target[actionFn](type, callback, options.capture);\n }\n }\n\n static mouseButton(e: MouseEvent) {\n return e.button;\n }\n\n static addClassName(node: HTMLElement, className: string) {\n if (!node.classList.contains(className)) {\n node.classList.add(className);\n }\n }\n\n static removeClassName(node: HTMLElement, className: string) {\n if (node.classList.contains(className)) {\n node.classList.remove(className);\n }\n }\n}\n","import type { Map } from \"#types/map\";\nimport type { LatLng, PanelImpl, Point, RequiredDrawOptions, Step } from \"#types/index\";\nimport { DOM } from \"#utils/dom\";\nimport { Store } from \"#store/index\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport { DrawingModeChangeEvent } from \"#components/map/mode/types\";\nimport \"./panel.css\";\n\ninterface IProps {\n map: Map;\n mode: DrawingMode;\n options: RequiredDrawOptions;\n store: Store;\n}\n\nexport class Panel {\n #props: IProps;\n #isHidden: boolean;\n #panelPopup: HTMLElement | undefined;\n _undoButton: HTMLElement | undefined;\n _deleteButton: HTMLElement | undefined;\n _saveButton: HTMLElement | undefined;\n _container: HTMLElement | undefined;\n _updatePositionCallback: (() => void) | undefined;\n\n constructor(props: IProps) {\n this.#props = props;\n this._container = undefined;\n this.#isHidden = true;\n this.#panelPopup = undefined;\n this.#initPanel();\n this.#initConsumers();\n }\n\n #initConsumers() {\n this.#props.mode?.addObserver(this.#mapModeConsumer);\n }\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.#props;\n const { type, data } = event;\n if (type === \"MODE_CHANGED\" && !data) {\n this.hidePanel();\n }\n if (type === \"MODE_CHANGED\" && data) {\n if (store.tail?.val) {\n this.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n }\n };\n\n #applyPanelStyles() {\n if (!this.#panelPopup) return;\n\n this.#panelPopup.className = \"dashboard-container\";\n this.#panelPopup.style.position = \"absolute\";\n this.#panelPopup.style.zIndex = \"1000000\";\n this.#panelPopup.style.pointerEvents = \"auto\";\n this.#panelPopup.style.display = this.#isHidden ? \"none\" : \"block\";\n }\n\n #initPanel = () => {\n const { store } = this.#props;\n\n this.createPanel();\n\n this.#panelPopup = document.createElement(\"div\");\n this.#applyPanelStyles();\n\n if (this._container) {\n this.#panelPopup.appendChild(this._container);\n }\n\n document.body.appendChild(this.#panelPopup);\n\n if (store.tail?.val) {\n this.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n };\n\n setPanelLocation = (coordinates: LatLng) => {\n if (!this.#panelPopup) return;\n\n if (this.#isHidden) {\n this.showPanel();\n }\n\n const point = this.#props.map.project(coordinates);\n\n this.#pointPositionUpdate(point);\n this.#updatePanelPositionOnMapMove(coordinates);\n };\n\n #pointPositionUpdate = (point: Point) => {\n if (this.#isHidden || !this.#panelPopup) return;\n\n const mapContainer = this.#props.map.getContainer();\n const mapRect = mapContainer.getBoundingClientRect();\n\n const x = mapRect.left + point.x;\n const y = mapRect.top + point.y;\n const offset = 36;\n\n this.#panelPopup.style.left = `${x - offset}px`;\n this.#panelPopup.style.top = `${y - offset}px`;\n };\n\n #updatePanelPositionOnMapMove(coordinates: LatLng) {\n this.#removeMapEventListeners();\n\n this._updatePositionCallback = () => {\n if (this.#isHidden || !this.#panelPopup) return;\n this.#pointPositionUpdate(this.#props.map.project(coordinates));\n };\n\n this.#props.map.on(\"move\", this._updatePositionCallback);\n this.#props.map.on(\"zoom\", this._updatePositionCallback);\n }\n\n #removeMapEventListeners() {\n if (this._updatePositionCallback) {\n this.#props.map.off(\"move\", this._updatePositionCallback);\n this.#props.map.off(\"zoom\", this._updatePositionCallback);\n this._updatePositionCallback = undefined;\n }\n }\n\n showPanel = () => {\n if (this.#isHidden && this.#panelPopup) {\n this.#isHidden = false;\n this.#panelPopup.style.display = \"block\";\n\n this.#panelPopup.style.transition = \"opacity 0.2s\";\n this.#panelPopup.style.opacity = \"1\";\n }\n };\n\n hidePanel = () => {\n if (!this.#isHidden && this.#panelPopup) {\n this.#isHidden = true;\n this.#panelPopup.style.display = \"none\";\n }\n };\n\n onPointRemove = (head: Step) => {\n if (head) {\n this.setPanelLocation(head);\n } else {\n this.hidePanel();\n }\n };\n\n removePanel = () => {\n if (this._updatePositionCallback) {\n this.#props.map.off(\"move\", this._updatePositionCallback);\n this.#props.map.off(\"zoom\", this._updatePositionCallback);\n this._updatePositionCallback = undefined;\n }\n\n if (this.#panelPopup) {\n document.body.removeChild(this.#panelPopup);\n this.#panelPopup = undefined;\n }\n\n if (this._container) {\n DOM.remove(this._container);\n this._container = undefined;\n }\n };\n\n createButton = (type: \"undo\" | \"save\" | \"delete\", title: string, size: PanelImpl[\"size\"], container: HTMLElement) => {\n const button = DOM.create(\"button\", `panel-button panel-button-${size}`, container);\n button.setAttribute(\"data-type\", type);\n button.setAttribute(\"aria-label\", title);\n DOM.create(\"span\", `icon ${type} icon-${size}`, button);\n return button;\n };\n\n createPanel = () => {\n const { options } = this.#props;\n const { locale } = options;\n const { undo, delete: deleteButton, save } = options.panel.buttons;\n const panelSize = options.panel.size;\n\n const container = DOM.create(\"div\", \"dashboard\");\n\n if (undo.visible) {\n this._undoButton = this.createButton(\"undo\", locale.undo, panelSize, container);\n }\n if (deleteButton.visible) {\n this._deleteButton = this.createButton(\"delete\", locale.delete, panelSize, container);\n }\n if (save.visible) {\n this._saveButton = this.createButton(\"save\", locale.save, panelSize, container);\n }\n this._container = container;\n };\n}\n","import type { RequiredDrawOptions } from \"#types/index\";\nimport type { AddLayerObject } from \"maplibre-gl\";\n\nexport const POLYGON_BASE = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"Polygon\",\n coordinates: [],\n },\n },\n ],\n};\n\nexport const LINE_BASE = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"LineString\",\n coordinates: [],\n },\n },\n ],\n};\n\nexport const POINT_BASE = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"Point\",\n coordinates: [],\n },\n },\n ],\n};\n\nexport const ELAYERS = {\n LineDynamicLayer: \"mdl-line-dynamic-layer\",\n LineLayer: \"mdl-line-layer\",\n LineLayerTransparent: \"mdl-line-layer-transparent\",\n LineLayerBreak: \"mdl-line-break-layer\",\n PolygonLayer: \"mdl-polygon-layer\",\n PointsLayer: \"mdl-points-layer\",\n SinglePointLayer: \"mdl-single-point-layer\",\n FirstPointLayer: \"mdl-first-point-layer\",\n} as const;\n\nexport const ESOURCES = {\n LineDynamicSource: \"mdl-line-dynamic-source\",\n LineSourceBreak: \"mdl-line-source-break\",\n LineSource: \"mdl-line-source\",\n PolygonSource: \"mdl-polygon-source\",\n PointsSource: \"mdl-points-source\",\n SinglePointSource: \"mdl-single-point-source\",\n} as const;\n\nexport const FIRST_POINT_RADIUS = {\n large: 6.5,\n default: 5.5,\n};\n\nexport const FIRST_POINT_COLOR = {\n large: \"#FF6464\",\n default: \"#666666\",\n};\n\nexport const FIRST_POINT_PAINT_BASE = {\n \"circle-radius\": FIRST_POINT_RADIUS[\"default\"],\n \"circle-color\": \"#FEFFFE\",\n \"circle-stroke-color\": FIRST_POINT_COLOR[\"default\"],\n \"circle-stroke-width\": 3,\n};\n\nexport const ON_LINE_POINT_PAINT_BASE = {\n \"circle-radius\": FIRST_POINT_RADIUS[\"large\"],\n \"circle-color\": \"#FEFFFE\",\n \"circle-stroke-color\": \"#666666\",\n \"circle-stroke-width\": 3,\n};\n\nexport const POLYGON_PAINT_BASE = {\n \"fill-color\": \"grey\",\n \"fill-opacity\": 0.4,\n};\n\nexport const LINE_PAINT_BASE = {\n \"line-width\": 3,\n \"line-color\": \"grey\",\n \"line-opacity\": 0.7,\n};\n\nexport const POINTS_PAINT_BASE = {\n \"circle-radius\": FIRST_POINT_RADIUS[\"default\"],\n \"circle-color\": \"#FEFFFE\",\n \"circle-stroke-color\": \"#666666\",\n \"circle-stroke-width\": 3,\n};\n\nexport const BREAK_PAINT_BASE = {\n \"line-width\": 3,\n \"line-color\": \"#FF6464\",\n \"line-dasharray\": [3, 3],\n};\n\nexport const generateLayersToRender = (options: RequiredDrawOptions) => {\n return [\n {\n id: ELAYERS.SinglePointLayer,\n source: ESOURCES.SinglePointSource,\n type: \"circle\",\n paint: options.layersPaint.onLinePoint,\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.PolygonLayer,\n source: ESOURCES.PolygonSource,\n type: \"fill\",\n paint: options.layersPaint.polygon,\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.LineDynamicLayer,\n source: ESOURCES.LineDynamicSource,\n type: \"line\",\n paint: options.layersPaint.line,\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.LineLayer,\n source: ESOURCES.LineSource,\n type: \"line\",\n paint: options.layersPaint.line,\n layout: {\n visibility: \"visible\",\n },\n },\n {\n id: ELAYERS.LineLayerTransparent,\n source: ESOURCES.LineSource,\n type: \"line\",\n paint: {\n \"line-width\": 4,\n \"line-color\": \"transparent\",\n },\n },\n {\n id: ELAYERS.LineLayerBreak,\n source: ESOURCES.LineSourceBreak,\n type: \"line\",\n paint: options.layersPaint.breakLine,\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.PointsLayer,\n source: ESOURCES.PointsSource,\n type: \"circle\",\n paint: options.layersPaint.points,\n filter: [\"==\", [\"get\", \"isFirst\"], false],\n },\n {\n id: ELAYERS.FirstPointLayer,\n source: ESOURCES.PointsSource,\n type: \"circle\",\n paint: options.layersPaint.firstPoint,\n filter: [\"==\", [\"get\", \"isFirst\"], true],\n },\n ] satisfies AddLayerObject[];\n};\n","import type { Map } from \"#types/map\";\n\nimport { ELAYERS, FIRST_POINT_COLOR, generateLayersToRender, FIRST_POINT_RADIUS } from \"#utils/geo_constants\";\nimport { RequiredDrawOptions } from \"#types/index\";\n\nexport class TilesHelpers {\n static #lastClickTime = 0;\n\n static #firstPointCircleRadius = (map: Map) => {\n map.setPaintProperty(ELAYERS.FirstPointLayer, \"circle-radius\", FIRST_POINT_RADIUS[\"large\"]);\n map.setPaintProperty(ELAYERS.FirstPointLayer, \"circle-stroke-color\", FIRST_POINT_COLOR[\"large\"]);\n };\n\n static #defaultPointCircleRadius = (map: Map) => {\n map.setPaintProperty(ELAYERS.FirstPointLayer, \"circle-radius\", FIRST_POINT_RADIUS[\"default\"]);\n map.setPaintProperty(ELAYERS.FirstPointLayer, \"circle-stroke-color\", FIRST_POINT_COLOR[\"default\"]);\n };\n\n static togglePointCircleRadius = (map: Map, type: keyof typeof FIRST_POINT_RADIUS) => {\n if (type === \"large\") {\n this.#firstPointCircleRadius(map);\n } else {\n this.#defaultPointCircleRadius(map);\n }\n };\n\n static removeTransparentLine = (map: Map) => {\n map.removeLayer(ELAYERS.LineLayerTransparent);\n };\n\n static addTransparentLine = (map: Map, options: RequiredDrawOptions) => {\n if (map.getLayer(ELAYERS.LineLayerTransparent)) return;\n const LAYERS_TO_RENDER = generateLayersToRender(options);\n const transparentLayer = LAYERS_TO_RENDER.find((layer) => layer.id === ELAYERS.LineLayerTransparent);\n if (transparentLayer) {\n map.addLayer(transparentLayer);\n }\n };\n\n static isDoubleClick() {\n const DOUBLE_CLICK_THRESHOLD = 400;\n const now = Date.now();\n\n if (now - this.#lastClickTime <= DOUBLE_CLICK_THRESHOLD) {\n this.#lastClickTime = now;\n return true;\n }\n\n this.#lastClickTime = now;\n return false;\n }\n}\n","import type { MapLayerMouseEvent, MapMouseEvent } from \"maplibre-gl\";\nimport type { LatLng, Point, Uuid, EventsProps } from \"#types/index\";\nimport type { Map } from \"#types/map\";\n\nimport { ListNode, Store } from \"#store/index\";\nimport { TilesHelpers } from \"#components/map/tiles/helpers\";\n\nimport { DrawingMode } from \"#components/map/mode\";\nimport { ELAYERS, POLYGON_BASE } from \"./geo_constants\";\n\nexport class MapUtils {\n static isFeatureTriggered(event: MapLayerMouseEvent, layerIds: string[]) {\n const layers = event.target.queryRenderedFeatures(event.point, {\n layers: layerIds,\n });\n return layers.some((layer) => layerIds.includes(layer.layer.id));\n }\n\n static getPixelCoordinates = (map: Map, coords: LatLng) => {\n const { lat, lng } = coords;\n return map.project([lng, lat]);\n };\n\n static queryPointId = (map: Map, point: MapMouseEvent[\"point\"]) => {\n const query = map.queryRenderedFeatures(point, {\n layers: [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer],\n });\n const id = query?.[0]?.properties.id;\n return id;\n };\n}\n\nexport class GeometryFactory {\n static #collectGeometryCoordinates(store: Store): number[][] {\n const coordinates = [];\n let current = store.head;\n const visitedNodes = new Set();\n\n while (current !== null) {\n if (visitedNodes.has(current.val?.id)) {\n if (store.head && store.head.val) {\n coordinates.push([store.head.val.lng, store.head.val.lat]);\n }\n break;\n }\n visitedNodes.add(current.val?.id);\n\n if (current.val) {\n coordinates.push([current.val.lng, current.val.lat]);\n }\n current = current.next;\n }\n\n return coordinates;\n }\n\n static getAllLines(store: Store) {\n const coordinates = this.#collectGeometryCoordinates(store);\n return {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"LineString\",\n coordinates: coordinates,\n },\n },\n ],\n };\n }\n\n static getLine(current: [number, number], next: [number, number]) {\n return {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"LineString\",\n coordinates: [current, next],\n },\n },\n ],\n };\n }\n\n static getPolygon(store: Store) {\n const coordinates = this.#collectGeometryCoordinates(store);\n return {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n properties: {},\n geometry: {\n type: \"Polygon\",\n coordinates: [coordinates],\n },\n },\n ],\n };\n }\n\n static getPoints(store: Store) {\n let current = store.head;\n const pointFeatures = [];\n const visitedNodes = new Set();\n\n while (current !== null) {\n if (visitedNodes.has(current.val?.id)) {\n break;\n }\n if (current.val) {\n const val = current.val;\n const head = current.val.id === store.head?.val?.id;\n pointFeatures.push({\n type: \"Feature\",\n properties: { id: val.id, lat: val.lat, lng: val.lng, isFirst: head },\n geometry: {\n type: \"Point\",\n coordinates: [val.lng, val.lat],\n },\n });\n }\n visitedNodes.add(current.val?.id);\n current = current.next;\n }\n\n return {\n type: \"FeatureCollection\",\n features: pointFeatures,\n };\n }\n}\n\nexport class Spatial {\n static getGeometryIndex = (store: Store, id: Uuid) => {\n let current = store.head;\n let idx = 0;\n while (current !== null) {\n if (current.val?.id === id) {\n return idx;\n }\n idx++;\n current = current.next;\n }\n return -1;\n };\n\n static isFirstPoint(event: MapLayerMouseEvent): boolean {\n const map = event.target;\n const point = event.point;\n const points = map.queryRenderedFeatures(point, {\n layers: [ELAYERS.FirstPointLayer],\n });\n return Boolean(points.length);\n }\n\n // √(x2​−x1​)²+(y2​−y1​)²​\n static distance = (point1: Point, point2: Point) =>\n Math.sqrt((point1.x - point2.x) ** 2 + (point1.y - point2.y) ** 2);\n\n static checkIfPointIsOnLine = (A: Point, B: Point, P: Point): boolean => {\n const EPSILON = 0.1;\n\n const distanceAB = this.distance(A, B);\n const distanceAP = this.distance(A, P);\n const distancePB = this.distance(P, B);\n\n if (Math.abs(distanceAP + distancePB - distanceAB) < EPSILON) {\n return true;\n }\n\n return false;\n };\n\n static isClosedGeometry = (store: Store) => {\n return store.tail?.next === store.head;\n };\n\n static breakGeometry = (store: Store, id: Uuid) => {\n if (!store.head) return;\n\n let current = store.head;\n let prev = store.tail as ListNode; // we know that tail is not null because the geometry is closed\n\n do {\n if (current?.val?.id === id) {\n if (current !== store.head) {\n prev.next = current.next;\n store.head = current;\n store.tail = prev;\n }\n (store.tail as ListNode).next = null;\n return;\n }\n prev = current;\n current = current.next as ListNode;\n } while (current !== store.head);\n };\n\n static closeGeometry = (store: Store, mode: DrawingMode) => {\n if (store.tail) {\n store.tail.next = store.head;\n }\n mode.setClosedGeometry(true);\n };\n\n static canCloseGeometry = (store: Store) => {\n return store.size > 2 && !this.isClosedGeometry(store);\n };\n\n static canBreakClosedGeometry = (store: Store) => {\n return store.size <= 2;\n };\n\n static switchToLineModeIfCan = (context: EventsProps) => {\n const { mode, store, tiles, map } = context;\n\n if (Spatial.canBreakClosedGeometry(store)) {\n if (store.tail && store.tail.val) {\n store.tail.next = null;\n }\n mode.reset();\n TilesHelpers.togglePointCircleRadius(map, \"default\");\n tiles.renderPolygon(POLYGON_BASE);\n }\n };\n}\n\nexport const uuidv4 = (): Uuid => {\n if (\"crypto\" in window && \"randomUUID\" in window.crypto) {\n return window.crypto.randomUUID();\n }\n\n function getRandomHexChar() {\n const hexChars = \"0123456789abcdef\";\n return hexChars[Math.floor(Math.random() * 16)];\n }\n\n function getUuidSection(length: number) {\n let section = \"\";\n for (let i = 0; i < length; i++) {\n section += getRandomHexChar();\n }\n return section;\n }\n\n function getUuidSectionSize(idx: number) {\n const firstElement = idx === 0;\n const lastElement = idx === 4;\n\n if (firstElement) {\n return 8;\n }\n if (lastElement) {\n return 12;\n }\n\n return 4;\n }\n\n const parts = [];\n for (let i = 0; i < 5; i++) {\n parts.push(getUuidSection(getUuidSectionSize(i)));\n }\n\n return parts.join(\"-\") as Uuid;\n};\n\nexport const throttle = (fn: (...args: any) => void, delay: number) => {\n let lastArgs: any;\n let shouldCall = true;\n\n function execute() {\n if (shouldCall && lastArgs) {\n fn(...lastArgs);\n lastArgs = null;\n shouldCall = false;\n setTimeout(() => {\n shouldCall = true;\n execute();\n }, delay);\n }\n }\n\n return function (...args: any) {\n lastArgs = args;\n execute();\n };\n};\n\nexport const debounce = (fn: (...args: any) => void, delay: number) => {\n let timeout: number;\n\n return function (...args: any) {\n clearTimeout(timeout);\n timeout = window.setTimeout(() => {\n fn(...args);\n }, delay);\n };\n};\n","import type { GeoJSONSource } from \"maplibre-gl\";\n\nimport type { LatLng, RequiredDrawOptions } from \"#types/index\";\nimport type { Map } from \"#types/map\";\nimport { Store } from \"#store/index\";\nimport { ELAYERS, ESOURCES, generateLayersToRender } from \"#utils/geo_constants\";\nimport { POINT_BASE, LINE_BASE, POLYGON_BASE } from \"#utils/geo_constants\";\nimport { GeometryFactory } from \"#utils/helpers\";\nimport { DrawingMode } from \"#components/map/mode\";\n\ninterface IProps {\n map: Map;\n store: Store;\n options: RequiredDrawOptions;\n mode: DrawingMode;\n}\n\nexport class Tiles {\n #props: IProps;\n #pointsFeature: any;\n #linesFeature: any;\n #polygonFeature: any;\n\n constructor(props: IProps) {\n this.#props = props;\n this.#init();\n this.render();\n }\n\n #init() {\n this.#addSources();\n this.#addLayers();\n this.#swapLayers(ELAYERS.LineLayer, ELAYERS.SinglePointLayer);\n this.#swapLayers(ELAYERS.LineLayerTransparent, ELAYERS.SinglePointLayer);\n this.#swapLayers(ELAYERS.LineLayerTransparent, ELAYERS.FirstPointLayer);\n this.#swapLayers(ELAYERS.LineLayerTransparent, ELAYERS.PointsLayer);\n this.#swapLayers(ELAYERS.PolygonLayer, ELAYERS.LineLayer);\n }\n\n #addSources = () => {\n const { map } = this.#props;\n Object.values(ESOURCES).forEach((source) => {\n if (!map.getSource(source)) {\n map.addSource(source, {\n type: \"geojson\",\n data: {\n type: \"FeatureCollection\",\n features: [],\n },\n promoteId: \"id\",\n });\n }\n });\n };\n\n #addLayers = () => {\n const { map, mode, options } = this.#props;\n\n const LAYERS_TO_RENDER = generateLayersToRender(options);\n\n LAYERS_TO_RENDER.forEach((layer) => {\n if (!map.getLayer(layer.id)) {\n map.addLayer(layer);\n }\n });\n\n const polygonInvisible = map.getLayoutProperty(ELAYERS.PolygonLayer, \"visibility\") === \"none\";\n if (mode.getMode() === \"polygon\" && polygonInvisible) {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n }\n };\n\n #swapLayers = (beneathLayerId: string, aboveLayerId: string) => {\n const { map } = this.#props;\n\n const beneath = map.getLayer(beneathLayerId);\n const above = map.getLayer(aboveLayerId);\n\n if (beneath && above) {\n map.moveLayer(beneathLayerId, aboveLayerId);\n }\n };\n\n #removeSources = () => {\n const { map } = this.#props;\n\n Object.values(ESOURCES).forEach((source) => {\n if (map.getSource(source)) {\n map.removeSource(source);\n }\n });\n };\n\n #removeLayers = () => {\n const { map } = this.#props;\n\n Object.values(ELAYERS).forEach((layer) => {\n if (map.getLayer(layer)) {\n map.removeLayer(layer);\n }\n });\n };\n\n removeTiles = () => {\n // first remove the layers then all the sources\n this.#removeLayers();\n this.#removeSources();\n };\n\n renderPoints = (points: any) => {\n const { map } = this.#props;\n\n const pointSource = map.getSource(ESOURCES.PointsSource) as GeoJSONSource;\n if (pointSource) {\n pointSource.setData(points);\n }\n };\n\n renderLines = (lines: any, source: string) => {\n const { map } = this.#props;\n\n const lineSource = map.getSource(source) as GeoJSONSource;\n\n if (lineSource) {\n lineSource.setData(lines);\n }\n };\n\n renderPolygon = (polygon: any) => {\n const { map } = this.#props;\n\n const polygoneSource = map.getSource(ESOURCES.PolygonSource) as GeoJSONSource;\n\n if (polygoneSource) {\n polygoneSource.setData(polygon);\n }\n };\n\n render = () => {\n const { mode, options, store } = this.#props;\n\n const points = GeometryFactory.getPoints(store);\n const lines = GeometryFactory.getAllLines(store);\n this.#pointsFeature = points;\n this.#linesFeature = lines;\n\n this.renderPoints(points);\n this.renderLines(lines, ESOURCES.LineSource);\n\n const polygonOptionChecked = options.modes.polygon.visible;\n if (polygonOptionChecked && mode.isPolygon()) {\n const polygon = GeometryFactory.getPolygon(store);\n this.#polygonFeature = polygon;\n this.renderPolygon(polygon);\n }\n };\n\n #renderPolygonOnMouseMove = (featureIdx: number, newCoord: LatLng) => {\n this.#polygonFeature.features[0].geometry.coordinates[0][featureIdx] = [newCoord.lng, newCoord.lat];\n const firstElement = featureIdx === 0;\n if (firstElement) {\n const lastIdx = this.#polygonFeature.features[0].geometry.coordinates[0]?.length - 1;\n this.#polygonFeature.features[0].geometry.coordinates[0][lastIdx] = [newCoord.lng, newCoord.lat];\n }\n this.renderPolygon(this.#polygonFeature);\n };\n\n #renderLineOnMouseMove = (featureIdx: number, newCoord: LatLng) => {\n const { mode } = this.#props;\n\n this.#linesFeature.features[0].geometry.coordinates[featureIdx] = [newCoord.lng, newCoord.lat];\n\n const firstElement = featureIdx === 0;\n const selectedFirstPointInClosedLine = this.#linesFeature && mode.getClosedGeometry() && firstElement;\n if (selectedFirstPointInClosedLine) {\n const lastIdx = this.#linesFeature.features[0].geometry.coordinates?.length - 1;\n this.#linesFeature.features[0].geometry.coordinates[lastIdx] = [newCoord.lng, newCoord.lat];\n }\n this.renderLines(this.#linesFeature, ESOURCES.LineSource);\n };\n\n renderOnMouseMove = (featureIdx: number, newCoord: LatLng) => {\n const { mode, options } = this.#props;\n\n this.#pointsFeature.features[featureIdx].geometry.coordinates = [newCoord.lng, newCoord.lat];\n this.renderPoints(this.#pointsFeature);\n this.#renderLineOnMouseMove(featureIdx, newCoord);\n\n const polygonOptionChecked = options.modes.polygon.visible;\n if (polygonOptionChecked && mode.isPolygon()) {\n this.#renderPolygonOnMouseMove(featureIdx, newCoord);\n }\n };\n\n resetGeometries = () => {\n this.renderPoints(POINT_BASE);\n this.renderLines(LINE_BASE, ESOURCES.LineSource);\n this.renderPolygon(POLYGON_BASE);\n };\n}\n","import { HTMLEvent } from \"#types/helpers\";\nimport { DOM } from \"#utils/dom\";\nimport \"./tooltip.css\";\n\ninterface CreateOptions {\n label: string;\n placement: \"left\" | \"bottom\";\n}\n\nconst BASE_Y_OFFSET_FROM_ELEMENT = 8;\nconst BASE_X_OFFSET_FROM_ELEMENT = 8;\n\ntype Position = {\n x: number;\n y: number;\n};\n\nexport class Tooltip {\n _container: HTMLElement | undefined;\n _label: HTMLElement | undefined;\n\n constructor() {\n this._container = undefined;\n }\n\n create = (options: CreateOptions) => {\n const container = DOM.create(\"div\", \"popup-container\", document.body);\n const span = DOM.create(\"span\", `popup-text popup-text-${options.placement}`, container);\n span.textContent = options.label;\n this._container = container;\n this._label = span;\n return this;\n };\n\n #activateAnimation = () => {\n const notActive = !this._label?.classList.value.includes(\"popup-text-active\");\n if (notActive) {\n this._label?.classList.add(\"popup-text-active\");\n }\n };\n\n #getLabelDimensions = () => {\n if (!this._label) return { width: 0, height: 0 };\n\n return {\n width: this._label.clientWidth,\n height: this._label.clientHeight,\n };\n };\n\n #getLeftPosition = (event: HTMLEvent<HTMLElement>): Position => {\n const { bottom, left } = event.target.getBoundingClientRect();\n const { width: labelWidth, height: labelHeight } = this.#getLabelDimensions();\n\n return {\n x: left - BASE_X_OFFSET_FROM_ELEMENT - labelWidth,\n y: bottom - labelHeight - 2,\n };\n };\n\n #getBottomPosition = (event: HTMLEvent<HTMLElement>): Position => {\n const { bottom, left, right } = event.target.getBoundingClientRect();\n const { width: labelWidth } = this.#getLabelDimensions();\n\n const elementCenterX = (right - left) / 2 + left;\n return {\n x: elementCenterX - labelWidth / 2,\n y: bottom + BASE_Y_OFFSET_FROM_ELEMENT,\n };\n };\n\n getPosition = (event: HTMLEvent<HTMLElement>, position: \"left\" | \"bottom\"): Position => {\n if (position === \"left\") {\n return this.#getLeftPosition(event);\n }\n\n return this.#getBottomPosition(event);\n };\n\n setPosition = (pos: Position) => {\n const { x, y } = pos;\n if (this._container) {\n this._container.style.left = `${x}px`;\n this._container.style.top = `${y}px`;\n }\n this.#activateAnimation();\n };\n\n remove = () => {\n if (this._container) {\n DOM.remove(this._container);\n }\n };\n}\n","export const CURSORS = {\n AUTO: \"auto\",\n DEFAULT: \"default\",\n POINTER: \"pointer\",\n CROSSHAIR: \"crosshair\",\n MOVE: \"move\",\n HELP: \"help\",\n GRAB: \"grab\",\n GRABBING: \"grabbing\",\n} as const;\n\nexport type TCursor = (typeof CURSORS)[keyof typeof CURSORS];\n","import { ControlType, RequiredDrawOptions } from \"#types/index\";\nimport { DOM } from \"#utils/dom\";\n\nexport const addControlListeners = (\n element: HTMLElement,\n events: { [key: string]: EventListenerOrEventListenerObject },\n) => {\n for (const [event, listener] of Object.entries(events)) {\n DOM.manageEventListener(\"add\", element, event, listener);\n }\n};\n\nexport const removeControlListeners = (\n element: HTMLElement,\n events: { [key: string]: EventListenerOrEventListenerObject },\n) => {\n for (const [event, listener] of Object.entries(events)) {\n DOM.manageEventListener(\"remove\", element, event, listener);\n }\n};\n\nexport const getButtonLabel = (type: ControlType, options: RequiredDrawOptions) => {\n const lineTitle = options.locale.line;\n const polygonTitle = options.locale.polygon;\n const breakTitle = options.locale.break;\n\n const LABELS = {\n line: lineTitle,\n polygon: polygonTitle,\n break: breakTitle,\n };\n\n return LABELS[type];\n};\n","import { RequiredDrawOptions } from \"../types\";\nimport {\n BREAK_PAINT_BASE,\n FIRST_POINT_PAINT_BASE,\n LINE_PAINT_BASE,\n ON_LINE_POINT_PAINT_BASE,\n POINTS_PAINT_BASE,\n POLYGON_PAINT_BASE,\n} from \"./geo_constants\";\n\nexport const EVENTS = {\n DOUBLECLICK: \"mdl:doubleclick\",\n POINTENTER: \"mdl:pointenter\",\n POINTLEAVE: \"mdl:pointleave\",\n MOVEEND: \"mdl:moveend\",\n ADD: \"mdl:add\",\n UNDO: \"mdl:undo\",\n REMOVEALL: \"mdl:removeall\",\n SAVE: \"mdl:save\",\n BREAK: \"mdl:break\",\n MODECHANGED: \"mdl:modechanged\",\n} as const;\n\nexport const MOBILE_WIDTH = 768;\n\nexport const DEFAULT_OPTIONS: RequiredDrawOptions = {\n panel: {\n size: \"medium\",\n buttons: {\n undo: { visible: true },\n delete: { visible: true },\n save: { visible: true, clearOnSave: true },\n },\n },\n modes: {\n initial: null,\n line: {\n visible: true,\n closeGeometry: true,\n },\n polygon: {\n visible: true,\n },\n breakGeometry: {\n visible: true,\n },\n },\n layersPaint: {\n onLinePoint: ON_LINE_POINT_PAINT_BASE,\n firstPoint: FIRST_POINT_PAINT_BASE,\n points: POINTS_PAINT_BASE,\n line: LINE_PAINT_BASE,\n polygon: POLYGON_PAINT_BASE,\n breakLine: BREAK_PAINT_BASE,\n },\n initial: null,\n dynamicLine: true,\n locale: {\n save: \"Save\",\n delete: \"Delete all\",\n undo: \"Undo\",\n line: \"Line\",\n polygon: \"Polygon\",\n break: \"Split\",\n closeLine: \"Close line\",\n createPolygon: \"Create polygon\",\n },\n};\n","import type { Map } from \"#types/map\";\nimport type { LatLng, StepId, Step, EventsProps } from \"#types/index\";\nimport { EVENTS } from \"#utils/constants\";\nimport { DrawingMode } from \"./mode\";\nimport { Mode } from \"./mode/types\";\n\nexport class FireEvents {\n static addPoint(step: Step & { total: number }, map: Map, mode: DrawingMode) {\n map.fire(EVENTS.ADD, {\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n mode: {\n geometry: mode.getMode(),\n closedGeometry: mode.getClosedGeometry(),\n },\n });\n }\n static movePoint(step: { end: LatLng; id: StepId; start: LatLng; total: number }, map: Map) {\n map.fire(EVENTS.MOVEEND, {\n id: step.id,\n start_coordinates: {\n lat: step.start.lat,\n lng: step.start.lng,\n },\n end_coordinates: {\n lat: step.end.lat,\n lng: step.end.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static pointDoubleClick(step: Step & { total: number }, map: Map) {\n map.fire(EVENTS.DOUBLECLICK, {\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static enterPoint(step: Step & { total: number }, map: Map) {\n map.fire(EVENTS.POINTENTER, {\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static leavePoint(step: Step & { total: number }, map: Map) {\n map.fire(EVENTS.POINTLEAVE, {\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static undoPoint(step: Step & { total: number }, map: Map, originalEvent?: Event) {\n map.fire(EVENTS.UNDO, {\n originalEvent,\n id: step.id,\n coordinates: {\n lat: step.lat,\n lng: step.lng,\n },\n total: step.total,\n timestamp: Date.now(),\n });\n }\n static modeChanged(map: Map, mode: Mode | \"break\") {\n map.fire(EVENTS.MODECHANGED, {\n mode,\n });\n }\n static removeAllPoints(map: Map, originalEvent: Event) {\n map.fire(EVENTS.REMOVEALL, { originalEvent });\n }\n static onSaveClick(context: Pick<EventsProps, \"map\" | \"mode\">, steps: Step[], originalEvent: Event) {\n const { map, mode } = context;\n\n map.fire(EVENTS.SAVE, {\n originalEvent,\n timestamp: Date.now(),\n steps,\n mode: {\n geometry: mode.getMode(),\n closedGeometry: mode.getClosedGeometry(),\n },\n });\n }\n static onLineBreak(map: Map) {\n map.fire(EVENTS.BREAK);\n }\n}\n","import { FireEvents } from \"#components/map/helpers\";\nimport { DrawingModeChangeEvent, Mode } from \"#components/map/mode/types\";\nimport { EventsProps } from \"#types/index\";\n\nexport class ControlObserver {\n #props: EventsProps;\n constructor(props: EventsProps) {\n this.#props = props;\n this.#initConsumers();\n }\n\n #initConsumers = () => {\n this.#props.mode.addObserver(this.#mapModeConsumer);\n };\n\n removeConsumers = () => {\n this.#props.mode.removeObserver(this.#mapModeConsumer);\n };\n\n #resetAllState = () => {\n const { _line, _polygon, _break } = this.#props.control;\n\n _line?.classList.remove(\"control-button-active\");\n _polygon?.classList.remove(\"control-button-active\");\n _break?.classList.remove(\"control-button-active\");\n };\n\n #checkActive = (button: HTMLElement) => {\n this.#resetAllState();\n button.classList.add(\"control-button-active\");\n };\n\n #observeModeChange = (event: DrawingModeChangeEvent) => {\n const { data } = event;\n const { _line, _polygon, _break } = this.#props.control;\n const { mode } = this.#props;\n FireEvents.modeChanged(this.#props.map, data as Mode);\n\n if (!_line || !_polygon || !_break) return;\n\n switch (data) {\n case \"line\":\n this.#checkActive(_line);\n break;\n case \"polygon\":\n this.#checkActive(_polygon);\n break;\n default:\n break;\n }\n\n if (!data) {\n this.#disableButton(_break);\n } else {\n if (mode.getClosedGeometry()) {\n this.#enableButton(_break);\n }\n }\n };\n\n #disableButton = (button: HTMLButtonElement) => {\n button.setAttribute(\"disabled\", \"true\");\n button.setAttribute(\"aria-disabled\", \"true\");\n };\n\n #enableButton = (button: HTMLButtonElement) => {\n button.removeAttribute(\"disabled\");\n button.removeAttribute(\"aria-disabled\");\n };\n\n #observeGeometryChange = (event: DrawingModeChangeEvent) => {\n const { data } = event;\n const { _break, _line, _polygon } = this.#props.control;\n const { mode } = this.#props;\n\n if (data) {\n if (_break) {\n this.#enableButton(_break);\n }\n if (mode.getMode() === \"polygon\") {\n if (_line) {\n this.#disableButton(_line);\n }\n }\n if (mode.getMode() === \"line\") {\n if (_polygon) {\n this.#disableButton(_polygon);\n }\n }\n } else {\n if (_break) {\n this.#disableButton(_break);\n }\n if (mode.getMode() === \"polygon\") {\n if (_line) {\n this.#enableButton(_line);\n }\n }\n if (mode.getMode() === \"line\") {\n if (_polygon) {\n this.#enableButton(_polygon);\n }\n }\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { type, data } = event;\n\n if (type === \"MODE_CHANGED\") {\n this.#observeModeChange(event);\n }\n if (type === \"CLOSED_GEOMETRY_CHANGED\") {\n this.#observeGeometryChange(event);\n }\n if (type === \"BREAK_CHANGED\" && data) {\n const { _break } = this.#props.control;\n this.#checkActive(_break as HTMLElement);\n FireEvents.modeChanged(this.#props.map, \"break\");\n }\n };\n}\n","import type { EventsProps, ControlType } from \"#types/index\";\nimport { HTMLEvent } from \"#types/helpers\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { CURSORS } from \"#components/map/cursor/constants\";\n\nimport { addControlListeners, getButtonLabel, removeControlListeners } from \"./helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { ControlObserver } from \"./observer\";\n\nexport class ControlEvents {\n #props: EventsProps;\n #tooltip: Tooltip;\n #observer: ControlObserver;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#observer = new ControlObserver(props);\n this.#tooltip = new Tooltip();\n this.#initEvents();\n }\n\n #initEvents() {\n const { control } = this.#props;\n if (control) {\n const events = {\n mouseenter: this.onButtonEnter as EventListenerOrEventListenerObject,\n mouseleave: this.onButtonLeave,\n };\n\n if (control._line) {\n addControlListeners(control._line, {\n ...events,\n click: this.onLineClick,\n });\n }\n if (control._polygon) {\n addControlListeners(control._polygon, {\n ...events,\n click: this.onPolygonClick,\n });\n }\n if (control._break) {\n addControlListeners(control._break, {\n ...events,\n click: this.onBreakClick,\n });\n }\n }\n }\n\n #removeEvents() {\n const { control } = this.#props;\n if (control) {\n const events = {\n mouseenter: this.onButtonEnter as EventListenerOrEventListenerObject,\n mouseleave: this.onButtonLeave,\n };\n\n if (control._line) {\n removeControlListeners(control._line, {\n ...events,\n click: this.onLineClick,\n });\n }\n if (control._polygon) {\n removeControlListeners(control._polygon, {\n ...events,\n click: this.onPolygonClick,\n });\n }\n if (control._break) {\n removeControlListeners(control._break, {\n ...events,\n click: this.onBreakClick,\n });\n }\n }\n }\n\n remove() {\n this.#observer.removeConsumers();\n this.#removeEvents();\n this.#tooltip.remove();\n }\n\n onButtonEnter = (event: HTMLEvent<HTMLButtonElement>) => {\n const { options } = this.#props;\n\n const type = event.target.getAttribute(\"data-type\") as ControlType;\n if (type) {\n const label = getButtonLabel(type, options);\n const placement = \"left\";\n this.#tooltip\n .create({\n label,\n placement,\n })\n .setPosition(this.#tooltip.getPosition(event, placement));\n }\n };\n\n onButtonLeave = () => {\n this.#tooltip.remove();\n };\n\n #removeActiveClass = () => {\n const { control } = this.#props;\n\n control._line?.classList.remove(\"control-button-active\");\n control._polygon?.classList.remove(\"control-button-active\");\n control._break?.classList.remove(\"control-button-active\");\n };\n\n #initialize = () => {\n const { map, mode } = this.#props;\n if (!mode.getMode()) {\n map.fire(\"mode:initialize\");\n }\n };\n\n onLineClick = () => {\n const { map, mode, tiles, control } = this.#props;\n this.#initialize();\n this.#removeActiveClass();\n if (mode.getMode() === \"line\" && !mode.getBreak()) {\n mode.setMode(null);\n map.fire(\"mode:remove\");\n tiles.resetGeometries();\n } else {\n control._line?.classList.add(\"control-button-active\");\n mode.setMode(\"line\");\n tiles.render();\n }\n };\n\n onPolygonClick = () => {\n const { map, mode, tiles, control } = this.#props;\n this.#initialize();\n this.#removeActiveClass();\n if (mode.getMode() === \"polygon\" && !mode.getBreak()) {\n mode.setMode(null);\n map.fire(\"mode:remove\");\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n tiles.resetGeometries();\n } else {\n control._polygon?.classList.add(\"control-button-active\");\n mode.setMode(\"polygon\");\n tiles.render();\n }\n };\n\n onBreakClick = () => {\n const { map, mode, control } = this.#props;\n if (mode.getBreak()) {\n mode.setMode(null);\n map.fire(\"mode:remove\");\n }\n this.#removeActiveClass();\n control._break?.classList.add(\"control-button-active\");\n mode.setBreak(true);\n map.getCanvasContainer().style.cursor = CURSORS.POINTER;\n };\n}\n","type Func<T> = (event: T) => any;\n\nexport type ChangeEvent<T> = {\n [K in keyof T]: {\n type: K;\n data: T[K];\n };\n}[keyof T];\n\nexport class Observable<T> {\n observers: Set<Func<T>>;\n\n constructor() {\n this.observers = new Set<Func<T>>();\n }\n\n addObserver(observer: Func<T>) {\n this.observers.add(observer);\n }\n\n removeObserver(observer: Func<T>) {\n this.observers.delete(observer);\n }\n\n unsubscribe() {\n this.observers.clear();\n }\n\n notify(args: T) {\n this.observers.forEach((observer) => observer(args));\n }\n}\n","export const ERRORS = {\n EMPTY_INITIAL_STATE:\n \"You passed an empty initial array in the options. Please either remove the 'initial' property or include at least one element in the array.\",\n MISSING_IDS:\n \"You set 'generateId' to false but did not provide IDs for all steps. Please ensure all steps have IDs or set 'generateId' to true.\",\n NOT_ENOUGH_POINTS_TO_CLOSE:\n \"At least three points are required to close a polygon or a line. Please add more points or set 'closeGeometry' to false.\",\n FIRST_LAST_POINT_NOT_EQUAL:\n \"The first and last points of a polygon or a closed linestring must be the same. Please ensure the first and last points are equal or set 'closeGeometry' to false.\",\n};\n","import type { Initial, LatLng, RequiredDrawOptions, Step, StepId } from \"#types/index\";\nimport { uuidv4 } from \"#utils/helpers\";\nimport { Observable } from \"#utils/observable\";\n\nimport { ERRORS } from \"./errors\";\nimport { StoreChangeEvent } from \"./types\";\n\nexport class ListNode {\n val: Step | null;\n next: ListNode | null;\n constructor(val: Step | null = null, next: ListNode | null = null) {\n this.val = val;\n this.next = next;\n }\n}\n\nexport class Store extends Observable<StoreChangeEvent> {\n head: ListNode | null;\n tail: ListNode | null;\n size: number;\n\n constructor(options?: RequiredDrawOptions) {\n super();\n let list = StoreHelpers.initStore(options);\n\n this.head = list ? list.head : null;\n this.tail = list ? list.tail : null;\n this.size = list ? list.size : 0;\n }\n\n push(step: Step) {\n const newNode = new ListNode(step);\n if (!this.head) {\n this.head = this.tail = newNode;\n } else if (this.tail) {\n this.tail.next = newNode;\n this.tail = newNode;\n }\n this.size++;\n this.pingConsumers();\n }\n\n insert(step: Step, current: ListNode) {\n const newNode = new ListNode(step, current.next);\n const betweenHeadAndTail = this.tail === current && this.head === current.next;\n // If the point is inserted between head and tail, update the tail\n if (betweenHeadAndTail) {\n this.tail = newNode;\n }\n current.next = newNode;\n this.size++;\n }\n\n findStepById(id: StepId): ListNode[\"val\"] | null {\n let current = this.head;\n const visitedNodes = new Set();\n while (current !== null) {\n if (visitedNodes.has(current)) {\n break;\n }\n if (current.val && current.val.id === id) {\n return current.val;\n }\n visitedNodes.add(current);\n current = current.next;\n }\n return null;\n }\n\n removeStepById(id: string): ListNode | null {\n if (!this.head) return null;\n let current = this.head;\n let prev: ListNode | null = null;\n while (current !== null) {\n if (current?.val?.id === id) {\n if (current === this.head) {\n this.head = current.next;\n if (this.tail) {\n this.tail.next = current.next;\n }\n } else {\n (prev as ListNode).next = current.next;\n }\n if (current === this.tail) {\n this.tail = prev;\n }\n this.size--;\n this.pingConsumers();\n\n return current;\n }\n\n prev = current;\n if (current.next) {\n current = current.next;\n }\n }\n\n return null;\n }\n\n reset() {\n this.head = null;\n this.tail = null;\n this.size = 0;\n this.pingConsumers();\n }\n\n pingConsumers = () => {\n this.notify({\n type: \"STORE_CHANGED\",\n data: {\n head: this.head,\n tail: this.tail,\n size: this.size,\n },\n });\n };\n}\n\nexport class StoreHelpers {\n static isLastPoint = (store: Store, id: StepId): boolean => {\n return store.tail?.val?.id === id;\n };\n\n static initStore(options?: RequiredDrawOptions): Store | null {\n if (!options?.initial) return null;\n\n const emptyInitialOptions = options && options.initial && !options.initial.steps.length;\n if (emptyInitialOptions) {\n throw new Error(ERRORS[\"EMPTY_INITIAL_STATE\"]);\n }\n\n const initialOptionsProvided = options && options.initial.steps;\n if (initialOptionsProvided) {\n const { steps, closeGeometry, generateId } = options.initial;\n return StoreHelpers.fromArray(steps, closeGeometry, generateId);\n }\n\n return null;\n }\n\n static #generateIdForSteps = (stepsWithoutIds: LatLng[]): Step[] => {\n return stepsWithoutIds.map((step) => {\n return { ...step, id: uuidv4() };\n });\n };\n\n static buildStepSequence(steps: Step[]): Store {\n const list = new Store();\n steps.forEach((step) => {\n list.push(step);\n });\n return list;\n }\n\n static fromArray(\n initialSteps: Initial[\"steps\"],\n closeGeometry: Initial[\"closeGeometry\"],\n generateId: Initial[\"generateId\"],\n ): Store | null {\n let steps = generateId ? this.#generateIdForSteps(initialSteps) : initialSteps;\n\n const list = this.buildStepSequence(steps as Step[]);\n\n if (closeGeometry && list.tail) {\n list.tail.next = list.head;\n }\n return list;\n }\n\n static toArray(head: ListNode | null): Step[] {\n if (!head) return [];\n\n const visitedNodes = new Set<ListNode>();\n const result: Step[] = [];\n\n let current: ListNode | null = head;\n while (current !== null) {\n if (visitedNodes.has(current)) break;\n\n visitedNodes.add(current);\n result.push(current.val as Step);\n current = current.next;\n }\n\n return result;\n }\n}\n","import { StoreHelpers } from \"#store/index\";\nimport type { ButtonType, EventsProps, Step } from \"#types/index\";\nimport { HTMLEvent } from \"#types/helpers\";\nimport { DOM } from \"#utils/dom\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { FireEvents } from \"#components/map/helpers\";\nimport { Spatial } from \"#utils/helpers\";\nimport { TilesHelpers } from \"#components/map/tiles/helpers\";\n\nexport class PanelEvents {\n #props: EventsProps;\n #tooltip: Tooltip;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#tooltip = new Tooltip();\n }\n\n initEvents() {\n const { panel } = this.#props;\n if (panel) {\n DOM.manageEventListener(\"add\", panel?._undoButton, \"click\", this.#onUndoClick);\n DOM.manageEventListener(\n \"add\",\n panel?._undoButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"add\", panel?._undoButton, \"mouseleave\", this.onMouseLeave);\n }\n if (panel) {\n DOM.manageEventListener(\"add\", panel?._deleteButton, \"click\", this.#onRemoveAll);\n DOM.manageEventListener(\n \"add\",\n panel?._deleteButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"add\", panel?._deleteButton, \"mouseleave\", this.onMouseLeave);\n }\n\n if (panel) {\n DOM.manageEventListener(\"add\", panel?._saveButton, \"click\", this.onSaveClick);\n DOM.manageEventListener(\n \"add\",\n panel?._saveButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"add\", panel?._saveButton, \"mouseleave\", this.onMouseLeave);\n }\n }\n\n removeEvents() {\n const { panel } = this.#props;\n\n if (panel && panel._undoButton) {\n DOM.manageEventListener(\"remove\", panel._undoButton, \"click\", this.#onUndoClick);\n DOM.manageEventListener(\n \"remove\",\n panel._undoButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"remove\", panel._undoButton, \"mouseleave\", this.onMouseLeave);\n }\n if (panel && panel._deleteButton) {\n DOM.manageEventListener(\"remove\", panel._deleteButton, \"click\", this.#onRemoveAll);\n DOM.manageEventListener(\n \"remove\",\n panel._deleteButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"remove\", panel._deleteButton, \"mouseleave\", this.onMouseLeave);\n }\n if (panel && panel._saveButton) {\n DOM.manageEventListener(\"remove\", panel._saveButton, \"click\", this.onSaveClick);\n DOM.manageEventListener(\n \"remove\",\n panel._saveButton,\n \"mouseenter\",\n this.onMouseEnter as EventListenerOrEventListenerObject,\n );\n DOM.manageEventListener(\"remove\", panel._saveButton, \"mouseleave\", this.onMouseLeave);\n }\n }\n\n #getButtonLabel = (type: ButtonType) => {\n const { options } = this.#props;\n\n const LABELS = {\n undo: options.locale.undo,\n delete: options.locale.delete,\n save: options.locale.save,\n };\n\n return LABELS[type];\n };\n\n onMouseEnter = (event: HTMLEvent<HTMLButtonElement>) => {\n const type = event.target.getAttribute(\"data-type\") as ButtonType;\n if (type) {\n const label = this.#getButtonLabel(type);\n\n this.#tooltip\n .create({\n label: label,\n placement: \"bottom\",\n })\n .setPosition(this.#tooltip.getPosition(event, \"bottom\"));\n }\n };\n\n onMouseLeave = () => {\n this.#tooltip.remove();\n };\n\n #onRemoveAll = (event: Event) => {\n const { tiles, mode, panel, store, map } = this.#props;\n store.reset();\n panel.hidePanel();\n mode.reset();\n TilesHelpers.togglePointCircleRadius(map, \"default\");\n this.#tooltip.remove();\n tiles.resetGeometries();\n FireEvents.removeAllPoints(map, event);\n };\n\n #onUndoClick = (event: Event) => {\n const { store, panel, map, tiles } = this.#props;\n\n const tailVal = store.tail?.val as Step;\n store.removeStepById(tailVal.id);\n console.log(\"removeStepById\", tailVal);\n\n const step = { ...tailVal, total: store.size };\n FireEvents.undoPoint(step, map, event);\n\n // if we have only 2 points left, we need to switch to line mode and update the tail.next to null\n Spatial.switchToLineModeIfCan(this.#props);\n\n // after removing the last point, we need to set the panel coordinates to the new last point\n panel?.onPointRemove(store.tail?.val as Step);\n this.#tooltip.remove();\n requestAnimationFrame(tiles.render);\n };\n\n onSaveClick = (event: Event) => {\n const { store, options } = this.#props;\n\n FireEvents.onSaveClick(this.#props, StoreHelpers.toArray(store.head), event);\n this.#tooltip.remove();\n if (options.panel.buttons.save.clearOnSave) {\n this.#onRemoveAll(event);\n }\n };\n}\n","import type { MapLayerMouseEvent, GeoJSONSource } from \"maplibre-gl\";\nimport type { EventsProps, Step } from \"#types/index\";\n\nimport { ESOURCES, ELAYERS } from \"#utils/geo_constants\";\nimport { Spatial, uuidv4 } from \"#utils/helpers\";\nimport { TilesHelpers } from \"#components/map/tiles/helpers\";\n\nimport { FireEvents } from \"../helpers\";\n\nexport class PointHelpers {\n static updatePointsData(event: MapLayerMouseEvent) {\n const map = event.target;\n const pointSource = map.getSource(ESOURCES.SinglePointSource) as GeoJSONSource;\n if (pointSource) {\n pointSource.setData({\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: [event.lngLat.lng, event.lngLat.lat],\n },\n properties: {},\n });\n }\n }\n\n static setSinglePointVisible(event: MapLayerMouseEvent) {\n const map = event.target;\n map.setLayoutProperty(ELAYERS.SinglePointLayer, \"visibility\", \"visible\");\n }\n\n static setSinglePointHidden(event: MapLayerMouseEvent) {\n const map = event.target;\n setTimeout(() => {\n map.setLayoutProperty(ELAYERS.SinglePointLayer, \"visibility\", \"none\");\n }, 33);\n }\n\n static triggerPostPointAddition(event: MapLayerMouseEvent, props: EventsProps) {\n const { panel, store, map } = props;\n\n if (Spatial.canCloseGeometry(store)) {\n TilesHelpers.togglePointCircleRadius(map, \"large\");\n }\n panel?.setPanelLocation(event.lngLat);\n }\n\n static addPointToMap = (event: MapLayerMouseEvent, props: EventsProps) => {\n const { store, tiles, map, mode } = props;\n\n const step = { ...event.lngLat, id: uuidv4() };\n store.push(step);\n FireEvents.addPoint({ ...step, total: store.size }, map, mode);\n this.triggerPostPointAddition(event, props);\n requestAnimationFrame(tiles.render);\n };\n\n static updateSelectedStepLatLng = (event: MapLayerMouseEvent, selectedStep: Step) => {\n selectedStep.lat = event.lngLat.lat;\n selectedStep.lng = event.lngLat.lng;\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\nimport type { EventsProps, Step } from \"#types/index\";\nimport type { Map } from \"#types/map\";\n\nimport { Store } from \"#store/index\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { MapUtils, Spatial, uuidv4 } from \"#utils/helpers\";\nimport { PointHelpers } from \"../points/helpers\";\n\nexport const isOnLine = (event: MapLayerMouseEvent, store: Store) => {\n let current = store.head;\n const visited = new Set();\n\n while (current !== null) {\n if (visited.has(current)) break;\n if (current.next && current.next.val && current.val) {\n const map = event.target as Map;\n const aPixel = MapUtils.getPixelCoordinates(map, current.val);\n const bPixel = MapUtils.getPixelCoordinates(map, current.next.val);\n const eventPixel = MapUtils.getPixelCoordinates(map, event.lngLat);\n if (Spatial.checkIfPointIsOnLine(aPixel, bPixel, eventPixel)) {\n return current;\n }\n }\n visited.add(current);\n current = current.next;\n }\n return null;\n};\n\nexport const insertStepIfOnLine = (event: MapLayerMouseEvent, store: Store): Step | null => {\n const currentStep = isOnLine(event, store);\n\n if (currentStep) {\n const step = { ...event.lngLat, id: uuidv4() };\n store.insert(step, currentStep);\n return step;\n }\n return null;\n};\n\nexport const updateUIAfterInsert = (event: MapLayerMouseEvent, context: EventsProps) => {\n const { store, tiles, panel } = context;\n if (store.tail?.val) {\n panel?.setPanelLocation(store.tail.val);\n PointHelpers.setSinglePointHidden(event);\n tiles.render();\n }\n};\n\nexport const checkIfPointClicked = (event: MapLayerMouseEvent) => {\n return MapUtils.isFeatureTriggered(event, [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer]);\n};\n","import { GeoJSONSource, MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport { ListNode } from \"#store/index\";\nimport type { EventsProps, Uuid } from \"#types/index\";\nimport { ELAYERS, ESOURCES } from \"#utils/geo_constants\";\nimport { GeometryFactory, Spatial, throttle } from \"#utils/helpers\";\n\nimport { isOnLine } from \"./utils\";\nimport { FireEvents } from \"../helpers\";\n\nconst LINE_BREAK_THROTTLE_TIME = 15;\n\nexport class LineBreakEvents {\n props: EventsProps;\n #current: ListNode | null;\n #throttledOnLineEnter: (event: MapLayerMouseEvent) => void;\n\n constructor(props: EventsProps) {\n this.props = props;\n this.#current = null;\n this.#throttledOnLineEnter = throttle(this.#onLineEnterBreak, LINE_BREAK_THROTTLE_TIME);\n }\n\n initBreakEvents = () => {\n const { map } = this.props;\n\n map.on(\"click\", ELAYERS.LineLayerTransparent, this.#geometryBreakOnClick);\n map.on(\"mouseenter\", ELAYERS.LineLayerTransparent, this.#throttledOnLineEnter);\n map.on(\"mousemove\", ELAYERS.LineLayerTransparent, this.#throttledOnLineEnter);\n map.on(\"mouseleave\", ELAYERS.LineLayerTransparent, this.#onLineLeave);\n };\n\n removeBreakEvents = () => {\n const { map } = this.props;\n\n map.off(\"click\", ELAYERS.LineLayerTransparent, this.#geometryBreakOnClick);\n map.off(\"mouseenter\", ELAYERS.LineLayerTransparent, this.#throttledOnLineEnter);\n map.off(\"mousemove\", ELAYERS.LineLayerTransparent, this.#throttledOnLineEnter);\n map.off(\"mouseleave\", ELAYERS.LineLayerTransparent, this.#onLineLeave);\n };\n\n hideBreakLine = () => {\n const { map } = this.props;\n\n if (map.getLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\") !== \"none\") {\n map.setLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\", \"none\");\n }\n };\n\n showBreakLine = () => {\n const { map } = this.props;\n\n if (map.getLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\") !== \"visible\") {\n map.setLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\", \"visible\");\n }\n };\n\n // TODO\n #geometryBreakOnClick = () => {\n const { store, mode, panel, map, tiles } = this.props;\n\n const nextPointId = this.#current?.next?.val?.id as Uuid;\n Spatial.breakGeometry(store, nextPointId);\n if (store.tail?.val) {\n panel.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n this.#onLineLeave();\n\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"none\");\n mode.reset();\n tiles.render();\n FireEvents.onLineBreak(map);\n };\n\n // TODO\n #onLineEnterBreak = (event: MapLayerMouseEvent) => {\n const { map, store } = this.props;\n\n const line = isOnLine(event, store);\n if (line?.val?.id !== this.#current?.val?.id) {\n this.#current = line;\n }\n\n const lineSource = map.getSource(ESOURCES.LineSourceBreak) as GeoJSONSource;\n\n const current = [line?.val?.lng, line?.val?.lat] as [number, number];\n const next = [line?.next?.val?.lng, line?.next?.val?.lat] as [number, number];\n const lineBreakData = GeometryFactory.getLine(current, next);\n if (!lineBreakData) return;\n\n lineSource.setData(lineBreakData as any);\n this.showBreakLine();\n };\n\n #onLineLeave = () => {\n setTimeout(() => {\n this.hideBreakLine();\n }, LINE_BREAK_THROTTLE_TIME + 10);\n };\n}\n","import type { MapLayerMouseEvent, PointLike } from \"maplibre-gl\";\n\nimport type { EventsProps, LatLng } from \"#types/index\";\nimport { ELAYERS, ESOURCES, LINE_BASE } from \"#utils/geo_constants\";\nimport { StoreChangeEvent } from \"#store/types\";\nimport { GeometryFactory, MapUtils, Spatial, throttle } from \"#utils/helpers\";\nimport { EVENTS } from \"#utils/constants\";\n\nimport { DrawingModeChangeEvent } from \"../mode/types\";\nimport { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport { PointDoubleClickEvent, UndoEvent } from \"../types\";\n\nconst LINE_DYNAMIC_THROTTLE_TIME = 10;\n\nexport class DynamicLineEvents {\n #props: EventsProps;\n #visible: boolean;\n #firstPoint: LatLng | null;\n #secondPoint: LatLng | null;\n #lineFeature: any;\n #throttledOnLineMove: (event: MapLayerMouseEvent) => void;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#visible = props.options.dynamicLine;\n this.#firstPoint = null;\n this.#secondPoint = null;\n this.#initConsumers();\n this.#throttledOnLineMove = throttle(this.#onLineMove, LINE_DYNAMIC_THROTTLE_TIME);\n }\n\n #initConsumers() {\n this.#props.store.addObserver(this.#storeEventsConsumer);\n this.#props.mode.addObserver(this.#mapModeConsumer);\n this.#props.mouseEvents.addObserver(this.#mouseEventsConsumer);\n }\n\n removeLine = () => {\n this.hideDynamicLine();\n };\n\n removeConsumers = () => {\n this.#props.store.removeObserver(this.#storeEventsConsumer);\n this.#props.mode.removeObserver(this.#mapModeConsumer);\n this.#props.mouseEvents.removeObserver(this.#mouseEventsConsumer);\n };\n\n #mouseEventsConsumer = (event: MouseEventsChangeEvent) => {\n const { mode } = this.#props;\n if (mode.getClosedGeometry()) return;\n\n if (event.type === \"lastPointMouseClick\" && event.data) {\n this.hideDynamicLine();\n this.#visible = false;\n } else if (event.type === \"lastPointMouseClick\" && !event.data) {\n this.#visible = true;\n }\n if (!this.#visible) return;\n // hide the line if a point or a line is hovered\n if ((event.type === \"pointMouseEnter\" || event.type === \"lineMouseEnter\") && event.data) {\n this.hideDynamicLine();\n }\n if ((event.type === \"pointMouseLeave\" || event.type === \"lineMouseLeave\") && event.data) {\n const { store } = this.#props;\n this.#firstPoint = store.tail?.val as LatLng;\n this.#secondPoint = store.tail?.val as LatLng;\n this.showDynamicLine();\n }\n };\n\n #storeEventsConsumer = (event: StoreChangeEvent) => {\n const { store } = this.#props;\n switch (event.type) {\n case \"STORE_CHANGED\":\n if (event.data.tail?.val && !Spatial.isClosedGeometry(store)) {\n this.#firstPoint = event.data.tail?.val;\n this.showDynamicLine();\n }\n break;\n default:\n break;\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.#props;\n if (event.type === \"CLOSED_GEOMETRY_CHANGED\") {\n if (event.data) {\n this.hideDynamicLine();\n }\n\n if (!event.data && store?.tail?.val) {\n this.#firstPoint = store?.tail?.val;\n this.showDynamicLine();\n }\n }\n };\n\n initDynamicEvents = () => {\n const { map } = this.#props;\n\n map.on(\"click\", this.#onMapClick);\n map.on(\"mousemove\", this.#throttledOnLineMove);\n map.on(EVENTS.REMOVEALL, this.hideDynamicLine);\n map.on(EVENTS.UNDO, this.#onUndoClick);\n map.on(EVENTS.DOUBLECLICK, this.#onDoubleClick);\n };\n\n removeEvents = () => {\n const { map } = this.#props;\n\n map.off(\"click\", this.#onMapClick);\n map.off(\"mousemove\", this.#throttledOnLineMove);\n map.off(EVENTS.REMOVEALL, this.hideDynamicLine);\n map.off(EVENTS.UNDO, this.#onUndoClick);\n map.off(EVENTS.DOUBLECLICK, this.#onDoubleClick);\n };\n\n hideDynamicLine = () => {\n const { map, tiles } = this.#props;\n\n this.#firstPoint = null;\n this.#secondPoint = null;\n this.#lineFeature = null;\n map.off(\"mousemove\", this.#throttledOnLineMove);\n tiles.renderLines(LINE_BASE, ESOURCES.LineDynamicSource);\n map.setLayoutProperty(ELAYERS.LineDynamicLayer, \"visibility\", \"none\");\n };\n\n showDynamicLine = () => {\n const { map } = this.#props;\n\n const current = [this.#firstPoint?.lng, this.#firstPoint?.lat] as [number, number];\n const next = [this.#secondPoint?.lng, this.#secondPoint?.lat] as [number, number];\n\n this.#lineFeature = GeometryFactory.getLine(current, next);\n\n map.setLayoutProperty(ELAYERS.LineDynamicLayer, \"visibility\", \"visible\");\n if (this.#secondPoint) {\n this.#renderLineOnMouseMove({ lng: this.#secondPoint?.lng, lat: this.#secondPoint?.lat });\n }\n map.on(\"mousemove\", this.#throttledOnLineMove);\n };\n\n #renderLineOnMouseMove = (newCoord: LatLng) => {\n if (!this.#lineFeature) return;\n\n const { tiles } = this.#props;\n this.#lineFeature.features[0].geometry.coordinates[1] = [newCoord.lng, newCoord.lat];\n\n tiles.renderLines(this.#lineFeature, ESOURCES.LineDynamicSource);\n };\n\n #onLineMove = (event: MapLayerMouseEvent) => {\n this.#renderLineOnMouseMove(event.lngLat);\n };\n\n #onMapClick = (event: MapLayerMouseEvent) => {\n const { mode } = this.#props;\n const lineClick = MapUtils.isFeatureTriggered(event, [ELAYERS.LineLayerTransparent, ELAYERS.LineLayer]);\n if (lineClick && mode.getBreak()) {\n this.#secondPoint = { lng: event.lngLat.lng, lat: event.lngLat.lat };\n }\n\n if (lineClick) return;\n\n this.hideDynamicLine();\n };\n\n #onUndoClick = (event: UndoEvent) => {\n const { store, mode } = this.#props;\n if (!mode.getClosedGeometry()) {\n const latLng = event.target.unproject({ x: event.originalEvent.x, y: event.originalEvent.y } as PointLike);\n this.#secondPoint = { lng: latLng.lng, lat: latLng.lat };\n this.#firstPoint = store.tail?.val as LatLng;\n this.showDynamicLine();\n }\n if (store.size === 0) {\n this.hideDynamicLine();\n }\n };\n\n #onDoubleClick = (event: PointDoubleClickEvent) => {\n const { store, mode } = this.#props;\n if (!mode.getClosedGeometry()) {\n this.#secondPoint = { lng: event.coordinates.lng, lat: event.coordinates.lat };\n this.#firstPoint = store.tail?.val as LatLng;\n this.showDynamicLine();\n }\n if (store.size === 0) {\n this.hideDynamicLine();\n }\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport type { EventsProps } from \"#types/index\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { MapUtils, throttle } from \"#utils/helpers\";\nimport { FireEvents } from \"../helpers\";\nimport { PointHelpers } from \"../points/helpers\";\nimport { checkIfPointClicked, insertStepIfOnLine, updateUIAfterInsert } from \"./utils\";\n\nexport const LINE_TRANSPARENT_THROTTLE_TIME = 22;\n\nexport class TransparentLineEvents {\n props: EventsProps;\n #isThrottled: boolean;\n #lastEvent: MapLayerMouseEvent | null;\n\n constructor(props: EventsProps) {\n this.props = props;\n this.#isThrottled = false;\n this.#lastEvent = null;\n }\n\n initEvents() {\n const { map } = this.props;\n\n map.on(\"click\", ELAYERS.LineLayerTransparent, this.#onLineAdd);\n map.on(\"mousemove\", ELAYERS.LineLayerTransparent, this.#onLineMove);\n map.on(\"mouseenter\", ELAYERS.LineLayerTransparent, this.#onLineEnter);\n map.on(\"mouseleave\", ELAYERS.LineLayerTransparent, this.#onLineLeave);\n }\n\n removeEvents() {\n const { map } = this.props;\n map.off(\"click\", ELAYERS.LineLayerTransparent, this.#onLineAdd);\n map.off(\"mousemove\", ELAYERS.LineLayerTransparent, this.#onLineMove);\n map.off(\"mouseenter\", ELAYERS.LineLayerTransparent, this.#onLineEnter);\n map.off(\"mouseleave\", ELAYERS.LineLayerTransparent, this.#onLineLeave);\n }\n\n #onLineAdd = (event: MapLayerMouseEvent) => {\n const { store, map, mode } = this.props;\n if (checkIfPointClicked(event)) return;\n const step = insertStepIfOnLine(event, store);\n if (step) {\n FireEvents.addPoint({ ...step, total: store.size }, map, mode);\n updateUIAfterInsert(event, this.props);\n }\n };\n\n #processMouseMove = (event: MapLayerMouseEvent) => {\n PointHelpers.setSinglePointVisible(event);\n if (event.target.getLayer(ELAYERS.SinglePointLayer)) {\n PointHelpers.updatePointsData(event);\n }\n };\n\n // TODO\n #onLineMove = throttle((event: MapLayerMouseEvent) => {\n if (MapUtils.isFeatureTriggered(event, [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer])) return;\n\n const { mouseEvents } = this.props;\n if (mouseEvents.pointMouseDown || mouseEvents.pointMouseEnter) return;\n\n this.#lastEvent = event;\n\n if (this.#isThrottled) return;\n\n this.#isThrottled = true;\n requestAnimationFrame(() => {\n if (!this.#lastEvent) return;\n this.#processMouseMove(this.#lastEvent);\n this.#isThrottled = false;\n });\n }, LINE_TRANSPARENT_THROTTLE_TIME);\n\n #onLineEnter = (event: MapLayerMouseEvent) => {\n const { mouseEvents } = this.props;\n if (mouseEvents.pointMouseDown || mouseEvents.pointMouseEnter) return;\n if (MapUtils.isFeatureTriggered(event, [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer])) return;\n\n mouseEvents.lineMouseEnter = true;\n PointHelpers.setSinglePointVisible(event);\n };\n\n #onLineLeave = (event: MapLayerMouseEvent) => {\n const { mouseEvents } = this.props;\n if (mouseEvents.pointMouseDown || mouseEvents.pointMouseEnter) return;\n\n mouseEvents.lineMouseLeave = true;\n PointHelpers.setSinglePointHidden(event);\n };\n}\n","import type { EventsProps } from \"#types/index\";\nimport { DrawingModeChangeEvent } from \"../mode/types\";\nimport { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport { LineBreakEvents } from \"./break-line\";\nimport { DynamicLineEvents } from \"./dynamic-line\";\nimport { TransparentLineEvents } from \"./transparent-line\";\n\nexport class LineEvents {\n props: EventsProps;\n #break: LineBreakEvents;\n #transparent: TransparentLineEvents;\n #dynamic: DynamicLineEvents | null;\n #type: \"default\" | \"break\";\n\n constructor(props: EventsProps) {\n this.props = props;\n this.#break = new LineBreakEvents(props);\n this.#transparent = new TransparentLineEvents(props);\n this.#dynamic = null;\n this.#type = \"default\";\n }\n\n init() {\n this.#initDynamicLine();\n this.#initEvents();\n this.#initConsumers();\n }\n\n #initDynamicLine = () => {\n if (window.innerWidth <= 768) return;\n if (this.props.options.dynamicLine) {\n this.#dynamic = new DynamicLineEvents(this.props);\n }\n };\n\n #initEvents() {\n const notBreakMode = !this.props.mode.getBreak();\n if (notBreakMode) {\n this.#transparent.initEvents();\n if (this.props.options.dynamicLine) {\n this.#dynamic?.initDynamicEvents();\n }\n }\n }\n\n #initConsumers() {\n this.props.mode.addObserver(this.#mapModeConsumer);\n this.props.mouseEvents.addObserver(this.#mouseEventsConsumer);\n }\n\n remove() {\n this.#removeConsumers();\n this.#removeEvents();\n }\n\n #removeConsumers() {\n this.props.mode.removeObserver(this.#mapModeConsumer);\n this.props.mouseEvents.removeObserver(this.#mouseEventsConsumer);\n if (this.props.options.dynamicLine) {\n this.#dynamic?.removeConsumers();\n }\n }\n\n #removeEvents() {\n this.#break.removeBreakEvents();\n this.#transparent.removeEvents();\n if (this.props.options.dynamicLine) {\n this.#dynamic?.removeEvents();\n this.#dynamic?.removeLine();\n }\n }\n\n #mouseEventsConsumer = (event: MouseEventsChangeEvent) => {\n const { type, data } = event;\n const { mode } = this.props;\n if (!data || !mode.getBreak()) return;\n\n switch (type) {\n case \"pointMouseDown\":\n this.#break.removeBreakEvents();\n this.#break.hideBreakLine();\n break;\n case \"pointMouseUp\":\n this.#break.initBreakEvents();\n break;\n default:\n break;\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { type, data } = event;\n\n if (type === \"MODE_CHANGED\") {\n if (this.#type === \"break\") {\n this.#break.removeBreakEvents();\n this.#transparent.initEvents();\n this.#type = \"default\";\n }\n }\n\n if (type === \"BREAK_CHANGED\" && data) {\n if (this.#type === \"default\") {\n this.#transparent.removeEvents();\n this.#break.initBreakEvents();\n this.#type = \"break\";\n }\n }\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\nimport type { EventsProps } from \"#types/index\";\n\nimport { uuidv4, Spatial } from \"#utils/helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { TilesHelpers } from \"#components/map/tiles/helpers\";\n\nimport { FireEvents } from \"../helpers\";\nimport { DrawingModeChangeEvent } from \"../mode/types\";\n\nexport class FirstPoint {\n #mouseDown: boolean;\n #props: EventsProps;\n #tooltip: Tooltip;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#mouseDown = false;\n this.#tooltip = new Tooltip();\n props.mode.addObserver(this.#mapModeConsumer);\n }\n\n initEvents() {\n const { map } = this.#props;\n\n map.on(\"click\", ELAYERS.FirstPointLayer, this.#onFirstPointClick);\n map.on(\"mouseenter\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseLeave);\n map.on(\"mouseup\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseUp);\n map.on(\"mousedown\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseDown);\n }\n\n removeEvents() {\n const { map } = this.#props;\n\n map.off(\"click\", ELAYERS.FirstPointLayer, this.#onFirstPointClick);\n map.off(\"mouseenter\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseLeave);\n map.off(\"mouseup\", ELAYERS.FirstPointLayer, this.#onFirstPointMouseUp);\n }\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { map, store } = this.#props;\n const { type, data } = event;\n\n if (type === \"MODE_CHANGED\") {\n if (data === \"line\" || data === \"polygon\") {\n map.on(\"click\", ELAYERS.FirstPointLayer, this.#onFirstPointClick);\n } else {\n map.off(\"click\", ELAYERS.FirstPointLayer, this.#onFirstPointClick);\n }\n if (Spatial.canCloseGeometry(store)) {\n TilesHelpers.togglePointCircleRadius(map, \"large\");\n }\n }\n };\n\n #onFirstPointClick = () => {\n const { store, map, mode, tiles } = this.#props;\n\n if (mode.getMode() === \"polygon\") {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n }\n\n if (Spatial.canCloseGeometry(store)) {\n Spatial.closeGeometry(store, mode);\n const step = Object.assign({}, store.head?.val, {\n id: uuidv4(),\n total: store.size,\n });\n FireEvents.addPoint(step, map, mode);\n TilesHelpers.togglePointCircleRadius(map, \"default\");\n tiles.render();\n }\n };\n\n #onFirstPointMouseDown = () => {\n this.#mouseDown = true;\n this.#tooltip.remove();\n };\n\n #onFirstPointMouseUp = () => {\n this.#mouseDown = false;\n };\n\n #onFirstPointMouseLeave = () => {\n const { mouseEvents } = this.#props;\n\n if (this.#mouseDown) return;\n\n mouseEvents.firstPointMouseLeave = true;\n this.#tooltip.remove();\n };\n\n #getTitle = () => {\n const { mode, options } = this.#props;\n\n if (mode.getMode() === \"line\" && options.modes.line.closeGeometry) {\n return options.locale.closeLine;\n }\n\n if (mode.getMode() === \"polygon\") {\n return options.locale.createPolygon;\n }\n\n return \"\";\n };\n\n #onFirstPointMouseEnter = (event: MapLayerMouseEvent) => {\n const { mode, mouseEvents, store } = this.#props;\n if (mode.getClosedGeometry() || this.#mouseDown) return;\n mouseEvents.firstPointMouseEnter = true;\n if (Spatial.canCloseGeometry(store)) {\n const { x, y } = event.originalEvent;\n if (x && y) {\n const Y_OFFSET = 14;\n\n this.#tooltip.create({ label: this.#getTitle(), placement: \"bottom\" });\n\n const X_OFFSET = this.#tooltip._label ? this.#tooltip._label.clientWidth / 2 : 0;\n this.#tooltip.setPosition({ x: x - X_OFFSET, y: y + Y_OFFSET });\n }\n }\n };\n}\n","import { TilesHelpers } from \"#components/map/tiles/helpers\";\nimport type { MapLayerMouseEvent, MapTouchEvent } from \"maplibre-gl\";\nimport type { EventsProps, LatLng, Step } from \"#types/index\";\n\nimport { MapUtils, Spatial, throttle } from \"#utils/helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { StoreHelpers } from \"#store/index\";\n\nimport { FireEvents } from \"../helpers\";\nimport { PointHelpers } from \"./helpers\";\nimport { FirstPoint } from \"./first-point\";\n\nexport class PointEvents {\n #props: EventsProps;\n #startCoordinates: LatLng | undefined;\n #enteredStep: Step | null;\n #selectedStep: Step | null;\n #selectedIdx: number | null;\n #firstPoint: FirstPoint;\n #isThrottled: boolean;\n #lastEvent: MapLayerMouseEvent | null;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#startCoordinates = undefined;\n this.#enteredStep = null;\n this.#selectedStep = null;\n this.#selectedIdx = null;\n this.#firstPoint = new FirstPoint(props);\n this.#isThrottled = false;\n this.#lastEvent = null;\n }\n\n #initFirstPointEvents = () => {\n const { map } = this.#props;\n\n map.on(\"click\", ELAYERS.FirstPointLayer, this.#onPointClick);\n map.on(\"mouseenter\", ELAYERS.FirstPointLayer, this.#onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.FirstPointLayer, this.#onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.FirstPointLayer, this.#onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.FirstPointLayer, this.#onPointMouseUp);\n map.on(\"touchend\", ELAYERS.FirstPointLayer, this.#onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.FirstPointLayer, this.#onPointMouseDown);\n\n this.#firstPoint.initEvents();\n };\n\n initEvents = () => {\n const { map } = this.#props;\n map.on(\"click\", this.#onMapClick);\n map.on(\"dblclick\", this.#onMapDblClick);\n\n map.on(\"click\", ELAYERS.PointsLayer, this.#onPointClick);\n map.on(\"mouseenter\", ELAYERS.PointsLayer, this.#onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.PointsLayer, this.#onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n map.on(\"touchend\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n\n this.#initFirstPointEvents();\n };\n\n #removeFirstPointEvents = () => {\n const { map } = this.#props;\n\n map.off(\"click\", ELAYERS.FirstPointLayer, this.#onPointClick);\n map.off(\"mouseenter\", ELAYERS.FirstPointLayer, this.#onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.FirstPointLayer, this.#onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.FirstPointLayer, this.#onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.FirstPointLayer, this.#onPointMouseUp);\n map.off(\"touchend\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n map.off(\"touchstart\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n this.#firstPoint.removeEvents();\n };\n\n removeEvents = () => {\n const { map } = this.#props;\n map.off(\"click\", this.#onMapClick);\n map.off(\"dblclick\", this.#onMapDblClick);\n map.off(\"mousemove\", this.#onMapMouseMove);\n\n map.off(\"click\", ELAYERS.PointsLayer, this.#onPointClick);\n map.off(\"mouseenter\", ELAYERS.PointsLayer, this.#onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.PointsLayer, this.#onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n\n this.#removeFirstPointEvents();\n };\n\n #onMapDblClick = (event: MapLayerMouseEvent) => {\n event.preventDefault();\n };\n\n #onPointClick = (event: MapLayerMouseEvent) => {\n const { store, tiles, panel, map, mouseEvents } = this.#props;\n\n // not using dblclick event because it's not working properly(fires if we add point and then move it fast)\n if (TilesHelpers.isDoubleClick() && this.#selectedStep) {\n store.removeStepById(this.#selectedStep.id);\n panel.onPointRemove(store.tail?.val as Step);\n FireEvents.pointDoubleClick({ ...this.#selectedStep, total: store.size }, this.#props.map);\n Spatial.switchToLineModeIfCan(this.#props);\n }\n\n const id = MapUtils.queryPointId(map, event.point);\n if (StoreHelpers.isLastPoint(store, id)) {\n mouseEvents.lastPointMouseClick = true;\n mouseEvents.lastPointMouseUp = false;\n }\n\n tiles.render();\n };\n\n #onOwnGeometryLayersClick = (event: MapLayerMouseEvent) => {\n return MapUtils.isFeatureTriggered(event, [\n ELAYERS.PointsLayer,\n ELAYERS.FirstPointLayer,\n ELAYERS.LineLayerTransparent,\n ELAYERS.LineLayerBreak,\n ]);\n };\n\n #onMapClick = (event: MapLayerMouseEvent) => {\n const { mode, mouseEvents, map } = this.#props;\n\n if (mode.getClosedGeometry()) return;\n if (this.#onOwnGeometryLayersClick(event)) return;\n if (mouseEvents.lastPointMouseClick) {\n mouseEvents.lastPointMouseClick = false;\n }\n map.getCanvasContainer().style.cursor = \"grab\";\n PointHelpers.addPointToMap(event, this.#props);\n PointHelpers.setSinglePointHidden(event);\n };\n\n #onMoveLeftClickUp = (event: MapLayerMouseEvent) => {\n const mouseLeftClickUp = event.originalEvent.buttons === 0;\n if (mouseLeftClickUp) {\n this.#onPointMouseUp();\n }\n };\n\n #processMouseMove = (event: MapLayerMouseEvent) => {\n const { tiles } = this.#props;\n tiles.renderOnMouseMove(this.#selectedIdx as number, event.lngLat);\n };\n\n #onMapMouseMove = throttle((event: MapLayerMouseEvent) => {\n this.#lastEvent = event;\n\n if (!this.#isThrottled) {\n this.#isThrottled = true;\n\n requestAnimationFrame(() => {\n if (!this.#selectedStep || !this.#lastEvent) return;\n PointHelpers.updateSelectedStepLatLng(this.#lastEvent, this.#selectedStep);\n this.#onMoveLeftClickUp(this.#lastEvent);\n this.#processMouseMove(this.#lastEvent);\n this.#isThrottled = false;\n });\n }\n }, 15);\n\n #onPointMouseEnter = (event: MapLayerMouseEvent) => {\n const { mouseEvents, map, store } = this.#props;\n if (mouseEvents) {\n mouseEvents.pointMouseEnter = true;\n if (mouseEvents.pointMouseDown) return;\n }\n PointHelpers.setSinglePointHidden(event);\n const id = MapUtils.queryPointId(map, event.point);\n if (StoreHelpers.isLastPoint(store, id)) {\n mouseEvents.lastPointMouseEnter = true;\n mouseEvents.lastPointMouseLeave = false;\n }\n const step = store.findStepById(id);\n if (step) {\n this.#enteredStep = step;\n FireEvents.enterPoint(Object.assign({}, step, { total: store.size }), map);\n }\n };\n\n #onPointMouseLeave = (event: MapLayerMouseEvent) => {\n const { mouseEvents, store, map } = this.#props;\n\n if (mouseEvents) {\n mouseEvents.pointMouseEnter = false;\n if (event.originalEvent.buttons === 0) {\n mouseEvents.pointMouseLeave = true;\n }\n if (mouseEvents.pointMouseDown) return;\n }\n const id = MapUtils.queryPointId(map, event.point);\n if (StoreHelpers.isLastPoint(store, id)) {\n mouseEvents.lastPointMouseEnter = false;\n mouseEvents.lastPointMouseLeave = true;\n }\n FireEvents.leavePoint(\n Object.assign({}, this.#enteredStep, {\n total: store.size,\n }),\n map,\n );\n };\n\n #hideLastPointPanel = () => {\n const { store, panel } = this.#props;\n if (!this.#selectedStep) return;\n\n if (StoreHelpers.isLastPoint(store, this.#selectedStep.id)) {\n panel.hidePanel();\n }\n };\n\n #setSelectedStep = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, map } = this.#props;\n\n const id = MapUtils.queryPointId(map, event.point);\n const step = store.findStepById(id);\n if (step) {\n this.#selectedStep = step;\n }\n };\n\n #onPointMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n event.preventDefault();\n\n const { mouseEvents, map, store } = this.#props;\n TilesHelpers.removeTransparentLine(map);\n this.#setSelectedStep(event);\n this.#hideLastPointPanel();\n const id = MapUtils.queryPointId(map, event.point);\n this.#selectedIdx = Spatial.getGeometryIndex(store, id);\n if (mouseEvents) {\n mouseEvents.pointMouseDown = true;\n }\n this.#startCoordinates = event.lngLat;\n map.on(\"mousemove\", this.#onMapMouseMove);\n map.on(\"touchmove\", this.#onMapMouseMove);\n };\n\n #onPointMouseUp = () => {\n const { mouseEvents, store, panel, map, options } = this.#props;\n mouseEvents.pointMouseUp = true;\n if (this.#selectedStep) {\n if (StoreHelpers.isLastPoint(store, this.#selectedStep.id) && store.tail?.val) {\n // mouseEvents.lastPointMouseClick = false;\n // mouseEvents.lastPointMouseUp = true;\n panel?.setPanelLocation(store.tail.val);\n }\n panel?.showPanel();\n\n FireEvents.movePoint(\n {\n id: this.#selectedStep.id,\n total: store.size,\n end: { lat: this.#selectedStep.lat, lng: this.#selectedStep.lng },\n start: this.#startCoordinates as LatLng,\n },\n map,\n );\n }\n if (mouseEvents) {\n mouseEvents.pointMouseDown = false;\n }\n TilesHelpers.addTransparentLine(map, options);\n // if the event.originalEvent.buttons === 0 in mousemove didn't work, let's try on mouse up\n // but this is a fail safe, it should work on event.originalEvent.buttons\n map.off(\"mousemove\", this.#onMapMouseMove);\n map.off(\"touchmove\", this.#onMapMouseMove);\n };\n}\n","import type { EventsProps } from \"#types/index\";\nimport { Tiles } from \"#components/map/tiles\";\nimport { ControlEvents } from \"#components/side-control/events\";\nimport { PanelEvents } from \"#components/last-point-panel/events\";\nimport { LineEvents } from \"./line\";\nimport { PointEvents } from \"./points\";\n\nexport class Events extends Tiles {\n #props: EventsProps;\n #panelEvents: PanelEvents;\n #controlEvents: ControlEvents;\n #pointEvents: PointEvents;\n #lineEvents: LineEvents;\n\n constructor(props: EventsProps) {\n super({ ...props });\n this.#props = props;\n this.#panelEvents = new PanelEvents(props);\n this.#controlEvents = new ControlEvents(props);\n this.#pointEvents = new PointEvents(props);\n this.#lineEvents = new LineEvents(props);\n props.map.on(\"mode:initialize\", this.#initEvents);\n props.map.on(\"mode:remove\", this.#removeDrawEvents);\n }\n\n #initEvents = () => {\n this.#lineEvents.init();\n this.#panelEvents?.initEvents();\n this.#pointEvents?.initEvents();\n };\n\n #removeDrawEvents = () => {\n this.#panelEvents?.removeEvents();\n this.#pointEvents?.removeEvents();\n this.#lineEvents?.remove();\n };\n\n removeMapEventsAndConsumers = () => {\n this.#panelEvents?.removeEvents();\n this.#pointEvents?.removeEvents();\n this.#controlEvents?.remove();\n this.#lineEvents?.remove();\n this.#props.map.off(\"mode:initialize\", this.#initEvents);\n };\n}\n","import type { RequiredDrawOptions } from \"#types/index\";\nimport { DOM } from \"#utils/dom\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport \"./control.css\";\n\ninterface ControlProps {\n options: RequiredDrawOptions;\n mode: DrawingMode;\n}\n\nexport class Control {\n #defaultOptions: RequiredDrawOptions;\n _line: HTMLButtonElement | undefined;\n _polygon: HTMLButtonElement | undefined;\n _break: HTMLButtonElement | undefined;\n _container: HTMLElement;\n constructor(props: ControlProps) {\n this.#defaultOptions = props.options;\n this._line = undefined;\n this._polygon = undefined;\n this._break = undefined;\n this._container = DOM.create(\"div\", \"mapboxgl-ctrl mapboxgl-ctrl-group maplibregl-ctrl maplibregl-ctrl-group\");\n this.createControl(props);\n }\n\n createControlButton = (\n type: \"line\" | \"polygon\" | \"break\",\n title: string,\n active: boolean,\n disabled?: boolean,\n ): HTMLButtonElement => {\n const size = this.#defaultOptions.panel.size;\n const button = DOM.create(\"button\", `control-button control-button-${size}`, this._container);\n button.setAttribute(\"aria-label\", title);\n button.setAttribute(\"data-type\", type);\n if (active) {\n button.classList.add(\"control-button-active\");\n }\n if (disabled) {\n button.setAttribute(\"disabled\", \"true\");\n button.setAttribute(\"aria-disabled\", \"true\");\n }\n DOM.create(\"span\", `icon ${type} icon-${size}`, button);\n return button;\n };\n\n #createLineButton = (context: ControlProps) => {\n const { mode, options } = context;\n const lineVisible = this.#defaultOptions.modes.line.visible;\n const lineTitle = options.locale.line;\n if (lineVisible) {\n this._line = this.createControlButton(\"line\", lineTitle, mode.getMode() === \"line\");\n }\n };\n\n #createPolygonButton = (context: ControlProps) => {\n const { mode, options } = context;\n\n const polygonVisible = this.#defaultOptions.modes.polygon.visible;\n const polygonTitle = options.locale.polygon;\n if (polygonVisible) {\n this._polygon = this.createControlButton(\"polygon\", polygonTitle, mode.getMode() === \"polygon\");\n }\n };\n\n #createBreakButton = (context: ControlProps) => {\n const { mode, options } = context;\n\n const breakVisible = this.#defaultOptions.modes.breakGeometry.visible;\n const breakTitle = options.locale.break;\n if (breakVisible) {\n const closedGeometry = this.#defaultOptions?.initial?.closeGeometry;\n const disabled = !closedGeometry;\n const isBreak = mode.getBreak();\n this._break = this.createControlButton(\"break\", breakTitle, isBreak, disabled);\n }\n };\n\n createControl = (context: ControlProps) => {\n this.#createLineButton(context);\n this.#createPolygonButton(context);\n this.#createBreakButton(context);\n };\n\n getContainer = () => {\n return this._container;\n };\n}\n","import type { RequiredDrawOptions } from \"#types/index\";\nimport { Observable } from \"#utils/observable\";\n\nimport type { DrawingModeChangeEvent, Mode } from \"./types\";\n\nfunction getInitialMode(options: RequiredDrawOptions): Mode {\n if (options.initial?.geometry) {\n return options.initial?.geometry;\n }\n\n if (options.modes.initial) {\n return options.modes.initial;\n }\n\n return null;\n}\n\nexport class DrawingMode extends Observable<DrawingModeChangeEvent> {\n #mode: Mode;\n #break: boolean;\n #closedGeometry: boolean;\n\n constructor(options: RequiredDrawOptions) {\n super();\n this.#mode = getInitialMode(options);\n this.#break = false;\n this.#closedGeometry = options.initial?.closeGeometry ?? false;\n }\n\n getMode = (): Mode => {\n return this.#mode;\n };\n\n setMode = (newMode: Mode) => {\n this.#mode = newMode;\n this.setBreak(false);\n this.notify({\n type: \"MODE_CHANGED\",\n data: newMode,\n });\n };\n\n getBreak = (): boolean => {\n return this.#break;\n };\n\n setBreak = (value: boolean) => {\n this.#break = value;\n this.notify({\n type: \"BREAK_CHANGED\",\n data: value,\n });\n };\n\n getClosedGeometry = (): boolean => {\n return this.#closedGeometry;\n };\n\n setClosedGeometry = (value: boolean) => {\n this.#closedGeometry = value;\n this.notify({\n type: \"CLOSED_GEOMETRY_CHANGED\",\n data: this.#closedGeometry,\n });\n };\n\n isPolygon = () => {\n return this.#mode === \"polygon\" && this.#closedGeometry;\n };\n\n reset = () => {\n this.setMode(this.getMode());\n this.setClosedGeometry(false);\n };\n\n pingConsumers = () => {\n this.notify({\n type: \"MODE_CHANGED\",\n data: this.getMode(),\n });\n this.notify({\n type: \"CLOSED_GEOMETRY_CHANGED\",\n data: this.getClosedGeometry(),\n });\n };\n}\n","import type { Map } from \"#types/map\";\n\nimport { Spatial } from \"#utils/helpers\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport { Store } from \"#store/index\";\n\nimport { MouseEvents } from \"../mouse-events\";\nimport { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport { CURSORS, TCursor } from \"./constants\";\n\ninterface CursorProps {\n map: Map;\n mode: DrawingMode;\n mouseEvents: MouseEvents;\n store: Store;\n}\n\nexport class Cursor {\n #props: CursorProps;\n #canvas: HTMLElement;\n\n // map: Map, mode: DrawingMode, mouseEvents: MouseEvents, store: Store\n constructor(props: CursorProps) {\n this.#props = props;\n this.#canvas = this.#props.map.getCanvasContainer();\n this.#canvas.style.cursor = props.mode.getMode() ? CURSORS.CROSSHAIR : CURSORS.AUTO;\n this.#initConsumers();\n }\n\n set = (cursor: TCursor) => {\n this.#canvas.style.cursor = cursor;\n };\n\n get = () => this.#canvas.style.cursor;\n\n handleMouseLeave = () => {\n const { mouseEvents, mode } = this.#props;\n if (mouseEvents.pointMouseDown) return;\n if (!mode.getMode()) {\n this.set(CURSORS.AUTO);\n return;\n }\n if (mode.getClosedGeometry()) {\n this.set(CURSORS.AUTO);\n } else {\n this.set(CURSORS.CROSSHAIR);\n }\n };\n\n handleFirstPointMouseEnter = () => {\n const { mode, store } = this.#props;\n\n if (mode.getClosedGeometry()) {\n this.set(CURSORS.MOVE);\n }\n if (Spatial.canCloseGeometry(store)) {\n this.set(CURSORS.POINTER);\n }\n };\n\n #initConsumers() {\n const { mouseEvents } = this.#props;\n\n mouseEvents.addObserver(this.#mouseEventsObserver);\n }\n\n removeConsumers() {\n const { mouseEvents } = this.#props;\n\n mouseEvents.removeObserver(this.#mouseEventsObserver);\n }\n\n #mouseEventsObserver = (event: MouseEventsChangeEvent) => {\n const { mode, mouseEvents } = this.#props;\n if (mode.getBreak()) return;\n\n const { type, data } = event;\n\n if (!data) return;\n\n switch (type) {\n case \"pointMouseDown\":\n this.set(CURSORS.GRABBING);\n break;\n case \"pointMouseUp\":\n this.set(CURSORS.GRAB);\n break;\n case \"pointMouseEnter\":\n if (mouseEvents.pointMouseDown) return;\n this.set(CURSORS.GRAB);\n break;\n case \"pointMouseLeave\":\n this.handleMouseLeave();\n break;\n case \"lineMouseEnter\":\n if (mouseEvents.pointMouseDown) return;\n this.set(CURSORS.POINTER);\n break;\n case \"lineMouseLeave\":\n this.handleMouseLeave();\n break;\n case \"firstPointMouseEnter\":\n this.handleFirstPointMouseEnter();\n break;\n case \"firstPointMouseLeave\":\n this.handleMouseLeave();\n break;\n case \"lastPointMouseEnter\":\n this.set(CURSORS.POINTER);\n break;\n case \"lastPointMouseLeave\":\n this.handleMouseLeave();\n break;\n default:\n break;\n }\n };\n}\n","import { Observable } from \"#utils/observable\";\nimport { MouseEventsChangeEvent } from \"./types\";\n\nexport class MouseEvents extends Observable<MouseEventsChangeEvent> {\n #firstPointMouseEnter: boolean;\n #firstPointMouseLeave: boolean;\n #lastPointMouseClick: boolean;\n #lastPointMouseUp: boolean;\n #lastPointMouseEnter: boolean;\n #lastPointMouseLeave: boolean;\n #pointMouseDown: boolean;\n #pointMouseUp: boolean;\n #pointMouseEnter: boolean;\n #pointMouseLeave: boolean;\n #lineMouseEnter: boolean;\n #lineMouseLeave: boolean;\n\n constructor() {\n super();\n this.#firstPointMouseEnter = false;\n this.#firstPointMouseLeave = false;\n this.#lastPointMouseClick = false;\n this.#lastPointMouseUp = false;\n this.#lastPointMouseEnter = false;\n this.#lastPointMouseLeave = false;\n this.#pointMouseDown = false;\n this.#pointMouseUp = false;\n this.#pointMouseEnter = false;\n this.#pointMouseLeave = false;\n this.#lineMouseEnter = false;\n this.#lineMouseLeave = false;\n }\n\n get firstPointMouseEnter() {\n return this.#firstPointMouseEnter;\n }\n set firstPointMouseEnter(value) {\n this.#firstPointMouseEnter = value;\n this.notify({\n type: \"firstPointMouseEnter\",\n data: value,\n });\n }\n\n get firstPointMouseLeave() {\n return this.#firstPointMouseLeave;\n }\n set firstPointMouseLeave(value) {\n this.#firstPointMouseLeave = value;\n this.notify({\n type: \"firstPointMouseLeave\",\n data: value,\n });\n }\n\n get lastPointMouseClick() {\n return this.#lastPointMouseClick;\n }\n set lastPointMouseClick(value) {\n this.#lastPointMouseClick = value;\n this.notify({\n type: \"lastPointMouseClick\",\n data: value,\n });\n }\n\n get lastPointMouseUp() {\n return this.#lastPointMouseUp;\n }\n set lastPointMouseUp(value) {\n this.#lastPointMouseUp = value;\n this.notify({\n type: \"lastPointMouseUp\",\n data: value,\n });\n }\n\n get lastPointMouseEnter() {\n return this.#lastPointMouseEnter;\n }\n set lastPointMouseEnter(value) {\n this.#lastPointMouseEnter = value;\n this.notify({\n type: \"lastPointMouseEnter\",\n data: value,\n });\n }\n\n get lastPointMouseLeave() {\n return this.#lastPointMouseLeave;\n }\n set lastPointMouseLeave(value) {\n this.#lastPointMouseLeave = value;\n this.notify({\n type: \"lastPointMouseLeave\",\n data: value,\n });\n }\n\n get pointMouseDown() {\n return this.#pointMouseDown;\n }\n set pointMouseDown(value) {\n this.#pointMouseDown = value;\n this.notify({\n type: \"pointMouseDown\",\n data: value,\n });\n }\n\n get pointMouseUp() {\n return this.#pointMouseUp;\n }\n set pointMouseUp(value) {\n this.#pointMouseUp = value;\n this.notify({\n type: \"pointMouseUp\",\n data: value,\n });\n }\n\n get pointMouseEnter() {\n return this.#pointMouseEnter;\n }\n set pointMouseEnter(value) {\n this.#pointMouseEnter = value;\n this.notify({\n type: \"pointMouseEnter\",\n data: value,\n });\n }\n\n get pointMouseLeave() {\n return this.#pointMouseLeave;\n }\n set pointMouseLeave(value) {\n this.#pointMouseLeave = value;\n this.notify({\n type: \"pointMouseLeave\",\n data: value,\n });\n }\n\n get lineMouseEnter() {\n return this.#lineMouseEnter;\n }\n set lineMouseEnter(value) {\n this.#lineMouseEnter = value;\n this.notify({\n type: \"lineMouseEnter\",\n data: value,\n });\n }\n\n get lineMouseLeave() {\n return this.#lineMouseLeave;\n }\n set lineMouseLeave(value) {\n this.#lineMouseLeave = value;\n this.notify({\n type: \"lineMouseLeave\",\n data: value,\n });\n }\n}\n","import { ERRORS } from \"#store/errors\";\nimport { Initial, DrawOptions, RequiredDrawOptions } from \"#types/index\";\nimport { DEFAULT_OPTIONS } from \"./constants\";\nimport {\n ON_LINE_POINT_PAINT_BASE,\n FIRST_POINT_PAINT_BASE,\n POINTS_PAINT_BASE,\n LINE_PAINT_BASE,\n POLYGON_PAINT_BASE,\n BREAK_PAINT_BASE,\n} from \"./geo_constants\";\n\nexport class Options {\n static allStepsHaveIds(steps: Initial[\"steps\"]): boolean {\n return steps.every((step) => \"id\" in step && step.id !== undefined);\n }\n\n static checkIfMissingIds(steps: Initial[\"steps\"], generateId: Initial[\"generateId\"]) {\n const idGenerationIsOff = !generateId;\n const idsNotProvided = !this.allStepsHaveIds(steps);\n if (idGenerationIsOff && idsNotProvided) {\n throw new Error(ERRORS[\"MISSING_IDS\"]);\n }\n }\n\n static checkIfEnoughPointsToClose(steps: Initial[\"steps\"], closeGeometry: Initial[\"closeGeometry\"]) {\n const minLengthToCloseGeometry = 3;\n if (closeGeometry && steps.length < minLengthToCloseGeometry) {\n throw new Error(ERRORS[\"NOT_ENOUGH_POINTS_TO_CLOSE\"]);\n }\n }\n\n static checkIfPolygonIsClosed(options: Initial) {\n const { closeGeometry, steps } = options;\n if (steps) {\n const firstLng = steps[0]?.lng;\n const lastLng = steps[steps.length - 1]?.lng;\n const firstLat = steps[0]?.lat;\n const lastLat = steps[steps.length - 1]?.lat;\n const firstAndLastNotEqual = firstLng !== lastLng || firstLat !== lastLat;\n if (firstAndLastNotEqual && closeGeometry) {\n throw new Error(ERRORS[\"FIRST_LAST_POINT_NOT_EQUAL\"]);\n }\n }\n }\n\n static checkInitialStepsOption(options: Initial): void {\n const { closeGeometry, generateId, steps } = options;\n // if we have ids for all steps if id generation is off\n this.checkIfMissingIds(steps, generateId);\n // If we want to close the geometry, we need at least 3 points\n this.checkIfEnoughPointsToClose(steps, closeGeometry);\n // If the geometry is a polygon, closeGeometry must be true.\n this.checkIfPolygonIsClosed(options);\n }\n\n static init(options?: DrawOptions): RequiredDrawOptions {\n if (!options) {\n return DEFAULT_OPTIONS;\n }\n\n return {\n panel: generatePanelOptions(options),\n modes: generateModeOptions(options),\n layersPaint: generateLayersOptions(options),\n initial: options.initial || DEFAULT_OPTIONS[\"initial\"],\n locale: generateLocaleOptions(options),\n dynamicLine: options.dynamicLine ?? DEFAULT_OPTIONS.dynamicLine,\n } as RequiredDrawOptions;\n }\n}\n\nfunction generatePanelOptions(options: DrawOptions): RequiredDrawOptions[\"panel\"] {\n return {\n size: options.panel?.size || DEFAULT_OPTIONS.panel.size,\n buttons: {\n undo: {\n visible: options.panel?.buttons?.undo?.visible ?? DEFAULT_OPTIONS.panel.buttons.undo.visible,\n },\n delete: {\n visible: options.panel?.buttons?.delete?.visible ?? DEFAULT_OPTIONS.panel.buttons.delete.visible,\n },\n save: {\n visible: options.panel?.buttons?.save?.visible ?? DEFAULT_OPTIONS.panel.buttons.save.visible,\n clearOnSave: options.panel?.buttons?.save?.clearOnSave ?? DEFAULT_OPTIONS.panel.buttons.save.clearOnSave,\n },\n },\n };\n}\n\nfunction generateModeOptions(options: DrawOptions): RequiredDrawOptions[\"modes\"] {\n return {\n initial: options.modes?.initial || DEFAULT_OPTIONS.modes.initial,\n line: {\n visible:\n options?.modes?.line?.visible !== undefined\n ? options.modes.line.visible\n : options?.initial?.geometry === \"line\" || DEFAULT_OPTIONS.modes.line.visible,\n closeGeometry:\n options?.modes?.line?.closeGeometry ??\n options?.initial?.closeGeometry ??\n DEFAULT_OPTIONS.modes.line.closeGeometry,\n },\n polygon: {\n visible:\n options?.modes?.polygon?.visible !== undefined\n ? options.modes.polygon.visible\n : options?.initial?.geometry === \"polygon\" || DEFAULT_OPTIONS.modes.polygon.visible,\n },\n breakGeometry: {\n visible: options?.modes?.breakGeometry?.visible ?? DEFAULT_OPTIONS.modes.breakGeometry.visible,\n },\n };\n}\n\nfunction generateLayersOptions(options: DrawOptions): RequiredDrawOptions[\"layersPaint\"] {\n return {\n onLinePoint: {\n \"circle-radius\": options.layersPaint?.onLinePoint?.[\"circle-radius\"] || ON_LINE_POINT_PAINT_BASE[\"circle-radius\"],\n \"circle-color\": options.layersPaint?.onLinePoint?.[\"circle-color\"] || ON_LINE_POINT_PAINT_BASE[\"circle-color\"],\n \"circle-stroke-color\":\n options.layersPaint?.onLinePoint?.[\"circle-stroke-color\"] || ON_LINE_POINT_PAINT_BASE[\"circle-stroke-color\"],\n \"circle-stroke-width\":\n options.layersPaint?.onLinePoint?.[\"circle-stroke-width\"] || ON_LINE_POINT_PAINT_BASE[\"circle-stroke-width\"],\n ...options.layersPaint?.onLinePoint,\n },\n firstPoint: {\n \"circle-radius\": options.layersPaint?.firstPoint?.[\"circle-radius\"] || FIRST_POINT_PAINT_BASE[\"circle-radius\"],\n \"circle-color\": options.layersPaint?.firstPoint?.[\"circle-color\"] || FIRST_POINT_PAINT_BASE[\"circle-color\"],\n \"circle-stroke-color\":\n options.layersPaint?.firstPoint?.[\"circle-stroke-color\"] || FIRST_POINT_PAINT_BASE[\"circle-stroke-color\"],\n \"circle-stroke-width\":\n options.layersPaint?.firstPoint?.[\"circle-stroke-width\"] || FIRST_POINT_PAINT_BASE[\"circle-stroke-width\"],\n ...options.layersPaint?.firstPoint,\n },\n points: {\n \"circle-radius\": options.layersPaint?.points?.[\"circle-radius\"] || POINTS_PAINT_BASE[\"circle-radius\"],\n \"circle-color\": options.layersPaint?.points?.[\"circle-color\"] || POINTS_PAINT_BASE[\"circle-color\"],\n \"circle-stroke-color\":\n options.layersPaint?.points?.[\"circle-stroke-color\"] || POINTS_PAINT_BASE[\"circle-stroke-color\"],\n \"circle-stroke-width\":\n options.layersPaint?.points?.[\"circle-stroke-width\"] || POINTS_PAINT_BASE[\"circle-stroke-width\"],\n ...options.layersPaint?.points,\n },\n line: {\n \"line-width\": options.layersPaint?.line?.[\"line-width\"] || LINE_PAINT_BASE[\"line-width\"],\n \"line-color\": options.layersPaint?.line?.[\"line-color\"] || LINE_PAINT_BASE[\"line-color\"],\n \"line-opacity\": options.layersPaint?.line?.[\"line-opacity\"] || LINE_PAINT_BASE[\"line-opacity\"],\n ...options.layersPaint?.line,\n },\n polygon: {\n \"fill-color\": options.layersPaint?.polygon?.[\"fill-color\"] || POLYGON_PAINT_BASE[\"fill-color\"],\n \"fill-opacity\": options.layersPaint?.polygon?.[\"fill-opacity\"] || POLYGON_PAINT_BASE[\"fill-opacity\"],\n ...options.layersPaint?.polygon,\n },\n breakLine: {\n \"line-width\": options.layersPaint?.breakLine?.[\"line-width\"] || BREAK_PAINT_BASE[\"line-width\"],\n \"line-color\": options.layersPaint?.breakLine?.[\"line-color\"] || BREAK_PAINT_BASE[\"line-color\"],\n \"line-dasharray\": options.layersPaint?.breakLine?.[\"line-dasharray\"] || BREAK_PAINT_BASE[\"line-dasharray\"],\n ...options.layersPaint?.breakLine,\n },\n };\n}\n\nfunction generateLocaleOptions(options: DrawOptions): RequiredDrawOptions[\"locale\"] {\n return {\n save: options.locale?.save ?? DEFAULT_OPTIONS.locale.save,\n delete: options.locale?.delete ?? DEFAULT_OPTIONS.locale.delete,\n undo: options.locale?.undo ?? DEFAULT_OPTIONS.locale.undo,\n line: options.locale?.line ?? DEFAULT_OPTIONS.locale.line,\n polygon: options.locale?.polygon ?? DEFAULT_OPTIONS.locale.polygon,\n break: options.locale?.break ?? DEFAULT_OPTIONS.locale.break,\n closeLine: options.locale?.closeLine ?? DEFAULT_OPTIONS.locale.closeLine,\n createPolygon: options.locale?.createPolygon ?? DEFAULT_OPTIONS.locale.createPolygon,\n };\n}\n","import type { IControl, Map } from \"#types/map\";\n\nimport type { DrawOptions, LatLng, RequiredDrawOptions, Step, StepId } from \"#types/index\";\nimport { Panel } from \"#components/last-point-panel\";\nimport { Tiles } from \"#components/map/tiles\";\nimport { Events } from \"#components/map\";\nimport { Control } from \"#components/side-control\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport { Cursor } from \"#components/map/cursor\";\nimport { MouseEvents } from \"#components/map/mouse-events/index\";\nimport { uuidv4 } from \"#utils/helpers\";\nimport { DOM } from \"#utils/dom\";\nimport { Store, StoreHelpers } from \"#store/index\";\nimport { Options } from \"#utils/options\";\n\nimport type {\n UndoEvent,\n PointAddEvent,\n PointDoubleClickEvent,\n PointEnterEvent,\n PointLeaveEvent,\n PointMoveEvent,\n RemoveAllEvent,\n SaveEvent,\n ModeChangeEvent,\n} from \"#components/map/types\";\n\nimport \"./draw.css\";\n\nexport default class DrawLibre implements IControl {\n #container: HTMLElement | undefined;\n #store: Store | undefined;\n #mode: DrawingMode | undefined;\n #defaultOptions: RequiredDrawOptions;\n #events: Events | undefined;\n #tiles: Tiles | undefined;\n #panel: Panel | undefined;\n #cursor: Cursor | undefined;\n #mouseEvents: MouseEvents | undefined;\n\n static #instance: DrawLibre | null = null;\n static #instanceCreated = false;\n\n private constructor(options?: DrawOptions) {\n this.#defaultOptions = Options.init(options);\n if (this.#defaultOptions.initial) {\n Options.checkInitialStepsOption(this.#defaultOptions.initial);\n }\n\n if (DrawLibre.#instanceCreated) {\n throw new Error(\"Use 'DrawLibre.getInstance()' instead of 'new DrawLibre()'.\");\n }\n\n DrawLibre.#instanceCreated = true;\n this.#store = undefined;\n this.#mode = undefined;\n this.#events = undefined;\n this.#tiles = undefined;\n this.#panel = undefined;\n this.#mouseEvents = undefined;\n this.#cursor = undefined;\n }\n\n public static getInstance(options?: DrawOptions): DrawLibre {\n if (!DrawLibre.#instance) {\n DrawLibre.#instance = new DrawLibre(options);\n }\n return DrawLibre.#instance;\n }\n\n /**\n * DO NOT USE IMPLICITLY. PASS TO map.addControl().\n *\n * @example ```ts\n * const map = new Map();\n * const draw = new DrawLibre();\n * map.addControl(draw)\n * ```\n *\n * Register a control on the map and give it a chance to register event listeners\n *\n * @param map - the Map this control will be added to\n * @returns The control's container element. This should\n * be created by the control and returned by onAdd without being attached\n * to the DOM: the map will insert the control's element into the DOM\n * as necessary.\n */\n onAdd(map: Map) {\n this.#store = new Store(this.#defaultOptions);\n this.#mode = new DrawingMode(this.#defaultOptions);\n this.#panel = new Panel({ map, mode: this.#mode, options: this.#defaultOptions, store: this.#store });\n this.#tiles = new Tiles({ map, store: this.#store, options: this.#defaultOptions, mode: this.#mode });\n const control = new Control({ options: this.#defaultOptions, mode: this.#mode });\n this.#mouseEvents = new MouseEvents();\n this.#cursor = new Cursor({ map, mode: this.#mode, mouseEvents: this.#mouseEvents, store: this.#store });\n this.#events = new Events({\n map,\n store: this.#store,\n options: this.#defaultOptions,\n panel: this.#panel,\n control,\n mode: this.#mode,\n tiles: this.#tiles,\n mouseEvents: this.#mouseEvents,\n });\n if (this.#mode.getMode()) {\n map.fire(\"mode:initialize\");\n }\n this.#mode.pingConsumers();\n this.#container = control.getContainer();\n\n return this.#container;\n }\n\n /**\n * DO NOT USE IMPLICITLY. PASS TO map.removeControl().\n *\n * @example ```ts\n * const map = new Map();\n * const draw = new DrawLibre();\n * map.removeControl(draw)\n * ```\n *\n * Unregister a control on the map and give it a chance to detach event listeners.\n *\n * @param map - the Map this control will be removed from\n */\n onRemove() {\n this.#cursor?.removeConsumers();\n this.#tiles?.removeTiles();\n this.#events?.removeMapEventsAndConsumers();\n this.#panel?.removePanel();\n this.#store?.reset();\n this.#mode?.unsubscribe();\n\n if (this.#container) {\n DOM.remove(this.#container);\n }\n }\n\n /**\n * Adds a series of steps to the store. If a step ID is not provided, it will be automatically generated.\n *\n * @param step - The step to add to the store, which can be of type Step or LatLng.\n */\n setSteps = (value: Step[] | LatLng[]) => {\n if (Array.isArray(value)) {\n value.forEach((step) => {\n const newStep = { ...step, id: (step as Step)[\"id\"] || uuidv4() };\n this.#store?.push(newStep);\n });\n } else {\n throw new Error(\"Invalid argument. Expected an array of steps.\");\n }\n this.#tiles?.render();\n };\n\n /**\n * Retrieves a step from the store by its ID. This method is called by {@link map.findStepById}\n * internally.\n *\n * @param id - The ID of the step to retrieve.\n * @returns The step with the specified ID, or undefined if not found.\n */\n findStepById = (id: StepId) => {\n return this.#store?.findStepById(id);\n };\n\n /**\n * Retrieves all steps from the store, either as an array or as a linked list, based on the type specified.\n * This method is called by {@link map.getAllSteps}\n * internally.\n *\n * @param type - The type of collection to return, either \"array\" or \"ll\" (linked list).\n * @returns An array of all steps or the linked list of steps.\n */\n getAllSteps = (type: \"array\" | \"linkedlist\" = \"array\") => {\n if (type === \"array\" && this.#store) {\n return StoreHelpers.toArray(this.#store.head);\n }\n if (type === \"linkedlist\") {\n return this.#store;\n }\n throw new Error(\"Invalid type specified. Use 'array' or 'linkedlist'.\");\n };\n\n setOptions = (fn: (options: RequiredDrawOptions) => RequiredDrawOptions) => {\n this.#defaultOptions = fn(this.#defaultOptions);\n };\n\n /**\n * Removes all steps.\n */\n removeAllSteps = () => {\n this.#store?.reset();\n this.#panel?.removePanel();\n this.#tiles?.render();\n };\n}\n\nexport type {\n RequiredDrawOptions,\n PointAddEvent,\n PointDoubleClickEvent,\n PointEnterEvent,\n PointLeaveEvent,\n PointMoveEvent,\n RemoveAllEvent,\n SaveEvent,\n UndoEvent,\n ModeChangeEvent,\n};\n"]}