draw-libre 0.3.3 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/dom.ts","../src/components/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","#getHorizonalOffset","size","#getVerticalOffset","coordinates","point","#pointPositionUpdate","#updatePanelPositionOnMapMove","mapRect","x","y","basicOffset","offsetX","offsetY","#removeMapEventListeners","#createButton","title","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 { UnifiedMap } 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: UnifiedMap;\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 #getHorizonalOffset = (size: PanelImpl[\"size\"]) => {\n switch (size) {\n case \"small\":\n return 6;\n case \"medium\":\n return 0;\n case \"large\":\n return -6;\n default:\n return 0;\n }\n };\n\n #getVerticalOffset = (size: PanelImpl[\"size\"]) => {\n switch (size) {\n case \"small\":\n return 0;\n case \"medium\":\n return -6;\n case \"large\":\n return -8;\n default:\n return 0;\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 // TODO this whole logic needs to be revamped\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 basicOffset = 36;\n\n const offsetX = this.#getHorizonalOffset(this.#props.options.panel.size);\n const offsetY = this.#getVerticalOffset(this.#props.options.panel.size);\n\n this.#panelPopup.style.left = `${x - basicOffset + offsetX}px`;\n this.#panelPopup.style.top = `${y - basicOffset + offsetY}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 { UnifiedMap } 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: UnifiedMap, coords: LatLng) => {\n const { lat, lng } = coords;\n return map.project([lng, lat]);\n };\n\n static queryPointId = (map: UnifiedMap, 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: UnifiedMap, 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 { UnifiedMap } 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: UnifiedMap;\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 { UnifiedMap } 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: UnifiedMap, 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: UnifiedMap) {\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: UnifiedMap) {\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: UnifiedMap) {\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: UnifiedMap) {\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: UnifiedMap, 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: UnifiedMap, mode: Mode | \"break\") {\n map.fire(EVENTS.MODECHANGED, {\n mode,\n });\n }\n static removeAllPoints(map: UnifiedMap, 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: UnifiedMap) {\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 { 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 { UnifiedMap } 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: UnifiedMap) {\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"visible\");\n },\n\n setFirstPointHidden(map: UnifiedMap) {\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: UnifiedMap) {\n map.setFilter(ELAYERS.PointsLayer, [\n \"all\",\n [\"==\", \"$type\", \"Point\"],\n [\"==\", \"isFirst\", false],\n [\"==\", \"isAuxiliary\", false],\n ]);\n },\n closedGeometry(map: UnifiedMap) {\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 { 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 { UnifiedMap } 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 UnifiedMap;\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 if (map.getLayer(ELAYERS.LineDynamicLayer)) {\n map.setLayoutProperty(ELAYERS.LineDynamicLayer, \"visibility\", \"none\");\n }\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 { UnifiedMap } 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: UnifiedMap) => {\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: UnifiedMap) => {\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: UnifiedMap, 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: UnifiedMap) => {\n if (map.getLayer(ELAYERS.LineLayerTransparent)) {\n map.removeLayer(ELAYERS.LineLayerTransparent);\n }\n};\n\nexport const addTransparentLine = (map: UnifiedMap, 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\";\nimport { Tooltip } from \"#components/tooltip\";\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 private tooltip: Tooltip;\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 this.tooltip = new Tooltip();\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-medium`, 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 { UnifiedMap } 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: UnifiedMap;\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, UnifiedMap } 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: UnifiedMap) => {\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 {\n head: this.#store?.head,\n tail: this.#store?.tail,\n size: this.#store?.size,\n };\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 DrawOptions,\n RequiredDrawOptions,\n PointAddEvent,\n PointRightClickRemoveEvent,\n PointEnterEvent,\n PointLeaveEvent,\n PointMoveEvent,\n RemoveAllEvent,\n SaveEvent,\n UndoEvent,\n ModeChangeEvent,\n UnifiedMap,\n};\n"]}
1
+ {"version":3,"sources":["../src/components/panel/state.ts","../src/app/utils/dom.ts","../src/app/utils/geo_constants.ts","../src/app/utils/helpers.ts","../src/components/panel/view.ts","../src/components/map/points/helpers.ts","../src/app/utils/observable.ts","../src/app/store/errors.ts","../src/app/store/policies/circular.ts","../src/app/store/index.ts","../src/components/tooltip/index.ts","../src/app/utils/constants.ts","../src/components/map/helpers.ts","../src/app/history/index.ts","../src/components/map/renderer/index.ts","../src/components/panel/events.ts","../src/components/panel/observer.ts","../src/components/panel/index.ts","../src/components/map/points/commands/insert-point.ts","../src/components/map/line/utils.ts","../src/components/map/line/commands/break-geometry.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/commands/close-geometry.ts","../src/components/map/points/first-point.ts","../src/components/map/points/commands/aux-to-primary.ts","../src/components/map/points/commands/move-point.ts","../src/components/map/points/aux-points.ts","../src/components/map/points/point-state.ts","../src/components/map/points/commands/add-point.ts","../src/components/map/points/commands/remove-point/auto.ts","../src/components/map/points/commands/remove-point/manual.ts","../src/components/map/points/commands/remove-point/index.ts","../src/components/map/points/point-topology-manager.ts","../src/components/map/points/index.ts","../src/components/map/index.ts","../src/components/map/cursor/constants.ts","../src/components/side-control/helpers.ts","../src/components/side-control/events.ts","../src/components/side-control/observer.ts","../src/components/side-control/view.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/app/utils/options.ts","../src/components/map/tiles/layers.ts","../src/components/map/tiles/sources.ts","../src/components/map/tiles/index.ts","../src/index.ts"],"names":["UIState","value","id","DOM","tagName","className","container","element","node","target","type","callback","options","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","point","GeometryFactory","#collectGeometryCoordinates","store","coordinates","current","visitedNodes","next","pointFeatures","val","head","points","lines","polygons","Spatial","idx","point1","point2","A","B","P","distanceAB","distanceAP","distancePB","mode","uuidv4","getRandomHexChar","getUuidSection","length","section","i","getUuidSectionSize","firstElement","lastElement","parts","throttle","fn","delay","lastArgs","shouldCall","execute","args","debounce","timeout","disableButton","button","enableButton","View","ctx","title","size","panel","locale","buttons","x","y","observer","PointHelpers","p1","p2","mid","PointVisibility","PointsFilter","Observable","ERRORS","Circular","tail","threshold","auxId","ListNode","prev","Store","list","StoreHelpers","step","newNode","_StoreHelpers","stepsWithoutIds","initialSteps","closeGeometry","pointGeneration","steps","auxPoint","initialOptions","generateId","result","BASE_Y_OFFSET_FROM_ELEMENT","BASE_X_OFFSET_FROM_ELEMENT","Tooltip","span","#activateAnimation","#getLabelDimensions","#getLeftPosition","bottom","left","labelWidth","labelHeight","#getBottomPosition","right","position","pos","EVENTS","MOBILE_WIDTH","DEFAULT_OPTIONS","FireEvents","originalEvent","context","CompoundCommand","payload","commands","cmd","Timeline","_Timeline","txn","timeline","Renderer","_Renderer","featureIdx","newCoord","line","polygon","feature","aux","prevIdx","unifiedSource","renderer","Events","undoButton","redoButton","deleteButton","saveButton","label","view","hasSomethingToRedo","Observer","data","OFFSET_Y","Panel","width","height","dx","dy","visible","InsertPointCommand","segmentStart","isOnLine","visited","aPixel","bPixel","eventPixel","insertStepIfOnLine","updateUIAfterInsert","checkIfPointClicked","BreakGeometryCommand","clickCoords","originalHead","originalTail","newHead","newTail","newAuxBetweenHeadTail","LINE_BREAK_THROTTLE_TIME","LineBreakEvents","lineSource","lineBreakData","LINE_DYNAMIC_THROTTLE_TIME","DynamicLineEvents","lineClick","latLng","LINE_TRANSPARENT_THROTTLE_TIME","TransparentLineEvents","pointSource","LineEvents","firstPointCircleRadius","defaultPointCircleRadius","togglePointCircleRadius","removeTransparentLine","addTransparentLine","transparentLayer","CloseGeometryCommand","FirstPoint","baseEvents","#mouseDown","#tooltip","mouseEvents","X_OFFSET","AuxToPrimaryCommand","clickedNode","prevPrimaryNode","nextPrimaryNode","prevAuxNode","nextAuxNode","lastAuxNode","prevAuxPoint","nextAuxPoint","MovePointCommand","selectedNode","start","prevAux","nextAux","prevPrimary","nextPrimary","midPoint","AuxPoints","pointState","topologyManager","lastEvent","startCoordinates","PointState","moved","AddPointCommand","coord","addedNode","auxNode","RemovePointAutoCommand","nodeId","wasCircular","wasRemovedHead","wasRemovedTail","auxBefore","auxAfter","beforePrimary","afterPrimary","after","restoredNode","primaryBefore","primaryAfter","meetsAuxInsertionThreshold","oldAuxPoint","isAuxiliary","removedNode","before","currentHead","notCircularNow","currentTail","RemovePointManualCommand","RemovePointCommand","PointTopologyManager","state","auxPoints","prevCoords","nextCoords","PointEvents","addedStep","geometryIndex","MapEvents","CURSORS","getButtonLabel","lineTitle","polygonTitle","breakTitle","lineButton","breakButton","polygonButton","placement","active","disabled","lineVisible","polygonVisible","breakVisible","isBreak","Control","enrichedCtx","root","getInitialMode","DrawingMode","newMode","Cursor","#canvas","#initConsumers","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","Layers","LAYERS_TO_RENDER","beneathLayerId","aboveLayerId","beneath","above","Sources","source","Tiles","DrawLibre","_DrawLibre","newStep"],"mappings":"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","file":"index.js","sourcesContent":["import type { LatLng } from \"#app/types\";\n\nexport class UIState {\n private _isHidden = true;\n private _anchor = { dx: 0, dy: 0 };\n private _pendingCoord: LatLng | null = null;\n private _rafId = 0;\n private _listenersActive = false;\n\n get isHidden() {\n return this._isHidden;\n }\n set isHidden(value: boolean) {\n this._isHidden = value;\n }\n\n get anchor() {\n return { ...this._anchor };\n }\n set anchor(value: { dx: number; dy: number }) {\n this._anchor = { ...value };\n }\n\n get pendingCoord() {\n return this._pendingCoord;\n }\n set pendingCoord(value: LatLng | null) {\n this._pendingCoord = value;\n }\n\n get rafId() {\n return this._rafId;\n }\n set rafId(id: number) {\n this._rafId = id;\n }\n\n get listenersActive() {\n return this._listenersActive;\n }\n set listenersActive(value: boolean) {\n this._listenersActive = value;\n }\n\n reset() {\n this._isHidden = true;\n this._anchor = { dx: 0, dy: 0 };\n this._pendingCoord = null;\n this._rafId = 0;\n this._listenersActive = false;\n }\n}\n","export class DOM {\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 static addEventListener(\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 target.addEventListener(type, callback, options);\n }\n\n static removeEventListener(\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 target.removeEventListener(type, callback, options);\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 { RequiredDrawOptions } from \"#app/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, RequiredDrawOptions } from \"#app/types/index\";\nimport type { UnifiedMap } from \"#app/types/map\";\nimport type { ListNode, Store } from \"#app/store/index\";\nimport type { DrawingMode } from \"#components/map/mode\";\n\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: UnifiedMap, coords: LatLng) => {\n const { lat, lng } = coords;\n return map.project([lng, lat]);\n };\n\n static queryPointId = (map: UnifiedMap, 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: UnifiedMap, 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\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\nexport const disableButton = (button: HTMLButtonElement | null) => {\n if (!button) return;\n button.setAttribute(\"disabled\", \"true\");\n button.setAttribute(\"aria-disabled\", \"true\");\n};\n\nexport const enableButton = (button: HTMLButtonElement | null) => {\n if (!button) return;\n button.removeAttribute(\"disabled\");\n button.removeAttribute(\"aria-disabled\");\n};\n","import { DOM } from \"#app/utils/dom\";\nimport type { ButtonType, PanelImpl } from \"#app/types\";\nimport { disableButton } from \"#app/utils/helpers\";\nimport { Context } from \".\";\n\nexport class View {\n private root: HTMLDivElement;\n private buttonContainer: HTMLDivElement;\n private buttons: Partial<Record<ButtonType, HTMLButtonElement>> = {};\n\n constructor(private readonly ctx: Pick<Context, \"map\" | \"options\">) {\n this.root = DOM.create(\"div\", \"dashboard-container\");\n this.buttonContainer = DOM.create(\"div\", \"dashboard\", this.root);\n\n this.renderButtons();\n ctx.map.getContainer().appendChild(this.root);\n }\n\n private createButton(type: ButtonType, title: string, size: PanelImpl[\"size\"], container: HTMLElement) {\n const button = DOM.create(\"button\", `panel-button panel-button-${size}`, container);\n button.setAttribute(\"data-type\", type);\n button.setAttribute(\"aria-label\", title);\n DOM.create(\"span\", `icon ${type} icon-${size}`, button);\n return button as HTMLButtonElement;\n }\n\n private renderButtons() {\n const { panel, locale } = this.ctx.options;\n const { buttons, size } = panel;\n\n (Object.keys(buttons) as ButtonType[]).forEach((type) => {\n if (!buttons[type].visible) return;\n\n const button = this.createButton(type, locale[type], size, this.buttonContainer);\n if (type === \"undo\" || type === \"redo\") {\n disableButton(button);\n }\n\n this.buttons[type] = button;\n });\n }\n\n public getButton = (type: ButtonType): HTMLButtonElement | null => {\n const button = this?.buttons?.[type];\n if (!button) {\n console.warn(`[PanelView] Button \"${type}\" not initialized`);\n }\n return button ?? null;\n };\n\n public getRoot = (): HTMLDivElement => {\n return this.root;\n };\n\n public show = () => {\n this.root.classList.remove(\"hidden\");\n };\n\n public hide = () => {\n this.root.classList.add(\"hidden\");\n };\n\n public setTransform = (x: number, y: number) => {\n this.root.style.transform = `translate(${x}px, ${y}px)`;\n };\n\n public observeResize = (callback: ResizeObserverCallback): ResizeObserver => {\n const observer = new ResizeObserver(callback);\n observer.observe(this.root);\n return observer;\n };\n\n public destroy = () => {\n this.root.remove();\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\nimport type { Step } from \"#app/types/index\";\n\nimport { ELAYERS } from \"#app/utils/geo_constants\";\nimport { uuidv4 } from \"#app/utils/helpers\";\n\nimport type { UnifiedMap } from \"#app/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\nexport const PointVisibility = {\n setFirstPointVisible(map: UnifiedMap) {\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"visible\");\n },\n\n setFirstPointHidden(map: UnifiedMap) {\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: UnifiedMap) {\n map.setFilter(ELAYERS.PointsLayer, [\n \"all\",\n [\"==\", \"$type\", \"Point\"],\n [\"==\", \"isFirst\", false],\n [\"==\", \"isAuxiliary\", false],\n ]);\n },\n closedGeometry(map: UnifiedMap) {\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 type { RequiredDrawOptions } from \"#app/types\";\nimport type { ListNode, Store } from \"..\";\n\nexport class Circular {\n constructor(\n private store: Store,\n private readonly options?: RequiredDrawOptions,\n ) {\n this.store = store;\n }\n public isCircular = (): boolean => {\n const { head, tail } = this.store;\n if (!head || !tail) return false;\n\n return head === tail.next && tail === head.prev;\n };\n\n public canBreak = (): boolean => {\n const { size } = this.store;\n\n const threshold = this.options?.pointGeneration === \"auto\" ? 3 : 2;\n return size <= threshold;\n };\n\n public canClose = (): boolean => {\n const { size } = this.store;\n\n const storeSize = this.options?.pointGeneration === \"auto\" ? size > 3 : size > 2;\n return storeSize && !this.isCircular();\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 public break = (current: ListNode) => {\n if (!this.store.head) return;\n\n if (this.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 const auxId = current.val?.id as string;\n this.store.head = current.next as ListNode;\n this.store.tail = current.prev as ListNode;\n this.store.removeNodeById(auxId);\n this.store.head.prev = null;\n this.store.tail.next = null;\n } else {\n const auxId = current.next?.val?.id as string;\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 this.store.head = current.next?.next as ListNode;\n this.store.tail = current;\n this.store.removeNodeById(auxId);\n this.store.head.prev = null;\n this.store.tail.next = null;\n }\n } else {\n // no aux here, so the tail is the current node and the head is the next node\n this.store.head = current.next as ListNode;\n this.store.head.prev = null;\n this.store.tail = current;\n this.store.tail.next = null;\n }\n };\n\n public close = () => {\n const { head, tail } = this.store;\n if (!head || !tail) return;\n\n tail.next = head;\n head.prev = tail;\n };\n}\n","import { PointHelpers } from \"#components/map/points/helpers\";\nimport type { Initial, LatLng, RequiredDrawOptions, Step, StepId } from \"#app/types/index\";\nimport { uuidv4 } from \"#app/utils/helpers\";\nimport { Observable } from \"#app/utils/observable\";\n\nimport { ERRORS } from \"./errors\";\nimport { StoreChangeEvent } from \"./types\";\nimport { Circular } from \"./policies/circular\";\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 public readonly circular: Circular;\n\n constructor(private readonly options?: RequiredDrawOptions) {\n super();\n let list = StoreHelpers.initStore(options);\n this.circular = new Circular(this, 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\n this.map.set(step.id, newNode);\n this.size++;\n this.pingConsumers();\n return newNode;\n };\n\n public unshift = (step: Step) => {\n const newNode = new ListNode(step);\n\n newNode.next = this.head;\n this.head = newNode;\n\n if (this.circular.isCircular() && this.tail) {\n this.tail.next = newNode;\n newNode.prev = this.tail;\n }\n\n this.map.set(step.id, newNode);\n this.size++;\n this.pingConsumers();\n };\n\n public insertAfter = (node: ListNode, step: Step) => {\n if (!node) return null;\n\n const newNode = new ListNode(step);\n newNode.prev = node;\n newNode.next = node.next;\n\n const betweenHeadAndTail = this.tail === node && this.head === node.next;\n if (betweenHeadAndTail) {\n this.tail = newNode;\n this.head!.prev = newNode;\n }\n\n if (node.next) {\n node.next.prev = newNode;\n }\n\n node.next = newNode;\n this.map.set(step.id, newNode);\n this.size++;\n this.pingConsumers();\n return newNode;\n };\n\n public 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 public findStepById(id: StepId): ListNode[\"val\"] | null {\n const node = this.map.get(id);\n return node ? node.val : null;\n }\n\n public findNodeById(id: StepId): ListNode | null {\n const node = this.map.get(id);\n return node ? node : null;\n }\n\n public reset = () => {\n this.head = null;\n this.tail = null;\n this.size = 0;\n this.map.clear();\n this.notify({\n type: \"STORE_CLEARED\",\n });\n };\n\n public 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 private 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 store = new Store();\n const steps = closeGeometry ? initialSteps.slice(0, -1) : initialSteps;\n\n steps.forEach((step, idx) => {\n store.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 store.push(auxPoint);\n } else if (closeGeometry) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(step, steps[0] as Step);\n store.push(auxPoint);\n }\n }\n });\n\n return store;\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 { HTMLEvent } from \"#app/types/helpers\";\nimport { DOM } from \"#app/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 private container: HTMLElement | undefined;\n public 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","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 REDO: \"mdl:redo\",\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 redo: { 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 redo: \"Redo\",\n line: \"Line\",\n polygon: \"Polygon\",\n break: \"Split\",\n closeLine: \"Close the line\",\n createPolygon: \"Create a polygon\",\n },\n};\n","import type { UnifiedMap } from \"#app/types/map\";\nimport type { LatLng, StepId, Step, MapEventsCtx } from \"#app/types/index\";\nimport { EVENTS } from \"#app/utils/constants\";\nimport type { DrawingMode } from \"./mode\";\nimport type { Mode } from \"./mode/types\";\n\n// TODO this shouldn't be here and it's just bunch of static methods in a class, which is bad.\nexport class FireEvents {\n static addPoint(step: Step & { total: number }, map: UnifiedMap, 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: UnifiedMap) {\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: UnifiedMap) {\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: UnifiedMap) {\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: UnifiedMap) {\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 undo(step: Step & { total: number }, map: UnifiedMap, 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\n static redo(step: Step & { total: number }, map: UnifiedMap, originalEvent?: Event) {\n map.fire(EVENTS.REDO, {\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\n static modeChanged(map: UnifiedMap, mode: Mode | \"break\") {\n map.fire(EVENTS.MODECHANGED, {\n mode,\n });\n }\n static removeAllPoints(map: UnifiedMap, originalEvent: Event) {\n map.fire(EVENTS.REMOVEALL, { originalEvent });\n }\n static onSaveClick(context: Pick<MapEventsCtx, \"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: UnifiedMap) {\n map.fire(EVENTS.BREAK);\n }\n}\n","import { Observable } from \"#app/utils/observable\";\nimport type { TimelineChangeEvent } from \"./types\";\n\nexport interface Command {\n type: string;\n payload?: any;\n execute(): void;\n undo(): void;\n}\n\nexport class CompoundCommand implements Command {\n constructor(\n public readonly type: string,\n public readonly payload: any,\n private commands: Command[] = [],\n ) {}\n\n add(cmd: Command) {\n this.commands.push(cmd);\n }\n\n execute() {\n if (!this.commands) return;\n\n for (const cmd of this.commands) {\n cmd.execute();\n }\n }\n\n undo() {\n if (!this.commands) return;\n\n for (let i = this.commands.length - 1; i >= 0; i--) {\n const command = this.commands[i];\n command?.undo();\n }\n }\n}\n\nexport class Timeline extends Observable<TimelineChangeEvent> {\n private transaction: CompoundCommand | null = null;\n private undoStack: Command[] = [];\n private redoStack: Command[] = [];\n\n private static instance: Timeline | null = null;\n\n static getInstance(): Timeline {\n if (!Timeline.instance) Timeline.instance = new Timeline();\n return Timeline.instance;\n }\n\n public commit = (cmd: Command) => {\n cmd.execute();\n if (this.transaction) {\n this.transaction.add(cmd);\n } else {\n this.undoStack.push(cmd);\n }\n\n this.redoStack.length = 0;\n this.pingConsumers();\n };\n\n public undo = () => {\n const cmd = this.undoStack.pop();\n if (!cmd) return;\n cmd.undo();\n this.redoStack.push(cmd);\n this.pingConsumers();\n return cmd;\n };\n\n public redo = () => {\n const cmd = this.redoStack.pop();\n if (!cmd) return null;\n cmd.execute();\n this.undoStack.push(cmd);\n this.pingConsumers();\n return cmd;\n };\n\n public beginTransaction = (type: string = \"compound\", payload: any = null) => {\n if (this.transaction) return;\n this.transaction = new CompoundCommand(type, payload);\n };\n\n public commitTransaction = () => {\n if (!this.transaction) return;\n const txn = this.transaction;\n this.transaction = null;\n\n this.undoStack.push(txn);\n this.pingConsumers();\n };\n\n public getRedoStackLength = () => {\n return this.redoStack.length;\n };\n\n public getUndoStackLength = () => {\n return this.undoStack;\n };\n\n public resetStacks = () => {\n this.undoStack = [];\n this.redoStack = [];\n this.notify({ type: \"REDO_STACK_CHANGED\", data: 0 });\n };\n\n pingConsumers = () => {\n this.notify({\n type: \"REDO_STACK_CHANGED\",\n data: this.redoStack.length,\n });\n\n this.notify({\n type: \"UNDO_STACK_CHANGED\",\n data: this.undoStack.length,\n });\n };\n}\n\nexport const timeline = Timeline.getInstance();\n","import type { GeoJSONSource } from \"maplibre-gl\";\n\nimport type { LatLng, RequiredDrawOptions } from \"#app/types/index\";\nimport type { UnifiedMap } from \"#app/types/map\";\nimport type { Store } from \"#app/store/index\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport { ESOURCES } from \"#app/utils/geo_constants\";\nimport { GeometryFactory } from \"#app/utils/helpers\";\n\ninterface Context {\n map: UnifiedMap;\n store: Store;\n options: RequiredDrawOptions;\n mode: DrawingMode;\n}\n\nexport class Renderer {\n private static instance: Renderer | null = null;\n private ctx: Context | null = null;\n private unifiedGeoJSON: GeoJSON.FeatureCollection<GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.Point>;\n\n constructor() {\n this.unifiedGeoJSON = {\n type: \"FeatureCollection\",\n features: [],\n };\n }\n\n public initialize(ctx: Context): Renderer | null {\n this.ctx = ctx;\n this.unifiedGeoJSON = GeometryFactory.getUnifiedFeatures(this.ctx.store);\n this.execute();\n\n return Renderer.instance;\n }\n\n public static getInstance(): Renderer {\n if (!Renderer.instance) {\n Renderer.instance = new Renderer();\n }\n return Renderer.instance;\n }\n\n private getContext(): Context {\n if (!this.ctx) {\n throw new Error(\"Somehow trolled with Renderer.getContext, check the Renderer.initialize\");\n }\n return this.ctx;\n }\n\n private updateLine(featureIdx: number, newCoord: LatLng) {\n const { mode } = this.getContext();\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.getContext();\n\n // -1 because polygon is always the last feature. Check GeometryFactory.getUnifiedFeatures\n const polygon = this.unifiedGeoJSON.features.at(-1)?.geometry.coordinates[0] as number[][];\n\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 public executeOnMouseMove = (\n featureIdx: number,\n newCoord: LatLng,\n aux: { next: LatLng | null; prev: LatLng | null } | null,\n ) => {\n const { map, mode, options, store } = this.getContext();\n\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 = map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n if (unifiedSource) {\n unifiedSource.setData(this.unifiedGeoJSON);\n }\n };\n\n public execute() {\n const { map, store } = this.getContext();\n\n this.unifiedGeoJSON = GeometryFactory.getUnifiedFeatures(store);\n const unifiedSource = map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n\n if (unifiedSource) {\n unifiedSource.setData(this.unifiedGeoJSON);\n }\n }\n\n public resetGeometries = () => {\n const { map } = this.getContext();\n\n const unifiedSource = map.getSource(ESOURCES.UnifiedSource) as GeoJSONSource;\n if (unifiedSource) {\n unifiedSource.setData({\n type: \"FeatureCollection\",\n features: [],\n });\n }\n };\n}\n\nexport const renderer = Renderer.getInstance();\n","import { StoreHelpers } from \"#app/store/index\";\nimport type { ButtonType, LatLng, Step } from \"#app/types/index\";\nimport type { HTMLEvent } from \"#app/types/helpers\";\nimport { DOM } from \"#app/utils/dom\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { FireEvents } from \"#components/map/helpers\";\nimport { timeline } from \"#app/history\";\nimport { renderer } from \"#components/map/renderer\";\nimport { Context } from \".\";\nimport { View } from \"./view\";\n\nexport class Events {\n private tooltip: Tooltip;\n\n constructor(private readonly ctx: Context & { view: View }) {\n this.tooltip = new Tooltip();\n }\n\n public initEvents() {\n const undoButton = this.ctx.view.getButton(\"undo\");\n\n if (undoButton) {\n DOM.addEventListener(undoButton, \"click\", this.onUndoClick);\n DOM.addEventListener(undoButton, \"mouseenter\", this.onMouseEnter as EventListenerOrEventListenerObject);\n DOM.addEventListener(undoButton, \"mouseleave\", this.onMouseLeave);\n }\n\n const redoButton = this.ctx.view.getButton(\"redo\");\n if (redoButton) {\n DOM.addEventListener(redoButton, \"click\", this.onRedoClick);\n DOM.addEventListener(redoButton, \"mouseenter\", this.onMouseEnter as EventListenerOrEventListenerObject);\n DOM.addEventListener(redoButton, \"mouseleave\", this.onMouseLeave);\n }\n\n const deleteButton = this.ctx.view.getButton(\"delete\");\n if (deleteButton) {\n DOM.addEventListener(deleteButton, \"click\", this.onRemoveAll);\n DOM.addEventListener(deleteButton, \"mouseenter\", this.onMouseEnter as EventListenerOrEventListenerObject);\n DOM.addEventListener(deleteButton, \"mouseleave\", this.onMouseLeave);\n }\n\n const saveButton = this.ctx.view.getButton(\"save\");\n if (saveButton) {\n DOM.addEventListener(saveButton, \"click\", this.onSaveClick);\n DOM.addEventListener(saveButton, \"mouseenter\", this.onMouseEnter as EventListenerOrEventListenerObject);\n DOM.addEventListener(saveButton, \"mouseleave\", this.onMouseLeave);\n }\n }\n\n public removeEvents() {\n const undoButton = this.ctx.view.getButton(\"undo\");\n if (undoButton) {\n DOM.removeEventListener(undoButton, \"click\", this.onUndoClick);\n DOM.removeEventListener(undoButton, \"mouseenter\", this.onMouseEnter as EventListenerOrEventListenerObject);\n DOM.removeEventListener(undoButton, \"mouseleave\", this.onMouseLeave);\n }\n const redoButton = this.ctx.view.getButton(\"redo\");\n if (redoButton) {\n DOM.removeEventListener(redoButton, \"click\", this.onRedoClick);\n DOM.removeEventListener(redoButton, \"mouseenter\", this.onMouseEnter as EventListenerOrEventListenerObject);\n DOM.removeEventListener(redoButton, \"mouseleave\", this.onMouseLeave);\n }\n\n const deleteButton = this.ctx.view.getButton(\"delete\");\n if (deleteButton) {\n DOM.removeEventListener(deleteButton, \"click\", this.onRemoveAll);\n DOM.removeEventListener(deleteButton, \"mouseenter\", this.onMouseEnter as EventListenerOrEventListenerObject);\n DOM.removeEventListener(deleteButton, \"mouseleave\", this.onMouseLeave);\n }\n\n const saveButton = this.ctx.view.getButton(\"save\");\n if (saveButton) {\n DOM.removeEventListener(saveButton, \"click\", this.onSaveClick);\n DOM.removeEventListener(saveButton, \"mouseenter\", this.onMouseEnter as EventListenerOrEventListenerObject);\n DOM.removeEventListener(saveButton, \"mouseleave\", this.onMouseLeave);\n }\n }\n\n private getButtonLabel = (type: ButtonType) => {\n const { options } = this.ctx;\n\n const LABELS: Record<ButtonType, string> = {\n undo: options.locale.undo,\n redo: options.locale.redo,\n delete: options.locale.delete,\n save: options.locale.save,\n };\n\n return LABELS[type];\n };\n\n private 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,\n placement: \"bottom\",\n })\n .setPosition(this.tooltip.getPosition(event, \"bottom\"));\n }\n };\n\n private onMouseLeave = () => {\n this.tooltip.remove();\n };\n\n private onRemoveAll = (event: Event) => {\n const { mode, view, store, map } = this.ctx;\n store.reset();\n view.hide();\n mode.reset();\n this.tooltip.remove();\n timeline.resetStacks();\n renderer.resetGeometries();\n FireEvents.removeAllPoints(map, event);\n };\n\n private onUndoClick = (event: Event) => {\n const { store, map, view } = this.ctx;\n const hasSomethingToRedo = timeline.getRedoStackLength();\n\n // hasSomethingToRedo prevents from resetting the store when we still have something to redo and are trying to remove the last point by undoing\n if (store.size === 1 && hasSomethingToRedo) {\n store.reset();\n this.ctx.view.hide();\n } else {\n timeline.undo();\n }\n this.tooltip.remove();\n FireEvents.undo({ ...(store.tail?.val as Step), total: store.size }, map, event);\n renderer.execute();\n };\n\n private onRedoClick = (event: Event) => {\n const { store, map } = this.ctx;\n\n timeline.redo();\n FireEvents.redo({ ...(store.tail?.val as Step), total: store.size }, map, event);\n renderer.execute();\n };\n\n private onSaveClick = (event: Event) => {\n const { store, options } = this.ctx;\n\n FireEvents.onSaveClick(this.ctx, 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 { LatLng } from \"#app/types/index\";\nimport { disableButton, enableButton } from \"#app/utils/helpers\";\nimport type { StoreChangeEvent } from \"#app/store/types\";\nimport type { DrawingModeChangeEvent } from \"#components/map/mode/types\";\nimport { timeline } from \"#app/history\";\nimport { TimelineChangeEvent } from \"#app/history/types\";\nimport { Context } from \".\";\nimport { View } from \"./view\";\n\nexport class Observer {\n constructor(private readonly ctx: Context & { view: View; setPanelLocation: (coordinates: LatLng) => void }) {}\n\n public initConsumers() {\n this.ctx.store.addObserver(this.onStoreChangeConsumer);\n this.ctx.mode?.addObserver(this.onMapModeConsumer);\n timeline.addObserver(this.onTimelineChangeConsumer);\n }\n\n public removeConsumers() {\n this.ctx.store.removeObserver(this.onStoreChangeConsumer);\n this.ctx.mode?.removeObserver(this.onMapModeConsumer);\n timeline.removeObserver(this.onTimelineChangeConsumer);\n }\n\n private onTimelineChangeConsumer = (event: TimelineChangeEvent) => {\n const { type, data } = event;\n if (type === \"REDO_STACK_CHANGED\") {\n if (!data) {\n disableButton(this.ctx.view.getButton(\"redo\"));\n } else {\n enableButton(this.ctx.view.getButton(\"redo\"));\n }\n }\n\n if (type === \"UNDO_STACK_CHANGED\") {\n if (!data) {\n disableButton(this.ctx.view.getButton(\"undo\"));\n } else {\n enableButton(this.ctx.view.getButton(\"undo\"));\n }\n }\n };\n\n private onStoreChangeConsumer = (event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\") {\n const { data } = event;\n if (data?.size === 0) {\n this.ctx.view.hide();\n } else {\n let current = Object.assign({}, data);\n\n // TODO why the hell do we need a loop here? We don't like loops\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.ctx.setPanelLocation({\n lat: current.tail.val.lat,\n lng: current.tail.val.lng,\n });\n }\n break;\n }\n }\n }\n }\n };\n\n private onMapModeConsumer = (event: DrawingModeChangeEvent) => {\n const { store } = this.ctx;\n const { type, data } = event;\n if (type === \"MODE_CHANGED\" && !data) {\n this.ctx.view.hide();\n }\n if (type === \"MODE_CHANGED\" && data) {\n if (store.tail?.val) {\n this.ctx.setPanelLocation({\n lat: store.tail?.val?.lat,\n lng: store.tail?.val?.lng,\n });\n }\n }\n };\n}\n","import type { UnifiedMap } from \"#app/types/map\";\nimport type { LatLng, RequiredDrawOptions } from \"#app/types/index\";\nimport type { Store } from \"#app/store/index\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport { UIState } from \"./state\";\nimport { View } from \"./view\";\nimport { Events } from \"./events\";\nimport \"./panel.css\";\nimport { Observer } from \"./observer\";\n\nexport interface Context {\n map: UnifiedMap;\n mode: DrawingMode;\n options: RequiredDrawOptions;\n store: Store;\n}\n\nconst OFFSET_Y = 20;\n\nexport class Panel {\n private readonly view: View;\n private readonly state = new UIState();\n private readonly events: Events;\n private readonly observer: Observer;\n private resizeObserver!: ResizeObserver;\n\n private readonly onMapMove = () => this.schedulePositionUpdate();\n\n constructor(private readonly ctx: Context) {\n this.view = new View(ctx);\n this.events = new Events({\n ...ctx,\n view: this.view,\n });\n this.observer = new Observer({\n ...ctx,\n view: this.view,\n setPanelLocation: this.setPanelLocation,\n });\n\n this.init();\n }\n\n private init() {\n const { store } = this.ctx;\n this.resizeObserver = this.view.observeResize(this.measureAnchor);\n this.measureAnchor();\n if (store.tail?.val) this.setPanelLocation(store.tail.val);\n this.events.initEvents();\n this.observer.initConsumers();\n }\n\n public destroy() {\n this.observer.removeConsumers();\n this.events.removeEvents();\n if (this.state.listenersActive) {\n this.disableListeners();\n }\n this.resizeObserver.disconnect();\n cancelAnimationFrame(this.state.rafId);\n this.view.destroy();\n }\n\n private enableListeners() {\n if (this.state.listenersActive) return;\n const map = this.ctx.map;\n map.on(\"move\", this.onMapMove);\n map.on(\"zoom\", this.onMapMove);\n this.state.listenersActive = true;\n }\n\n private disableListeners() {\n if (!this.state.listenersActive) return;\n const map = this.ctx.map;\n map.off(\"move\", this.onMapMove);\n map.off(\"zoom\", this.onMapMove);\n this.state.listenersActive = false;\n }\n\n public setPanelLocation = (coordinates: LatLng) => {\n this.state.pendingCoord = coordinates;\n this.enableListeners();\n this.schedulePositionUpdate();\n this.show();\n };\n\n private measureAnchor = () => {\n const { width, height } = this.view.getRoot().getBoundingClientRect();\n this.state.anchor = { dx: -width / 2, dy: -height - OFFSET_Y };\n this.schedulePositionUpdate();\n };\n\n private schedulePositionUpdate = () => {\n if (this.state.rafId) return;\n this.state.rafId = requestAnimationFrame(() => {\n this.state.rafId = 0;\n if (this.state.pendingCoord) {\n const point = this.ctx.map.project(this.state.pendingCoord);\n const { dx, dy } = this.state.anchor;\n this.view.setTransform(point.x + dx, point.y + dy);\n }\n });\n };\n\n private setVisible(visible: boolean) {\n this.state.isHidden = !visible;\n if (visible) this.view.show();\n else this.view.hide();\n }\n\n public show = () => this.setVisible(true);\n public hide = () => this.setVisible(false);\n}\n","import { Command } from \"#app/history\";\nimport { ListNode, Store } from \"#app/store\";\nimport type { LatLng, Step } from \"#app/types\";\nimport { uuidv4 } from \"#app/utils/helpers\";\n\ninterface Snapshot {\n insertedNode: ListNode | null;\n}\n\nexport class InsertPointCommand implements Command {\n type: string = \"STORE_POINT_INSERTED\";\n payload: { node: Step };\n private readonly step: Step;\n private snapshot: Snapshot = {\n insertedNode: null,\n };\n\n constructor(\n private readonly store: Store,\n coords: LatLng,\n private segmentStart: ListNode,\n ) {\n this.step = { id: uuidv4(), isAuxiliary: false, ...coords };\n this.payload = { node: this.step };\n }\n\n private restoreInsertedNode = (node: ListNode) => {\n const prev = node.prev;\n const next = node.next;\n\n if (prev) {\n prev.next = node;\n } else {\n this.store.head = node;\n }\n\n if (next) {\n next.prev = node;\n } else {\n this.store.tail = node;\n }\n\n const betweenHeadAndTail = this.store.tail === prev && this.store.head === next;\n if (betweenHeadAndTail) {\n this.store.tail = node;\n if (this.store.head) this.store.head.prev = node;\n }\n\n if (node.val && !this.store.map.has(node.val.id)) {\n this.store.map.set(node.val.id, node);\n this.store.size++;\n this.store.pingConsumers();\n }\n };\n\n execute = () => {\n if (this.snapshot.insertedNode) {\n this.restoreInsertedNode(this.snapshot.insertedNode);\n } else {\n this.snapshot.insertedNode = this.store.insertAfter(this.segmentStart, this.step);\n }\n\n this.store.notify({ type: \"STORE_POINT_INSERTED\" });\n };\n\n undo = () => {\n this.store.removeNodeById(this.step.id);\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\nimport type { MapEventsCtx, Step } from \"#app/types/index\";\nimport type { UnifiedMap } from \"#app/types/map\";\n\nimport type { Store } from \"#app/store/index\";\nimport { ELAYERS } from \"#app/utils/geo_constants\";\nimport { MapUtils, Spatial, uuidv4 } from \"#app/utils/helpers\";\nimport { PointVisibility } from \"../points/helpers\";\nimport { timeline } from \"#app/history\";\nimport { InsertPointCommand } from \"../points/commands/insert-point\";\nimport { renderer } from \"../renderer\";\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 UnifiedMap;\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 segmentStart = isOnLine(event, store);\n\n if (segmentStart) {\n const step = { ...event.lngLat, isAuxiliary: false, id: uuidv4() };\n timeline.commit(new InsertPointCommand(store, step, segmentStart));\n return step;\n }\n return null;\n};\n\nexport const updateUIAfterInsert = (event: MapLayerMouseEvent, context: MapEventsCtx) => {\n const { store } = context;\n if (store.tail?.val) {\n PointVisibility.setSinglePointHidden(event);\n renderer.execute();\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 type { Command } from \"#app/history\";\nimport type { ListNode, Store } from \"#app/store\";\nimport type { StoreChangeEventKeys } from \"#app/store/types\";\nimport type { RequiredDrawOptions } from \"#app/types\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport type { LatLng } from \"#app/types/index\";\n\ninterface Snapshot {\n originalHead: ListNode | null;\n originalTail: ListNode | null;\n newHead: ListNode | null;\n newTail: ListNode | null;\n newAuxBetweenHeadTail: ListNode | null;\n}\n\nexport class BreakGeometryCommand implements Command {\n type: StoreChangeEventKeys = \"STORE_BREAK_GEOMETRY\";\n\n private snapshot: Snapshot = {\n originalHead: null,\n originalTail: null,\n newHead: null,\n newTail: null,\n newAuxBetweenHeadTail: null,\n };\n\n constructor(\n private readonly store: Store,\n private readonly options: RequiredDrawOptions,\n private readonly mode: DrawingMode,\n private readonly current: ListNode,\n private readonly clickCoords: LatLng,\n ) {}\n\n private makeSnapshot = () => {\n this.snapshot.originalHead = this.store.head;\n this.snapshot.originalTail = this.store.tail;\n this.snapshot.newAuxBetweenHeadTail = this.current.val?.isAuxiliary ? this.current : this.current.next;\n };\n\n public execute = () => {\n this.makeSnapshot();\n\n this.store.circular.break(this.current);\n this.mode.setClosedGeometry(false);\n\n // save the new head and tail after breaking the geometry\n this.snapshot.newHead = this.store.head;\n this.snapshot.newTail = this.store.tail;\n\n // notify the panel to update the UI\n this.store.notify({ type: \"STORE_BREAK_GEOMETRY\", data: { coords: this.clickCoords } });\n };\n\n private restoreOriginalHeadTail = () => {\n const { originalHead, originalTail } = this.snapshot;\n this.store.head = originalHead;\n this.store.tail = originalTail;\n if (this.store.head) {\n this.store.head.prev = this.store.tail;\n }\n if (this.store.tail) {\n this.store.tail.next = this.store.head;\n }\n };\n\n private restoreAuxBetweenNewHeadTail = () => {\n const { newHead, newTail, newAuxBetweenHeadTail } = this.snapshot;\n\n if (newHead && newTail) {\n newTail.next = newAuxBetweenHeadTail;\n newAuxBetweenHeadTail!.prev = newTail;\n newAuxBetweenHeadTail!.next = newHead;\n newHead.prev = newAuxBetweenHeadTail;\n if (newAuxBetweenHeadTail?.val) {\n this.store.map.set(newAuxBetweenHeadTail?.val.id, newAuxBetweenHeadTail);\n this.store.size += 1;\n }\n }\n };\n\n public undo = () => {\n this.restoreOriginalHeadTail();\n this.store.circular.close();\n this.store.notify({ type: \"STORE_CLOSE_GEOMETRY\" });\n\n const { newHead, newTail, newAuxBetweenHeadTail } = this.snapshot;\n // restore old node connections. These are the nodes that were \"removed\" when breaking the geometry previously\n if (newHead && newTail) {\n if (this.options.pointGeneration === \"auto\") {\n this.restoreAuxBetweenNewHeadTail();\n } else {\n newTail.next = newHead;\n newHead.prev = newTail;\n }\n }\n this.mode.setClosedGeometry(true);\n // notify the panel to update the UI\n this.store.pingConsumers();\n };\n}\n","import { GeoJSONSource, MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport type { ListNode } from \"#app/store/index\";\nimport type { MapEventsCtx } from \"#app/types/index\";\nimport { ELAYERS, ESOURCES } from \"#app/utils/geo_constants\";\nimport { GeometryFactory, throttle } from \"#app/utils/helpers\";\n\nimport { isOnLine } from \"./utils\";\nimport { FireEvents } from \"../helpers\";\nimport { timeline } from \"#app/history\";\nimport { BreakGeometryCommand } from \"./commands/break-geometry\";\nimport { renderer } from \"../renderer\";\n\nconst LINE_BREAK_THROTTLE_TIME = 15;\n\nexport class LineBreakEvents {\n private current: ListNode | null;\n private throttledOnLineEnter: (event: MapLayerMouseEvent) => void;\n\n constructor(private readonly ctx: MapEventsCtx) {\n this.current = null;\n this.throttledOnLineEnter = throttle(this.onLineEnterBreak, LINE_BREAK_THROTTLE_TIME);\n }\n\n public initBreakEvents = () => {\n this.ctx.map.on(\"click\", ELAYERS.LineLayer, this.geometryBreakOnClick);\n this.ctx.map.on(\"mouseenter\", ELAYERS.LineLayer, this.throttledOnLineEnter);\n this.ctx.map.on(\"mousemove\", ELAYERS.LineLayer, this.throttledOnLineEnter);\n this.ctx.map.on(\"mouseleave\", ELAYERS.LineLayer, this.onLineLeave);\n };\n\n public removeBreakEvents = () => {\n this.ctx.map.off(\"click\", ELAYERS.LineLayer, this.geometryBreakOnClick);\n this.ctx.map.off(\"mouseenter\", ELAYERS.LineLayer, this.throttledOnLineEnter);\n this.ctx.map.off(\"mousemove\", ELAYERS.LineLayer, this.throttledOnLineEnter);\n this.ctx.map.off(\"mouseleave\", ELAYERS.LineLayer, this.onLineLeave);\n };\n\n public hideBreakLine = () => {\n if (this.ctx.map.getLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\") !== \"none\") {\n this.ctx.map.setLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\", \"none\");\n }\n };\n\n public showBreakLine = () => {\n if (this.ctx.map.getLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\") !== \"visible\") {\n this.ctx.map.setLayoutProperty(ELAYERS.LineLayerBreak, \"visibility\", \"visible\");\n }\n };\n\n private geometryBreakOnClick = (event: MapLayerMouseEvent) => {\n const { store, mode, map, options } = this.ctx;\n\n if (!this.current) return;\n timeline.commit(new BreakGeometryCommand(store, options, mode, this.current, event.lngLat));\n this.onLineLeave();\n mode.reset();\n renderer.execute();\n FireEvents.onLineBreak(map);\n };\n\n private 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 private getLinePoints = (line: ListNode | null) => {\n if (this.ctx.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 private onLineEnterBreak = (event: MapLayerMouseEvent) => {\n const { map, store } = this.ctx;\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 private 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 { MapEventsCtx, LatLng } from \"#app/types/index\";\nimport { ELAYERS, ESOURCES, LINE_BASE } from \"#app/utils/geo_constants\";\nimport type { StoreChangeEvent } from \"#app/store/types\";\nimport { debounce, GeometryFactory, MapUtils, throttle } from \"#app/utils/helpers\";\nimport { EVENTS } from \"#app/utils/constants\";\n\nimport type { PointRightClickRemoveEvent, UndoEvent } from \"../types\";\nimport type { MouseEventsChangeEvent, MapMouseEvent } from \"../mouse-events/types\";\n\nconst LINE_DYNAMIC_THROTTLE_TIME = 17; // 60 FPS\n\nexport class DynamicLineEvents {\n private visible: boolean;\n private firstPoint: LatLng | null = null;\n private secondPoint: LatLng | null = null;\n private lineFeature: any;\n private onMouseMoveThrottled: (event: MapLayerMouseEvent) => void;\n private onStoreEventsDebounced: (event: StoreChangeEvent) => void;\n\n constructor(private readonly ctx: MapEventsCtx) {\n this.visible = true;\n this.onMouseMoveThrottled = throttle(this.onLineMove, LINE_DYNAMIC_THROTTLE_TIME);\n this.onStoreEventsDebounced = debounce(this.onStoreEventsConsumer, 10);\n this.initConsumers();\n this.initDynamicEvents();\n }\n\n private initConsumers() {\n this.ctx.store.addObserver(this.onStoreEventsDebounced);\n this.ctx.mouseEvents.addObserver(this.onMouseEventsConsumer);\n }\n\n public removeConsumers = () => {\n this.ctx.store.removeObserver(this.onStoreEventsDebounced);\n this.ctx.mouseEvents.removeObserver(this.onMouseEventsConsumer);\n };\n\n private onMouseEventsConsumer = (event: MouseEventsChangeEvent) => {\n const { store } = this.ctx;\n if (store.circular.isCircular()) {\n this.hide();\n return;\n }\n\n // this one is needed to turn off the dynamic line when the last point is clicked\n if (event.type === \"lastPointMouseClick\" && event.data) {\n this.hide();\n this.visible = false;\n }\n // this is needed to not trigger \"show\" function if the last point was clicked and we just hover a point or a line\n // doesn't matter, will rewrite this part\n if (!this.visible) return;\n\n // not sure about this, but looks like a good idea to hide the dynamic line on these events\n const HIDE_EVENTS = [\"pointMouseEnter\", \"lineMouseEnter\", \"pointMouseDown\"] as MapMouseEvent[];\n if (HIDE_EVENTS.includes(event.type) && event.data) {\n this.hide();\n }\n\n // if we hid the dynamic line there ^, then we obviously need to show it again\n if (event.type === \"pointMouseLeave\" || event.type === \"lineMouseLeave\") {\n const { store } = this.ctx;\n if (store.circular.isCircular()) return;\n if (event.data) {\n this.firstPoint = store.tail?.val as LatLng;\n this.secondPoint = store.tail?.val as LatLng;\n this.show();\n }\n }\n };\n\n private onStoreEventsConsumer = (event: StoreChangeEvent) => {\n const { store } = this.ctx;\n if (store.circular.isCircular()) {\n this.hide();\n\n return;\n }\n\n if (event.type === \"STORE_CLOSE_GEOMETRY\" || event.type === \"STORE_CLEARED\") {\n this.hide();\n } else if (event.type === \"STORE_BREAK_GEOMETRY\") {\n this.firstPoint = store.tail?.val as LatLng;\n this.secondPoint = event.data?.coords as LatLng;\n this.show();\n this.visible = true;\n } else if (event.type === \"STORE_POINT_ADD\") {\n if (store.size > 0) {\n this.firstPoint = store.tail?.val as LatLng;\n this.secondPoint = store.tail?.val as LatLng;\n this.show();\n this.visible = true;\n }\n }\n };\n\n private initDynamicEvents = () => {\n const { map } = this.ctx;\n map.on(\"click\", this.onMapClick);\n map.on(\"mousemove\", this.onMouseMoveThrottled);\n map.on(EVENTS.REMOVEALL, this.hide);\n map.on(EVENTS.UNDO, this.onUndoRedoClick);\n map.on(EVENTS.REDO, this.onUndoRedoClick);\n map.on(EVENTS.RIGHTCLICKREMOVE, this.onRightClickRemove);\n };\n\n public removeEvents = () => {\n const { map } = this.ctx;\n\n map.off(\"click\", this.onMapClick);\n map.off(\"mousemove\", this.onMouseMoveThrottled);\n map.off(EVENTS.REMOVEALL, this.hide);\n map.off(EVENTS.UNDO, this.onUndoRedoClick);\n map.off(EVENTS.REDO, this.onUndoRedoClick);\n map.off(EVENTS.RIGHTCLICKREMOVE, this.onRightClickRemove);\n };\n\n public hide = () => {\n const { map } = this.ctx;\n\n this.firstPoint = null;\n this.secondPoint = null;\n this.lineFeature = null;\n map.off(\"mousemove\", this.onMouseMoveThrottled);\n\n const lineSource = map.getSource(ESOURCES.LineDynamicSource) as GeoJSONSource;\n if (lineSource) {\n lineSource.setData(LINE_BASE as GeoJSON.FeatureCollection);\n }\n if (map.getLayer(ELAYERS.LineDynamicLayer)) {\n map.setLayoutProperty(ELAYERS.LineDynamicLayer, \"visibility\", \"none\");\n }\n };\n\n private show = () => {\n const { map, store } = this.ctx;\n\n if (store.size && this.firstPoint?.lat && this.firstPoint.lng && this.secondPoint?.lng && this.secondPoint?.lat) {\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.onMouseMoveThrottled);\n };\n\n private renderLineOnMouseMove = (newCoord: LatLng) => {\n if (!this.lineFeature) return;\n const { map } = this.ctx;\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 private onLineMove = (event: MapLayerMouseEvent) => {\n this.renderLineOnMouseMove(event.lngLat);\n };\n\n private onMapClick = (event: MapLayerMouseEvent) => {\n const { mode } = this.ctx;\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.hide();\n };\n\n private onUndoRedoClick = (event: UndoEvent) => {\n const { store } = this.ctx;\n\n if (!store.circular.isCircular()) {\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.show();\n }\n\n if (store.size === 0) {\n this.hide();\n }\n };\n\n private onRightClickRemove = (event: PointRightClickRemoveEvent) => {\n const { store } = this.ctx;\n if (!store.circular.isCircular()) {\n this.secondPoint = { lng: event.coordinates.lng, lat: event.coordinates.lat };\n this.firstPoint = store.tail?.val as LatLng;\n this.show();\n }\n if (store.size === 0) {\n this.hide();\n }\n };\n}\n","import type { GeoJSONSource, MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport type { MapEventsCtx } from \"#app/types/index\";\nimport { ELAYERS, ESOURCES } from \"#app/utils/geo_constants\";\nimport { MapUtils, throttle } from \"#app/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 private isThrottled: boolean;\n private lastEvent: MapLayerMouseEvent | null;\n\n constructor(private readonly ctx: MapEventsCtx) {\n this.isThrottled = false;\n this.lastEvent = null;\n }\n\n initEvents() {\n this.ctx.map.on(\"click\", ELAYERS.LineLayerTransparent, this.onLineClick);\n this.ctx.map.on(\"mousemove\", ELAYERS.LineLayerTransparent, this.onLineMove);\n this.ctx.map.on(\"mouseenter\", ELAYERS.LineLayerTransparent, this.onLineEnter);\n this.ctx.map.on(\"mouseleave\", ELAYERS.LineLayerTransparent, this.onLineLeave);\n }\n\n removeEvents() {\n this.ctx.map.off(\"click\", ELAYERS.LineLayerTransparent, this.onLineClick);\n this.ctx.map.off(\"mousemove\", ELAYERS.LineLayerTransparent, this.onLineMove);\n this.ctx.map.off(\"mouseenter\", ELAYERS.LineLayerTransparent, this.onLineEnter);\n this.ctx.map.off(\"mouseleave\", ELAYERS.LineLayerTransparent, this.onLineLeave);\n }\n\n private onLineClick = (event: MapLayerMouseEvent) => {\n const { store, map, mode } = this.ctx;\n if (checkIfPointClicked(event)) return;\n const step = insertStepIfOnLine(event, store);\n if (step) {\n updateUIAfterInsert(event, this.ctx);\n FireEvents.addPoint({ ...step, total: store.size }, map, mode);\n }\n };\n\n private 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 private onLineMove = throttle((event: MapLayerMouseEvent) => {\n if (MapUtils.isFeatureTriggered(event, [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer])) return;\n if (this.ctx.mouseEvents.pointMouseDown || this.ctx.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 private onLineEnter = (event: MapLayerMouseEvent) => {\n if (this.ctx.mouseEvents.pointMouseDown || this.ctx.mouseEvents.pointMouseEnter) return;\n if (MapUtils.isFeatureTriggered(event, [ELAYERS.PointsLayer, ELAYERS.FirstPointLayer])) return;\n\n this.ctx.mouseEvents.lineMouseEnter = true;\n PointVisibility.setSinglePointVisible(event);\n };\n\n private onLineLeave = (event: MapLayerMouseEvent) => {\n if (this.ctx.mouseEvents.pointMouseDown || this.ctx.mouseEvents.pointMouseEnter) return;\n\n this.ctx.mouseEvents.lineMouseLeave = true;\n PointVisibility.setSinglePointHidden(event);\n };\n}\n","import type { MapEventsCtx } from \"#app/types/index\";\nimport { MOBILE_WIDTH } from \"#app/utils/constants\";\nimport type { DrawingModeChangeEvent } from \"../mode/types\";\nimport type { 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 private break: LineBreakEvents;\n private transparent: TransparentLineEvents | null;\n private dynamic: DynamicLineEvents | null;\n private type: \"default\" | \"break\";\n\n constructor(private readonly ctx: MapEventsCtx) {\n this.break = new LineBreakEvents(ctx);\n this.transparent = ctx.options.pointGeneration === \"manual\" ? new TransparentLineEvents(ctx) : 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 private initDynamicLine = () => {\n if (window.innerWidth <= MOBILE_WIDTH) return;\n if (this.ctx.options.dynamicLine) {\n this.dynamic = new DynamicLineEvents(this.ctx);\n }\n };\n\n private initEvents() {\n const notBreakMode = !this.ctx.mode.getBreak();\n if (notBreakMode) {\n this.transparent?.initEvents();\n }\n }\n\n private initConsumers() {\n this.ctx.mode.addObserver(this.mapModeConsumer);\n this.ctx.mouseEvents.addObserver(this.mouseEventsConsumer);\n }\n\n remove() {\n this.removeConsumers();\n this.removeEvents();\n }\n\n private removeConsumers() {\n this.ctx.mode.removeObserver(this.mapModeConsumer);\n this.ctx.mouseEvents.removeObserver(this.mouseEventsConsumer);\n if (this.ctx.options.dynamicLine) {\n this.dynamic?.removeConsumers();\n }\n }\n\n private removeEvents() {\n this.break.removeBreakEvents();\n this.transparent?.removeEvents();\n if (this.ctx.options.dynamicLine) {\n this.dynamic?.removeEvents();\n this.dynamic?.hide();\n }\n }\n\n private mouseEventsConsumer = (event: MouseEventsChangeEvent) => {\n const { type, data } = event;\n const { mode } = this.ctx;\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 private 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 { UnifiedMap } from \"#app/types/map\";\n\nimport { ELAYERS, FIRST_POINT_COLOR, FIRST_POINT_RADIUS, generateLayersToRender } from \"#app/utils/geo_constants\";\nimport type { RequiredDrawOptions } from \"#app/types/index\";\n\nconst firstPointCircleRadius = (map: UnifiedMap) => {\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: UnifiedMap) => {\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: UnifiedMap, 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: UnifiedMap) => {\n if (map.getLayer(ELAYERS.LineLayerTransparent)) {\n map.removeLayer(ELAYERS.LineLayerTransparent);\n }\n};\n\nexport const addTransparentLine = (map: UnifiedMap, 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 { Command } from \"#app/history\";\nimport type { ListNode, Store } from \"#app/store\";\nimport type { StoreChangeEventKeys } from \"#app/store/types\";\nimport type { RequiredDrawOptions, Step, StepId } from \"#app/types\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport { PointHelpers } from \"../helpers\";\n\nexport class CloseGeometryCommand implements Command {\n type: StoreChangeEventKeys = \"STORE_CLOSE_GEOMETRY\";\n auxPointSnapshot: ListNode | null = null;\n\n constructor(\n private readonly store: Store,\n private readonly mode: DrawingMode,\n private readonly options: RequiredDrawOptions,\n ) {\n this.type = \"STORE_CLOSE_GEOMETRY\";\n }\n\n private restoreAuxPoint = () => {\n if (this.auxPointSnapshot?.val) {\n this.store.head!.prev = this.auxPointSnapshot;\n this.store.tail!.next = this.auxPointSnapshot;\n this.auxPointSnapshot.prev = this.store.tail;\n this.auxPointSnapshot.next = this.store.head;\n this.store.tail = this.auxPointSnapshot;\n this.store.map.set(this.auxPointSnapshot.val.id, this.auxPointSnapshot);\n this.store.size++;\n this.store.pingConsumers();\n }\n };\n\n public execute = () => {\n // adding aux point as the tail before closing the geometry\n if (this.options.pointGeneration === \"auto\" && this.store.tail?.val) {\n if (this.auxPointSnapshot) {\n this.restoreAuxPoint();\n } else {\n const auxPoint = PointHelpers.createAuxiliaryPoint(this.store.tail?.val, this.store.head?.val as Step);\n this.auxPointSnapshot = this.store.push(auxPoint);\n }\n }\n this.store.circular.close();\n this.mode.setClosedGeometry(true);\n this.store.notify({ type: this.type });\n };\n\n public undo = () => {\n if (this.options.pointGeneration === \"auto\") {\n this.store.removeNodeById(this.store.tail?.val?.id as StepId);\n }\n if (this.store.tail?.val && this.store.head?.val) {\n this.store.tail.next = null;\n this.store.head.prev = null;\n }\n this.mode.setClosedGeometry(false);\n this.store.notify({ type: \"STORE_BREAK_GEOMETRY\" });\n };\n}\n","import type { MapEventsCtx } from \"#app/types/index\";\nimport type { MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport { Spatial } from \"#app/utils/helpers\";\nimport { ELAYERS } from \"#app/utils/geo_constants\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { togglePointCircleRadius } from \"#components/map/tiles/helpers\";\n\nimport type { DrawingModeChangeEvent } from \"../mode/types\";\nimport { PointsFilter, PointVisibility } from \"./helpers\";\nimport type { PrimaryPointEvents } from \".\";\nimport type { StoreChangeEvent, StoreChangeEventKeys } from \"#app/store/types\";\nimport { timeline } from \"#app/history\";\nimport { CloseGeometryCommand } from \"./commands/close-geometry\";\nimport { renderer } from \"../renderer\";\n\nexport class FirstPoint {\n #mouseDown: boolean;\n #tooltip: Tooltip;\n\n constructor(\n private readonly ctx: MapEventsCtx,\n private readonly baseEvents: PrimaryPointEvents,\n ) {\n this.#mouseDown = false;\n this.#tooltip = new Tooltip();\n\n this.initLayer();\n this.initEvents();\n }\n\n private initConsumers = () => {\n const { mode, store } = this.ctx;\n mode.addObserver(this.onMapModeChanggeConsumer);\n store.addObserver(this.onStoreChangeConsumer);\n };\n\n private removeConsumers = () => {\n const { mode, store } = this.ctx;\n mode.removeObserver(this.onMapModeChanggeConsumer);\n store.removeObserver(this.onStoreChangeConsumer);\n };\n\n public initLayer() {\n const { map } = this.ctx;\n map.setLayoutProperty(ELAYERS.FirstPointLayer, \"visibility\", \"visible\");\n }\n\n private initBaseEvents = () => {\n const { map } = this.ctx;\n\n map.on(\"mouseenter\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseUp);\n map.on(\"touchend\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseUp);\n map.on(\"touchstart\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseDown);\n };\n\n private initEvents() {\n const { map } = this.ctx;\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 private removeBaseEvents = () => {\n const { map } = this.ctx;\n\n map.off(\"mouseenter\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseUp);\n map.off(\"touchend\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseUp);\n map.off(\"touchstart\", ELAYERS.FirstPointLayer, this.baseEvents.onPointMouseDown);\n };\n\n public removeEvents() {\n const { map } = this.ctx;\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 private onMapModeChanggeConsumer = (event: DrawingModeChangeEvent) => {\n const { map, options } = this.ctx;\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 private onStoreChangeConsumer = (event: StoreChangeEvent) => {\n const { map, store } = this.ctx;\n const { type } = event;\n\n const events = [\n \"STORE_MUTATED\",\n \"STORE_POINT_INSERTED\",\n \"STORE_CLOSE_GEOMETRY\",\n \"STORE_BREAK_GEOMETRY\",\n \"STORE_CLEARED\",\n ] as StoreChangeEventKeys[];\n if (events.includes(type)) {\n if (store.circular.canClose()) {\n togglePointCircleRadius(map, \"large\");\n } else {\n togglePointCircleRadius(map, \"default\");\n }\n }\n };\n\n private onFirstPointClick = () => {\n const { store, mode, options } = this.ctx;\n\n if (store.circular.canClose()) {\n timeline.commit(new CloseGeometryCommand(store, mode, options));\n\n renderer.execute();\n }\n };\n\n private onFirstPointMouseDown = () => {\n this.#mouseDown = true;\n this.#tooltip.remove();\n };\n\n private onFirstPointMouseUp = () => {\n this.#mouseDown = false;\n };\n\n private onFirstPointMouseLeave = () => {\n const { mouseEvents } = this.ctx;\n\n if (this.#mouseDown) return;\n\n mouseEvents.firstPointMouseLeave = true;\n this.#tooltip.remove();\n };\n\n private getTitle = () => {\n const { mode, options } = this.ctx;\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 private onFirstPointMouseEnter = (event: MapLayerMouseEvent) => {\n const { mode, mouseEvents, store, options } = this.ctx;\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 type { Command } from \"#app/history\";\nimport type { ListNode, Store } from \"#app/store\";\nimport type { StoreChangeEventKeys } from \"#app/store/types\";\nimport type { Step } from \"#app/types\";\nimport { PointHelpers } from \"../helpers\";\n\ninterface Snapshot {\n clickedNode: ListNode;\n prevPrimaryNode: ListNode | null;\n nextPrimaryNode: ListNode | null;\n prevAuxNode: ListNode | null;\n nextAuxNode: ListNode | null;\n}\n\nexport class AuxToPrimaryCommand implements Command {\n type: StoreChangeEventKeys = \"STORE_AUX_TO_PRIMARY\";\n snapshot: Snapshot | null = null;\n constructor(\n private readonly store: Store,\n private readonly clickedNode: ListNode,\n ) {\n this.snapshot = this.makeSnapshot(this.clickedNode);\n }\n\n private makeSnapshot(clickedNode: ListNode): Snapshot {\n const prevPrimaryNode = clickedNode.prev;\n const nextPrimaryNode = clickedNode.next;\n const prevAuxNode = null;\n const nextAuxNode = null;\n\n return {\n clickedNode,\n prevPrimaryNode,\n nextPrimaryNode,\n prevAuxNode,\n nextAuxNode,\n };\n }\n\n private restorePreviousAux = (clickedNode: ListNode) => {\n if (!this.snapshot) return;\n let { prevPrimaryNode, prevAuxNode } = this.snapshot;\n\n if (prevPrimaryNode) prevPrimaryNode.next = prevAuxNode;\n if (prevAuxNode) prevAuxNode.prev = prevPrimaryNode;\n clickedNode.prev = prevAuxNode;\n if (prevAuxNode) prevAuxNode.next = clickedNode;\n\n if (prevAuxNode?.val?.id && !this.store.map.has(prevAuxNode.val.id)) {\n this.store.map.set(prevAuxNode?.val?.id, prevAuxNode);\n this.store.size++;\n }\n };\n\n private restoreNextAux = (clickedNode: ListNode) => {\n if (!this.snapshot) return;\n let { nextPrimaryNode, nextAuxNode } = this.snapshot;\n\n clickedNode.next = nextAuxNode;\n if (nextAuxNode) {\n nextAuxNode.prev = clickedNode;\n nextAuxNode.next = nextPrimaryNode;\n }\n if (nextPrimaryNode) {\n nextPrimaryNode.prev = nextAuxNode;\n }\n\n const wasDraggingLastPoint = clickedNode.next?.next === this.store.head;\n if (wasDraggingLastPoint) {\n const lastAuxNode = clickedNode.next;\n this.store.tail = lastAuxNode;\n if (this.store.head) {\n this.store.head.prev = lastAuxNode;\n }\n if (this.store.tail) {\n this.store.tail.next = this.store.head;\n }\n }\n\n if (nextAuxNode?.val?.id) {\n this.store.map.set(nextAuxNode.val?.id, nextAuxNode);\n this.store.size++;\n }\n };\n\n private addTwoAuxiliaryPoints = (clickedNode: ListNode) => {\n if (!this.snapshot) return;\n let { nextPrimaryNode, prevPrimaryNode } = this.snapshot;\n\n if (prevPrimaryNode) {\n if (this.snapshot.prevAuxNode) {\n this.restorePreviousAux(clickedNode);\n } else {\n const prevAuxPoint = PointHelpers.createAuxiliaryPoint(prevPrimaryNode.val as Step, clickedNode.val as Step);\n this.snapshot.prevAuxNode = this.store.insertAfter(prevPrimaryNode, prevAuxPoint);\n }\n }\n\n if (nextPrimaryNode) {\n if (this.snapshot.nextAuxNode) {\n this.restoreNextAux(clickedNode);\n } else {\n const nextAuxPoint = PointHelpers.createAuxiliaryPoint(clickedNode.val as Step, nextPrimaryNode.val as Step);\n this.snapshot.nextAuxNode = this.store.insertAfter(clickedNode, nextAuxPoint);\n }\n }\n };\n\n public execute = () => {\n if (!this.snapshot) return;\n const { clickedNode } = this.snapshot;\n\n if (clickedNode && clickedNode.val) {\n clickedNode.val.isAuxiliary = false;\n this.addTwoAuxiliaryPoints(clickedNode);\n }\n };\n\n private removeTwoAuxiliaryPoints = (clickedNode: ListNode | null) => {\n if (!clickedNode || !this.snapshot) return;\n const { prevAuxNode, nextAuxNode } = this.snapshot;\n\n if (prevAuxNode?.val?.isAuxiliary) {\n this.store.removeNodeById(prevAuxNode.val?.id);\n }\n if (nextAuxNode?.val?.isAuxiliary) {\n this.store.removeNodeById(nextAuxNode?.val.id);\n }\n };\n\n public undo = () => {\n if (!this.snapshot) return;\n const { clickedNode } = this.snapshot;\n if (clickedNode && clickedNode.val) {\n clickedNode.val.isAuxiliary = true;\n this.removeTwoAuxiliaryPoints(clickedNode);\n }\n };\n}\n","import type { Command } from \"#app/history\";\nimport { ListNode, Store } from \"#app/store\";\nimport type { StoreChangeEventKeys } from \"#app/store/types\";\nimport type { LatLng } from \"#app/types\";\nimport { UnifiedMap } from \"#app/types/map\";\nimport { FireEvents } from \"#components/map/helpers\";\nimport { PointHelpers } from \"../helpers\";\n\nexport class MovePointCommand implements Command {\n type: StoreChangeEventKeys = \"STORE_POINT_MOVED\";\n end: LatLng;\n constructor(\n private readonly store: Store,\n private readonly selectedNode: ListNode,\n private readonly start: LatLng,\n private readonly map: UnifiedMap,\n ) {\n this.end = { lat: selectedNode.val!.lat, lng: selectedNode.val!.lng };\n }\n\n private updateNeighbors = (node: ListNode) => {\n const prevAux = node.prev;\n const nextAux = node.next;\n // pretty much a check for the pointGeneration === \"auto\"\n if (!prevAux?.val?.isAuxiliary && !nextAux?.val?.isAuxiliary) return;\n\n const prevPrimary = node.prev?.prev;\n const nextPrimary = node.next?.next;\n\n if (prevPrimary?.val && this.selectedNode?.val && prevAux) {\n const midPoint = PointHelpers.getMidpoint(this.selectedNode?.val, prevPrimary?.val);\n if (prevAux.val) {\n prevAux.val.lat = midPoint.lat;\n prevAux.val.lng = midPoint.lng;\n }\n }\n\n if (nextPrimary?.val && this.selectedNode?.val && nextAux) {\n const midPoint = PointHelpers.getMidpoint(this.selectedNode?.val, nextPrimary?.val);\n if (nextAux.val) {\n nextAux.val.lat = midPoint.lat;\n nextAux.val.lng = midPoint.lng;\n }\n }\n };\n\n public execute = () => {\n if (!this.selectedNode.val) return;\n const point = this.store.findStepById(this.selectedNode.val?.id);\n if (point) {\n point.lat = this.end.lat;\n point.lng = this.end.lng;\n this.updateNeighbors(this.selectedNode);\n\n this.store.notify({\n type: \"STORE_MUTATED\",\n data: this.store,\n });\n FireEvents.movePoint(\n {\n id: this.selectedNode.val.id,\n total: this.store.size,\n end: { lat: this.selectedNode.val.lat, lng: this.selectedNode.val.lng },\n start: this.start as LatLng,\n },\n this.map,\n );\n }\n };\n\n public undo = () => {\n if (!this.selectedNode.val) return;\n const point = this.store.findStepById(this.selectedNode.val?.id);\n if (point) {\n point.lat = this.start.lat;\n point.lng = this.start.lng;\n this.updateNeighbors(this.selectedNode);\n\n this.store.notify({\n type: \"STORE_MUTATED\",\n data: this.store,\n });\n FireEvents.movePoint(\n {\n id: this.selectedNode.val.id,\n total: this.store.size,\n end: this.start,\n start: this.end,\n },\n this.map,\n );\n }\n };\n}\n","import type { MapEventsCtx, LatLng } from \"#app/types/index\";\nimport { ELAYERS } from \"#app/utils/geo_constants\";\nimport type { MapLayerMouseEvent, MapTouchEvent } from \"maplibre-gl\";\nimport type { PrimaryPointEvents } from \".\";\nimport { timeline } from \"#app/history\";\nimport { AuxToPrimaryCommand } from \"./commands/aux-to-primary\";\nimport { MapUtils } from \"#app/utils/helpers\";\nimport { addTransparentLine } from \"../tiles/helpers\";\nimport { MovePointCommand } from \"./commands/move-point\";\nimport type { PointState } from \"./point-state\";\nimport type { PointTopologyManager } from \"./point-topology-manager\";\nimport { renderer } from \"../renderer\";\n\nexport class AuxPoints {\n constructor(\n private readonly ctx: MapEventsCtx,\n private readonly baseEvents: PrimaryPointEvents,\n private readonly pointState: PointState,\n private readonly topologyManager: PointTopologyManager,\n ) {\n this.initEvents();\n }\n\n private initBaseEvents = () => {\n const { map } = this.ctx;\n\n map.on(\"mouseenter\", ELAYERS.AuxiliaryPointLayer, this.baseEvents.onPointMouseEnter);\n map.on(\"mouseleave\", ELAYERS.AuxiliaryPointLayer, this.baseEvents.onPointMouseLeave);\n map.on(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.baseEvents.onPointMouseDown);\n map.on(\"mouseup\", ELAYERS.PointsLayer, this.onMouseUp);\n map.on(\"touchend\", ELAYERS.PointsLayer, this.onMouseUp);\n map.on(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.baseEvents.onPointMouseDown);\n };\n\n private removeBaseEvents = () => {\n const { map } = this.ctx;\n\n map.off(\"mouseenter\", ELAYERS.AuxiliaryPointLayer, this.baseEvents.onPointMouseEnter);\n map.off(\"mouseleave\", ELAYERS.AuxiliaryPointLayer, this.baseEvents.onPointMouseLeave);\n map.off(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.baseEvents.onPointMouseDown);\n map.off(\"mouseup\", ELAYERS.PointsLayer, this.onMouseUp);\n map.off(\"touchend\", ELAYERS.PointsLayer, this.onMouseUp);\n map.off(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.baseEvents.onPointMouseDown);\n };\n\n private initEvents() {\n const { map } = this.ctx;\n\n map.on(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.onMouseDown);\n map.on(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.onMouseDown);\n // PointsLayer becasue aux is already false\n this.initBaseEvents();\n }\n\n public removeEvents() {\n const { map } = this.ctx;\n map.off(\"mousedown\", ELAYERS.AuxiliaryPointLayer, this.onMouseDown);\n map.off(\"touchstart\", ELAYERS.AuxiliaryPointLayer, this.onMouseDown);\n\n this.removeBaseEvents();\n }\n\n private onMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, map } = this.ctx;\n\n // right click TODO\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\n if (node) {\n timeline.beginTransaction(\"PointCompound\");\n timeline.commit(new AuxToPrimaryCommand(store, node));\n renderer.execute();\n }\n };\n\n private onMouseUp = () => {\n const { mouseEvents, store, panel, map, options } = this.ctx;\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 panel?.show();\n if (this.pointState.isMoved()) {\n timeline.commit(new MovePointCommand(store, selectedNode, startCoordinates as LatLng, map));\n timeline.commitTransaction();\n }\n this.pointState.partialReset();\n }\n\n if (mouseEvents) {\n mouseEvents.pointMouseDown = false;\n }\n\n addTransparentLine(map, options);\n };\n}\n","import { ListNode } from \"#app/store/index\";\nimport { LatLng, Step } from \"#app/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 private moved: boolean = false;\n\n public getSelectedNode(): ListNode | null {\n return this.selectedNode;\n }\n\n public isMoved(): boolean {\n return this.moved;\n }\n\n public getSelectedIdx(): number | null {\n return this.selectedIdx;\n }\n\n public getStartCoordinates(): LatLng | null {\n return this.startCoordinates;\n }\n\n public getEnteredStep(): Step | null {\n return this.enteredStep;\n }\n\n public getLastEvent(): MapLayerMouseEvent | null {\n return this.lastEvent;\n }\n\n public setSelectedNode(node: ListNode | null): void {\n this.selectedNode = node;\n }\n\n public setSelectedIdx(idx: number | null): void {\n this.selectedIdx = idx;\n }\n\n public setStartCoordinates(coordinates: LatLng | null): void {\n this.startCoordinates = coordinates;\n }\n\n public setEnteredStep(step: Step | null): void {\n this.enteredStep = step;\n }\n\n public setLastEvent(event: MapLayerMouseEvent | null): void {\n this.lastEvent = event;\n }\n\n public setMoved(moved: boolean): void {\n this.moved = moved;\n }\n\n public clearLastEvent(): void {\n this.lastEvent = null;\n }\n\n public 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 public partialReset(): void {\n this.selectedNode = null;\n this.selectedIdx = null;\n this.startCoordinates = null;\n this.lastEvent = null;\n this.moved = false;\n }\n}\n","import type { Command } from \"#app/history\";\nimport { ListNode, Store } from \"#app/store\";\nimport type { StoreChangeEventKeys } from \"#app/store/types\";\nimport type { LatLng, RequiredDrawOptions, Step } from \"#app/types\";\nimport { uuidv4 } from \"#app/utils/helpers\";\nimport { PointHelpers } from \"../helpers\";\n\ninterface Snapshot {\n addedNode: ListNode | null;\n auxNode: ListNode | null;\n}\n\nexport class AddPointCommand implements Command {\n type: StoreChangeEventKeys = \"STORE_MUTATED\";\n snapshot: Snapshot = {\n addedNode: null,\n auxNode: null,\n };\n private readonly step: Step;\n\n constructor(\n private readonly store: Store,\n private readonly options: RequiredDrawOptions,\n coord: LatLng,\n ) {\n this.step = { id: uuidv4(), isAuxiliary: false, ...coord };\n }\n\n private restoreAddedNode = (addedNode: ListNode) => {\n if (addedNode.prev) {\n addedNode.prev.next = addedNode;\n } else {\n this.store.head = addedNode;\n }\n\n if (addedNode.next) {\n addedNode.next.prev = addedNode;\n } else {\n this.store.tail = addedNode;\n }\n\n this.snapshot.addedNode = addedNode;\n\n if (addedNode.val) {\n this.store.map.set(addedNode.val.id, addedNode);\n this.store.size++;\n this.store.pingConsumers();\n }\n };\n\n private restoreAuxNode = (auxNode: ListNode) => {\n if (auxNode.prev) {\n auxNode.prev.next = auxNode;\n } else {\n this.store.head = auxNode;\n }\n\n if (auxNode.next) {\n auxNode.next.prev = auxNode;\n } else {\n this.store.tail = auxNode;\n }\n\n this.snapshot.auxNode = auxNode;\n\n if (auxNode.val) {\n this.store.map.set(auxNode.val.id, auxNode);\n this.store.size++;\n this.store.pingConsumers();\n }\n };\n\n public execute = () => {\n if (this.snapshot.addedNode) {\n this.restoreAddedNode(this.snapshot.addedNode);\n } else {\n this.snapshot.addedNode = this.store.push(this.step);\n }\n\n // if pointGeneration is \"auto\" then we add an auxPoint\n if (this.options.pointGeneration === \"auto\" && this.store.tail?.prev?.val) {\n if (this.snapshot?.auxNode?.val) {\n this.restoreAuxNode(this.snapshot.auxNode);\n } else {\n const auxPoint = PointHelpers.createAuxiliaryPoint(this.store.tail?.val as Step, this.store.tail?.prev?.val);\n this.snapshot.auxNode = this.store.insertAfter(this.store.tail.prev, auxPoint);\n }\n }\n\n this.store.notify({\n type: \"STORE_POINT_ADD\",\n });\n };\n\n public undo = () => {\n this.store.removeNodeById(this.step.id);\n\n if (this.options.pointGeneration === \"auto\" && this?.snapshot.auxNode?.val) {\n this.store.removeNodeById(this?.snapshot.auxNode.val.id);\n }\n };\n\n public getStep = () => {\n return this.step;\n };\n}\n","import type { Command } from \"#app/history\";\nimport type { ListNode } from \"#app/store\";\nimport type { StoreChangeEventKeys } from \"#app/store/types\";\nimport type { MapEventsCtx, Step, StepId } from \"#app/types\";\nimport { FireEvents } from \"#components/map/helpers\";\nimport type { RemoveCommanContext } from \".\";\nimport { PointHelpers } from \"../../helpers\";\n\ninterface RemovedPointSnapshot {\n removedNode: ListNode;\n wasCircular: boolean;\n wasRemovedHead: boolean;\n wasRemovedTail: boolean;\n beforePrimary: ListNode | null;\n afterPrimary: ListNode | null;\n beforeAux: ListNode | null;\n afterAux: ListNode | null;\n newAux: ListNode | null;\n}\n\nexport class RemovePointAutoCommand implements Command {\n type: StoreChangeEventKeys = \"STORE_INBETWEEN_POINT_REMOVED\";\n // when we execute(remove) we need to create a new aux point in the place of the removed primary point and its aux points\n snapshot: RemovedPointSnapshot | null = null;\n\n constructor(private readonly ctx: RemoveCommanContext) {}\n\n private makeSnapshot(clickedNode: ListNode): RemovedPointSnapshot {\n const { store, nodeId } = this.ctx;\n const wasCircular = store.circular.isCircular();\n const wasRemovedHead = store.head?.val?.id === nodeId;\n const tail = wasCircular ? store.tail?.prev : store.tail;\n const wasRemovedTail = tail?.val?.id === nodeId;\n\n const auxBefore = clickedNode.prev;\n const auxAfter = clickedNode.next;\n const beforePrimary = clickedNode.prev?.prev ?? null;\n const afterPrimary = clickedNode.next?.next ?? null;\n\n return {\n removedNode: clickedNode,\n wasCircular,\n wasRemovedHead,\n wasRemovedTail,\n beforePrimary,\n afterPrimary,\n beforeAux: auxBefore,\n afterAux: auxAfter,\n newAux: null,\n };\n }\n\n public restoreNodeAfter = (after: ListNode, restoredNode: ListNode) => {\n if (!after || !restoredNode || !restoredNode.val) return;\n\n restoredNode.prev = after;\n restoredNode.next = after.next;\n\n if (after.next) {\n after.next.prev = restoredNode;\n }\n\n after.next = restoredNode;\n\n if (!this.ctx.store.map.has(restoredNode.val.id)) {\n this.ctx.store.map.set(restoredNode.val.id, restoredNode);\n this.ctx.store.size++;\n this.ctx.store.pingConsumers();\n }\n };\n\n private recalculateInBetweenRemoved(clickedNode: ListNode | null): void {\n if (!clickedNode || !this.snapshot) return;\n\n const { store } = this.ctx;\n const auxBefore = clickedNode.prev;\n const auxAfter = clickedNode.next;\n const primaryBefore = auxBefore?.prev;\n const primaryAfter = auxAfter?.next;\n\n if (auxBefore?.val?.isAuxiliary) {\n store.removeNodeById(auxBefore.val.id);\n }\n\n if (auxAfter?.val?.isAuxiliary) {\n store.removeNodeById(auxAfter.val.id);\n }\n\n // 5(in a circular and only 3 in a linear) is the minimum number of points needed to add an aux point after removal\n // head -> aux -> primary -> aux -> tail;\n // ^\n // removed\n // head -> aux -> tail;\n // ^ this needs to be added\n const meetsAuxInsertionThreshold = store.circular.isCircular() ? store.size >= 5 : store.size >= 3;\n if (primaryBefore?.val && primaryAfter?.val && meetsAuxInsertionThreshold) {\n // if we have already undo/redoed then we just insert the new aux point already created\n if (this.snapshot.newAux) {\n this.restoreNodeAfter(primaryBefore, this.snapshot.newAux);\n } else {\n const auxPoint = PointHelpers.createAuxiliaryPoint(primaryBefore.val, primaryAfter.val);\n this.snapshot.newAux = store.insertAfter(primaryBefore, auxPoint);\n }\n }\n }\n\n private breakGeometryIfNeeded = (ctx: Pick<MapEventsCtx, \"store\" | \"options\">): boolean => {\n const { store } = ctx;\n\n if (store.circular.canBreak() && store.circular.isCircular()) {\n // if the last point is the aux one(we remove the middle point) then we need to\n // remove the aux point and just add a new one between the head and the tail\n if (store.tail?.val?.isAuxiliary) {\n const oldAuxPoint = store.tail;\n store.removeNodeById(store.tail.val.id);\n store.tail = oldAuxPoint?.prev as ListNode;\n const auxPoint = PointHelpers.createAuxiliaryPoint(store.tail?.val as Step, store.head?.val as Step);\n if (this.snapshot) this.snapshot.newAux = store.insertAfter(store.head as ListNode, auxPoint);\n }\n\n if (store.head) {\n store.head.prev = null;\n }\n if (store.tail) {\n store.tail.next = null;\n }\n\n return true;\n }\n return false;\n };\n\n public execute = () => {\n const clickedNode = this.ctx.store.findNodeById(this.ctx.nodeId);\n const isAuxiliary = clickedNode?.val?.isAuxiliary;\n if (!clickedNode || isAuxiliary) return;\n\n this.snapshot = this.makeSnapshot(clickedNode);\n this.recalculateInBetweenRemoved(clickedNode);\n // remove the primary node\n this.ctx.store.removeNodeById(this.ctx.nodeId);\n\n const ok = this.breakGeometryIfNeeded(this.ctx);\n if (ok) {\n this.ctx.mode.reset();\n }\n\n FireEvents.pointRemoveRightClick({ ...(clickedNode?.val as Step), total: this.ctx.store.size }, this.ctx.map);\n this.ctx.store.pingConsumers();\n };\n\n private restoreRemovedMiddleNode = (removedNode: ListNode) => {\n if (!this.snapshot) return;\n if (!removedNode.val) return;\n const { beforePrimary: before, afterPrimary: after, wasCircular } = this.snapshot;\n const { store, mode } = this.ctx;\n\n if (before) {\n before.next = removedNode;\n removedNode.prev = before;\n }\n\n if (after) {\n removedNode.next = after;\n after.prev = removedNode;\n }\n\n // this is the case when we have 3 primary and 3 aux points\n if (wasCircular && !this.ctx.store.circular.isCircular()) {\n const auxPoint = PointHelpers.createAuxiliaryPoint(store.tail?.val as Step, store.head?.val as Step);\n store.push(auxPoint);\n store.circular.close();\n mode.setClosedGeometry(true);\n }\n };\n\n private restoreRemovedHeadNode = (removedNode: ListNode) => {\n if (!this.snapshot || !removedNode?.val) return;\n\n const { wasCircular } = this.snapshot;\n const { store, mode } = this.ctx;\n const currentHead = this.ctx.store.head;\n\n if (currentHead) {\n removedNode.next = currentHead;\n currentHead.prev = removedNode;\n }\n store.head = removedNode;\n\n const notCircularNow = !store.circular.isCircular();\n if (wasCircular && notCircularNow) {\n store.circular.close();\n mode.setClosedGeometry(true);\n }\n };\n\n private restoreRemovedTailNode = (removedNode: ListNode) => {\n const { store, mode } = this.ctx;\n if (!this.snapshot) return;\n const { wasCircular } = this.snapshot;\n const currentTail = store.tail;\n\n if (currentTail) {\n currentTail.next = removedNode;\n removedNode.prev = currentTail;\n store.tail = removedNode;\n }\n const notCircularNow = !store.circular.isCircular();\n if (wasCircular && notCircularNow) {\n store.circular.close();\n mode.setClosedGeometry(true);\n }\n };\n\n private restoreAuxiliaryPoints(node: ListNode): void {\n if (!this.snapshot) return;\n if (node.prev?.val && node.val && this.snapshot?.beforeAux) {\n this.restoreNodeAfter(node.prev, this.snapshot?.beforeAux);\n if (this.snapshot.wasRemovedHead && this.snapshot.wasCircular) {\n this.ctx.store.tail = this.snapshot.beforeAux;\n }\n }\n\n if (node.next?.val && node.val && this.snapshot?.afterAux) {\n this.restoreNodeAfter(node, this.snapshot?.afterAux);\n if (this.snapshot.wasRemovedTail && this.snapshot.wasCircular) {\n this.ctx.store.tail = this.snapshot.afterAux;\n }\n }\n\n if (this.snapshot.wasCircular) {\n this.ctx.store.circular.close();\n }\n }\n\n public undo = () => {\n const { store } = this.ctx;\n\n if (!this.snapshot) return;\n const { removedNode: node, wasRemovedHead, wasRemovedTail, wasCircular } = this.snapshot;\n if (!node?.val) return;\n\n if (wasRemovedHead) {\n // first remove the aux point that was added before when we removed the primary node\n store.removeNodeById(store.head?.prev?.val?.id as StepId);\n this.restoreRemovedHeadNode(node);\n } else if (wasRemovedTail) {\n this.restoreRemovedTailNode(node);\n if (wasCircular && store.tail?.prev?.val?.isAuxiliary) {\n store.removeNodeById(store.tail?.prev?.val?.id as StepId);\n }\n } else {\n // first remove the aux point that was added before when we removed the primary node\n if (this.snapshot.newAux?.val?.id) {\n store.removeNodeById(this.snapshot.newAux?.val?.id);\n }\n this.restoreRemovedMiddleNode(node);\n }\n\n if (!store.map.has(this.ctx.nodeId)) {\n store.map.set(this.ctx.nodeId, node);\n store.size++;\n }\n\n this.restoreAuxiliaryPoints(node);\n store.pingConsumers();\n };\n}\n","import type { Command } from \"#app/history\";\nimport type { ListNode } from \"#app/store\";\nimport type { StoreChangeEventKeys } from \"#app/store/types\";\nimport type { Step } from \"#app/types\";\nimport { FireEvents } from \"#components/map/helpers\";\nimport type { RemoveCommanContext } from \".\";\n\ninterface RemovedPointSnapshot {\n removedNode: ListNode;\n wasCircular: boolean;\n wasRemovedHead: boolean;\n wasRemovedTail: boolean;\n}\n\nexport class RemovePointManualCommand implements Command {\n type: StoreChangeEventKeys = \"STORE_INBETWEEN_POINT_REMOVED\";\n snapshot: RemovedPointSnapshot | null = null;\n\n constructor(private readonly ctx: RemoveCommanContext) {}\n\n private makeSnapshot(clickedNode: ListNode): RemovedPointSnapshot {\n const wasRemovedHead = this.ctx.store.head?.val?.id === this.ctx.nodeId;\n const wasRemovedTail = this.ctx.store.tail?.val?.id === this.ctx.nodeId;\n const wasCircular = this.ctx.store.circular.isCircular();\n\n return {\n removedNode: clickedNode,\n wasCircular,\n wasRemovedHead,\n wasRemovedTail,\n };\n }\n\n private breakGeometryIfNeeded = (ctx: Pick<RemoveCommanContext, \"store\">) => {\n const { store } = ctx;\n\n if (store.circular.canBreak() && store.circular.isCircular()) {\n if (store.head) {\n store.head.prev = null;\n }\n if (store.tail) {\n store.tail.next = null;\n }\n\n return true;\n }\n return false;\n };\n\n public execute = () => {\n const clickedNode = this.ctx.store.findNodeById(this.ctx.nodeId);\n\n if (!clickedNode?.val) return;\n\n this.snapshot = this.makeSnapshot(clickedNode);\n this.ctx.store.removeNodeById(this.ctx.nodeId);\n const ok = this.breakGeometryIfNeeded(this.ctx);\n if (ok) {\n this.ctx.mode.reset();\n }\n FireEvents.pointRemoveRightClick({ ...(clickedNode?.val as Step), total: this.ctx.store.size }, this.ctx.map);\n this.ctx.store.pingConsumers();\n };\n\n private closeGeometryIfNeeded = () => {\n const { store, mode } = this.ctx;\n\n const notCircularNow = !this.ctx.store.circular.isCircular();\n if (this.snapshot?.wasCircular && notCircularNow) {\n store.circular.close();\n mode.setClosedGeometry(true);\n }\n };\n\n private restoreRemovedMiddleNode = (removedNode: ListNode) => {\n if (!removedNode?.val) return;\n\n const { prev, next } = removedNode;\n\n if (prev) {\n prev.next = removedNode;\n removedNode.prev = prev;\n } else {\n this.ctx.store.head = removedNode;\n }\n\n if (next) {\n next.prev = removedNode;\n removedNode.next = next;\n } else {\n this.ctx.store.tail = removedNode;\n }\n };\n\n private restoreRemovedHeadNode = (removedNode: ListNode) => {\n const currentHead = this.ctx.store.head;\n if (!removedNode?.val) return;\n\n if (currentHead) {\n removedNode.next = currentHead;\n currentHead.prev = removedNode;\n }\n this.ctx.store.head = removedNode;\n };\n\n private restoreRemovedTailNode = (removedNode: ListNode) => {\n const currentTail = this.ctx.store.tail;\n\n if (currentTail) {\n currentTail.next = removedNode;\n removedNode.prev = currentTail;\n }\n this.ctx.store.tail = removedNode;\n };\n\n public undo = () => {\n if (!this.snapshot) return;\n const { removedNode, wasRemovedHead, wasRemovedTail } = this.snapshot;\n\n if (wasRemovedHead) {\n this.restoreRemovedHeadNode(removedNode);\n } else if (wasRemovedTail) {\n this.restoreRemovedTailNode(removedNode);\n } else {\n this.restoreRemovedMiddleNode(removedNode);\n }\n\n this.closeGeometryIfNeeded();\n\n if (!this.ctx.store.map.has(this.ctx.nodeId)) {\n this.ctx.store.map.set(this.ctx.nodeId, removedNode);\n this.ctx.store.size++;\n }\n\n this.ctx.store.pingConsumers();\n };\n}\n","import type { Command } from \"#app/history\";\nimport type { Store } from \"#app/store\";\nimport type { StoreChangeEventKeys } from \"#app/store/types\";\nimport type { RequiredDrawOptions } from \"#app/types\";\nimport type { UnifiedMap } from \"#app/types/map\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport { RemovePointAutoCommand } from \"./auto\";\nimport { RemovePointManualCommand } from \"./manual\";\n\nexport interface RemoveCommanContext {\n readonly store: Store;\n readonly map: UnifiedMap;\n readonly options: RequiredDrawOptions;\n readonly mode: DrawingMode;\n readonly nodeId: string;\n}\n\nexport class RemovePointCommand implements Command {\n type: StoreChangeEventKeys = \"STORE_INBETWEEN_POINT_REMOVED\";\n manualPointRemove: RemovePointManualCommand | null = null;\n autoPointRemove: RemovePointAutoCommand | null = null;\n constructor(private readonly ctx: RemoveCommanContext) {\n this.manualPointRemove = new RemovePointManualCommand(this.ctx);\n this.autoPointRemove = new RemovePointAutoCommand(this.ctx);\n }\n\n public execute = () => {\n if (this.ctx.options.pointGeneration === \"auto\") {\n this.autoPointRemove?.execute();\n } else {\n this.manualPointRemove?.execute();\n }\n };\n\n public undo = () => {\n if (this.ctx.options.pointGeneration === \"auto\") {\n this.autoPointRemove?.undo();\n } else {\n this.manualPointRemove?.undo();\n }\n };\n}\n","import type { MapLayerMouseEvent } from \"maplibre-gl\";\n\nimport type { ListNode } from \"#app/store/index\";\nimport type { MapEventsCtx, LatLng, Step } from \"#app/types/index\";\n\nimport { PointHelpers } from \"./helpers\";\nimport type { PointState } from \"./point-state\";\nimport { AddPointCommand } from \"./commands/add-point\";\nimport { timeline } from \"#app/history\";\nimport { RemovePointCommand } from \"./commands/remove-point\";\n\nexport class PointTopologyManager {\n constructor(\n private readonly ctx: MapEventsCtx,\n private readonly state: PointState,\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 public 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 public getAuxPointsLatLng = (event: MapLayerMouseEvent) => {\n const selectedNode = this.state.getSelectedNode();\n if (!selectedNode) return null;\n\n const { options } = this.ctx;\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 public addPoint(event: MapLayerMouseEvent): Step {\n const { store, options } = this.ctx;\n\n const cmd = new AddPointCommand(store, options, event.lngLat);\n timeline.commit(cmd);\n return cmd.getStep();\n }\n\n public removePoint(id: string): void {\n const { store, options, mode, map } = this.ctx;\n\n if (store.size === 1) {\n store.reset();\n } else {\n timeline.commit(new RemovePointCommand({ store, options, mode, map, nodeId: id }));\n }\n }\n}\n","import type { MapEventsCtx, LatLng } from \"#app/types/index\";\nimport type { MapLayerMouseEvent, MapTouchEvent } from \"maplibre-gl\";\n\nimport { MapUtils, Spatial, throttle } from \"#app/utils/helpers\";\nimport { ELAYERS } from \"#app/utils/geo_constants\";\nimport { StoreHelpers } from \"#app/store/index\";\nimport { timeline } from \"#app/history\";\nimport type { StoreChangeEvent } from \"#app/store/types\";\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 type { DrawingModeChangeEvent } from \"../mode/types\";\nimport { PointState } from \"./point-state\";\nimport { PointTopologyManager } from \"./point-topology-manager\";\nimport { MovePointCommand } from \"./commands/move-point\";\nimport { renderer } from \"../renderer\";\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// TODO messy: clean this up\nexport class PointEvents {\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(private readonly ctx: MapEventsCtx) {\n this.pointState = new PointState();\n this.topologyManager = new PointTopologyManager(ctx, this.pointState);\n\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.ctx, this.events);\n this.auxPoints = new AuxPoints(this.ctx, this.events, this.pointState, this.topologyManager);\n }\n\n private initConsumers = () => {\n this.ctx.mode.addObserver(this.mapModeConsumer);\n this.ctx.store.addObserver(this.storeEventsConsumer);\n };\n\n private removeConsumers = () => {\n this.ctx.mode.removeObserver(this.mapModeConsumer);\n this.ctx.store.removeObserver(this.storeEventsConsumer);\n };\n\n public init = () => {\n const { map } = this.ctx;\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 public remove = () => {\n const { map } = this.ctx;\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 private onPointClick = (event: MapLayerMouseEvent) => {\n const { mouseEvents, store, map, options } = this.ctx;\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 private onMapDblClick = (event: MapLayerMouseEvent) => {\n event.preventDefault();\n };\n\n private onPointRemove = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store } = this.ctx;\n if (store.size === 1) {\n store.reset();\n this.ctx.panel.hide();\n } else {\n const id = MapUtils.queryPointId(this.ctx.map, event.point);\n const clickedNode = store.findNodeById(id);\n\n if (!clickedNode?.val) return;\n\n this.topologyManager.removePoint(clickedNode.val.id);\n }\n renderer.execute();\n };\n\n private onOwnGeometryLayersClick = (event: MapLayerMouseEvent) => {\n return MapUtils.isFeatureTriggered(event, [\n ELAYERS.PointsLayer,\n ELAYERS.FirstPointLayer,\n ELAYERS.LineLayerTransparent,\n ELAYERS.LineLayerBreak,\n ]);\n };\n\n private onMapClick = (event: MapLayerMouseEvent) => {\n const { mode, mouseEvents, map, store } = this.ctx;\n\n if (mode.getClosedGeometry()) return;\n if (this.onOwnGeometryLayersClick(event)) return;\n\n if (mouseEvents.lastPointMouseClick) {\n mouseEvents.lastPointMouseClick = false;\n }\n map.getCanvasContainer().style.cursor = \"grab\";\n const addedStep = this.topologyManager.addPoint(event);\n FireEvents.addPoint({ ...addedStep, total: store.size }, map, mode);\n PointVisibility.setSinglePointHidden(event);\n renderer.execute();\n };\n\n private onMoveLeftClickUp = (event: MapLayerMouseEvent) => {\n const mouseLeftClickUp = event.originalEvent.buttons === 0;\n if (mouseLeftClickUp) {\n this.onPointMouseUp();\n }\n };\n\n private onMapMouseMove = throttle((event: MapLayerMouseEvent) => {\n const { mouseEvents } = this.ctx;\n\n if (mouseEvents.pointMouseDown) {\n this.pointState.setLastEvent(event);\n\n if (!this.pointState.getSelectedNode()) return;\n\n this.onMoveLeftClickUp(this.pointState.getLastEvent() as MapLayerMouseEvent);\n const auxPoints = this.topologyManager.getAuxPointsLatLng(this.pointState.getLastEvent() as MapLayerMouseEvent);\n renderer.executeOnMouseMove(this.pointState.getSelectedIdx() as number, event.lngLat, auxPoints);\n this.pointState.setMoved(true);\n }\n }, 17);\n\n private onPointMouseEnter = (event: MapLayerMouseEvent) => {\n const { mouseEvents, map, store, options } = this.ctx;\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 private onPointMouseLeave = (event: MapLayerMouseEvent) => {\n const { mouseEvents, store, map, options } = this.ctx;\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 private storeEventsConsumer = (event: StoreChangeEvent) => {\n if (event.type === \"STORE_MUTATED\") {\n if (event.data?.size === 0) {\n this.pointState.reset();\n }\n }\n };\n\n private mapModeConsumer = (event: DrawingModeChangeEvent) => {\n if (event.type === \"BREAK_CHANGED\" || event.type === \"MODE_CHANGED\") {\n this.pointState.reset();\n }\n };\n\n private hideLastPointPanel = () => {\n const { store, panel, options } = this.ctx;\n const selectedNode = this.pointState.getSelectedNode();\n\n if (!selectedNode?.val) return;\n\n if (StoreHelpers.isLastPoint(store, options, selectedNode.val.id)) {\n panel.hide();\n }\n };\n\n private setSelectedNode = (event: MapLayerMouseEvent | MapTouchEvent) => {\n const { store, map } = this.ctx;\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 private onPointMouseDown = (event: MapLayerMouseEvent | MapTouchEvent) => {\n event.preventDefault();\n\n this.pointState.clearLastEvent();\n\n const { mouseEvents, map, store } = this.ctx;\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 private onPointMouseUp = () => {\n const { mouseEvents, store, panel, map, options } = this.ctx;\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?.isAuxiliary) {\n if (lastEvent) {\n this.topologyManager.updateStore();\n this.pointState.clearLastEvent();\n }\n\n panel?.show();\n\n if (this.pointState.isMoved()) {\n timeline.commit(new MovePointCommand(store, selectedNode, startCoordinates as LatLng, map));\n this.pointState.setMoved(false);\n }\n this.pointState.partialReset();\n }\n\n if (mouseEvents) {\n mouseEvents.pointMouseDown = false;\n }\n\n addTransparentLine(map, options);\n renderer.execute();\n };\n}\n","import type { MapEventsCtx } from \"#app/types/index\";\nimport { LineEvents } from \"./line\";\nimport { PointEvents } from \"./points\";\n\nexport class MapEvents {\n private pointEvents: PointEvents;\n private lineEvents: LineEvents;\n\n constructor(private readonly ctx: MapEventsCtx) {\n this.pointEvents = new PointEvents(ctx);\n this.lineEvents = new LineEvents(ctx);\n this.initEvents();\n }\n\n private initEvents = () => {\n this.lineEvents.init();\n this.pointEvents?.init();\n };\n\n public remove = () => {\n this.pointEvents?.remove();\n this.lineEvents?.remove();\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 \"#app/types/index\";\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 type { ControlType } from \"#app/types/index\";\nimport type { HTMLEvent } from \"#app/types/helpers\";\nimport { Tooltip } from \"#components/tooltip\";\nimport { CURSORS } from \"#components/map/cursor/constants\";\nimport { DOM } from \"#app/utils/dom\";\n\nimport { getButtonLabel } from \"./helpers\";\nimport type { Context } from \".\";\nimport type { View } from \"./view\";\n\nexport class Events {\n private tooltip: Tooltip;\n\n constructor(private readonly ctx: Context & { view: View }) {\n this.tooltip = new Tooltip();\n this.initEvents();\n }\n\n initEvents() {\n const { lineButton, breakButton, polygonButton } = this.ctx.view;\n\n if (lineButton) {\n DOM.addEventListener(lineButton, \"click\", this.onLineClick);\n DOM.addEventListener(lineButton, \"mouseenter\", this.onButtonEnter as EventListenerOrEventListenerObject);\n DOM.addEventListener(lineButton, \"mouseleave\", this.onButtonLeave);\n }\n if (polygonButton) {\n DOM.addEventListener(polygonButton, \"click\", this.onPolygonClick);\n DOM.addEventListener(polygonButton, \"mouseenter\", this.onButtonEnter as EventListenerOrEventListenerObject);\n DOM.addEventListener(polygonButton, \"mouseleave\", this.onButtonLeave);\n }\n if (breakButton) {\n DOM.addEventListener(breakButton, \"click\", this.onBreakClick);\n DOM.addEventListener(breakButton, \"mouseenter\", this.onButtonEnter as EventListenerOrEventListenerObject);\n DOM.addEventListener(breakButton, \"mouseleave\", this.onButtonLeave);\n }\n }\n\n removeEvents() {\n const { lineButton, breakButton, polygonButton } = this.ctx.view;\n\n if (lineButton) {\n DOM.removeEventListener(lineButton, \"click\", this.onLineClick);\n DOM.removeEventListener(lineButton, \"mouseenter\", this.onButtonEnter as EventListenerOrEventListenerObject);\n DOM.removeEventListener(lineButton, \"mouseleave\", this.onButtonLeave);\n }\n if (polygonButton) {\n DOM.removeEventListener(polygonButton, \"click\", this.onPolygonClick);\n DOM.removeEventListener(polygonButton, \"mouseenter\", this.onButtonEnter as EventListenerOrEventListenerObject);\n DOM.removeEventListener(polygonButton, \"mouseleave\", this.onButtonLeave);\n }\n if (breakButton) {\n DOM.removeEventListener(breakButton, \"click\", this.onBreakClick);\n DOM.removeEventListener(breakButton, \"mouseenter\", this.onButtonEnter as EventListenerOrEventListenerObject);\n DOM.removeEventListener(breakButton, \"mouseleave\", this.onButtonLeave);\n }\n }\n\n remove() {\n this.removeEvents();\n this.tooltip.remove();\n }\n\n onButtonEnter = (event: HTMLEvent<HTMLButtonElement>) => {\n const { options } = this.ctx;\n\n const type = event.target.getAttribute(\"data-type\") as ControlType;\n\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 { lineButton, breakButton, polygonButton } = this.ctx.view;\n\n lineButton?.classList.remove(\"control-button-active\");\n polygonButton?.classList.remove(\"control-button-active\");\n breakButton?.classList.remove(\"control-button-active\");\n };\n\n onLineClick = () => {\n const { mode } = this.ctx;\n const { lineButton } = this.ctx.view;\n\n if (mode.getMode() === \"line\") return;\n\n this.removeActiveClass();\n lineButton?.classList.add(\"control-button-active\");\n mode.setMode(\"line\");\n };\n\n onPolygonClick = () => {\n const { mode } = this.ctx;\n const { polygonButton } = this.ctx.view;\n\n if (mode.getMode() === \"polygon\") return;\n\n this.removeActiveClass();\n polygonButton?.classList.add(\"control-button-active\");\n mode.setMode(\"polygon\");\n };\n\n onBreakClick = () => {\n const { map, mode } = this.ctx;\n const { breakButton } = this.ctx.view;\n\n this.removeActiveClass();\n breakButton?.classList.add(\"control-button-active\");\n mode.setBreak(true);\n map.getCanvasContainer().style.cursor = CURSORS.POINTER;\n };\n}\n","import { FireEvents } from \"#components/map/helpers\";\nimport { DrawingModeChangeEvent, Mode } from \"#components/map/mode/types\";\nimport { disableButton, enableButton } from \"#app/utils/helpers\";\nimport { Context } from \".\";\nimport { View } from \"./view\";\n\nexport class Observer {\n constructor(private readonly ctx: Context & { view: View }) {\n this.initConsumers();\n }\n\n private initConsumers = () => {\n this.ctx.mode.addObserver(this.mapModeConsumer);\n };\n\n public remove = () => {\n this.ctx.mode.removeObserver(this.mapModeConsumer);\n };\n\n private resetAllState = () => {\n const { lineButton, breakButton, polygonButton } = this.ctx.view;\n\n lineButton?.classList.remove(\"control-button-active\");\n polygonButton?.classList.remove(\"control-button-active\");\n breakButton?.classList.remove(\"control-button-active\");\n };\n\n private checkActive = (button: HTMLElement) => {\n this.resetAllState();\n button.classList.add(\"control-button-active\");\n };\n\n private observeModeChange = (event: DrawingModeChangeEvent) => {\n const { data } = event;\n const { lineButton, breakButton, polygonButton } = this.ctx.view;\n\n const { mode } = this.ctx;\n FireEvents.modeChanged(this.ctx.map, data as Mode);\n\n if (!lineButton || !polygonButton || !breakButton) return;\n\n switch (data) {\n case \"line\":\n this.checkActive(lineButton);\n break;\n case \"polygon\":\n this.checkActive(polygonButton);\n break;\n default:\n break;\n }\n\n if (!data) {\n disableButton(breakButton);\n } else {\n if (mode.getClosedGeometry()) {\n enableButton(breakButton);\n }\n }\n };\n\n private observeGeometryChange = (event: DrawingModeChangeEvent) => {\n const { data } = event;\n const { lineButton, breakButton, polygonButton } = this.ctx.view;\n\n const { mode } = this.ctx;\n\n if (data) {\n if (breakButton) {\n enableButton(breakButton);\n }\n if (mode.getMode() === \"polygon\") {\n if (lineButton) {\n disableButton(lineButton);\n }\n }\n if (mode.getMode() === \"line\") {\n if (polygonButton) {\n disableButton(polygonButton);\n }\n }\n } else {\n if (breakButton) {\n disableButton(breakButton);\n }\n if (mode.getMode() === \"polygon\") {\n if (lineButton) {\n enableButton(lineButton);\n }\n }\n if (mode.getMode() === \"line\") {\n if (polygonButton) {\n enableButton(polygonButton);\n }\n }\n }\n };\n\n private 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 { breakButton } = this.ctx.view;\n\n this.checkActive(breakButton as HTMLElement);\n FireEvents.modeChanged(this.ctx.map, \"break\");\n }\n };\n}\n","import { DOM } from \"#app/utils/dom\";\nimport { disableButton } from \"#app/utils/helpers\";\nimport { Context } from \".\";\n\nexport class View {\n private root: HTMLDivElement;\n public lineButton?: HTMLButtonElement;\n public polygonButton?: HTMLButtonElement;\n public breakButton?: HTMLButtonElement;\n\n constructor(private readonly ctx: Pick<Context, \"options\" | \"mode\">) {\n this.root = DOM.create(\"div\", \"mapboxgl-ctrl mapboxgl-ctrl-group maplibregl-ctrl maplibregl-ctrl-group\");\n this.createControl();\n }\n\n createControlButton = (\n type: \"line\" | \"polygon\" | \"break\",\n title: string,\n active: boolean,\n disabled?: boolean,\n ): HTMLButtonElement => {\n const size = this.ctx.options.panel.size;\n const button = DOM.create(\"button\", `control-button control-button-${size}`, this.root);\n button.setAttribute(\"aria-label\", title);\n button.setAttribute(\"data-type\", type);\n\n if (active) {\n button.classList.add(\"control-button-active\");\n }\n if (disabled) {\n disableButton(button);\n }\n DOM.create(\"span\", `icon ${type} icon-medium`, button);\n return button;\n };\n\n private createLineButton = () => {\n const { mode, options } = this.ctx;\n const lineVisible = this.ctx.options.modes.line.visible;\n const lineTitle = options.locale.line;\n if (lineVisible) {\n this.lineButton = this.createControlButton(\"line\", lineTitle, mode.getMode() === \"line\");\n }\n };\n\n private createPolygonButton = () => {\n const { mode, options } = this.ctx;\n\n const polygonVisible = this.ctx.options.modes.polygon.visible;\n const polygonTitle = options.locale.polygon;\n if (polygonVisible) {\n this.polygonButton = this.createControlButton(\"polygon\", polygonTitle, mode.getMode() === \"polygon\");\n }\n };\n\n private createBreakButton = () => {\n const { mode, options } = this.ctx;\n\n const breakVisible = this.ctx.options.modes.breakGeometry.visible;\n const breakTitle = options.locale.break;\n if (breakVisible) {\n const closedGeometry = this.ctx.options.initial?.closeGeometry;\n const disabled = !closedGeometry;\n const isBreak = mode.getBreak();\n this.breakButton = this.createControlButton(\"break\", breakTitle, isBreak, disabled);\n }\n };\n\n private createControl = () => {\n this.createLineButton();\n this.createPolygonButton();\n this.createBreakButton();\n };\n\n public getContainer = (): HTMLDivElement => {\n return this.root;\n };\n\n public destroy = () => {\n this.root.remove();\n };\n}\n","import type { RequiredDrawOptions } from \"#app/types/index\";\nimport { UnifiedMap } from \"#app/types/map\";\nimport { DrawingMode } from \"#components/map/mode\";\nimport { Events } from \"./events\";\nimport { Observer } from \"./observer\";\nimport { View } from \"./view\";\nimport \"./control.css\";\n\nexport interface Context {\n options: RequiredDrawOptions;\n mode: DrawingMode;\n map: UnifiedMap;\n}\n\nexport class Control {\n private readonly view: View;\n private readonly events: Events;\n private readonly observer: Observer;\n\n constructor(readonly ctx: Context) {\n this.view = new View(ctx);\n const enrichedCtx: Context & { view: View } = { ...ctx, view: this.view };\n\n this.events = new Events(enrichedCtx);\n this.observer = new Observer(enrichedCtx);\n this.init();\n }\n\n init() {\n const root = this.view.getContainer();\n this.ctx.map.getContainer().appendChild(root);\n }\n\n public getContainer(): HTMLDivElement {\n return this.view.getContainer();\n }\n\n public destroy() {\n this.events.remove();\n this.observer.remove();\n this.view.destroy();\n }\n}\n","import type { RequiredDrawOptions } from \"#app/types/index\";\nimport { Observable } from \"#app/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 private mode: Mode;\n private break: boolean;\n private 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 { UnifiedMap } from \"#app/types/map\";\n\nimport { debounce, Spatial } from \"#app/utils/helpers\";\nimport type { DrawingMode } from \"#components/map/mode\";\nimport type { Store } from \"#app/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 \"#app/types/index\";\n\ninterface Context {\n map: UnifiedMap;\n mode: DrawingMode;\n mouseEvents: MouseEvents;\n store: Store;\n options: RequiredDrawOptions;\n}\n\nexport class Cursor {\n #canvas: HTMLElement;\n\n constructor(private readonly ctx: Context) {\n this.#canvas = this.ctx.map.getCanvasContainer();\n this.#canvas.style.cursor = ctx.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.ctx;\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.ctx;\n\n if (Spatial.canCloseGeometry(store, options)) {\n this.set(CURSORS.POINTER);\n }\n }, 10);\n\n #initConsumers() {\n const { mouseEvents } = this.ctx;\n\n mouseEvents.addObserver(this.#mouseEventsObserver);\n }\n\n remove() {\n const { mouseEvents } = this.ctx;\n\n mouseEvents.removeObserver(this.#mouseEventsObserver);\n }\n\n #mouseEventsObserver = (event: MouseEventsChangeEvent) => {\n const { mode, mouseEvents, store, options } = this.ctx;\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 \"#app/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 \"#app/store/errors\";\nimport { Initial, DrawOptions, RequiredDrawOptions } from \"#app/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 redo: {\n visible: options.panel?.buttons?.redo?.visible ?? DEFAULT_OPTIONS.panel.buttons.redo.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 redo: options.locale?.redo ?? DEFAULT_OPTIONS.locale.redo,\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 { StoreChangeEvent, StoreChangeEventKeys } from \"#app/store/types\";\nimport { ELAYERS, generateLayersToRender } from \"#app/utils/geo_constants\";\nimport { debounce } from \"#app/utils/helpers\";\nimport type { Context } from \".\";\n\nexport class Layers {\n constructor(private readonly ctx: Context) {}\n\n public init() {\n this.add();\n this.swap(ELAYERS.LineLayer, ELAYERS.SinglePointLayer);\n this.swap(ELAYERS.LineLayerTransparent, ELAYERS.SinglePointLayer);\n this.swap(ELAYERS.LineLayerTransparent, ELAYERS.FirstPointLayer);\n this.swap(ELAYERS.LineLayerTransparent, ELAYERS.PointsLayer);\n this.swap(ELAYERS.PolygonLayer, ELAYERS.LineLayer);\n\n this.initConsumers();\n }\n\n private initConsumers = () => {\n this.ctx.store.addObserver(this.onStoreChange);\n };\n\n private removeConsumers = () => {\n this.ctx.store.removeObserver(this.onStoreChange);\n };\n\n private onStoreChange = debounce((event: StoreChangeEvent) => {\n const events = [\n \"STORE_MUTATED\",\n \"STORE_CLOSE_GEOMETRY\",\n \"STORE_BREAK_GEOMETRY\",\n \"STORE_CLEARED\",\n ] as StoreChangeEventKeys[];\n\n if (events.includes(event.type)) {\n const { map, store, mode } = this.ctx;\n\n const isPolygonMode = mode.getMode() === \"polygon\";\n\n if (isPolygonMode && store.circular.isCircular()) {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"visible\");\n } else {\n map.setLayoutProperty(ELAYERS.PolygonLayer, \"visibility\", \"none\");\n }\n }\n }, 10);\n\n private add = () => {\n const LAYERS_TO_RENDER = generateLayersToRender(this.ctx.options);\n\n for (const layer of LAYERS_TO_RENDER) {\n if (!this.ctx.map.getLayer(layer.id)) {\n this.ctx.map.addLayer(layer);\n }\n }\n };\n\n private swap = (beneathLayerId: string, aboveLayerId: string) => {\n const beneath = this.ctx.map.getLayer(beneathLayerId);\n const above = this.ctx.map.getLayer(aboveLayerId);\n\n if (beneath && above) {\n this.ctx.map.moveLayer(beneathLayerId, aboveLayerId);\n }\n };\n\n private removeLayers = () => {\n for (const layer of Object.values(ELAYERS)) {\n if (this.ctx.map.getLayer(layer)) {\n this.ctx.map.removeLayer(layer);\n }\n }\n };\n\n public remove = () => {\n this.removeConsumers();\n this.removeLayers();\n };\n}\n","import { ESOURCES } from \"#app/utils/geo_constants\";\nimport { Context } from \".\";\n\nexport class Sources {\n constructor(private readonly ctx: Pick<Context, \"map\">) {}\n\n init() {\n for (const source of Object.values(ESOURCES)) {\n if (!this.ctx.map.getSource(source)) {\n this.ctx.map.addSource(source, {\n type: \"geojson\",\n data: {\n type: \"FeatureCollection\",\n features: [],\n },\n promoteId: \"id\",\n });\n }\n }\n }\n\n remove() {\n for (const source of Object.values(ESOURCES)) {\n if (this.ctx.map.getSource(source)) {\n this.ctx.map.removeSource(source);\n }\n }\n }\n}\n","import type { Store } from \"#app/store\";\nimport type { RequiredDrawOptions } from \"#app/types\";\nimport type { UnifiedMap } from \"#app/types/map\";\nimport { DrawingMode } from \"../mode\";\nimport { Layers } from \"./layers\";\nimport { Sources } from \"./sources\";\n\nexport interface Context {\n map: UnifiedMap;\n store: Store;\n options: RequiredDrawOptions;\n mode: DrawingMode;\n}\n\nexport class Tiles {\n private sources: Sources;\n private layers: Layers;\n\n constructor(private readonly ctx: Context) {\n this.sources = new Sources(this.ctx);\n this.layers = new Layers(this.ctx);\n this.init();\n }\n\n private init = () => {\n // first add the sources then all the layers\n this.sources.init();\n this.layers.init();\n };\n\n public remove = () => {\n // first remove the layers then all the sources\n this.layers.remove();\n this.sources.remove();\n };\n}\n","import type { IControl, UnifiedMap } from \"#app/types/map\";\n\nimport type { DrawOptions, LatLng, RequiredDrawOptions, Step, StepId } from \"#app/types/index\";\nimport { Panel } from \"#components/panel\";\nimport { MapEvents } 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 \"#app/utils/helpers\";\nimport { DOM } from \"#app/utils/dom\";\nimport { Store, StoreHelpers } from \"#app/store/index\";\nimport { Options } from \"#app/utils/options\";\nimport { Tiles } from \"#components/map/tiles\";\nimport { renderer, Renderer } from \"#components/map/renderer\";\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 private container: HTMLElement | undefined;\n private store: Store | undefined;\n private mode: DrawingMode | undefined;\n private defaultOptions: RequiredDrawOptions;\n private mapEvents: MapEvents | undefined;\n private tiles: Tiles | undefined;\n private panel: Panel | undefined;\n private control: Control | undefined;\n private cursor: Cursor | undefined;\n private mouseEvents: MouseEvents | undefined;\n\n private renderer: Renderer | null = null;\n static instance: DrawLibre | null = null;\n\n private constructor(options?: DrawOptions) {\n this.defaultOptions = Options.init(options);\n\n if (this.defaultOptions.initial) {\n Options.checkInitialStepsOption(this.defaultOptions.initial);\n }\n }\n\n 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 = DrawLibre.getInstance();\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: UnifiedMap) => {\n this.store = new Store(this.defaultOptions);\n this.mode = new DrawingMode(this.defaultOptions);\n this.tiles = new Tiles({ map, store: this.store, mode: this.mode, options: this.defaultOptions });\n this.renderer = renderer.initialize({\n map,\n store: this.store,\n options: this.defaultOptions,\n mode: this.mode,\n });\n this.control = new Control({ options: this.defaultOptions, map, 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.panel = new Panel({ map, mode: this.mode, options: this.defaultOptions, store: this.store });\n this.mapEvents = new MapEvents({\n map,\n store: this.store,\n options: this.defaultOptions,\n panel: this.panel,\n control: this.control,\n mode: this.mode,\n mouseEvents: this.mouseEvents,\n });\n\n this.mode.pingConsumers();\n this.store.pingConsumers();\n this.container = this.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 = DrawLibre.getInstance();\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?.remove();\n this.tiles?.remove();\n this.mapEvents?.remove();\n this.panel?.destroy();\n this.store?.reset();\n this.mode?.unsubscribe();\n this.control?.destroy();\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.renderer?.execute();\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 {\n head: this.store?.head,\n tail: this.store?.tail,\n size: this.store?.size,\n };\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?.destroy();\n this.renderer?.execute();\n };\n}\n\nexport type {\n DrawOptions,\n RequiredDrawOptions,\n PointAddEvent,\n PointRightClickRemoveEvent,\n PointEnterEvent,\n PointLeaveEvent,\n PointMoveEvent,\n RemoveAllEvent,\n SaveEvent,\n UndoEvent,\n ModeChangeEvent,\n UnifiedMap,\n};\n"]}