* A special visualisation element which allows to create a full copy (including all tags) of a node
*/
import Popup from "../../Base/Popup.svelte"
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"
import {UIEventSource} from "../../../Logic/UIEventSource"
import type {Feature} from "geojson"
import NewPointLocationInput from "../../BigComponents/NewPointLocationInput.svelte"
import NextButton from "../../Base/NextButton.svelte"
import {GeoOperations} from "../../../Logic/GeoOperations"
import type {WayId} from "../../../Models/OsmFeature"
import {Tag} from "../../../Logic/Tags/Tag"
import {twJoin} from "tailwind-merge"
import Translations from "../../i18n/Translations"
import OpenBackgroundSelectorButton from "../../BigComponents/OpenBackgroundSelectorButton.svelte"
import Tr from "../../Base/Tr.svelte"
import ThemeViewState from "../../../Models/ThemeViewState"
import TagExplanation from "../TagExplanation.svelte"
import {And} from "../../../Logic/Tags/And"
import Loading from "../../Base/Loading.svelte"
import CreateNewNodeAction from "../../../Logic/Osm/Actions/CreateNewNodeAction"
import DocumentDuplicate from "@babeard/svelte-heroicons/solid/DocumentDuplicate"
export let state: ThemeViewState
export let layer: LayerConfig
export let tags: UIEventSource<Record<string,string>>
export let feature: Feature
let c = GeoOperations.centerpointCoordinates(feature)
let coordinate: {lon: number;lat: number} = {lat: c[1],lon: c[0]}
let preciseCoordinate: UIEventSource<{lon: number;lat: number}> = new UIEventSource(undefined)
let snappedToObject: UIEventSource<WayId> = new UIEventSource<WayId>(undefined)
// Small helper variable: if the map is tapped, we should let the 'Next'-button grab some attention as users have to click _that_ to continue, not the map
let preciseInputIsTapped = false
const forbiddenKeys = new Set(["id", "timestamp", "user", "changeset", "version", "uid"])
let asTags = tags.map(tgs => Object.keys(tgs).filter(k => !k.startsWith("_") && !forbiddenKeys.has(k)).map(k => new Tag(k, tgs[k])))
let showPopup: UIEventSource<boolean> = new UIEventSource(false)