{"version":3,"file":"static/js/2767.c5a7b0da.chunk.js","mappings":"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","sources":["components/Card.js","components/ConfirmationDialog.js","hooks/useCookieStatus.js","hooks/useUpdateEffect.js","plugins/BaseWindowPlugin.js","plugins/Bookmarks/Bookmarks.js","plugins/Bookmarks/BookmarksModel.js","plugins/Bookmarks/BookmarksView.js","plugins/Bookmarks/constants/index.js","../node_modules/@mui/icons-material/AddCircleOutline.js","../node_modules/@mui/icons-material/Bookmark.js","../node_modules/@mui/icons-material/BookmarkBorderOutlined.js","../node_modules/@mui/icons-material/Bookmarks.js","../node_modules/@mui/material/CardActionArea/cardActionAreaClasses.js","../node_modules/@mui/material/CardActionArea/CardActionArea.js","../node_modules/@mui/material/CardHeader/cardHeaderClasses.js","../node_modules/@mui/material/CardHeader/CardHeader.js","../node_modules/@mui/material/Card/cardClasses.js","../node_modules/@mui/material/Card/Card.js"],"sourcesContent":["import React from \"react\";\nimport propTypes from \"prop-types\";\nimport { styled } from \"@mui/material/styles\";\nimport {\n Card as MUICard,\n CardHeader,\n CardActionArea,\n Avatar,\n} from \"@mui/material\";\n\nconst StyledCard = styled(MUICard)(({ theme }) => ({\n marginBottom: theme.spacing(1),\n width: \"210px\",\n [theme.breakpoints.down(\"sm\")]: {\n boxShadow: \"none\",\n borderBottom: \"1px solid #ccc\",\n borderRadius: 0,\n margin: 0,\n width: \"100%\",\n justifyContent: \"left\",\n },\n}));\n\nconst StyledAvatar = styled(Avatar)(({ theme }) => ({\n background: theme.palette.text.primary,\n}));\n\nclass Card extends React.PureComponent {\n state = {\n open: false,\n text: \"\",\n };\n\n static propTypes = {\n abstract: propTypes.string.isRequired,\n icon: propTypes.object.isRequired,\n onClick: propTypes.func.isRequired,\n title: propTypes.string.isRequired,\n };\n\n static defaultProps = {\n abstract: \"Beskrivning saknas\",\n title: \"Titel saknas\",\n };\n\n render() {\n const { abstract, icon, onClick, title } = this.props;\n\n return (\n \n \n {icon}}\n title={title}\n subheader={abstract}\n />\n \n \n );\n }\n}\n\nexport default Card;\n","import React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Typography,\n} from \"@mui/material\";\n\n// Simple dialog that can be used to prompt the user before committing action.\nconst ConfirmationDialog = ({\n open,\n handleConfirm,\n handleAbort,\n titleName,\n contentDescription,\n cancel,\n confirm,\n}) => {\n return createPortal(\n {\n e.stopPropagation();\n }}\n >\n {titleName}\n \n {contentDescription}\n \n \n \n \n \n ,\n document.getElementById(\"map\")\n );\n};\n\nexport default ConfirmationDialog;\n","import React from \"react\";\nimport { functionalOk, thirdPartyOk } from \"../models/Cookie\";\n\n// A simple hook which will return an object stating wether functional- and third-party-cookies\n// are OK to use or not (depending on the users choice in the cookie-notice).\nexport default function useCookieStatus(globalObserver) {\n // Let's combine both statuses in one state-object since they will always be updated at the same time.\n const [cookieStatus, setCookieStatus] = React.useState({\n functionalCookiesOk: functionalOk(),\n thirdPartyCookiesOk: thirdPartyOk(),\n });\n\n // An effect subscribing to an event sent from the cookie-handler when the\n // cookie-settings change. If the settings change, we make sure to update the\n // state with the current cookie-status so that we can render the appropriate components.\n React.useEffect(() => {\n const cookieListener = globalObserver.subscribe(\n \"core.cookieLevelChanged\",\n () => {\n setCookieStatus({\n functionalCookiesOk: functionalOk(),\n thirdPartyCookiesOk: thirdPartyOk(),\n });\n }\n );\n return () => {\n cookieListener.unsubscribe();\n };\n }, [globalObserver]);\n\n return cookieStatus;\n}\n","import React from \"react\";\n// A simple usEffect-hook that does not run on the first render\nexport default function useUpdateEffect(func, deps = []) {\n const didMount = React.useRef(false);\n React.useEffect(() => {\n if (didMount.current) {\n return func();\n } else {\n didMount.current = true;\n }\n // The linter does not like when we have fun with custom effects :(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n","import React from \"react\";\nimport propTypes from \"prop-types\";\nimport { isMobile } from \"./../utils/IsMobile\";\nimport { createPortal } from \"react-dom\";\nimport { Hidden, ListItem, ListItemIcon, ListItemText } from \"@mui/material\";\nimport Window from \"../components/Window.js\";\nimport Card from \"../components/Card.js\";\nimport PluginControlButton from \"../components/PluginControlButton\";\n\nclass BaseWindowPlugin extends React.PureComponent {\n static propTypes = {\n app: propTypes.object.isRequired,\n children: propTypes.object.isRequired,\n custom: propTypes.object.isRequired,\n map: propTypes.object.isRequired,\n options: propTypes.object.isRequired,\n type: propTypes.string.isRequired,\n };\n\n constructor(props) {\n super(props);\n // 'type' is basically a unique identifier for each plugin\n this.type = props.type.toLowerCase() || undefined;\n\n // There will be defaults in props.custom, so that each plugin has own default title/description\n this.description = props.options.description || props.custom.description;\n\n // Should Window be visible at start?\n const visibleAtStart =\n (this.props.app.config.mapConfig.map.clean === false && // Never show in clean mode\n (isMobile\n ? props.options.visibleAtStartMobile\n : props.options.visibleAtStart)) ||\n false;\n\n // If plugin is shown at start, we want to register it as shown in the Analytics module too.\n // Normally, the event would be sent when user clicks on the button that activates the plugin,\n // but in this case there won't be any click as the window will be visible at start.\n if (visibleAtStart) {\n this.props.app.globalObserver.publish(\"analytics.trackEvent\", {\n eventName: \"pluginShown\",\n pluginName: this.type,\n activeMap: this.props.app.config.activeMap,\n });\n }\n\n // Title and Color are kept in state and not as class properties. Keeping them in state\n // ensures re-render when new props arrive and update the state variables (see componentDidUpdate() too).\n this.state = {\n title: props.options.title || props.custom.title || \"Unnamed plugin\",\n color: props.options.color || props.custom.color || null,\n windowVisible: visibleAtStart,\n };\n\n // Title is a special case: we want to use the state.title and pass on to Window in order\n // to update Window's title dynamically. At the same time, we want all other occurrences,\n // e.g. Widget or Drawer button's label to remain the same.\n this.title = props.options.title || props.custom.title || \"Unnamed plugin\";\n\n // Try to get values from admin's option. Fallback to customs from Plugin defaults, or finally to hard-coded values.\n this.width = props.options.width || props.custom.width || 400;\n this.height = props.options.height || props.custom.height || \"auto\";\n this.position = props.options.position || props.custom.position || \"left\";\n\n // Register Window in our global register\n props.app.registerWindowPlugin(this);\n\n // Subscribe to a global event that makes it possible to show/hide Windows.\n // First we prepare a unique event name for each plugin so it looks like '{pluginName}.showWindow'.\n const eventName = `${this.type}.showWindow`;\n // Next, subscribe to that event, expect 'opts' array.\n // To find all places where this event is publish, search for 'globalObserver.publish(\"show'\n props.app.globalObserver.subscribe(eventName, (opts) => {\n this.showWindow(opts);\n });\n\n // Same as above, but to close the window.\n const closeEventName = `${this.type}.closeWindow`;\n\n props.app.globalObserver.subscribe(closeEventName, () => {\n this.closeWindow();\n });\n }\n\n // Does not run on initial render, but runs on subsequential re-renders.\n componentDidUpdate(prevProps) {\n // Window's title and color can be updated on-the-flight, so we keep them\n // in state and ensure that state is updated when new props arrive.\n prevProps.custom.title !== this.props.custom.title &&\n this.setState({ title: this.props.custom.title });\n\n prevProps.custom.color !== this.props.custom.color &&\n this.setState({ color: this.props.custom.color });\n }\n\n pluginIsWidget(target) {\n return [\"left\", \"right\"].includes(target);\n }\n\n handleButtonClick = (e) => {\n this.showWindow({\n hideOtherPluginWindows: true,\n runCallback: true,\n });\n this.props.app.globalObserver.publish(\"core.onlyHideDrawerIfNeeded\");\n };\n\n showWindow = (opts = {}) => {\n const hideOtherPluginWindows = opts.hideOtherPluginWindows || true,\n runCallback = opts.runCallback || true;\n // Let the App know which tool is currently active\n this.props.app.activeTool = this.type;\n\n // Tell the Analytics model about this\n this.props.app.globalObserver.publish(\"analytics.trackEvent\", {\n eventName: \"pluginShown\",\n pluginName: this.type,\n activeMap: this.props.app.config.activeMap,\n });\n\n // AppModel keeps track of recently shown plugins.\n this.props.app.pushPluginIntoHistory({\n type: this.type,\n icon: this.props.custom.icon,\n title: this.title,\n description: this.description,\n });\n\n // Don't continue if visibility hasn't changed\n if (this.state.windowVisible === true) {\n return null;\n }\n\n hideOtherPluginWindows === true && this.props.app.onWindowOpen(this);\n\n this.setState(\n {\n windowVisible: true,\n },\n () => {\n // Notify the app that a plugin's visibility has changed\n this.props.app.globalObserver.publish(\"core.pluginVisibilityChanged\");\n\n // If there's a callback defined in custom, run it\n runCallback === true &&\n typeof this.props.custom.onWindowShow === \"function\" &&\n this.props.custom.onWindowShow();\n }\n );\n };\n\n closeWindow = () => {\n // If closeWindow was initiated by the tool that is currently\n // active, we should unset the activeTool property\n if (this.type === this.props.app.activeTool)\n this.props.app.activeTool = undefined;\n\n this.setState(\n {\n windowVisible: false,\n },\n () => {\n // Notify the app that a plugin's visibility has changed\n this.props.app.globalObserver.publish(\"core.pluginVisibilityChanged\");\n\n typeof this.props.custom.onWindowHide === \"function\" &&\n this.props.custom.onWindowHide();\n }\n );\n };\n /**\n * @summary Render the plugin and its buttons according to settings in admin.\n * @description See comments in code to follow the rendering logic.\n * @param {*} custom\n * @returns {object} React.Component\n * @memberof BaseWindowPlugin\n */\n renderWindow(custom) {\n const { target } = this.props.options;\n // BaseWindowPlugin, which calls this method, will supply an object.\n // If that object contains a render() function, we want to call it\n // and bypass any other functionality from this method.\n return typeof custom?.render === \"function\" ? (\n custom.render()\n ) : (\n // If there was not custom render method, we do \"normal\" rendering.\n // That includes rendering the plugin Window itself, as well as a\n // button (that will trigger opening of the plugin Window).\n <>\n t.type === \"layerswitcher\"\n )}\n >\n {/* We have to pass windowVisible down to the children so that we can conditionally render\n the component, since it does not accept components with display: \"none\". We use the\n windowVisible-prop to make sure that we don't render the when the window\n is not visible.*/}\n {React.cloneElement(this.props.children, {\n windowVisible: this.state.windowVisible,\n })}\n \n {/* Always render a Drawer button unless its target is \"hidden\". \n It's a backup for plugins render elsewhere: we hide \n Widget and Control buttons on small screens and fall \n back to Drawer button). */}\n {target !== \"hidden\" && this.renderDrawerButton()}\n {/* Widget buttons must also render a Widget */}\n {this.pluginIsWidget(target) &&\n this.renderWidgetButton(`${target}-column`)}\n {/* Finally, render a Control button if target has that value */}\n {target === \"control\" && this.renderControlButton()}\n \n );\n }\n\n /**\n * This is a bit of a special case. This method will render\n * not only plugins specified as Drawer plugins (target===toolbar),\n * but it will also render Widget and Control plugins - given some special condition.\n *\n * Those special conditions are small screens, where there's no screen\n * estate to render the Widget button in Map Overlay.\n */\n renderDrawerButton() {\n return createPortal(\n \n \n {this.props.custom.icon}\n \n \n ,\n document.getElementById(\"plugin-buttons\")\n );\n }\n\n renderWidgetButton(id) {\n return createPortal(\n // Hide Widget button on small screens, see renderDrawerButton too\n \n \n ,\n document.getElementById(id)\n );\n }\n\n renderControlButton() {\n return createPortal(\n // Hide Control button on small screens, see renderDrawerButton too\n \n \n ,\n document.getElementById(\"plugin-control-buttons\")\n );\n }\n\n render() {\n // Don't render if \"clean\" query param is specified, otherwise go on\n return (\n this.props.app.config.mapConfig.map.clean !== true &&\n this.renderWindow(this.props.custom)\n );\n }\n}\n\nexport default BaseWindowPlugin;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport BaseWindowPlugin from \"../BaseWindowPlugin\";\nimport BookmarksModel from \"./BookmarksModel\";\nimport BookmarksView from \"./BookmarksView\";\nimport BookmarksIcon from \"@mui/icons-material/Bookmarks\";\n\n// Constants\nimport { STORAGE_KEY } from \"./constants\";\n\n/**\n * @summary Main class for the Bookmarks plugin.\n * @description The Bookmarks plugin allows the user to store bookmarks\n * in localStorage. A bookmark contains the map, x,y, zoom level, visible layers etc.\n *\n * @class Bookmarks\n * @extends {React.Component}\n */\n\nconst Bookmarks = (props) => {\n const [bookmarksModel] = React.useState(\n () =>\n new BookmarksModel({\n app: props.app,\n map: props.map,\n storageKey: STORAGE_KEY,\n })\n );\n const [bookmarks, setBookmarks] = React.useState(bookmarksModel.bookmarks);\n\n // Read bookmarks from local storage on component mount\n React.useEffect(() => {\n bookmarksModel.readFromStorage();\n setBookmarks(bookmarksModel.bookmarks);\n }, [bookmarksModel]);\n\n return (\n ,\n title: \"Bokmärken\",\n description: \"Användarens bokmärken\",\n height: 450,\n width: 400,\n }}\n >\n \n \n );\n};\n\nBookmarks.propTypes = {\n app: PropTypes.object.isRequired,\n map: PropTypes.object.isRequired,\n options: PropTypes.object,\n};\n\nBookmarks.defaultProps = {\n options: {},\n};\n\nexport default Bookmarks;\n","/**\n * @summary Handles the users bookmarks in localStorage\n * @description Read/Writes bookmarks\n *\n * @class BookmarksModel\n */\n\n/**\n * Store bookmarks using a key with version.\n * In future we might want to create backwardcompatibility if we add functionality.\n */\n\nimport { isValidLayerId } from \"../../utils/Validator\";\nimport LocalStorageHelper from \"../../utils/LocalStorageHelper\";\n\nclass BookmarksModel {\n #storageKey;\n\n constructor(settings) {\n this.map = settings.map;\n this.app = settings.app;\n this.globalObserver = settings.app.globalObserver;\n this.bookmarks = this.readFromStorage() || {};\n this.#storageKey = settings.storageKey || \"bookmarks\";\n }\n\n getVisibleLayers() {\n return this.map\n .getLayers()\n .getArray()\n .filter(\n (layer) =>\n layer.getVisible() &&\n layer.getProperties().name &&\n isValidLayerId(layer.getProperties().name)\n )\n .map((layer) => layer.getProperties().name)\n .join(\",\");\n }\n\n setVisibleLayers(strLayers) {\n let layers = strLayers.split(\",\");\n this.map\n .getLayers()\n .getArray()\n .filter(\n (layer) =>\n layer.getProperties().name &&\n isValidLayerId(layer.getProperties().name)\n )\n .forEach((layer) => {\n layer.setVisible(layers.indexOf(layer.getProperties().name) > -1);\n });\n }\n\n getMapState() {\n const view = this.map.getView();\n const viewCenter = view.getCenter();\n const pos = {\n x: viewCenter[0],\n y: viewCenter[1],\n z: view.getZoom(),\n };\n\n return {\n m: this.app.config.activeMap,\n l: this.getVisibleLayers(),\n ...pos,\n };\n }\n\n setMapState(bookmark) {\n if (!bookmark) {\n return;\n }\n bookmark = this.getDecodedBookmark(bookmark);\n this.setVisibleLayers(bookmark.settings.l);\n let view = this.map.getView();\n view.setCenter([bookmark.settings.x, bookmark.settings.y]);\n view.setZoom(bookmark.settings.z);\n bookmark = null;\n }\n\n readFromStorage() {\n // Check if we have legacy bookmarks in localStorage.\n if (localStorage.getItem(\"bookmarks_v1.0\")) {\n // TODO: Describe in https://github.com/hajkmap/Hajk/wiki/Cookies-in-Hajk and add the functionalOk() hook\n const legacyBookmarks = JSON.parse(\n localStorage.getItem(\"bookmarks_v1.0\")\n );\n const newBookmarks = {};\n legacyBookmarks.forEach((bookmark) => {\n const decodedBookmark = this.getDecodedBookmark(bookmark);\n if (!decodedBookmark) return;\n const keyName = decodedBookmark.settings.m || this.app.config.activeMap;\n try {\n LocalStorageHelper.setKeyName(keyName);\n } catch (error) {\n console.log(\n `An error occurred while trying to set the bookmarks in localStorage: ${error}`\n );\n }\n\n const inStorage = LocalStorageHelper.get(\n this.#storageKey || \"bookmarks\"\n );\n newBookmarks[keyName] = inStorage || {};\n newBookmarks[keyName][decodedBookmark.name] = {\n settings: bookmark.settings,\n };\n\n LocalStorageHelper.set(\n this.#storageKey || \"bookmarks\",\n newBookmarks[keyName]\n );\n });\n\n localStorage.removeItem(\"bookmarks_v1.0\");\n\n // Change back to current map.\n LocalStorageHelper.setKeyName(this.app.config.activeMap);\n }\n\n const inStorage = LocalStorageHelper.get(this.#storageKey);\n this.bookmarks = inStorage || {};\n }\n\n writeToStorage() {\n // TODO: Describe in https://github.com/hajkmap/Hajk/wiki/Cookies-in-Hajk and add the functionalOk() hook\n LocalStorageHelper.set(this.#storageKey, this.bookmarks);\n }\n\n getDecodedBookmark(bookmark) {\n let decoded = null;\n if (bookmark) {\n decoded = { ...bookmark };\n decoded.settings = JSON.parse(atob(bookmark.settings));\n }\n return decoded;\n }\n\n bookmarkWithNameExists(name) {\n return Object.keys(this.bookmarks).includes(name);\n }\n\n replaceBookmark(bookmark) {\n if (bookmark) {\n bookmark.settings = btoa(JSON.stringify(this.getMapState()));\n this.writeToStorage();\n }\n }\n\n addBookmark(name, allowReplace = false) {\n // Check if bookmark exist and if we should replace it.\n if (this.bookmarkWithNameExists(name) && allowReplace) {\n this.replaceBookmark(this.bookmarks[name]);\n return;\n }\n\n this.bookmarks[name] = {\n settings: btoa(JSON.stringify(this.getMapState())),\n };\n this.writeToStorage();\n }\n\n deleteBookmark(name) {\n delete this.bookmarks[name];\n this.writeToStorage();\n }\n\n handleChangeCookieSettingsClick = () => {\n this.globalObserver.publish(\"core.showCookieBanner\");\n };\n}\n\nexport default BookmarksModel;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { styled } from \"@mui/material/styles\";\nimport Button from \"@mui/material/Button\";\nimport TextField from \"@mui/material/TextField\";\nimport Box from \"@mui/material/Box\";\n\nimport AddCircleOutlineIcon from \"@mui/icons-material/AddCircleOutline\";\nimport BookmarkIcon from \"@mui/icons-material/Bookmark\";\nimport BookmarkOutlinedIcon from \"@mui/icons-material/BookmarkBorderOutlined\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Typography from \"@mui/material/Typography\";\n\nimport ConfirmationDialog from \"../../components/ConfirmationDialog\";\n\n// Hooks\nimport useUpdateEffect from \"hooks/useUpdateEffect\";\nimport useCookieStatus from \"hooks/useCookieStatus\";\n\nconst List = styled(\"div\")(() => ({\n display: \"flex\",\n flex: \"1 0 100%\",\n flexFlow: \"column nowrap\",\n marginTop: \"10px\",\n}));\n\nconst ListItem = styled(\"div\")(({ theme }) => ({\n display: \"flex\",\n position: \"relative\",\n flex: \"1 0 100%\",\n justifyContent: \"flex-start\",\n border: `1px solid ${theme.palette.grey[400]}`,\n transform: \"translateZ(1px)\",\n borderBottom: \"none\",\n \"&:first-of-type\": {\n borderRadius: \"3px 3px 0 0\",\n },\n \"&:last-child\": {\n borderBottom: `1px solid ${theme.palette.grey[400]}`,\n borderRadius: \"0 0 3px 3px\",\n },\n}));\n\nconst AddButton = styled(Button)(() => ({\n flex: \"1 0 auto\",\n whiteSpace: \"nowrap\",\n height: \"0%\",\n top: \"-22px\",\n marginLeft: \"10px\",\n}));\n\nconst BookmarkButton = styled(Button)(({ theme }) => ({\n display: \"flex\",\n justifyContent: \"flex-start\",\n flex: \"1 0 100%\",\n transform: \"translateZ(1px)\",\n \"& svg\": {\n color: theme.palette.text.secondary,\n },\n \"&:hover svg.on\": {\n opacity: 0.7,\n },\n}));\n\nconst DeleteButton = styled(IconButton)(({ theme }) => ({\n display: \"block\",\n position: \"absolute\",\n top: 0,\n right: 0,\n padding: \"5px\",\n width: \"36px\",\n height: \"36px\",\n borderRadius: \"100% 0 0 100%\",\n \"&:hover svg\": {\n color: theme.palette.error.dark,\n stoke: theme.palette.error.dark,\n fill: theme.palette.error.dark,\n },\n}));\n\nconst BookmarkIconSpan = styled(\"span\")(({ theme }) => ({\n display: \"inline-block\",\n position: \"relative\",\n width: \"24px\",\n height: \"24px\",\n marginRight: \"8px\",\n \"& .on\": {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"24px\",\n height: \"24px\",\n color: theme.palette.text.secondary,\n stoke: theme.palette.text.secondary,\n fill: theme.palette.text.secondary,\n opacity: 0.001,\n transition: \"all 300ms\",\n },\n}));\n\nconst ItemNameSpan = styled(\"span\")(() => ({\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxWidth: \"calc(100% - 71px)\",\n textTransform: \"none\",\n}));\n\nconst StyledDeleteIcon = styled(DeleteIcon)(() => ({\n display: \"block\",\n width: \"24px\",\n height: \"24px\",\n transition: \"all 300ms\",\n}));\n\nconst BookmarksView = (props) => {\n const { globalObserver } = props;\n const { functionalCookiesOk } = useCookieStatus(globalObserver);\n\n const [name, setName] = React.useState(\"\");\n const [error, setError] = React.useState(false);\n const [helperText, setHelperText] = React.useState(\" \");\n const [bookmarks, setBookmarks] = React.useState({});\n const [showRemovalConfirmation, setShowRemovalConfirmation] =\n React.useState(false);\n const [bookmarkToDelete, setBookmarkToDelete] = React.useState(null);\n\n // Update bookmarks when model changes.\n useUpdateEffect(() => {\n setBookmarks(props.model.bookmarks);\n }, [props.model.bookmarks]);\n\n const addBookmark = (e) => {\n if (name.trim() === \"\") {\n return;\n }\n props.model.addBookmark(name, true);\n\n setName(\"\");\n checkBookmarkName(\"\");\n };\n\n const openBookmark = (bookmark) => {\n props.model.setMapState(bookmark);\n };\n\n const deleteBookmark = (id) => {\n setShowRemovalConfirmation(true);\n setBookmarkToDelete(id);\n };\n\n const checkBookmarkName = (name) => {\n if (name.trim() === \"\") {\n setError(false);\n setHelperText(\" \");\n return false;\n }\n\n const exists = props.model.bookmarkWithNameExists(name);\n\n if (exists) {\n setError(true);\n setHelperText(`Namnet upptaget. Ersätt bokmärke \"${name}\"?`);\n return false;\n } else {\n setError(false);\n setHelperText(\" \");\n return true;\n }\n };\n\n const handleChange = (event) => {\n setName(event.target.value);\n };\n\n const handleKeyUp = (e) => {\n checkBookmarkName(e.target.value);\n\n if (e.nativeEvent.keyCode === 13 /* Enter, yes we all know... */) {\n addBookmark();\n }\n };\n\n const handleRemoveConfirmation = (result) => {\n setShowRemovalConfirmation(false);\n if (result) {\n props.model.deleteBookmark(bookmarkToDelete);\n }\n setBookmarkToDelete(null);\n };\n\n const handleRemoveConfirmationAbort = () => {\n setShowRemovalConfirmation(false);\n };\n\n const renderCookiesWarning = () => {\n return (\n
\n \n Du har inte tillåtit funktionella kakor. För att kunna spara bokmärken\n måste du tillåta funktionella kakor.\n \n \n Cookie-inställningar\n \n
\n );\n };\n\n return functionalCookiesOk ? (\n
\n \n Skapa ett bokmärke med kartans synliga lager, aktuella zoomnivå och\n utbredning.\n \n \n \n }\n onClick={addBookmark}\n >\n {error ? \"Ersätt\" : \"Lägg till\"}\n \n \n\n \n {Object.keys(bookmarks).map((id) => {\n const bookmark = bookmarks[id];\n return (\n \n openBookmark(bookmark)}>\n \n \n \n \n {id}\n \n deleteBookmark(id)}\n >\n \n \n \n );\n })}\n \n \n
\n ) : (\n renderCookiesWarning()\n );\n};\n\nBookmarksView.propTypes = {\n model: PropTypes.object.isRequired,\n};\n\nexport default BookmarksView;\n","export const STORAGE_KEY = `bookmarks`;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"\n}), 'AddCircleOutline');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2z\"\n}), 'Bookmark');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2zm0 15-5-2.18L7 18V5h10v13z\"\n}), 'BookmarkBorderOutlined');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m19 18 2 1V3c0-1.1-.9-2-2-2H8.99C7.89 1 7 1.9 7 3h10c1.1 0 2 .9 2 2v13zM15 5H5c-1.1 0-2 .9-2 2v16l7-3 7 3V7c0-1.1-.9-2-2-2z\"\n}), 'Bookmarks');\nexports.default = _default;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getCardActionAreaUtilityClass(slot) {\n return generateUtilityClass('MuiCardActionArea', slot);\n}\nconst cardActionAreaClasses = generateUtilityClasses('MuiCardActionArea', ['root', 'focusVisible', 'focusHighlight']);\nexport default cardActionAreaClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\", \"className\", \"focusVisibleClassName\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport cardActionAreaClasses, { getCardActionAreaUtilityClass } from './cardActionAreaClasses';\nimport ButtonBase from '../ButtonBase';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root'],\n focusHighlight: ['focusHighlight']\n };\n return composeClasses(slots, getCardActionAreaUtilityClass, classes);\n};\nconst CardActionAreaRoot = styled(ButtonBase, {\n name: 'MuiCardActionArea',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})(({\n theme\n}) => ({\n display: 'block',\n textAlign: 'inherit',\n width: '100%',\n [`&:hover .${cardActionAreaClasses.focusHighlight}`]: {\n opacity: (theme.vars || theme).palette.action.hoverOpacity,\n '@media (hover: none)': {\n opacity: 0\n }\n },\n [`&.${cardActionAreaClasses.focusVisible} .${cardActionAreaClasses.focusHighlight}`]: {\n opacity: (theme.vars || theme).palette.action.focusOpacity\n }\n}));\nconst CardActionAreaFocusHighlight = styled('span', {\n name: 'MuiCardActionArea',\n slot: 'FocusHighlight',\n overridesResolver: (props, styles) => styles.focusHighlight\n})(({\n theme\n}) => ({\n overflow: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n borderRadius: 'inherit',\n opacity: 0,\n backgroundColor: 'currentcolor',\n transition: theme.transitions.create('opacity', {\n duration: theme.transitions.duration.short\n })\n}));\nconst CardActionArea = /*#__PURE__*/React.forwardRef(function CardActionArea(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiCardActionArea'\n });\n const {\n children,\n className,\n focusVisibleClassName\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = props;\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(CardActionAreaRoot, _extends({\n className: clsx(classes.root, className),\n focusVisibleClassName: clsx(focusVisibleClassName, classes.focusVisible),\n ref: ref,\n ownerState: ownerState\n }, other, {\n children: [children, /*#__PURE__*/_jsx(CardActionAreaFocusHighlight, {\n className: classes.focusHighlight,\n ownerState: ownerState\n })]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardActionArea.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * @ignore\n */\n focusVisibleClassName: PropTypes.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default CardActionArea;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getCardHeaderUtilityClass(slot) {\n return generateUtilityClass('MuiCardHeader', slot);\n}\nconst cardHeaderClasses = generateUtilityClasses('MuiCardHeader', ['root', 'avatar', 'action', 'content', 'title', 'subheader']);\nexport default cardHeaderClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"action\", \"avatar\", \"className\", \"component\", \"disableTypography\", \"subheader\", \"subheaderTypographyProps\", \"title\", \"titleTypographyProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport Typography from '../Typography';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport cardHeaderClasses, { getCardHeaderUtilityClass } from './cardHeaderClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root'],\n avatar: ['avatar'],\n action: ['action'],\n content: ['content'],\n title: ['title'],\n subheader: ['subheader']\n };\n return composeClasses(slots, getCardHeaderUtilityClass, classes);\n};\nconst CardHeaderRoot = styled('div', {\n name: 'MuiCardHeader',\n slot: 'Root',\n overridesResolver: (props, styles) => _extends({\n [`& .${cardHeaderClasses.title}`]: styles.title,\n [`& .${cardHeaderClasses.subheader}`]: styles.subheader\n }, styles.root)\n})({\n display: 'flex',\n alignItems: 'center',\n padding: 16\n});\nconst CardHeaderAvatar = styled('div', {\n name: 'MuiCardHeader',\n slot: 'Avatar',\n overridesResolver: (props, styles) => styles.avatar\n})({\n display: 'flex',\n flex: '0 0 auto',\n marginRight: 16\n});\nconst CardHeaderAction = styled('div', {\n name: 'MuiCardHeader',\n slot: 'Action',\n overridesResolver: (props, styles) => styles.action\n})({\n flex: '0 0 auto',\n alignSelf: 'flex-start',\n marginTop: -4,\n marginRight: -8,\n marginBottom: -4\n});\nconst CardHeaderContent = styled('div', {\n name: 'MuiCardHeader',\n slot: 'Content',\n overridesResolver: (props, styles) => styles.content\n})({\n flex: '1 1 auto'\n});\nconst CardHeader = /*#__PURE__*/React.forwardRef(function CardHeader(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiCardHeader'\n });\n const {\n action,\n avatar,\n className,\n component = 'div',\n disableTypography = false,\n subheader: subheaderProp,\n subheaderTypographyProps,\n title: titleProp,\n titleTypographyProps\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n component,\n disableTypography\n });\n const classes = useUtilityClasses(ownerState);\n let title = titleProp;\n if (title != null && title.type !== Typography && !disableTypography) {\n title = /*#__PURE__*/_jsx(Typography, _extends({\n variant: avatar ? 'body2' : 'h5',\n className: classes.title,\n component: \"span\",\n display: \"block\"\n }, titleTypographyProps, {\n children: title\n }));\n }\n let subheader = subheaderProp;\n if (subheader != null && subheader.type !== Typography && !disableTypography) {\n subheader = /*#__PURE__*/_jsx(Typography, _extends({\n variant: avatar ? 'body2' : 'body1',\n className: classes.subheader,\n color: \"text.secondary\",\n component: \"span\",\n display: \"block\"\n }, subheaderTypographyProps, {\n children: subheader\n }));\n }\n return /*#__PURE__*/_jsxs(CardHeaderRoot, _extends({\n className: clsx(classes.root, className),\n as: component,\n ref: ref,\n ownerState: ownerState\n }, other, {\n children: [avatar && /*#__PURE__*/_jsx(CardHeaderAvatar, {\n className: classes.avatar,\n ownerState: ownerState,\n children: avatar\n }), /*#__PURE__*/_jsxs(CardHeaderContent, {\n className: classes.content,\n ownerState: ownerState,\n children: [title, subheader]\n }), action && /*#__PURE__*/_jsx(CardHeaderAction, {\n className: classes.action,\n ownerState: ownerState,\n children: action\n })]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardHeader.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The action to display in the card header.\n */\n action: PropTypes.node,\n /**\n * The Avatar element to display.\n */\n avatar: PropTypes.node,\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * If `true`, `subheader` and `title` won't be wrapped by a Typography component.\n * This can be useful to render an alternative Typography variant by wrapping\n * the `title` text, and optional `subheader` text\n * with the Typography component.\n * @default false\n */\n disableTypography: PropTypes.bool,\n /**\n * The content of the component.\n */\n subheader: PropTypes.node,\n /**\n * These props will be forwarded to the subheader\n * (as long as disableTypography is not `true`).\n */\n subheaderTypographyProps: PropTypes.object,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The content of the component.\n */\n title: PropTypes.node,\n /**\n * These props will be forwarded to the title\n * (as long as disableTypography is not `true`).\n */\n titleTypographyProps: PropTypes.object\n} : void 0;\nexport default CardHeader;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getCardUtilityClass(slot) {\n return generateUtilityClass('MuiCard', slot);\n}\nconst cardClasses = generateUtilityClasses('MuiCard', ['root']);\nexport default cardClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"raised\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Paper from '../Paper';\nimport { getCardUtilityClass } from './cardClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, getCardUtilityClass, classes);\n};\nconst CardRoot = styled(Paper, {\n name: 'MuiCard',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})(() => {\n return {\n overflow: 'hidden'\n };\n});\nconst Card = /*#__PURE__*/React.forwardRef(function Card(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiCard'\n });\n const {\n className,\n raised = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n raised\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(CardRoot, _extends({\n className: clsx(classes.root, className),\n elevation: raised ? 8 : undefined,\n ref: ref,\n ownerState: ownerState\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Card.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * If `true`, the card will use raised styling.\n * @default false\n */\n raised: chainPropTypes(PropTypes.bool, props => {\n if (props.raised && props.variant === 'outlined') {\n return new Error('MUI: Combining `raised={true}` with `variant=\"outlined\"` has no effect.');\n }\n return null;\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Card;"],"names":["StyledCard","styled","MUICard","theme","marginBottom","spacing","width","breakpoints","down","boxShadow","borderBottom","borderRadius","margin","justifyContent","StyledAvatar","Avatar","background","palette","text","primary","Card","React","state","open","render","abstract","icon","onClick","title","this","props","avatar","subheader","defaultProps","handleConfirm","handleAbort","titleName","contentDescription","cancel","confirm","createPortal","onClose","onMouseDown","e","stopPropagation","variant","document","getElementById","useCookieStatus","globalObserver","cookieStatus","setCookieStatus","functionalCookiesOk","functionalOk","thirdPartyCookiesOk","thirdPartyOk","cookieListener","subscribe","unsubscribe","useUpdateEffect","func","deps","didMount","current","BaseWindowPlugin","constructor","super","handleButtonClick","showWindow","hideOtherPluginWindows","runCallback","app","publish","opts","activeTool","type","eventName","pluginName","activeMap","config","pushPluginIntoHistory","custom","description","windowVisible","onWindowOpen","setState","onWindowShow","closeWindow","undefined","onWindowHide","toLowerCase","options","visibleAtStart","mapConfig","map","clean","isMobile","visibleAtStartMobile","color","height","position","registerWindowPlugin","closeEventName","componentDidUpdate","prevProps","pluginIsWidget","target","includes","renderWindow","onResize","onMaximize","onMinimize","draggingEnabled","customPanelHeaderButtons","resizingEnabled","scrollable","allowMaximizedWindow","disablePadding","mode","layerswitcherConfig","tools","find","t","children","renderDrawerButton","renderWidgetButton","renderControlButton","mdUp","button","divider","selected","id","mdDown","Bookmarks","bookmarksModel","BookmarksModel","storageKey","STORAGE_KEY","bookmarks","setBookmarks","readFromStorage","model","settings","handleChangeCookieSettingsClick","getVisibleLayers","getLayers","getArray","filter","layer","getVisible","getProperties","name","isValidLayerId","join","setVisibleLayers","strLayers","layers","split","forEach","setVisible","indexOf","getMapState","view","getView","viewCenter","getCenter","pos","x","y","z","getZoom","m","l","setMapState","bookmark","getDecodedBookmark","setCenter","setZoom","localStorage","getItem","legacyBookmarks","JSON","parse","newBookmarks","decodedBookmark","keyName","LocalStorageHelper","error","console","log","inStorage","removeItem","writeToStorage","decoded","atob","bookmarkWithNameExists","Object","keys","replaceBookmark","btoa","stringify","addBookmark","allowReplace","deleteBookmark","List","display","flex","flexFlow","marginTop","ListItem","border","grey","transform","AddButton","Button","whiteSpace","top","marginLeft","BookmarkButton","secondary","opacity","DeleteButton","IconButton","right","padding","dark","stoke","fill","BookmarkIconSpan","marginRight","left","transition","ItemNameSpan","overflow","textOverflow","maxWidth","textTransform","StyledDeleteIcon","DeleteIcon","setName","setError","helperText","setHelperText","showRemovalConfirmation","setShowRemovalConfirmation","bookmarkToDelete","setBookmarkToDelete","trim","checkBookmarkName","sx","alignItems","placeholder","label","value","onChange","event","onKeyUp","nativeEvent","keyCode","size","startIcon","openBookmark","className","fontSize","result","fullWidth","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","getCardActionAreaUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","CardActionAreaRoot","ButtonBase","overridesResolver","styles","root","textAlign","cardActionAreaClasses","vars","action","hoverOpacity","focusOpacity","CardActionAreaFocusHighlight","focusHighlight","pointerEvents","bottom","backgroundColor","transitions","create","duration","short","inProps","ref","useThemeProps","focusVisibleClassName","other","_objectWithoutPropertiesLoose","ownerState","classes","composeClasses","useUtilityClasses","_jsxs","_extends","clsx","focusVisible","_jsx","getCardHeaderUtilityClass","CardHeaderRoot","cardHeaderClasses","CardHeaderAvatar","CardHeaderAction","alignSelf","CardHeaderContent","content","component","disableTypography","subheaderProp","subheaderTypographyProps","titleProp","titleTypographyProps","Typography","as","getCardUtilityClass","CardRoot","Paper","raised","elevation"],"sourceRoot":""}