draw-libre 0.3.1 → 0.3.2
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/README.md +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/dom.ts","../src/components/panel/index.ts","../src/utils/geo_constants.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/components/map/points/helpers.ts","../src/utils/observable.ts","../src/store/errors.ts","../src/store/index.ts","../src/components/panel/events.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/tiles/helpers.ts","../src/components/map/points/first-point.ts","../src/components/map/points/aux-points.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","#init","#applyPanelStyles","store","coordinates","point","#pointPositionUpdate","#updatePanelPositionOnMapMove","mapRect","x","y","offset","#removeMapEventListeners","#createButton","title","size","button","locale","undo","deleteButton","save","panelSize","LINE_BASE","ELAYERS","ESOURCES","FIRST_POINT_RADIUS","FIRST_POINT_COLOR","FIRST_POINT_PAINT_BASE","AUXILIARY_POINT_PAINT_BASE","ON_LINE_POINT_PAINT_BASE","POLYGON_PAINT_BASE","LINE_PAINT_BASE","POINTS_PAINT_BASE","BREAK_PAINT_BASE","generateLayersToRender","MapUtils","event","layerIds","layer","map","coords","lat","lng","GeometryFactory","#collectGeometryCoordinates","current","visitedNodes","next","pointFeatures","val","head","points","lines","polygons","Spatial","_Spatial","id","idx","point1","point2","A","B","P","distanceAB","distanceAP","distancePB","mode","args","isCircle","uuidv4","getRandomHexChar","getUuidSection","length","section","getUuidSectionSize","firstElement","lastElement","parts","throttle","fn","delay","lastArgs","shouldCall","execute","debounce","timeout","Tiles","#unifiedGeoJSON","#addSources","#addLayers","#swapLayers","#initConsumers","#polygonVisibility","#removeConsumers","source","LAYERS_TO_RENDER","beneathLayerId","aboveLayerId","beneath","above","#removeSources","#removeLayers","featureIdx","newCoord","line","polygon","feature","aux","prevIdx","unifiedSource","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","MOBILE_WIDTH","DEFAULT_OPTIONS","FireEvents","step","originalEvent","context","steps","ControlObserver","#mapModeConsumer","#resetAllState","_line","_polygon","_break","#checkActive","#observeModeChange","data","#enableButton","#disableButton","#observeGeometryChange","ControlEvents","#tooltip","#observer","#initEvents","control","#removeEvents","label","placement","#removeActiveClass","#initialize","tiles","PointHelpers","p1","p2","mid","PointVisibility","PointsFilter","Observable","observer","ERRORS","ListNode","prev","Store","list","StoreHelpers","newNode","_StoreHelpers","#generateIdForSteps","stepsWithoutIds","initialSteps","closeGeometry","pointGeneration","auxPoint","initialOptions","generateId","result","PanelEvents","#storeEventsConsumer","panel","#onUndoClick","#onRemoveAll","#getButtonLabel","#removeStep","isOnLine","visited","aPixel","bPixel","eventPixel","insertStepIfOnLine","currentStep","updateUIAfterInsert","checkIfPointClicked","LINE_BREAK_THROTTLE_TIME","LineBreakEvents","#current","#throttledOnLineEnter","#onLineEnterBreak","#geometryBreakOnClick","#onLineLeave","#getAutoGenerationPoints","#getLinePoints","lineSource","lineBreakData","LINE_DYNAMIC_THROTTLE_TIME","DynamicLineEvents","#visible","#firstPoint","#secondPoint","#lineFeature","#throttledOnLineMove","#debouncedDynamicLine","#onLineMove","#dynamicLineVisibility","#mouseEventsConsumer","isClosed","#onMapClick","#onDoubleClick","#renderLineOnMouseMove","lineClick","latLng","LINE_TRANSPARENT_THROTTLE_TIME","TransparentLineEvents","#isThrottled","#lastEvent","#onLineAdd","#onLineEnter","#processMouseMove","pointSource","mouseEvents","LineEvents","#break","#transparent","#dynamic","#type","#initDynamicLine","firstPointCircleRadius","defaultPointCircleRadius","togglePointCircleRadius","removeTransparentLine","addTransparentLine","transparentLayer","FirstPoint","#mouseDown","#events","baseEvents","#storeConsumer","#initBaseEvents","#onFirstPointClick","#onFirstPointMouseEnter","#onFirstPointMouseLeave","#onFirstPointMouseUp","#onFirstPointMouseDown","#removeBaseEvents","#getTitle","X_OFFSET","AuxPoints","#onMouseDown","#onPrimaryPointMouseDown","#addTwoAuxiliaryPoints","clickedNode","nextPrimaryNode","prevPrimaryNode","prevAuxPoint","nextAuxPoint","PointEvents","#startCoordinates","#enteredStep","#selectedNode","#selectedIdx","#auxPoints","#onPointMouseEnter","#onPointMouseLeave","#onPointMouseDown","#onPointMouseUp","#onMapMouseMove","#onMapDblClick","#recalculateAuxiliaryPoints","nextAuxNode","prevAuxNode","isNonEdgeSize","#onPointRemove","#onOwnGeometryLayersClick","nextStep","addedStep","#onMoveLeftClickUp","#getAuxPointsLatLng","prevPrimary","nextPrimary","auxPoints","#resetHelpers","#hideLastPointPanel","#setSelectedNode","#updateStore","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","#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 { CustomMap } from \"#types/map\";\nimport type { LatLng, PanelImpl, Point, RequiredDrawOptions } from \"#types/index\";\nimport { DOM } from \"#utils/dom\";\nimport type { Store } from \"#store/index\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport \"./panel.css\";\n\ninterface IProps {\n map: CustomMap;\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.#init();\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 #init = () => {\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 if (this.#isHidden) {\n this.showPanel();\n }\n const point = this.#props.map.project(coordinates);\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 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 = (\n type: \"undo\" | \"save\" | \"delete\",\n title: string,\n size: PanelImpl[\"size\"],\n container: HTMLElement,\n ) => {\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 AuxiliaryPointLayer: \"mdl-auxiliary-point-layer\",\n} as const;\n\nexport const ESOURCES = {\n UnifiedSource: \"mdl-unified-source\",\n LineDynamicSource: \"mdl-line-dynamic-source\",\n LineSourceBreak: \"mdl-line-source-break\",\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 AUXILIARY_POINT_PAINT_BASE = {\n \"circle-radius\": FIRST_POINT_RADIUS.default - 1.5,\n \"circle-color\": \"#FEFFFE\",\n \"circle-stroke-color\": \"#666666\",\n \"circle-stroke-width\": 2,\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.UnifiedSource,\n type: \"fill\",\n paint: options.layersPaint.polygon,\n layout: {\n visibility: \"none\",\n },\n filter: [\"==\", \"$type\", \"Polygon\"],\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.UnifiedSource,\n type: \"line\",\n paint: options.layersPaint.line,\n layout: {\n visibility: \"visible\",\n },\n filter: [\"==\", \"$type\", \"LineString\"],\n },\n {\n id: ELAYERS.LineLayerTransparent,\n source: ESOURCES.UnifiedSource,\n type: \"line\",\n paint: {\n \"line-width\": 4,\n \"line-color\": \"transparent\",\n },\n filter: [\"==\", \"$type\", \"LineString\"],\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.UnifiedSource,\n type: \"circle\",\n paint: options.layersPaint.points,\n filter: [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"isFirst\", false], [\"==\", \"isAuxiliary\", false]],\n },\n {\n id: ELAYERS.FirstPointLayer,\n source: ESOURCES.UnifiedSource,\n type: \"circle\",\n paint: options.layersPaint.firstPoint,\n filter: [\"==\", [\"get\", \"isFirst\"], true],\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.AuxiliaryPointLayer,\n source: ESOURCES.UnifiedSource,\n type: \"circle\",\n paint: options.layersPaint.auxiliaryPoint,\n filter: [\"==\", [\"get\", \"isAuxiliary\"], true],\n },\n ] satisfies AddLayerObject[];\n};\n","import type { MapLayerMouseEvent, MapMouseEvent } from \"maplibre-gl\";\nimport type { LatLng, Point, Uuid, EventsProps, RequiredDrawOptions } from \"#types/index\";\nimport type { CustomMap } from \"#types/map\";\n\nimport type { ListNode, Store } from \"#store/index\";\n\nimport type { DrawingMode } from \"#components/map/mode\";\nimport { ELAYERS } 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: CustomMap, coords: LatLng) => {\n const { lat, lng } = coords;\n return map.project([lng, lat]);\n };\n\n static queryPointId = (map: CustomMap, point: MapMouseEvent[\"point\"]) => {\n const query = map.queryRenderedFeatures(point, {\n layers: [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer, ELAYERS.AuxiliaryPointLayer, ELAYERS.SinglePointLayer],\n });\n\n const id = query?.[0]?.properties.id;\n return id;\n };\n\n static queryPoint = (map: CustomMap, point: MapMouseEvent[\"point\"]) => {\n const query = map.queryRenderedFeatures(point, {\n layers: [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer, ELAYERS.AuxiliaryPointLayer, ELAYERS.SinglePointLayer],\n });\n return query?.[0];\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 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 getAllLines(coordinates: number[][]) {\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 getPolygon(coordinates: number[][]) {\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, isAuxiliary: val.isAuxiliary },\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 // CAUTION: render is dependent on this function\n static getUnifiedFeatures(\n store: Store,\n ): GeoJSON.FeatureCollection<GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.Point> {\n const points = this.getPoints(store).features;\n const coordinates = this.#collectGeometryCoordinates(store);\n\n const lines = this.getAllLines(coordinates).features;\n const polygons = this.getPolygon(coordinates).features;\n\n return {\n type: \"FeatureCollection\",\n features: [...points, ...lines, ...polygons],\n } as GeoJSON.FeatureCollection<GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.Point>;\n }\n}\n\nexport class Spatial {\n static getGeometryIndex = (store: Store, id: Uuid) => {\n let current = store.head;\n let idx = 0;\n const visitedNodes = new Set();\n while (current !== null) {\n if (visitedNodes.has(current.val?.id)) {\n break;\n }\n if (current.val?.id === id) {\n return idx;\n }\n\n visitedNodes.add(current.val?.id);\n idx++;\n current = current.next;\n }\n return -1;\n };\n\n // √(x1−x2)²+(y1−y2)²\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, options: RequiredDrawOptions) => {\n if (options.pointGeneration === \"auto\") {\n return store.tail?.next?.val?.id === store.head?.val?.id && store.tail?.next !== null;\n }\n return store.tail?.next === store.head;\n };\n\n // when we have 1 primary <--- 1 aux <--- 1 primary current will be an aux when 1 prim <--- 1 aux and a primary 1 aux <--- 1 prim\n // [aux] [primary]\n static breakGeometry = (store: Store, options: RequiredDrawOptions, current: ListNode) => {\n if (!store.head) return;\n\n if (options.pointGeneration === \"auto\") {\n // if the current node is an aux, then we need to make one step back for the tail and the head is the next node from the aux point\n if (current.val?.isAuxiliary) {\n store.head = current.next as ListNode;\n store.head.prev = null;\n store.tail = current.prev as ListNode;\n store.tail.next = null;\n } else {\n // else the tail is the current node and for the head we need to jump over the aux point so the next.next\n store.head = current.next?.next as ListNode;\n store.head.prev = null;\n store.tail = current;\n store.tail.next = null;\n }\n store.size = store.size - 1;\n } else {\n // no aux here, so the tail is the current node and the head is the next node\n store.head = current.next as ListNode;\n store.head.prev = null;\n store.tail = current;\n store.tail.next = null;\n }\n };\n\n static closeGeometry = (store: Store, mode: DrawingMode) => {\n if (store.tail && store.head) {\n store.tail.next = store.head;\n store.head.prev = store.tail;\n }\n mode.setClosedGeometry(true);\n };\n\n static canCloseGeometry = (store: Store, options: RequiredDrawOptions) => {\n const storeSize = options.pointGeneration === \"auto\" ? store.size > 3 : store.size > 2;\n return storeSize && !this.isClosedGeometry(store, options);\n };\n\n static canBreakClosedGeometry = (store: Store, options: RequiredDrawOptions) => {\n if (options.pointGeneration === \"auto\") {\n return store.size <= 3;\n }\n\n return store.size <= 2;\n };\n\n static switchToLineModeIfCan = (args: EventsProps) => {\n const { store, map, mode, options } = args;\n\n const isCircle = store.tail?.next === store.head;\n const canBreakGeometry = Spatial.canBreakClosedGeometry(store, options);\n\n if (canBreakGeometry && isCircle) {\n if (options.pointGeneration === \"auto\") {\n if (store.tail?.val?.isAuxiliary) {\n if (store.head) {\n store.head.next = store.tail;\n store.head.prev = null;\n }\n if (store.tail && store.tail.prev && store.head) {\n store.tail = store.tail.prev;\n store.tail.prev = store.head.next;\n store.tail.next = null;\n }\n if (store.head?.next) {\n store.head.next.next = store.tail;\n store.head.next.prev = store.head;\n }\n } else {\n if (store.head) {\n store.head.prev = null;\n }\n if (store.tail && store.head) {\n store.tail.prev = store.head.next;\n store.tail.next = null;\n }\n }\n } else {\n if (store.tail) {\n store.tail.next = null;\n }\n }\n mode.reset();\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 { CustomMap } from \"#types/map\";\nimport type { Store } from \"#store/index\";\nimport { ELAYERS, ESOURCES, generateLayersToRender } from \"#utils/geo_constants\";\nimport { debounce, GeometryFactory, Spatial } from \"#utils/helpers\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport type { StoreChangeEvent } from \"#store/types\";\n\ninterface IProps {\n map: CustomMap;\n store: Store;\n options: RequiredDrawOptions;\n mode: DrawingMode;\n}\n\nexport class Tiles {\n #props: IProps;\n #unifiedGeoJSON: GeoJSON.FeatureCollection<GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.Point>;\n\n constructor(props: IProps) {\n this.#props = props;\n this.#unifiedGeoJSON = GeometryFactory.getUnifiedFeatures(this.#props.store);\n\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 this.#initConsumers();\n }\n\n #initConsumers = () => {\n const { store } = this.#props;\n store.addObserver(this.#polygonVisibility);\n };\n\n #removeConsumers = () => {\n const { store } = this.#props;\n store.removeObserver(this.#polygonVisibility);\n };\n\n #polygonVisibility = debounce((event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\" || event.type === \"STORE_DETACHED\") {\n const { map, mode, options, store } = this.#props;\n const isPolygon = mode.getMode() === \"polygon\";\n if (isPolygon && Spatial.isClosedGeometry(store, options)) {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n } else {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"none\");\n }\n }\n }, 10);\n\n #addSources = () => {\n const { map } = this.#props;\n for (const source of Object.values(ESOURCES)) {\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, options } = this.#props;\n\n const LAYERS_TO_RENDER = generateLayersToRender(options);\n\n for (const layer of LAYERS_TO_RENDER) {\n if (!map.getLayer(layer.id)) {\n map.addLayer(layer);\n }\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 for (const source of Object.values(ESOURCES)) {\n if (map.getSource(source)) {\n map.removeSource(source);\n }\n }\n };\n\n #removeLayers = () => {\n const { map } = this.#props;\n\n for (const layer of Object.values(ELAYERS)) {\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 this.#removeConsumers();\n };\n\n private updateLine(featureIdx: number, newCoord: LatLng) {\n const { mode } = this.#props;\n\n // -2 because line is always the second to last feature. Check GeometryFactory.getUnifiedFeatures\n const line = this.#unifiedGeoJSON.features.at(-2)?.geometry.coordinates;\n if (!line) return;\n line[featureIdx] = [newCoord.lng, newCoord.lat];\n\n if (mode.getClosedGeometry() && featureIdx === 0) {\n line[line.length - 1] = [newCoord.lng, newCoord.lat];\n }\n }\n\n private updatePolygon(featureIdx: number, newCoord: LatLng) {\n const { mode } = this.#props;\n\n // -1 because line is always the last feature. Check GeometryFactory.getUnifiedFeatures\n const polygon = this.#unifiedGeoJSON.features.at(-1)?.geometry.coordinates[0] as number[][];\n if (!polygon) return;\n polygon[featureIdx] = [newCoord.lng, newCoord.lat];\n\n if (mode.getClosedGeometry() && featureIdx === 0) {\n polygon[polygon.length - 1] = [newCoord.lng, newCoord.lat];\n }\n }\n\n private updatePoint(featureIdx: number, newCoord: LatLng) {\n // points are always the first feature. Check GeometryFactory.getUnifiedFeatures\n const feature = this.#unifiedGeoJSON?.features?.[featureIdx];\n if (feature?.geometry?.coordinates) {\n feature.geometry.coordinates = [newCoord.lng, newCoord.lat];\n }\n }\n\n renderOnMouseMove = (\n featureIdx: number,\n newCoord: LatLng,\n aux: { next: LatLng | null; prev: LatLng | null } | null,\n ) => {\n const { mode, options, store } = this.#props;\n // if the selected index is the first one then the prev index is the store.size - 1\n const prevIdx = featureIdx === 0 ? store.size - 1 : featureIdx - 1;\n\n this.updatePoint(featureIdx, newCoord);\n if (aux && aux.prev) {\n this.updatePoint(prevIdx, aux.prev);\n }\n if (aux && aux.next) {\n this.updatePoint(featureIdx + 1, aux.next);\n }\n\n this.updateLine(featureIdx, newCoord);\n if (aux && aux.prev) {\n this.updateLine(prevIdx, aux.prev);\n }\n if (aux && aux.next) {\n this.updateLine(featureIdx + 1, aux.next);\n }\n\n const polygonOptionChecked = options.modes.polygon.visible;\n\n if (polygonOptionChecked && mode.isPolygon()) {\n this.updatePolygon(featureIdx, newCoord);\n if (aux && aux.prev) {\n this.updatePolygon(prevIdx, aux.prev);\n }\n if (aux && aux.next) {\n this.updatePolygon(featureIdx + 1, aux.next);\n }\n }\n\n const unifiedSource = this.#props.map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n if (unifiedSource) {\n unifiedSource.setData(this.#unifiedGeoJSON);\n }\n };\n\n render() {\n this.#unifiedGeoJSON = GeometryFactory.getUnifiedFeatures(this.#props.store);\n const unifiedSource = this.#props.map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n\n if (unifiedSource) {\n unifiedSource.setData(this.#unifiedGeoJSON);\n }\n }\n\n resetGeometries = () => {\n const unifiedSource = this.#props.map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n if (unifiedSource) {\n unifiedSource.setData({\n type: \"FeatureCollection\",\n features: [],\n });\n }\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 pointGeneration: \"manual\",\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 the line\",\n createPolygon: \"Create a polygon\",\n },\n};\n","import type { CustomMap } from \"#types/map\";\nimport type { LatLng, StepId, Step, EventsProps } from \"#types/index\";\nimport { EVENTS } from \"#utils/constants\";\nimport type { DrawingMode } from \"./mode\";\nimport type { Mode } from \"./mode/types\";\n\nexport class FireEvents {\n static addPoint(step: Step & { total: number }, map: CustomMap, 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: CustomMap) {\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: CustomMap) {\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: CustomMap) {\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: CustomMap) {\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: CustomMap, 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: CustomMap, mode: Mode | \"break\") {\n map.fire(EVENTS.MODECHANGED, {\n mode,\n });\n }\n static removeAllPoints(map: CustomMap, 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: CustomMap) {\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 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","import type { MapLayerMouseEvent } from \"maplibre-gl\";\nimport type { EventsProps, Step } from \"#types/index\";\n\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { uuidv4 } from \"#utils/helpers\";\n\nimport { CustomMap } from \"#types/map\";\n\nexport const PointHelpers = {\n getMidpoint(p1: { lat: number; lng: number }, p2: { lat: number; lng: number }) {\n return {\n lat: (p1.lat + p2.lat) / 2,\n lng: (p1.lng + p2.lng) / 2,\n };\n },\n\n createAuxiliaryPoint(p1: Step, p2: Step) {\n const mid = PointHelpers.getMidpoint(p1, p2);\n const step = { lat: mid.lat, lng: mid.lng, isAuxiliary: true, id: uuidv4() };\n return step;\n },\n\n addPointToMap(event: MapLayerMouseEvent, props: EventsProps) {\n const { store } = props;\n\n const step = { ...event.lngLat, isAuxiliary: false, id: uuidv4() };\n store.push(step);\n return step;\n },\n};\n\nexport const PointVisibility = {\n setFirstPointVisible(map: CustomMap) {\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"visible\");\n },\n\n setFirstPointHidden(map: CustomMap) {\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"none\");\n },\n\n setSinglePointVisible(event: MapLayerMouseEvent) {\n const map = event.target;\n map.setLayoutProperty(ELAYERS.SinglePointLayer, \"visibility\", \"visible\");\n },\n\n setSinglePointHidden(event: MapLayerMouseEvent) {\n const map = event.target;\n setTimeout(() => {\n map.setLayoutProperty(ELAYERS.SinglePointLayer, \"visibility\", \"none\");\n }, 33);\n },\n};\n\nexport const PointsFilter = {\n default(map: CustomMap) {\n map.setFilter(ELAYERS.PointsLayer, [\n \"all\",\n [\"==\", \"$type\", \"Point\"],\n [\"==\", \"isFirst\", false],\n [\"==\", \"isAuxiliary\", false],\n ]);\n },\n closedGeometry(map: CustomMap) {\n map.setFilter(ELAYERS.PointsLayer, [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"isAuxiliary\", false]]);\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 { PointHelpers } from \"#components/map/points/helpers\";\nimport 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 prev: ListNode | null;\n next: ListNode | null;\n constructor(val: Step | null = null, next: ListNode | null = null, prev: ListNode | null = null) {\n this.val = val;\n this.prev = prev;\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 map: Map<StepId, ListNode>;\n\n constructor(options?: RequiredDrawOptions) {\n super();\n let list = StoreHelpers.initStore(options);\n this.map = list ? list.map : new Map<StepId, ListNode>();\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 newNode.prev = this.tail;\n this.tail.next = newNode;\n this.tail = newNode;\n }\n this.map.set(step.id, newNode);\n this.size++;\n this.pingConsumers();\n }\n\n insert(step: Step, current: ListNode) {\n if (!current) return;\n const newNode = new ListNode(step);\n newNode.prev = current;\n newNode.next = current.next;\n\n const betweenHeadAndTail = this.tail === current && this.head === current.next;\n if (betweenHeadAndTail) {\n this.tail = newNode;\n }\n\n if (current.next) {\n current.next.prev = newNode;\n }\n\n current.next = newNode;\n this.map.set(step.id, newNode);\n this.size++;\n this.pingConsumers();\n }\n\n findStepById(id: StepId): ListNode[\"val\"] | null {\n const node = this.map.get(id);\n return node ? node.val : null;\n }\n\n findNodeById(id: StepId): ListNode | null {\n const node = this.map.get(id);\n return node ? node : null;\n }\n\n removeNodeById(id: StepId): ListNode | null {\n const node = this.map.get(id);\n if (!node) return null;\n\n if (this.size === 1) {\n this.head = null;\n this.tail = null;\n } else {\n if (node.prev) {\n node.prev.next = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n }\n\n if (node === this.head) {\n this.head = node.next;\n if (this.head?.prev && this.tail) this.tail.next = this.head;\n }\n\n if (node === this.tail) {\n this.tail = node.prev;\n if (this.head && this.tail?.next) this.head.prev = this.tail;\n }\n }\n\n this.map.delete(id);\n this.size--;\n this.pingConsumers();\n\n return node;\n }\n\n reset() {\n this.head = null;\n this.tail = null;\n this.size = 0;\n this.map.clear();\n this.pingConsumers();\n }\n\n pingConsumers = () => {\n this.notify({\n type: \"STORE_MUTATED\",\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, options: RequiredDrawOptions, id: StepId): boolean => {\n if (options.pointGeneration === \"auto\" && store.tail?.next === store.head) {\n return store.tail?.prev?.val?.id === id;\n }\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 return StoreHelpers.fromArray(options.initial, options.pointGeneration);\n }\n\n return null;\n }\n\n static #generateIdForSteps = (stepsWithoutIds: LatLng[]): Step[] => {\n return stepsWithoutIds.map((step, idx) => {\n return { ...step, isAuxiliary: false, isFirst: idx === 0, id: uuidv4() };\n });\n };\n\n static buildStepSequence(\n initialSteps: Step[],\n closeGeometry: Initial[\"closeGeometry\"],\n pointGeneration: RequiredDrawOptions[\"pointGeneration\"],\n ): Store {\n const list = new Store();\n const steps = closeGeometry ? initialSteps.slice(0, -1) : initialSteps;\n\n steps.forEach((step, idx) => {\n list.push(step);\n\n // if we are at the end of the array and there's no next point\n // we need to create an auxiliary point with the first point\n // to close the geometry\n if (pointGeneration === \"auto\") {\n const isNextPointAvailable = steps[idx + 1];\n if (isNextPointAvailable) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(step, steps[idx + 1] as Step);\n list.push(auxPoint);\n } else if (closeGeometry) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(step, steps[0] as Step);\n list.push(auxPoint);\n }\n }\n });\n return list;\n }\n\n static fromArray(initialOptions: Initial, pointGeneration: RequiredDrawOptions[\"pointGeneration\"]): Store | null {\n const { steps: initialSteps, closeGeometry, generateId } = initialOptions;\n const steps = generateId ? this.#generateIdForSteps(initialSteps) : initialSteps;\n const list = this.buildStepSequence(steps as Step[], closeGeometry, pointGeneration);\n\n if (closeGeometry && list.tail && list.head) {\n list.tail.next = list.head;\n list.head.prev = list.tail;\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, StepId } from \"#types/index\";\nimport type { 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 { ELAYERS } from \"#utils/geo_constants\";\nimport { PointHelpers } from \"#components/map/points/helpers\";\nimport type { StoreChangeEvent } from \"#store/types\";\nimport type { DrawingModeChangeEvent } from \"#components/map/mode/types\";\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 initConsumers() {\n this.#props.store.addObserver(this.#storeEventsConsumer);\n this.#props.mode?.addObserver(this.#mapModeConsumer);\n }\n\n removeConsumers() {\n this.#props.store.removeObserver(this.#storeEventsConsumer);\n this.#props.mode?.removeObserver(this.#mapModeConsumer);\n }\n\n #storeEventsConsumer = (event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\") {\n const { data } = event;\n if (data.size === 0) {\n this.#props.panel.hidePanel();\n } else {\n let current = Object.assign({}, data);\n while (current.tail) {\n if (current.tail?.val?.isAuxiliary) {\n current.tail = current.tail?.prev;\n } else {\n if (current.tail?.val) {\n this.#props.panel.setPanelLocation({\n lat: current.tail.val.lat,\n lng: current.tail.val.lng,\n });\n }\n break;\n }\n }\n }\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.#props;\n const { type, data } = event;\n if (type === \"MODE_CHANGED\" && !data) {\n this.#props.panel.hidePanel();\n }\n if (type === \"MODE_CHANGED\" && data) {\n if (store.tail?.val) {\n this.#props.panel.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n }\n };\n\n initEvents() {\n const { panel } = this.#props;\n\n if (panel._undoButton) {\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\n if (panel._deleteButton) {\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._saveButton) {\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._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\n if (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\n if (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: Record<ButtonType, string> = {\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 this.#tooltip.remove();\n tiles.resetGeometries();\n FireEvents.removeAllPoints(map, event);\n };\n\n #removeStep = () => {\n const { store, options } = this.#props;\n\n // Remove the last point\n store.removeNodeById(store.tail?.val?.id as StepId);\n // if we are in aux mode then remove 2 aux points and then add 1 aux point between the 2 points\n if (options.pointGeneration === \"auto\") {\n store.removeNodeById(store.tail?.val?.id as StepId);\n if (store.tail?.val?.isAuxiliary) {\n store.removeNodeById(store.tail?.val?.id);\n if (!Spatial.canBreakClosedGeometry(store, options)) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(store.tail.val, store.head?.val as Step);\n store.push(auxPoint);\n }\n store.tail.next = store.head;\n }\n }\n };\n\n #onUndoClick = (event: Event) => {\n const { store, map, tiles, options } = this.#props;\n if (store.size == 1) {\n store.reset();\n }\n\n this.#removeStep();\n Spatial.switchToLineModeIfCan(this.#props);\n this.#tooltip.remove();\n const step = { ...(store.tail?.val as Step), total: store.size };\n FireEvents.undoPoint(step, map, event);\n 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 } from \"maplibre-gl\";\nimport type { EventsProps, Step } from \"#types/index\";\nimport type { CustomMap } from \"#types/map\";\n\nimport type { Store } from \"#store/index\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { MapUtils, Spatial, uuidv4 } from \"#utils/helpers\";\nimport { PointVisibility } 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?.val && current?.val) {\n const map = event.target as CustomMap;\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, isAuxiliary: false, 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 } = context;\n if (store.tail?.val) {\n PointVisibility.setSinglePointHidden(event);\n tiles.render();\n }\n};\n\nexport const checkIfPointClicked = (event: MapLayerMouseEvent) => {\n return MapUtils.isFeatureTriggered(event, [\n ELAYERS.PointsLayer,\n ELAYERS.FirstPointLayer,\n ELAYERS.AuxiliaryPointLayer,\n ]);\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 #geometryBreakOnClick = () => {\n const { store, mode, map, tiles, options } = this.props;\n\n if (!this.#current) return;\n\n Spatial.breakGeometry(store, options, this.#current);\n this.#onLineLeave();\n mode.reset();\n tiles.render();\n store.notify({\n type: \"STORE_DETACHED\",\n data: null,\n });\n FireEvents.onLineBreak(map);\n };\n\n #getAutoGenerationPoints = (line: ListNode | null) => {\n let current: [number, number] | null = null;\n let next: [number, number] | null = null;\n\n if (line?.val?.isAuxiliary) {\n current = [line?.prev?.val?.lng, line?.prev?.val?.lat] as [number, number];\n next = [line?.next?.val?.lng, line?.next?.val?.lat] as [number, number];\n } else {\n current = [line?.val?.lng, line?.val?.lat] as [number, number];\n next = [line?.next?.next?.val?.lng, line?.next?.next?.val?.lat] as [number, number];\n }\n return { current, next };\n };\n\n #getLinePoints = (line: ListNode | null) => {\n const { options } = this.props;\n if (options.pointGeneration === \"manual\") {\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 return { current, next };\n }\n\n return this.#getAutoGenerationPoints(line);\n };\n\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 const { current, next } = this.#getLinePoints(this.#current);\n\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 { GeoJSONSource, MapLayerMouseEvent, PointLike } from \"maplibre-gl\";\n\nimport type { EventsProps, LatLng, Step } from \"#types/index\";\nimport { ELAYERS, ESOURCES, LINE_BASE } from \"#utils/geo_constants\";\nimport type { StoreChangeEvent } from \"#store/types\";\nimport { GeometryFactory, MapUtils, Spatial, throttle, debounce } from \"#utils/helpers\";\nimport { EVENTS } from \"#utils/constants\";\n\nimport type { DrawingModeChangeEvent } from \"../mode/types\";\nimport type { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport type { 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 #debouncedDynamicLine: (data: StoreChangeEvent[\"data\"]) => 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 this.#debouncedDynamicLine = debounce(this.#dynamicLineVisibility, 10);\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 #dynamicLineVisibility = (data: StoreChangeEvent[\"data\"]) => {\n const { store, options } = this.#props;\n if (data?.tail?.val && !Spatial.isClosedGeometry(store, options)) {\n this.#firstPoint = store.tail?.val as Step;\n this.showDynamicLine();\n }\n };\n\n #storeEventsConsumer = (event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\") {\n this.#debouncedDynamicLine(event.data);\n if (!event.data.size) {\n this.hideDynamicLine();\n }\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.#props;\n\n const isClosed = event.data;\n if (event.type === \"CLOSED_GEOMETRY_CHANGED\") {\n if (isClosed) {\n this.hideDynamicLine();\n }\n\n if (!isClosed && store?.tail?.val) {\n this.#firstPoint = store?.tail?.val;\n this.showDynamicLine();\n }\n }\n };\n\n initDynamicEvents = () => {\n const { map } = this.#props;\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 } = this.#props;\n\n this.#firstPoint = null;\n this.#secondPoint = null;\n this.#lineFeature = null;\n map.off(\"mousemove\", this.#throttledOnLineMove);\n\n const lineSource = map.getSource(ESOURCES.LineDynamicSource) as GeoJSONSource;\n if (lineSource) {\n lineSource.setData(LINE_BASE as GeoJSON.FeatureCollection);\n }\n map.setLayoutProperty(ELAYERS.LineDynamicLayer, \"visibility\", \"none\");\n };\n\n showDynamicLine = () => {\n const { map, store } = this.#props;\n if (store.size) {\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 }\n map.on(\"mousemove\", this.#throttledOnLineMove);\n };\n\n #renderLineOnMouseMove = (newCoord: LatLng) => {\n if (!this.#lineFeature) return;\n const { map } = this.#props;\n\n this.#lineFeature.features[0].geometry.coordinates[1] = [newCoord.lng, newCoord.lat];\n const lineSource = map.getSource(ESOURCES.LineDynamicSource) as GeoJSONSource;\n if (lineSource) {\n lineSource.setData(this.#lineFeature);\n }\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 this.hideDynamicLine();\n };\n\n #onUndoClick = (event: UndoEvent) => {\n const { store, options } = this.#props;\n if (!Spatial.isClosedGeometry(store, options)) {\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, options } = 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 { GeoJSONSource, MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport type { EventsProps } from \"#types/index\";\nimport { ELAYERS, ESOURCES } from \"#utils/geo_constants\";\nimport { MapUtils, throttle } from \"#utils/helpers\";\nimport { FireEvents } from \"../helpers\";\nimport { PointVisibility } 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 updateUIAfterInsert(event, this.props);\n FireEvents.addPoint({ ...step, total: store.size }, map, mode);\n }\n };\n\n #processMouseMove = (event: MapLayerMouseEvent) => {\n PointVisibility.setSinglePointVisible(event);\n if (event.target.getLayer(ELAYERS.SinglePointLayer)) {\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\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 PointVisibility.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 PointVisibility.setSinglePointHidden(event);\n };\n}\n","import type { EventsProps } from \"#types/index\";\nimport { MOBILE_WIDTH } from \"#utils/constants\";\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 | null;\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 = props.options.pointGeneration === \"manual\" ? new TransparentLineEvents(props) : null;\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 <= MOBILE_WIDTH) 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 { CustomMap } from \"#types/map\";\n\nimport { ELAYERS, FIRST_POINT_COLOR, generateLayersToRender, FIRST_POINT_RADIUS } from \"#utils/geo_constants\";\nimport type { RequiredDrawOptions } from \"#types/index\";\n\nconst firstPointCircleRadius = (map: CustomMap) => {\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\nconst defaultPointCircleRadius = (map: CustomMap) => {\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\nexport const togglePointCircleRadius = (map: CustomMap, type: keyof typeof FIRST_POINT_RADIUS) => {\n if (type === \"large\") {\n firstPointCircleRadius(map);\n } else {\n defaultPointCircleRadius(map);\n }\n};\n\nexport const removeTransparentLine = (map: CustomMap) => {\n if (map.getLayer(ELAYERS.LineLayerTransparent)) {\n map.removeLayer(ELAYERS.LineLayerTransparent);\n }\n};\n\nexport const addTransparentLine = (map: CustomMap, 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","import type { EventsProps } from \"#types/index\";\nimport type { MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport { uuidv4, Spatial, debounce } from \"#utils/helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { togglePointCircleRadius } from \"#components/map/tiles/helpers\";\n\nimport { FireEvents } from \"../helpers\";\nimport type { DrawingModeChangeEvent } from \"../mode/types\";\nimport { PointHelpers, PointsFilter, PointVisibility } from \"./helpers\";\nimport type { PrimaryPointEvents } from \".\";\nimport type { StoreChangeEvent } from \"#store/types\";\n\nexport class FirstPoint {\n #mouseDown: boolean;\n #props: EventsProps;\n #tooltip: Tooltip;\n #events: PrimaryPointEvents;\n\n constructor(props: EventsProps, baseEvents: PrimaryPointEvents) {\n this.#props = props;\n this.#mouseDown = false;\n this.#events = baseEvents;\n this.#tooltip = new Tooltip();\n\n this.initLayer();\n }\n\n #initConsumers = () => {\n const { mode, store } = this.#props;\n mode.addObserver(this.#mapModeConsumer);\n store.addObserver(this.#storeConsumer);\n };\n\n #removeConsumers = () => {\n const { mode, store } = this.#props;\n mode.removeObserver(this.#mapModeConsumer);\n store.removeObserver(this.#storeConsumer);\n };\n\n initLayer() {\n const { map } = this.#props;\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"visible\");\n }\n\n #initBaseEvents = () => {\n const { map } = this.#props;\n\n map.on(\"mouseenter\", ELAYERS.FirstPointLayer, this.#events.onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.FirstPointLayer, this.#events.onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.FirstPointLayer, this.#events.onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.FirstPointLayer, this.#events.onPointMouseUp);\n map.on(\"touchend\", ELAYERS.FirstPointLayer, this.#events.onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.FirstPointLayer, this.#events.onPointMouseDown);\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 this.#initBaseEvents();\n this.#initConsumers();\n }\n\n #removeBaseEvents = () => {\n const { map } = this.#props;\n\n map.off(\"mouseenter\", ELAYERS.FirstPointLayer, this.#events.onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.FirstPointLayer, this.#events.onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.FirstPointLayer, this.#events.onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.FirstPointLayer, this.#events.onPointMouseUp);\n map.off(\"touchend\", ELAYERS.FirstPointLayer, this.#events.onPointMouseUp);\n map.off(\"touchstart\", ELAYERS.FirstPointLayer, this.#events.onPointMouseDown);\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 this.#removeBaseEvents();\n this.#removeConsumers();\n }\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { map, options } = this.#props;\n const { type, data } = event;\n\n if (type === \"MODE_CHANGED\") {\n if (data === \"line\" && !options.modes.line.closeGeometry) {\n PointVisibility.setFirstPointHidden(map);\n PointsFilter.closedGeometry(map);\n } else {\n PointVisibility.setFirstPointVisible(map);\n PointsFilter.default(map);\n }\n }\n };\n\n #storeConsumer = debounce((event: StoreChangeEvent) => {\n const { map, store, options } = this.#props;\n\n const { type } = event;\n if (type === \"STORE_MUTATED\" || type === \"STORE_DETACHED\") {\n if (Spatial.canCloseGeometry(store, options)) {\n togglePointCircleRadius(map, \"large\");\n } else {\n togglePointCircleRadius(map, \"default\");\n }\n }\n }, 10);\n\n #onFirstPointClick = () => {\n const { store, map, mode, tiles, options } = this.#props;\n\n if (Spatial.canCloseGeometry(store, options)) {\n const step = Object.assign({}, store.head?.val, {\n id: uuidv4(),\n total: store.size,\n });\n if (options.pointGeneration === \"auto\" && store.tail?.val) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(store.tail?.val, step);\n store.push(auxPoint);\n }\n Spatial.closeGeometry(store, mode);\n FireEvents.addPoint(step, map, mode);\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, options } = this.#props;\n mouseEvents.firstPointMouseEnter = true;\n if (mode.getClosedGeometry() || this.#mouseDown) return;\n if (Spatial.canCloseGeometry(store, options)) {\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 { ListNode } from \"#store/index\";\nimport type { EventsProps, Step } from \"#types/index\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { MapUtils } from \"#utils/helpers\";\nimport type { MapLayerMouseEvent, MapTouchEvent } from \"maplibre-gl\";\nimport { PointHelpers } from \"./helpers\";\nimport type { PrimaryPointEvents } from \".\";\n\nexport class AuxPoints {\n #props: EventsProps;\n #events: PrimaryPointEvents;\n\n constructor(props: EventsProps, baseEvents: PrimaryPointEvents) {\n this.#props = props;\n this.#events = baseEvents;\n this.#initEvents();\n }\n\n #initBaseEvents = () => {\n const { map } = this.#props;\n\n map.on(\"mouseenter\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseUp);\n map.on(\"touchend\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseDown);\n };\n\n #removeBaseEvents = () => {\n const { map } = this.#props;\n\n map.off(\"mouseenter\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseUp);\n map.off(\"touchend\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseUp);\n map.off(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseDown);\n };\n\n #initEvents() {\n const { map } = this.#props;\n\n map.on(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.#onMouseDown);\n map.on(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.#onMouseDown);\n // PointsLayer because we need to check if the point was the primary point\n map.on(\"mousedown\", ELAYERS.PointsLayer, this.#onPrimaryPointMouseDown);\n map.on(\"touchstart\", ELAYERS.PointsLayer, this.#onPrimaryPointMouseDown);\n // PointsLayer becasue aux is already false\n this.#initBaseEvents();\n }\n\n removeEvents() {\n const { map } = this.#props;\n map.off(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.#onMouseDown);\n map.off(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.#onMouseDown);\n map.off(\"mousedown\", ELAYERS.PointsLayer, this.#onPrimaryPointMouseDown);\n map.off(\"touchstart\", ELAYERS.PointsLayer, this.#onPrimaryPointMouseDown);\n\n this.#removeBaseEvents();\n }\n\n #addTwoAuxiliaryPoints = (clickedNode: ListNode | null) => {\n if (!clickedNode) return;\n\n const { store } = this.#props;\n\n const nextPrimaryNode = clickedNode.next;\n const prevPrimaryNode = clickedNode.prev;\n\n if (prevPrimaryNode) {\n const prevAuxPoint = PointHelpers.createAuxiliaryPoint(prevPrimaryNode.val as Step, clickedNode.val as Step);\n store.insert(prevAuxPoint, prevPrimaryNode);\n }\n\n if (nextPrimaryNode) {\n const nextAuxPoint = PointHelpers.createAuxiliaryPoint(clickedNode.val as Step, nextPrimaryNode.val as Step);\n store.insert(nextAuxPoint, clickedNode);\n }\n };\n\n #onPrimaryPointMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n event.preventDefault();\n };\n\n #onMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, tiles, map } = this.#props;\n // right click\n if ((event.originalEvent as { button: number }).button === 2) {\n return;\n }\n const id = MapUtils.queryPointId(map, event.point);\n const node = store.findNodeById(id);\n if (node && node.val) {\n node.val.isAuxiliary = false;\n this.#addTwoAuxiliaryPoints(node);\n }\n tiles.render();\n };\n}\n","import type { EventsProps, LatLng, Step } from \"#types/index\";\nimport type { MapLayerMouseEvent, MapTouchEvent } from \"maplibre-gl\";\n\nimport { MapUtils, Spatial, throttle, uuidv4 } from \"#utils/helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { ListNode, StoreHelpers } from \"#store/index\";\n\nimport { FireEvents } from \"../helpers\";\nimport { PointHelpers, PointVisibility } from \"./helpers\";\nimport { FirstPoint } from \"./first-point\";\nimport { removeTransparentLine, addTransparentLine } from \"../tiles/helpers\";\nimport { AuxPoints } from \"./aux-points\";\nimport { StoreChangeEvent } from \"#store/types\";\nimport { DrawingModeChangeEvent } from \"../mode/types\";\n\nexport interface PrimaryPointEvents {\n onPointMouseEnter: (event: MapLayerMouseEvent) => void;\n onPointMouseLeave: (event: MapLayerMouseEvent) => void;\n onPointMouseDown: (event: MapLayerMouseEvent | MapTouchEvent) => void;\n onPointMouseUp: () => void;\n onMapMouseMove: (event: MapLayerMouseEvent) => void;\n}\n\nexport class PointEvents {\n #props: EventsProps;\n #startCoordinates: LatLng | null;\n #enteredStep: Step | null;\n #selectedNode: ListNode | null;\n #selectedIdx: number | null;\n #firstPoint: FirstPoint | null;\n #auxPoints: AuxPoints | null;\n #isThrottled: boolean;\n #lastEvent: MapLayerMouseEvent | null;\n #events: PrimaryPointEvents;\n\n constructor(props: EventsProps) {\n this.#props = props;\n this.#startCoordinates = null;\n this.#enteredStep = null;\n this.#selectedNode = null;\n this.#selectedIdx = null;\n this.#events = {\n onPointMouseEnter: this.#onPointMouseEnter,\n onPointMouseLeave: this.#onPointMouseLeave,\n onPointMouseDown: this.#onPointMouseDown,\n onPointMouseUp: this.#onPointMouseUp,\n onMapMouseMove: this.#onMapMouseMove,\n };\n this.#firstPoint = new FirstPoint(this.#props, this.#events);\n this.#auxPoints = new AuxPoints(this.#props, this.#events);\n this.#isThrottled = false;\n this.#lastEvent = null;\n }\n\n #initConsumers = () => {\n this.#props.mode.addObserver(this.#mapModeConsumer);\n this.#props.store.addObserver(this.#storeEventsConsumer);\n };\n\n #removeConsumers = () => {\n this.#props.mode.removeObserver(this.#mapModeConsumer);\n this.#props.store.removeObserver(this.#storeEventsConsumer);\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(\"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.#firstPoint?.initEvents();\n this.#initConsumers();\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(\"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.#firstPoint?.removeEvents();\n this.#auxPoints?.removeEvents();\n this.#removeConsumers();\n };\n\n #onMapDblClick = (event: MapLayerMouseEvent) => {\n event.preventDefault();\n };\n\n #recalculateAuxiliaryPoints = (clickedNode: ListNode | null) => {\n const { store } = this.#props;\n\n const nextAuxNode = clickedNode?.next;\n const prevAuxNode = clickedNode?.prev;\n const nextPrimaryNode = clickedNode?.next?.next;\n const prevPrimaryNode = clickedNode?.prev?.prev;\n\n if (nextAuxNode) {\n store.removeNodeById(nextAuxNode?.val?.id as string);\n }\n\n if (prevAuxNode) {\n store.removeNodeById(prevAuxNode?.val?.id as string);\n }\n\n // this is an edge case when we have only 3 main points, and the middle one is being deleted. TODO\n const isNonEdgeSize = store.size !== 3;\n\n if (nextPrimaryNode && prevPrimaryNode && isNonEdgeSize) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(nextPrimaryNode.val as Step, prevPrimaryNode.val as Step);\n store.insert(auxPoint, prevPrimaryNode as ListNode);\n }\n };\n\n #onPointRemove = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, tiles, options, mouseEvents } = this.#props;\n if (store.size === 1) {\n store.reset();\n } else {\n const id = MapUtils.queryPointId(this.#props.map, event.point);\n\n const clickedNode = store.findNodeById(id);\n const isPrimaryNode = !clickedNode?.val?.isAuxiliary;\n\n if (isPrimaryNode) {\n store.removeNodeById(id);\n if (options.pointGeneration === \"auto\") {\n this.#recalculateAuxiliaryPoints(clickedNode);\n }\n Spatial.switchToLineModeIfCan(this.#props);\n FireEvents.pointDoubleClick({ ...(clickedNode?.val as Step), total: store.size }, this.#props.map);\n if (StoreHelpers.isLastPoint(store, options, id)) {\n mouseEvents.lastPointMouseClick = true;\n mouseEvents.lastPointMouseUp = false;\n }\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, options, store, tiles } = 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 const nextStep = { ...event.lngLat, id: uuidv4() };\n if (options.pointGeneration === \"auto\" && store?.tail?.val && store.size >= 1) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(store.tail.val, nextStep);\n store.push(auxPoint);\n }\n const addedStep = PointHelpers.addPointToMap(event, this.#props);\n FireEvents.addPoint({ ...addedStep, total: store.size }, map, mode);\n PointVisibility.setSinglePointHidden(event);\n tiles.render();\n };\n\n #onMoveLeftClickUp = (event: MapLayerMouseEvent) => {\n const mouseLeftClickUp = event.originalEvent.buttons === 0;\n if (mouseLeftClickUp) {\n const { map } = this.#props;\n this.#onPointMouseUp();\n }\n };\n\n #getAuxPointsLatLng = (event: MapLayerMouseEvent) => {\n if (!this.#selectedNode) return null;\n\n const { options } = this.#props;\n const prevPrimary = this.#selectedNode?.prev?.prev;\n const nextPrimary = this.#selectedNode?.next?.next;\n\n if (options.pointGeneration === \"auto\") {\n return {\n next: nextPrimary ? PointHelpers.getMidpoint(nextPrimary?.val as LatLng, event.lngLat) : null,\n prev: prevPrimary ? PointHelpers.getMidpoint(event.lngLat, prevPrimary?.val as LatLng) : null,\n } as const;\n }\n return null;\n };\n\n #onMapMouseMove = throttle((event: MapLayerMouseEvent) => {\n const { mouseEvents } = this.#props;\n\n if (mouseEvents.pointMouseDown) {\n this.#lastEvent = event;\n\n requestAnimationFrame(() => {\n if (!this.#selectedNode || !this.#lastEvent) return;\n\n const { tiles } = this.#props;\n this.#onMoveLeftClickUp(this.#lastEvent);\n const auxPoints = this.#getAuxPointsLatLng(this.#lastEvent);\n tiles.renderOnMouseMove(this.#selectedIdx as number, event.lngLat, auxPoints);\n });\n }\n }, 17);\n\n #onPointMouseEnter = (event: MapLayerMouseEvent) => {\n const { mouseEvents, map, store, options } = this.#props;\n if (mouseEvents) {\n mouseEvents.pointMouseEnter = true;\n if (mouseEvents.pointMouseDown) return;\n }\n PointVisibility.setSinglePointHidden(event);\n const id = MapUtils.queryPointId(map, event.point);\n if (StoreHelpers.isLastPoint(store, options, 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, options } = 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, options, 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 #resetHelpers = () => {\n this.#selectedNode = null;\n this.#selectedIdx = null;\n this.#lastEvent = null;\n this.#startCoordinates = null;\n this.#enteredStep = null;\n this.#isThrottled = false;\n };\n\n #storeEventsConsumer = (event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\") {\n if (event.data.size === 0) {\n this.#resetHelpers();\n }\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n if (event.type === \"BREAK_CHANGED\" || event.type === \"MODE_CHANGED\") {\n this.#resetHelpers();\n }\n };\n\n #hideLastPointPanel = () => {\n const { store, panel, options } = this.#props;\n if (!this.#selectedNode || !this.#selectedNode.val) return;\n\n if (StoreHelpers.isLastPoint(store, options, this.#selectedNode.val.id)) {\n panel.hidePanel();\n }\n };\n\n #setSelectedNode = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, map } = this.#props;\n\n const id = MapUtils.queryPointId(map, event.point);\n const step = store.findNodeById(id);\n if (step) {\n this.#selectedNode = step;\n }\n };\n\n #onPointMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n this.#lastEvent = null;\n const { mouseEvents, map, store } = this.#props;\n if ((event.originalEvent as { button: number }).button === 2) {\n this.#onPointRemove(event);\n return;\n }\n\n this.#setSelectedNode(event);\n event.preventDefault();\n\n removeTransparentLine(map);\n this.#hideLastPointPanel();\n const point = MapUtils.queryPoint(map, event.point);\n this.#selectedIdx = Spatial.getGeometryIndex(store, point?.properties.id);\n\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 // we've got the reference to the selected node from the store and just updating the lat/lng when mouse up event happens\n #updateStore = () => {\n if (!this.#lastEvent) return;\n\n if (this.#selectedNode && this.#selectedNode.val) {\n this.#selectedNode.val.lat = this.#lastEvent?.lngLat.lat;\n this.#selectedNode.val.lng = this.#lastEvent.lngLat.lng;\n const auxPoints = this.#getAuxPointsLatLng(this.#lastEvent);\n\n if (auxPoints) {\n if (this.#selectedNode.prev?.val && auxPoints.prev) {\n this.#selectedNode.prev.val.lat = auxPoints.prev.lat;\n this.#selectedNode.prev.val.lng = auxPoints.prev.lng;\n }\n if (this.#selectedNode.next?.val && auxPoints.next) {\n this.#selectedNode.next.val.lat = auxPoints.next.lat;\n this.#selectedNode.next.val.lng = auxPoints.next.lng;\n }\n }\n }\n };\n\n #onPointMouseUp = () => {\n const { mouseEvents, store, panel, map, options } = this.#props;\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 mouseEvents.pointMouseUp = true;\n if (this.#selectedNode && this.#selectedNode.val) {\n if (this.#lastEvent) {\n this.#updateStore();\n this.#lastEvent = null;\n }\n store.notify({\n type: \"STORE_MUTATED\",\n data: store,\n });\n panel?.showPanel();\n\n FireEvents.movePoint(\n {\n id: this.#selectedNode.val.id,\n total: store.size,\n end: { lat: this.#selectedNode.val.lat, lng: this.#selectedNode.val.lng },\n start: this.#startCoordinates as LatLng,\n },\n map,\n );\n this.#selectedIdx = null;\n this.#selectedNode = null;\n }\n if (mouseEvents) {\n mouseEvents.pointMouseDown = false;\n }\n\n addTransparentLine(map, options);\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/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.#panelEvents?.initConsumers();\n this.#pointEvents?.initEvents();\n };\n\n #removeDrawEvents = () => {\n this.#panelEvents?.removeEvents();\n this.#panelEvents?.removeConsumers();\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.getClosedGeometry();\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 { CustomMap } from \"#types/map\";\n\nimport { debounce, Spatial } from \"#utils/helpers\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport type { Store } from \"#store/index\";\n\nimport type { MouseEvents } from \"../mouse-events\";\nimport type { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport { CURSORS, type TCursor } from \"./constants\";\nimport type { RequiredDrawOptions } from \"#types/index\";\n\ninterface CursorProps {\n map: CustomMap;\n mode: DrawingMode;\n mouseEvents: MouseEvents;\n store: Store;\n options: RequiredDrawOptions;\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 = debounce(() => {\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 }, 10);\n\n handleFirstPointMouseEnter = debounce(() => {\n const { store, options } = this.#props;\n\n if (Spatial.canCloseGeometry(store, options)) {\n this.set(CURSORS.POINTER);\n }\n }, 10);\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, store, options } = 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 if (!Spatial.isClosedGeometry(store, options)) {\n this.set(CURSORS.POINTER);\n }\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 AUXILIARY_POINT_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 and 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 pointGeneration: options.pointGeneration ?? DEFAULT_OPTIONS.pointGeneration,\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: options?.modes?.line?.closeGeometry ?? 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 auxiliaryPoint: {\n \"circle-radius\":\n options.layersPaint?.auxiliaryPoint?.[\"circle-radius\"] || AUXILIARY_POINT_PAINT_BASE[\"circle-radius\"],\n \"circle-color\":\n options.layersPaint?.auxiliaryPoint?.[\"circle-color\"] || AUXILIARY_POINT_PAINT_BASE[\"circle-color\"],\n \"circle-stroke-color\":\n options.layersPaint?.auxiliaryPoint?.[\"circle-stroke-color\"] ||\n AUXILIARY_POINT_PAINT_BASE[\"circle-stroke-color\"],\n \"circle-stroke-width\":\n options.layersPaint?.auxiliaryPoint?.[\"circle-stroke-width\"] ||\n AUXILIARY_POINT_PAINT_BASE[\"circle-stroke-width\"],\n ...options.layersPaint?.auxiliaryPoint,\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, CustomMap } from \"#types/map\";\n\nimport type { DrawOptions, LatLng, RequiredDrawOptions, Step, StepId } from \"#types/index\";\nimport { Panel } from \"#components/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: CustomMap) => {\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({\n map,\n mode: this.#mode,\n mouseEvents: this.#mouseEvents,\n store: this.#store,\n options: this.#defaultOptions,\n });\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\n if (this.#mode.getMode()) {\n map.fire(\"mode:initialize\");\n }\n\n this.#mode.pingConsumers();\n this.#store.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 for (const step of value) {\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.\n *\n * @param id - The ID of the step to retrieve.\n * @returns The step with the specified ID, or null if not found.\n */\n findStepById = (id: StepId) => {\n return this.#store?.findStepById(id);\n };\n\n /**\n * Retrieves a node from the store by its ID.\n *\n * @param id - The ID of the node to retrieve.\n * @returns The node with the specified ID, or null if not found.\n */\n findNodeById = (id: StepId) => {\n return this.#store?.findNodeById(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 *\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/panel/index.ts","../src/utils/geo_constants.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/components/map/points/helpers.ts","../src/utils/observable.ts","../src/store/errors.ts","../src/store/index.ts","../src/components/panel/events.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/tiles/helpers.ts","../src/components/map/points/first-point.ts","../src/components/map/points/aux-points.ts","../src/components/map/points/point-state.ts","../src/components/map/points/point-topology-manager.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","#init","#applyPanelStyles","store","coordinates","point","#pointPositionUpdate","#updatePanelPositionOnMapMove","mapRect","x","y","offset","#removeMapEventListeners","#createButton","title","size","button","locale","undo","deleteButton","save","panelSize","LINE_BASE","ELAYERS","ESOURCES","FIRST_POINT_RADIUS","FIRST_POINT_COLOR","FIRST_POINT_PAINT_BASE","AUXILIARY_POINT_PAINT_BASE","ON_LINE_POINT_PAINT_BASE","POLYGON_PAINT_BASE","LINE_PAINT_BASE","POINTS_PAINT_BASE","BREAK_PAINT_BASE","generateLayersToRender","MapUtils","event","layerIds","layer","map","coords","lat","lng","GeometryFactory","#collectGeometryCoordinates","current","visitedNodes","next","pointFeatures","val","head","points","lines","polygons","Spatial","_Spatial","id","idx","point1","point2","A","B","P","distanceAB","distanceAP","distancePB","mode","args","isCircle","uuidv4","getRandomHexChar","getUuidSection","length","section","getUuidSectionSize","firstElement","lastElement","parts","throttle","fn","delay","lastArgs","shouldCall","execute","debounce","timeout","Tiles","#unifiedGeoJSON","#addSources","#addLayers","#swapLayers","#initConsumers","#polygonVisibility","#removeConsumers","source","LAYERS_TO_RENDER","beneathLayerId","aboveLayerId","beneath","above","#removeSources","#removeLayers","featureIdx","newCoord","line","polygon","feature","aux","prevIdx","unifiedSource","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","MOBILE_WIDTH","DEFAULT_OPTIONS","FireEvents","step","originalEvent","context","steps","ControlObserver","#mapModeConsumer","#resetAllState","_line","_polygon","_break","#checkActive","#observeModeChange","data","#enableButton","#disableButton","#observeGeometryChange","ControlEvents","#tooltip","#observer","#initEvents","control","#removeEvents","label","placement","#removeActiveClass","#initialize","tiles","PointHelpers","p1","p2","mid","PointVisibility","PointsFilter","Observable","observer","ERRORS","ListNode","prev","Store","list","StoreHelpers","newNode","_StoreHelpers","#generateIdForSteps","stepsWithoutIds","initialSteps","closeGeometry","pointGeneration","auxPoint","initialOptions","generateId","result","PanelEvents","#storeEventsConsumer","panel","#onUndoClick","#onRemoveAll","#getButtonLabel","#removeStep","isOnLine","visited","aPixel","bPixel","eventPixel","insertStepIfOnLine","currentStep","updateUIAfterInsert","checkIfPointClicked","LINE_BREAK_THROTTLE_TIME","LineBreakEvents","#current","#throttledOnLineEnter","#onLineEnterBreak","#geometryBreakOnClick","#onLineLeave","#getAutoGenerationPoints","#getLinePoints","lineSource","lineBreakData","LINE_DYNAMIC_THROTTLE_TIME","DynamicLineEvents","#visible","#firstPoint","#secondPoint","#lineFeature","#throttledOnLineMove","#debouncedDynamicLine","#onLineMove","#dynamicLineVisibility","#mouseEventsConsumer","isClosed","#onMapClick","#onRightClickRemove","#renderLineOnMouseMove","lineClick","latLng","LINE_TRANSPARENT_THROTTLE_TIME","TransparentLineEvents","#isThrottled","#lastEvent","#onLineAdd","#onLineEnter","#processMouseMove","pointSource","mouseEvents","LineEvents","#break","#transparent","#dynamic","#type","#initDynamicLine","firstPointCircleRadius","defaultPointCircleRadius","togglePointCircleRadius","removeTransparentLine","addTransparentLine","transparentLayer","FirstPoint","#mouseDown","#events","baseEvents","#storeConsumer","#initBaseEvents","#onFirstPointClick","#onFirstPointMouseEnter","#onFirstPointMouseLeave","#onFirstPointMouseUp","#onFirstPointMouseDown","#removeBaseEvents","#getTitle","X_OFFSET","AuxPoints","#onMouseDown","#onPrimaryPointMouseDown","#addTwoAuxiliaryPoints","clickedNode","nextPrimaryNode","prevPrimaryNode","prevAuxPoint","nextAuxPoint","PointState","PointTopologyManager","state","auxPoints","prevCoords","nextCoords","lastEvent","selectedNode","prevPrimary","nextPrimary","nextStep","nextAuxNode","prevAuxNode","isNonEdgeSize","PointEvents","#onPointMouseEnter","#onPointMouseLeave","#onPointMouseDown","#onPointMouseUp","#onMapMouseMove","#onMapDblClick","#onPointClick","#onPointRemove","#onOwnGeometryLayersClick","addedStep","#onMoveLeftClickUp","#hideLastPointPanel","#setSelectedNode","geometryIndex","startCoordinates","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","#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 { CustomMap } from \"#types/map\";\nimport type { LatLng, PanelImpl, Point, RequiredDrawOptions } from \"#types/index\";\nimport { DOM } from \"#utils/dom\";\nimport type { Store } from \"#store/index\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport \"./panel.css\";\n\ninterface IProps {\n map: CustomMap;\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.#init();\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 #init = () => {\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 if (this.#isHidden) {\n this.showPanel();\n }\n const point = this.#props.map.project(coordinates);\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 - 4}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 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 = (\n type: \"undo\" | \"save\" | \"delete\",\n title: string,\n size: PanelImpl[\"size\"],\n container: HTMLElement,\n ) => {\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 AuxiliaryPointLayer: \"mdl-auxiliary-point-layer\",\n} as const;\n\nexport const ESOURCES = {\n UnifiedSource: \"mdl-unified-source\",\n LineDynamicSource: \"mdl-line-dynamic-source\",\n LineSourceBreak: \"mdl-line-source-break\",\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 AUXILIARY_POINT_PAINT_BASE = {\n \"circle-radius\": FIRST_POINT_RADIUS.default - 1.5,\n \"circle-color\": \"#FEFFFE\",\n \"circle-stroke-color\": \"#666666\",\n \"circle-stroke-width\": 2,\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.UnifiedSource,\n type: \"fill\",\n paint: options.layersPaint.polygon,\n layout: {\n visibility: \"none\",\n },\n filter: [\"==\", \"$type\", \"Polygon\"],\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.UnifiedSource,\n type: \"line\",\n paint: options.layersPaint.line,\n layout: {\n visibility: \"visible\",\n },\n filter: [\"==\", \"$type\", \"LineString\"],\n },\n {\n id: ELAYERS.LineLayerTransparent,\n source: ESOURCES.UnifiedSource,\n type: \"line\",\n paint: {\n \"line-width\": 4,\n \"line-color\": \"transparent\",\n },\n filter: [\"==\", \"$type\", \"LineString\"],\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.UnifiedSource,\n type: \"circle\",\n paint: options.layersPaint.points,\n filter: [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"isFirst\", false], [\"==\", \"isAuxiliary\", false]],\n },\n {\n id: ELAYERS.FirstPointLayer,\n source: ESOURCES.UnifiedSource,\n type: \"circle\",\n paint: options.layersPaint.firstPoint,\n filter: [\"==\", [\"get\", \"isFirst\"], true],\n layout: {\n visibility: \"none\",\n },\n },\n {\n id: ELAYERS.AuxiliaryPointLayer,\n source: ESOURCES.UnifiedSource,\n type: \"circle\",\n paint: options.layersPaint.auxiliaryPoint,\n filter: [\"==\", [\"get\", \"isAuxiliary\"], true],\n },\n ] satisfies AddLayerObject[];\n};\n","import type { MapLayerMouseEvent, MapMouseEvent } from \"maplibre-gl\";\nimport type { LatLng, Point, Uuid, EventsProps, RequiredDrawOptions } from \"#types/index\";\nimport type { CustomMap } from \"#types/map\";\n\nimport type { ListNode, Store } from \"#store/index\";\n\nimport type { DrawingMode } from \"#components/map/mode\";\nimport { ELAYERS } 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: CustomMap, coords: LatLng) => {\n const { lat, lng } = coords;\n return map.project([lng, lat]);\n };\n\n static queryPointId = (map: CustomMap, point: MapMouseEvent[\"point\"]) => {\n const query = map.queryRenderedFeatures(point, {\n layers: [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer, ELAYERS.AuxiliaryPointLayer, ELAYERS.SinglePointLayer],\n });\n\n const id = query?.[0]?.properties.id;\n return id;\n };\n\n static queryPoint = (map: CustomMap, point: MapMouseEvent[\"point\"]) => {\n const query = map.queryRenderedFeatures(point, {\n layers: [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer, ELAYERS.AuxiliaryPointLayer, ELAYERS.SinglePointLayer],\n });\n return query?.[0];\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 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 getAllLines(coordinates: number[][]) {\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 getPolygon(coordinates: number[][]) {\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, isAuxiliary: val.isAuxiliary },\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 // CAUTION: render is dependent on this function\n static getUnifiedFeatures(\n store: Store,\n ): GeoJSON.FeatureCollection<GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.Point> {\n const points = this.getPoints(store).features;\n const coordinates = this.#collectGeometryCoordinates(store);\n\n const lines = this.getAllLines(coordinates).features;\n const polygons = this.getPolygon(coordinates).features;\n\n return {\n type: \"FeatureCollection\",\n features: [...points, ...lines, ...polygons],\n } as GeoJSON.FeatureCollection<GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.Point>;\n }\n}\n\nexport class Spatial {\n static getGeometryIndex = (store: Store, id: Uuid) => {\n let current = store.head;\n let idx = 0;\n const visitedNodes = new Set();\n while (current !== null) {\n if (visitedNodes.has(current.val?.id)) {\n break;\n }\n if (current.val?.id === id) {\n return idx;\n }\n\n visitedNodes.add(current.val?.id);\n idx++;\n current = current.next;\n }\n return -1;\n };\n\n // √(x1−x2)²+(y1−y2)²\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, options: RequiredDrawOptions) => {\n if (options.pointGeneration === \"auto\") {\n return store.tail?.next?.val?.id === store.head?.val?.id && store.tail?.next !== null;\n }\n return store.tail?.next === store.head;\n };\n\n // when we have 1 primary <--- 1 aux <--- 1 primary current will be an aux when 1 prim <--- 1 aux and a primary 1 aux <--- 1 prim\n // [aux] [primary]\n static breakGeometry = (store: Store, options: RequiredDrawOptions, current: ListNode) => {\n if (!store.head) return;\n\n if (options.pointGeneration === \"auto\") {\n // if the current node is an aux, then we need to make one step back for the tail and the head is the next node from the aux point\n if (current.val?.isAuxiliary) {\n store.head = current.next as ListNode;\n store.head.prev = null;\n store.tail = current.prev as ListNode;\n store.tail.next = null;\n } else {\n // else the tail is the current node and for the head we need to jump over the aux point so the next.next\n store.head = current.next?.next as ListNode;\n store.head.prev = null;\n store.tail = current;\n store.tail.next = null;\n }\n store.size = store.size - 1;\n } else {\n // no aux here, so the tail is the current node and the head is the next node\n store.head = current.next as ListNode;\n store.head.prev = null;\n store.tail = current;\n store.tail.next = null;\n }\n };\n\n static closeGeometry = (store: Store, mode: DrawingMode) => {\n if (store.tail && store.head) {\n store.tail.next = store.head;\n store.head.prev = store.tail;\n }\n mode.setClosedGeometry(true);\n };\n\n static canCloseGeometry = (store: Store, options: RequiredDrawOptions) => {\n const storeSize = options.pointGeneration === \"auto\" ? store.size > 3 : store.size > 2;\n return storeSize && !this.isClosedGeometry(store, options);\n };\n\n static canBreakClosedGeometry = (store: Store, options: RequiredDrawOptions) => {\n if (options.pointGeneration === \"auto\") {\n return store.size <= 3;\n }\n\n return store.size <= 2;\n };\n\n static switchToLineModeIfCan = (args: EventsProps) => {\n const { store, map, mode, options } = args;\n\n const isCircle = store.tail?.next === store.head;\n const canBreakGeometry = Spatial.canBreakClosedGeometry(store, options);\n\n if (canBreakGeometry && isCircle) {\n if (options.pointGeneration === \"auto\") {\n if (store.tail?.val?.isAuxiliary) {\n if (store.head) {\n store.head.next = store.tail;\n store.head.prev = null;\n }\n if (store.tail && store.tail.prev && store.head) {\n store.tail = store.tail.prev;\n store.tail.prev = store.head.next;\n store.tail.next = null;\n }\n if (store.head?.next) {\n store.head.next.next = store.tail;\n store.head.next.prev = store.head;\n }\n } else {\n if (store.head) {\n store.head.prev = null;\n }\n if (store.tail && store.head) {\n store.tail.prev = store.head.next;\n store.tail.next = null;\n }\n }\n } else {\n if (store.tail) {\n store.tail.next = null;\n }\n }\n mode.reset();\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 { CustomMap } from \"#types/map\";\nimport type { Store } from \"#store/index\";\nimport { ELAYERS, ESOURCES, generateLayersToRender } from \"#utils/geo_constants\";\nimport { debounce, GeometryFactory, Spatial } from \"#utils/helpers\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport type { StoreChangeEvent } from \"#store/types\";\n\ninterface IProps {\n map: CustomMap;\n store: Store;\n options: RequiredDrawOptions;\n mode: DrawingMode;\n}\n\nexport class Tiles {\n #props: IProps;\n #unifiedGeoJSON: GeoJSON.FeatureCollection<GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.Point>;\n\n constructor(props: IProps) {\n this.#props = props;\n this.#unifiedGeoJSON = GeometryFactory.getUnifiedFeatures(this.#props.store);\n\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 this.#initConsumers();\n }\n\n #initConsumers = () => {\n const { store } = this.#props;\n store.addObserver(this.#polygonVisibility);\n };\n\n #removeConsumers = () => {\n const { store } = this.#props;\n store.removeObserver(this.#polygonVisibility);\n };\n\n #polygonVisibility = debounce((event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\" || event.type === \"STORE_DETACHED\") {\n const { map, mode, options, store } = this.#props;\n const isPolygon = mode.getMode() === \"polygon\";\n if (isPolygon && Spatial.isClosedGeometry(store, options)) {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n } else {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"none\");\n }\n }\n }, 10);\n\n #addSources = () => {\n const { map } = this.#props;\n for (const source of Object.values(ESOURCES)) {\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, options } = this.#props;\n\n const LAYERS_TO_RENDER = generateLayersToRender(options);\n\n for (const layer of LAYERS_TO_RENDER) {\n if (!map.getLayer(layer.id)) {\n map.addLayer(layer);\n }\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 for (const source of Object.values(ESOURCES)) {\n if (map.getSource(source)) {\n map.removeSource(source);\n }\n }\n };\n\n #removeLayers = () => {\n const { map } = this.#props;\n\n for (const layer of Object.values(ELAYERS)) {\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 this.#removeConsumers();\n };\n\n private updateLine(featureIdx: number, newCoord: LatLng) {\n const { mode } = this.#props;\n\n // -2 because line is always the second to last feature. Check GeometryFactory.getUnifiedFeatures\n const line = this.#unifiedGeoJSON.features.at(-2)?.geometry.coordinates;\n if (!line) return;\n line[featureIdx] = [newCoord.lng, newCoord.lat];\n\n if (mode.getClosedGeometry() && featureIdx === 0) {\n line[line.length - 1] = [newCoord.lng, newCoord.lat];\n }\n }\n\n private updatePolygon(featureIdx: number, newCoord: LatLng) {\n const { mode } = this.#props;\n\n // -1 because line is always the last feature. Check GeometryFactory.getUnifiedFeatures\n const polygon = this.#unifiedGeoJSON.features.at(-1)?.geometry.coordinates[0] as number[][];\n if (!polygon) return;\n polygon[featureIdx] = [newCoord.lng, newCoord.lat];\n\n if (mode.getClosedGeometry() && featureIdx === 0) {\n polygon[polygon.length - 1] = [newCoord.lng, newCoord.lat];\n }\n }\n\n private updatePoint(featureIdx: number, newCoord: LatLng) {\n // points are always the first feature. Check GeometryFactory.getUnifiedFeatures\n const feature = this.#unifiedGeoJSON?.features?.[featureIdx];\n if (feature?.geometry?.coordinates) {\n feature.geometry.coordinates = [newCoord.lng, newCoord.lat];\n }\n }\n\n renderOnMouseMove = (\n featureIdx: number,\n newCoord: LatLng,\n aux: { next: LatLng | null; prev: LatLng | null } | null,\n ) => {\n const { mode, options, store } = this.#props;\n // if the selected index is the first one then the prev index is the store.size - 1\n const prevIdx = featureIdx === 0 ? store.size - 1 : featureIdx - 1;\n\n this.updatePoint(featureIdx, newCoord);\n if (aux && aux.prev) {\n this.updatePoint(prevIdx, aux.prev);\n }\n if (aux && aux.next) {\n this.updatePoint(featureIdx + 1, aux.next);\n }\n\n this.updateLine(featureIdx, newCoord);\n if (aux && aux.prev) {\n this.updateLine(prevIdx, aux.prev);\n }\n if (aux && aux.next) {\n this.updateLine(featureIdx + 1, aux.next);\n }\n\n const polygonOptionChecked = options.modes.polygon.visible;\n\n if (polygonOptionChecked && mode.isPolygon()) {\n this.updatePolygon(featureIdx, newCoord);\n if (aux && aux.prev) {\n this.updatePolygon(prevIdx, aux.prev);\n }\n if (aux && aux.next) {\n this.updatePolygon(featureIdx + 1, aux.next);\n }\n }\n\n const unifiedSource = this.#props.map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n if (unifiedSource) {\n unifiedSource.setData(this.#unifiedGeoJSON);\n }\n };\n\n render() {\n this.#unifiedGeoJSON = GeometryFactory.getUnifiedFeatures(this.#props.store);\n const unifiedSource = this.#props.map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n\n if (unifiedSource) {\n unifiedSource.setData(this.#unifiedGeoJSON);\n }\n }\n\n resetGeometries = () => {\n const unifiedSource = this.#props.map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n if (unifiedSource) {\n unifiedSource.setData({\n type: \"FeatureCollection\",\n features: [],\n });\n }\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 RIGHTCLICKREMOVE: \"mdl:rightclickremove\",\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 pointGeneration: \"manual\",\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 the line\",\n createPolygon: \"Create a polygon\",\n },\n};\n","import type { CustomMap } from \"#types/map\";\nimport type { LatLng, StepId, Step, EventsProps } from \"#types/index\";\nimport { EVENTS } from \"#utils/constants\";\nimport type { DrawingMode } from \"./mode\";\nimport type { Mode } from \"./mode/types\";\n\nexport class FireEvents {\n static addPoint(step: Step & { total: number }, map: CustomMap, 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: CustomMap) {\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 pointRemoveRightClick(step: Step & { total: number }, map: CustomMap) {\n map.fire(EVENTS.RIGHTCLICKREMOVE, {\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: CustomMap) {\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: CustomMap) {\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: CustomMap, 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: CustomMap, mode: Mode | \"break\") {\n map.fire(EVENTS.MODECHANGED, {\n mode,\n });\n }\n static removeAllPoints(map: CustomMap, 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: CustomMap) {\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 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","import type { MapLayerMouseEvent } from \"maplibre-gl\";\nimport type { EventsProps, Step } from \"#types/index\";\n\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { uuidv4 } from \"#utils/helpers\";\n\nimport { CustomMap } from \"#types/map\";\n\nexport const PointHelpers = {\n getMidpoint(p1: { lat: number; lng: number }, p2: { lat: number; lng: number }) {\n return {\n lat: (p1.lat + p2.lat) / 2,\n lng: (p1.lng + p2.lng) / 2,\n };\n },\n\n createAuxiliaryPoint(p1: Step, p2: Step) {\n const mid = PointHelpers.getMidpoint(p1, p2);\n const step = { lat: mid.lat, lng: mid.lng, isAuxiliary: true, id: uuidv4() };\n return step;\n },\n\n addPointToMap(event: MapLayerMouseEvent, props: EventsProps) {\n const { store } = props;\n\n const step = { ...event.lngLat, isAuxiliary: false, id: uuidv4() };\n store.push(step);\n return step;\n },\n};\n\nexport const PointVisibility = {\n setFirstPointVisible(map: CustomMap) {\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"visible\");\n },\n\n setFirstPointHidden(map: CustomMap) {\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"none\");\n },\n\n setSinglePointVisible(event: MapLayerMouseEvent) {\n const map = event.target;\n map.setLayoutProperty(ELAYERS.SinglePointLayer, \"visibility\", \"visible\");\n },\n\n setSinglePointHidden(event: MapLayerMouseEvent) {\n const map = event.target;\n setTimeout(() => {\n map.setLayoutProperty(ELAYERS.SinglePointLayer, \"visibility\", \"none\");\n }, 33);\n },\n};\n\nexport const PointsFilter = {\n default(map: CustomMap) {\n map.setFilter(ELAYERS.PointsLayer, [\n \"all\",\n [\"==\", \"$type\", \"Point\"],\n [\"==\", \"isFirst\", false],\n [\"==\", \"isAuxiliary\", false],\n ]);\n },\n closedGeometry(map: CustomMap) {\n map.setFilter(ELAYERS.PointsLayer, [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"isAuxiliary\", false]]);\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 { PointHelpers } from \"#components/map/points/helpers\";\nimport 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 prev: ListNode | null;\n next: ListNode | null;\n constructor(val: Step | null = null, next: ListNode | null = null, prev: ListNode | null = null) {\n this.val = val;\n this.prev = prev;\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 map: Map<StepId, ListNode>;\n\n constructor(options?: RequiredDrawOptions) {\n super();\n let list = StoreHelpers.initStore(options);\n this.map = list ? list.map : new Map<StepId, ListNode>();\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 newNode.prev = this.tail;\n this.tail.next = newNode;\n this.tail = newNode;\n }\n this.map.set(step.id, newNode);\n this.size++;\n this.pingConsumers();\n }\n\n insert(step: Step, current: ListNode) {\n if (!current) return;\n const newNode = new ListNode(step);\n newNode.prev = current;\n newNode.next = current.next;\n\n const betweenHeadAndTail = this.tail === current && this.head === current.next;\n if (betweenHeadAndTail) {\n this.tail = newNode;\n }\n\n if (current.next) {\n current.next.prev = newNode;\n }\n\n current.next = newNode;\n this.map.set(step.id, newNode);\n this.size++;\n this.pingConsumers();\n }\n\n findStepById(id: StepId): ListNode[\"val\"] | null {\n const node = this.map.get(id);\n return node ? node.val : null;\n }\n\n findNodeById(id: StepId): ListNode | null {\n const node = this.map.get(id);\n return node ? node : null;\n }\n\n removeNodeById(id: StepId): ListNode | null {\n const node = this.map.get(id);\n if (!node) return null;\n\n if (this.size === 1) {\n this.head = null;\n this.tail = null;\n } else {\n if (node.prev) {\n node.prev.next = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n }\n\n if (node === this.head) {\n this.head = node.next;\n if (this.head?.prev && this.tail) this.tail.next = this.head;\n }\n\n if (node === this.tail) {\n this.tail = node.prev;\n if (this.head && this.tail?.next) this.head.prev = this.tail;\n }\n }\n\n this.map.delete(id);\n this.size--;\n this.pingConsumers();\n\n return node;\n }\n\n reset() {\n this.head = null;\n this.tail = null;\n this.size = 0;\n this.map.clear();\n this.pingConsumers();\n }\n\n pingConsumers = () => {\n this.notify({\n type: \"STORE_MUTATED\",\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, options: RequiredDrawOptions, id: StepId): boolean => {\n if (options.pointGeneration === \"auto\" && store.tail?.next === store.head) {\n return store.tail?.prev?.val?.id === id;\n }\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 return StoreHelpers.fromArray(options.initial, options.pointGeneration);\n }\n\n return null;\n }\n\n static #generateIdForSteps = (stepsWithoutIds: LatLng[]): Step[] => {\n return stepsWithoutIds.map((step, idx) => {\n return { ...step, isAuxiliary: false, isFirst: idx === 0, id: uuidv4() };\n });\n };\n\n static buildStepSequence(\n initialSteps: Step[],\n closeGeometry: Initial[\"closeGeometry\"],\n pointGeneration: RequiredDrawOptions[\"pointGeneration\"],\n ): Store {\n const list = new Store();\n const steps = closeGeometry ? initialSteps.slice(0, -1) : initialSteps;\n\n steps.forEach((step, idx) => {\n list.push(step);\n\n // if we are at the end of the array and there's no next point\n // we need to create an auxiliary point with the first point\n // to close the geometry\n if (pointGeneration === \"auto\") {\n const isNextPointAvailable = steps[idx + 1];\n if (isNextPointAvailable) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(step, steps[idx + 1] as Step);\n list.push(auxPoint);\n } else if (closeGeometry) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(step, steps[0] as Step);\n list.push(auxPoint);\n }\n }\n });\n return list;\n }\n\n static fromArray(initialOptions: Initial, pointGeneration: RequiredDrawOptions[\"pointGeneration\"]): Store | null {\n const { steps: initialSteps, closeGeometry, generateId } = initialOptions;\n const steps = generateId ? this.#generateIdForSteps(initialSteps) : initialSteps;\n const list = this.buildStepSequence(steps as Step[], closeGeometry, pointGeneration);\n\n if (closeGeometry && list.tail && list.head) {\n list.tail.next = list.head;\n list.head.prev = list.tail;\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, StepId } from \"#types/index\";\nimport type { 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 { ELAYERS } from \"#utils/geo_constants\";\nimport { PointHelpers } from \"#components/map/points/helpers\";\nimport type { StoreChangeEvent } from \"#store/types\";\nimport type { DrawingModeChangeEvent } from \"#components/map/mode/types\";\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 initConsumers() {\n this.#props.store.addObserver(this.#storeEventsConsumer);\n this.#props.mode?.addObserver(this.#mapModeConsumer);\n }\n\n removeConsumers() {\n this.#props.store.removeObserver(this.#storeEventsConsumer);\n this.#props.mode?.removeObserver(this.#mapModeConsumer);\n }\n\n #storeEventsConsumer = (event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\") {\n const { data } = event;\n if (data.size === 0) {\n this.#props.panel.hidePanel();\n } else {\n let current = Object.assign({}, data);\n while (current.tail) {\n if (current.tail?.val?.isAuxiliary) {\n current.tail = current.tail?.prev;\n } else {\n if (current.tail?.val) {\n this.#props.panel.setPanelLocation({\n lat: current.tail.val.lat,\n lng: current.tail.val.lng,\n });\n }\n break;\n }\n }\n }\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.#props;\n const { type, data } = event;\n if (type === \"MODE_CHANGED\" && !data) {\n this.#props.panel.hidePanel();\n }\n if (type === \"MODE_CHANGED\" && data) {\n if (store.tail?.val) {\n this.#props.panel.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n }\n };\n\n initEvents() {\n const { panel } = this.#props;\n\n if (panel._undoButton) {\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\n if (panel._deleteButton) {\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._saveButton) {\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._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\n if (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\n if (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: Record<ButtonType, string> = {\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 this.#tooltip.remove();\n tiles.resetGeometries();\n FireEvents.removeAllPoints(map, event);\n };\n\n #removeStep = () => {\n const { store, options } = this.#props;\n\n // Remove the last point\n store.removeNodeById(store.tail?.val?.id as StepId);\n // if we are in aux mode then remove 2 aux points and then add 1 aux point between the 2 points\n if (options.pointGeneration === \"auto\") {\n store.removeNodeById(store.tail?.val?.id as StepId);\n if (store.tail?.val?.isAuxiliary) {\n store.removeNodeById(store.tail?.val?.id);\n if (!Spatial.canBreakClosedGeometry(store, options)) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(store.tail.val, store.head?.val as Step);\n store.push(auxPoint);\n }\n store.tail.next = store.head;\n }\n }\n };\n\n #onUndoClick = (event: Event) => {\n const { store, map, tiles, options } = this.#props;\n if (store.size == 1) {\n store.reset();\n }\n\n this.#removeStep();\n Spatial.switchToLineModeIfCan(this.#props);\n this.#tooltip.remove();\n const step = { ...(store.tail?.val as Step), total: store.size };\n FireEvents.undoPoint(step, map, event);\n 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 } from \"maplibre-gl\";\nimport type { EventsProps, Step } from \"#types/index\";\nimport type { CustomMap } from \"#types/map\";\n\nimport type { Store } from \"#store/index\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { MapUtils, Spatial, uuidv4 } from \"#utils/helpers\";\nimport { PointVisibility } 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?.val && current?.val) {\n const map = event.target as CustomMap;\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, isAuxiliary: false, 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 } = context;\n if (store.tail?.val) {\n PointVisibility.setSinglePointHidden(event);\n tiles.render();\n }\n};\n\nexport const checkIfPointClicked = (event: MapLayerMouseEvent) => {\n return MapUtils.isFeatureTriggered(event, [\n ELAYERS.PointsLayer,\n ELAYERS.FirstPointLayer,\n ELAYERS.AuxiliaryPointLayer,\n ]);\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 #geometryBreakOnClick = () => {\n const { store, mode, map, tiles, options } = this.props;\n\n if (!this.#current) return;\n\n Spatial.breakGeometry(store, options, this.#current);\n this.#onLineLeave();\n mode.reset();\n tiles.render();\n store.notify({\n type: \"STORE_DETACHED\",\n data: null,\n });\n FireEvents.onLineBreak(map);\n };\n\n #getAutoGenerationPoints = (line: ListNode | null) => {\n let current: [number, number] | null = null;\n let next: [number, number] | null = null;\n\n if (line?.val?.isAuxiliary) {\n current = [line?.prev?.val?.lng, line?.prev?.val?.lat] as [number, number];\n next = [line?.next?.val?.lng, line?.next?.val?.lat] as [number, number];\n } else {\n current = [line?.val?.lng, line?.val?.lat] as [number, number];\n next = [line?.next?.next?.val?.lng, line?.next?.next?.val?.lat] as [number, number];\n }\n return { current, next };\n };\n\n #getLinePoints = (line: ListNode | null) => {\n const { options } = this.props;\n if (options.pointGeneration === \"manual\") {\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 return { current, next };\n }\n\n return this.#getAutoGenerationPoints(line);\n };\n\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 const { current, next } = this.#getLinePoints(this.#current);\n\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 { GeoJSONSource, MapLayerMouseEvent, PointLike } from \"maplibre-gl\";\n\nimport type { EventsProps, LatLng, Step } from \"#types/index\";\nimport { ELAYERS, ESOURCES, LINE_BASE } from \"#utils/geo_constants\";\nimport type { StoreChangeEvent } from \"#store/types\";\nimport { GeometryFactory, MapUtils, Spatial, throttle, debounce } from \"#utils/helpers\";\nimport { EVENTS } from \"#utils/constants\";\n\nimport type { DrawingModeChangeEvent } from \"../mode/types\";\nimport type { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport type { PointRightClickRemoveEvent, 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 #debouncedDynamicLine: (data: StoreChangeEvent[\"data\"]) => 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 this.#debouncedDynamicLine = debounce(this.#dynamicLineVisibility, 10);\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 #dynamicLineVisibility = (data: StoreChangeEvent[\"data\"]) => {\n const { store, options } = this.#props;\n if (data?.tail?.val && !Spatial.isClosedGeometry(store, options)) {\n this.#firstPoint = store.tail?.val as Step;\n this.showDynamicLine();\n }\n };\n\n #storeEventsConsumer = (event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\") {\n this.#debouncedDynamicLine(event.data);\n if (!event.data.size) {\n this.hideDynamicLine();\n }\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.#props;\n\n const isClosed = event.data;\n if (event.type === \"CLOSED_GEOMETRY_CHANGED\") {\n if (isClosed) {\n this.hideDynamicLine();\n }\n\n if (!isClosed && store?.tail?.val) {\n this.#firstPoint = store?.tail?.val;\n this.showDynamicLine();\n }\n }\n };\n\n initDynamicEvents = () => {\n const { map } = this.#props;\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.RIGHTCLICKREMOVE, this.#onRightClickRemove);\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.RIGHTCLICKREMOVE, this.#onRightClickRemove);\n };\n\n hideDynamicLine = () => {\n const { map } = this.#props;\n\n this.#firstPoint = null;\n this.#secondPoint = null;\n this.#lineFeature = null;\n map.off(\"mousemove\", this.#throttledOnLineMove);\n\n const lineSource = map.getSource(ESOURCES.LineDynamicSource) as GeoJSONSource;\n if (lineSource) {\n lineSource.setData(LINE_BASE as GeoJSON.FeatureCollection);\n }\n map.setLayoutProperty(ELAYERS.LineDynamicLayer, \"visibility\", \"none\");\n };\n\n showDynamicLine = () => {\n const { map, store } = this.#props;\n\n if (\n store.size &&\n this.#firstPoint?.lat &&\n this.#firstPoint.lng &&\n this.#secondPoint?.lng &&\n this.#secondPoint?.lat\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 }\n map.on(\"mousemove\", this.#throttledOnLineMove);\n };\n\n #renderLineOnMouseMove = (newCoord: LatLng) => {\n if (!this.#lineFeature) return;\n const { map } = this.#props;\n\n this.#lineFeature.features[0].geometry.coordinates[1] = [newCoord.lng, newCoord.lat];\n const lineSource = map.getSource(ESOURCES.LineDynamicSource) as GeoJSONSource;\n if (lineSource) {\n lineSource.setData(this.#lineFeature);\n }\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 this.hideDynamicLine();\n };\n\n #onUndoClick = (event: UndoEvent) => {\n const { store, options } = this.#props;\n if (!Spatial.isClosedGeometry(store, options)) {\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 #onRightClickRemove = (event: PointRightClickRemoveEvent) => {\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 { GeoJSONSource, MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport type { EventsProps } from \"#types/index\";\nimport { ELAYERS, ESOURCES } from \"#utils/geo_constants\";\nimport { MapUtils, throttle } from \"#utils/helpers\";\nimport { FireEvents } from \"../helpers\";\nimport { PointVisibility } 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 updateUIAfterInsert(event, this.props);\n FireEvents.addPoint({ ...step, total: store.size }, map, mode);\n }\n };\n\n #processMouseMove = (event: MapLayerMouseEvent) => {\n PointVisibility.setSinglePointVisible(event);\n if (event.target.getLayer(ELAYERS.SinglePointLayer)) {\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\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 PointVisibility.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 PointVisibility.setSinglePointHidden(event);\n };\n}\n","import type { EventsProps } from \"#types/index\";\nimport { MOBILE_WIDTH } from \"#utils/constants\";\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 | null;\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 = props.options.pointGeneration === \"manual\" ? new TransparentLineEvents(props) : null;\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 <= MOBILE_WIDTH) 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 { CustomMap } from \"#types/map\";\n\nimport { ELAYERS, FIRST_POINT_COLOR, generateLayersToRender, FIRST_POINT_RADIUS } from \"#utils/geo_constants\";\nimport type { RequiredDrawOptions } from \"#types/index\";\n\nconst firstPointCircleRadius = (map: CustomMap) => {\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\nconst defaultPointCircleRadius = (map: CustomMap) => {\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\nexport const togglePointCircleRadius = (map: CustomMap, type: keyof typeof FIRST_POINT_RADIUS) => {\n if (type === \"large\") {\n firstPointCircleRadius(map);\n } else {\n defaultPointCircleRadius(map);\n }\n};\n\nexport const removeTransparentLine = (map: CustomMap) => {\n if (map.getLayer(ELAYERS.LineLayerTransparent)) {\n map.removeLayer(ELAYERS.LineLayerTransparent);\n }\n};\n\nexport const addTransparentLine = (map: CustomMap, 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","import type { EventsProps } from \"#types/index\";\nimport type { MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport { uuidv4, Spatial, debounce } from \"#utils/helpers\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { togglePointCircleRadius } from \"#components/map/tiles/helpers\";\n\nimport { FireEvents } from \"../helpers\";\nimport type { DrawingModeChangeEvent } from \"../mode/types\";\nimport { PointHelpers, PointsFilter, PointVisibility } from \"./helpers\";\nimport type { PrimaryPointEvents } from \".\";\nimport type { StoreChangeEvent } from \"#store/types\";\n\nexport class FirstPoint {\n #mouseDown: boolean;\n #props: EventsProps;\n #tooltip: Tooltip;\n #events: PrimaryPointEvents;\n\n constructor(props: EventsProps, baseEvents: PrimaryPointEvents) {\n this.#props = props;\n this.#mouseDown = false;\n this.#events = baseEvents;\n this.#tooltip = new Tooltip();\n\n this.initLayer();\n this.#initEvents();\n }\n\n #initConsumers = () => {\n const { mode, store } = this.#props;\n mode.addObserver(this.#mapModeConsumer);\n store.addObserver(this.#storeConsumer);\n };\n\n #removeConsumers = () => {\n const { mode, store } = this.#props;\n mode.removeObserver(this.#mapModeConsumer);\n store.removeObserver(this.#storeConsumer);\n };\n\n initLayer() {\n const { map } = this.#props;\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"visible\");\n }\n\n #initBaseEvents = () => {\n const { map } = this.#props;\n\n map.on(\"mouseenter\", ELAYERS.FirstPointLayer, this.#events.onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.FirstPointLayer, this.#events.onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.FirstPointLayer, this.#events.onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.FirstPointLayer, this.#events.onPointMouseUp);\n map.on(\"touchend\", ELAYERS.FirstPointLayer, this.#events.onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.FirstPointLayer, this.#events.onPointMouseDown);\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 this.#initBaseEvents();\n this.#initConsumers();\n }\n\n #removeBaseEvents = () => {\n const { map } = this.#props;\n\n map.off(\"mouseenter\", ELAYERS.FirstPointLayer, this.#events.onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.FirstPointLayer, this.#events.onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.FirstPointLayer, this.#events.onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.FirstPointLayer, this.#events.onPointMouseUp);\n map.off(\"touchend\", ELAYERS.FirstPointLayer, this.#events.onPointMouseUp);\n map.off(\"touchstart\", ELAYERS.FirstPointLayer, this.#events.onPointMouseDown);\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 this.#removeBaseEvents();\n this.#removeConsumers();\n }\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { map, options } = this.#props;\n const { type, data } = event;\n\n if (type === \"MODE_CHANGED\") {\n if (data === \"line\" && !options.modes.line.closeGeometry) {\n PointVisibility.setFirstPointHidden(map);\n PointsFilter.closedGeometry(map);\n } else {\n PointVisibility.setFirstPointVisible(map);\n PointsFilter.default(map);\n }\n }\n };\n\n #storeConsumer = debounce((event: StoreChangeEvent) => {\n const { map, store, options } = this.#props;\n\n const { type } = event;\n if (type === \"STORE_MUTATED\" || type === \"STORE_DETACHED\") {\n if (Spatial.canCloseGeometry(store, options)) {\n togglePointCircleRadius(map, \"large\");\n } else {\n togglePointCircleRadius(map, \"default\");\n }\n }\n }, 10);\n\n #onFirstPointClick = () => {\n const { store, map, mode, tiles, options } = this.#props;\n\n if (Spatial.canCloseGeometry(store, options)) {\n const step = Object.assign({}, store.head?.val, {\n id: uuidv4(),\n total: store.size,\n });\n if (options.pointGeneration === \"auto\" && store.tail?.val) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(store.tail?.val, step);\n store.push(auxPoint);\n }\n Spatial.closeGeometry(store, mode);\n FireEvents.addPoint(step, map, mode);\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, options } = this.#props;\n mouseEvents.firstPointMouseEnter = true;\n if (mode.getClosedGeometry() || this.#mouseDown) return;\n if (Spatial.canCloseGeometry(store, options)) {\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 { ListNode } from \"#store/index\";\nimport type { EventsProps, Step } from \"#types/index\";\nimport { ELAYERS } from \"#utils/geo_constants\";\nimport { MapUtils } from \"#utils/helpers\";\nimport type { MapLayerMouseEvent, MapTouchEvent } from \"maplibre-gl\";\nimport { PointHelpers } from \"./helpers\";\nimport type { PrimaryPointEvents } from \".\";\n\nexport class AuxPoints {\n #props: EventsProps;\n #events: PrimaryPointEvents;\n\n constructor(props: EventsProps, baseEvents: PrimaryPointEvents) {\n this.#props = props;\n this.#events = baseEvents;\n this.#initEvents();\n }\n\n #initBaseEvents = () => {\n const { map } = this.#props;\n\n map.on(\"mouseenter\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseUp);\n map.on(\"touchend\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseDown);\n };\n\n #removeBaseEvents = () => {\n const { map } = this.#props;\n\n map.off(\"mouseenter\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseUp);\n map.off(\"touchend\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseUp);\n map.off(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.#events.onPointMouseDown);\n };\n\n #initEvents() {\n const { map } = this.#props;\n\n map.on(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.#onMouseDown);\n map.on(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.#onMouseDown);\n // PointsLayer because we need to check if the point was the primary point\n map.on(\"mousedown\", ELAYERS.PointsLayer, this.#onPrimaryPointMouseDown);\n map.on(\"touchstart\", ELAYERS.PointsLayer, this.#onPrimaryPointMouseDown);\n // PointsLayer becasue aux is already false\n this.#initBaseEvents();\n }\n\n removeEvents() {\n const { map } = this.#props;\n map.off(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.#onMouseDown);\n map.off(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.#onMouseDown);\n map.off(\"mousedown\", ELAYERS.PointsLayer, this.#onPrimaryPointMouseDown);\n map.off(\"touchstart\", ELAYERS.PointsLayer, this.#onPrimaryPointMouseDown);\n\n this.#removeBaseEvents();\n }\n\n #addTwoAuxiliaryPoints = (clickedNode: ListNode | null) => {\n if (!clickedNode) return;\n\n const { store } = this.#props;\n\n const nextPrimaryNode = clickedNode.next;\n const prevPrimaryNode = clickedNode.prev;\n\n if (prevPrimaryNode) {\n const prevAuxPoint = PointHelpers.createAuxiliaryPoint(prevPrimaryNode.val as Step, clickedNode.val as Step);\n store.insert(prevAuxPoint, prevPrimaryNode);\n }\n\n if (nextPrimaryNode) {\n const nextAuxPoint = PointHelpers.createAuxiliaryPoint(clickedNode.val as Step, nextPrimaryNode.val as Step);\n store.insert(nextAuxPoint, clickedNode);\n }\n };\n\n #onPrimaryPointMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n event.preventDefault();\n };\n\n #onMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, tiles, map } = this.#props;\n // right click\n if ((event.originalEvent as { button: number }).button === 2) {\n return;\n }\n const id = MapUtils.queryPointId(map, event.point);\n const node = store.findNodeById(id);\n if (node && node.val) {\n node.val.isAuxiliary = false;\n this.#addTwoAuxiliaryPoints(node);\n }\n tiles.render();\n };\n}\n","import { ListNode } from \"#store/index\";\nimport { LatLng, Step } from \"#types/index\";\nimport { MapLayerMouseEvent } from \"maplibre-gl\";\n\nexport class PointState {\n private selectedNode: ListNode | null = null;\n private selectedIdx: number | null = null;\n private startCoordinates: LatLng | null = null;\n private enteredStep: Step | null = null;\n private lastEvent: MapLayerMouseEvent | null = null;\n\n getSelectedNode(): ListNode | null {\n return this.selectedNode;\n }\n\n getSelectedIdx(): number | null {\n return this.selectedIdx;\n }\n\n getStartCoordinates(): LatLng | null {\n return this.startCoordinates;\n }\n\n getEnteredStep(): Step | null {\n return this.enteredStep;\n }\n\n getLastEvent(): MapLayerMouseEvent | null {\n return this.lastEvent;\n }\n\n setSelectedNode(node: ListNode | null): void {\n this.selectedNode = node;\n }\n\n setSelectedIdx(idx: number | null): void {\n this.selectedIdx = idx;\n }\n\n setStartCoordinates(coordinates: LatLng | null): void {\n this.startCoordinates = coordinates;\n }\n\n setEnteredStep(step: Step | null): void {\n this.enteredStep = step;\n }\n\n setLastEvent(event: MapLayerMouseEvent | null): void {\n this.lastEvent = event;\n }\n\n clearLastEvent(): void {\n this.lastEvent = null;\n }\n\n reset(): void {\n this.selectedNode = null;\n this.selectedIdx = null;\n this.startCoordinates = null;\n this.enteredStep = null;\n this.lastEvent = null;\n }\n\n partialReset(): void {\n this.selectedNode = null;\n this.selectedIdx = null;\n this.startCoordinates = null;\n this.lastEvent = null;\n }\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport type { ListNode } from \"#store/index\";\nimport type { EventsProps, LatLng, Step } from \"#types/index\";\nimport { uuidv4 } from \"#utils/helpers\";\n\nimport { PointHelpers } from \"./helpers\";\nimport type { PointState } from \"./point-state\";\n\nexport class PointTopologyManager {\n private props: EventsProps;\n private state: PointState;\n\n constructor(props: EventsProps, state: PointState) {\n this.props = props;\n this.state = state;\n }\n\n private updateMainPoint(node: ListNode, event: MapLayerMouseEvent): void {\n if (node.val) {\n node.val.lat = event.lngLat.lat;\n node.val.lng = event.lngLat.lng;\n }\n }\n\n private updateAuxiliaryPoints(node: ListNode, event: MapLayerMouseEvent): void {\n const auxPoints = this.getAuxPointsLatLng(event);\n if (!auxPoints) return;\n\n this.updatePrevAuxPoint(node, auxPoints.prev);\n this.updateNextAuxPoint(node, auxPoints.next);\n }\n\n private updatePrevAuxPoint(node: ListNode, prevCoords: LatLng | null): void {\n if (node.prev?.val && prevCoords) {\n node.prev.val.lat = prevCoords.lat;\n node.prev.val.lng = prevCoords.lng;\n }\n }\n\n private updateNextAuxPoint(node: ListNode, nextCoords: LatLng | null): void {\n if (node.next?.val && nextCoords) {\n node.next.val.lat = nextCoords.lat;\n node.next.val.lng = nextCoords.lng;\n }\n }\n\n // we've got the reference to the selected node from the store and just updating the lat/lng when mouse up event happens\n updateStore = () => {\n const lastEvent = this.state.getLastEvent();\n const selectedNode = this.state.getSelectedNode();\n\n if (!lastEvent || !selectedNode?.val) return;\n\n this.updateMainPoint(selectedNode, lastEvent);\n this.updateAuxiliaryPoints(selectedNode, lastEvent);\n };\n\n getAuxPointsLatLng = (event: MapLayerMouseEvent) => {\n const selectedNode = this.state.getSelectedNode();\n if (!selectedNode) return null;\n\n const { options } = this.props;\n const prevPrimary = selectedNode?.prev?.prev;\n const nextPrimary = selectedNode?.next?.next;\n\n if (options.pointGeneration === \"auto\") {\n return {\n next: nextPrimary?.val ? PointHelpers.getMidpoint(nextPrimary.val, event.lngLat) : null,\n prev: prevPrimary?.val ? PointHelpers.getMidpoint(event.lngLat, prevPrimary.val) : null,\n } as const;\n }\n return null;\n };\n\n addPointToStore(event: MapLayerMouseEvent): Step {\n const { store, options } = this.props;\n const nextStep = { ...event.lngLat, id: uuidv4() };\n\n if (options.pointGeneration === \"auto\" && store?.tail?.val && store.size >= 1) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(store.tail.val, nextStep);\n store.push(auxPoint);\n }\n\n const addedStep = PointHelpers.addPointToMap(event, this.props);\n return addedStep;\n }\n\n private recalculateAuxiliaryPoints(clickedNode: ListNode | null): void {\n if (!clickedNode) return;\n\n const { store } = this.props;\n const nextAuxNode = clickedNode.next;\n const prevAuxNode = clickedNode.prev;\n const nextPrimaryNode = clickedNode.next?.next;\n const prevPrimaryNode = clickedNode.prev?.prev;\n\n if (nextAuxNode?.val) {\n store.removeNodeById(nextAuxNode.val.id);\n }\n if (prevAuxNode?.val) {\n store.removeNodeById(prevAuxNode.val.id);\n }\n\n const isNonEdgeSize = store.size !== 3;\n if (nextPrimaryNode?.val && prevPrimaryNode?.val && isNonEdgeSize) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(nextPrimaryNode.val, prevPrimaryNode.val);\n store.insert(auxPoint, prevPrimaryNode);\n }\n }\n\n removePointFromStore(id: string): void {\n const { store, options } = this.props;\n\n if (store.size === 1) {\n store.reset();\n return;\n }\n\n const clickedNode = store.findNodeById(id);\n const isPrimaryNode = !clickedNode?.val?.isAuxiliary;\n\n if (isPrimaryNode) {\n store.removeNodeById(id);\n\n if (options.pointGeneration === \"auto\") {\n this.recalculateAuxiliaryPoints(clickedNode);\n }\n }\n }\n}\n","import type { EventsProps, LatLng, Step } from \"#types/index\";\nimport type { MapLayerMouseEvent, MapTouchEvent } from \"maplibre-gl\";\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 { PointVisibility } from \"./helpers\";\nimport { FirstPoint } from \"./first-point\";\nimport { removeTransparentLine, addTransparentLine } from \"../tiles/helpers\";\nimport { AuxPoints } from \"./aux-points\";\nimport { StoreChangeEvent } from \"#store/types\";\nimport { DrawingModeChangeEvent } from \"../mode/types\";\nimport { PointState } from \"./point-state\";\nimport { PointTopologyManager } from \"./point-topology-manager\";\n\nexport interface PrimaryPointEvents {\n onPointMouseEnter: (event: MapLayerMouseEvent) => void;\n onPointMouseLeave: (event: MapLayerMouseEvent) => void;\n onPointMouseDown: (event: MapLayerMouseEvent | MapTouchEvent) => void;\n onPointMouseUp: () => void;\n onMapMouseMove: (event: MapLayerMouseEvent) => void;\n}\n\nexport class PointEvents {\n private props: EventsProps;\n private events: PrimaryPointEvents;\n private firstPoint: FirstPoint | null;\n private auxPoints: AuxPoints | null;\n private pointState: PointState;\n private topologyManager: PointTopologyManager;\n\n constructor(props: EventsProps) {\n this.props = props;\n this.pointState = new PointState();\n this.topologyManager = new PointTopologyManager(props, this.pointState);\n this.events = {\n onPointMouseEnter: this.#onPointMouseEnter,\n onPointMouseLeave: this.#onPointMouseLeave,\n onPointMouseDown: this.#onPointMouseDown,\n onPointMouseUp: this.#onPointMouseUp,\n onMapMouseMove: this.#onMapMouseMove,\n };\n this.firstPoint = new FirstPoint(this.props, this.events);\n this.auxPoints = new AuxPoints(this.props, this.events);\n }\n\n #initConsumers = () => {\n this.props.mode.addObserver(this.#mapModeConsumer);\n this.props.store.addObserver(this.#storeEventsConsumer);\n };\n\n #removeConsumers = () => {\n this.props.mode.removeObserver(this.#mapModeConsumer);\n this.props.store.removeObserver(this.#storeEventsConsumer);\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(\"mouseenter\", ELAYERS.PointsLayer, this.#onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.PointsLayer, this.#onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n map.on(\"click\", ELAYERS.PointsLayer, this.#onPointClick);\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.#initConsumers();\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(\"mouseenter\", ELAYERS.PointsLayer, this.#onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.PointsLayer, this.#onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n map.off(\"click\", ELAYERS.PointsLayer, this.#onPointClick);\n map.off(\"mouseup\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n map.off(\"touchend\", ELAYERS.PointsLayer, this.#onPointMouseUp);\n map.off(\"touchstart\", ELAYERS.PointsLayer, this.#onPointMouseDown);\n\n this.firstPoint?.removeEvents();\n this.auxPoints?.removeEvents();\n this.#removeConsumers();\n };\n\n #onPointClick = (event: MapLayerMouseEvent) => {\n const { mouseEvents, store, map, options } = this.props;\n const id = MapUtils.queryPointId(map, event.point);\n\n if (StoreHelpers.isLastPoint(store, options, id)) {\n mouseEvents.lastPointMouseClick = true;\n mouseEvents.lastPointMouseUp = false;\n }\n };\n\n #onMapDblClick = (event: MapLayerMouseEvent) => {\n event.preventDefault();\n };\n\n #onPointRemove = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, tiles } = this.props;\n if (store.size === 1) {\n store.reset();\n } else {\n const id = MapUtils.queryPointId(this.props.map, event.point);\n const clickedNode = store.findNodeById(id);\n\n this.topologyManager.removePointFromStore(id);\n\n const isPrimaryNode = !clickedNode?.val?.isAuxiliary;\n\n if (isPrimaryNode) {\n FireEvents.pointRemoveRightClick({ ...(clickedNode?.val as Step), total: store.size }, this.props.map);\n Spatial.switchToLineModeIfCan(this.props);\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, store, tiles } = 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 const addedStep = this.topologyManager.addPointToStore(event);\n\n FireEvents.addPoint({ ...addedStep, total: store.size }, map, mode);\n PointVisibility.setSinglePointHidden(event);\n tiles.render();\n };\n\n #onMoveLeftClickUp = (event: MapLayerMouseEvent) => {\n const mouseLeftClickUp = event.originalEvent.buttons === 0;\n if (mouseLeftClickUp) {\n this.#onPointMouseUp();\n }\n };\n\n #onMapMouseMove = throttle((event: MapLayerMouseEvent) => {\n const { mouseEvents } = this.props;\n\n if (mouseEvents.pointMouseDown) {\n this.pointState.setLastEvent(event);\n\n if (!this.pointState.getSelectedNode()) return;\n\n const { tiles } = this.props;\n this.#onMoveLeftClickUp(this.pointState.getLastEvent() as MapLayerMouseEvent);\n const auxPoints = this.topologyManager.getAuxPointsLatLng(this.pointState.getLastEvent() as MapLayerMouseEvent);\n tiles.renderOnMouseMove(this.pointState.getSelectedIdx() as number, event.lngLat, auxPoints);\n }\n }, 17);\n\n #onPointMouseEnter = (event: MapLayerMouseEvent) => {\n const { mouseEvents, map, store, options } = this.props;\n if (mouseEvents) {\n mouseEvents.pointMouseEnter = true;\n if (mouseEvents.pointMouseDown) return;\n }\n PointVisibility.setSinglePointHidden(event);\n const id = MapUtils.queryPointId(map, event.point);\n if (StoreHelpers.isLastPoint(store, options, id)) {\n mouseEvents.lastPointMouseEnter = true;\n mouseEvents.lastPointMouseLeave = false;\n }\n const step = store.findStepById(id);\n if (step) {\n this.pointState.setEnteredStep(step);\n FireEvents.enterPoint(Object.assign({}, step, { total: store.size }), map);\n }\n };\n\n #onPointMouseLeave = (event: MapLayerMouseEvent) => {\n const { mouseEvents, store, map, options } = 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, options, id)) {\n mouseEvents.lastPointMouseEnter = false;\n mouseEvents.lastPointMouseLeave = true;\n }\n FireEvents.leavePoint(\n Object.assign({}, this.pointState.getEnteredStep(), {\n total: store.size,\n }),\n map,\n );\n };\n\n #storeEventsConsumer = (event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\") {\n if (event.data.size === 0) {\n this.pointState.reset();\n }\n }\n };\n\n #mapModeConsumer = (event: DrawingModeChangeEvent) => {\n if (event.type === \"BREAK_CHANGED\" || event.type === \"MODE_CHANGED\") {\n this.pointState.reset();\n }\n };\n\n #hideLastPointPanel = () => {\n const { store, panel, options } = this.props;\n const selectedNode = this.pointState.getSelectedNode();\n\n if (!selectedNode?.val) return;\n\n if (StoreHelpers.isLastPoint(store, options, selectedNode.val.id)) {\n panel.hidePanel();\n }\n };\n\n #setSelectedNode = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, map } = this.props;\n\n const id = MapUtils.queryPointId(map, event.point);\n const node = store.findNodeById(id);\n\n if (node) {\n this.pointState.setSelectedNode(node);\n }\n };\n\n #onPointMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n event.preventDefault();\n\n this.pointState.clearLastEvent();\n\n const { mouseEvents, map, store, options } = this.props;\n\n if ((event.originalEvent as { button: number }).button === 2) {\n this.#onPointRemove(event);\n return;\n }\n\n this.#setSelectedNode(event);\n\n removeTransparentLine(map);\n this.#hideLastPointPanel();\n\n const point = MapUtils.queryPoint(map, event.point);\n const geometryIndex = Spatial.getGeometryIndex(store, point?.properties.id);\n this.pointState.setSelectedIdx(geometryIndex);\n\n if (mouseEvents) {\n mouseEvents.pointMouseDown = true;\n }\n\n this.pointState.setStartCoordinates(event.lngLat);\n\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\n map.off(\"mousemove\", this.#onMapMouseMove);\n map.off(\"touchmove\", this.#onMapMouseMove);\n\n mouseEvents.pointMouseUp = true;\n\n const selectedNode = this.pointState.getSelectedNode();\n const lastEvent = this.pointState.getLastEvent();\n const startCoordinates = this.pointState.getStartCoordinates();\n\n if (selectedNode && selectedNode.val) {\n if (lastEvent) {\n this.topologyManager.updateStore();\n this.pointState.clearLastEvent();\n }\n\n store.notify({\n type: \"STORE_MUTATED\",\n data: store,\n });\n\n panel?.showPanel();\n\n FireEvents.movePoint(\n {\n id: selectedNode.val.id,\n total: store.size,\n end: { lat: selectedNode.val.lat, lng: selectedNode.val.lng },\n start: startCoordinates as LatLng,\n },\n map,\n );\n\n this.pointState.partialReset();\n }\n\n if (mouseEvents) {\n mouseEvents.pointMouseDown = false;\n }\n\n addTransparentLine(map, options);\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/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.#panelEvents?.initConsumers();\n this.#pointEvents?.initEvents();\n };\n\n #removeDrawEvents = () => {\n this.#panelEvents?.removeEvents();\n this.#panelEvents?.removeConsumers();\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.getClosedGeometry();\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 { CustomMap } from \"#types/map\";\n\nimport { debounce, Spatial } from \"#utils/helpers\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport type { Store } from \"#store/index\";\n\nimport type { MouseEvents } from \"../mouse-events\";\nimport type { MouseEventsChangeEvent } from \"../mouse-events/types\";\nimport { CURSORS, type TCursor } from \"./constants\";\nimport type { RequiredDrawOptions } from \"#types/index\";\n\ninterface CursorProps {\n map: CustomMap;\n mode: DrawingMode;\n mouseEvents: MouseEvents;\n store: Store;\n options: RequiredDrawOptions;\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 = debounce(() => {\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 }, 10);\n\n handleFirstPointMouseEnter = debounce(() => {\n const { store, options } = this.#props;\n\n if (Spatial.canCloseGeometry(store, options)) {\n this.set(CURSORS.POINTER);\n }\n }, 10);\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, store, options } = 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 if (!Spatial.isClosedGeometry(store, options)) {\n this.set(CURSORS.POINTER);\n }\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\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\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 AUXILIARY_POINT_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 and 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 pointGeneration: options.pointGeneration ?? DEFAULT_OPTIONS.pointGeneration,\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: options?.modes?.line?.closeGeometry ?? 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 auxiliaryPoint: {\n \"circle-radius\":\n options.layersPaint?.auxiliaryPoint?.[\"circle-radius\"] || AUXILIARY_POINT_PAINT_BASE[\"circle-radius\"],\n \"circle-color\":\n options.layersPaint?.auxiliaryPoint?.[\"circle-color\"] || AUXILIARY_POINT_PAINT_BASE[\"circle-color\"],\n \"circle-stroke-color\":\n options.layersPaint?.auxiliaryPoint?.[\"circle-stroke-color\"] ||\n AUXILIARY_POINT_PAINT_BASE[\"circle-stroke-color\"],\n \"circle-stroke-width\":\n options.layersPaint?.auxiliaryPoint?.[\"circle-stroke-width\"] ||\n AUXILIARY_POINT_PAINT_BASE[\"circle-stroke-width\"],\n ...options.layersPaint?.auxiliaryPoint,\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, CustomMap } from \"#types/map\";\n\nimport type { DrawOptions, LatLng, RequiredDrawOptions, Step, StepId } from \"#types/index\";\nimport { Panel } from \"#components/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 PointRightClickRemoveEvent,\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: CustomMap) => {\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({\n map,\n mode: this.#mode,\n mouseEvents: this.#mouseEvents,\n store: this.#store,\n options: this.#defaultOptions,\n });\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\n if (this.#mode.getMode()) {\n map.fire(\"mode:initialize\");\n }\n\n this.#mode.pingConsumers();\n this.#store.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 for (const step of value) {\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.\n *\n * @param id - The ID of the step to retrieve.\n * @returns The step with the specified ID, or null if not found.\n */\n findStepById = (id: StepId) => {\n return this.#store?.findStepById(id);\n };\n\n /**\n * Retrieves a node from the store by its ID.\n *\n * @param id - The ID of the node to retrieve.\n * @returns The node with the specified ID, or null if not found.\n */\n findNodeById = (id: StepId) => {\n return this.#store?.findNodeById(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 *\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 PointRightClickRemoveEvent,\n PointEnterEvent,\n PointLeaveEvent,\n PointMoveEvent,\n RemoveAllEvent,\n SaveEvent,\n UndoEvent,\n ModeChangeEvent,\n};\n"]}
|